<template>
    <ele-page flex-table>
        <book-search @search="reload" />

        <common-table
            ref="pageRef"
            :pageConfig="pageConfig"
            :columns="columns"
            :tools="false"
        >
            <template #toolbar>
                <el-radio-group @change="handleStatusChange" v-model="bookTag">
                    <!-- 1教材 2社科 3中小学 4未分类 5全部 6关键字库 -->
                    <el-radio-button label="全部" value="5" />
                    <el-radio-button label="教材库" value="1" />
                    <el-radio-button label="社科库" value="2" />
                    <el-radio-button label="中小学" value="3" />
                    <el-radio-button label="未分类" value="4" />
                    <el-radio-button label="关键字库" value="6" />
                </el-radio-group>

                <el-button
                    type="primary"
                    class="ml-4"
                    v-permission="'recycle:bookTypes:export'"
                    @click="handleExportExcel"
                    >导出Excel</el-button
                >
            </template>

            <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-info
                    :row="row"
                    :showFormat="false"
                    :showTag="false"
                    @refresh="reload"
                />
            </template>
            <template #stock="{ row }">
                <book-stock :row="row" />
            </template>

            <template #action="{ row }">
                <el-button
                    type="danger"
                    link
                    v-if="bookTag != 4 && bookTag != 6"
                    v-permission="'recycle:bookTypes:delete'"
                    @click="handleDelete(row)"
                >
                    [移除]
                </el-button>
                <el-button
                    type="warning"
                    link
                    v-if="bookTag != 4 && bookTag != 6"
                    v-permission="'recycle:bookTypes:modifyType'"
                    @click="handleModifyType(row)"
                >
                    [修改类型]
                </el-button>
                <el-button
                    type="primary"
                    link
                    v-if="bookTag != 4 && bookTag != 6"
                    v-permission="'recycle:bookTypes:opeateLog'"
                    @click="handleOpenLog(row)"
                >
                    [操作日志]
                </el-button>
                <el-button
                    type="success"
                    link
                    v-if="bookTag == 4 || bookTag == 6"
                    v-permission="'recycle:bookTypes:addTextbook'"
                    @click="setBookTag(row, '确认加入教材库？', 1)"
                >
                    [加教材库]
                </el-button>
                <el-button
                    type="warning"
                    link
                    v-if="bookTag == 4 || bookTag == 6"
                    v-permission="'recycle:bookTypes:addSocial'"
                    @click="setBookTag(row, '确认加入社科库？', 2)"
                >
                    [加社科库]
                </el-button>
                <el-button
                    type="danger"
                    link
                    v-if="bookTag == 4 || bookTag == 6"
                    v-permission="'recycle:bookTypes:addPrimary'"
                    @click="setBookTag(row, '确认加入中小学库？', 3)"
                >
                    [加中小学库]
                </el-button>
                <el-button
                    type="success"
                    link
                    v-permission="'recycle:bookTypes:removeBlacklist'"
                    @click="handleOptBlacklist('remove', row)"
                    v-if="row.bookStatus == 3"
                >
                    [移除黑名单]
                </el-button>
                <el-button
                    type="danger"
                    link
                    v-permission="'recycle:bookTypes:addBlacklist'"
                    @click="handleOptBlacklist('add', row)"
                    v-if="row.bookStatus == 1 || row.bookStatus == 2"
                >
                    [加入黑名单]
                </el-button>
            </template>
        </common-table>

        <modify-type ref="modifyTypeRef" @success="reload" />
        <opeate-log ref="logRef" />
        <order-blacklist ref="blacklistRef" @refresh="reload" />
    </ele-page>
</template>

