Explorar o código

fix 回收书单的图片放大查看&编辑数据

ylong hai 8 meses
pai
achega
7281def4a1

+ 13 - 0
src/components/CommonPage/InputNumberRange.vue

@@ -23,6 +23,8 @@
 </template>
 
 <script setup>
+  import { reactive, watch } from 'vue';
+
   const emit = defineEmits(['update:modelValue', 'change']);
 
   const props = defineProps({
@@ -43,11 +45,22 @@
       default: () => ({})
     }
   });
+  
   const form = reactive({
     minValue: props.modelValue[0] || void 0,
     maxValue: props.modelValue[1] || void 0
   });
 
+  // 监听 modelValue 的变化,同步更新内部状态
+  watch(
+    () => props.modelValue,
+    (newValue) => {
+      form.minValue = newValue?.[0] || void 0;
+      form.maxValue = newValue?.[1] || void 0;
+    },
+    { deep: true }
+  );
+
   function handleNumberChange() {
     emit('update:modelValue', [form.minValue, form.maxValue]);
     emit('change', {

+ 15 - 2
src/views/recycle/bookPushErpLog/components/book-base-info.vue

@@ -41,12 +41,15 @@
                 </div>
             </div>
         </div>
+
+        <books-edit ref="booksEditRef" @success="reload" />
     </div>
 </template>
 
 <script setup>
     import { dayjs } from 'element-plus';
-    const emit = defineEmits(['click']);
+    import booksEdit from '@/views/data/books/components/books-edit.vue';
+    const emit = defineEmits(['refresh']);
 
     const props = defineProps({
         row: {
@@ -55,7 +58,17 @@
         }
     });
 
+    const booksEditRef = ref(null);
     function handleClick(row) {
-        emit('click', row);
+        if (!row.bookId) {
+            return;
+        }
+        let params = {
+            id: row.bookId
+        };
+        booksEditRef.value?.handleOpen(params);
+    }
+    function reload() {
+        emit('refresh');
     }
 </script>

+ 2 - 1
src/views/recycle/bookPushErpLog/index.vue

@@ -21,9 +21,10 @@
                 />
             </template>
             <template #baseInfo="{ row }">
-                <book-base-info :row="row" />
+                <book-base-info :row="row" @refresh="reload" />
             </template>
         </common-table>
+
     </ele-page>
 </template>
 

+ 335 - 332
src/views/recycle/bookStat/index.vue

@@ -1,355 +1,358 @@
 <template>
-  <ele-page flex-table>
-    <book-search @search="reload"></book-search>
+    <ele-page flex-table>
+        <book-search @search="reload"></book-search>
 
-    <common-table
-      ref="pageRef"
-      :pageConfig="pageConfig"
-      :columns="columns"
-      :tools="false"
-      @sort-change="handleSortChange"
-    >
-      <template #toolbar>
-        <el-radio-group @change="handleStatusChange" v-model="searchType">
-          <el-radio-button label="全部" value="0" />
-          <el-radio-button label="已加入回收书单(正在回收)" value="1" />
-          <el-radio-button label="已加入回收书单(暂停回收)" value="2" />
-          <el-radio-button label="未加入回收书单" value="3" />
-          <el-radio-button label="未加入回收书单(手动暂停)" value="5" />
-          <el-radio-button label="黑名单" value="4" />
-        </el-radio-group>
-
-        <span class="ml-8"></span>
-        <el-button
-          type="warning"
-          plain
-          v-permission="'recycle:bookStat:batchRemoveBooklist'"
-          @click="handleOptBooklist('remove')"
-          v-if="['1', '2'].includes(searchType)"
-        >
-          移除回收书单
-        </el-button>
-        <el-button
-          type="success"
-          plain
-          v-permission="'recycle:bookStat:batchAddBooklist'"
-          @click="handleOptBooklist('add')"
-          v-if="['3', '4', '5'].includes(searchType)"
-        >
-          加入回收书单
-        </el-button>
-        <el-button
-          type="warning"
-          plain
-          v-permission="'recycle:bookStat:batchRemoveBlacklist'"
-          @click="handleOptBlacklist('remove')"
-          v-if="searchType === '4'"
-        >
-          移除黑名单
-        </el-button>
-        <el-button
-          type="danger"
-          plain
-          v-permission="'recycle:bookStat:batchAddBlacklist'"
-          @click="handleOptBlacklist('add')"
-          v-if="searchType !== '4'"
+        <common-table
+            ref="pageRef"
+            :pageConfig="pageConfig"
+            :columns="columns"
+            :tools="false"
+            @sort-change="handleSortChange"
         >
-          加黑名单
-        </el-button>
+            <template #toolbar>
+                <el-radio-group
+                    @change="handleStatusChange"
+                    v-model="searchType"
+                >
+                    <el-radio-button label="全部" value="0" />
+                    <el-radio-button
+                        label="已加入回收书单(正在回收)"
+                        value="1"
+                    />
+                    <el-radio-button
+                        label="已加入回收书单(暂停回收)"
+                        value="2"
+                    />
+                    <el-radio-button label="未加入回收书单" value="3" />
+                    <el-radio-button
+                        label="未加入回收书单(手动暂停)"
+                        value="5"
+                    />
+                    <el-radio-button label="黑名单" value="4" />
+                </el-radio-group>
 
-        <el-button
-          type="warning"
-          plain
-          v-permission="'recycle:bookStat:batchPauseRecycle'"
-          @click="handleOptRecycle('pause')"
-          v-if="searchType === '1'"
-        >
-          暂停回收
-        </el-button>
-        <el-button
-          type="warning"
-          plain
-          v-permission="'recycle:bookStat:batchStartRecycle'"
-          @click="handleOptRecycle('start')"
-          v-if="searchType === '2'"
-        >
-          开启回收
-        </el-button>
+                <span class="ml-8"></span>
+                <el-button
+                    type="warning"
+                    plain
+                    v-permission="'recycle:bookStat:batchRemoveBooklist'"
+                    @click="handleOptBooklist('remove')"
+                    v-if="['1', '2'].includes(searchType)"
+                >
+                    移除回收书单
+                </el-button>
+                <el-button
+                    type="success"
+                    plain
+                    v-permission="'recycle:bookStat:batchAddBooklist'"
+                    @click="handleOptBooklist('add')"
+                    v-if="['3', '4', '5'].includes(searchType)"
+                >
+                    加入回收书单
+                </el-button>
+                <el-button
+                    type="warning"
+                    plain
+                    v-permission="'recycle:bookStat:batchRemoveBlacklist'"
+                    @click="handleOptBlacklist('remove')"
+                    v-if="searchType === '4'"
+                >
+                    移除黑名单
+                </el-button>
+                <el-button
+                    type="danger"
+                    plain
+                    v-permission="'recycle:bookStat:batchAddBlacklist'"
+                    @click="handleOptBlacklist('add')"
+                    v-if="searchType !== '4'"
+                >
+                    加黑名单
+                </el-button>
 
-        <el-button
-          type="success"
-          plain
-          v-permission="'recycle:bookStat:batchAddSocial'"
-          @click="handleOptType(1)"
-        >
-          加社科库
-        </el-button>
-        <el-button
-          type="primary"
-          plain
-          v-permission="'recycle:bookStat:batchAddTeach'"
-          @click="handleOptType(2)"
-        >
-          加教材库
-        </el-button>
-      </template>
+                <el-button
+                    type="warning"
+                    plain
+                    v-permission="'recycle:bookStat:batchPauseRecycle'"
+                    @click="handleOptRecycle('pause')"
+                    v-if="searchType === '1'"
+                >
+                    暂停回收
+                </el-button>
+                <el-button
+                    type="warning"
+                    plain
+                    v-permission="'recycle:bookStat:batchStartRecycle'"
+                    @click="handleOptRecycle('start')"
+                    v-if="searchType === '2'"
+                >
+                    开启回收
+                </el-button>
 
-      <template #cover="{ row }">
-        <el-image
-          style="width: 90px; height: 120px; border-radius: 4px"
-          fit="cover"
-          :src="row.cover"
-        />
-      </template>
-      <template #baseInfo="{ row }">
-        <book-stat-info :row="row" @refresh="reload"></book-stat-info>
-      </template>
-      <template #stock="{ row }">
-        <book-stock :row="row"></book-stock>
-      </template>
+                <el-button
+                    type="success"
+                    plain
+                    v-permission="'recycle:bookStat:batchAddSocial'"
+                    @click="handleOptType(1)"
+                >
+                    加社科库
+                </el-button>
+                <el-button
+                    type="primary"
+                    plain
+                    v-permission="'recycle:bookStat:batchAddTeach'"
+                    @click="handleOptType(2)"
+                >
+                    加教材库
+                </el-button>
+            </template>
 
-      <template #action="{ row }">
-        <el-button
-          type="primary"
-          link
-          v-permission="'recycle:bookStat:viewUrl'"
-          @click="handleViewUrl(row, 'tb')"
-        >
-          [查看淘宝]
-        </el-button>
-        <el-button
-          type="danger"
-          link
-          v-permission="'recycle:bookStat:viewUrl'"
-          @click="handleViewUrl(row, 'kw')"
-        >
-          [查看孔网]
-        </el-button>
-        <el-button
-          color="#192bbe"
-          plain
-          link
-          v-permission="'recycle:bookStat:setParams'"
-          @click="handleSetParams(row)"
-        >
-          [设置独立参数]
-        </el-button>
-        <el-button
-          type="success"
-          link
-          v-permission="'recycle:bookStat:removeBlacklist'"
-          @click="handleOptBlacklist('remove', row)"
-          v-if="row.bookStatus == 3"
-        >
-          [移除黑名单]
-        </el-button>
-        <el-button
-          type="warning"
-          link
-          v-permission="'recycle:bookStat:addBlacklist'"
-          @click="handleOptBlacklist('add', row)"
-          v-if="row.bookStatus == 1 || row.bookStatus == 2"
-        >
-          [加入黑名单]
-        </el-button>
-        <el-button
-          type="danger"
-          link
-          v-permission="'recycle:bookStat:pauseRecycle'"
-          @click="handleOptRecycle('pause', row)"
-          v-if="row.recycleStatus == 1"
-        >
-          [暂停回收]
-        </el-button>
-        <el-button
-          type="success"
-          link
-          v-permission="'recycle:bookStat:startRecycle'"
-          @click="handleOptRecycle('start', row)"
-          v-else
-        >
-          [开启回收]
-        </el-button>
-        <el-button
-          type="success"
-          link
-          v-permission="'recycle:bookStat:removeBooklist'"
-          @click="handleOptBooklist('remove', row)"
-          v-if="row.bookStatus == 2"
-        >
-          [移除回收书单]
-        </el-button>
-        <el-button
-          type="danger"
-          link
-          v-permission="'recycle:bookStat:addBooklist'"
-          @click="handleOptBooklist('add', row)"
-          v-if="row.bookStatus == 1"
-        >
-          [加入回收书单]
-        </el-button>
-        <!-- 回收日志和售价日志 -->
-        <el-button
-          type="danger"
-          link
-          v-permission="'recycle:bookStat:recycleLog'"
-          @click="handleViewRecycleLog(row)"
-        >
-          [回收日志]
-        </el-button>
-        <el-button
-          type="primary"
-          link
-          v-permission="'recycle:bookStat:salesLog'"
-          @click="handleViewSalesLog(row)"
-        >
-          [售价日志]
-        </el-button>
-      </template>
-    </common-table>
+            <template #cover="{ row }">
+                <el-image
+                    style="width: 90px; height: 120px; border-radius: 4px"
+                    fit="cover"
+                    :src="row.cover"
+                    :preview-src-list="[row.cover]"
+                    :initial-index="0"
+                    preview-teleported
+                />
+            </template>
+            <template #baseInfo="{ row }">
+                <book-stat-info :row="row" @refresh="reload"></book-stat-info>
+            </template>
+            <template #stock="{ row }">
+                <book-stock :row="row"></book-stock>
+            </template>
+
+            <template #action="{ row }">
+                <div class="flex flex-wrap gap-1">
+                    <el-button
+                        color="#f27606"
+                        v-permission="'recycle:bookStat:viewUrl'"
+                        @click="handleViewUrl(row, 'tb')"
+                    >
+                        查看淘宝
+                    </el-button>
+                    <el-button
+                        color="#951d1d"
+                        v-permission="'recycle:bookStat:viewUrl'"
+                        @click="handleViewUrl(row, 'kw')"
+                    >
+                        查看孔网
+                    </el-button>
+                    <el-button
+                        color="#7728f5"
+                        v-permission="'recycle:bookStat:setParams'"
+                        @click="handleSetParams(row)"
+                    >
+                        设置独立参数
+                    </el-button>
+                    <el-button
+                        color="#333333"
+                        v-permission="'recycle:bookStat:removeBlacklist'"
+                        @click="handleOptBlacklist('remove', row)"
+                        v-if="row.bookStatus == 3"
+                    >
+                        移除黑名单
+                    </el-button>
+                    <el-button
+                        color="#333333"
+                        v-permission="'recycle:bookStat:addBlacklist'"
+                        @click="handleOptBlacklist('add', row)"
+                        v-if="row.bookStatus == 1 || row.bookStatus == 2"
+                    >
+                        加入黑名单
+                    </el-button>
+                    <el-button
+                        color="#bd3124"
+                        v-permission="'recycle:bookStat:pauseRecycle'"
+                        @click="handleOptRecycle('pause', row)"
+                        v-if="row.recycleStatus == 1"
+                    >
+                        暂停回收
+                    </el-button>
+                    <el-button
+                        color="#bd3124"
+                        v-permission="'recycle:bookStat:startRecycle'"
+                        @click="handleOptRecycle('start', row)"
+                        v-else
+                    >
+                        开启回收
+                    </el-button>
+                    <el-button
+                        color="#4095e5"
+                        v-permission="'recycle:bookStat:removeBooklist'"
+                        @click="handleOptBooklist('remove', row)"
+                        v-if="row.bookStatus == 2"
+                    >
+                        移除回收书单
+                    </el-button>
+                    <el-button
+                        color="#bd3124"
+                        v-permission="'recycle:bookStat:addBooklist'"
+                        @click="handleOptBooklist('add', row)"
+                        v-if="row.bookStatus == 1"
+                    >
+                        加入回收书单
+                    </el-button>
+                    <!-- 回收日志和售价日志 -->
+                    <el-button
+                        color="#e99d42"
+                        v-permission="'recycle:bookStat:recycleLog'"
+                        @click="handleViewRecycleLog(row)"
+                    >
+                        回收日志
+                    </el-button>
+                    <el-button
+                        color="#0f7dc7"
+                        v-permission="'recycle:bookStat:salesLog'"
+                        @click="handleViewSalesLog(row)"
+                    >
+                        售价日志
+                    </el-button>
+                </div>
+            </template>
+        </common-table>
 
-    <books-edit ref="editRef"></books-edit>
-    <set-params ref="paramsRef"></set-params>
-    <add-discount ref="discountRef" @refresh="reload"></add-discount>
-    <order-blacklist ref="blacklistRef" @refresh="reload"></order-blacklist>
-    <order-recycle-log ref="recycleLogRef" />
-    <order-sales-log ref="salesLogRef" />
-  </ele-page>
+        <set-params ref="paramsRef"></set-params>
+        <add-discount ref="discountRef" @refresh="reload"></add-discount>
+        <order-blacklist ref="blacklistRef" @refresh="reload"></order-blacklist>
+        <order-recycle-log ref="recycleLogRef" />
+        <order-sales-log ref="salesLogRef" />
+    </ele-page>
 </template>
 
 <script setup>
-  import { ref, reactive } from 'vue';
-  import CommonTable from '@/components/CommonPage/CommonTable.vue';
-  import booksEdit from '@/views/data/books/components/books-edit.vue';
-  import bookSearch from '@/views/recycle/bookStat/book-search.vue';
-  import bookStatInfo from '@/views/recycle/components/book-stat-info.vue';
-  import bookStock from '@/views/recycle/components/book-stock.vue';
-  import setParams from '@/views/recycle/components/set-params.vue';
-  import addDiscount from '@/views/recycle/components/add-discount.vue';
-  import orderBlacklist from '@/views/recycleOrder/detail/order-blacklist.vue';
-  import orderRecycleLog from '@/views/recycleOrder/detail/order-recycle-log.vue';
-  import orderSalesLog from '@/views/recycleOrder/detail/order-sales-log.vue';
-  import { useBookOperation } from '@/utils/use-book-operation';
-  import dayjs from 'dayjs';
+    import { ref, reactive } from 'vue';
+    import CommonTable from '@/components/CommonPage/CommonTable.vue';
+    import bookSearch from '@/views/recycle/bookStat/book-search.vue';
+    import bookStatInfo from '@/views/recycle/components/book-stat-info.vue';
+    import bookStock from '@/views/recycle/components/book-stock.vue';
+    import setParams from '@/views/recycle/components/set-params.vue';
+    import addDiscount from '@/views/recycle/components/add-discount.vue';
+    import orderBlacklist from '@/views/recycleOrder/detail/order-blacklist.vue';
+    import orderRecycleLog from '@/views/recycleOrder/detail/order-recycle-log.vue';
+    import orderSalesLog from '@/views/recycleOrder/detail/order-sales-log.vue';
+    import { useBookOperation } from '@/utils/use-book-operation';
+    import dayjs from 'dayjs';
 
-  defineOptions({ name: 'scanLoglist' });
+    defineOptions({ name: 'scanLoglist' });
 
-  const searchType = ref('0');
-  function handleStatusChange(value) {
-    pageRef.value.reload({ searchType: value });
-  }
+    const searchType = ref('0');
+    function handleStatusChange(value) {
+        pageRef.value.reload({ searchType: value });
+    }
 
-  function handleSortChange({ column, order }) {
-    // 1 扫描次数 2总回收量 3最后一次扫描时间
-    reload({
-      orderType: column.columnKey,
-      orderWay: order === 'ascending' ? 'asc' : 'desc'
-    });
-  }
+    function handleSortChange({ column, order }) {
+        // 1 扫描次数 2总回收量 3最后一次扫描时间
+        reload({
+            orderType: column.columnKey,
+            orderWay: order === 'ascending' ? 'asc' : 'desc'
+        });
+    }
 
-  /** 表格列配置 */
-  const columns = ref([
-    {
-      type: 'selection',
-      columnKey: 'selection',
-      width: 50,
-      align: 'center',
-      fixed: 'left'
-    },
-    {
-      label: '图片',
-      prop: 'cover',
-      width: 120,
-      slot: 'cover'
-    },
-    {
-      label: '信息',
-      prop: 'baseInfo',
-      width: 540,
-      slot: 'baseInfo'
-    },
-    {
-      label: '总回收数量',
-      minWidth: 120,
-      prop: 'recycleTotalNumTime',
-      sortable: true,
-      columnKey: '2'
-    },
-    {
-      label: '回收量',
-      prop: 'recycleTotalNumTime',
-      minWidth: 100,
-      formatter: (row) => row?.recycleTotalNumTime || 0
-    },
-    {
-      label: '最大回收量',
-      minWidth: 120,
-      prop: 'recycleMax',
-      sortable: true,
-      columnKey: '6'
-    },
-    {
-      columnKey: 'action',
-      label: '操作',
-      width: 200,
-      slot: 'action',
-      fixed: 'right'
-    },
-  ]);
+    /** 表格列配置 */
+    const columns = ref([
+        {
+            type: 'selection',
+            columnKey: 'selection',
+            width: 50,
+            align: 'center',
+            fixed: 'left'
+        },
+        {
+            label: '图片',
+            prop: 'cover',
+            width: 120,
+            slot: 'cover'
+        },
+        {
+            label: '信息',
+            prop: 'baseInfo',
+            width: 540,
+            slot: 'baseInfo'
+        },
+        {
+            label: '总回收数量',
+            minWidth: 120,
+            prop: 'recycleTotalNumTime',
+            sortable: true,
+            columnKey: '2'
+        },
+        {
+            label: '回收量',
+            prop: 'recycleTotalNumTime',
+            minWidth: 100,
+            formatter: (row) => row?.recycleTotalNumTime || 0
+        },
+        {
+            label: '最大回收量',
+            minWidth: 120,
+            prop: 'recycleMax',
+            sortable: true,
+            columnKey: '6'
+        },
+        {
+            columnKey: 'action',
+            label: '操作',
+            width: 250,
+            slot: 'action',
+            fixed: 'right'
+        }
+    ]);
 
-  /** 页面组件实例 */
-  const pageRef = ref(null);
-  let rcNumStartTime = dayjs().subtract(3, 'day').format('YYYY-MM-DD');
-  let rcNumEndTime = dayjs().format('YYYY-MM-DD');
+    /** 页面组件实例 */
+    const pageRef = ref(null);
+    let rcNumStartTime = dayjs().subtract(3, 'day').format('YYYY-MM-DD');
+    let rcNumEndTime = dayjs().format('YYYY-MM-DD');
 
-  const pageConfig = reactive({
-    pageUrl: '/user/userScanLog/recycleBookStat',
-    fileName: '扫码工作台',
-    cacheKey: 'bookStatTable',
-    params: {
-      searchType: '1',
-      rcNumStartTime,
-      rcNumEndTime
-    },
-    rowKey: 'isbn'
-  });
+    const pageConfig = reactive({
+        pageUrl: '/user/userScanLog/recycleBookStat',
+        fileName: '扫码工作台',
+        cacheKey: 'bookStatTable',
+        params: {
+            searchType: '1',
+            rcNumStartTime,
+            rcNumEndTime
+        },
+        rowKey: 'isbn'
+    });
 
-  //查看回收日志
-  const recycleLogRef = ref(null);
-  function handleViewRecycleLog(row) {
-    recycleLogRef.value?.handleOpen(row);
-  }
+    //查看回收日志
+    const recycleLogRef = ref(null);
+    function handleViewRecycleLog(row) {
+        recycleLogRef.value?.handleOpen(row);
+    }
 
-  //查看售价日志
-  const salesLogRef = ref(null);
-  function handleViewSalesLog(row) {
-    salesLogRef.value?.handleOpen(row);
-  }
+    //查看售价日志
+    const salesLogRef = ref(null);
+    function handleViewSalesLog(row) {
+        salesLogRef.value?.handleOpen(row);
+    }
 
-  //刷新表格
-  function reload(where) {
-    pageRef.value?.reload(where);
-  }
-  // 使用图书操作混入
-  const {
-    blacklistRef,
-    discountRef,
-    paramsRef,
-    handleOptBooklist,
-    handleOptBlacklist,
-    handleSetParams,
-    handleOptType,
-    handleOptRecycle
-  } = useBookOperation(pageRef);
+    //刷新表格
+    function reload(where) {
+        pageRef.value?.reload(where);
+    }
+    // 使用图书操作混入
+    const {
+        blacklistRef,
+        discountRef,
+        paramsRef,
+        handleOptBooklist,
+        handleOptBlacklist,
+        handleSetParams,
+        handleOptType,
+        handleOptRecycle
+    } = useBookOperation(pageRef);
 
-  //查看淘宝和孔网
-  function handleViewUrl(row, type) {
-    let url = '';
-    if (type == 'tb') {
-      url = `https://s.taobao.com/search?q=${row.isbn}`;
-    } else if (type == 'kw') {
-      url = `https://search.kongfz.com/product_result/?key=${row.isbn}&status=0&_stpmt=eyJzZWFyY2hfdHlwZSI6ImFjdGl2ZSJ9`;
+    //查看淘宝和孔网
+    function handleViewUrl(row, type) {
+        let url = '';
+        if (type == 'tb') {
+            url = `https://s.taobao.com/search?q=${row.isbn}`;
+        } else if (type == 'kw') {
+            url = `https://search.kongfz.com/product_result/?key=${row.isbn}&status=0&_stpmt=eyJzZWFyY2hfdHlwZSI6ImFjdGl2ZSJ9`;
+        }
+        window.open(url, '_blank');
     }
-    window.open(url, '_blank');
-  }
 </script>

+ 4 - 13
src/views/recycle/bookTypes/index.vue

@@ -34,14 +34,17 @@
                     style="width: 90px; height: 120px; border-radius: 4px"
                     fit="cover"
                     :src="row.cover"
+                    :preview-src-list="[row.cover]"
+                    :initial-index="0"
+                    preview-teleported
                 />
             </template>
             <template #baseInfo="{ row }">
                 <book-info
                     :row="row"
-                    @edit="handleUpdateBook"
                     :showFormat="false"
                     :showTag="false"
+                    @refresh="reload"
                 ></book-info>
             </template>
             <template #stock="{ row }">
@@ -107,7 +110,6 @@
             </template>
         </common-table>
 
-        <books-edit ref="editRef"></books-edit>
         <modify-type ref="modifyTypeRef" @success="reload" />
         <opeate-log ref="logRef" />
     </ele-page>
@@ -116,7 +118,6 @@
 <script setup>
     import { ref, reactive, getCurrentInstance } from 'vue';
     import CommonTable from '@/components/CommonPage/CommonTable.vue';
-    import booksEdit from '@/views/data/books/components/books-edit.vue';
     import bookSearch from '@/views/recycle/components/book-search.vue';
     import bookInfo from '@/views/recycle/components/book-info.vue';
     import bookStock from '@/views/recycle/components/book-stock.vue';
@@ -241,16 +242,6 @@
     function reload(where) {
         pageRef.value?.reload(where);
     }
-
-    //编辑
-    const editRef = ref(null);
-    function handleUpdateBook(row) {
-        let params = {
-            id: row.bookId
-        };
-        editRef.value?.handleOpen(params);
-    }
-
     /**
      * 类型操作(社科库/教材库)
      * @param {Number} type - 类型:1社科库,2教材库 3 中小学

+ 4 - 1
src/views/recycle/booklist/index.vue

@@ -106,10 +106,13 @@
           style="width: 90px; height: 120px; border-radius: 4px"
           fit="cover"
           :src="row.cover"
+          :preview-src-list="[row.cover]"
+          :initial-index="0"
+          preview-teleported
         />
       </template>
       <template #baseInfo="{ row }">
-        <book-info :row="row" @edit="handleUpdateBook"></book-info>
+        <book-info :row="row" @refresh="reload"></book-info>
       </template>
       <template #stock="{ row }">
         <book-stock :row="row"></book-stock>

+ 23 - 5
src/views/recycle/components/book-info.vue

@@ -49,9 +49,15 @@
                 <div class="common-text">
                     <el-text>回收状态:</el-text>
                     <el-text v-if="row.bookStatus == 3">黑名单</el-text>
-                    <el-text v-else-if="row.recycleStatus == 1">正在回收</el-text>
-                    <el-text v-else-if="row.recycleStatus == 2">收满暂停回收</el-text>
-                    <el-text v-else-if="row.recycleStatus == 3">手动暂停回收</el-text>
+                    <el-text v-else-if="row.recycleStatus == 1"
+                        >正在回收</el-text
+                    >
+                    <el-text v-else-if="row.recycleStatus == 2"
+                        >收满暂停回收</el-text
+                    >
+                    <el-text v-else-if="row.recycleStatus == 3"
+                        >手动暂停回收</el-text
+                    >
                     <el-text v-else>-</el-text>
                     <!-- 1 正在回收 2 收满暂停回收 3 手动暂停回收 -->
                     <!-- <el-text>{{
@@ -77,12 +83,15 @@
                 </div>
             </div>
         </div>
+
+        <booksEdit ref="booksEditRef" @success="reload" />
     </div>
 </template>
 
 <script setup>
     import { dayjs } from 'element-plus';
-    import { computed } from 'vue';
+    import { computed, ref } from 'vue';
+    import booksEdit from '@/views/data/books/components/books-edit.vue';
 
     const props = defineProps({
         row: {
@@ -107,8 +116,17 @@
             : '-';
     });
 
+    const booksEditRef = ref(null);
     const handleEdit = () => {
-        emit('edit', props.row);
+        let params = {
+            id: props.row.bookId || props.row.id
+        };
+        booksEditRef.value?.handleOpen(params);
+        // emit('edit', props.row);
+    };
+
+    const reload = () => {
+        emit('refresh');
     };
 </script>
 

+ 1 - 1
src/views/recycle/components/book-search.vue

@@ -63,7 +63,7 @@
       keys: ['minDiscount', 'maxDiscount'],
       props: {
         minAttrs: { min: 0 },
-        maxAttrs: { max: 1 },
+        maxAttrs: { max: 10 },
         onChange: (val) => {
           searchRef.value?.setData({
             minDiscount: val.min,

+ 13 - 1
src/views/recycle/components/book-stat-info.vue

@@ -100,6 +100,8 @@
                 </div>
             </div>
         </div>
+
+        <booksEdit ref="booksEditRef" @success="reload" />
     </div>
     <ModifyProductPrice ref="productPriceDialogRef" @refresh="$emit('refresh')" />
 </template>
@@ -109,6 +111,7 @@
     import { computed, ref } from 'vue';
     import { EditPen } from '@element-plus/icons-vue';
     import ModifyProductPrice from './modify-product-price.vue';
+    import booksEdit from '@/views/data/books/components/books-edit.vue';
 
     const props = defineProps({
         row: {
@@ -128,6 +131,7 @@
     const emit = defineEmits(['edit', 'refresh']);
 
     const productPriceDialogRef = ref(null);
+    const booksEditRef = ref(null);
 
     const publishDate = computed(() => {
         return props.row.pubDate
@@ -136,12 +140,20 @@
     });
 
     const handleEdit = () => {
-        emit('edit', props.row);
+        let params = {
+            id: props.row.bookId || props.row.id
+        };
+        booksEditRef.value?.handleOpen(params);
+        // emit('edit', props.row);
     };
     
     const handleEditProductPrice = () => {
         productPriceDialogRef.value?.handleOpen(props.row);
     };
+
+    const reload = () => {
+        emit('refresh');
+    };
 </script>
 
 <style scoped>

+ 1 - 1
src/views/recycle/fallbackLog/components/book-search.vue

@@ -36,7 +36,7 @@ const formItems = reactive([
         keys: ['discountMin', 'discountMax'],
         props: {
             minAttrs: { min: 0 },
-            maxAttrs: { max: 1 },
+            maxAttrs: { max: 10 },
             onChange: (val) => {
                 searchRef.value?.setData({ discountMin: val.min, discountMax: val.max });
             }

+ 4 - 1
src/views/recycle/fallbackLog/index.vue

@@ -13,6 +13,9 @@
           style="width: 90px; height: 120px; border-radius: 4px"
           fit="cover"
           :src="row.coverUrl"
+          :preview-src-list="[row.coverUrl]"
+          :initial-index="0"
+          preview-teleported
         />
       </template>
       <template #feedbackTime="{ row }">
@@ -28,7 +31,7 @@
         </div>
       </template>
       <template #baseInfo="{ row }">
-        <book-info :row="row" :showFormat="false"></book-info>
+        <book-info :row="row" :showFormat="false" @refresh="reload"></book-info>
       </template>
 
       <template #action="{ row }">

+ 9 - 14
src/views/recycle/independentParameter/index.vue

@@ -34,10 +34,17 @@
             </template>
 
             <template #cover="{ row }">
-                <el-image style="width: 90px; height: 120px; border-radius: 4px" fit="cover" :src="row.cover" />
+                <el-image 
+                    style="width: 90px; height: 120px; border-radius: 4px" 
+                    fit="cover" 
+                    :src="row.cover" 
+                    :preview-src-list="[row.cover]"
+                    :initial-index="0"
+                    preview-teleported
+                />
             </template>
             <template #baseInfo="{ row }">
-                <book-info :row="row" @edit="handleUpdateBook"></book-info>
+                <book-info :row="row" @refresh="reload"></book-info>
             </template>
             <template #stock="{ row }">
                 <book-stock :row="row"></book-stock>
@@ -105,7 +112,6 @@
             </template>
         </common-table>
 
-        <books-edit ref="editRef"></books-edit>
         <set-params ref="paramsRef" @refresh="reload"></set-params>
         <add-discount ref="discountRef" @refresh="reload"></add-discount>
         <orderRecycleLog ref="recycleLogRef" />
@@ -120,10 +126,8 @@
 <script setup>
 import { ref, reactive } from 'vue';
 import CommonTable from '@/components/CommonPage/CommonTable.vue';
-import booksEdit from '@/views/data/books/components/books-edit.vue';
 import bookSearch from '@/views/recycle/components/book-search.vue';
 import bookInfo from '@/views/recycle/components/book-info.vue';
-import bookOtherInfo from '@/views/recycle/components/book-other-info.vue';
 import bookStock from '@/views/recycle/components/book-stock.vue';
 import setParams from '@/views/recycle/components/set-params.vue';
 import addDiscount from '@/views/recycle/components/add-discount.vue';
@@ -226,15 +230,6 @@ function reload(where) {
     pageRef.value?.reload(where);
 }
 
-//编辑
-const editRef = ref(null);
-function handleUpdateBook(row) {
-    let params = {
-        id: row.bookId
-    };
-    editRef.value?.handleOpen(params);
-}
-
 //设置参数
 const paramsRef = ref(null);
 function handleSetParams(row) {

+ 0 - 2
src/views/recycle/inventory/components/page-search.vue

@@ -37,8 +37,6 @@
       prop: 'stock',
       keys: ['minStock', 'maxStock'],
       props: {
-        minAttrs: { min: 0 },
-        maxAttrs: { max: 1 },
         onChange: (val) => {
           searchRef.value?.setData({
             minStock: val.min,

+ 3 - 0
src/views/recycle/inventory/index.vue

@@ -37,6 +37,9 @@
           style="width: 80px; height: 100px"
           fit="cover"
           :src="row?.bookInfo?.cover"
+          :preview-src-list="[row?.bookInfo?.cover]"
+          :initial-index="0"
+          preview-teleported
         />
       </template>
 

+ 4 - 1
src/views/recycle/inventoryAlert/index.vue

@@ -79,6 +79,9 @@
           style="width: 90px; height: 120px; border-radius: 4px"
           fit="cover"
           :src="row.cover"
+          :preview-src-list="[row.cover]"
+          :initial-index="0"
+          preview-teleported
         />
       </template>
       <template #baseInfo="{ row }">
@@ -209,7 +212,7 @@
 
   //刷新表格
   function reload(where) {
-    where.history = history.value;
+    where && (where.history = history.value);
     pageRef.value?.reload(where);
   }
 

+ 4 - 1
src/views/recycle/priceAlert/index.vue

@@ -62,6 +62,9 @@
                     style="width: 90px; height: 120px; border-radius: 4px"
                     fit="cover"
                     :src="row.cover"
+                    :preview-src-list="[row.cover]"
+                    :initial-index="0"
+                    preview-teleported
                 />
             </template>
             <template #baseInfo="{ row }">
@@ -256,7 +259,7 @@
 
     //刷新表格
     function reload(where) {
-        where.history = history.value;
+        where && (where.history = history.value);
         pageRef.value?.reload(where);
     }
 

+ 8 - 1
src/views/recycle/remindBooks/index.vue

@@ -15,7 +15,14 @@
             </template>
 
             <template #cover="{ row }">
-                <el-image :src="row.bookInfo?.cover" style="width: 70px; height: 90px" fit="cover" />
+                <el-image 
+                    :src="row.bookInfo?.cover" 
+                    style="width: 70px; height: 90px" 
+                    fit="cover" 
+                    :preview-src-list="[row.bookInfo?.cover]"
+                    :initial-index="0"
+                    preview-teleported
+                />
             </template>
 
             <template #action="{ row }">

+ 4 - 9
src/views/recycle/scanLog/index.vue

@@ -98,10 +98,13 @@
           style="width: 90px; height: 120px; border-radius: 4px"
           fit="cover"
           :src="row.cover"
+          :preview-src-list="[row.cover]"
+          :initial-index="0"
+          preview-teleported
         />
       </template>
       <template #baseInfo="{ row }">
-        <book-info :row="row"></book-info>
+        <book-info :row="row" @refresh="reload"></book-info>
       </template>
       <template #stock="{ row }">
         <book-stock :row="row"></book-stock>
@@ -182,7 +185,6 @@
       </template>
     </common-table>
 
-    <books-edit ref="editRef"></books-edit>
     <set-params ref="paramsRef"></set-params>
     <scan-log ref="logRef"></scan-log>
     <add-discount ref="discountRef" @refresh="reload"></add-discount>
@@ -193,7 +195,6 @@
 <script setup>
   import { ref, reactive } from 'vue';
   import CommonTable from '@/components/CommonPage/CommonTable.vue';
-  import booksEdit from '@/views/data/books/components/books-edit.vue';
   import bookSearch from '@/views/recycle/components/book-search.vue';
   import bookInfo from '@/views/recycle/components/book-info.vue';
   import bookStock from '@/views/recycle/components/book-stock.vue';
@@ -294,12 +295,6 @@
     pageRef.value?.reload(where);
   }
 
-  //编辑
-  const editRef = ref(null);
-  function handleUpdateBook(row) {
-    editRef.value?.handleOpen(row);
-  }
-
   // 使用图书操作混入
   const {
     blacklistRef,

+ 9 - 14
src/views/recycle/specifiedBooks/index.vue

@@ -34,10 +34,17 @@
             </template>
 
             <template #cover="{ row }">
-                <el-image style="width: 90px; height: 120px; border-radius: 4px" fit="cover" :src="row.cover" />
+                <el-image 
+                    style="width: 90px; height: 120px; border-radius: 4px" 
+                    fit="cover" 
+                    :src="row.cover" 
+                    :preview-src-list="[row.cover]"
+                    :initial-index="0"
+                    preview-teleported
+                />
             </template>
             <template #baseInfo="{ row }">
-                <book-info :row="row" @edit="handleUpdateBook" :showFormat="false"></book-info>
+                <book-info :row="row" @refresh="reload" :showFormat="false"></book-info>
             </template>
             <template #stock="{ row }">
                 <book-stock :row="row"></book-stock>
@@ -99,7 +106,6 @@
             </template>
         </common-table>
 
-        <books-edit ref="editRef"></books-edit>
         <set-params ref="paramsRef" @refresh="reload"></set-params>
         <add-discount ref="discountRef" @refresh="reload"></add-discount>
         <orderRecycleLog ref="recycleLogRef" />
@@ -114,10 +120,8 @@
 <script setup>
 import { ref, reactive } from 'vue';
 import CommonTable from '@/components/CommonPage/CommonTable.vue';
-import booksEdit from '@/views/data/books/components/books-edit.vue';
 import bookSearch from '@/views/recycle/components/book-search.vue';
 import bookInfo from '@/views/recycle/components/book-info.vue';
-import bookOtherInfo from '@/views/recycle/components/book-other-info.vue';
 import bookStock from '@/views/recycle/components/book-stock.vue';
 import setParams from '@/views/recycle/components/set-params.vue';
 import addDiscount from '@/views/recycle/components/add-discount.vue';
@@ -220,15 +224,6 @@ function reload(where) {
     pageRef.value?.reload(where);
 }
 
-//编辑
-const editRef = ref(null);
-function handleUpdateBook(row) {
-    let params = {
-        id: row.bookId
-    };
-    editRef.value?.handleOpen(params);
-}
-
 //设置参数
 const paramsRef = ref(null);
 function handleSetParams(row) {

+ 3 - 0
src/views/recycle/stockFullAlert/index.vue

@@ -62,6 +62,9 @@
                     style="width: 90px; height: 120px; border-radius: 4px"
                     fit="cover"
                     :src="row.cover"
+                    :preview-src-list="[row.cover]"
+                    :initial-index="0"
+                    preview-teleported
                 />
             </template>
             <template #baseInfo="{ row }">

+ 1 - 1
src/views/recycle/workbench/book-search.vue

@@ -80,7 +80,7 @@
       keys: ['minDiscount', 'maxDiscount'],
       props: {
         minAttrs: { min: 0 },
-        maxAttrs: { max: 1 },
+        maxAttrs: { max: 10 },
         onChange: (val) => {
           searchRef.value?.setData({
             minDiscount: val.min,

+ 334 - 337
src/views/recycle/workbench/index.vue

@@ -1,360 +1,357 @@
 <template>
-  <ele-page flex-table>
-    <book-search @search="reload"></book-search>
+    <ele-page flex-table>
+        <book-search @search="reload"></book-search>
 
-    <common-table
-      ref="pageRef"
-      :pageConfig="pageConfig"
-      :columns="columns"
-      :tools="false"
-      @sort-change="handleSortChange"
-    >
-      <template #toolbar>
-        <el-radio-group @change="handleStatusChange" v-model="searchType">
-          <el-radio-button label="全部" value="0" />
-          <el-radio-button label="已加入回收书单(正在回收)" value="1" />
-          <el-radio-button label="已加入回收书单(暂停回收)" value="2" />
-          <el-radio-button label="未加入回收书单" value="3" />
-          <el-radio-button label="未加入回收书单(手动暂停)" value="5" />
-          <el-radio-button label="黑名单" value="4" />
-        </el-radio-group>
-
-        <span class="ml-8"></span>
-        <el-button
-          type="warning"
-          plain
-          v-permission="'recycle:workbench:batchRemoveBooklist'"
-          @click="handleOptBooklist('remove')"
-          v-if="['1', '2'].includes(searchType)"
-        >
-          移除回收书单
-        </el-button>
-        <el-button
-          type="success"
-          plain
-          v-permission="'recycle:workbench:batchAddBooklist'"
-          @click="handleOptBooklist('add')"
-          v-if="['3', '4', '5'].includes(searchType)"
-        >
-          加入回收书单
-        </el-button>
-        <el-button
-          type="warning"
-          plain
-          v-permission="'recycle:workbench:batchRemoveBlacklist'"
-          @click="handleOptBlacklist('remove')"
-          v-if="searchType === '4'"
-        >
-          移除黑名单
-        </el-button>
-        <el-button
-          type="danger"
-          plain
-          v-permission="'recycle:workbench:batchAddBlacklist'"
-          @click="handleOptBlacklist('add')"
-          v-if="searchType !== '4'"
+        <common-table
+            ref="pageRef"
+            :pageConfig="pageConfig"
+            :columns="columns"
+            :tools="false"
+            @sort-change="handleSortChange"
         >
-          加黑名单
-        </el-button>
+            <template #toolbar>
+                <el-radio-group
+                    @change="handleStatusChange"
+                    v-model="searchType"
+                >
+                    <el-radio-button label="全部" value="0" />
+                    <el-radio-button
+                        label="已加入回收书单(正在回收)"
+                        value="1"
+                    />
+                    <el-radio-button
+                        label="已加入回收书单(暂停回收)"
+                        value="2"
+                    />
+                    <el-radio-button label="未加入回收书单" value="3" />
+                    <el-radio-button
+                        label="未加入回收书单(手动暂停)"
+                        value="5"
+                    />
+                    <el-radio-button label="黑名单" value="4" />
+                </el-radio-group>
 
-        <el-button
-          type="warning"
-          plain
-          v-permission="'recycle:workbench:batchPauseRecycle'"
-          @click="handleOptRecycle('pause')"
-          v-if="searchType === '1'"
-        >
-          暂停回收
-        </el-button>
-        <el-button
-          type="warning"
-          plain
-          v-permission="'recycle:workbench:batchStartRecycle'"
-          @click="handleOptRecycle('start')"
-          v-if="searchType === '2'"
-        >
-          开启回收
-        </el-button>
+                <span class="ml-8"></span>
+                <el-button
+                    type="warning"
+                    v-permission="'recycle:workbench:batchRemoveBooklist'"
+                    @click="handleOptBooklist('remove')"
+                    v-if="['1', '2'].includes(searchType)"
+                >
+                    移除回收书单
+                </el-button>
+                <el-button
+                    type="success"
+                    v-permission="'recycle:workbench:batchAddBooklist'"
+                    @click="handleOptBooklist('add')"
+                    v-if="['3', '4', '5'].includes(searchType)"
+                >
+                    加入回收书单
+                </el-button>
+                <el-button
+                    type="warning"
+                    v-permission="'recycle:workbench:batchRemoveBlacklist'"
+                    @click="handleOptBlacklist('remove')"
+                    v-if="searchType === '4'"
+                >
+                    移除黑名单
+                </el-button>
+                <el-button
+                    type="danger"
+                    v-permission="'recycle:workbench:batchAddBlacklist'"
+                    @click="handleOptBlacklist('add')"
+                    v-if="searchType !== '4'"
+                >
+                    加黑名单
+                </el-button>
 
-        <el-button
-          type="success"
-          plain
-          v-permission="'recycle:workbench:batchAddSocial'"
-          @click="handleOptType(1)"
-        >
-          加社科库
-        </el-button>
-        <el-button
-          type="primary"
-          plain
-          v-permission="'recycle:workbench:batchAddTeach'"
-          @click="handleOptType(2)"
-        >
-          加教材库
-        </el-button>
-      </template>
+                <el-button
+                    type="warning"
+                    v-permission="'recycle:workbench:batchPauseRecycle'"
+                    @click="handleOptRecycle('pause')"
+                    v-if="searchType === '1'"
+                >
+                    暂停回收
+                </el-button>
+                <el-button
+                    type="warning"
+                    v-permission="'recycle:workbench:batchStartRecycle'"
+                    @click="handleOptRecycle('start')"
+                    v-if="searchType === '2'"
+                >
+                    开启回收
+                </el-button>
 
-      <template #cover="{ row }">
-        <el-image
-          style="width: 90px; height: 120px; border-radius: 4px"
-          fit="cover"
-          :src="row.cover"
-        />
-      </template>
-      <template #baseInfo="{ row }">
-        <book-stat-info :row="row" @refresh="reload"></book-stat-info>
-      </template>
-      <template #stock="{ row }">
-        <book-stock :row="row"></book-stock>
-      </template>
+                <el-button
+                    type="success"
+                    v-permission="'recycle:workbench:batchAddSocial'"
+                    @click="handleOptType(1)"
+                >
+                    加社科库
+                </el-button>
+                <el-button
+                    type="primary"
+                    v-permission="'recycle:workbench:batchAddTeach'"
+                    @click="handleOptType(2)"
+                >
+                    加教材库
+                </el-button>
+            </template>
 
-      <template #action="{ row }">
-        <el-button
-          type="primary"
-          link
-          v-permission="'recycle:workbench:viewUrl'"
-          @click="handleViewUrl(row, 'tb')"
-        >
-          [查看淘宝]
-        </el-button>
-        <el-button
-          type="danger"
-          link
-          v-permission="'recycle:workbench:viewUrl'"
-          @click="handleViewUrl(row, 'kw')"
-        >
-          [查看孔网]
-        </el-button>
-        <el-button
-          color="#192bbe"
-          plain
-          link
-          v-permission="'recycle:workbench:setParams'"
-          @click="handleSetParams(row)"
-        >
-          [设置独立参数]
-        </el-button>
-        <el-button
-          type="success"
-          link
-          v-permission="'recycle:workbench:removeBlacklist'"
-          @click="handleOptBlacklist('remove', row)"
-          v-if="row.bookStatus == 3"
-        >
-          [移除黑名单]
-        </el-button>
-        <el-button
-          type="warning"
-          link
-          v-permission="'recycle:workbench:addBlacklist'"
-          @click="handleOptBlacklist('add', row)"
-          v-if="row.bookStatus == 1 || row.bookStatus == 2"
-        >
-          [加入黑名单]
-        </el-button>
-        <el-button
-          type="danger"
-          link
-          v-permission="'recycle:workbench:pauseRecycle'"
-          @click="handleOptRecycle('pause', row)"
-          v-if="row.recycleStatus == 1"
-        >
-          [暂停回收]
-        </el-button>
-        <el-button
-          type="success"
-          link
-          v-permission="'recycle:workbench:startRecycle'"
-          @click="handleOptRecycle('start', row)"
-          v-else
-        >
-          [开启回收]
-        </el-button>
-        <el-button
-          type="success"
-          link
-          v-permission="'recycle:workbench:removeBooklist'"
-          @click="handleOptBooklist('remove', row)"
-          v-if="row.bookStatus == 2"
-        >
-          [移除回收书单]
-        </el-button>
-        <el-button
-          type="danger"
-          link
-          v-permission="'recycle:workbench:addBooklist'"
-          @click="handleOptBooklist('add', row)"
-          v-if="row.bookStatus == 1"
-        >
-          [加入回收书单]
-        </el-button>
-        <!-- 回收日志和售价日志 -->
-        <el-button
-          type="danger"
-          link
-          v-permission="'recycle:workbench:recycleLog'"
-          @click="handleViewRecycleLog(row)"
-        >
-          [回收日志]
-        </el-button>
-        <el-button
-          type="primary"
-          link
-          v-permission="'recycle:workbench:salesLog'"
-          @click="handleViewSalesLog(row)"
-        >
-          [售价日志]
-        </el-button>
-      </template>
-    </common-table>
+            <template #cover="{ row }">
+                <el-image
+                    style="width: 90px; height: 120px; border-radius: 4px"
+                    fit="cover"
+                    :src="row.cover"
+                    :preview-src-list="[row.cover]"
+                    :initial-index="0"
+                    preview-teleported
+                />
+            </template>
+            <template #baseInfo="{ row }">
+                <book-stat-info :row="row" @refresh="reload"></book-stat-info>
+            </template>
+            <template #stock="{ row }">
+                <book-stock :row="row"></book-stock>
+            </template>
+
+            <template #action="{ row }">
+                <div class="flex flex-wrap gap-1">
+                    <el-button
+                        color="#f27606"
+                        v-permission="'recycle:workbench:viewUrl'"
+                        @click="handleViewUrl(row, 'tb')"
+                    >
+                        查看淘宝
+                    </el-button>
+                    <el-button
+                        color="#951d1d"
+                        v-permission="'recycle:workbench:viewUrl'"
+                        @click="handleViewUrl(row, 'kw')"
+                    >
+                        查看孔网
+                    </el-button>
+                    <el-button
+                        color="#7728f5"
+                        v-permission="'recycle:workbench:setParams'"
+                        @click="handleSetParams(row)"
+                    >
+                        设置独立参数
+                    </el-button>
+                    <el-button
+                        color="#333333"
+                        v-permission="'recycle:workbench:removeBlacklist'"
+                        @click="handleOptBlacklist('remove', row)"
+                        v-if="row.bookStatus == 3"
+                    >
+                        移除黑名单
+                    </el-button>
+                    <el-button
+                        color="#333333"
+                        v-permission="'recycle:workbench:addBlacklist'"
+                        @click="handleOptBlacklist('add', row)"
+                        v-if="row.bookStatus == 1 || row.bookStatus == 2"
+                    >
+                        加入黑名单
+                    </el-button>
+                    <el-button
+                        color="#bd3124"
+                        v-permission="'recycle:workbench:pauseRecycle'"
+                        @click="handleOptRecycle('pause', row)"
+                        v-if="row.recycleStatus == 1"
+                    >
+                        暂停回收
+                    </el-button>
+                    <el-button
+                        color="#bd3124"
+                        v-permission="'recycle:workbench:startRecycle'"
+                        @click="handleOptRecycle('start', row)"
+                        v-else
+                    >
+                        开启回收
+                    </el-button>
+                    <el-button
+                        color="#4095e5"
+                        v-permission="'recycle:workbench:removeBooklist'"
+                        @click="handleOptBooklist('remove', row)"
+                        v-if="row.bookStatus == 2"
+                    >
+                        移除回收书单
+                    </el-button>
+                    <el-button
+                        color="#bd3124"
+                        v-permission="'recycle:workbench:addBooklist'"
+                        @click="handleOptBooklist('add', row)"
+                        v-if="row.bookStatus == 1"
+                    >
+                        加入回收书单
+                    </el-button>
+                    <!-- 回收日志和售价日志 -->
+                    <el-button
+                        color="#e99d42"
+                        v-permission="'recycle:workbench:recycleLog'"
+                        @click="handleViewRecycleLog(row)"
+                    >
+                        回收日志
+                    </el-button>
+                    <el-button
+                        color="#0f7dc7"
+                        v-permission="'recycle:workbench:salesLog'"
+                        @click="handleViewSalesLog(row)"
+                    >
+                        售价日志
+                    </el-button>
+                </div>
+            </template>
+        </common-table>
 
-    <books-edit ref="editRef"></books-edit>
-    <set-params ref="paramsRef"></set-params>
-    <add-discount ref="discountRef" @refresh="reload"></add-discount>
-    <order-blacklist ref="blacklistRef" @refresh="reload"></order-blacklist>
-    <order-recycle-log ref="recycleLogRef" />
-    <order-sales-log ref="salesLogRef" />
-  </ele-page>
+        <books-edit ref="editRef"></books-edit>
+        <set-params ref="paramsRef"></set-params>
+        <add-discount ref="discountRef" @refresh="reload"></add-discount>
+        <order-blacklist ref="blacklistRef" @refresh="reload"></order-blacklist>
+        <order-recycle-log ref="recycleLogRef" />
+        <order-sales-log ref="salesLogRef" />
+    </ele-page>
 </template>
 
 <script setup>
-  import { ref, reactive } from 'vue';
-  import CommonTable from '@/components/CommonPage/CommonTable.vue';
-  import booksEdit from '@/views/data/books/components/books-edit.vue';
-  import bookSearch from '@/views/recycle/workbench/book-search.vue';
-  import bookStatInfo from '@/views/recycle/components/book-stat-info.vue';
-  import bookStock from '@/views/recycle/components/book-stock.vue';
-  import setParams from '@/views/recycle/components/set-params.vue';
-  import addDiscount from '@/views/recycle/components/add-discount.vue';
-  import orderBlacklist from '@/views/recycleOrder/detail/order-blacklist.vue';
-  import orderRecycleLog from '@/views/recycleOrder/detail/order-recycle-log.vue';
-  import orderSalesLog from '@/views/recycleOrder/detail/order-sales-log.vue';
-  import { useBookOperation } from '@/utils/use-book-operation';
-
-  defineOptions({ name: 'scanLoglist' });
+    import { ref, reactive } from 'vue';
+    import CommonTable from '@/components/CommonPage/CommonTable.vue';
+    import booksEdit from '@/views/data/books/components/books-edit.vue';
+    import bookSearch from '@/views/recycle/workbench/book-search.vue';
+    import bookStatInfo from '@/views/recycle/components/book-stat-info.vue';
+    import bookStock from '@/views/recycle/components/book-stock.vue';
+    import setParams from '@/views/recycle/components/set-params.vue';
+    import addDiscount from '@/views/recycle/components/add-discount.vue';
+    import orderBlacklist from '@/views/recycleOrder/detail/order-blacklist.vue';
+    import orderRecycleLog from '@/views/recycleOrder/detail/order-recycle-log.vue';
+    import orderSalesLog from '@/views/recycleOrder/detail/order-sales-log.vue';
+    import { useBookOperation } from '@/utils/use-book-operation';
 
-  const searchType = ref('0');
-  function handleStatusChange(value) {
-    pageRef.value.reload({ searchType: value });
-  }
+    defineOptions({ name: 'scanLoglist' });
 
-  function handleSortChange({ column, order }) {
-    // 1 扫描次数 2总回收量 3最后一次扫描时间
-    reload({
-      orderType: column.columnKey,
-      orderWay: order === 'ascending' ? 'asc' : 'desc'
-    });
-  }
+    const searchType = ref('0');
+    function handleStatusChange(value) {
+        pageRef.value.reload({ searchType: value });
+    }
 
-  /** 表格列配置 */
-  const columns = ref([
-    {
-      type: 'selection',
-      columnKey: 'selection',
-      width: 50,
-      align: 'center',
-      fixed: 'left'
-    },
-    {
-      label: '图片',
-      prop: 'cover',
-      width: 120,
-      slot: 'cover'
-    },
-    {
-      label: '信息',
-      prop: 'baseInfo',
-      width: 540,
-      slot: 'baseInfo'
-    },
-    {
-      label: '总回收数量',
-      minWidth: 120,
-      prop: 'recycleTotalNumTime',
-      sortable: true,
-      columnKey: '2'
-    },
-    {
-      label: '扫描次数',
-      prop: 'scanNum',
-      sortable: true,
-      columnKey: '1',
-      minWidth: 100,
-      formatter: (row) => row?.scanNum || 0
-    },
-    {
-      label: '最近扫描时间',
-      prop: 'lastScanTime',
-      sortable: true,
-      columnKey: '3',
-      minWidth: 160,
-      formatter: (row) => (row?.lastScanTime ? row?.lastScanTime : '-')
-    },
-    {
-      label: '最大回收量',
-      minWidth: 120,
-      prop: 'recycleMax',
-      sortable: true,
-      columnKey: '6'
-    },
-    {
-      columnKey: 'action',
-      label: '操作',
-      width: 200,
-      slot: 'action',
-      fixed: 'right'
+    function handleSortChange({ column, order }) {
+        // 1 扫描次数 2总回收量 3最后一次扫描时间
+        reload({
+            orderType: column.columnKey,
+            orderWay: order === 'ascending' ? 'asc' : 'desc'
+        });
     }
-  ]);
 
-  /** 页面组件实例 */
-  const pageRef = ref(null);
+    /** 表格列配置 */
+    const columns = ref([
+        {
+            type: 'selection',
+            columnKey: 'selection',
+            width: 50,
+            align: 'center',
+            fixed: 'left'
+        },
+        {
+            label: '图片',
+            prop: 'cover',
+            width: 120,
+            slot: 'cover'
+        },
+        {
+            label: '信息',
+            prop: 'baseInfo',
+            width: 540,
+            slot: 'baseInfo'
+        },
+        {
+            label: '总回收数量',
+            minWidth: 120,
+            prop: 'recycleTotalNumTime',
+            sortable: true,
+            columnKey: '2'
+        },
+        {
+            label: '扫描次数',
+            prop: 'scanNum',
+            sortable: true,
+            columnKey: '1',
+            minWidth: 100,
+            formatter: (row) => row?.scanNum || 0
+        },
+        {
+            label: '最近扫描时间',
+            prop: 'lastScanTime',
+            sortable: true,
+            columnKey: '3',
+            minWidth: 160,
+            formatter: (row) => (row?.lastScanTime ? row?.lastScanTime : '-')
+        },
+        {
+            label: '最大回收量',
+            minWidth: 120,
+            prop: 'recycleMax',
+            sortable: true,
+            columnKey: '6'
+        },
+        {
+            columnKey: 'action',
+            label: '操作',
+            width: 250,
+            slot: 'action',
+            fixed: 'right'
+        }
+    ]);
 
-  const pageConfig = reactive({
-    pageUrl: '/user/userScanLog/getScanWorkLogList',
-    fileName: '扫码工作台',
-    cacheKey: 'workbenchTable',
-    params: {
-      searchType: '1'
-    },
-    rowKey: 'isbn'
-  });
+    /** 页面组件实例 */
+    const pageRef = ref(null);
 
-  //查看回收日志
-  const recycleLogRef = ref(null);
-  function handleViewRecycleLog(row) {
-    recycleLogRef.value?.handleOpen(row);
-  }
+    const pageConfig = reactive({
+        pageUrl: '/user/userScanLog/getScanWorkLogList',
+        fileName: '扫码工作台',
+        cacheKey: 'workbenchTable',
+        params: {
+            searchType: '1'
+        },
+        rowKey: 'isbn'
+    });
 
-  //查看售价日志
-  const salesLogRef = ref(null);
-  function handleViewSalesLog(row) {
-    salesLogRef.value?.handleOpen(row);
-  }
+    //查看回收日志
+    const recycleLogRef = ref(null);
+    function handleViewRecycleLog(row) {
+        recycleLogRef.value?.handleOpen(row);
+    }
 
-  //刷新表格
-  function reload(where) {
-    pageRef.value?.reload(where);
-  }
-  // 使用图书操作混入
-  const {
-    blacklistRef,
-    discountRef,
-    paramsRef,
-    handleOptBooklist,
-    handleOptBlacklist,
-    handleSetParams,
-    handleOptType,
-    handleOptRecycle
-  } = useBookOperation(pageRef);
+    //查看售价日志
+    const salesLogRef = ref(null);
+    function handleViewSalesLog(row) {
+        salesLogRef.value?.handleOpen(row);
+    }
+
+    //刷新表格
+    function reload(where) {
+        pageRef.value?.reload(where);
+    }
+    // 使用图书操作混入
+    const {
+        blacklistRef,
+        discountRef,
+        paramsRef,
+        handleOptBooklist,
+        handleOptBlacklist,
+        handleSetParams,
+        handleOptType,
+        handleOptRecycle
+    } = useBookOperation(pageRef);
 
-  //查看淘宝和孔网
-  function handleViewUrl(row, type) {
-    let url = '';
-    if (type == 'tb') {
-      url = `https://s.taobao.com/search?q=${row.isbn}`;
-    } else if (type == 'kw') {
-      url = `https://search.kongfz.com/product_result/?key=${row.isbn}&status=0&_stpmt=eyJzZWFyY2hfdHlwZSI6ImFjdGl2ZSJ9`;
+    //查看淘宝和孔网
+    function handleViewUrl(row, type) {
+        let url = '';
+        if (type == 'tb') {
+            url = `https://s.taobao.com/search?q=${row.isbn}`;
+        } else if (type == 'kw') {
+            url = `https://search.kongfz.com/product_result/?key=${row.isbn}&status=0&_stpmt=eyJzZWFyY2hfdHlwZSI6ImFjdGl2ZSJ9`;
+        }
+        window.open(url, '_blank');
     }
-    window.open(url, '_blank');
-  }
 </script>

+ 5 - 1
src/views/recycleOrder/detail/order-book-list.vue

@@ -14,6 +14,9 @@
                         style="min-width: 80px; width: 80px; height: 100px"
                         fit="cover"
                         :src="row.cover"
+                        :preview-src-list="[row.cover]"
+                        :initial-index="0"
+                        preview-teleported
                     />
                     <div
                         class="base-info-left-con flex flex-col items-start ml-3"
@@ -642,7 +645,8 @@
     };
 
     const auditStats = function () {
-        const total = dataList.value.length;
+        console.log(dataList.value, 'dataList.value');
+        const total = props.detail.totalNum;
         let upsell = 0,
             good = 0,
             normal = 0,