|
@@ -0,0 +1,199 @@
|
|
|
|
|
+<template>
|
|
|
|
|
+ <ele-page flex-table>
|
|
|
|
|
+ <page-search @search="reload"></page-search>
|
|
|
|
|
+
|
|
|
|
|
+ <common-table ref="pageRef" :pageConfig="pageConfig" :columns="columns">
|
|
|
|
|
+ <template #toolbar>
|
|
|
|
|
+ <el-button
|
|
|
|
|
+ type="primary"
|
|
|
|
|
+ plain
|
|
|
|
|
+ :icon="PlusOutlined"
|
|
|
|
|
+ v-permission="'data:inventory:add'"
|
|
|
|
|
+ @click="handleUpdate()"
|
|
|
|
|
+ >
|
|
|
|
|
+ 新增图书商品
|
|
|
|
|
+ </el-button>
|
|
|
|
|
+ <el-button
|
|
|
|
|
+ type="primary"
|
|
|
|
|
+ plain
|
|
|
|
|
+ v-permission="'data:inventory:import'"
|
|
|
|
|
+ @click="handleImportExcel"
|
|
|
|
|
+ :icon="UploadOutlined"
|
|
|
|
|
+ >
|
|
|
|
|
+ 批量导入
|
|
|
|
|
+ </el-button>
|
|
|
|
|
+ <el-button
|
|
|
|
|
+ type="success"
|
|
|
|
|
+ plain
|
|
|
|
|
+ v-permission="'data:inventory:checkNew'"
|
|
|
|
|
+ @click="handleCheckNew"
|
|
|
|
|
+ :icon="CloudUploadOutlined"
|
|
|
|
|
+ >
|
|
|
|
|
+ 检测上新
|
|
|
|
|
+ </el-button>
|
|
|
|
|
+ </template>
|
|
|
|
|
+ <template #cover="{ row }">
|
|
|
|
|
+ <el-image
|
|
|
|
|
+ style="width: 80px; height: 100px"
|
|
|
|
|
+ fit="cover"
|
|
|
|
|
+ :src="row.cover"
|
|
|
|
|
+ />
|
|
|
|
|
+ </template>
|
|
|
|
|
+
|
|
|
|
|
+ <template #baseInfo="{ row }">
|
|
|
|
|
+ <book-base-info :row="row.bookInfo" @click="handleUpdate"></book-base-info>
|
|
|
|
|
+ </template>
|
|
|
|
|
+
|
|
|
|
|
+ <template #stock="{ row }">
|
|
|
|
|
+ <book-stock :row="row"></book-stock>
|
|
|
|
|
+ </template>
|
|
|
|
|
+
|
|
|
|
|
+ <template #action="{ row }">
|
|
|
|
|
+ <div>
|
|
|
|
|
+ <el-button
|
|
|
|
|
+ type="success"
|
|
|
|
|
+ link
|
|
|
|
|
+ v-permission="'data:inventory:update'"
|
|
|
|
|
+ @click="handleUpdate(row)"
|
|
|
|
|
+ >
|
|
|
|
|
+ [编辑]
|
|
|
|
|
+ </el-button>
|
|
|
|
|
+ <el-button
|
|
|
|
|
+ type="danger"
|
|
|
|
|
+ link
|
|
|
|
|
+ v-permission="'data:inventory:recycleDetail'"
|
|
|
|
|
+ @click="handleRecycleDetail(row)"
|
|
|
|
|
+ >
|
|
|
|
|
+ [回收明细]
|
|
|
|
|
+ </el-button>
|
|
|
|
|
+ <el-button
|
|
|
|
|
+ type="warning"
|
|
|
|
|
+ link
|
|
|
|
|
+ v-permission="'data:inventory:saleDetail'"
|
|
|
|
|
+ @click="handleSaleDetail(row)"
|
|
|
|
|
+ >
|
|
|
|
|
+ [销售明细]
|
|
|
|
|
+ </el-button>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </template>
|
|
|
|
|
+ </common-table>
|
|
|
|
|
+ <books-edit ref="editRef" @success="reload()"></books-edit>
|
|
|
|
|
+ <books-import
|
|
|
|
|
+ ref="importRef"
|
|
|
|
|
+ v-model="showImport"
|
|
|
|
|
+ @done="reload()"
|
|
|
|
|
+ ></books-import>
|
|
|
|
|
+ <book-check-new ref="checkNewRef"></book-check-new>
|
|
|
|
|
+ </ele-page>
|
|
|
|
|
+</template>
|
|
|
|
|
+
|
|
|
|
|
+<script setup>
|
|
|
|
|
+ import { ref, reactive } from 'vue';
|
|
|
|
|
+ import {
|
|
|
|
|
+ PlusOutlined,
|
|
|
|
|
+ UploadOutlined,
|
|
|
|
|
+ CloudUploadOutlined
|
|
|
|
|
+ } from '@/components/icons';
|
|
|
|
|
+ import pageSearch from './components/page-search.vue';
|
|
|
|
|
+ import CommonTable from '@/components/CommonPage/CommonTable.vue';
|
|
|
|
|
+ import booksEdit from '@/views/data/books/components/books-edit.vue';
|
|
|
|
|
+ import booksImport from '@/views/data/books/components/books-import.vue';
|
|
|
|
|
+ import bookBaseInfo from './components/book-base-info.vue';
|
|
|
|
|
+ import bookCheckNew from './components/book-check-new.vue';
|
|
|
|
|
+ import bookStock from './components/book-stock.vue';
|
|
|
|
|
+ import { useDictData } from '@/utils/use-dict-data';
|
|
|
|
|
+
|
|
|
|
|
+ defineOptions({ name: 'recycleOrderCancelled' });
|
|
|
|
|
+
|
|
|
|
|
+ const [perCheckDicts] = useDictData(['is_common_yes']);
|
|
|
|
|
+
|
|
|
|
|
+ /** 表格列配置 */
|
|
|
|
|
+ const columns = ref([
|
|
|
|
|
+ {
|
|
|
|
|
+ type: 'selection',
|
|
|
|
|
+ columnKey: 'selection',
|
|
|
|
|
+ width: 50,
|
|
|
|
|
+ align: 'center',
|
|
|
|
|
+ fixed: 'left'
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ label: '图片',
|
|
|
|
|
+ prop: 'cover',
|
|
|
|
|
+ slot: 'cover',
|
|
|
|
|
+ align: 'center'
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ label: '基础信息',
|
|
|
|
|
+ prop: 'baseInfo',
|
|
|
|
|
+ slot: 'baseInfo',
|
|
|
|
|
+ align: 'center',
|
|
|
|
|
+ minWidth: 320
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ label: '商品类型',
|
|
|
|
|
+ prop: 'goodsType',
|
|
|
|
|
+ formatter: (row) => '图书商品',
|
|
|
|
|
+ align: 'center'
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ label: '售价',
|
|
|
|
|
+ prop: 'salePrice',
|
|
|
|
|
+ align: 'center',
|
|
|
|
|
+ minWidth: 100,
|
|
|
|
|
+ formatter: (row) => '¥' + row.salePrice || 0
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ label: '库存',
|
|
|
|
|
+ prop: 'stock',
|
|
|
|
|
+ align: 'center',
|
|
|
|
|
+ minWidth: 100,
|
|
|
|
|
+ slot: 'stock'
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ label: '销量',
|
|
|
|
|
+ prop: 'salesNum',
|
|
|
|
|
+ align: 'center',
|
|
|
|
|
+ minWidth: 100,
|
|
|
|
|
+ formatter: (row) => row.salesNum || 0
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ columnKey: 'action',
|
|
|
|
|
+ label: '操作',
|
|
|
|
|
+ width: 200,
|
|
|
|
|
+ align: 'center',
|
|
|
|
|
+ slot: 'action'
|
|
|
|
|
+ }
|
|
|
|
|
+ ]);
|
|
|
|
|
+
|
|
|
|
|
+ /** 页面组件实例 */
|
|
|
|
|
+ const pageRef = ref(null);
|
|
|
|
|
+
|
|
|
|
|
+ const pageConfig = reactive({
|
|
|
|
|
+ pageUrl: '/book/stock/pagelist',
|
|
|
|
|
+ fileName: '库存数据',
|
|
|
|
|
+ cacheKey: 'books-stock-data'
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ //导入
|
|
|
|
|
+ const showImport = ref(false);
|
|
|
|
|
+ function handleImportExcel() {
|
|
|
|
|
+ showImport.value = true;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ //刷新表格
|
|
|
|
|
+ function reload(where) {
|
|
|
|
|
+ pageRef.value?.reload(where);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ //新增编辑图书
|
|
|
|
|
+ const editRef = ref(null);
|
|
|
|
|
+ function handleUpdate(row) {
|
|
|
|
|
+ editRef.value?.handleOpen(row);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ //检测上新
|
|
|
|
|
+ const checkNewRef = ref(null);
|
|
|
|
|
+ function handleCheckNew() {
|
|
|
|
|
+ checkNewRef.value?.handleOpen();
|
|
|
|
|
+ }
|
|
|
|
|
+</script>
|