在线文库系统 转码功能源代码展示 支持文档在线预览查阅功能

news2024/11/15 15:26:13

1、支持 pdf,doc,docx,ppt,pptx,txt,xlsx,xls,csv,zip,epub,ai,psd 格式的文件

2、文库系统的上传界面,用户可以进行上传自己的文件,然后自定义文档售价,来赚取金额。

在这里插入图片描述

3、文库系统的部分代码披露:

<template>
    <div class="ub-panel">
        <div class="head">
            <div class="more">
                <a v-if="WenkuEnhance" :href="$url.web('wenku/upload_batch')">
                    <i class="iconfont icon-upload"></i>
                    批量上传
                </a>
            </div>
            <div class="title">文档上传</div>
        </div>
        <div class="body">
            <div class="ub-form" v-loading="loading">
                <div class="line">
                    <div class="label">
                        <span>*</span>
                        文档上传
                    </div>
                    <div class="field">
                        <div v-if="data.fileUrl">
                            <div class="ub-alert">已上传《{{ data.uploadedFileName }}》</div>
                        </div>
                        <div style="width:200px;min-height:31px;">
                            <UploadButton category="file"
                                          :url="$url.web('member_data/file_manager')"
                                          :upload-config="uploadConfig"
                                          :upload-before-check="onUploadBeforeCheck"
                                          @success="onUploadSuccess"></UploadButton>
                        </div>
                        <div class="help">
                            支持 {{ uploadConfig.category.file.extensions.join(',') }} 格式的文件
                        </div>
                    </div>
                </div>
                <div class="line">
                    <div class="label">
                        <span>*</span>
                        文档名称
                    </div>
                    <div class="field">
                        <el-input v-model="data.title"></el-input>
                    </div>
                </div>
                <div class="line">
                    <div class="label">
                        <span>*</span>
                        文档分类
                    </div>
                    <div class="field">
                        <el-cascader v-model="data.category"
                                     style="width:100%;"
                                     :options="categoryTree"
                                     :props="{value:'id',label:'title',children:'_child'}"></el-cascader>
                    </div>
                </div>
                <div class="line">
                    <div class="label">
                        辅助分类
                    </div>
                    <div class="field">
                        <DocCatsSelector :group-filter="groupFilter" v-model="data.catIds"/>
                    </div>
                </div>
                <div class="line">
                    <div class="label">文档封面</div>
                    <div class="field">
                        <image-selector v-model="data.cover"></image-selector>
                        <div class="help">
                            留空将自动使用文档第一页
                        </div>
                    </div>
                </div>
                <div class="line">
                    <div class="label">文档售价</div>
                    <div class="field">
                        <el-input v-model="data.creditCost" style="max-width:15em;" placeholder="0表示免费">
                            <span slot="prepend">积分兑换</span>
                        </el-input>
                        <el-input v-model="data.moneyCost" style="max-width:15em;" placeholder="0.00表示免费">
                            <span slot="prepend">现金购买</span>
                        </el-input>
                        <div class="help">
                            可以同时设定,两个都为0表示免费
                        </div>
                    </div>
                </div>
                <div class="line">
                    <div class="label">文档标签</div>
                    <div class="field">
                        <el-input v-model="data.tags"></el-input>
                        <div class="help">多个标签使用,分割</div>
                    </div>
                </div>
                <div class="line">
                    <div class="label">文档简介</div>
                    <div class="field">
                        <el-input type="textarea" v-model="data.description"></el-input>
                    </div>
                </div>
                <div class="line" v-if="AnonymousUploadEnable">
                    <div class="label">匿名</div>
                    <div class="field">
                        <el-checkbox v-model="data.anonymous"></el-checkbox>
                        <div class="help">
                            开启后,文档将不显示作者信息
                        </div>
                    </div>
                </div>
                <div class="line">
                    <div class="label">&nbsp;</div>
                    <div class="field">
                        <a class="btn btn-primary btn-lg" href="javascript:;" @click="doSubmit">提交文档</a>
                    </div>
                </div>
            </div>
        </div>
    </div>
</template>
<script>
import UploadButton from '@ModStartAsset/svue/components/UploadButton'
import DocCatsSelector from "../components/DocCatsSelector";

