Commit 4c21aff1 by yanju

完成动态的发布

parent c5bd55d2
# ASSETS
**This directory is not required, you can delete it if you don't want to use it.**
This directory contains your un-compiled assets such as LESS, SASS, or JavaScript.
More information about the usage of this directory in [the documentation](https://nuxtjs.org/guide/assets#webpacked).
@font-face {font-family: "iconfont";
src: url('iconfont.eot?t=1584243657088'); /* IE9 */
src: url('iconfont.eot?t=1584243657088#iefix') format('embedded-opentype'), /* IE6-IE8 */
url('data:application/x-font-woff2;charset=utf-8;base64,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') format('woff2'),
url('iconfont.woff?t=1584243657088') format('woff'),
url('iconfont.ttf?t=1584243657088') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */
url('iconfont.svg?t=1584243657088#iconfont') format('svg'); /* iOS 4.1- */
src: url('iconfont.eot?t=1585021172132'); /* IE9 */
src: url('iconfont.eot?t=1585021172132#iefix') format('embedded-opentype'), /* IE6-IE8 */
url('data:application/x-font-woff2;charset=utf-8;base64,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') format('woff2'),
url('iconfont.woff?t=1585021172132') format('woff'),
url('iconfont.ttf?t=1585021172132') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */
url('iconfont.svg?t=1585021172132#iconfont') format('svg'); /* iOS 4.1- */
}
.iconfont {
......@@ -15,6 +15,10 @@
-moz-osx-font-smoothing: grayscale;
}
.yun-icon--edit2:before {
content: "\e639";
}
.yun-icon--logo_download:before {
content: "\e638";
}
......
No preview for this file type
......@@ -6,6 +6,13 @@
"description": "",
"glyphs": [
{
"icon_id": "13653653",
"name": "edit2",
"font_class": "yun-icon--edit2",
"unicode": "e639",
"unicode_decimal": 58937
},
{
"icon_id": "13476732",
"name": "logo_download",
"font_class": "yun-icon--logo_download",
......
......@@ -20,6 +20,9 @@ Created by iconfont
/>
<missing-glyph />
<glyph glyph-name="yun-icon--edit2" unicode="&#58937;" d="M1035.425384-128h-321.338913a35.704324 35.704324 0 0 0 0 71.408647h321.338913a35.704324 35.704324 0 0 0 0-71.408647zM54.377685-128a54.663319 54.663319 0 0 0-38.453557 15.709902 52.878103 52.878103 0 0 0-14.281729 50.807253l54.377685 214.225941a53.556485 53.556485 0 0 0 14.281729 24.993027L750.040725 847.120781a171.773501 171.773501 0 0 0 240.040168 0 165.560948 165.560948 0 0 0 0-236.398326L310.34198-58.733611999999994a54.663319 54.663319 0 0 0-25.278661-14.067504l-217.510739-53.556485a54.948954 54.948954 0 0 0-13.174895-1.642399z m103.542538 240.361506l-28.777685-113.21841 114.967922 28.313529L913.17378 686.451325a59.483403 59.483403 0 0 1 0 84.940586 63.08954 63.08954 0 0 1-86.225942 0z" horiz-adv-x="1071" />
<glyph glyph-name="yun-icon--logo_download" unicode="&#58936;" d="M512.515638-127.99865299999999a511.999326 511.999326 0 0 0-199.410264 983.766285 512.187958 512.187958 0 0 0 398.820528-943.533917A508.765646 508.765646 0 0 0 512.515638-127.99865299999999zM259.911339 329.51316599999996a17.354082 17.354082 0 0 1-16.869031-17.758292v-179.496185a17.946924 17.946924 0 0 1 5.200836-12.853878 16.1684 16.1684 0 0 1 11.587353-4.904414h505.316387a17.327135 17.327135 0 0 1 16.842084 17.758292v179.496185a17.327135 17.327135 0 0 1-16.842084 17.758292h-33.684166a17.327135 17.327135 0 0 1-16.842083-17.758292v-125.601519h-404.209994v125.601519a17.354082 17.354082 0 0 1-16.869031 17.758292z m108.328278 111.103854a10.320829 10.320829 0 0 1-9.943566-7.787779 11.048407 11.048407 0 0 1 2.452208-10.293881l139.452448-151.336222a17.084609 17.084609 0 0 1 12.476615-5.524203 16.1684 16.1684 0 0 1 11.31788 4.634941 3.422311 3.422311 0 0 1 0.485052 0.511999v0.161684l139.53329 151.390117a11.263985 11.263985 0 0 1 1.643787 12.961667 10.024408 10.024408 0 0 1-8.730936 5.389467h-100.001552V635.715711A17.327135 17.327135 0 0 1 540.08276 653.474003h-55.188138a17.327135 17.327135 0 0 1-16.842083-17.758292V440.590073z" horiz-adv-x="1024" />
......
No preview for this file type
img { -webkit-touch-callout: none; }
*:not(input,textarea), *:before:not(input,textarea), *:after:not(input,textarea) {
-webkit-user-select: none;
}
input{
outline:none;
......
......@@ -221,7 +221,7 @@
handleLoading(){
this.loaddingTime = setTimeout(()=>{
this.loading = false;
},2000)
},509)
}
},
......
......@@ -32,11 +32,16 @@ function TouchEvent(el,binding,type) {
let appendDiv = document.createElement('div');
let appendDivTimer = null;
appendDiv.style.cssText='position:fixed;top:0;left:0;z-index:10000;height:100%;width:100%;background:transparent';
document.body.appendChild(appendDiv);
appendDivTimer = setTimeout(()=>{
document.body.removeChild(appendDiv);
clearTimeout(appendDivTimer)
},350)
if(e.target.localName.toLowerCase()==='a'||e.target.localName.toLowerCase()==='video'||e.target.localName.toLowerCase()==='button'||e.target.localName.toLowerCase()==='input'||e.target.localName.toLowerCase()==='textarea'){
}else{
document.body.appendChild(appendDiv);
appendDivTimer = setTimeout(()=>{
document.body.removeChild(appendDiv);
clearTimeout(appendDivTimer)
},350)
}
var disX=e.changedTouches[0]?e.changedTouches[0].pageX-_this.vueTouches.x:0;
var disY=e.changedTouches[0]?e.changedTouches[0].pageY-_this.vueTouches.y:0;
clearTimeout(_this.time);
......
......@@ -7,40 +7,40 @@
:margin-v="[0,'auto']"
:flex-v="['column','flex-start','flex-start']"
:border-v="[1,'solid','#EFEFEF','bottom']"
slot="card">
slot="card"
@tap="changeRoute1(routesObject.answer.detail+questionId)"
>
<yun-div
:flex-v="['row','flex-start','center']"
:font-style="[30,40,500,'#333','left']"
:font-style="[30,48,500,'#333','left']"
:ske-w="704"
:skeH="40"
> <yun-div :no-wrap="true" :extend-style="{maxWidth: commonReturnFlexedLength(596)}">
大家期望咱们的手机版有什么功能哇?
</yun-div>
<yun-div>
<yun-icon
:width-v="30"
:height-v="30"
:border-r="[4]"
:margin-v="[0,8,0,16]"
:padding-v="[8,8.5]"
bg-color-v="#FF7474"
name="hot"
:size="20"
color="#fff">
</yun-icon>
<yun-icon
:width-v="30"
:height-v="30"
:padding-v="[8,8.5]"
:border-r="[4]"
bg-color-v="#00AAE6"
name="top"
:size="20"
color="#fff">
</yun-icon>
>
{{questionTitle}}
<yun-icon
:width-v="30"
:height-v="30"
:border-r="[4]"
:margin-v="[0,8,0,16]"
name="hot"
:size="30"
color="#FF7474"
v-if="viewNumber>20"
>
</yun-icon>
<yun-icon
:width-v="30"
:height-v="30"
:border-r="[4]"
name="top"
:size="30"
color="#00AAE6"
v-if="priority>0">
</yun-icon>
</yun-div>
</yun-div>
<yun-div
:font-style="[20,27,500,'#666','left']"
......@@ -48,10 +48,10 @@
:skeW="500"
:skeH="27"
>
26回答
<span>·</span>
<span style="color:#75D098;">已采纳:</span>
<span>卸载重下就好了</span>
{{replyNumber}}回答
<span >创建于{{createTime}}</span>
<span style="color:#75D098;" v-if="solved">已解决</span>
<!-- <span>卸载重下就好了</span>-->
</yun-div>
</yun-div>
</yun-slider>
......@@ -62,10 +62,107 @@ import commonMixin from "./commonMixin";
export default {
mixins: [commonMixin],
props:{
//cardType: String,
info:{
type:Object,
default: () => ({})
},
isMy:{
type:Boolean,
default:false
}
},
data() {
return{
questionAbstract:'',
questionId:'',
questionTitle:'',
replyNumber:'',
solved:'',
createTime:'',
tags:[],
userNick:'',
viewNumber:'',
showCard:true,
status:0,
praiseNum:0,
priority:0,
}
},
created(){
this.dateGet2Info();
},
methods:{
dateGet2Info(){
let info = this.info;
if(this.info.questionId){
this.questionAbstract = info.questionAbstract;
this.questionId = info.questionId;
this.questionTitle = info.questionTitle;
this.replyNumber = info.replyNumber;
this.solved = info.solved;
this.createTime = this.dateConvert(info.createTime);
this.tags = info.tags;
this.userNick = info.userNick;
this.viewNumber = info.viewNumber;
this.status = info.status;
this.praiseNum = info.praiseNum;
this.priority = info.priority;
}
if(this.info.itemId){
this.questionTitle = info.title;
this.questionAbstract = info.description;
this.questionId = info.itemId;
this.createTime = dateConvert(info.createTime);
this.userNick = info.author;
this.replyNumber = info.extra?info.extra.replyNumber:0;
this.solved = info.extra?info.extra.solved:false;
}
},
showAlert(id){
this.$alert('确认删除?', '', {
confirmButtonText: '确定',
callback: action => {
this.dataDeleteItem(id)
}
});
},
dataDeleteItem(id){
this.$axios.$delete(config.api.delete.Question.delete+id).then((response)=>{
if(response.code===0){
this.showCard=false;
this.$message({
type:'success',
message:'项目删除成功!'
})
}else{
this.$message({
type:'warning',
message:'项目删除失败!'
})
}
})
},
changeRoute(r){
let routeUrl = this.$router.resolve({
path: "/answer/detail/"+r
});
window.open(routeUrl.href,'_blank')
}
}
}
</script>
<style scoped>
<style lang="scss" scoped>
span{
margin-right:10*$length
}
</style>
......@@ -19,13 +19,14 @@
height-v="100%"
>
<user-card
v-if="cardType!=='news'"
:avatar-size="64"
:padding-v="[35,0]"
:show-border="false"
:user-id="userId"
></user-card>
<yun-div
:padding-v="[0,paddingL]"
:padding-v="[cardType==='news'?20:0,paddingL,0]"
:font-style="[42,56,400,'#333','left']"
>
{{cardName}}
......@@ -41,6 +42,7 @@
{{cardTime}}
</yun-div>
<yun-div
v-if="cardType!=='news'"
:font-style="[20,27,400,'#999','center']"
>
<yun-icon name="like1"
......@@ -58,6 +60,12 @@
color="#ccc"></yun-icon>
<span>{{cardView}}</span>
</yun-div>
<yun-div
v-if="cardType==='news'"
:font-style="[20,27,400,'#999','center']"
>
本文编辑:{{cardUser}}
</yun-div>
</yun-div>
<yun-div
:width-v="704"
......@@ -95,7 +103,9 @@
:position-v="[undefined,0,0,0]"
>
<send-box
card-type="blog"
v-if="cardType!=='news'"
:card-type="cardType"
:card-view="cardView"
:praise-num="praiseNum"
:card-id="cardId"
......@@ -172,12 +182,12 @@
this.contentHtml = info.contentHtml;
this.cardIntro = info.blogAbstract;
this.cardId = info.blogId;
this.cardType = 'blog';
this.src = info.cover;
this.cardTags = info.tags;
this.cardTime = this.dateConvert(info.createTime);
this.cardView = info.viewNumber;
this.cardUser = info.userNick;
this.cardType = 2;
this.status = info.status;
this.praiseNum =info.praiseNum;
this.priority = this.$route.query.type==='all'?info.priority:info.categoryPriority;
......@@ -186,20 +196,24 @@
}
if(this.info.projectId){
this.cardName = info.projectName;
this.cardIntro = info.projectDescription;
this.originLink = info.originLink;
this.userId = info.userId;
this.commentNumber = info.commentNumber;
this.contentHtml = info.contentHtml;
this.cardIntro = info.blogAbstract;
this.cardId = info.projectId;
this.cardType = 'project';
this.src = info.cover;
this.cardView = info.viewNumber;
this.cardTags = info.tags;
this.cardTime = this.dateConvert(info.createTime);
this.cardUser = info.author;
this.cardType = 1;
this.status = info.status;
this.praiseNum =info.praiseNum;
this.priority = info.priority||info.categoryPriority;
this.detailPath = this.routesObject.project.detail+info.projectId;
this.praised = this.routesObject.project.praised;
this.praised = info.praised;
}
......@@ -209,12 +223,31 @@
this.cardId = info.contentId;
this.cardView = info.viewNumber;
this.src = info.cover;
this.cardType = 'news';
this.cardTime = this.dateConvert(info.createTime);
this.cardUser = info.author;
this.cardType = 3;
this.contentHtml = info.content;
this.detailPath = this.routesObject.news.detail+info.contentId;
}
if(this.info.questionId){
this.cardName = info.questionTitle;
this.cardIntro = info.questionAbstract;
this.cardId = info.questionId;
this.cardView = info.viewNumber;
this.userId = info.userId;
this.cardType = 'answer';
this.commentNumber = info.replyNumber;
this.contentHtml = info.contentHtml;
this.src = info.cover;
this.cardTags = info.tags;
this.cardTime = this.dateConvert(info.createTime);
this.cardUser = info.userNick;
this.praiseNum =info.praiseNum;
this.priority = info.priority||info.categoryPriority;
this.detailPath = this.routesObject.answer.detail+info.questionId;
this.praised = info.praised;
}
},
}
}
......
......@@ -6,6 +6,7 @@
:flex-v="['row','space-between','flex-start']"
>
<yun-img
:load-by-scroll="false"
:width-v="70"
:height-v="70"
:ske-h="70"
......@@ -48,8 +49,8 @@
<yun-div
:font-style="[20,32,400,'#999','left']"
>
<span v-if="totalRecords" @click="showCommentInput=!showCommentInput">回复({{totalRecords}})</span>
<span v-if="!totalRecords" @click="showCommentInput=!showCommentInput">回复</span>
<span v-if="totalRecords" v-tap="tapCommentInput">回复({{totalRecords}})</span>
<span v-if="!totalRecords" v-tap="tapCommentInput">回复</span>
<span v-tap="dataDeleteComment" v-if="this.info.userId ===$store.state.userProfile.userId">删除</span>
</yun-div>
</yun-div>
......@@ -58,7 +59,7 @@
<yun-div
:flex-v="['row','space-between','center']"
:margin-v="[10,0,0]"
:margin-v="[20,0,0]"
v-if="showCommentInput"
>
......@@ -188,6 +189,11 @@
},
methods:{
tapCommentInput(){
this.showCommentInput=!this.showCommentInput
},
dataPostComment1(){
if(!this.$store.state.auth.token){
this.$message({
......
......@@ -10,6 +10,7 @@
:flex-v="['row','space-between','flex-start']"
>
<yun-img
:load-by-scroll="false"
:width-v="70"
:height-v="70"
:ske-h="70"
......@@ -51,8 +52,8 @@
<yun-div
:font-style="[20,32,400,'#999','right']"
>
<span v-if="totalRecords" @click="showCommentInput=!showCommentInput">回复({{totalRecords}})</span>
<span v-if="!totalRecords" @click="showCommentInput=!showCommentInput">回复</span>
<span v-if="totalRecords" v-tap="tapCommentInput">回复({{totalRecords}})</span>
<span v-if="!totalRecords" v-tap="tapCommentInput">回复</span>
<span v-tap="dataDeleteComment" v-if="this.info.userId ===$store.state.userProfile.userId">删除</span>
</yun-div>
</yun-div>
......@@ -60,7 +61,7 @@
<yun-div
:flex-v="['row','space-between','center']"
:margin-v="[10,0,0]"
:margin-v="[20,0,0]"
v-if="showCommentInput"
>
......@@ -182,6 +183,10 @@
methods:{
tapCommentInput(){
this.showCommentInput=!this.showCommentInput
},
dataPostComment2(){
if(!this.$store.state.auth.token){
this.$message({
......
......@@ -10,6 +10,8 @@
:flex-v="['row','space-between','flex-start']"
>
<yun-img
:load-by-scroll="false"
:width-v="70"
:height-v="70"
:ske-h="70"
......
......@@ -182,6 +182,8 @@
},
dataGetComment(){
console.log(this.type);
if(!this.id){
return false
}
......
......@@ -73,7 +73,7 @@
:margin-v="[0,0,0,60]"
:height-v="60"
:flex-v="['column','flex-space','center']"
v-tap="()=>changeRoute1(routesObject.blog.comment+cardId)"
@tap="changeRoute1(commentRoute+cardId)"
>
<yun-div
:font-style="[20,30,400,'#999','center']"
......@@ -144,6 +144,7 @@
praiseNum1:0,
cardView1:0,
commentNumber1:0,
commentRoute:'',
}
},
props:{
......@@ -185,21 +186,39 @@
commentNumber(val){
this.commentNumber1 = val;
},
cardType(val){
this.handleCardType(val);
}
},
created() {
console.log(this.praiseNum,this.cardView,this.commentNumber)
this.praised1 = this.praised;
this.praised1 = this.praised;
this.praiseNum1 = this.praiseNum||0;
this.cardView1 = this.cardView||0;
this.commentNumber1 = this.commentNumber||0;
this.handleCardType(this.cardType)
if(process.browser){
window.addEventListener('click',this.listenClick)
}
},
methods:{
handleCardType(val){
if(val==='blog'){
this.commentRoute = this.routesObject.blog.comment
}
if(val==='answer'){
this.commentRoute = this.routesObject.answer.comment
}
if(val==='project'){
this.commentRoute = this.routesObject.project.comment
}
if(val==='dynamic'){
this.commentRoute = this.routesObject.dynamic.comment
}
},
listenClick(e){
if(this.$refs.commentCard){
if(!this.$refs.commentCard.contains(e.target)){
......
......@@ -18,7 +18,7 @@
:ske-h="80"
:ske-w="80"
:border-r="[40]"
:src="src"
:src="userAvatar"
></yun-img>
<yun-div
......@@ -37,7 +37,7 @@
:ske-w="120"
:font-style="[30,40,400,'#333','left']"
>
{{name}}
{{userNick}}
</yun-div>
<yun-div
......@@ -50,22 +50,25 @@
<yun-div
:font-style="[28,37,400,'#AAA','left']"
:show-ske="false"
v-if="false"
v-if="followedAuthor&&$store.state.userProfile.userId!==userId"
>
<yun-icon name="right" color="#AAA" :size="28"></yun-icon>
已关注
</yun-div>
<!-- 未关注状态-->
<yun-div
v-if="!followedAuthor"
:flex-v="['row','center','center']"
@tap="dataPostFollowUser"
>
<yun-div
:font-style="[28,37,400,'#75D098','left']"
:show-ske="false"
v-if="!followLoading"
>
+
</yun-div>
<yun-indicator :height-v="28" color="#75D098" :size="28" v-if="false"></yun-indicator>
<yun-indicator :height-v="28" color="#75D098" :size="28" v-if="followLoading"></yun-indicator>
<yun-div
:font-style="[28,37,400,'#75D098','left']"
:show-ske="false"
......@@ -101,7 +104,7 @@
:padding-v="[28,0,0]"
class="content-word"
>
内容文本部分内容文本部分内容文本部分内容文本部分内容文本部分内容文本部分内容文本部分
<p class="content-word" v-html="content"></p>
</yun-div>
<!-- 内容图片部分-->
......@@ -113,7 +116,7 @@
v-for="(value,index) in imgArr2"
:key="value+index"
v-if="false"
@click="clickToOpenBanner(index)"
@tap="clickToOpenBanner(index)"
>
<yun-img
:width-v="404"
......@@ -133,7 +136,7 @@
:key="value+index"
v-if="false"
@click="clickToOpenBanner(index)"
@tap="clickToOpenBanner(index)"
>
<yun-img
:width-v="404"
......@@ -154,7 +157,7 @@
>
<yun-div
@click="clickToOpenBanner(index)"
@tap="clickToOpenBanner(index)"
:width-v="164"
:height-v="164"
:ske-h="164"
......@@ -196,7 +199,7 @@
:margin-v="[0,(index+1)%3===0?0:16,16,0]"
:flex-v="['row','center','center']"
@click.native="clickToOpenBanner(index)"
@tap="clickToOpenBanner(index)"
>
<yun-img
width-v="auto"
......@@ -389,7 +392,7 @@
}
},
created(){
// this.dateGet2Info();
this.dateGet2Info();
// this.dataGetPraiseList();
if(process.browser){
document.addEventListener('click',(e)=>{
......@@ -589,6 +592,7 @@
<style lang="scss">
.content-word{
word-break: break-all;
a{
color:$primaryColor;
}
......
......@@ -24,13 +24,11 @@
v-for="(item, index) in navList"
:flex-v="['column','flex-start','center']"
:key="item.id"
:font-style="[28,36,400,'#999','left']"
:show-ske="false"
@tap="changeRoute1(path?path+'?type='+item.id:item.path)"
>
<nuxt-link
style="color: #999;"
:to="path ? {path: path, query: {type: item.id}} : {path: item.path}"
>
{{item.label}}
</nuxt-link>
<yun-div
:width-v="16"
:height-v="4"
......@@ -89,7 +87,7 @@
<script>
import commonMixin from "./commonMixin";
import {isRealNum} from '../../action/utils'
export default {
mixins: [commonMixin],
......@@ -133,10 +131,18 @@ export default {
},
methods: {
handleLabelRoute(id) {
this.actived = id
if(!isNaN(Number(id))){
console.log(1)
this.actived = Number(id)
}else{
console.log(2)
this.actived = id
}
},
handlePathRoute(path) {
this.actived = path
this.actived = path
},
handleSort() {
this.showSort = !this.showSort
......
......@@ -7,7 +7,9 @@
position:'fixed',
maxWidth:'750px',
boxSizing:'border-box',
zIndex:headerZIndex
zIndex:headerZIndex,
boxShadow:`0 ${1*heightRate}px 0 rgba(0,0,0,.1)`,
}"
:width-v="750"
:position-v="[0,0,undefined,0]"
......@@ -27,6 +29,7 @@
:ske-w="153"
:ske-h="52"
:show-ske="false"
v-tap="()=>navTapToChangeRoute1('/')"
:src="BCLogo">
</yun-img>
<!--search-->
......@@ -48,10 +51,10 @@
:border-v="[1,'solid',commonReturnPrimaryColor(0.2)]"
>
<yun-icon name="user"
v-tap="()=>changeRoute1(routesObject.login)"
v-tap="()=>navTapToChangeRoute1(routesObject.login)"
:size="28" v-if="!$store.state.userProfile.userId"></yun-icon>
<yun-img
v-tap="()=>changeRoute1(routesObject.personalCenter.index)"
v-tap="()=>navTapToChangeRoute1(routesObject.personalCenter.index)"
:height-v="56"
:width-v="56"
:src="$store.state.userProfile.avatar"
......
......@@ -27,31 +27,27 @@
</span>
<yun-icon
v-if="cardView>=20"
:width-v="30"
:height-v="30"
:border-r="[4]"
:margin-v="[0,8,0,16]"
:padding-v="[8,8.5]"
bg-color-v="#FF7474"
name="hot"
:size="20"
color="#fff"></yun-icon>
<yun-icon
v-if="priority>0">
:width-v="30"
:height-v="30"
:padding-v="[8,8.5]"
:border-r="[4]"
bg-color-v="#00AAE6"
name="top"
:size="20"
color="#fff">
</yun-icon>
<yun-icon
:width-v="30"
:height-v="30"
:border-r="[4]"
:margin-v="[0,8,0,16]"
name="hot"
:size="30"
color="#FF7474"
v-if="cardView>20"
>
</yun-icon>
<yun-icon
:width-v="30"
:height-v="30"
:border-r="[4]"
name="top"
:size="30"
color="#00AAE6"
v-if="priority>0">
</yun-icon>
</yun-div>
<yun-div
......
<template>
<yun-slider>
<yun-div
v-if="cardId"
:width-v="704"
:margin-v="[0,'auto']"
:padding-v="[40,0]"
:padding-v="[40,paddingL]"
bg-color-v="#fff"
:flex-v="['row','flex-start','flex-start']"
:border-v="[1,'solid','#EFEFEF','bottom']"
slot="card"
>
<yun-div :ske-h="100" :width-v="100" :flex-v="['row', 'space-between','flex-start']" :flex-wrap="true">
<yun-div :width-v="48" :height-v="48" bg-color-v="#B4DDDE" v-if="imgSrc === ''" :border-r="[4]"></yun-div>
<yun-div :width-v="48" :height-v="48" bg-color-v="#E0BDBD" v-if="imgSrc === ''" :border-r="[4]"></yun-div>
<yun-div :width-v="48" :height-v="48" bg-color-v="#9FBBC9" v-if="imgSrc === ''" :margin-v="[4,0,0,0]" :border-r="[4]"></yun-div>
<yun-div :width-v="48" :height-v="48" bg-color-v="#A6E2B6" v-if="imgSrc === ''" :margin-v="[4,0,0,0]" :border-r="[4]"></yun-div>
<yun-img :src="imgSrc" v-if="imgSrc !== ''" :width-v="100" :height-v="100" :border-r="[8]" :ske-w="100" :ske-h="100"></yun-img>
<yun-div :width-v="48" :height-v="48" bg-color-v="#B4DDDE" v-if="!topicIcon" :border-r="[4]"></yun-div>
<yun-div :width-v="48" :height-v="48" bg-color-v="#E0BDBD" v-if="!topicIcon" :border-r="[4]"></yun-div>
<yun-div :width-v="48" :height-v="48" bg-color-v="#9FBBC9" v-if="!topicIcon" :margin-v="[4,0,0,0]" :border-r="[4]"></yun-div>
<yun-div :width-v="48" :height-v="48" bg-color-v="#A6E2B6" v-if="!topicIcon" :margin-v="[4,0,0,0]" :border-r="[4]"></yun-div>
<yun-img :src="topicIcon" v-if="topicIcon" :width-v="100" :height-v="100" :border-r="[8]" :ske-w="100" :ske-h="100"></yun-img>
</yun-div>
<yun-div :margin-v="[0,0,0,16]">
<yun-div :ske-w="588" :width-v="588" :font-style="[36,48,500,'#333','left']" :flex-v="['row','space-between','center']">
<span># 设计 #</span>
<span @click="handelFocus" :style="{fontSize:commonReturnFlexedLength(28),flexShrink: 0}">{{focus ? '取消关注' : '+关注'}}</span>
<span># {{cardName}} #</span>
<yun-div
v-if="!followedTopic&&!from&&userId!==$store.state.userProfile.userId"
@tap="dataPostFollowTopic"
:ske-w="150"
:font-style="[24,48,500,'#55B946','left']"
:flex-v="['row','center','center']"
:show-ske="false"
:no-flex-shrink="true"
:class="{active: focus}">
<span v-if="!loading">+</span>
<yun-indicator v-if="loading" :width-v="32" :height-v="32" color="#55B946"></yun-indicator>
关注
</yun-div>
<yun-div
v-if="!followedTopic&&!from&&userId===$store.state.userProfile.userId"
:show-ske="false"
:font-style="[24,48,500,'#9FBBC9','left']"
:no-flex-shrink="true"
>
我的话题
</yun-div>
<yun-div
v-if="followedTopic||from"
@tap="dataDeleteFollowTopic"
:ske-w="150"
:show-ske="false"
:no-flex-shrink="true"
:font-style="[24,48,500,'#999','left']"
:flex-v="['row','center','center']"
:class="{active: focus}">
<yun-icon v-if="!loading" name="right"></yun-icon>
<yun-indicator v-if="loading" :width-v="32" :height-v="32" color="#999"></yun-indicator>
已关注
</yun-div>
</yun-div>
<yun-div :font-style="[20,27,500,'#999','left']" :margin-v="[15,0,0,0]">56万讨论·1.5亿阅读</yun-div>
<yun-div :font-style="[20,27,500,'#999','left']" :margin-v="[15,0,0,0]">{{cardIntro}}{{cardNum1}}讨论</yun-div>
</yun-div>
</yun-div>
</yun-slider>
</template>
<script>
import commonMixin from "./commonMixin";
import config from "../../action/config";
export default {
mixins: [commonMixin],
data() {
return {
imgSrc: '',
focus: false
props:{
activeRouteFunc:{
type:Boolean,
default:true
},
info:{
type:Object,
default:()=>({})
},
from:{
type:String,
default:''
}
},
computed:{
showFollowedTopic(){
return !!(this.followedTopic || this.from==='notice');
}
},
data(){
return{
isPhoto: true,
src: 'http://i1.sinaimg.cn/ent/d/2008-06-04/U105P28T3D2048907F326DT20080604225106.jpg',
focus: '+关注',
fontColor: '#55B946',
cardName:'',
cardIntro:'',
cardId:'',
cardTags:[],
cardTime:'',
cardNum1:'',
userId:'',
topicIcon:'',
loading : false,
followedTopic:false
}
},
created(){
this.dateGet2Info();
},
methods:{
dateGet2Info(){
let info = this.info;
if(this.info.topicId){
this.cardName = info.topicName;
this.cardIntro = info.topicDescrption;
this.cardId = info.topicId;
this.userId = info.userId;
this.src = info.cover;
this.topicIcon = info.topicIcon;
this.cardTags = info.tags;
this.cardTime = this.dateConvert(info.createTime);
this.cardNum1 = info.referenceCount;
this.followedTopic = info.followedTopic;
}
if(this.info.itemId){
this.cardName = info.title;
this.cardIntro = info.description;
this.cardId = info.itemId;
this.src = info.cover;
this.cardNum1 =info.extra? info.extra.referenceCount:'';
this.cardTime = dateConvert(info.createTime);
}
},
dataPostFollowTopic(){
this.loading = true;
this.$axios.$post(config.api.post.Topic.follow+this.cardId+'/follower').then((response)=>{
if(response.code===0){
this.$message({
type:'success',
message:'关注成功'
})
this.followedTopic = true;
}else{
this.$message({
type:'info',
message:'请在登陆后操作'
})
}
this.loading = false;
})
},
dataDeleteFollowTopic(){
this.loading = true;
this.$axios.$delete(config.api.post.Topic.follow+this.cardId+'/follower').then((response)=>{
this.loading = false;
if(response.code===0){
this.$message({
type:'success',
message:'取消关注成功'
})
if(this.from==='notice'){
this.cardId = ''
}
this.followedTopic = false;
}else{
this.$message({
type:'info',
message:'请在登陆后操作'
})
}
})
}
},
methods: {
handelFocus() {
this.focus = !this.focus
watch:{
info(val){
this.dateGet2Info();
}
}
}
......
......@@ -23,27 +23,34 @@
:ske-h="102"
:ske-w="102"
:border-r="[50,50,50,50]"
src=""
:src="userAvatar"
></yun-img>
<yun-div
:style="{marginLeft: commonReturnFlexedLength(25)}"
:height-v="102"
:flex-v="['column','space-between','flex-start']"
>
<yun-div :font-style="[36,36]" :ske-w="150" :ske-h="50">激动啊</yun-div>
<yun-div :font-style="[24,36,400,'#999999']" :width-v="400" :no-wrap="true" :ske-h="40">设计设计的力量设计的力量的力量设计的力量</yun-div>
<yun-div :font-style="[36,36]" :ske-w="150" :ske-h="50">{{nickName}}</yun-div>
<yun-div :font-style="[24,36,400,'#999999']" :width-v="400" :no-wrap="true" :ske-h="40">{{signature}}</yun-div>
</yun-div>
</yun-div>
<yun-div
:height-v="102"
:font-style="[24,36,400,'#999999','left']"
:flex-v="['row','flex-start','center']"
:show-ske="false"
>
账号资料
<yun-icon
:style="{marginLeft:commonReturnFlexedLength(15)}"
name="left_arrow"
></yun-icon>
<yun-div
@tap="changeRoute1(userId1===$store.state.userProfile.userId?routesObject.personalCenter.index:routesObject.homePage+userId1+'/blog')"
>账号资料</yun-div>
<yun-div>
<yun-icon
:style="{marginLeft:commonReturnFlexedLength(15)}"
:size="20"
name="left_arrow"
></yun-icon>
</yun-div>
</yun-div>
</yun-div>
<yun-div
......@@ -52,6 +59,8 @@
>
<yun-div
:flex-v="['column','space-between','center']"
@tap="changeRoute1(userId1===$store.state.userProfile.userId?routesObject.personalCenter.person:routesObject.homePage+userId1+'/following')"
>
<yun-div
:ske-h="60"
......@@ -61,10 +70,12 @@
</yun-div>
<yun-div
:font-style="[36,60,500,'black','center']"
>1223</yun-div>
>{{statistics.followedNum}}</yun-div>
</yun-div>
<yun-div
:flex-v="['column','space-between','center']"
@tap="changeRoute1(userId1===$store.state.userProfile.userId?routesObject.personalCenter.person:routesObject.homePage+userId1+'/blog')"
>
<yun-div
:ske-h="60"
......@@ -74,20 +85,23 @@
</yun-div>
<yun-div
:font-style="[36,60,500,'black','center']"
>123</yun-div>
>{{statistics.visitedNum}}</yun-div>
</yun-div>
<yun-div
:flex-v="['column','space-between','center']"
@tap="changeRoute1(userId1===$store.state.userProfile.userId?routesObject.personalCenter.person:routesObject.homePage+userId1+'/fans')"
>
<yun-div
:ske-h="60"
:font-style="[24,36,400,'#999999','center']"
>
粉丝
</yun-div>
<yun-div
:font-style="[36,60,500,'black','center']"
>153</yun-div>
>{{statistics.fansNum}}</yun-div>
</yun-div>
</yun-div>
......@@ -95,14 +109,173 @@
</template>
<script>
import commonMixin from "./commonMixin";
import config from "../../action/config";
export default {
mixins:[commonMixin],
name: "userCardBig"
name: "userCardBig",
data() {
return {
userAvatar:'',
userId1:"",
nickName:'',
gender:0,
signature:'',
projectNum:6,
blogNum:6,
answerNum:6,
popularity:6,
follow:7,
fans:7,
statistics:{},
followLoading:false,
followedUser:false,
}
},
props:{
avatarSize:{
default:90,
type:Number,
},
showBorder:{
default:true,
type:Boolean,
},
paddingV:{
default:()=>([40,0]),
type:Array,
},
userId:{
type:String,
default:'',
},
from:{
type:String,
default:'',
},
info:{
type:Object,
default:()=>({})
},
},
created(){
if(this.info.nickName||this.info.userNick){
this.dataGet2UserInfo();
}else {
this.dataGetUserInfo();
}
},
watch:{
userId(){
if(this.info.nickName||this.info.userNick){
this.dataGet2UserInfo();
}else {
this.dataGetUserInfo();
}
},
},
methods:{
dataGetUserInfo(){
this.followLoading=true;
if(this.userId){
this.$axios.$get(config.api.get.User.otherInfo+this.userId+'/baseinfo').then((response) => {
if(response.code===0){
let data = response.data;
this.userId1 = this.userId;
this.nickName=data.nickName;
this.gender= data.gender;
this.signature = data.signature;
this.userAvatar = data.userAvatar;
this.statistics = data.statistics || {};
this.followLoading=false;
this.followedUser = data.followedUser;
}
})
}
},
dataGet2UserInfo(){
let data = this.info;
this.nickName=data.nickName||data.userNick;
this.userId1 = data.userId;
this.gender= data.gender;
this.signature = data.signature;
this.userAvatar = data.userAvatar;
this.statistics = data.statistics || {};
this.followLoading=false;
this.followedUser = data.followedUser;
},
dataPostToFollow(){
if(!this.$store.state.userProfile.userId){
this.$message({
type:'info',
message:'请在登陆后操作'
})
return false;
}
this.followLoading=true;
this.$axios.$post(config.api.post.User.follow+this.userId1+'/follower').then((response)=>{
if(response.code===0){
this.$message({
type:'success',
message:response.msg
})
this.followedUser = true;
}else{
this.$message({
type:'info',
message:response.msg
})
}
this.followLoading=false;
})
},
dataPostToCancelFollow(){
if(!this.$store.state.userProfile.userId){
this.$message({
type:'info',
message:'请在登陆后操作'
})
return false;
}
this.followLoading=true;
this.$axios.$delete(config.api.delete.User.unfollow+this.userId1+'/follower').then((response)=>{
if(response.code===0){
this.$message({
type:'success',
message:response.msg
})
this.followedUser = false;
}else{
this.$message({
type:'info',
message:response.msg
})
}
this.followLoading=false;
})
},
},
}
</script>
......
<template>
<yun-div
:width-v="704"
:padding-v="paddingV"
:padding-v="[paddingL]"
bg-color-v="#fff"
:margin-v="[0,'auto']"
:flex-v="['row','space-between','center']"
:border-v="[showBorder?1:0,'solid','#EFEFEF','bottom']"
>
<yun-img v-tap="()=>changeRoute1(routesObject.homePage+userId+'/blog')"
<yun-img v-tap="()=>changeRoute1(routesObject.homePage+userId1+'/blog')"
:src="userAvatar" :ske-w="avatarSize" :ske-h="avatarSize" :width-v="avatarSize" :height-v="avatarSize" :border-r="['50%']"></yun-img>
<yun-div :width-v="588" :flex-v="['row','space-between','center']">
<yun-div :flex-v="['column','flex-start','flex-start']">
<yun-div
@tap="changeRoute1(routesObject.homePage+userId+'/blog')"
@tap="changeRoute1(routesObject.homePage+userId1+'/blog')"
:ske-w="100" :font-style="[28,37,500,'#333','left']">{{nickName}}</yun-div>
<yun-div :ske-w="200" :font-style="[20,27,500,'#999','left']" :margin-v="[15,0,0,0]">人气{{statistics.visitedNum}}·粉丝{{statistics.fansNum}}</yun-div>
</yun-div>
......@@ -21,9 +21,7 @@
@tap="dataPostToFollow"
:ske-w="150"
:font-style="[24,90,500,'#55B946','left']"
:flex-v="['row','center','center']"
:class="{active: focus}">
:flex-v="['row','center','center']">
<span v-if="!followLoading">+</span>
<yun-indicator v-if="followLoading" :width-v="32" :height-v="32" color="#55B946"></yun-indicator>
关注
......@@ -33,8 +31,7 @@
@tap="dataPostToCancelFollow"
:ske-w="150"
:font-style="[24,90,500,'#999','left']"
:flex-v="['row','center','center']"
:class="{active: focus}">
:flex-v="['row','center','center']">
<yun-icon v-if="!followLoading" name="right"></yun-icon>
<yun-indicator v-if="followLoading" :width-v="32" :height-v="32" color="#999"></yun-indicator>
已关注
......@@ -51,10 +48,6 @@ export default {
mixins: [commonMixin],
data() {
return {
focus: false,
isLogin: false,
//
userAvatar:'',
userId1:"",
nickName:'',
......@@ -99,11 +92,10 @@ export default {
type:Object,
default:()=>({})
},
nickName1:String
},
created(){
if(this.info.nickName){
if(this.info.nickName||this.info.userNick){
this.dataGet2UserInfo();
}else {
this.dataGetUserInfo();
......@@ -111,21 +103,14 @@ export default {
},
watch:{
userId(){
if(this.nickName1){
if(this.info.nickName||this.info.userNick){
this.dataGet2UserInfo();
}else {
this.dataGetUserInfo();
}
},
nickName1(){
this.dataGet2UserInfo();
}
},
methods:{
handelFocus() {
this.focus = !this.focus
},
dataGetUserInfo(){
this.followLoading=true;
if(this.userId){
......@@ -147,7 +132,7 @@ export default {
},
dataGet2UserInfo(){
let data = this.info;
this.nickName=data.nickName;
this.nickName=data.nickName||data.userNick;
this.userId1 = data.userId;
this.gender= data.gender;
this.signature = data.signature;
......@@ -219,27 +204,7 @@ export default {
})
},
dataGet2Path(path){
if(!this.userId1){
return ''
}else if(this.userId1===this.$store.state.userProfile.userId){
if(path==='following'||path==='fans'){
return '/personal-center/person/'+path;
}else{
return '/personal-center/home/'+path;
}
}else{
return '/u/'+this.userId1+'/'+path
}
}
},
}
</script>
<style lang="scss" scoped>
.active {
color: #999 !important;
}
</style>
<template>
<comment-con></comment-con>
<comment-con :id="id" type="question"></comment-con>
</template>
......@@ -8,6 +8,20 @@
export default {
components:{
CommentCon
},
data(){
return {
id:'',
}
},
created() {
this.getArticleId();
},
methods:{
getArticleId(){
this.id = this.$route.params.id;
},
}
}
......
<template>
<article-card></article-card>
<article-card :info="detail"></article-card>
</template>
<script>
import ArticleCard from "../../../components/moblie/articleCard";
import config from "../../../action/config";
export default {
data(){
return{
detail:{},
}
},
components:{
ArticleCard
},
created() {
this.dataGetArticle()
},
methods:{
dataGetArticle(){
let id = this.$route.params.id;
this.$axios.$get(config.api.get.Question.detail+id).then((response)=>{
this.detail = response.data;
})
}
}
}
......
......@@ -21,7 +21,6 @@
methods:{
getArticleId(){
this.id = this.$route.params.id;
console.log(this.$route.params.id)
},
}
}
......
<template>
<yun-div
>
<nav-bar :path="path" :nav-list="navList"></nav-bar>
<dynamic-card></dynamic-card>
<dynamic-card></dynamic-card>
<dynamic-card></dynamic-card>
<dynamic-card></dynamic-card>
<dynamic-card></dynamic-card>
<nav-bar :path="path" :nav-list="navList" :sort="false">
<template>
<yun-div
:extend-style="{
boxShadow: '-28px -0px 40px -22px rgba(0,0,0,.2) inset',
position:'relative',overflow: 'visible'}"
@tap="changeRoute1(routesObject.dynamic.release)"
>
<yun-icon name="edit2" color="#000" :size="30"></yun-icon>
</yun-div>
</template>
</nav-bar>
<dynamic-card
v-for="(val,index) in postList"
:key="val.postId"
:info="val"
></dynamic-card>
<scroll-loading ref="pagination" :pages="pages" v-on:changePage="changePage"></scroll-loading>
</yun-div>
</template>
<script>
import NavBar from "../../components/moblie/nav";
import DynamicCard from "../../components/moblie/dynamicCard";
import ScrollLoading from '../../components/moblie/scrollLoading';
import config from "../../action/config";
import commonMixin from "../../components/moblie/commonMixin";
export default {
components: {DynamicCard, NavBar},
mixins:[commonMixin],
components: {DynamicCard, NavBar,ScrollLoading},
data() {
return {
path: '/answer',
path: '/dynamic',
navList: [
{
label: '全部动态',
id: 'all'
label: '最新',
id: 'new'
},
{
label: '推荐',
id: 'recommends'
},
{
label: '关注',
id: 'following'
},
{
label: '我的',
id: 'my'
},
{
label: '文字',
id: 'word'
},
{
label: '我的关注',
id: 'all'
label: '视频',
id: 'video'
},
]
{
label: '图片',
id: 'picture'
}
],
postList:[],
pages:1,
}
},
created() {
if (this.$route.query.type) {
return
}else{
this.$router.replace({
path: '/dynamic',
query: {
type: 'new'
}
})
}
this.$router.replace({
path: '/dynamic',
query: {
type: 'all'
},
watch:{
$route(val){
if (val.query.type) {
}else{
this.$router.replace({
path: '/dynamic',
query: {
type: 'new'
}
})
}
this.restartPagination();
}
},
methods:{
restartPagination(){
if(process.browser){
this.projectList = [];
this.pages = 1 ;
this.$refs.pagination.setCurrentPage(1)
}
},
handleResponse(currentPage,response){
if(currentPage===1){
this.postList=response.data.dataList;
this.pages = response.data.totalPage;
}else{
response.data.dataList.map((val,index)=>{
this.postList.push(val)
});
this.pages = response.data.totalPage;
}
},
dataGetPostList(currentPage){
let params={
page:currentPage,
size:12
};
if(this.$route.query.type&&this.$route.query.type==='new' ){ //最新
this.$axios.$get(config.api.get.Post.list,{params:params}).then((response)=>{
this.handleResponse(currentPage,response)
})
}
if(this.$route.query.type&&this.$route.query.type==='recommends' ){ //推荐
this.$axios.$get(config.api.get.Post.recommends,{params:params}).then((response)=>{
this.handleResponse(currentPage,response)
})
}
if(this.$route.query.type&&this.$route.query.type==='following' ){ //关注
this.$axios.$get(config.api.get.Post.following,{params:params}).then((response)=>{
this.handleResponse(currentPage,response)
})
}
if(this.$route.query.type&&this.$route.query.type==='my' ){ //我的
this.$axios.$get(config.api.get.Post.myList,{params:params}).then((response)=>{
this.handleResponse(currentPage,response)
})
}
if(this.$route.query.type&&this.$route.query.type==='word' ){ //文字
params.type = 0;
this.$axios.$get(config.api.get.Post.list,{params:params}).then((response)=>{
this.handleResponse(currentPage,response)
})
}
if(this.$route.query.type&&this.$route.query.type==='video' ){ //视频
params.type = 1;
this.$axios.$get(config.api.get.Post.list,{params:params}).then((response)=>{
this.handleResponse(currentPage,response)
})
}
if(this.$route.query.type&&this.$route.query.type==='picture' ){ //图片
params.type = 2;
this.$axios.$get(config.api.get.Post.list,{params:params}).then((response)=>{
this.handleResponse(currentPage,response)
})
}
})
},
changePage(currentPage){
//返回页数 请求新的数据
this.dataGetPostList(currentPage)
},
}
}
</script>
......
......@@ -49,6 +49,7 @@
<!-- menu-->
<yun-div
:height-v="56"
:width-v="54"
:border-r="[28]"
:show-ske="false"
:font-style="[28,56,500,'#666','center']"
......@@ -69,13 +70,16 @@
:width-v="588"
:border-r="[6,undefined,undefined,6]"
:border-v="[1,'solid',commonReturnPrimaryColor(0.3)]"
:height-v="72"></yun-input>
:height-v="72"
@input="dataGetSearchTopic"
></yun-input>
<yun-button
:size="[116,72]"
:font-size="28"
:border-r="[undefined,6,6,undefined]"
:bg-color="commonReturnPrimaryColor(1)"
v-tap="dataPostTopic"
>
添加
</yun-button>
......@@ -87,8 +91,60 @@
:flex-v="['row','space-between','center']"
:font-style="[24,32,400,'#999','left']"
:width-v="699"
:extend-style="{
overflow:'visible'
}"
>
推荐话题
<yun-div
v-if="topicName"
:width-v="699"
:margin-v="[0,'auto']"
:position-v="[0,0,undefined,0]"
bg-color-v="#fff"
:extend-style="{
position:'absolute',
minHeight:'5rem',
zIndex:headerZIndex+4,
}"
>
<yun-div
v-for="(val,index) in topicListBySearch"
:margin-v="[0,'auto',20]"
:font-style="[26,28,400,'#2F2F2F','left']"
:show-ske="false"
:padding-v="[20,10]"
:width-v="650"
bg-color-v="#F5F7FA"
:no-flex-shrink="true"
:no-wrap="true"
:flex-v="['row','space-between','center']"
@tap="clickToUseTopic(val.topicName)"
>
<yun-div
:font-style="[26,28,400,'#333','left']"
:show-ske="false"
:width-v="500"
:no-flex-shrink="true"
:no-wrap="true"
>
#{{val.topicName}}#
</yun-div>
<yun-div
:font-style="[22,28,400,'#2F2F2F','right']"
:show-ske="false"
:width-v="150"
:no-flex-shrink="true"
:no-wrap="true"
>
{{val.referenceCount}}
</yun-div>
</yun-div>
</yun-div>
</yun-div>
<yun-div
:margin-v="[32,'auto',0]"
......@@ -97,21 +153,73 @@
:width-v="699"
>
<yun-div
v-for="index in 10"
v-for="(val,index) in topicList"
:margin-v="[0,0,35]"
:font-style="[26,28,400,'#2F2F2F','left']"
:show-ske="false"
:width-v="340"
:no-flex-shrink="true"
:no-wrap="true"
@tap="clickToUseTopic(val.topicName)"
:flex-v="['row','space-between','center']"
>
好多好多字字字字字字字字字好多好多字字字字字字字字字
#{{val.topicName}}#
</yun-div>
</yun-div>
</yun-div>
<!-- release body-->
<yun-div
:height-v="84"
:flex-v="['row','space-between','center']"
:width-v="750"
:position-v="[0,0,undefined,0]"
:padding-v="[0,paddingL,0,paddingL]"
bg-color-v="#fff"
:extend-style="{
position:'fixed',
maxWidth:'750px',
boxShadow:`0 ${1*heightRate}px 0 rgba(0,0,0,.1)`,
boxSizing:'border-box',
zIndex:headerZIndex+1,
}"
>
<!-- back icon-->
<yun-div
:height-v="56"
:border-r="[28]"
:show-ske="false"
:font-style="[28,56,500,'#666','center']"
@tap="changeRouteGoBack"
>
<yun-icon name="arrow-back" :size="28"></yun-icon>
</yun-div>
<!-- title-->
<yun-div
:height-v="56"
:border-r="[28]"
:show-ske="false"
:font-style="[30,56,500,'#2F2F2F','center']"
>
发表动态
</yun-div>
<!-- menu-->
<yun-div
:height-v="56"
:border-r="[28]"
:show-ske="false"
:font-style="[28,56,500,commonReturnPrimaryColor(),'center']"
@tap="dataPostContent"
>
发布
</yun-div>
</yun-div>
<yun-div
:extend-style="{
position:'fixed',
maxWidth:'750px',
......@@ -134,7 +242,7 @@
:padding-v="[27,23]"
:position-v="[0,0,imgArr.length>0?288+bottomHeight:88+bottomHeight,0]"
>
<yun-textarea ref="textarea" @click.native="tapToChangeBottom(null)" @input="tapToChangeBottom(null)" @focus="tapToChangeBottom(null)" :font-size="28" :line-height="37" placeholder="哈哈哈,我有个新鲜事要告诉大家~" name="" id=""></yun-textarea>
<yun-textarea v-model="releaseWord" ref="textarea" v-tap="()=>tapToChangeBottom(null)" @focus="tapToChangeBottom(null)" :font-size="28" :line-height="37" placeholder="哈哈哈,我有个新鲜事要告诉大家~" name="" id=""></yun-textarea>
</yun-div>
<!-- used image-->
......@@ -166,7 +274,7 @@
:no-flex-shrink="true"
:border-r="[4]"
:border-v="[1,'solid','#dadbff']"
@click="clickToDeleteImg(index)" v-for="(value,index) in picturesTemp" >
v-for="(value,index) in imgArr" >
<yun-img
width-v="auto"
height-v="auto"
......@@ -191,6 +299,7 @@
:show-ske="false"
bg-color-v="rgba(34,34,41,.7)"
:position-v="[5,5,undefined,undefined]"
@tap="clickToDeleteImg(index)"
>
<yun-icon name="close1" :size="22" color="#fff"></yun-icon>
......@@ -292,7 +401,7 @@
bg-color="transparent"
v-for="value in emojiArr"
:font-size="50"
@click="clickToAddEmoji(value)">{{value}}</yun-button>
v-tap="()=>clickToAddEmoji(value)">{{value}}</yun-button>
</yun-div>
</yun-div>
......@@ -355,12 +464,14 @@
color="#333"
bg-color="transparent"
v-for="(value2,index) in picturesTemp"
:key="value2+index"
>
<yun-div
:width-v="233"
:height-v="233"
:flex-v="['row','center','center']"
@tap="addImageToImgArr(value2)"
>
<yun-img
width-v="auto"
......@@ -428,6 +539,8 @@
height-v="100%"
>
<yun-div
v-if="!video"
:height-v="400"
:width-v="600"
:border-v="[1,'dashed','#dadbff']"
......@@ -437,9 +550,25 @@
:show-ske="false"
:flex-v="['column','center','center']"
>
<input type="file" style="position: absolute;left:0;right:0;top:0;bottom:0;opacity: 0;width:100%" @change="(e)=>dataPostPic(e)">
<input v-if="!showVideoUploadP" type="file" style="position: absolute;left:0;right:0;top:0;bottom:0;opacity: 0;width:100%" @change="(e)=>dataPostVideo(e)">
<span v-if="!showVideoUploadP">上传视频(.mp4 .ogg .webm)</span>
<span v-if="showVideoUploadP"><yun-indicator :size="24" color="#999" :height-v="24" :width-v="24"></yun-indicator>上传中</span>
</yun-div>
上传视频(.mp4 .ogg .webm)
<yun-div
v-if="video"
:height-v="400"
:width-v="600"
:border-v="[1,'dashed','#dadbff']"
:border-r="[4]"
bg-color-v="rgba(244,248,250,.32941)"
:font-style="[24,400,400,'#999','center']"
:show-ske="false"
:flex-v="['column','center','center']"
>
<video controls :src="video" style="width: 100%;height:90%" ></video>
</yun-div>
</yun-div>
......@@ -463,7 +592,6 @@
bg-color-v="#fff"
>
<yun-button :border-r="[0]" :bg-color="bottomItemIndex===1?'#f4f4f4':'#fff'" color="#333" >
<input type="file" style="position: absolute;left:0;right:0;top:0;bottom:0;opacity: 0" @change="(e)=>dataPostPic(e)">
上传视频</yun-button>
</yun-div>
<div>
......@@ -480,10 +608,12 @@
<script>
import commonMixin from "../../../components/moblie/commonMixin";
import emojiArrs from "../../../action/emoji-array";
import config from "../../../action/config";
export default {
mixins:[commonMixin],
data(){
return{
releaseWord:'',
emojiArr:emojiArrs.emojiArr1,
bottomItemIndex:1,
selectTab:null,
......@@ -500,6 +630,11 @@
],
imgArr:[],
topicName:'',
addingPic:false,
video:'',
showVideoUploadP:false,
topicList:[],
topicListBySearch:[],
}
},
......@@ -513,13 +648,13 @@
}
},
created() {
this.dataGetHotTopic();
},
methods:{
getEmojiArr(index){
console.log(index)
let arr =emojiArrs['emojiArr'+index];
this.bottomItemIndex = index;
this.emojiArr =arr ;
......@@ -542,6 +677,14 @@
},
dataPostVideo(e){
if(this.imgArr.length>0){
this.$message({
type:'warning',
message:'不能同时上传图片和视频!'
})
return false;
}
if(!this.$store.state.userProfile.userId){
this.$message({
......@@ -578,56 +721,109 @@
})
},
addImageToImgArr(img){
this.imgArr.push(img);
},
dataPostPic(e){
console.log(1);
// console.log(this.picturesTemp.shift())
// console.log(this.picturesTemp)
this.picturesTemp.shift()
if(!this.$store.state.userProfile.userId){
this.$message({
type:'warning',
message:'请先登录!'
})
return false;
}
if(this.video){
this.$message({
type:'warning',
message:'不能同时上传图片和视频!'
})
return false;
}
let a = new FormData();
let imgStr = /\.(gif|jpg|jpeg|png|bmp|GIF|BMP|JPG|PNG|JPEG)$/;
if(!imgStr.test(e.target.files[0].name)){
this.$message({
message:'文件不是图片类型!',
type:'warning'
})
return false;
}
this.addingPic=true;
let type = 3;
//0-用户头像
//1-博客封面
// 2-项目封面
a.append('file',e.target.files[0]);
a.append('type',type); //0是头像
this.$axios.$post(config.api.post.Resource.file,a).then((res)=>{
if(res.code === 0){
this.imgArr.push(res.data);
}else{
this.$message({
message:res.msg,
type:'warning'
})
}
this.addingPic=false;
})
},
dataGetHotTopic(){
this.$axios.$get(config.api.get.Topic.hotSearch,{
params:{
page:1,
size:10
}
}).then((response)=>{
this.topicList = response.data.dataList;
})
},
dataGetSearchTopic(e){
this.$axios.$get(config.api.get.Topic.search,{
params:{
page:1,
size:10,
keywords:e,
}
}).then((response)=>{
this.topicListBySearch = response.data.dataList;
})
},
dataPostTopic(){
this.$axios.$post(config.api.post.Topic.release,{
topicName:this.topicName
}).then((res)=>{
if(res.code===0){
this.clickToUseTopic(this.topicName)
this.$message({
type:'success',
message:'话题发布成功!'
})
}else{
this.$message({
type:'info',
message:res.msg
})
}
})
},
clickToUseTopic(topic){
this.releaseWord = this.releaseWord +"#"+topic+"#";
this.selectTab =null;
},
// dataPostPic(e){
// if(!this.$store.state.userProfile.userId){
// this.$message({
// type:'warning',
// message:'请先登录!'
// })
//
// return false;
// }
// let a = new FormData();
//
// let imgStr = /\.(gif|jpg|jpeg|png|bmp|GIF|BMP|JPG|PNG|JPEG)$/;
// if(!imgStr.test(e.target.files[0].name)){
// this.$message({
// message:'文件不是图片类型!',
// type:'warning'
// })
// return false;
// }
//
// this.addingPic=true;
//
//
// let type = 3;
// //0-用户头像
// //1-博客封面
// // 2-项目封面
// a.append('file',e.target.files[0]);
// a.append('type',type); //0是头像
// this.$axios.$post(config.api.post.Resource.file,a).then((res)=>{
// if(res.code === 0){
// this.imgArr.push(res.data);
// }else{
// this.$message({
// message:res.msg,
// type:'warning'
// })
// }
// this.addingPic=false;
//
//
// })
// },
dataPostContent(){
if(!this.$store.state.userProfile.userId){
this.$message({
......@@ -675,11 +871,10 @@
this.$axios.$post(config.api.post.Post.release,postFrom).then((response)=>{
if(response.code===0){
this.$emit(config.event.listenReleaseState,1);
this.releaseWord = '';
this.showPhotoCard = false;
this.showVideoCard = false;
this.imgArr = [];
this.video = '';
this.selectTab = null;
this.$message({
type:'success',
message:'动态发表成功!'
......
......@@ -3,31 +3,31 @@
height-v="auto"
slot="card"
>
<banner></banner>
<banner :linkArr="linkArr" :imgArr="imgArr" ></banner>
<container-card
title="项目推荐"
>
<project-card v-for="val in 5" ></project-card>
<project-card v-for="val in projectList" :key="val.projectId" :info="val" ></project-card>
</container-card>
<container-card
title="最新资讯"
>
<project-card v-for="val in 5" ></project-card>
<project-card v-for="val in newsList" :key="val.contentId" :info="val" ></project-card>
</container-card>
<container-card
title="社区精英"
>
<user-card-x v-for="val in 5"></user-card-x>
<user-card-x v-for="val in elitesList" :key="val.userId" :info="val"></user-card-x>
</container-card>
<container-card
title="精选博文"
>
<project-card v-for="val in 5"></project-card>
<project-card v-for="val in blogList" :key="val.blogId" :info="val" ></project-card>
</container-card>
<container-card
title="推荐问答"
>
<answer-card v-for="val in 5"></answer-card>
<answer-card v-for="val in answerList" :key="val.questionId" :info="val"></answer-card>
</container-card>
</yun-div>
......@@ -36,52 +36,108 @@
<script>
import YunButton from '../components/common/button/src/main';
import projectCard from '../components/moblie/projectCard';
import {getLineHeight} from "../action/utils/get-lineheight";
import banner from '../components/moblie/banner';
import containerCard from '../components/moblie/containerCard';
import answerCard from '../components/moblie/answerCard';
import userCardX from '../components/moblie/userCardX'
import config from "../action/config";
export default {
components: {
projectCard,YunButton,banner,containerCard,answerCard,userCardX
},
mounted() {
},
methods:{
getLineHeight(e){
console.log(e);
data(){
return{
imgArr:[],
linkArr: [],
projectList:[],
blogList:[],
newsList:[],
elitesList:[],
answerList:[],
}
},
}
</script>
<style>
.container {
margin: 0 auto;
min-height: 100vh;
font-size: 1px;
}
created() {
this.dataGetHotProjectList();
this.dataGetHotBlogList();
this.dataGetBanner();
this.dataGetNews();
this.dataGetHotBloggersList();
this.dataGetHotAnswerList();
},
methods:{
.title {
font-family: 'Quicksand', 'Source Sans Pro', -apple-system, BlinkMacSystemFont,
'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
display: block;
font-weight: 300;
font-size: 100rem;
color: #35495e;
letter-spacing: 1px;
}
dataGetHotProjectList(){
let params={
page:1,
size:12
};
this.$axios.$get(config.api.get.Project.hotList, {params:params})
.then((response)=>{
this.projectList = response.data.dataList;
})
},
dataGetHotBlogList(){
let params={
page:1,
size:12
};
this.$axios.$get(config.api.get.Blog.hotList, {params:params})
.then((response)=>{
this.blogList = response.data.dataList;
})
},
async dataGetBanner(){ //内容类型-0:幻灯,1:普通文章,3:广告
let dataList = await this.$axios.$get(config.api.get.Content.list + '/12/contents',
{
params: {
page: 1,
size: 5,
type: 0
}
})
dataList.data.dataList.map((val,index)=>{
this.imgArr.push(
val.pic1
);
this.linkArr.push(
val.link
)
})
.subtitle {
font-weight: 300;
font-size: 42px;
color: #526488;
word-spacing: 5px;
padding-bottom: 15px;
}
},
async dataGetNews(){ //内容类型-0:幻灯,1:普通文章,3:广告
let dataList = await this.$axios.$get(config.api.get.Content.list + '/13/contents',
{
params: {
page: 1,
size: 5,
type: 0
}
})
this.newsList = dataList.data.dataList
.links {
padding-top: 15px;
},
dataGetHotBloggersList() {
let params={
page: 1,
size: 12
};
this.$axios.$get(config.api.get.User.elites,{params:params})
.then((response)=>{
this.elitesList = response.data.dataList;
});
},
dataGetHotAnswerList() {
let params={
page: 1,
size: 10
};
this.$axios.$get(config.api.get.Question.hotList,{params:params})
.then((response)=>{
this.answerList = response.data.dataList;
});
},
},
}
</style>
</script>
<template>
<article-card></article-card>
<article-card :info="detail"></article-card>
</template>
<script>
import ArticleCard from "../../../components/moblie/articleCard";
import config from "../../../action/config";
export default {
data(){
return{
detail:{},
}
},
components:{
ArticleCard
},
created() {
this.dataGetArticle()
},
methods:{
dataGetArticle(){
let id = this.$route.params.id;
this.$axios.$get(config.api.get.Content.detail+id).then((response)=>{
this.detail = response.data;
})
}
}
}
......
......@@ -21,15 +21,15 @@ export default {
navList: [
{
label: '新闻速递',
id: '13'
id: 13
},
{
label: '行业资讯',
id: '14'
id: 14
},
{
label: '软件更新',
id: '17'
id: 17
}
],
newsList:[],
......@@ -38,19 +38,31 @@ export default {
},
watch: {
$route(val){
if (this.$route.query.type) {
}else{
this.$router.replace({
path: '/news',
query: {
type: '13'
}
})
}
this.restartPagination();
},
},
created() {
if (this.$route.query.type) {
return
}else{
this.$router.replace({
path: '/news',
query: {
type: '13'
}
})
}
this.$router.replace({
path: '/news',
query: {
type: '13'
}
})
},
methods: {
restartPagination(){
......
......@@ -100,7 +100,6 @@
getDataUserInfo(){
this.$axios.$get(config.api.get.User.myInfo).then((response) => {
console.log(response);
if(response.code===0){
let data = response.data;
this.nickName=data.nickName;
......
......@@ -62,6 +62,7 @@
:margin-v="[15,0,15,0]"
:ske-w="120"
:font-style="[30,30,400,'#75D098','center']"
@tap="handleLogout"
>
安全退出
</yun-div>
......@@ -73,9 +74,36 @@
<script>
import userCardBig from '../../components/moblie/userCardBig'
import dataCard from '../../components/moblie/dataCard'
import config from "../../action/config";
const Cookie = process.client ? require('js-cookie') : null
export default {
components:{
userCardBig,dataCard
},
methods:{
handleLogout() {
this.$messageBox.confirm({
title:'提示',
content:'确认注销登录?',
confirmText: '确定',
onConfirm: action => {
this.$axios.$get(config.api.get.User.logout).then((response)=>{
if(response.code === 0 ){
// 删除cookie
Cookie.remove(config.default_data.KEY_COOKIE_TOKEN)
// 移除登录信息
this.$store.commit('auth/logout')
// 移除用户信息
this.$store.commit('userProfile/removeUser')
this.routeToHome();
}
})
}
});
},
}
}
......
<template>
<comment-con></comment-con>
<comment-con :id="id" type="project"></comment-con>
</template>
......@@ -8,6 +8,20 @@
export default {
components:{
CommentCon
},
data(){
return {
id:'',
}
},
created() {
this.getArticleId();
},
methods:{
getArticleId(){
this.id = this.$route.params.id;
},
}
}
......
<template>
<article-card></article-card>
<article-card :info="detail"></article-card>
</template>
<script>
import ArticleCard from "../../../components/moblie/articleCard";
import config from "../../../action/config";
export default {
data(){
return{
detail:{},
}
},
components:{
ArticleCard
},
created() {
this.dataGetArticle()
},
methods:{
dataGetArticle(){
let id = this.$route.params.id;
this.$axios.$get(config.api.get.Project.detail+id).then((response)=>{
this.detail = response.data;
})
}
}
}
......
......@@ -43,8 +43,16 @@ export default {
$route(val){
if(val.query.type==='hot'){
this.navList = this.navList2
}else{
}if(this.$route.query.type){
this.navList = this.navList1
}else{
this.navList = this.navList1;
this.$router.replace({
path: '/project',
query: {
type: 'all'
}
});
}
this.restartPagination();
......
<template>
<yun-div>
<Nav :path="path" :nav-list="navList"></Nav>
<topic-card></topic-card>
<topic-card></topic-card>
<topic-card></topic-card>
<topic-card></topic-card>
<topic-card></topic-card>
<topic-card></topic-card>
<topic-card></topic-card>
<topic-card :from="fromType" v-for="(val,index) in topicList" :key="val.topicId" :info="val"></topic-card>
<scroll-loading ref="pagination" :pages="pages" v-on:changePage="changePage"></scroll-loading>
</yun-div>
</template>
<script>
import Nav from "../../components/moblie/nav";
import TopicCard from "../../components/moblie/topicCard";
import ScrollLoading from '../../components/moblie/scrollLoading';
import config from "../../action/config";
export default {
components: {TopicCard, Nav},
components: {TopicCard, Nav,ScrollLoading},
data() {
return {
path: '/topic',
navList: [
{
label: '全部话题',
id: 'all'
label: '最新',
id: 'new'
},
{
label: '我的话题',
id: '10'
label: '热门',
id: 'hot'
},
]
{
label: '关注',
id: 'following'
}
],
topicList:[],
pages:1,
fromType:''
}
},
watch:{
$route(val){
if (this.$route.query.type) {
}else{
this.$router.replace({
path: '/topic',
query: {
type: 'new'
}
})
}
this.restartPagination();
},
},
created() {
if (this.$route.query.type) {
return
}else{
this.$router.replace({
path: '/topic',
query: {
type: 'new'
}
})
}
this.$router.replace({
path: '/topic',
query: {
type: 'all'
},
methods:{
restartPagination(){
this.fromType = '';
if(process.browser){
this.projectList = [];
this.pages = 1 ;
this.$refs.pagination.setCurrentPage(1)
}
},
handleResponse(currentPage,response){
if(currentPage===1){
this.topicList=response.data.dataList;
this.pages = response.data.totalPage;
}else{
response.data.dataList.map((val,index)=>{
this.topicList.push(val)
});
this.pages = response.data.totalPage;
}
},
dataGetTopicList(currentPage){
let params={
page:currentPage,
size:12
};
if(this.$route.query.type&&this.$route.query.type==='new' ){
this.$axios.$get(config.api.get.Topic.list,{params:params}).then((response)=>{
this.handleResponse(currentPage,response)
})
}
else if(this.$route.query.type&&this.$route.query.type==='hot' ){
this.$axios.$get(config.api.get.Topic.hotList, {params:params})
.then((response)=>{
this.handleResponse(currentPage,response)
})
}
else if(this.$route.query.type&&this.$route.query.type==='following' ){
this.fromType = 'notice';
this.$axios.$get(config.api.get.Topic.myfollowedList, {params:params})
.then((response)=>{
console.log(response)
this.handleResponse(currentPage,{data:{dataList:response.data.records,pages:response.data.pages}})
})
}
})
},
changePage(currentPage){
//返回页数 请求新的数据
this.dataGetTopicList(currentPage)
},
}
}
</script>
......
<template>
<yun-div>
<yun-div :margin-v="[0,0,20]">
<user-card-big></user-card-big>
<user-card-big :info="userInfo"></user-card-big>
</yun-div>
<Nav :show-right="false" :nav-list="navList"></Nav>
......@@ -63,7 +63,7 @@ export default {
async asyncData({$axios, params}) {
//获取他人的资料
let infoResponse = await $axios.$get(config.api.get.User.otherInfo + params.id + '/baseinfo');
return { ...infoResponse.data }
return { ...infoResponse.data,userInfo:infoResponse.data }
},
data() {
return {
......@@ -157,7 +157,6 @@ export default {
size: 10
}
}).then((response) => {
console.log(response);
this.handleResponse(currentPage,response)
})
},
......@@ -174,7 +173,6 @@ export default {
size:10
}
}).then((response)=>{
console.log(response);
this.handleResponse(currentPage,response)
})
......@@ -192,7 +190,6 @@ export default {
size:10
}
}).then((response)=>{
console.log(response);
this.handleResponse(currentPage,response)
})
......@@ -209,7 +206,6 @@ export default {
size: 10
}
}).then((response) => {
console.log(response);
this.handleResponse(currentPage,response)
})
......@@ -227,7 +223,6 @@ export default {
size: 10
}
}).then((response) => {
console.log(response);
this.handleResponse(currentPage,response)
})
},
......@@ -239,7 +234,6 @@ export default {
size:10
}
}).then((response)=>{
console.log(response);
this.handleResponse(currentPage,response)
})
},
......@@ -255,7 +249,6 @@ export default {
}
}).then((response)=>{
if(response.code===0){
console.log(response);
this.handleResponse(currentPage,response)
}
})
......@@ -272,7 +265,6 @@ export default {
}
}).then((response)=>{
if(response.code===0){
console.log(response);
this.handleResponse(currentPage,response)
}
})
......
......@@ -9,6 +9,7 @@
:width-v="153"
:ske-w="153"
:ske-h="36"
v-tap="()=>changeRoute1('/')"
:src="Logo">
</yun-img>
<yun-div :font-style="[28,37,500,'#333','left']" v-tap="toRegister">注册</yun-div>
......@@ -172,9 +173,15 @@ export default {
opacity: 0.2,
isPassword: true,
timing: '发送验证码',
inputKey: 'passwordLogin'
inputKey: 'passwordLogin',
from:'/'
}
},
beforeRouteEnter(to, from, next) {
next(vm => {
vm.from = from.fullPath
});
},
computed: {
isClick: function () {
if (this.account !== '' && (this.password !== '' || this.VerificationCode !== '')) {
......
......@@ -9,6 +9,7 @@
:width-v="153"
:ske-w="153"
:ske-h="36"
v-tap="()=>changeRoute1('/')"
:src="Logo">
</yun-img>
<yun-div :font-style="[28,37,500,'#333','left']" v-tap="toLogin">登录</yun-div>
......
......@@ -9,6 +9,7 @@
:width-v="153"
:ske-w="153"
:ske-h="36"
v-tap="()=>changeRoute1('/')"
:src="Logo">
</yun-img>
<yun-div :font-style="[28,37,500,'#333','left']" v-tap="toRegister">注册</yun-div>
......
......@@ -20,7 +20,7 @@ Vue.prototype.$message = Toast
Vue.prototype.$messageBox = YunDialog
Vue.use(YunAdaptableCon)
// Vue.use(vConsole)
Vue.use(vConsole)
Vue.use(AutoTextarea)
Vue.use(Indicator)
Vue.use(YunDialog)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment