提交测试

This commit is contained in:
xiaoronghao 2023-04-17 15:47:08 +08:00
parent 1ecc639410
commit 34d052255f
21 changed files with 165 additions and 151 deletions

21
.vscode/tasks.json vendored Normal file
View File

@ -0,0 +1,21 @@
{
"version": "2.0.0",
"tasks": [{
"label": "save",
"command": "git",
"type": "shell",
"args": [
"commit",
"-a",
"-m",
"auto commit",
"&&",
"git",
"push",
"origin",
"master"
],
"problemMatcher": []
}],
"preShutdownTask": "save"
}

3
package-lock.json generated
View File

@ -25,7 +25,8 @@
"postcss": "^8.4.21", "postcss": "^8.4.21",
"sass-loader": "^13.2.0", "sass-loader": "^13.2.0",
"vue-template-compiler": "^2.6.14", "vue-template-compiler": "^2.6.14",
"vue2-svg-icon": "^1.3.2" "vue2-svg-icon": "^1.3.2",
"webpack-bundle-analyzer": "^4.8.0"
} }
}, },
"node_modules/@achrinza/node-ipc": { "node_modules/@achrinza/node-ipc": {

View File

@ -24,7 +24,8 @@
"postcss": "^8.4.21", "postcss": "^8.4.21",
"sass-loader": "^13.2.0", "sass-loader": "^13.2.0",
"vue-template-compiler": "^2.6.14", "vue-template-compiler": "^2.6.14",
"vue2-svg-icon": "^1.3.2" "vue2-svg-icon": "^1.3.2",
"webpack-bundle-analyzer": "^4.8.0"
}, },
"browserslist": [ "browserslist": [
"> 1%", "> 1%",

View File

@ -1,6 +1,5 @@
// 热门版块标签 // 热门版块标签
.hot-box { .hot-box {
// padding: .34rem 0 0.3rem;
padding: .34rem 0 0; padding: .34rem 0 0;
display: flex; display: flex;
justify-content: flex-start; justify-content: flex-start;
@ -13,7 +12,6 @@
font-size: 0.3rem; font-size: 0.3rem;
margin: 0 .16rem .24rem 0; margin: 0 .16rem .24rem 0;
padding: 0 0.15rem; padding: 0 0.15rem;
// height: 0.72rem;
line-height: 0.72rem; line-height: 0.72rem;
text-align: center; text-align: center;
word-break: break-word; word-break: break-word;
@ -103,7 +101,7 @@ section {
justify-content: flex-start; justify-content: flex-start;
align-items: center; align-items: center;
&:first-of-type{ &:first-of-type {
margin-right: .2rem; margin-right: .2rem;
} }
@ -123,10 +121,8 @@ section {
display: flex; display: flex;
flex-direction: row; flex-direction: row;
align-items: center; align-items: center;
// padding-left: 0.25rem;
&:last-child { &:last-child {
// margin-left: 0.133333rem;
margin-left: .4rem; margin-left: .4rem;
} }
@ -170,7 +166,6 @@ section {
transform: rotate(45deg); transform: rotate(45deg);
transform-origin: bottom; transform-origin: bottom;
margin-top: 0.05rem; margin-top: 0.05rem;
// margin-top: 0.01rem;
margin-left: 0.25rem; margin-left: 0.25rem;
width: 0.9rem; width: 0.9rem;
font-size: 0.3rem; font-size: 0.3rem;
@ -183,15 +178,10 @@ section {
// 广告 // 广告
.banner-box { .banner-box {
margin-bottom: 0.32rem;
width: 100%;
display: block;
border-radius: 0.32rem; border-radius: 0.32rem;
margin-bottom: 0.2rem;
// 广告图
.banner {
width: 100%;
display: block;
border-radius: 0.32rem;
}
} }
// 分页 // 分页

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1011 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.7 KiB

View File

@ -33,7 +33,8 @@
<div class="head-more-right"> <div class="head-more-right">
<!-- 消息 --> <!-- 消息 -->
<div class="information-box" v-if="userInfo.messagenum"> <div class="information-box" v-if="userInfo.messagenum">
<img class="information-icon" src="@/assets/img/headerNav/information.png" /> <!-- <img class="information-icon" src="@/assets/img/headerNav/information.png" /> -->
<img class="information-icon" src="@/assets/img/icon/email.png" />
<div class="red-dot flexcenter">{{ userInfo.messagenum }}</div> <div class="red-dot flexcenter">{{ userInfo.messagenum }}</div>
</div> </div>
<!-- 登录按钮 --> <!-- 登录按钮 -->

View File

@ -1,37 +1,44 @@
<template> <template>
<div> <div>
<!-- 帖子 --> <!-- 帖子 -->
<div class="card-box" v-for="(item,index) in list" :key="index" @click.stop="toDetail(item.tid)"> <div v-for="(item, index) in list" :key="index">
<div class="top moreEllipsis"> <template v-if="item.type == 'ad'">
<div class="top-label">{{ item.typename }}</div> <a :href="item.url"><img class="banner-box" :src="item.image"></a>
<div class="top-title">{{ item.subject }}</div> </template>
</div>
<div class="center"> <div class="card-box" v-else @click.stop="toDetail(item.tid)">
<div class="center-text moreEllipsis">{{ item.message }}</div> <div class="top moreEllipsis">
</div> <div class="top-label">{{ item.typename }}</div>
<div class="bottom"> <div class="top-title">{{ item.subject }}</div>
<div class="bottom-box">
<!-- <svg-icon icon-class="test-head" class-name="icon-head"></svg-icon> -->
<img class="icon-head" :src="item.avatar">
<div class="bottom-name">{{ item.author }}</div>
</div> </div>
<div class="bottom-box"> <div class="center">
<div class="bottom-right"> <div class="center-text moreEllipsis">{{ item.message }}</div>
<svg-icon icon-class="look" class-name="icon-look"></svg-icon> </div>
<div>{{ item.views }}</div> <div class="bottom">
<div class="bottom-box">
<img class="icon-head" :src="item.avatar">
<div class="bottom-name">{{ item.author }}</div>
</div> </div>
<div class="bottom-right"> <div class="bottom-box">
<svg-icon icon-class="msg" class-name="icon-msg"></svg-icon> <div class="bottom-right">
<div>{{ item.replies }}</div> <svg-icon icon-class="look" class-name="icon-look"></svg-icon>
<div>{{ item.views }}</div>
</div>
<div class="bottom-right">
<svg-icon icon-class="msg" class-name="icon-msg"></svg-icon>
<div>{{ item.replies }}</div>
</div>
</div> </div>
</div> </div>
</div> <!-- 精华 -->
<!-- 精华 --> <div class="rightTop" v-if="item.digest > 0">
<div class="rightTop" v-if="item.digest>0"> <img class="rightTop-img" src="@/assets/img/icon/topRight .png">
<img class="rightTop-img" src="@/assets/img/icon/topRight .png"> <span>精华</span>
<span>精华</span> </div>
</div> </div>
</div> </div>
<!-- <div class="card-box"> <!-- <div class="card-box">
<div class="top moreEllipsis"> <div class="top moreEllipsis">
<div class="top-label">经验</div> <div class="top-label">经验</div>
@ -81,10 +88,9 @@ export default {
}, },
methods: { methods: {
// //
toDetail(tid){ toDetail(tid) {
this.$router.push(`/detail?tid=${tid}`) this.$router.push(`/detail?tid=${tid}`)
}, },
}, },
}; };

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -2,15 +2,11 @@ import Vue from 'vue'
import App from './App.vue' import App from './App.vue'
import router from './router' import router from './router'
import store from './store' import store from './store'
import ElementUI, { Message, Pagination, loading } from 'element-ui'; import { Message, Pagination, Alert, Loading } from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css'; import 'element-ui/lib/theme-chalk/index.css';
import { skipUrl, pageStop, pageMove, goTologin, copy, startupUnderLoading, closeUnderLoading, formattedDate, updateURLSearchParams, clearCookies } from "@/utils/common.js" import { skipUrl, pageStop, pageMove, goTologin, copy, startupUnderLoading, closeUnderLoading, formattedDate, updateURLSearchParams, clearCookies } from "@/utils/common.js"
import http from "@/utils/request" import http from "@/utils/request"
import hintBox from '@/components/Hintbox'
Vue.config.productionTip = false Vue.config.productionTip = false
Vue.prototype.$loginUrl = "https://passport.gter.net/" // 跳转登录的url Vue.prototype.$loginUrl = "https://passport.gter.net/" // 跳转登录的url
@ -23,7 +19,7 @@ Vue.prototype.$goTologin = goTologin // 跳转登录页面的方法
Vue.prototype.$pageStop = pageStop // 页面禁止滑动 Vue.prototype.$pageStop = pageStop // 页面禁止滑动
Vue.prototype.$pageMove = pageMove // 页面可以滑动 Vue.prototype.$pageMove = pageMove // 页面可以滑动
Vue.prototype.$Message = Message // 消息提示框 Vue.prototype.$Message = Message // 消息提示框
Vue.prototype.$loading = loading // 消息提示框 Vue.prototype.$loading = Loading // 消息提示框
Vue.prototype.$copy = copy // 复制 Vue.prototype.$copy = copy // 复制
Vue.prototype.$startupUnderLoading = startupUnderLoading // 开启加载提示 element的 Vue.prototype.$startupUnderLoading = startupUnderLoading // 开启加载提示 element的
Vue.prototype.$closeUnderLoading = closeUnderLoading // 关闭加载提示 element的 Vue.prototype.$closeUnderLoading = closeUnderLoading // 关闭加载提示 element的
@ -31,14 +27,11 @@ Vue.prototype.$formattedDate = formattedDate // 时间戳转格式
Vue.prototype.$updateURLSearchParams = updateURLSearchParams // 不刷新的情况下修改url Vue.prototype.$updateURLSearchParams = updateURLSearchParams // 不刷新的情况下修改url
Vue.prototype.$clearCookies = clearCookies // 清空Cookies Vue.prototype.$clearCookies = clearCookies // 清空Cookies
//svg文件引入 //svg文件引入
import './icons' import './icons'
//动态设置fontsize //动态设置fontsize
import './utils/fontSize.js' import './utils/fontSize.js'
// 判断是否是数组的 ,兼容操作 // 判断是否是数组的 ,兼容操作
if (!Array.isArray) { if (!Array.isArray) {
Array.isArray = function (arg) { Array.isArray = function (arg) {
@ -46,10 +39,10 @@ if (!Array.isArray) {
} }
} }
//ElementUI // Vue.use(ElementUI);
Vue.use(ElementUI);
Vue.use(Pagination); Vue.use(Pagination);
Vue.use(Alert);
Vue.use(Loading);
// v-focus // v-focus
Vue.directive('focus', { Vue.directive('focus', {

View File

@ -91,7 +91,6 @@ export default new Vuex.Store({
getUserInfo({ state, commit }, that) { getUserInfo({ state, commit }, that) {
if (state.getUserInfoState) return if (state.getUserInfoState) return
commit('setgetUserInfoState', true) commit('setgetUserInfoState', true)
// that.$startupUnderLoading(that)
that.$http.post("/api/home").then(res => { that.$http.post("/api/home").then(res => {
if (res.code != 200) return; if (res.code != 200) return;
let data = res.data let data = res.data

View File

@ -27,21 +27,20 @@ function goTologin() {
// 点击复制 // 点击复制
function copy(value, message) { function copy(value, message) {
let copyInput = document.createElement('input');//创建input元素 let copyInput = document.createElement('input');//创建input元素
document.body.appendChild(copyInput);//向页面底部追加输入框 document.body.appendChild(copyInput);//向页面底部追加输入框
copyInput.setAttribute('value', value);//添加属性将url赋值给input元素的value属性 copyInput.setAttribute('value', value);//添加属性将url赋值给input元素的value属性
copyInput.select();//选择input元素 copyInput.select();//选择input元素
document.execCommand("Copy");//执行复制命令 document.execCommand("Copy");//执行复制命令
//复制之后再删除元素,否则无法成功赋值 //复制之后再删除元素,否则无法成功赋值
copyInput.remove();//删除动态创建的节点 copyInput.remove();//删除动态创建的节点
if (message) this.$message.success(message);
if (message) this.$Message.success(message);
} }
// 启动加载中 // 启动加载中
function startupUnderLoading(that) { function startupUnderLoading(that) {
that.loading = that.$loading({ that.loading = this.$loading({
lock: true, lock: true,
text: '加载中...', text: '加载中...',
background: 'rgba(0, 0, 0, 0.7)' background: 'rgba(0, 0, 0, 0.7)'
@ -50,7 +49,7 @@ function startupUnderLoading(that) {
// 关闭加载中 // 关闭加载中
function closeUnderLoading(that) { function closeUnderLoading(that) {
that.loading && that.loading.close(); that.loading && this.loading.close();
that.loading = null that.loading = null
} }

View File

@ -28,7 +28,7 @@ const service = axios.create({
service.interceptors.request.use(config => { service.interceptors.request.use(config => {
//发请求前做的一些处理数据转化配置请求头设置token,设置loading等根据需求去添加 //发请求前做的一些处理数据转化配置请求头设置token,设置loading等根据需求去添加
//注意使用token的时候需要引入cookie方法或者用本地localStorage等方法推荐js-cookie //注意使用token的时候需要引入cookie方法或者用本地localStorage等方法推荐js-cookie
config['headers']['authorization'] = "qj2q1qk1on0curclipghjtv5ja1g9eq2" // config['headers']['authorization'] = "qj2q1qk1on0curclipghjtv5ja1g9eq2"
// config['headers']['authorization'] = "661aiz52k5e6vqgmkxnz0wvbv8nciz8h" // config['headers']['authorization'] = "661aiz52k5e6vqgmkxnz0wvbv8nciz8h"
return config return config
}, error => { }, error => {

View File

@ -16,9 +16,6 @@
<div class="detail-title-item detail-title-jinghua flexcenter" v-if="info.digest > 0">精华</div> <div class="detail-title-item detail-title-jinghua flexcenter" v-if="info.digest > 0">精华</div>
<div class="detail-title-item detail-title-label flexcenter" v-if="info.typename">{{ info.typename }}</div> <div class="detail-title-item detail-title-label flexcenter" v-if="info.typename">{{ info.typename }}</div>
{{ info.subject }} {{ info.subject }}
<!-- {{ info.subject }} -->
</div> </div>
<!-- --> <!-- -->
@ -219,8 +216,8 @@
<div class="alert" :class="{ 'alertState' : alertState }"> <div class="alert" :class="{ 'alertState': alert.state }">
<el-alert title="消息提示的文案" type="info" center show-icon :closable="false"></el-alert> <el-alert :title="alert.message" type="info" center show-icon :closable="false"></el-alert>
</div> </div>
</div> </div>
</template> </template>
@ -367,7 +364,12 @@ export default {
islogin: false, // islogin: false, //
alertState: false, alert: {
state: false,
message: ""
},
}; };
}, },
@ -391,24 +393,6 @@ export default {
} }
}, },
mounted() { mounted() {
setTimeout(() => {
this.alertState = true
console.log(this.alertState);
}, 3000)
setTimeout(() => {
this.alertState = false
console.log(this.alertState);
}, 6000)
// this.tid = this.$route.query['tid']
// this.page = this.$route.query['page'] || 1
// let url = `https://bbs.gter.net/thread-${tid}-${page}-1.html`
window.scrollTo(0, 0); window.scrollTo(0, 0);
}, },
@ -595,7 +579,6 @@ export default {
}) })
offerinfo['useperformanceStr'] = useperformanceStr offerinfo['useperformanceStr'] = useperformanceStr
this.offerinfo = offerinfo this.offerinfo = offerinfo
}) })
}, },
@ -776,9 +759,6 @@ export default {
this.getPostList() this.getPostList()
this.$updateURLSearchParams(query) this.$updateURLSearchParams(query)
// this.$router.push({ path: `/detailIndex`, query })
}, },
// //
@ -797,7 +777,8 @@ export default {
if (key == "like") this.info.islike = 1, this.info.recommends + 1 if (key == "like") this.info.islike = 1, this.info.recommends + 1
if (key == "collect") this.info.isfav = 1 if (key == "collect") this.info.isfav = 1
if (key == "uncollect") this.info.isfav = 0 if (key == "uncollect") this.info.isfav = 0
this.$message(res.message) // this.$message(res.message)
this.openHintBox(res.message)
}).finally(() => { }).finally(() => {
this.operateState = false this.operateState = false
@ -827,6 +808,7 @@ export default {
this.commentContent = item.message this.commentContent = item.message
}, },
//
postCoin() { postCoin() {
console.log("点击解锁"); console.log("点击解锁");
@ -835,12 +817,26 @@ export default {
}).then(res => { }).then(res => {
if (res.code != 200) return if (res.code != 200) return
this.$message.success(res.message) // this.$message.success(res.message)
this.openHintBox(res.message)
// return // return
this.popState = "" this.popState = ""
this.$router.go(0) this.$router.go(0)
}) })
},
//
openHintBox(message) {
this.alert.state = true
this.alert.message = message
setTimeout(() => {
this.alert.state = false
}, 1500)
} }
}, },
@ -854,18 +850,16 @@ export default {
<style lang="scss" scoped> <style lang="scss" scoped>
.alert { .alert {
position: fixed; position: fixed;
top: 50%; top: 50%;
left: 50%; left: 50%;
transform: translate(-50%, -50%); transform: translate(-50%, -50%);
background: #f4f4f5; background: #f4f4f5;
border: 1px solid #ebeef5; border: 1px solid #ebeef5;
// padding: .2rem .2rem .2rem .2667rem; border-radius: .2rem;
// border-radius: .9533rem;
width: 50%; width: 50%;
opacity: 0; opacity: 0;
transition: opacity .5s; transition: opacity .3s;
&.alertState { &.alertState {
opacity: 1; opacity: 1;

View File

@ -241,24 +241,39 @@ export default {
margin: .64rem 0.35rem; margin: .64rem 0.35rem;
height: calc(100vh - 3rem); height: calc(100vh - 3rem);
// overflow: auto;
position: relative;
&::after {
content: "";
top: 0;
left: .17rem;
width: 3.4rem;
// width: 100%;
height: 100%;
border-radius: 0.32rem 0 0 0.32rem;
// background: #62b1ff;
border-left: 0.013333rem solid #ddd;
background-color: rgba(235, 235, 235, 0.556862745098039);
position: absolute;
z-index: -1;
}
} }
.allSections-left { .allSections-left {
width: 3.4rem; width: 3.57rem;
border-left: 0.013333rem solid #ddd;
background-color: rgba(235, 235, 235, 0.556862745098039);
border-radius: 0.32rem 0 0 0.32rem; border-radius: 0.32rem 0 0 0.32rem;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
text-align: center; text-align: center;
// overflow-y: auto;
// overflow-x: hidden;
-ms-overflow-style: none; -ms-overflow-style: none;
overflow: -moz-scrollbars-none; overflow: -moz-scrollbars-none;
-webkit-overflow-scrolling: touch; -webkit-overflow-scrolling: touch;
position: relative;
overflow: auto;
&::-webkit-scrollbar { &::-webkit-scrollbar {
display: none; display: none;
@ -316,7 +331,6 @@ export default {
} }
.allSections-right { .allSections-right {
// width: 65%;
flex: 1; flex: 1;
background-color: #fff; background-color: #fff;
border-radius: 0 0.32rem 0.32rem 0; border-radius: 0 0.32rem 0.32rem 0;

View File

@ -61,7 +61,7 @@
<section> <section>
<template v-if="favorite.list.length != 0 || loading"> <template v-if="favorite.list.length != 0 || loading">
<index-list :list="favorite.list"></index-list> <index-list :list="favorite.list"></index-list>
<div class="paging flexcenter"> <div class="paging flexcenter" v-if="!loading">
<el-pagination small background layout="prev, pager, next" @current-change="currentChange" <el-pagination small background layout="prev, pager, next" @current-change="currentChange"
:current-page.sync="favorite.page" :page-size="favorite.limit" :total="favorite.count"> :current-page.sync="favorite.page" :page-size="favorite.limit" :total="favorite.count">
</el-pagination> </el-pagination>

View File

@ -12,7 +12,7 @@
<template v-if="list.length != 0 || loading"> <template v-if="list.length != 0 || loading">
<index-list :list="list"></index-list> <index-list :list="list"></index-list>
<div class="paging flexcenter"> <div class="paging flexcenter" v-if="!loading">
<el-pagination small background layout="prev, pager, next" @current-change="currentChange" <el-pagination small background layout="prev, pager, next" @current-change="currentChange"
:current-page.sync="page" :page-size="limit" :total="count"> :current-page.sync="page" :page-size="limit" :total="count">
</el-pagination> </el-pagination>

View File

@ -26,7 +26,8 @@
<div class="operation-box shadow"> <div class="operation-box shadow">
<a class="operation-item flexacenter" href="https://www.gter.net/bbs/user/pm.html?mobile=yes"> <a class="operation-item flexacenter" href="https://www.gter.net/bbs/user/pm.html?mobile=yes">
<div class="operation-left flexacenter"> <div class="operation-left flexacenter">
<img class="operation-icom" mode="widthFix" src="@/assets/img/user/information.png">消息 <img class="operation-icom" mode="widthFix" src="@/assets/img/icon/email.png">消息
<!-- <img class="operation-icom" mode="widthFix" src="@/assets/img/user/information.png">消息 -->
</div> </div>
<div class="operation-right flexacenter"> <div class="operation-right flexacenter">
<div v-if="user.messagenum == 0" class="operation-data flexcenter">{{ count.message }}</div> <div v-if="user.messagenum == 0" class="operation-data flexcenter">{{ count.message }}</div>

View File

@ -1,4 +1,6 @@
const { defineConfig } = require('@vue/cli-service') const { defineConfig } = require('@vue/cli-service')
const { BundleAnalyzerPlugin } = require('webpack-bundle-analyzer');
const path = require('path') const path = require('path')
function resolve(dir) { function resolve(dir) {
@ -18,6 +20,26 @@ module.exports = defineConfig({
publicPath: process.env.NODE_ENV === 'production' ? './' : '/', publicPath: process.env.NODE_ENV === 'production' ? './' : '/',
configureWebpack: { configureWebpack: {
optimization: {
splitChunks: {
chunks: 'all',
minSize: 20000,
maxSize: 50000,
minChunks: 1,
maxAsyncRequests: 30,
maxInitialRequests: 30,
automaticNameDelimiter: '~',
enforceSizeThreshold: 50000,
cacheGroups: {
vendors: {
test: /[\\/]node_modules[\\/]/,
priority: -10,
filename: 'js/chunk-vendors.[contenthash].js',
},
},
},
},
resolve: { resolve: {
alias: { alias: {
'assets': '@/assets', 'assets': '@/assets',
@ -26,7 +48,10 @@ module.exports = defineConfig({
'network': '@/network', 'network': '@/network',
'views': '@/views' 'views': '@/views'
} }
} },
plugins: [
// new BundleAnalyzerPlugin(),
],
}, },
// svg图片配置 // svg图片配置
lintOnSave: false, lintOnSave: false,
@ -47,5 +72,6 @@ module.exports = defineConfig({
}) })
.end() .end()
} },
productionSourceMap: false,
}) })