export default {
    name: "WenkuUpload",
    components: {DocCatsSelector, UploadButton},
    data() {
        return {
            WenkuEnhance: window.__data.WenkuEnhance,
            AnonymousUploadEnable: window.__data.AnonymousUploadEnable,
            loading: false,
            categoryTree: window.__data.categoryTree,
            uploadConfig: {
                chunkSize: window.__data.uploadChunkSize,
                category: {
                    file: {
                        extensions: window.__data.types,
                        maxSize: window.__data.maxUploadFileSize,
                    }
                }
            },
            data: {
                uploadedFileName: '',
                fileUrl: '',
                title: '',
                cover: '',
                description: '',
                category: [],
                categoryId: 0,
                catIds: [],
                creditCost: 0,
                moneyCost: '0.00',
                tags: '',
                anonymous: false,
            },
        }
    },
    methods: {
        groupFilter(group) {
            let categoryId = 0
            if (this.data.category.length) {
                categoryId = this.data.category[this.data.category.length - 1]
            }
            return group.categoryIds && group.categoryIds.includes(categoryId)
        },
        onUploadBeforeCheck(input, file, continueUpload, cancelUpload) {
            if (!window.__data.duplicateCheck) {
                continueUpload()
                return
            }
            this.$api.post(this.$url.api('wenku/duplicate_check'), {
                md5: input.md5,
                name: input.name,
            }, res => {
                if (res.data.status === 'pass') {
                    continueUpload()
                } else {
                    this.$dialog.tipError(res.data.msg)
                    cancelUpload(null)
                }
            }, res => {
                cancelUpload()
            })
        },
        onUploadSuccess(data) {
            this.data.fileUrl = data.path
            this.data.uploadedFileName = data.name
            this.data.title = data.name
            this.data.description = data.name
            if (!window.__data.UploadFileExtEnable) {
                this.data.title = this.data.title.replace(/\.[^\.]+$/, '')
                this.data.description = this.data.description.replace(/\.[^\.]+$/, '')
            }
            if (window.__data.tagManagerEnable) {
                this.$api.post(this.$url.api('tag_manager/parse'), {biz: 'wenku', content: data.name}, res => {
                    this.data.tags = res.data.tags.join(',')
                })
            }
        },
        doSubmit() {
            this.loading = true
            if (this.data.category.length > 0) {
                this.data.categoryId = this.data.category[this.data.category.length - 1]
            }
            this.$api.post(this.$url.api('wenku/upload'), this.data, res => {
                this.loading = false
                this.$dialog.tipSuccess('保存成功', () => {
                    window.location.href = this.$url.web('member_wenku')
                })
            }, res => {
                this.loading = false
            })
        }
    }
}
</script>

4、用户自己下载过的文档

在这里插入图片描述

5、个人中心的积分明细

在这里插入图片描述

在这里插入图片描述
6、文库的列表页:在这里插入图片描述

<div class="tw-mb-3 tw-bg-white tw-transform tw-duration-300 hover:tw--translate-y-1">
    <a href="{{modstart_web_url('doc/'.$record['hash'])}}"
       class="ub-cover ub-cover-4-5 tw-relative contain tw-border tw-border-gray-100 tw-border-solid tw-rounded-lg hover:tw-shadow-lg"
       data-src="{{\ModStart\Core\Assets\AssetsUtil::fix($record['cover'])}}">
        <div class="tw-absolute tw-right-2 tw-bottom-2 ub-cover-1-1 tw-w-6 tw-bg-white tw-rounded"
             style="background-image:url({{\Module\Wenku\Util\WenkuDocUtil::icon($record['ext'])}})">
        </div>
        @if(isset($record['moneyCost']) && isset($record['creditCost']))
            @if($record['moneyCost']+$record['creditCost']>0.01)
                <div class="tw-absolute tw-leading-4 tw-left-2 tw-px-1 tw-rounded tw-text-sm tw-top-2 ub-bg-vip">VIP</div>
            @endif
        @endif
    </a>
    <div class="tw-pt-2">
        <a href="{{modstart_web_url('doc/'.$record['hash'])}}"
           class="tw-block tw-leading-4 tw-h-8 tw-text-gray-800 tw-overflow-hidden">
            {{$record['title']}}
        </a>
    </div>
    <div class="tw-mt-1 tw-flex tw-w-full ub-text-muted tw-pb-2 tw-text-sm">
        <div class="tw-flex">
            @if(!empty($record['pageCount']))
                <div class="tw-mr-2">
                    {{$record['pageCount']?$record['pageCount']:'-'}}页
                </div>
            @endif
            <div class="tw-mr-2">
{{--                <i class="iconfont icon-download"></i>--}}
{{--                {{$record['downloadCount']?:0}}--}}
            </div>
        </div>
        <div class="tw-flex-grow tw-text-right">
{{--            <i class="iconfont icon-eye"></i>--}}
{{--            {{$record['viewCount']?:0}}--}}
            <i class="iconfont"><img style="vertical-align:middle;height:1em;" src="{{\Module\Wenku\Util\WenkuDocUtil::icon('popularity')}}"  /></i>
            {{$record['popularity']??0}}
{{--            {{json_encode($record)??0}}--}}
        </div>
    </div>