<script setup>
    import { ref, reactive, getCurrentInstance, onActivated } from 'vue';
    import CommonTable from '@/components/CommonPage/CommonTable.vue';
    import bookSearch from './components/book-search.vue';
    import bookInfo from '@/views/recycle/components/book-info.vue';
    import bookStock from '@/views/recycle/components/book-stock.vue';
    import ModifyType from './components/modify-type.vue';
    import OpeateLog from './components/opeate-log.vue';
    import orderBlacklist from '@/views/recycleOrder/detail/order-blacklist.vue';
    import { useBookOperation } from '@/utils/use-book-operation';
    const { proxy } = getCurrentInstance();
    defineOptions({ name: 'RecycleBooklist' });

    const bookTag = ref('4');
    function handleStatusChange(value) {
        bookTag.value = value;
        pageConfig.params.bookTag = value;
        pageRef.value.reload();
    }
    onActivated(() => {
        bookTag.value = '4';
        pageConfig.params.bookTag = bookTag.value;
        pageConfig.params.searchType = 0;
        pageRef.value.reload();
    });

    /** 表格列配置 */
    const columns = ref([
        {
            type: 'selection',
            columnKey: 'selection',
            width: 50,
            align: 'center',
            fixed: 'left'
        },
        {
            label: '图片',
            prop: 'cover',
            width: 120,
            slot: 'cover'
        },
        {
            label: '信息',
            prop: 'baseInfo',
            width: 500,
            slot: 'baseInfo'
        },
        {
            label: '回收折扣',
            minWidth: 100,
            prop: 'recycleDiscount',
            align: 'center'
        },
        {
            label: '回收价格',
            prop: 'recyclePrice',
            minWidth: 100,
            align: 'center'
        },
        {
            label: '最大回收量',
            minWidth: 120,
            prop: 'recycleMax',
            align: 'center'
        },
        {
            label: '总回收数量',
            minWidth: 120,
            prop: 'recycleTotalNum',
            align: 'center'
        },
        {
            label: '当前剩余回收量',
            minWidth: 140,
            prop: 'restRecycleNum',
            align: 'center'
        },
        {
            label: '所属类型',
            prop: 'bookTagName',
            width: 120,
            align: 'center'
        },
        {
            label: '售价',
            prop: 'salePrice',
            width: 120,
            align: 'center',
            formatter: (row) => '¥ ' + (row.salePrice || 0)
        },
        {
            label: '销量',
            prop: 'salesNum',
            align: 'center'
        },
        {
            columnKey: 'action',
            label: '操作',
            width: 120,
            slot: 'action',
            fixed: 'right'
        }
    ]);

    /** 页面组件实例 */
    const pageRef = ref(null);

    const pageConfig = reactive({
        pageUrl: '/book/bookInfo/bookTagList',
        exportUrl: '/book/bookInfo/exportBookTagList',
        fileName: '图书类型管理',
        cacheKey: 'bookTypesTable',
        rowKey: 'isbn',
        params: {
            bookTag: bookTag.value,
            searchType: 0
        }
    });

    //导出excel
    function handleExportExcel() {
        pageRef.value?.exportData('图书类型管理');
    }

    //刷新表格
    function reload(where) {
        pageRef.value?.reload(where);
    }
    /**
     * 类型操作（社科库/教材库）
     * @param {Number} type - 类型：1社科库，2教材库 3 中小学
     */
    const modifyTypeRef = ref(null);
    function handleModifyType(row) {
        modifyTypeRef.value.open({ isbn: row.isbn, bookTag: row.bookTag });
    }

    /**
     * 操作日志
     */
    const logRef = ref(null);
    function handleOpenLog(row) {
        logRef.value?.handleOpen(row);
    }

    //封装一个方法，删除
    function setBookTag(row, message, operateType) {
        pageRef.value?.messageBoxConfirm({
            message: message,
            fetch: () =>
                proxy.$http.post('/book/bookInfo/setBookTag', {
                    isbn: row.isbn,
                    // 1加入教材库 2加入社科库 3加入中小学库 4移除
                    operateType: operateType
                })
        });
    }

    /**
     * 移除
     */
    function handleDelete(row) {
        setBookTag(row, '确认移除？', 4);
    }

    // 使用图书操作混入
    const { blacklistRef, handleOptBlacklist } = useBookOperation(pageRef);
</script>
