提交 4579974f authored 作者: 许敬帅's avatar 许敬帅

财税实操

上级
> 1%
last 2 versions
not ie <= 8
.DS_Store
node_modules
/dist
# local env files
.env.local
.env.*.local
# Log files
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw*
# 税可知
## 技术选型
`Vue+Axios+webpack+ES6+Element+Scss`
## 项目运行
1. 执行`yarn install`安装相关依赖
2. 配置开发环境hosts
```
127.0.0.1 dev-deliver-tax-opr-digit.zgsccbs.com
```
3. 执行`yarn serve` 启动项目
## 线上环境打包
```
yarn run build
```
### Run your tests
```
yarn run test
```
### Lints and fixes files
```
yarn run lint
```
### Run your unit tests
```
yarn run test:unit
```
### 更多自定义配置请参考
[Configuration Reference](https://cli.vuejs.org/config/).
module.exports = {
presets: [
'@vue/app'
]
}
File added
module.exports = {
moduleFileExtensions: [
'js',
'jsx',
'json',
'vue'
],
transform: {
'^.+\\.vue$': 'vue-jest',
'.+\\.(css|styl|less|sass|scss|svg|png|jpg|ttf|woff|woff2)$': 'jest-transform-stub',
'^.+\\.jsx?$': 'babel-jest'
},
transformIgnorePatterns: [
'/node_modules/'
],
moduleNameMapper: {
'^@/(.*)$': '<rootDir>/src/$1'
},
snapshotSerializers: [
'jest-serializer-vue'
],
testMatch: [
'**/tests/unit/**/*.spec.(js|jsx|ts|tsx)|**/__tests__/*.(js|jsx|ts|tsx)'
],
testURL: 'http://localhost/'
}
This source diff could not be displayed because it is too large. You can view the blob instead.
{
"name": "tax-revenue",
"version": "0.1.0",
"private": true,
"scripts": {
"serve": "vue-cli-service serve",
"build": "vue-cli-service build",
"test:unit": "vue-cli-service test:unit"
},
"dependencies": {
"@chenfengyuan/vue-qrcode": "^1.0.0",
"array-to-tree": "^2.2.0",
"axios": "^0.18.0",
"compression-webpack-plugin": "^2.0.0",
"copy-webpack-plugin": "^5.0.4",
"element-ui": "^2.6.1",
"js-cookie": "^2.2.0",
"js-md5": "^0.7.3",
"lodash": "^4.17.11",
"open-browser-webpack-plugin": "0.0.5",
"v-viewer": "^1.4.0",
"video.js": "^7.5.5",
"videojs-contrib-hls": "^5.15.0",
"vue": "^2.6.6",
"vue-pdf": "3.1.5",
"vue-router": "^3.0.1",
"vue-social-share": "0.0.3",
"vuex": "^3.0.1",
"web-highlighter": "^0.3.3"
},
"devDependencies": {
"@vue/cli-plugin-babel": "^3.5.0",
"@vue/cli-plugin-unit-jest": "^3.5.0",
"@vue/cli-service": "^3.5.0",
"@vue/test-utils": "1.0.0-beta.29",
"babel-core": "7.0.0-bridge.0",
"babel-jest": "^23.6.0",
"fibers": "^3.1.1",
"sass": "^1.17.2",
"sass-loader": "^7.1.0",
"vue-template-compiler": "^2.5.21"
}
}
module.exports = {
plugins: {
autoprefixer: {}
}
}
This source diff could not be displayed because it is too large. You can view the blob instead.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<link rel="icon" href="<%= BASE_URL %>favicon.ico">
<title>税可知</title>
<!-- <script type="text/javascript" src="./hls.js"></script> -->
<script type="text/javascript" src="//zgsccbs.com/skz/hls.js"></script>
</head>
<body>
<noscript>
<strong>We're sorry but tax-revenue doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
</noscript>
<div id="app"></div>
<!-- built files will be auto injected -->
</body>
</html>
<template>
<div id="app">
<div id="nav">
<v-header v-if="headerIsShow"></v-header>
</div>
<router-view :key="$route.path" />
<!-- 返回顶部 -->
<div class="extend-opt">
<div class="shouji-erweima">
<i></i><span>手机版</span>
<div class="large">
<img :src="DEFAULTIMG.QRCODE"/>
</div>
</div>
<div class="go-to-top" v-if="btnFlag" @click="backTop">
<i></i><span>返回顶部</span>
</div>
</div>
<v-footer v-if="footerIsShow"></v-footer>
</div>
</template>
<script>
import { DEFAULTIMG } from '@/utils/global';
import header from '@/components/Header/index';
import footer from '@/components/Footer/index';
export default {
data() {
return {
DEFAULTIMG,
btnFlag: false,
headerIsShow: true,
footerIsShow: true,
}
},
components: {
'v-header': header,
'v-footer': footer,
},
methods: {
// 点击图片回到顶部方法,加计时器是为了过渡顺滑
backTop () {
let that = this
let timer = setInterval(() => {
let ispeed = Math.floor(-that.scrollTop / 5)
document.documentElement.scrollTop = document.body.scrollTop = that.scrollTop + ispeed
if (that.scrollTop === 0) {
clearInterval(timer)
}
}, 16)
},
// 为了计算距离顶部的高度,当高度大于60显示回顶部图标,小于60则隐藏
scrollToTop () {
let that = this
let scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop
that.scrollTop = scrollTop
if (that.scrollTop > 0) {
that.btnFlag = true
} else {
that.btnFlag = false
}
}
},
mounted() {
if (/ebook/.test(window.location.pathname) || /ebook/.test(window.location.hash)) {
this.headerIsShow = false
this.footerIsShow = false
}
this.$router.beforeEach((to, from, next) => {
/* 路由发生变化修改页面title */
if (to.meta.title) {
document.title = to.meta.title;
}
this.headerIsShow = true;
this.footerIsShow = true;
to.meta.hideHeader && (this.headerIsShow = false);
to.meta.hideFooter && (this.footerIsShow = false);
window.scrollTo(0,0);
next();
})
window.addEventListener('scroll', this.scrollToTop)
},
destroyed () {
window.removeEventListener('scroll', this.scrollToTop)
},
}
</script>
<style lang="scss">
@import "app";
</style>
/**
* @Author: skyeGao
* @Email: yyjzp1314@126.com
* @DateTime: 2019-04-06 12:00:01
* @Description: 公共 相关请求 api
*/
import request from '@/utils/request'
/**
* 根据code获取广告位数据
* signValue - 广告位代码
* num - 数量
*/
export const getAdByCode = (data) => {
return request({
url: '/sysuser1/fg/adspace/signvalue',
method: 'get',
params: { ...data },
})
}
// footer 友情链接
export const footerLinks = (params) => {
const { num } = params
return request({
url: '/sysuser1/fg/links/list',
method: 'get',
params: { num },
})
}
// footer 链接点击数 update
export const footerLinksUpdate = (params) => {
const { linkId } = params
return request({
url: `/sysuser1/fg/links/update/${linkId}`,
method: 'post',
})
}
// 按条件分页查询页脚
export const footerLists = () => {
const params = {
pageNum: 1,
pageSize: 10,
}
return request({
url: `/sysuser1/fg/footer/page`,
method: 'get',
params: { ...params }
})
}
// 根据id查询页脚详情
export const footerItemInfo = (fId) => request({
url: `/sysuser1/fg/footer/${fId}`,
method: 'get',
})
// 底部版权信息
export const footerCopyright = () => request({
url: `/sysuser1/fg/dictionary/get`,
method: 'get',
})
// 收藏
// objectType - 1图书 2文章 3微课即视频 type - 1-税可知 2-走出去 3-视频课
export function saveCollect(data) {
return request({
url: `/member1/fg/member-collection/batch/save`,
method: 'post',
data,
})
}
// 取消收藏
export function cancelCollect(data) {
return request({
url: `/member1/fg/member-collection/delete`,
method: 'post',
data,
})
}
// 分页查询 评论列表
export function commentList(params) {
/*const params = {
resourceId: '', // 资源ID
resourceType: '', // 资源类型 0全部1图书 31文章 100资讯 等
pageNum:'',
pageSize: '',
}*/
return request({
url: `/sysuser1/fg/comment/page`,
method: 'get',
params: { ...params },
})
}
// 评论点赞
export const commentZan = (params) => {
// const { commentId } = params
return request({
url: '/sysuser1/fg/comment/agree',
method: 'post',
params: {...params},
})
}
// 新增评论 或 回复
/*
参数讲解:
fatherId: 父级评论id(当前操作是对资源或者资讯评论时,属于评论,此时该值为0。反之,当是对评论进行回复时,该参数传入父级即上一层的评论id)
fatherName: 父级评论用户名(评论时,因为没有父级,不用传该参数。回复时,传入父级即上一层的评论用户名‘userName’)
mainId: 所属主评论id(即该参数传入是最顶层的评论id。当是评论时,该值为0。当是回复时,传入最顶层的评论id(注意区别开顶级与父级的关系))
content: 评论内容或者回复内容
resourceId: 资源id或者资讯id
resourceName: 资源名称或者资讯标题
resourceType: 资源类型或者资讯(资讯及公告,默认100,可以参照类型枚举)
score: 评分
示例:
当前登录用户为 ceshi001
1、对文章资源的一级评论:
{
"content": "这是评论内容",
"fatherId": 0,
"mainId": 0,
"resourceId": "268935f23e2a11e9b8010050569033dc",
"resourceName": "重 舌",
"resourceType": 31,
"score": 2
}
2、其他用户 furao,对上述评论进行回复(注上述评论成功后,id为162):
{
"content": "这是回复内容",
"fatherId": 162,
"fatherName": "ceshi001",
"mainId": 162,
"resourceId": "268935f23e2a11e9b8010050569033dc",
"resourceName": "重 舌",
"resourceType": 31,
"score": 0
}
3、其他用户 ceshi001 ,对上述回复进行回复(注上述回复成功后,id为163):
{
"content": "这是对回复进行回复",
"fatherId": 163,
"fatherName": "furao",
"mainId": 162,
"resourceId": "268935f23e2a11e9b8010050569033dc",
"resourceName": "重 舌",
"resourceType": 31,
"score": 0
}
*/
export const addComment = (params) => {
/*const data = {
content: '', // (string, optional): 评论内容 ,
fatherId: '', // (integer, optional): 父级评论id:0资源,其他评论id ,
fatherName: '', // (string, optional): 父级评论用户名 ,
id: '', // (integer, optional): 评论id ,
mainId: '', // (integer, optional): 所属主评论id:0资源主评论,其他主评论id ,
resourceId: '', // (string, optional): 资源id ,
resourceName: '', // (string, optional): 资源名称 ,
resourceType: '' , // (integer, optional): 资源类型 0全部1图书 31文章 23案例 33实操技能 34法规 35问答 2微课 3专题 100资讯 ,
score: '', // (integer, optional): 评分
}*/
return request({
url: '/sysuser1/fg/comment/save',
method: 'post',
data: { ...params },
})
}
// 评论详情
export const commentDetail = (params) => {
const { commentId } = params
return request({
url: `/sysuser1/fg/comment/get/${commentId}`,
method: 'get',
})
}
// 查询资源评论数量和评分
export const rsCommentCount = (params) => {
/*const data = {
resourceId: '', // 资源id
resourceType: '', // 资源类型 0全部1图书 31文章 32案例 33实操技能 34法规 35问答 2微课 100资讯
}*/
return request({
url: '/sysuser1/fg/comment/count',
method: 'get',
params: { ...params },
})
}
// 查看是否有未读消息
export const checkUnreadNews = () => {
return request({
url: '/member1/fg/pm/count',
method: 'get',
})
}
/**
* @Author: skyeGao
* @Email: yyjzp1314@126.com
* @DateTime: 2019-04-06 18:30:57
* @Description: 专家 相关请求 api
*/
import request from '@/utils/request'
// 分页查询专家列表
export const expertList = (data) => request({
url: '/resource1/fg/authorLibrary/page',
method: 'get',
params: { ...data },
})
// 专家详情
export const expertDetail = (data) => {
const { expertId } = data
return request({
url: `/resource1/fg/authorLibrary/${expertId}`,
method: 'get',
})
}
// 推荐著作
export const recordWork = (data) => {
const { expertId:id, resourceType } = data
return request({
url: `/resource1/fg/authorLibrary/relation-resource/page`,
method: 'get',
params: { id, resourceType },
})
}
// 推荐专家
export const recordExperts = () => request({
url: '/resource1/fg/authorLibrary/recommend/list',
method: 'get',
})
// 关注
export const attentionExpert = (params) => {
const data = {
goodsList: [{
id: params.expertId, // 专家id
type: 3, // 默认类型
}],
memberType: params.memberType, // 用户类型 0-普通用户 1-机构用户 2-专家用户
}
return request({
url: '/resource1/fg/member-collection/batch/save',
method: 'post',
data,
})
}
// 取消关注
export const cancelAttentionExpert = (params) => {
const data = {
goodsList: [{
id: params.expertId, // 专家id
type: 3, // 默认类型
}],
memberType: params.memberType, // 用户类型 0-普通用户 1-机构用户 2-专家用户
}
return request({
url: '/resource1/fg/member-collection/batch/delete',
method: 'post',
data,
})
}
/**
* @Author: skyeGao
* @Email: yyjzp1314@126.com
* @DateTime: 2019-04-06 12:00:01
* @Description: home页 相关请求 api
*/
import request from '@/utils/request'
// 获取热搜词列表
export const hotWordsList = (data) => request({
url: '/sysuser1/fg/hotsw/list',
method: 'get',
params: { ...data },
})
// 点击增加该热搜词搜索次数
export const hotWordsListUpdate = (params) => {
const { hswId } = params
return request({
url: `/sysuser1/fg/hotsw/update/${hswId}`,
method: 'post',
})
}
// 搜索栏动态加载下拉列表
export const autocompleteSerach = (params) => request({
url: `/resource1/fg/resource/search/list`,
method: 'get',
params: { ...params },
})
// 精选专题左右切换分页获取数据
export const topicRecommend = (params) => request({
url: `/resource1/fg/recommend/content/page`,
method: 'get',
params: { ...params },
})
// 资讯列表 行业资讯&热点解读
export const newsIndustryAndHotList = (params) => {
const { name, num } = params
return request({
url: `/sysuser1/fg/bulletin/list?name=${encodeURIComponent(name)}`,
method: 'get',
params: { num },
})
}
// 批量获取首页-重点推荐、特色微课、精选专题、案例实操
export const batchRecommendList = () => {
return request({
url: `/resource1/fg/recommend/content/page?=1&=10`,
method: 'get',
params: { pageNum:1, pageSize: 10 }, // pageNum、pageSize(这里的pageNum和pageSize无作用)
})
}
/**
* @Author: skyeGao
* @Email: yyjzp1314@126.com
* @DateTime: 2019-04-07 10:18:06
* @Description: 资讯相关 API
*/
import request from '@/utils/request'
// 行业资讯 & 热点解读
export const industryInfoAndHotReadList = (params) => {
const { name, search, pageNum, pageSize } = params
return request({
url: `/sysuser1/fg/bulletin-content/page?name=${encodeURIComponent(name)}`, // name-行业资讯、热点解读
method: 'get',
params: { search, pageNum, pageSize },
})
}
// 资讯点赞
export const infoZan = (params) => {
const { contentId } = params
return request({
url: '/sysuser1/fg/agree',
method: 'post',
params: { contentId },
})
}
// 获取资讯详情
export const infoDetail = (params) => {
const { contentId } = params
return request({
url: `/sysuser1/fg/bulletin-content/${contentId}`,
method: 'get',
})
}
// 热门资讯
export const hotList = (params) => {
return request({
url: '/sysuser1/fg/hot/list',
method: 'get',
})
}
// 好书推荐
export const goodBookRecommend = (params) => {
const { recommendCode: code, num } = params
return request({
url: '/resource1/fg/recommend/content/list',
method: 'get',
params: { code, num },
})
}
// 资讯配置栏目
export const configColumn = (params) => {
return request({
url: '/sysuser1/fg/bulletin/all/list',
method: 'get',
params,
})
}
// 根据配置栏目ID获取数据
export const configColumnInfo = (params) => {
const { columnId, search, pageNum, pageSize } = params
return request({
url: `/sysuser1/fg/bulletin/${columnId}`,
method: 'get',
params: { ... params },
})
}
/**
* @Author: skyeGao
* @Email: yyjzp1314@126.com
* @DateTime: 2019-04-06 12:00:01
* @Description: 登录
*/
import request from '@/utils/request'
// 账户登录
export const accountLogin = (data) => {
return request({
url: '/member1/fg/permissions/login',
method: 'post',
data,
})
}
// 输错5次出现验证码
export const permissionsCode = (data) => {
return request({
url: '/member1/fg/permissions/code',
method: 'get',
params: { ...data },
})
}
// 登陆发送验证码
export const loginCode = (data) => {
return request({
url: '/member1/fg/permissions/login/code',
method: 'get',
params: { ...data },
})
}
// 快速登陆
export const fastLogin = (data) => {
return request({
url: '/member1/fg/permissions/phone/login',
method: 'get',
params: { ...data },
})
}
//用户注册协议 cnkey=%E4%BC%9A%E5%91%98%E6%B3%A8%E5%86%8C%E6%9D%A1%E6%AC%BE
export const registerRule = (data) => {
return request({
url: '/sysuser1/fg/dictionary/dictionary',
method: 'get',
params: { ...data },
})
}
// 个人信息获取vip 0否 1是 2已过期
export const fetchUserInfo = (data) => {
return request({
url: '/member1/fg/personal-center/get/member',
method: 'get',
params: { ...data },
})
}
/**
* @Author: skyeGao
* @Email: yyjzp1314@126.com
* @DateTime: 2019-06-06 10:26:22
* @Description: 支付相关
*/
import request from '@/utils/request'
// 生成订单
export const createPayOrder = (data) => {
return request({
url: '/order1/fg/order/create-order',
method: 'post',
data: { ...data },
})
}
// 支付(三方支付获取页面或二维码url、余额支付直接返回结果
export const payUrl = (params) => {
return request({
url: '/pay1/fg/pay/pay',
method: 'get',
params: { ...params },
})
}
// 会员售价数据
export const vipPrice = () => {
return request({
url: '/member1/fg/vip/page',
method: 'get',
})
}
// 生成开通vip订单,并支付
export const vipPay = (params) => {
/*const data = {
id: params.id, // vip类型Id
sellPrice: params.sellPrice, // 售价
payType: params.payType // 支付类型 0支付宝 1微信
source: 0, // 0-pc 1-wap 2-app
}*/
return request({
url: '/order1/fg/order/create-vip-order',
method: 'post',
params: { ...params },
})
}
\ No newline at end of file
/**
* @Author: skyeGao
* @Email: yyjzp1314@126.com
* @DateTime: 2019-04-06 12:00:01
* @Description: 注册
*/
import request from '@/utils/request'
//注册发送短信
export const getRegisterCode = (data) => {
return request({
url: '/member1/fg/permissions/code-phone',
method: 'get',
params: { ...data },
})
}
// 普通用户注册
export const registerPerson = (data) => {
return request({
url: '/member1/fg/permissions/register/p-member',
method: 'post',
data,
})
}
// 机构用户注册
export const registerOrg = (data) => {
return request({
url: '/member1/fg/permissions/register/o-member',
method: 'post',
data,
})
}
/**
* @Author: skyeGao
* @Email: yyjzp1314@126.com
* @DateTime: 2019-04-11 20:34:54
* @Description: 资源检索 相关API
*/
import request from '@/utils/request'
// 查询条件和数据 在一个接口
/*
diyTypeCode: '', // 自定义分类code 多个用,分隔
labelContentDiyTypeId: '', // 标签内容id 多个用,分隔
content: '', // 上面搜索框内容
resourceType: '', // 资源类型 0全部1图书 31文章 23案例 33实操技能 34法规 35问答 2微课
pageNum: '', //
pageSize: '', //
orderBy: '' //
*/
export const getRsConditionAndResult = (data) => {
return request({
url: '/resource1/fg/resource/search',
method: 'get',
params: { ...data },
})
}
/************************ 图书 **************************/
//资源-图书列表-图书详情
export const getBookInfo = (data) => {
const { bookId: oid } = data
return request({
url: `/resource1/fg/ebook/get/${oid}`,
method: 'get',
})
}
// 图书详情页-同类图书排行
export const getBookSortList = (num = 6) => {
return request({
url: '/resource1/fg/ebook/other/list',
method: 'get',
params: { num }
})
}
// 图书阅读器 - 根据图书Id、章节Id、目录排序获取正文内容
export const getEBookContent = (params) => {
const { bookId, markId, orderNum } = params
return request({
url: '/resource1/fg/article-library/get',
method: 'get',
params: { ...params }
})
}
/************************ 微课 **************************/
// 微课详情
export const smallClassInfo = (params) => {
const { classId:oid } = params
return request({
url: `/resource1/fg/smallclass/get/${oid}`,
method: 'get',
})
}
// 微课详情页 - 右侧关联资源
export const smallClassRelationRes = (params) => {
return request({
url: `/resource1/fg/smallclass/relation-resource/page`,
method: 'get',
params: { ...params }
})
}
/************************ 文章 **************************/
// 文章详情
export const articalInfo = (params) => {
const { articalId:oid } = params
return request({
url: `/resource1/fg/article-library/get/${oid}`,
method: 'get',
})
}
// 文章阅读页 - 右侧关联资源
export const articalRelationRes = (params) => {
return request({
url: '/resource1/fg/article-library/relation-resource/page',
method: 'get',
params: { ...params }
})
}
// 文章阅读页 - 推荐阅读
export const articalRecordReading = (params) => {
return request({
url: '/resource1/fg/article-library/relation-resource/page',
method: 'get',
params: { ...params }
})
}
// 文章阅读页合并清单 articleId
export const mergeArticalToBookList = (params) => {
return request({
url: '/resource1/fg/booklist/save',
method: 'post',
params
})
}
// 文章阅读页 - 纠错
export const articalErrorCorrect = (data) => {
/*const params = {
commitTime: '', // 提交时间
content: '', // 纠错内容
name: '', // 纠错人
resourceType: '', // 资源类型
status: '', // (默认0未审核)
title: '', // 资源标题
}*/
return request({
url: '/sysuser1/fg/error-correct/save',
method: 'post',
data,
})
}
// 文章阅读页 - 新增笔记
export const articalNoteAdd = (data) => {
/*const params = {
articleId: 文章id ,
bookId: 图书id ,
content: 笔记内容 ,
contentTitle: 笔记标题 ,
createTime: 创建时间 ,
creater: 用户id ,
dataContent: 添加笔记的段落内容 ,
dataMark: 段落标识(文章的markid#_#段落编号) ,
id: 笔记id ,
markId: markId
}*/
return request({
url: '/resource1/fg/note/add',
method: 'post',
data,
})
}
// 文章阅读页 - 修改笔记
export const articalNoteUpdate = (data) => {
/*const params = {
articleId: 文章id ,
bookId: 图书id ,
content: 笔记内容 ,
contentTitle: 笔记标题 ,
createTime: 创建时间 ,
creater: 用户id ,
dataContent: 添加笔记的段落内容 ,
dataMark: 段落标识(文章的markid#_#段落编号) ,
id: 笔记id ,
markId: markId
}*/
return request({
url: '/resource1/fg/note/update',
method: 'post',
data,
})
}
// 文章阅读页 - 删除笔记
export const articalNoteDel = (data) => {
return request({
url: '/resource1/fg/note/batch/delete',
method: 'post',
data,
})
}
// 文章阅读页 - 笔记列表获取
export const articalNoteList = (params) => {
return request({
url: '/resource1/fg/note/list-by-markid',
method: 'get',
params: { ...params }
})
}
// 电子书阅读页 - 右侧关联资源
export const ebookRelationRes = (params) => {
return request({
url: `/resource1/fg/ebook/relation-resource/page`,
method: 'get',
params: { ...params }
})
}
/**
* @Author: skyeGao
* @Email: yyjzp1314@126.com
* @DateTime: 2019-04-06 16:59:51
* @Description: 标签 相关请求 api
*/
import request from '@/utils/request'
// 获取标签列表
export const allTagList = (data) => {
return request({
url: '/resource1/fg/label/list',
method: 'get',
params: { ...data },
})
}
// 获取热门标签
export const hotTagList = (data) => {
return request({
url: '/resource1/fg/label/list/hot',
method: 'get',
params: { ...data },
})
}
// 标签专题页 - 根据标签获取资源列表
export const getResourceListByTagId = (data) => {
const { labelId, ...others } = data
return request({
url: `/resource1/fg/resource/label/info/${labelId}`,
method: 'get',
params: { ...others },
})
}
// 标签专题页 - 获取下拉列表数据
export const getlabelTypeList = () => {
return request({
url: `/resource1/fg/resource/label/Type/list`,
method: 'get',
})
}
/**
* @Author: skyeGao
* @Email: yyjzp1314@126.com
* @DateTime: 2019-04-07 17:29:24
* @Description: 专题 相关请求 api
*/
import request from '@/utils/request'
// 专题列表
export const topicList = () => {
return request({
url: '/resource1/fg/project-library/list',
method: 'get',
})
}
// 专题详情
export const topicDetail = (data) => {
const { topicId } = data
return request({
url: `/resource1/fg/project-library/get/${topicId}`,
method: 'post',
})
}
@import './assets/css/reset.scss';
*{
word-break: break-all;
word-wrap:break-word;
}
//公用css
$defaultColor: #660D0D;
$headerHeight: 60px;
$footerHeight: 270px;
.ahover {
a:hover {
color: #B61313;
}
}
#app {
font-family: 'MicrosoftYaHei', 'Avenir', Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.main-page {
width: 100%;
min-height: 800px;
min-height: -moz-calc(100vh - #{$headerHeight} - #{$footerHeight});
min-height: -webkit-calc(100vh - #{$headerHeight} - #{$footerHeight});
min-height: calc(100vh - #{$headerHeight} - #{$footerHeight});
padding-bottom: 50px;
overflow: hidden;
}
$main-color: #5474CE;
//清除浮动
@mixin clearfix() {
&:before,
&:after {
content: "";
display: table;
}
&:after {
clear: both;
}
}
//圆角边框
@mixin border-radius($radius) {
-webkit-border-radius: $radius;
-moz-border-radius: $radius;
-ms-border-radius: $radius;
border-radius: $radius;
}
//跨浏览器的透明度设置
@mixin opacity($opacity) {
opacity: $opacity;
$opacity-ie: $opacity * 100;
filter: alpha(opacity=$opacity-ie); //IE8
}
//单行文本溢出省略显示
@mixin text-ellipsis () {
line-height: 24px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
word-wrap:break-word;
word-break:break-all;
}
//多行文本溢出省略显示
@mixin text-more-ellipsis ($line) {
position: relative;
line-height: 24px;
max-height: calc(#{$line}px * 24);
text-align: justify;
overflow : hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: $line;
-webkit-box-orient: vertical;
word-wrap:break-word;
word-break:break-all;
/*&:after{
content: '...';
text-align: right;
position: absolute;
bottom: 0;
right: 0;
width: 10%;
height: 1.8em;
background: linear-gradient(to right, rgba(255, 255, 255, 0), rgba(255, 255, 255, 1) 50%);
}*/
}
/* 配合 max-height 使用 ,因为font-size不同,所以不能统一设置 */
@mixin main-text-more-ellipsis ($line, $bgColor: white) {
position: relative;
line-height: 24px;
/*max-height: calc(#{$line}px * 24);*/
text-align: justify;
overflow : hidden;
/*text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: $line;
-webkit-box-orient: vertical;
word-wrap:break-word;
word-break:break-all;*/
&:before {
content: '...';
position: absolute;
/* 省略号的显示位置定位在右下方*/
right: 0;
bottom: 0;
background: $bgColor;
width: 16px;
}
&:after {
content: '';
position: absolute;
/*设置遮盖省略号的位置 */
right: 0;
/*设置遮盖省的大小 */
width: 1em;
height: 1em;
margin-top: 0.2em;
/*设置遮盖省略号的背景颜色,这个要和背景颜色一致 */
background: $bgColor;
}
}
/*创建省略号*/
.main-block-with-text:before {
content: '...';
position: absolute;
/* 省略号的显示位置定位在右下方*/
right: 0;
bottom: 0;
background: #fff;
width: 14px;
}
/*遮盖省略号*/
.main-block-with-text:after {
content: '';
position: absolute;
/*设置遮盖省略号的位置 */
right: 0;
/*设置遮盖省的大小 */
width: 1em;
height: 1em;
margin-top: 0.2em;
/*设置遮盖省略号的背景颜色,这个要和背景颜色一致 */
background: white;
}
//背景图片
@mixin imgRetina($url, $extension, $width, $height, $position: center, $repeat: no-repeat) {
background: url($url + '.' + $extension) $repeat $position;
@media
screen and (-webkit-min-device-pixel-ratio: 2),
screen and ( min--moz-device-pixel-ratio: 2),
screen and ( -moz-min-device-pixel-ratio: 2),
screen and ( -o-min-device-pixel-ratio: 2/1),
screen and ( min-device-pixel-ratio: 2),
screen and ( min-resolution: 192dpi),
screen and ( min-resolution: 2dppx) {
background: url($url + '@2x' + '.' + $extension) $repeat $position;
background-size: $width $height;
}
}
a{
cursor: pointer;
}
.w80p{
width: 80%;
min-width: 877px;
max-width: 1130px;
/*margin: 0 auto;*/
}
.hide{ display: none!important; }
/*** 返回顶部***/
.extend-opt{
position: fixed;
bottom: 40%;
right: 20px;
cursor: pointer;
background: #fff;
z-index: 99;
.shouji-erweima,
.go-to-top{
width: 60px;
height: 64px;
background-color: #0089EE;
color: #fff;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
i {
width: 22px;
height: 23px;
display: block;
margin-bottom: 6px;
}
}
.shouji-erweima{
background-color: #fff;
color: #666666;
border: 1px solid #E3E3E3;
position: relative;
i {
background: url("~@/assets/icon_shoujiban.png") center center no-repeat;
background-size: 100% 100%;
}
.large{
display: none;
width: 100px;
height: 100px;
position: absolute;
top: 0;
left: -104px;
border: 1px solid #EDEDED;
padding: 5px;
background-color: #fff;
img{ width: 100%; height: 100%; }
}
}
.shouji-erweima:hover{
.large{ display: block; }
}
.go-to-top{
background-color: #0089EE;
color: #fff;
border: 1px solid #0089EE;
i {
background: url("~@/assets/icon_fanhui.png") center center no-repeat;
background-size: 100% 100%;
}
}
}
/* 公共login 弹窗 */
.login-box{
.el-dialog {
width: 390px !important;
}
.el-dialog__body, .el-dialog__header {
padding: 0px;
}
}
/* 公共分页样式 */
.result-pagination{
margin: 20px auto;
text-align: center;
.el-pagination.is-background{
.btn-prev,.btn-next{
border: 1px solid #DADADA;
background-color: #fff;
padding: 0;
}
.btn-prev{ margin-right: 10px; }
.btn-next{ margin-left: 10px; }
.el-pager{
li{
margin: 0;
border: 1px solid #DADADA;
border-right: 0;
border-radius: 0;
background-color: #fff;
}
li:last-child{
border-right: 1px solid #DADADA;
}
li:not(.disabled):hover {
background: #0089EE;
color: #fff;
border-color: #0089EE;
}
li:not(.disabled).active {
background-color: #0089EE;
color: #FFF;
border-color: #0089EE;
}
}
}
}
* {
box-sizing: border-box;
}
html {
overflow-y:scroll;
font-family: microsoft yahei;
}
body, h1, h2, h3, h4, h5, h6, hr, p, blockquote, dl, dt, dd, ul, ol, li, pre, form, fieldset, legend, button, input, textarea, th, td {
margin:0;
padding:0;
}
body{
font:12px"microsoft yahei","Arial Narrow",HELVETICA;
background:#fff;
-webkit-text-size-adjust:100%;
}
h1, h2, h3, h4, h5, h6{
font-size:100%;
font-weight:normal;
}
ul, ol, li {
list-style: none;
}
input, img, select {
vertical-align: middle;
}
button, input, select, textarea {
font-size:100%;
}
table {
border-collapse:collapse;
border-spacing:0;
}
img {
border:0;
}
a, a:hover {
text-decoration: none;
color: inherit;
}
sup {
vertical-align: text-top;
}
sub {
vertical-align: text-bottom;
}
.clearfix::after {
content: '';
display: block;
height: 0;
visibility: hidden;
clear: both;
}
.clearfix {
*zoom: 1;
}
\ No newline at end of file
/*!
* Viewer.js v1.3.3
* https://fengyuanchen.github.io/viewerjs
*
* Copyright 2015-present Chen Fengyuan
* Released under the MIT license
*
* Date: 2019-04-06T14:06:24.626Z
*/
.viewer-zoom-in::before,
.viewer-zoom-out::before,
.viewer-one-to-one::before,
.viewer-reset::before,
.viewer-prev::before,
.viewer-play::before,
.viewer-next::before,
.viewer-rotate-left::before,
.viewer-rotate-right::before,
.viewer-flip-horizontal::before,
.viewer-flip-vertical::before,
.viewer-fullscreen::before,
.viewer-fullscreen-exit::before,
.viewer-close::before {
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAARgAAAAUCAYAAABWOyJDAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAQPSURBVHic7Zs/iFxVFMa/0U2UaJGksUgnIVhYxVhpjDbZCBmLdAYECxsRFBTUamcXUiSNncgKQbSxsxH8gzAP3FU2jY0kKKJNiiiIghFlccnP4p3nPCdv3p9778vsLOcHB2bfveeb7955c3jvvNkBIMdxnD64a94GHMfZu3iBcRynN7zAOI7TG15gHCeeNUkr8zaxG2lbYDYsdgMbktBsP03jdQwljSXdtBhLOmtjowC9Mg9L+knSlcD8TNKpSA9lBpK2JF2VdDSR5n5J64m0qli399hNFMUlpshQii5jbXTbHGviB0nLNeNDSd9VO4A2UdB2fp+x0eCnaXxWXGA2X0au/3HgN9P4LFCjIANOJdrLr0zzZ+BEpNYDwKbpnQMeAw4m8HjQtM6Z9qa917zPQwFr3M5KgA6J5rTJCdFZJj9/lyvGhsDvwFNVuV2MhhjrK6b9bFiE+j1r87eBl4HDwCF7/U/k+ofAX5b/EXBv5JoLMuILzf3Ap6Z3EzgdqHMCuF7hcQf4HDgeoHnccncqdK/TvSDWffFXI/exICY/xZyqc6XLWF1UFZna4gJ7q8BsRvgd2/xXpo6P+D9dfT7PpECtA3cnWPM0GXGFZh/wgWltA+cDNC7X+AP4GzjZQe+k5dRxuYPeiuXU7e1qwLpDz7dFjXKRaSwuMLvAlG8zZlG+YmiK1HoFqT7wP2z+4Q45TfEGcMt01xLoNZEBTwRqD4BLpnMLeC1A41UmVxsXgXeBayV/Wx20rpTyrpnWRft7p6O/FdqzGrDukPNtkaMoMo3FBdBSQMOnYBCReyf05s126fU9ytfX98+mY54Kxnp7S9K3kj6U9KYdG0h6UdLbkh7poFXMfUnSOyVvL0h6VtIXHbS6nOP+s/Zm9mvyXW1uuC9ohZ72E9uDmXWLJOB1GxsH+DxPftsB8B6wlGDN02TAkxG6+4D3TWsbeC5CS8CDFce+AW500LhhOW2020TRjK3b21HEmgti9m0RonxbdMZeVzV+/4tF3cBpP7E9mKHNL5q8h5g0eYsCMQz0epq8gQrwMXAgcs0FGXGFRcB9wCemF9PkbYqM/Bas7fxLwNeJPdTdpo4itQti8lPMqTpXuozVRVXPpbHI3KkNTB1NfkL81j2mvhDp91HgV9MKuRIqrykj3WPq4rHyL+axj8/qGPmTqi6F9YDlHOvJU6oYcTsh/TYSzWmTE6JT19CtLTJt32D6CmHe0eQn1O8z5AXgT4sx4Vcu0/EQecMydB8z0hUWkTd2t4CrwNEePqMBcAR4mrBbwyXLPWJa8zrXmmLEhNBmfpkuY2102xxrih+pb+ieAb6vGhuA97UcJ5KR8gZ77K+99xxeYBzH6Q3/Z0fHcXrDC4zjOL3hBcZxnN74F+zlvXFWXF9PAAAAAElFTkSuQmCC');
background-repeat: no-repeat;
background-size: 280px;
color: transparent;
display: block;
font-size: 0;
height: 20px;
line-height: 0;
width: 20px;
}
.viewer-zoom-in::before {
background-position: 0 0;
content: 'Zoom In';
}
.viewer-zoom-out::before {
background-position: -20px 0;
content: 'Zoom Out';
}
.viewer-one-to-one::before {
background-position: -40px 0;
content: 'One to One';
}
.viewer-reset::before {
background-position: -60px 0;
content: 'Reset';
}
.viewer-prev::before {
background-position: -80px 0;
content: 'Previous';
}
.viewer-play::before {
background-position: -100px 0;
content: 'Play';
}
.viewer-next::before {
background-position: -120px 0;
content: 'Next';
}
.viewer-rotate-left::before {
background-position: -140px 0;
content: 'Rotate Left';
}
.viewer-rotate-right::before {
background-position: -160px 0;
content: 'Rotate Right';
}
.viewer-flip-horizontal::before {
background-position: -180px 0;
content: 'Flip Horizontal';
}
.viewer-flip-vertical::before {
background-position: -200px 0;
content: 'Flip Vertical';
}
.viewer-fullscreen::before {
background-position: -220px 0;
content: 'Enter Full Screen';
}
.viewer-fullscreen-exit::before {
background-position: -240px 0;
content: 'Exit Full Screen';
}
.viewer-close::before {
background-position: -260px 0;
content: 'Close';
}
.viewer-container {
bottom: 0;
direction: ltr;
font-size: 0;
left: 0;
line-height: 0;
overflow: hidden;
position: absolute;
right: 0;
-webkit-tap-highlight-color: transparent;
top: 0;
-ms-touch-action: none;
touch-action: none;
-webkit-touch-callout: none;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.viewer-container::selection,
.viewer-container *::selection {
background-color: transparent;
}
.viewer-container img {
display: block;
height: auto;
max-height: none !important;
max-width: none !important;
min-height: 0 !important;
min-width: 0 !important;
width: 100%;
}
.viewer-canvas {
bottom: 0;
left: 0;
overflow: hidden;
position: absolute;
right: 0;
top: 0;
}
.viewer-canvas > img {
height: auto;
margin: 15px auto;
max-width: 90% !important;
width: auto;
}
.viewer-footer {
bottom: 0;
left: 0;
overflow: hidden;
position: absolute;
right: 0;
text-align: center;
}
.viewer-navbar {
background-color: rgba(0, 0, 0, 0.5);
overflow: hidden;
}
.viewer-list {
-webkit-box-sizing: content-box;
box-sizing: content-box;
height: 50px;
margin: 0;
overflow: hidden;
padding: 1px 0;
}
.viewer-list > li {
color: transparent;
cursor: pointer;
float: left;
font-size: 0;
height: 50px;
line-height: 0;
opacity: 0.5;
overflow: hidden;
-webkit-transition: opacity 0.15s;
transition: opacity 0.15s;
width: 30px;
}
.viewer-list > li:hover {
opacity: 0.75;
}
.viewer-list > li + li {
margin-left: 1px;
}
.viewer-list > .viewer-loading {
position: relative;
}
.viewer-list > .viewer-loading::after {
border-width: 2px;
height: 20px;
margin-left: -10px;
margin-top: -10px;
width: 20px;
}
.viewer-list > .viewer-active,
.viewer-list > .viewer-active:hover {
opacity: 1;
}
.viewer-player {
background-color: #000;
bottom: 0;
cursor: none;
display: none;
left: 0;
position: absolute;
right: 0;
top: 0;
}
.viewer-player > img {
left: 0;
position: absolute;
top: 0;
}
.viewer-toolbar > ul {
display: inline-block;
margin: 0 auto 5px;
overflow: hidden;
padding: 3px 0;
}
.viewer-toolbar > ul > li {
background-color: rgba(0, 0, 0, 0.5);
border-radius: 50%;
cursor: pointer;
float: left;
height: 24px;
overflow: hidden;
-webkit-transition: background-color 0.15s;
transition: background-color 0.15s;
width: 24px;
}
.viewer-toolbar > ul > li:hover {
background-color: rgba(0, 0, 0, 0.8);
}
.viewer-toolbar > ul > li::before {
margin: 2px;
}
.viewer-toolbar > ul > li + li {
margin-left: 1px;
}
.viewer-toolbar > ul > .viewer-small {
height: 18px;
margin-bottom: 3px;
margin-top: 3px;
width: 18px;
}
.viewer-toolbar > ul > .viewer-small::before {
margin: -1px;
}
.viewer-toolbar > ul > .viewer-large {
height: 30px;
margin-bottom: -3px;
margin-top: -3px;
width: 30px;
}
.viewer-toolbar > ul > .viewer-large::before {
margin: 5px;
}
.viewer-tooltip {
background-color: rgba(0, 0, 0, 0.8);
border-radius: 10px;
color: #fff;
display: none;
font-size: 12px;
height: 20px;
left: 50%;
line-height: 20px;
margin-left: -25px;
margin-top: -10px;
position: absolute;
text-align: center;
top: 50%;
width: 50px;
}
.viewer-title {
color: #ccc;
display: inline-block;
font-size: 12px;
line-height: 1;
margin: 0 5% 5px;
max-width: 90%;
opacity: 0.8;
overflow: hidden;
text-overflow: ellipsis;
-webkit-transition: opacity 0.15s;
transition: opacity 0.15s;
white-space: nowrap;
}
.viewer-title:hover {
opacity: 1;
}
.viewer-button {
background-color: rgba(0, 0, 0, 0.5);
border-radius: 50%;
cursor: pointer;
height: 80px;
overflow: hidden;
position: absolute;
right: -40px;
top: -40px;
-webkit-transition: background-color 0.15s;
transition: background-color 0.15s;
width: 80px;
}
.viewer-button:focus,
.viewer-button:hover {
background-color: rgba(0, 0, 0, 0.8);
}
.viewer-button::before {
bottom: 15px;
left: 15px;
position: absolute;
}
.viewer-fixed {
position: fixed;
}
.viewer-open {
overflow: hidden;
}
.viewer-show {
display: block;
}
.viewer-hide {
display: none;
}
.viewer-backdrop {
background-color: rgba(0, 0, 0, 0.5);
}
.viewer-invisible {
visibility: hidden;
}
.viewer-move {
cursor: move;
cursor: -webkit-grab;
cursor: grab;
}
.viewer-fade {
opacity: 0;
}
.viewer-in {
opacity: 1;
}
.viewer-transition {
-webkit-transition: all 0.3s;
transition: all 0.3s;
}
@-webkit-keyframes viewer-spinner {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(360deg);
transform: rotate(360deg);
}
}
@keyframes viewer-spinner {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(360deg);
transform: rotate(360deg);
}
}
.viewer-loading::after {
-webkit-animation: viewer-spinner 1s linear infinite;
animation: viewer-spinner 1s linear infinite;
border: 4px solid rgba(255, 255, 255, 0.1);
border-left-color: rgba(255, 255, 255, 0.5);
border-radius: 50%;
content: '';
display: inline-block;
height: 40px;
left: 50%;
margin-left: -20px;
margin-top: -20px;
position: absolute;
top: 50%;
width: 40px;
z-index: 1;
}
@media (max-width: 767px) {
.viewer-hide-xs-down {
display: none;
}
}
@media (max-width: 991px) {
.viewer-hide-sm-down {
display: none;
}
}
@media (max-width: 1199px) {
.viewer-hide-md-down {
display: none;
}
}
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
差异被折叠。
差异被折叠。
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
差异被折叠。
This source diff could not be displayed because it is too large. You can view the blob instead.
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
This source diff could not be displayed because it is too large. You can view the blob instead.
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论