</div>

7、在线文库系统文档的详情页

在这里插入图片描述

8、用户可以开通文库系统的VIP功能,享受更多的权益

在这里插入图片描述

9、系统支持主流的结算方式:支付宝、微信等等,另外也可以定制开发对接第三方支付平台!!!!!

在这里插入图片描述

10、文库系统的后台管理:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

11、需要安装搭建文库系统的来:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1272392.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

开发中遇到的问题 -- 回调解决应用端和服务端通信问题

前言 这是我在这个网站整理的笔记,有错误的地方请指出&#xff0c;关注我&#xff0c;接下来还会持续更新。 作者&#xff1a;神的孩子都在歌唱 这里写目录标题 一. 问题概述二. 代码展示2.1 公共服务端2.2 应用端 一. 问题概述 项目介绍&#xff1a;今天做项目的时候遇到了点…

传教士与野人过河问题

代码模块参考文章&#xff1a;传教士与野人过河问题&#xff08;numpy、pandas&#xff09;_python过河问题_醉蕤的博客-CSDN博客 问题描述 一般的传教士和野人问题&#xff08;Missionaries and Cannibals&#xff09;&#xff1a;有N个传教士和C个野人来到河边准 备渡河。…

键入网址到网页显示,期间发生了什么?(计算机网络)

浏览器首先会对URL进行解析 下面以http://www.server.com/dir1/file1.html为例 当没有路径名时&#xff0c;就代表访问根目录下事先设置的默认文件&#xff0c;也就是 /index.html 或者 /default.html 对URL进行解析之后&#xff0c;浏览器确定了 Web 服务器和文件名&#x…

多多跨境跑出高质量发展“加速度”,解锁拼多多Q3财报背后的王牌

互联网红利渐趋消退&#xff0c;用户拉新难度加大&#xff0c;这些现象也在表明过去电子商务依靠资本、流量快速增长的发展模式已经成为过去式。由高速发展转为高质量发展&#xff0c;在今天每一个经济体与宏观经济发展态势一般&#xff0c;发展的“质量”价值正在被放大开来。…

一个软件测试练手项目——学生信息管理系统测试,卷起来啊

免费分享一个练手项目&#xff0c;学生信息管理系统&#xff0c;获取方式在文末 1.引言 1.1项目目的 软件测试是为了在软件投入生产性运行之前&#xff0c;尽可能多地发现软件的错误。该项目的目的是给学习软件测试的朋友练手用 1.2 项目背景 随着学校的规模不断扩大&…

学习程序员必知必会的基础算法(收藏)

近年来学习python的程序员愈来愈多&#xff0c;有的同学选择了python培训机构&#xff0c;也有的人觉得自己天赋好选择了自学不管大家怎么去学习&#xff0c;在学习python基础的过程中&#xff0c;肯定离不开的就是基础算法&#xff0c;今天就为大家介绍几大学习中的基础算法。…

1000多页!LeetCode刷题手册分享

这本手册确实是一部令人印象深刻的作品。&#xff08;手册链接在文末&#xff01;&#xff01;&#xff01;&#xff09; 首先&#xff0c;内容充实是这本手册的一大亮点。它涵盖了广泛的算法和数据结构主题&#xff0c;包括数组、链表、树、图、排序算法、动态规划等等。每个…

P28 C++ 对象的生存周期(栈的作用域生存周期)

前言 本期的主题是栈作用域中对象的生存期&#xff0c;通俗来讲&#xff0c;就是讨论对象是如何在栈上生存的。 这章内容整体分为两部分。 第一部分是&#xff0c;你必须理解栈上的东西是如何存在的&#xff0c;这样你才能真正写出能正常工作的代码。第二部分是&#xff0c;一…

什么是AI PC:人工智能电脑?

大家好啊&#xff0c;我是董董灿。 今天在一个群聊里&#xff0c;聊到了关于 AI PC (人工智能电脑)的话题。 之前看到过关于 AI PC 的新闻&#xff0c;说的是联想集团董事长兼CEO杨元庆在一次演讲中提到了 AI PC 的概念&#xff0c;并且绘声绘色的描绘了AI PC 的发展前景。 下…

Windows系列:windows server 2003 - 组策略部署软件

通过组策略为域内用户部署&#xff08;deploy&#xff09;软件&#xff0c;可分为指派&#xff08;assign&#xff09;和发布&#xff08;publish&#xff09;。 软件指派给用户&#xff1a;用户在域内登录后&#xff0c;被“通告 advertised”给用户&#xff0c;此时仅安装了部…

链表_相交链表

//给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 // // 图示两个链表在节点 c1 开始相交&#xff1a; // // // // 题目数据 保证 整个链式结构中不存在环。 // // 注意…

提升技能素养,AMCAP做出合适的决策

近年来&#xff0c;智能配置投资与理财逐渐受到关注并走俏。这是一种简单快捷的智慧化理财方式&#xff0c;通过将个人和家族的闲置资金投入到低风险高流动性的产品中。 国际财富管理投资机构AMCAP集团金融分析师表示&#xff1a;智能配置投资与理财之所以持续走俏&#xff0c…

WebUI工作流插件超越ComfyUI

在AI绘画领域&#xff0c;Stable Diffsion是最受欢迎的&#xff0c;因为它是开源软件。 开源有两大优势&#xff0c;一是免费&#xff0c;二是适合折腾。 大量的开发者、爱好者投入无尽的热情&#xff0c;来推动Stable Diffsion的快速发展。 在图形界面方面&#xff0c;WebU…

Python 进阶(十二):随机数(random 模块)

《Python入门核心技术》专栏总目录・点这里 文章目录 1. 导入random库2. 常用随机数函数2.1 生成随机浮点数2.2 生成随机整数2.3 从序列中随机选择2.4 随机打乱序列3. 设置随机数种子4. 应用实例4.1 游戏开发4.2 数据分析4.3 加密与安全4.4 模拟实验5. 总结大家好,我是水滴~~ …

Linux常用命令——mv命令

文章目录 1. 简介2. 命令格式3. 主要参数4. 常见用法及示例4.1 移动文件4.2 重命名文件4.3 交互式移动文件4.4 强制移动文件4.5 移动多个文件4.6 使用通配符移动文件 5. 注意事项6. 结论 1. 简介 mv 命令在Linux系统中用于移动文件或目录&#xff0c;同时也可以用于重命名文件…

Python使用——发送Get请求,模拟http请求 进行SSH连接服务器

前言 本篇博客是python开发的使用案例博客&#xff0c;结合一些具体的案例进行阐述&#xff0c;本篇博客主要内容是使用Python发送Get请求&#xff0c;模拟http请求&#xff0c;后面可以搞个爬虫出来&#xff0c;另外就是如何使用Python进行SSH连接服务器。 其他相关的博客文…

【代码随想录】算法训练计划37

贪心 1、738. 单调递增的数字 题目&#xff1a; 输入: n 10 输出: 9 思路&#xff1a; func monotoneIncreasingDigits(n int) int {// 贪心&#xff0c;利用字符数组s : strconv.Itoa(n)ss : []byte(s)leng : len(ss)if leng < 1 {return n}for i:leng-1; i>0; i-- …

【MATLAB】异常数据识别

基于分位数的异常点识别 首先&#xff0c;给定了一个原始数据序列x。然后&#xff0c;计算了序列x的上四分位数和下四分位数&#xff0c;并根据这两个值计算了异常点的阈值。上四分位数减去1.5倍的四分位数范围得到异常值下界&#xff0c;下四分位数加上1.5倍的四分位数范围得…

虚拟数据生成_以Python为工具

生成虚拟数据_以Python为工具 生成虚拟数据技术在现实生活中具有多个重要的应用领域。它为数据隐私保护、机器学习算法开发、数据处理和可视化等方面提供了实用且有价值的解决方案。尤其是能满足定制化需求的虚拟数据&#xff0c;在预期的方向上让数据定向随机。 &#x1f339…

下载MySQL JDBC驱动的方法

说明 java代码通过JDBC访问MySQL数据库&#xff0c;需要MySQL JDBC驱动。 例如&#xff0c;下面这段代码&#xff0c;因为找不到JDBC驱动&#xff0c;所以执行会报异常&#xff1a; package com.thb;public class JDBCDemo {public static void main(String[] args) throws …