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

dev-build

上级 02f511b8
NODE_ENV=production
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 @@
"core-js": "^3.6.4",
"dayjs": "^1.8.23",
"md5": "^2.2.1",
"qs": "^6.9.1",
"qs": "^6.9.3",
"timeago.js": "^4.0.2",
"vant": "^2.5.5",
"vant": "^2.5.8",
"vue": "^2.6.11",
"vue-meta": "^2.3.3",
"vue-router": "^3.1.5"
"vue-router": "^3.1.6"
},
"devDependencies": {
"@vue/cli-plugin-babel": "~4.2.0",
......
......@@ -3,7 +3,7 @@ import httpRequest from '@/utils/axios'
// 上传文件
export function upload(data) {
return httpRequest({
url: '/v1/activities/tools/upload',
url: '/v1/activities/tool/upload-file',
method: 'post',
headers: {
'Content-Type': 'multipart/form-data'
......@@ -64,3 +64,73 @@ export function createActivity(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 {
}
}
</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 {
}
.card-main {
flex: 1;
display: flex;
flex-direction: column;
justify-content: space-between;
overflow: hidden;
}
.card-publish {
......@@ -86,5 +89,11 @@ export default {
width: 138px;
height: 78px;
margin-left: 10px;
overflow: hidden;
img {
width: 100%;
height: 100%;
object-fit: cover;
}
}
</style>
......@@ -6,7 +6,8 @@
<span class="status">已报名</span>
</div>
</div>
<div class="card-main">
<div class="card-bd">
<template v-if="data.activity_type === '10'">
<div class="p-item">
<div class="p-title">时间:</div>
<div class="p-content" style="color:#333;">
......@@ -19,6 +20,17 @@
{{ 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>
......@@ -31,7 +43,16 @@
export default {
name: 'JoinCard',
props: { data: Object },
computed: {},
computed: {
demandTypeText() {
const map = {
'10': '行业资讯',
'11': '就业招聘',
'12': '需求对接'
}
return map[this.data.activity_demand_type] || ''
}
},
methods: {
onClick() {
this.$router.push({ name: 'item', params: { id: this.data.id } })
......
<template>
<div class="card" @click="onClick">
<div class="card">
<div class="card-hd">
<div class="card-title">{{ data.activity_name }}</div>
<div class="card-tools">
<span class="status">已报名</span>
<div class="card-hd__pic"><img :src="data.avatar" /></div>
<div class="card-hd__content">
<span class="nickname">{{ data.nickname }}</span>
<span :class="genderClass"></span>
</div>
</div>
<div class="card-main">
<div class="card-bd">
<div class="p-item">
<div class="p-title">时间:</div>
<div class="p-content" style="color:#333;">
{{ data.activity_time }}
</div>
<div class="p-title">班级:</div>
<div class="p-content">{{ data.class_name }}</div>
</div>
<div class="p-item">
<div class="p-title">地点:</div>
<div class="p-content">
{{ data.activity_city }}-{{ data.activity_address }}
</div>
<div class="p-title">联系方式:</div>
<div class="p-content">{{ data.contacts }}</div>
</div>
<div class="p-item">
<div class="p-title">发起人</div>
<div class="p-content">{{ data.initiator.nickname }}</div>
<div class="p-title">自我介绍</div>
<div class="p-content">{{ data.self_introduction }}</div>
</div>
</div>
</div>
......@@ -31,36 +28,61 @@
export default {
name: 'JoinedCard',
props: { data: Object },
computed: {},
methods: {
onClick() {
this.$router.push({ name: 'item', params: { id: this.data.id } })
computed: {
genderClass() {
return {
gender: true,
'is-male': this.data.gender === '1',
'is-female': this.data.gender === '2'
}
}
}
}
</script>
<style lang="scss" scoped>
.card {
margin: 15px 0 20px;
margin-bottom: 20px;
padding: 10px 20px 20px;
background: rgba(255, 255, 255, 1);
box-shadow: 0px 3px 15px 0px rgba(0, 0, 0, 0.06);
}
.card-hd {
display: flex;
align-items: center;
}
.card-title {
flex: 1;
font-size: 15px;
color: #333;
.card-hd__pic {
width: 40px;
height: 40px;
border-radius: 50%;
overflow: hidden;
background-color: #bfbfbf;
}
.card-tools {
.card-hd__content {
padding-left: 10px;
.status {
font-size: 15px;
color: #67c23a;
display: flex;
align-items: center;
.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 {
margin-top: 10px;
display: flex;
......@@ -71,6 +93,6 @@ export default {
}
.p-content {
font-size: 12px;
color: #999;
color: #333;
}
</style>
......@@ -8,7 +8,9 @@
</span>
</div>
</div>
<div class="card-bd">
<div class="card-main">
<template v-if="data.activity_type === '10'">
<div class="p-item">
<div class="p-title">时间:</div>
<div class="p-content" style="color:#333;">
......@@ -21,6 +23,17 @@
{{ 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>
......@@ -30,7 +43,12 @@
<div class="p-content is-red">{{ data.approve_remark }}</div>
</div>
</div>
<div class="card-ft" v-if="data.participant_count">
<div class="card-aside" v-if="!isPass">
<div class="card-button" @click.stop="onEdit">编辑</div>
<div class="card-button" @click.stop="onRemove">删除</div>
</div>
</div>
<div class="card-ft" v-if="hasJoined">
<div class="join-button" @click.stop="toJoinPage">
{{ data.participant_count }}人已报名,去查看
</div>
......@@ -51,8 +69,19 @@ export default {
}
return map[this.data.approve_status]
},
demandTypeText() {
const map = {
'10': '行业资讯',
'11': '就业招聘',
'12': '需求对接'
}
return map[this.data.activity_demand_type] || ''
},
isPass() {
return this.data.approve_status === '1'
},
hasJoined() {
return parseInt(this.data.participant_count) > 0
}
},
methods: {
......@@ -60,7 +89,13 @@ export default {
this.$router.push({ name: 'item', params: { id: this.data.id } })
},
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 {
color: #999;
}
}
.card-bd {
display: flex;
align-items: flex-end;
}
.card-main {
flex: 1;
}
.p-item {
margin-top: 10px;
display: flex;
......@@ -106,7 +148,7 @@ export default {
color: #67c23a !important;
}
.card-ft {
margin: 10px -30px -20px;
margin: 10px -20px -20px;
padding: 10px 20px;
text-align: right;
border-top: 1px solid #f5f5f5;
......@@ -121,4 +163,24 @@ export default {
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>
......@@ -53,7 +53,8 @@ export default {
</script>
<style lang="scss" scoped>
::v-deep .van-uploader__upload {
::v-deep .van-uploader__upload,
::v-deep .van-uploader__preview-image {
width: 150px;
height: 80px;
background-color: #e0e0e0;
......
......@@ -14,12 +14,12 @@ Vue.use(Notify)
import { Dialog } from 'vant'
Vue.use(Dialog)
import { Toast } from 'vant'
Vue.use(Toast)
import { Popup } from 'vant'
Vue.use(Popup)
import { Overlay } from 'vant'
Vue.use(Overlay)
import { Tab, Tabs } from 'vant'
Vue.use(Tab)
Vue.use(Tabs)
......
......@@ -3,7 +3,7 @@
<v-form ref="form" :fields="page.form.fields" @submit="onSubmit"></v-form>
<div class="fixed-box">
<div class="fixed-inner">
<div class="fixed-button" @click="handleSubmit">发布</div>
<div class="fixed-button" @click="handleSubmit">提交</div>
</div>
</div>
</div>
......@@ -78,15 +78,15 @@ const pages = {
fields: [
{
fieldType: 'select',
name: 'type',
name: 'activity_demand_type',
label: '类型',
required: true,
placeholder: '请选择需求类型',
rules: [{ required: true, message: '请选择需求类型' }],
values: [
{ name: '0', text: '行业资讯' },
{ name: '1', text: '就业招聘' },
{ name: '2', text: '需求对接' }
{ name: '10', text: '行业资讯' },
{ name: '11', text: '就业招聘' },
{ name: '12', text: '需求对接' }
],
valueKey: 'name'
},
......@@ -134,15 +134,27 @@ export default {
handleSubmit() {
this.$refs.form.submit()
},
onSubmit() {
let data = this.$refs.form.ruleForm
onSubmit(data) {
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
api.createActivity(data).then(() => {
data.activity_demand_type = ruleForm.activity_demand_type || 0
api.createActivity(data).then(response => {
if (response.success) {
this.$dialog
.alert({ confirmButtonText: '确定', message: '提交成功' })
.alert({
confirmButtonText: '确定',
message: '提交成功,可在“我发起的”里查看审核结果'
})
.then(() => {
this.$router.push({ name: 'index', query: this.$route.query })
this.$router.push({ name: 'index', query: { tab: '2' } })
})
} else {
this.$toast(response.message)
}
})
}
}
......
......@@ -83,15 +83,15 @@ const pages = {
fields: [
{
fieldType: 'select',
name: 'type',
name: 'activity_demand_type',
label: '类型',
required: true,
placeholder: '请选择需求类型',
rules: [{ required: true, message: '请选择需求类型' }],
values: [
{ name: '0', text: '行业资讯' },
{ name: '1', text: '就业招聘' },
{ name: '2', text: '需求对接' }
{ name: '10', text: '行业资讯' },
{ name: '11', text: '就业招聘' },
{ name: '12', text: '需求对接' }
],
valueKey: 'name'
},
......@@ -117,7 +117,7 @@ const pages = {
}
export default {
name: 'Create',
name: 'Edit',
components: { VForm },
metaInfo() {
return {
......@@ -144,15 +144,27 @@ export default {
handleSubmit() {
this.$refs.form.submit()
},
onSubmit() {
let data = this.$refs.form.ruleForm
onSubmit(data) {
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
api.createActivity(data).then(() => {
data.activity_demand_type = ruleForm.activity_demand_type || 0
api.updateActivity(this.pid, data).then(response => {
if (response.success) {
this.$dialog
.alert({ confirmButtonText: '确定', message: '提交成功' })
.alert({
confirmButtonText: '确定',
message: '提交成功,可在“我发起的”里查看审核结果'
})
.then(() => {
this.$router.push({ name: 'index', query: this.$route.query })
this.$router.push({ name: 'index', query: { tab: '2' } })
})
} else {
this.$toast(response.message)
}
})
},
getDetail() {
......@@ -161,11 +173,17 @@ export default {
forbidClick: true,
duration: 0
})
api.getActivity(this.pid).then(response => {
this.formModel = response.form
api
.getActivity(this.pid)
.then(response => {
this.formModel = response
toast.clear()
})
.catch(toast.clear)
}
},
beforeMount() {
this.getDetail()
}
}
</script>
......
......@@ -3,7 +3,6 @@
<van-list
v-model="loading"
:finished="finished"
finished-text="没有更多了"
@load="onLoad"
v-if="list.length"
>
......@@ -44,7 +43,7 @@ export default {
})
},
onLoad() {
this.page.offset++
this.page.offset = this.page.offset + this.page.limit
this.getList()
}
},
......
<template>
<div class="list">
<van-tabs v-model="tabActive">
<div class="main-list">
<van-tabs v-model="tabActive" sticky>
<van-tab title="热门推荐" name="0">
<hot-list />
</van-tab>
......@@ -22,6 +22,7 @@
<img src="~@/assets/img/icon_publish2.png" />发布需求
</li>
</ul>
<div class="icon-close" @click="publishVisible = false"></div>
</div>
</van-popup>
</div>
......@@ -39,18 +40,7 @@ export default {
data() {
return {
tabActive: '0',
publishVisible: false,
list: [
{
id: '0',
title: '紫荆-索菲亚上海校友会 || 齐聚南京,体验数字化魅力',
time: '2020.02.10',
user: '王鹏飞',
time2: '2020.02.10'
}
],
loading: false,
finished: true
publishVisible: false
}
},
watch: {
......@@ -63,9 +53,8 @@ export default {
}
},
methods: {
getList() {},
onLoad() {
this.getList()
onTabClick(name) {
this.$router.push({ query: { tab: name } })
},
toCreatePage(type) {
this.$router.push({ name: 'create', query: { publish_type: type } })
......@@ -74,8 +63,9 @@ export default {
}
</script>
<style lang="scss">
.list {
<style lang="scss" scoped>
.main-list {
padding-bottom: 100px;
}
.publish-button {
position: fixed;
......@@ -106,4 +96,17 @@ export default {
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>
......@@ -13,10 +13,12 @@
<p>{{ detail.initiator.nickname }}</p>
<p>{{ datetimeText }}</p>
</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
class="join-button"
@click="$router.push({ name: 'join', params: { id: pid } })"
v-else
>报名</span
>
</div>
......@@ -26,9 +28,7 @@
<h1>{{ detail.activity_name }}</h1>
</div>
<!-- 内容 -->
<div class="detail-content">
<p>{{ detail.activity_contents }}</p>
</div>
<div class="detail-content" v-html="contentHtml"></div>
<div class="detail-form">
<div class="detail-form__item" v-if="detail.activity_time">
<div class="detail-form__label">
......@@ -55,21 +55,27 @@
</div>
</div>
<!-- 评论 -->
<div class="detail-comments"></div>
<div class="detail-comments">
<comment-list :id="pid"></comment-list>
</div>
</div>
</template>
<script>
import CommentList from '@/components/CommentList'
import * as api from '@/api/index'
import { format } from 'timeago.js'
export default {
components: { CommentList },
metaInfo: {
title: '紫荆校友圈'
},
data() {
return {
detail: {}
detail: {
activity_contents: ''
}
}
},
computed: {
......@@ -78,13 +84,29 @@ export default {
},
datetimeText() {
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: {
getDetail() {
api.getActivity(this.pid).then(response => {
console.log(response)
const toast = this.$toast.loading({
message: '加载中...',
forbidClick: true,
duration: 0
})
api
.getActivity(this.pid)
.then(response => {
this.detail = response
toast.clear()
})
.catch(toast.clear)
}
},
beforeMount() {
......@@ -108,7 +130,6 @@ export default {
.detail-user {
display: flex;
align-items: center;
margin-top: 20px;
}
.detail-user__pic {
width: 40px;
......@@ -116,6 +137,10 @@ export default {
background-color: #ccc;
border-radius: 50%;
overflow: hidden;
img {
width: 100%;
height: 100%;
}
}
.detail-user__content {
flex: 1;
......@@ -149,6 +174,9 @@ export default {
}
.detail-content {
margin-top: 20px;
font-size: 15px;
color: #666;
line-height: 30px;
p {
font-size: 15px;
color: #666;
......
......@@ -85,15 +85,19 @@ export default {
},
onSubmit(data) {
data.activity_id = this.pid
api.joinActivity(data).then(() => {
api.joinActivity(data).then(response => {
if (response.success) {
this.$dialog
.alert({
confirmButtonText: '确定',
message: '提交成功,可在“我参与的”里查看申请记录'
})
.then(() => {
this.$router.push({ name: 'index', query: { tab: '2' } })
this.$router.push({ name: 'index', query: { tab: '1' } })
})
} else {
this.$toast(response.message)
}
})
}
}
......
......@@ -3,7 +3,6 @@
<van-list
v-model="loading"
:finished="finished"
finished-text="没有更多了"
@load="onLoad"
v-if="list.length"
>
......@@ -44,7 +43,7 @@ export default {
})
},
onLoad() {
this.page.offset++
this.page.offset = this.page.offset + this.page.limit
this.getList()
}
},
......
<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>
<script>
import * as api from '@/api/index'
import JoinedCard from '@/components/JoinedCard'
export default {
components: { JoinedCard },
metaInfo: {
title: '查看已报名'
},
data() {
return {}
return {
detail: {
participant_list: []
}
}
},
computed: {
pid() {
return this.$route.params.id
}
},
methods: {
getDetail() {
api.getActivity(this.pid).then(response => {
this.detail = response
})
}
},
beforeMount() {
this.getDetail()
}
}
</script>
......
......@@ -3,7 +3,6 @@
<van-list
v-model="loading"
:finished="finished"
finished-text="没有更多了"
@load="onLoad"
v-if="list.length"
>
......@@ -11,6 +10,7 @@
v-for="item in list"
:data="item"
:key="item.id"
@remove="onRemove"
></publish-card>
</van-list>
<div class="empty" v-else>您还没有发起过活动哟</div>
......@@ -48,8 +48,28 @@ export default {
})
},
onLoad() {
this.page.offset++
this.page.offset = this.page.offset + this.page.limit
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() {
......
......@@ -6,7 +6,7 @@ module.exports = {
target: 'https://e-learning3.ezijing.com'
},
'/v1': {
target: 'https://alumni-api.ezijing.com'
target: 'https://alumni-api2.ezijing.com'
}
}
}
......
......@@ -6513,10 +6513,10 @@ qs@6.7.0:
resolved "https://registry.npm.taobao.org/qs/download/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc"
integrity sha1-QdwaAV49WB8WIXdr4xr7KHapsbw=
qs@^6.9.1:
version "6.9.1"
resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.1.tgz#20082c65cb78223635ab1a9eaca8875a29bf8ec9"
integrity sha512-Cxm7/SS/y/Z3MHWSxXb8lIFqgqBowP5JMlTUFyJN88y0SGQhVmZnqFK/PeuMX9LzUyWsqqhNxIyg0jlzq946yA==
qs@^6.9.3:
version "6.9.3"
resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.3.tgz#bfadcd296c2d549f1dffa560619132c977f5008e"
integrity sha512-EbZYNarm6138UKKq46tdx08Yo/q9ZhFoAXAI1meAFd2GtbRDhbZY2WQSICskT0c5q99aFzLG1D4nvTk9tqfXIw==
qs@~6.5.2:
version "6.5.2"
......@@ -8016,10 +8016,10 @@ validate-npm-package-license@^3.0.1:
spdx-correct "^3.0.0"
spdx-expression-parse "^3.0.0"
vant@^2.5.5:
version "2.5.5"
resolved "https://registry.yarnpkg.com/vant/-/vant-2.5.5.tgz#4484e4224127a88a47147b35ab52a91bacc2e939"
integrity sha512-w7APepClXcEMFJvvYsJkNDWCCb+a5SR9eAMMIYM/1VCwn7r7AxoAtJSCaZsmw3vhSxnMSnM/+Ftz7t3o0eoK4Q==
vant@^2.5.8:
version "2.5.8"
resolved "https://registry.yarnpkg.com/vant/-/vant-2.5.8.tgz#6f8d30b2f144d81421775c813b088b827cd88a03"
integrity sha512-6g1TRywIA0c6vP9A3tQpXpKUeSJmf88H1SmXPC+gbj+HHQuSEdmvJi9qAN4ezBzpUGe/ljTLg0Q+MCLGcvfbzA==
dependencies:
"@babel/runtime" "7.x"
"@vant/icons" "1.2.1"
......@@ -8090,10 +8090,10 @@ vue-meta@^2.3.3:
dependencies:
deepmerge "^4.2.2"
vue-router@^3.1.5:
vue-router@^3.1.6:
version "3.1.6"
resolved "https://registry.npm.taobao.org/vue-router/download/vue-router-3.1.6.tgz#45f5a3a3843e31702c061dd829393554e4328f89"
integrity sha1-RfWjo4Q+MXAsBh3YKTk1VOQyj4k=
resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-3.1.6.tgz#45f5a3a3843e31702c061dd829393554e4328f89"
integrity sha512-GYhn2ynaZlysZMkFE5oCHRUTqE8BWs/a9YbKpNLi0i7xD6KG1EzDqpHQmv1F5gXjr8kL5iIVS8EOtRaVUEXTqA==
vue-style-loader@^4.1.0, vue-style-loader@^4.1.2:
version "4.1.2"
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论