提交 2efef477 authored 作者: 王鹏飞's avatar 王鹏飞

dev-build

上级 02f511b8
NODE_ENV=production NODE_ENV=production
VUE_APP_LOGIN_API=https://e-learning3.ezijing.com VUE_APP_LOGIN_API=https://e-learning3.ezijing.com
VUE_APP_BASE_API=https://alumni-api.ezijing.com VUE_APP_BASE_API=https://alumni-api2.ezijing.com
...@@ -13,12 +13,12 @@ ...@@ -13,12 +13,12 @@
"core-js": "^3.6.4", "core-js": "^3.6.4",
"dayjs": "^1.8.23", "dayjs": "^1.8.23",
"md5": "^2.2.1", "md5": "^2.2.1",
"qs": "^6.9.1", "qs": "^6.9.3",
"timeago.js": "^4.0.2", "timeago.js": "^4.0.2",
"vant": "^2.5.5", "vant": "^2.5.8",
"vue": "^2.6.11", "vue": "^2.6.11",
"vue-meta": "^2.3.3", "vue-meta": "^2.3.3",
"vue-router": "^3.1.5" "vue-router": "^3.1.6"
}, },
"devDependencies": { "devDependencies": {
"@vue/cli-plugin-babel": "~4.2.0", "@vue/cli-plugin-babel": "~4.2.0",
......
...@@ -3,7 +3,7 @@ import httpRequest from '@/utils/axios' ...@@ -3,7 +3,7 @@ import httpRequest from '@/utils/axios'
// 上传文件 // 上传文件
export function upload(data) { export function upload(data) {
return httpRequest({ return httpRequest({
url: '/v1/activities/tools/upload', url: '/v1/activities/tool/upload-file',
method: 'post', method: 'post',
headers: { headers: {
'Content-Type': 'multipart/form-data' 'Content-Type': 'multipart/form-data'
...@@ -64,3 +64,73 @@ export function createActivity(data) { ...@@ -64,3 +64,73 @@ export function createActivity(data) {
data data
}) })
} }
// 修改活动
export function updateActivity(id, data) {
return httpRequest({
url: `/v1/activities/${id}`,
method: 'post',
data
})
}
// 删除活动
export function deleteActivity(id) {
return httpRequest({
url: `/v1/activities/${id}`,
method: 'delete'
})
}
// 获取活动评论列表
export function getCommentList(id) {
return httpRequest({
url: `/v1/activities/${id}/replies`,
method: 'get'
})
}
// 添加评论
export function addComment(id, data) {
return httpRequest({
url: `/v1/activities/${id}/reply`,
method: 'post',
data
})
}
// 添加回复
export function addCommentReplay(id, data) {
return httpRequest({
url: `/v1/activities/${id}/comment`,
method: 'post',
data
})
}
// 点赞
export function addCommentLike(id, data) {
return httpRequest({
url: `/v1/activities/${id}/like`,
method: 'post',
data
})
}
// 取消点赞
export function removeCommentLike(id, data) {
return httpRequest({
url: `/v1/activities/${id}/unlike`,
method: 'post',
data
})
}
// 删除评论
export function deleteComment(id, data) {
return httpRequest({
url: `/v1/activities/${id}/unlike`,
method: 'post',
data
})
}
src/assets/img/login_bg.png

57.5 KB | W: | H:

src/assets/img/login_bg.png

34.3 KB | W: | H:

src/assets/img/login_bg.png
src/assets/img/login_bg.png
src/assets/img/login_bg.png
src/assets/img/login_bg.png
  • 2-up
  • Swipe
  • Onion skin
<template>
<div class="card">
<div class="card-hd">
<div class="card-hd__pic"><img :src="data.replier.avatar" /></div>
<div class="card-hd__content">
<div class="card-hd__user">
<p>{{ data.replier.nickname }}</p>
<p>{{ data.created_time }}</p>
</div>
<div class="card-hd__tool">
<div class="card-hd__like" @click="toggleLike">
{{ data.like_count }}
</div>
<div class="card-hd__menu" @click="showMenu"></div>
</div>
</div>
</div>
<div class="card-bd">
<p>{{ data.reply_contents }}</p>
</div>
<div class="card-ft" v-if="data.comments.length">
<div class="replay">
<template v-for="(item, index) in data.comments">
<div class="replay-item" :key="item.id" v-if="index < 1">
<span class="replay-item__name">{{ item.user.nickname }}</span>
<p class="replay-item__content">{{ item.comments }}</p>
</div>
</template>
<div class="replay-more">查看全部{{ data.comments.length }}条评论</div>
</div>
</div>
<van-popup v-model="show" position="bottom">
<div class="comment-popup">
<div class="comment-popup__menu">
<ul>
<li>回复</li>
<li>删除</li>
</ul>
</div>
<div class="comment-popup__cancel">取消</div>
</div>
</van-popup>
</div>
</template>
<script>
export default {
name: 'commentCard',
props: {
data: Object
},
data() {
return {
show: false
}
},
methods: {
toggleLike() {},
showMenu() {
this.show = true
}
}
}
</script>
<style lang="scss" scoped>
.card {
padding: 20px 0;
border-bottom: 1px solid #f5f5f5;
}
.card-hd {
display: flex;
}
.card-hd__pic {
width: 40px;
height: 40px;
border-radius: 50%;
background-color: #ccc;
overflow: hidden;
img {
width: 100%;
height: 100%;
}
}
.card-hd__content {
flex: 1;
display: flex;
align-items: center;
margin-left: 10px;
}
.card-hd__user {
flex: 1;
font-size: 12px;
line-height: 20px;
color: #999;
}
.card-hd__tool {
display: flex;
}
.card-hd__like {
padding-right: 20px;
height: 20px;
line-height: 24px;
color: #333;
background: url('~@/assets/img/icon_like.png') no-repeat right center;
background-size: 16px;
cursor: pointer;
}
.card-hd__like.is-active {
color: #ab2824;
background: url('~@/assets/img/icon_liked.png') no-repeat right center;
background-size: 16px;
}
.card-hd__menu {
width: 20px;
height: 20px;
margin-left: 20px;
background: url('~@/assets/img/icon_menu_dot.png') no-repeat center center;
background-size: 18px;
cursor: pointer;
}
.card-bd {
margin-left: 50px;
padding-top: 20px;
}
.card-ft {
margin-left: 50px;
margin-top: 20px;
padding: 10px;
background-color: #f5f5f5;
border-radius: 10px;
}
.replay-item {
line-height: 24px;
}
.replay-item__name {
color: #1989fa;
}
.replay-item__content {
display: inline;
color: #333;
}
.replay-more {
margin-top: 10px;
color: #1989fa;
}
.comment-popup {
padding: 0 20px;
}
.comment-popup__menu {
li {
line-height: 50px;
border-bottom: 1px solid #f5f5f5;
}
}
.comment-popup__cancel {
line-height: 50px;
text-align: center;
color: #999;
}
</style>
<template>
<div class="comment">
<div class="comment-hd">
<h2>热门评论({{ list.length }}</h2>
</div>
<div class="comment-bd">
<template v-if="list.length">
<comment-card
v-for="item in list"
:data="item"
:key="item.id"
></comment-card>
</template>
<p class="tips" v-else>暂无内容</p>
</div>
<div class="fix-comment">
<div class="inner">
<input
type="text"
class="input-comment"
placeholder="添加回复"
disabled
/>
</div>
</div>
</div>
</template>
<script>
import CommentCard from './CommentCard'
import * as api from '@/api/index'
export default {
components: { CommentCard },
props: {
id: String
},
data() {
return { list: [] }
},
methods: {
getList() {
api.getCommentList(this.id).then(response => {
this.list = response
})
},
// 点赞
onLike() {
api.addCommentLike(response => {
this.$toast(response.message)
})
},
// 取消点赞
onUnlike() {
api.removeCommentLike(response => {
this.$toast(response.message)
})
}
},
beforeMount() {
this.getList()
}
}
</script>
<style lang="scss" scoped>
.comment {
margin-top: 20px;
border-top: 1px solid #f5f5f5;
}
.comment-hd {
padding-top: 10px;
font-size: 15px;
}
.comment-bd {
padding-bottom: 20px;
}
.tips {
padding: 40px 0;
color: #999;
text-align: center;
}
.fix-comment {
height: 50px;
.inner {
position: fixed;
left: 0;
right: 0;
bottom: 0;
padding: 10px 20px;
max-width: 750px;
margin: 0 auto;
background: #f5f5f5;
box-shadow: 0px -8px 15px 0px rgba(0, 0, 0, 0.05);
z-index: 1000;
}
.input-comment {
width: 100%;
height: 100%;
min-height: 30px;
padding: 0 10px;
background-color: #fff;
cursor: pointer;
}
}
</style>
...@@ -54,3 +54,13 @@ export default { ...@@ -54,3 +54,13 @@ export default {
} }
} }
</script> </script>
<style lang="scss" scoped>
.van-button {
height: 40px;
line-height: 38px;
}
.van-button--default {
border-color: #999;
}
</style>
...@@ -48,6 +48,9 @@ export default { ...@@ -48,6 +48,9 @@ export default {
} }
.card-main { .card-main {
flex: 1; flex: 1;
display: flex;
flex-direction: column;
justify-content: space-between;
overflow: hidden; overflow: hidden;
} }
.card-publish { .card-publish {
...@@ -86,5 +89,11 @@ export default { ...@@ -86,5 +89,11 @@ export default {
width: 138px; width: 138px;
height: 78px; height: 78px;
margin-left: 10px; margin-left: 10px;
overflow: hidden;
img {
width: 100%;
height: 100%;
object-fit: cover;
}
} }
</style> </style>
...@@ -6,19 +6,31 @@ ...@@ -6,19 +6,31 @@
<span class="status">已报名</span> <span class="status">已报名</span>
</div> </div>
</div> </div>
<div class="card-main"> <div class="card-bd">
<div class="p-item"> <template v-if="data.activity_type === '10'">
<div class="p-title">时间:</div> <div class="p-item">
<div class="p-content" style="color:#333;"> <div class="p-title">时间:</div>
{{ data.activity_time }} <div class="p-content" style="color:#333;">
{{ data.activity_time }}
</div>
</div> </div>
</div> <div class="p-item">
<div class="p-item"> <div class="p-title">地点:</div>
<div class="p-title">地点:</div> <div class="p-content">
<div class="p-content"> {{ data.activity_city }}-{{ data.activity_address }}
{{ data.activity_city }}-{{ data.activity_address }} </div>
</div> </div>
</div> </template>
<template v-if="data.activity_type === '20'">
<div class="p-item">
<div class="p-title">类型:</div>
<div class="p-content">{{ demandTypeText }}</div>
</div>
<div class="p-item">
<div class="p-title">内容:</div>
<div class="p-content">{{ data.activity_contents }}</div>
</div>
</template>
<div class="p-item"> <div class="p-item">
<div class="p-title">发起人:</div> <div class="p-title">发起人:</div>
<div class="p-content">{{ data.initiator.nickname }}</div> <div class="p-content">{{ data.initiator.nickname }}</div>
...@@ -31,7 +43,16 @@ ...@@ -31,7 +43,16 @@
export default { export default {
name: 'JoinCard', name: 'JoinCard',
props: { data: Object }, props: { data: Object },
computed: {}, computed: {
demandTypeText() {
const map = {
'10': '行业资讯',
'11': '就业招聘',
'12': '需求对接'
}
return map[this.data.activity_demand_type] || ''
}
},
methods: { methods: {
onClick() { onClick() {
this.$router.push({ name: 'item', params: { id: this.data.id } }) this.$router.push({ name: 'item', params: { id: this.data.id } })
......
<template> <template>
<div class="card" @click="onClick"> <div class="card">
<div class="card-hd"> <div class="card-hd">
<div class="card-title">{{ data.activity_name }}</div> <div class="card-hd__pic"><img :src="data.avatar" /></div>
<div class="card-tools"> <div class="card-hd__content">
<span class="status">已报名</span> <span class="nickname">{{ data.nickname }}</span>
<span :class="genderClass"></span>
</div> </div>
</div> </div>
<div class="card-main"> <div class="card-bd">
<div class="p-item"> <div class="p-item">
<div class="p-title">时间:</div> <div class="p-title">班级:</div>
<div class="p-content" style="color:#333;"> <div class="p-content">{{ data.class_name }}</div>
{{ data.activity_time }}
</div>
</div> </div>
<div class="p-item"> <div class="p-item">
<div class="p-title">地点:</div> <div class="p-title">联系方式:</div>
<div class="p-content"> <div class="p-content">{{ data.contacts }}</div>
{{ data.activity_city }}-{{ data.activity_address }}
</div>
</div> </div>
<div class="p-item"> <div class="p-item">
<div class="p-title">发起人</div> <div class="p-title">自我介绍</div>
<div class="p-content">{{ data.initiator.nickname }}</div> <div class="p-content">{{ data.self_introduction }}</div>
</div> </div>
</div> </div>
</div> </div>
...@@ -31,36 +28,61 @@ ...@@ -31,36 +28,61 @@
export default { export default {
name: 'JoinedCard', name: 'JoinedCard',
props: { data: Object }, props: { data: Object },
computed: {}, computed: {
methods: { genderClass() {
onClick() { return {
this.$router.push({ name: 'item', params: { id: this.data.id } }) gender: true,
'is-male': this.data.gender === '1',
'is-female': this.data.gender === '2'
}
} }
} }
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.card { .card {
margin: 15px 0 20px; margin-bottom: 20px;
padding: 10px 20px 20px; padding: 10px 20px 20px;
background: rgba(255, 255, 255, 1); background: rgba(255, 255, 255, 1);
box-shadow: 0px 3px 15px 0px rgba(0, 0, 0, 0.06); box-shadow: 0px 3px 15px 0px rgba(0, 0, 0, 0.06);
} }
.card-hd { .card-hd {
display: flex; display: flex;
align-items: center;
} }
.card-title { .card-hd__pic {
flex: 1; width: 40px;
font-size: 15px; height: 40px;
color: #333; border-radius: 50%;
overflow: hidden;
background-color: #bfbfbf;
} }
.card-tools { .card-hd__content {
padding-left: 10px; padding-left: 10px;
.status { display: flex;
font-size: 15px; align-items: center;
color: #67c23a; .nickname {
color: #999;
}
.gender {
display: inline-block;
margin-left: 5px;
width: 15px;
height: 15px;
} }
} }
.is-male {
background: url('~@/assets/img/icon_male.png') no-repeat center;
background-size: contain;
}
.is-female {
background: url('~@/assets/img/icon_female.png') no-repeat center;
background-size: contain;
}
.card-bd {
padding-left: 50px;
margin-top: 10px;
}
.p-item { .p-item {
margin-top: 10px; margin-top: 10px;
display: flex; display: flex;
...@@ -71,6 +93,6 @@ export default { ...@@ -71,6 +93,6 @@ export default {
} }
.p-content { .p-content {
font-size: 12px; font-size: 12px;
color: #999; color: #333;
} }
</style> </style>
...@@ -8,29 +8,47 @@ ...@@ -8,29 +8,47 @@
</span> </span>
</div> </div>
</div> </div>
<div class="card-main"> <div class="card-bd">
<div class="p-item"> <div class="card-main">
<div class="p-title">时间:</div> <template v-if="data.activity_type === '10'">
<div class="p-content" style="color:#333;"> <div class="p-item">
{{ data.activity_time }} <div class="p-title">时间:</div>
<div class="p-content" style="color:#333;">
{{ data.activity_time }}
</div>
</div>
<div class="p-item">
<div class="p-title">地点:</div>
<div class="p-content">
{{ data.activity_city }}-{{ data.activity_address }}
</div>
</div>
</template>
<template v-if="data.activity_type === '20'">
<div class="p-item">
<div class="p-title">类型:</div>
<div class="p-content">{{ demandTypeText }}</div>
</div>
<div class="p-item">
<div class="p-title">内容:</div>
<div class="p-content">{{ data.activity_contents }}</div>
</div>
</template>
<div class="p-item">
<div class="p-title">发起人:</div>
<div class="p-content">{{ data.initiator.nickname }}</div>
</div> </div>
</div> <div class="p-item" v-if="data.approve_remark">
<div class="p-item"> <div class="p-title">备注:</div>
<div class="p-title">地点:</div> <div class="p-content is-red">{{ data.approve_remark }}</div>
<div class="p-content">
{{ data.activity_city }}-{{ data.activity_address }}
</div> </div>
</div> </div>
<div class="p-item"> <div class="card-aside" v-if="!isPass">
<div class="p-title">发起人:</div> <div class="card-button" @click.stop="onEdit">编辑</div>
<div class="p-content">{{ data.initiator.nickname }}</div> <div class="card-button" @click.stop="onRemove">删除</div>
</div>
<div class="p-item" v-if="data.approve_remark">
<div class="p-title">备注:</div>
<div class="p-content is-red">{{ data.approve_remark }}</div>
</div> </div>
</div> </div>
<div class="card-ft" v-if="data.participant_count"> <div class="card-ft" v-if="hasJoined">
<div class="join-button" @click.stop="toJoinPage"> <div class="join-button" @click.stop="toJoinPage">
{{ data.participant_count }}人已报名,去查看 {{ data.participant_count }}人已报名,去查看
</div> </div>
...@@ -51,8 +69,19 @@ export default { ...@@ -51,8 +69,19 @@ export default {
} }
return map[this.data.approve_status] return map[this.data.approve_status]
}, },
demandTypeText() {
const map = {
'10': '行业资讯',
'11': '就业招聘',
'12': '需求对接'
}
return map[this.data.activity_demand_type] || ''
},
isPass() { isPass() {
return this.data.approve_status === '1' return this.data.approve_status === '1'
},
hasJoined() {
return parseInt(this.data.participant_count) > 0
} }
}, },
methods: { methods: {
...@@ -60,7 +89,13 @@ export default { ...@@ -60,7 +89,13 @@ export default {
this.$router.push({ name: 'item', params: { id: this.data.id } }) this.$router.push({ name: 'item', params: { id: this.data.id } })
}, },
toJoinPage() { toJoinPage() {
this.$router.push({ name: 'create', params: { id: this.data.id } }) this.$router.push({ name: 'joined', params: { id: this.data.id } })
},
onEdit() {
this.$router.push({ name: 'edit', params: { id: this.data.id } })
},
onRemove() {
this.$emit('remove', this.data)
} }
} }
} }
...@@ -87,6 +122,13 @@ export default { ...@@ -87,6 +122,13 @@ export default {
color: #999; color: #999;
} }
} }
.card-bd {
display: flex;
align-items: flex-end;
}
.card-main {
flex: 1;
}
.p-item { .p-item {
margin-top: 10px; margin-top: 10px;
display: flex; display: flex;
...@@ -106,7 +148,7 @@ export default { ...@@ -106,7 +148,7 @@ export default {
color: #67c23a !important; color: #67c23a !important;
} }
.card-ft { .card-ft {
margin: 10px -30px -20px; margin: 10px -20px -20px;
padding: 10px 20px; padding: 10px 20px;
text-align: right; text-align: right;
border-top: 1px solid #f5f5f5; border-top: 1px solid #f5f5f5;
...@@ -121,4 +163,24 @@ export default { ...@@ -121,4 +163,24 @@ export default {
cursor: pointer; cursor: pointer;
} }
} }
.card-aside {
width: 60px;
margin-left: 20px;
}
.card-button {
margin-top: 10px;
width: 60px;
height: 25px;
font-size: 12px;
line-height: 25px;
text-align: center;
color: #999;
border-radius: 5px;
border: 1px solid rgba(153, 153, 153, 1);
cursor: pointer;
&:first-child {
margin-top: 0;
}
}
</style> </style>
...@@ -53,7 +53,8 @@ export default { ...@@ -53,7 +53,8 @@ export default {
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
::v-deep .van-uploader__upload { ::v-deep .van-uploader__upload,
::v-deep .van-uploader__preview-image {
width: 150px; width: 150px;
height: 80px; height: 80px;
background-color: #e0e0e0; background-color: #e0e0e0;
......
...@@ -14,12 +14,12 @@ Vue.use(Notify) ...@@ -14,12 +14,12 @@ Vue.use(Notify)
import { Dialog } from 'vant' import { Dialog } from 'vant'
Vue.use(Dialog) Vue.use(Dialog)
import { Toast } from 'vant'
Vue.use(Toast)
import { Popup } from 'vant' import { Popup } from 'vant'
Vue.use(Popup) Vue.use(Popup)
import { Overlay } from 'vant'
Vue.use(Overlay)
import { Tab, Tabs } from 'vant' import { Tab, Tabs } from 'vant'
Vue.use(Tab) Vue.use(Tab)
Vue.use(Tabs) Vue.use(Tabs)
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
<v-form ref="form" :fields="page.form.fields" @submit="onSubmit"></v-form> <v-form ref="form" :fields="page.form.fields" @submit="onSubmit"></v-form>
<div class="fixed-box"> <div class="fixed-box">
<div class="fixed-inner"> <div class="fixed-inner">
<div class="fixed-button" @click="handleSubmit">发布</div> <div class="fixed-button" @click="handleSubmit">提交</div>
</div> </div>
</div> </div>
</div> </div>
...@@ -78,15 +78,15 @@ const pages = { ...@@ -78,15 +78,15 @@ const pages = {
fields: [ fields: [
{ {
fieldType: 'select', fieldType: 'select',
name: 'type', name: 'activity_demand_type',
label: '类型', label: '类型',
required: true, required: true,
placeholder: '请选择需求类型', placeholder: '请选择需求类型',
rules: [{ required: true, message: '请选择需求类型' }], rules: [{ required: true, message: '请选择需求类型' }],
values: [ values: [
{ name: '0', text: '行业资讯' }, { name: '10', text: '行业资讯' },
{ name: '1', text: '就业招聘' }, { name: '11', text: '就业招聘' },
{ name: '2', text: '需求对接' } { name: '12', text: '需求对接' }
], ],
valueKey: 'name' valueKey: 'name'
}, },
...@@ -134,15 +134,27 @@ export default { ...@@ -134,15 +134,27 @@ export default {
handleSubmit() { handleSubmit() {
this.$refs.form.submit() this.$refs.form.submit()
}, },
onSubmit() { onSubmit(data) {
let data = this.$refs.form.ruleForm const ruleForm = this.$refs.form.ruleForm
if (data.activity_image) {
const [first = { url: '' }] = data.activity_image
data.activity_image = first.url
}
data.activity_type = this.publishType data.activity_type = this.publishType
api.createActivity(data).then(() => { data.activity_demand_type = ruleForm.activity_demand_type || 0
this.$dialog api.createActivity(data).then(response => {
.alert({ confirmButtonText: '确定', message: '提交成功' }) if (response.success) {
.then(() => { this.$dialog
this.$router.push({ name: 'index', query: this.$route.query }) .alert({
}) confirmButtonText: '确定',
message: '提交成功,可在“我发起的”里查看审核结果'
})
.then(() => {
this.$router.push({ name: 'index', query: { tab: '2' } })
})
} else {
this.$toast(response.message)
}
}) })
} }
} }
......
...@@ -83,15 +83,15 @@ const pages = { ...@@ -83,15 +83,15 @@ const pages = {
fields: [ fields: [
{ {
fieldType: 'select', fieldType: 'select',
name: 'type', name: 'activity_demand_type',
label: '类型', label: '类型',
required: true, required: true,
placeholder: '请选择需求类型', placeholder: '请选择需求类型',
rules: [{ required: true, message: '请选择需求类型' }], rules: [{ required: true, message: '请选择需求类型' }],
values: [ values: [
{ name: '0', text: '行业资讯' }, { name: '10', text: '行业资讯' },
{ name: '1', text: '就业招聘' }, { name: '11', text: '就业招聘' },
{ name: '2', text: '需求对接' } { name: '12', text: '需求对接' }
], ],
valueKey: 'name' valueKey: 'name'
}, },
...@@ -117,7 +117,7 @@ const pages = { ...@@ -117,7 +117,7 @@ const pages = {
} }
export default { export default {
name: 'Create', name: 'Edit',
components: { VForm }, components: { VForm },
metaInfo() { metaInfo() {
return { return {
...@@ -144,15 +144,27 @@ export default { ...@@ -144,15 +144,27 @@ export default {
handleSubmit() { handleSubmit() {
this.$refs.form.submit() this.$refs.form.submit()
}, },
onSubmit() { onSubmit(data) {
let data = this.$refs.form.ruleForm const ruleForm = this.$refs.form.ruleForm
if (data.activity_image) {
const [first = { url: '' }] = data.activity_image
data.activity_image = first.url
}
data.activity_type = this.publishType data.activity_type = this.publishType
api.createActivity(data).then(() => { data.activity_demand_type = ruleForm.activity_demand_type || 0
this.$dialog api.updateActivity(this.pid, data).then(response => {
.alert({ confirmButtonText: '确定', message: '提交成功' }) if (response.success) {
.then(() => { this.$dialog
this.$router.push({ name: 'index', query: this.$route.query }) .alert({
}) confirmButtonText: '确定',
message: '提交成功,可在“我发起的”里查看审核结果'
})
.then(() => {
this.$router.push({ name: 'index', query: { tab: '2' } })
})
} else {
this.$toast(response.message)
}
}) })
}, },
getDetail() { getDetail() {
...@@ -161,11 +173,17 @@ export default { ...@@ -161,11 +173,17 @@ export default {
forbidClick: true, forbidClick: true,
duration: 0 duration: 0
}) })
api.getActivity(this.pid).then(response => { api
this.formModel = response.form .getActivity(this.pid)
toast.clear() .then(response => {
}) this.formModel = response
toast.clear()
})
.catch(toast.clear)
} }
},
beforeMount() {
this.getDetail()
} }
} }
</script> </script>
......
...@@ -3,7 +3,6 @@ ...@@ -3,7 +3,6 @@
<van-list <van-list
v-model="loading" v-model="loading"
:finished="finished" :finished="finished"
finished-text="没有更多了"
@load="onLoad" @load="onLoad"
v-if="list.length" v-if="list.length"
> >
...@@ -44,7 +43,7 @@ export default { ...@@ -44,7 +43,7 @@ export default {
}) })
}, },
onLoad() { onLoad() {
this.page.offset++ this.page.offset = this.page.offset + this.page.limit
this.getList() this.getList()
} }
}, },
......
<template> <template>
<div class="list"> <div class="main-list">
<van-tabs v-model="tabActive"> <van-tabs v-model="tabActive" sticky>
<van-tab title="热门推荐" name="0"> <van-tab title="热门推荐" name="0">
<hot-list /> <hot-list />
</van-tab> </van-tab>
...@@ -22,6 +22,7 @@ ...@@ -22,6 +22,7 @@
<img src="~@/assets/img/icon_publish2.png" />发布需求 <img src="~@/assets/img/icon_publish2.png" />发布需求
</li> </li>
</ul> </ul>
<div class="icon-close" @click="publishVisible = false"></div>
</div> </div>
</van-popup> </van-popup>
</div> </div>
...@@ -39,18 +40,7 @@ export default { ...@@ -39,18 +40,7 @@ export default {
data() { data() {
return { return {
tabActive: '0', tabActive: '0',
publishVisible: false, publishVisible: false
list: [
{
id: '0',
title: '紫荆-索菲亚上海校友会 || 齐聚南京,体验数字化魅力',
time: '2020.02.10',
user: '王鹏飞',
time2: '2020.02.10'
}
],
loading: false,
finished: true
} }
}, },
watch: { watch: {
...@@ -63,9 +53,8 @@ export default { ...@@ -63,9 +53,8 @@ export default {
} }
}, },
methods: { methods: {
getList() {}, onTabClick(name) {
onLoad() { this.$router.push({ query: { tab: name } })
this.getList()
}, },
toCreatePage(type) { toCreatePage(type) {
this.$router.push({ name: 'create', query: { publish_type: type } }) this.$router.push({ name: 'create', query: { publish_type: type } })
...@@ -74,8 +63,9 @@ export default { ...@@ -74,8 +63,9 @@ export default {
} }
</script> </script>
<style lang="scss"> <style lang="scss" scoped>
.list { .main-list {
padding-bottom: 100px;
} }
.publish-button { .publish-button {
position: fixed; position: fixed;
...@@ -106,4 +96,17 @@ export default { ...@@ -106,4 +96,17 @@ export default {
width: 100%; width: 100%;
} }
} }
.icon-close {
width: 15px;
height: 15px;
margin: 40px auto 0;
background: url('~@/assets/img/icon_close.png') no-repeat center center;
background-size: contain;
}
::v-deep .van-tab--active {
color: #f38580;
}
::v-deep .van-tabs__line {
background-color: #f38580;
}
</style> </style>
...@@ -13,10 +13,12 @@ ...@@ -13,10 +13,12 @@
<p>{{ detail.initiator.nickname }}</p> <p>{{ detail.initiator.nickname }}</p>
<p>{{ datetimeText }}</p> <p>{{ datetimeText }}</p>
</div> </div>
<div class="detail-user__tool"> <div class="detail-user__tool" v-if="isPass">
<span class="join-button" v-if="detail.has_joined">已报名</span>
<span <span
class="join-button" class="join-button"
@click="$router.push({ name: 'join', params: { id: pid } })" @click="$router.push({ name: 'join', params: { id: pid } })"
v-else
>报名</span >报名</span
> >
</div> </div>
...@@ -26,9 +28,7 @@ ...@@ -26,9 +28,7 @@
<h1>{{ detail.activity_name }}</h1> <h1>{{ detail.activity_name }}</h1>
</div> </div>
<!-- 内容 --> <!-- 内容 -->
<div class="detail-content"> <div class="detail-content" v-html="contentHtml"></div>
<p>{{ detail.activity_contents }}</p>
</div>
<div class="detail-form"> <div class="detail-form">
<div class="detail-form__item" v-if="detail.activity_time"> <div class="detail-form__item" v-if="detail.activity_time">
<div class="detail-form__label"> <div class="detail-form__label">
...@@ -55,21 +55,27 @@ ...@@ -55,21 +55,27 @@
</div> </div>
</div> </div>
<!-- 评论 --> <!-- 评论 -->
<div class="detail-comments"></div> <div class="detail-comments">
<comment-list :id="pid"></comment-list>
</div>
</div> </div>
</template> </template>
<script> <script>
import CommentList from '@/components/CommentList'
import * as api from '@/api/index' import * as api from '@/api/index'
import { format } from 'timeago.js' import { format } from 'timeago.js'
export default { export default {
components: { CommentList },
metaInfo: { metaInfo: {
title: '紫荆校友圈' title: '紫荆校友圈'
}, },
data() { data() {
return { return {
detail: {} detail: {
activity_contents: ''
}
} }
}, },
computed: { computed: {
...@@ -78,13 +84,29 @@ export default { ...@@ -78,13 +84,29 @@ export default {
}, },
datetimeText() { datetimeText() {
return format(this.detail.created_time, 'zh_CN') return format(this.detail.created_time, 'zh_CN')
},
isPass() {
return this.detail.approve_status === '1'
},
contentHtml() {
const content = this.detail.activity_contents || ''
return content.replace(/\r\n|\n/gi, '<br />')
} }
}, },
methods: { methods: {
getDetail() { getDetail() {
api.getActivity(this.pid).then(response => { const toast = this.$toast.loading({
console.log(response) message: '加载中...',
forbidClick: true,
duration: 0
}) })
api
.getActivity(this.pid)
.then(response => {
this.detail = response
toast.clear()
})
.catch(toast.clear)
} }
}, },
beforeMount() { beforeMount() {
...@@ -108,7 +130,6 @@ export default { ...@@ -108,7 +130,6 @@ export default {
.detail-user { .detail-user {
display: flex; display: flex;
align-items: center; align-items: center;
margin-top: 20px;
} }
.detail-user__pic { .detail-user__pic {
width: 40px; width: 40px;
...@@ -116,6 +137,10 @@ export default { ...@@ -116,6 +137,10 @@ export default {
background-color: #ccc; background-color: #ccc;
border-radius: 50%; border-radius: 50%;
overflow: hidden; overflow: hidden;
img {
width: 100%;
height: 100%;
}
} }
.detail-user__content { .detail-user__content {
flex: 1; flex: 1;
...@@ -149,6 +174,9 @@ export default { ...@@ -149,6 +174,9 @@ export default {
} }
.detail-content { .detail-content {
margin-top: 20px; margin-top: 20px;
font-size: 15px;
color: #666;
line-height: 30px;
p { p {
font-size: 15px; font-size: 15px;
color: #666; color: #666;
......
...@@ -85,15 +85,19 @@ export default { ...@@ -85,15 +85,19 @@ export default {
}, },
onSubmit(data) { onSubmit(data) {
data.activity_id = this.pid data.activity_id = this.pid
api.joinActivity(data).then(() => { api.joinActivity(data).then(response => {
this.$dialog if (response.success) {
.alert({ this.$dialog
confirmButtonText: '确定', .alert({
message: '提交成功,可在“我参与的”里查看申请记录' confirmButtonText: '确定',
}) message: '提交成功,可在“我参与的”里查看申请记录'
.then(() => { })
this.$router.push({ name: 'index', query: { tab: '2' } }) .then(() => {
}) this.$router.push({ name: 'index', query: { tab: '1' } })
})
} else {
this.$toast(response.message)
}
}) })
} }
} }
......
...@@ -3,7 +3,6 @@ ...@@ -3,7 +3,6 @@
<van-list <van-list
v-model="loading" v-model="loading"
:finished="finished" :finished="finished"
finished-text="没有更多了"
@load="onLoad" @load="onLoad"
v-if="list.length" v-if="list.length"
> >
...@@ -44,7 +43,7 @@ export default { ...@@ -44,7 +43,7 @@ export default {
}) })
}, },
onLoad() { onLoad() {
this.page.offset++ this.page.offset = this.page.offset + this.page.limit
this.getList() this.getList()
} }
}, },
......
<template> <template>
<div class="main"></div> <div class="main">
<joined-card
v-for="(item, index) in detail.participant_list"
:data="item"
:key="index"
></joined-card>
</div>
</template> </template>
<script> <script>
import * as api from '@/api/index'
import JoinedCard from '@/components/JoinedCard'
export default { export default {
components: { JoinedCard },
metaInfo: { metaInfo: {
title: '查看已报名' title: '查看已报名'
}, },
data() { data() {
return {} return {
detail: {
participant_list: []
}
}
}, },
computed: { computed: {
pid() { pid() {
return this.$route.params.id return this.$route.params.id
} }
},
methods: {
getDetail() {
api.getActivity(this.pid).then(response => {
this.detail = response
})
}
},
beforeMount() {
this.getDetail()
} }
} }
</script> </script>
......
...@@ -3,7 +3,6 @@ ...@@ -3,7 +3,6 @@
<van-list <van-list
v-model="loading" v-model="loading"
:finished="finished" :finished="finished"
finished-text="没有更多了"
@load="onLoad" @load="onLoad"
v-if="list.length" v-if="list.length"
> >
...@@ -11,6 +10,7 @@ ...@@ -11,6 +10,7 @@
v-for="item in list" v-for="item in list"
:data="item" :data="item"
:key="item.id" :key="item.id"
@remove="onRemove"
></publish-card> ></publish-card>
</van-list> </van-list>
<div class="empty" v-else>您还没有发起过活动哟</div> <div class="empty" v-else>您还没有发起过活动哟</div>
...@@ -48,8 +48,28 @@ export default { ...@@ -48,8 +48,28 @@ export default {
}) })
}, },
onLoad() { onLoad() {
this.page.offset++ this.page.offset = this.page.offset + this.page.limit
this.getList() this.getList()
},
onRemove(data) {
this.$dialog
.confirm({
confirmButtonText: '确定',
message: '确定要删除吗?'
})
.then(() => {
api.deleteActivity(data.id).then(response => {
if (response.success) {
this.$toast('删除成功')
this.list = this.list.filter(item => item.id !== data.id)
} else {
this.$toast(response.message)
}
})
})
.catch(() => {
// on cancel
})
} }
}, },
beforeMount() { beforeMount() {
......
...@@ -6,7 +6,7 @@ module.exports = { ...@@ -6,7 +6,7 @@ module.exports = {
target: 'https://e-learning3.ezijing.com' target: 'https://e-learning3.ezijing.com'
}, },
'/v1': { '/v1': {
target: 'https://alumni-api.ezijing.com' target: 'https://alumni-api2.ezijing.com'
} }
} }
} }
......
...@@ -6513,10 +6513,10 @@ qs@6.7.0: ...@@ -6513,10 +6513,10 @@ qs@6.7.0:
resolved "https://registry.npm.taobao.org/qs/download/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" resolved "https://registry.npm.taobao.org/qs/download/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc"
integrity sha1-QdwaAV49WB8WIXdr4xr7KHapsbw= integrity sha1-QdwaAV49WB8WIXdr4xr7KHapsbw=
qs@^6.9.1: qs@^6.9.3:
version "6.9.1" version "6.9.3"
resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.1.tgz#20082c65cb78223635ab1a9eaca8875a29bf8ec9" resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.3.tgz#bfadcd296c2d549f1dffa560619132c977f5008e"
integrity sha512-Cxm7/SS/y/Z3MHWSxXb8lIFqgqBowP5JMlTUFyJN88y0SGQhVmZnqFK/PeuMX9LzUyWsqqhNxIyg0jlzq946yA== integrity sha512-EbZYNarm6138UKKq46tdx08Yo/q9ZhFoAXAI1meAFd2GtbRDhbZY2WQSICskT0c5q99aFzLG1D4nvTk9tqfXIw==
qs@~6.5.2: qs@~6.5.2:
version "6.5.2" version "6.5.2"
...@@ -8016,10 +8016,10 @@ validate-npm-package-license@^3.0.1: ...@@ -8016,10 +8016,10 @@ validate-npm-package-license@^3.0.1:
spdx-correct "^3.0.0" spdx-correct "^3.0.0"
spdx-expression-parse "^3.0.0" spdx-expression-parse "^3.0.0"
vant@^2.5.5: vant@^2.5.8:
version "2.5.5" version "2.5.8"
resolved "https://registry.yarnpkg.com/vant/-/vant-2.5.5.tgz#4484e4224127a88a47147b35ab52a91bacc2e939" resolved "https://registry.yarnpkg.com/vant/-/vant-2.5.8.tgz#6f8d30b2f144d81421775c813b088b827cd88a03"
integrity sha512-w7APepClXcEMFJvvYsJkNDWCCb+a5SR9eAMMIYM/1VCwn7r7AxoAtJSCaZsmw3vhSxnMSnM/+Ftz7t3o0eoK4Q== integrity sha512-6g1TRywIA0c6vP9A3tQpXpKUeSJmf88H1SmXPC+gbj+HHQuSEdmvJi9qAN4ezBzpUGe/ljTLg0Q+MCLGcvfbzA==
dependencies: dependencies:
"@babel/runtime" "7.x" "@babel/runtime" "7.x"
"@vant/icons" "1.2.1" "@vant/icons" "1.2.1"
...@@ -8090,10 +8090,10 @@ vue-meta@^2.3.3: ...@@ -8090,10 +8090,10 @@ vue-meta@^2.3.3:
dependencies: dependencies:
deepmerge "^4.2.2" deepmerge "^4.2.2"
vue-router@^3.1.5: vue-router@^3.1.6:
version "3.1.6" version "3.1.6"
resolved "https://registry.npm.taobao.org/vue-router/download/vue-router-3.1.6.tgz#45f5a3a3843e31702c061dd829393554e4328f89" resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-3.1.6.tgz#45f5a3a3843e31702c061dd829393554e4328f89"
integrity sha1-RfWjo4Q+MXAsBh3YKTk1VOQyj4k= integrity sha512-GYhn2ynaZlysZMkFE5oCHRUTqE8BWs/a9YbKpNLi0i7xD6KG1EzDqpHQmv1F5gXjr8kL5iIVS8EOtRaVUEXTqA==
vue-style-loader@^4.1.0, vue-style-loader@^4.1.2: vue-style-loader@^4.1.0, vue-style-loader@^4.1.2:
version "4.1.2" version "4.1.2"
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论