提交 6f3aa683 authored 作者: 王鹏飞's avatar 王鹏飞

update

上级 9c6a9fcd
......@@ -287,3 +287,13 @@ export function readMessage(id) {
export function getPopular() {
return httpRequest.get('/api/alumni/v1/organization/recommend')
}
// 提交推荐信息
export function submitRecommend(data) {
return httpRequest.post('/api/zws/v1/enrollment/applications', data)
}
// 推荐记录
export function getMyRecommendList() {
return httpRequest.get('/api/zws/v1/enrollment/applications/get-recommend-records')
}
<template>
<van-form ref="form" class="form" v-bind="$attrs" v-on="$listeners">
<van-form ref="form" :class="className" v-bind="$attrs" v-on="$listeners">
<template v-for="(item, index) in fields">
<div class="form-item" :key="index">
<!-- 时间 -->
<template v-if="item.fieldType === 'datetime'">
<van-field
readonly
clickable
right-icon="arrow-down"
:border="false"
:required="false"
:border="hasFieldBorder"
:required="hasFieldRequired"
:key="index"
v-bind="item"
v-model="ruleForm[item.name]"
@click="showPicker(item)"
......@@ -29,8 +29,9 @@
readonly
clickable
right-icon="arrow-down"
:border="false"
:required="false"
:border="hasFieldBorder"
:required="hasFieldRequired"
:key="index"
v-bind="item"
v-model="ruleForm[item.name]"
@click="showPicker(item)"
......@@ -50,8 +51,9 @@
readonly
clickable
right-icon="arrow-down"
:border="false"
:required="false"
:border="hasFieldBorder"
:required="hasFieldRequired"
:key="index"
:value="ruleForm[item.name] | pickerValueText(item)"
v-bind="item"
@click="showPicker(item)"
......@@ -69,8 +71,9 @@
<template v-else-if="item.fieldType === 'nativeSelect'">
<van-field
right-icon="arrow-down"
:border="false"
:required="false"
:border="hasFieldBorder"
:required="hasFieldRequired"
:key="index"
:value="ruleForm[item.name]"
v-bind="item"
v-if="item.isShow ? item.isShow(ruleForm) : true"
......@@ -94,8 +97,9 @@
<!-- 上传图片 -->
<template v-else-if="item.fieldType === 'uploader'">
<van-field
:border="false"
:required="false"
:border="hasFieldBorder"
:required="hasFieldRequired"
:key="index"
v-bind="item"
v-model="ruleForm[item.name]"
v-if="item.isShow ? item.isShow(ruleForm) : true"
......@@ -113,7 +117,13 @@
<!-- 上传多个图片 -->
<template v-else-if="item.fieldType === 'upliadMultiple'">
<van-field :border="false" :required="false" v-bind="item" v-if="item.isShow ? item.isShow(ruleForm) : true">
<van-field
:border="hasFieldBorder"
:required="hasFieldRequired"
:key="index"
v-bind="item"
v-if="item.isShow ? item.isShow(ruleForm) : true"
>
<template #label>
{{ item.label }}
<div class="form-item__tips" v-if="item.tips">{{ item.tips }}</div>
......@@ -127,7 +137,13 @@
<!-- 上传视频 -->
<template v-else-if="item.fieldType === 'video'">
<van-field :border="false" :required="false" v-bind="item" v-if="item.isShow ? item.isShow(ruleForm) : true">
<van-field
:border="hasFieldBorder"
:required="hasFieldRequired"
:key="index"
v-bind="item"
v-if="item.isShow ? item.isShow(ruleForm) : true"
>
<template #label>
{{ item.label }}
<div class="form-item__tips" v-if="item.tips">{{ item.tips }}</div>
......@@ -142,8 +158,9 @@
<!-- 单选 -->
<template v-else-if="item.fieldType === 'radio'">
<van-field
:border="false"
:required="false"
:border="hasFieldBorder"
:required="hasFieldRequired"
:key="index"
v-bind="item"
v-model="ruleForm[item.name]"
v-if="item.isShow ? item.isShow(ruleForm) : true"
......@@ -164,8 +181,9 @@
<!-- 文本框 -->
<template v-else>
<van-field
:border="false"
:required="false"
:border="hasFieldBorder"
:required="hasFieldRequired"
:key="index"
v-bind="item"
v-model.trim="ruleForm[item.name]"
v-if="item.isShow ? item.isShow(ruleForm) : true"
......@@ -177,7 +195,6 @@
</template>
</van-field>
</template>
</div>
</template>
<slot></slot>
......@@ -221,19 +238,11 @@ export default {
name: 'VForm',
components: { Upload, UploadVideo, UpliadMultiple },
props: {
model: {
type: Object,
default() {
return {}
}
},
fields: {
type: Array,
required: true,
default() {
return []
}
}
className: { type: String, default: 'form' },
model: { type: Object, default: () => ({}) },
fields: { type: Array, required: true, default: () => [] },
hasFieldBorder: { type: Boolean, default: false },
hasFieldRequired: { type: Boolean, default: false }
},
watch: {
model: {
......
......@@ -254,6 +254,20 @@ const routes = [
path: '/vote/apply',
name: 'voteApply',
component: () => import('@/views/vote/Apply.vue')
},
// 推荐学生
{
path: '/recommend',
component: () => import('@/views/recommend/Recommend.vue')
},
// 我的推荐
{
path: '/my/recommend',
component: () => import('@/views/recommend/MyRecommend.vue')
},
{
path: '/my/recommend/:id',
component: () => import('@/views/recommend/MyRecommendDetail.vue')
}
]
......
<template>
<div>
<img src="https://webapp-pub.oss-cn-beijing.aliyuncs.com/www/h5/images/banner_0530_content.jpg" alt="">
<img src="/img/zjh.jpg" />
</div>
</template>
<script>
export default {
}
export default {}
</script>
<style lang="scss" scoped>
img{
img {
display: block;
width: 100%;
}
......
......@@ -6,7 +6,7 @@
<div class="banner">
<van-swipe :autoplay="3000" indicator-color="white">
<van-swipe-item>
<router-link to="/coins"><img src="https://webapp-pub.oss-cn-beijing.aliyuncs.com/www/h5/images/banner_new_0530.jpg" /></router-link>
<router-link to="/coins"><img src="img/home_banner_001.jpg" /></router-link>
</van-swipe-item>
<van-swipe-item>
<router-link to="/vote/index"><img src="img/banner_vote_2_2.jpg" /></router-link>
......
<template>
<div class="main my">
<div class="my">
<div class="my-header">
<div class="tools">
<ul class="tools-list">
......@@ -18,29 +18,43 @@
<div class="user-content">
<div class="user-content__name">{{ user.personal_name }}</div>
<div class="user-content__info">{{ user.class_name }}</div>
<div class="user-content__info">紫荆币:0</div>
<div class="user-content__info">紫荆花:0 <span @click="show = true">提现</span></div>
</div>
<!-- <van-icon name="arrow" class="arrow-right"/> -->
<!-- <div class="user-aside">
</div>
<div class="user-aside">
<dl @click="$router.push({ name: 'myGroup' })">
<dt>{{ detail.org_stu_total }}</dt>
<dd>组织</dd>
<dd>我的组织</dd>
</dl>
<dl @click="$router.push({ name: 'myActivity' })">
<dt>{{ detail.act_stu_total }}</dt>
<dd>活动</dd>
<dd>我的活动</dd>
</dl>
<dl @click="$router.push({ name: 'myApprove' })">
<!-- <dl @click="$router.push({ name: 'myApprove' })">
<dt>
{{ detail.act_check_total }}
<span class="badge" v-if="hasBadge"></span>
</dt>
<dd>审批</dd>
</dl>
</div>-->
</dl> -->
</div>
</div>
<van-tabs v-model="tabActive" class="my-tab" :ellipsis="false">
<ul class="my-cell-list">
<li @click="handleTips">
<img src="@/assets/img/my_icon_01.png" /><span>我要缴费</span><van-icon name="arrow" />
</li>
<li @click="handleTips">
<img src="@/assets/img/my_icon_02.png" /><span>我要捐赠</span><van-icon name="arrow" />
</li>
<li @click="$router.push('/recommend')">
<img src="@/assets/img/my_icon_03.png" /><span>推荐学生</span><van-icon name="arrow" />
</li>
<li @click="handleTips">
<img src="@/assets/img/my_icon_04.png" /><span>我的建议</span><van-icon name="arrow" />
</li>
</ul>
<!-- <van-tabs v-model="tabActive" class="my-tab" :ellipsis="false">
<van-tab name="0">
<template #title>
<div class="name">我的组织</div>
......@@ -55,32 +69,48 @@
</template>
<my-activity-list></my-activity-list>
</van-tab>
<!-- <van-tab title="我的审批" name="2">
<van-tab title="我的审批" name="2">
<template #title
>我的审批
<span class="badge" style="top:-10px;" v-if="hasBadge"></span>
</template>
<my-approve-list></my-approve-list>
</van-tab>-->
</van-tabs>
</van-tab>
</van-tabs> -->
<tab-bar></tab-bar>
<van-dialog v-model="show" :showConfirmButton="false" class="dialog">
<div class="dialog-hd">
<h4 class="dialog-hd__title">提示</h4>
<van-icon name="cross" @click="show = false" />
</div>
<div class="dialog-bd">
<p>温馨提示:</p>
<p>账户余额达到<span>1000</span>朵紫荆花可以申请提现</p>
</div>
<div class="dialog-ft">
<van-button type="primary" @click="show = false">确定</van-button>
<van-button type="default" @click="show = false">取消</van-button>
</div>
</van-dialog>
</div>
</template>
<script>
// components
import TabBar from '@/components/TabBar'
import MyGroupList from '@/components/MyGroupList'
import MyActivityList from '@/components/MyActivityList'
// import MyGroupList from '@/components/MyGroupList'
// import MyActivityList from '@/components/MyActivityList'
import * as api from '@/api'
export default {
name: 'MyIndex',
components: { TabBar, MyGroupList, MyActivityList },
// components: { TabBar, MyGroupList, MyActivityList },
components: { TabBar },
data() {
return {
tabActive: '0',
detail: {}
detail: {},
show: false
}
},
watch: {
......@@ -109,6 +139,9 @@ export default {
api.getMy().then(response => {
this.detail = response
})
},
handleTips() {
this.$toast('暂未开放,敬请期待')
}
},
beforeMount() {
......@@ -119,8 +152,6 @@ export default {
<style lang="scss">
.my-header {
margin-left: -15px;
margin-right: -15px;
padding: 0 20px;
height: 190px;
background: url('~@/assets/img/my_bg.png') no-repeat center top;
......@@ -138,7 +169,7 @@ export default {
.user {
display: flex;
align-items: center;
margin-bottom: 30px;
margin-bottom: 15px;
}
.user-avatar {
width: 60px;
......@@ -168,19 +199,24 @@ export default {
.user-content__info {
margin-top: 6px;
font-size: 12px;
span {
margin-left: 30px;
font-weight: bold;
}
}
.user-aside {
display: flex;
dl {
flex: 1;
text-align: center;
margin-left: 10px;
}
dt {
font-size: 17px;
color: #222;
color: #fff;
}
dd {
color: #999;
color: #fff;
}
.badge {
top: -15px;
......@@ -230,8 +266,78 @@ export default {
background: rgba(255, 103, 103, 1);
border-radius: 50%;
}
.arrow-right{
font-size: .24rem;
.arrow-right {
font-size: 0.24rem;
color: #fff;
}
.my-cell-list {
padding: 20px 0;
li {
position: relative;
display: flex;
align-items: center;
padding: 16px 15px 16px 25px;
color: #555;
&::after {
position: absolute;
box-sizing: border-box;
content: ' ';
pointer-events: none;
right: 0;
bottom: 0;
left: 50px;
border-bottom: 1px solid #ededed;
transform: scaleY(0.5);
}
}
img {
width: 15px;
margin-right: 10px;
}
span {
flex: 1;
}
}
.dialog {
border-radius: 6px;
}
.dialog-hd {
padding: 12px 20px;
display: flex;
align-items: center;
color: #fff;
background-color: #ad0440;
}
.dialog-hd__title {
flex: 1;
font-size: 16px;
font-weight: normal;
}
.dialog-bd {
padding: 20px 40px;
p {
margin: 5px 0;
color: #5c5c5c;
line-height: 1.5;
}
span {
color: #ad0440;
}
}
.dialog-ft {
padding: 16px 0;
display: flex;
align-items: center;
justify-content: center;
border-top: 1px solid #dedede;
.van-button {
height: 30px;
margin: 0 10px;
border-radius: 6px;
}
.van-button--primary {
background-color: #ad0440;
border-color: #ad0440;
}
}
</style>
<template>
<div class="main">
<ul class="recommend-list">
<li v-for="item in list" :key="item.id" @click="$router.push(`/my/recommend/${item.id}`)">
<span class="name">推荐学生:{{ item.user_name }}</span>
<span class="date">{{ dateFormat(item.created_time) }}</span>
<van-icon name="arrow" />
</li>
</ul>
</div>
</template>
<script>
import * as api from '@/api/index'
export default {
data() {
return {
list: []
}
},
methods: {
dateFormat(value) {
return value.split(' ')[0]
},
getMyRecommendList() {
api.getMyRecommendList().then(response => {
this.list = response
})
}
},
beforeMount() {
this.getMyRecommendList()
}
}
</script>
<style lang="scss">
.recommend-list {
padding: 20px 0;
li {
position: relative;
display: flex;
align-items: center;
padding: 16px 0;
color: #000030;
&::after {
position: absolute;
box-sizing: border-box;
content: ' ';
pointer-events: none;
right: 0;
bottom: 0;
left: 0;
border-bottom: 1px solid #ededed;
transform: scaleY(0.5);
}
.name {
flex: 1;
}
.date {
margin-right: 10px;
}
}
}
</style>
\ No newline at end of file
<template>
<div class="main" v-if="detail">
<ul class="field-list">
<li v-for="(item, index) in fields" :key="index">
<span class="label">{{ item.label }}</span>
<span class="content">{{ detail[item.name] }}</span>
</li>
</ul>
</div>
</template>
<script>
import * as api from '@/api/index'
export default {
data() {
return {
list: [],
fields: [
{ name: 'project_name', label: '项目' },
{ name: 'user_name', label: '姓名' },
{ name: 'phone_number', label: '手机号' },
{ name: 'wechat', label: '微信号' },
{ name: 'company', label: '工作单位' },
{ name: 'title', label: '职务' },
{ name: 'comment', label: '推荐理由' },
{ name: 'created_time', label: '提交时间' },
{ name: 'application_status', label: '学员状态' }
]
}
},
computed: {
pid() {
return this.$route.params.id
},
detail() {
const detail = this.list.find(item => item.id === this.pid)
if (!detail) {
return null
}
const projectMap = {
1001: '金融硕士(MSF)',
1006: '应用心理学硕士(MAP)',
1005: '教育学硕士(MED)',
1000: '金融工商管理硕士(FMBA)',
1008: '酒店及旅游业工商管理硕士(HMBA)',
1012: '工商管理硕士(MBA)'
}
detail.project_name = projectMap[detail.project_id]
return detail
}
},
methods: {
dateFormat(value) {
return value.split(' ')[0]
},
getMyRecommendList() {
api.getMyRecommendList().then(response => {
this.list = response
})
}
},
beforeMount() {
this.getMyRecommendList()
}
}
</script>
<style lang="scss" scoped>
.field-list {
padding: 20px 0;
li {
position: relative;
display: flex;
align-items: center;
padding: 16px 0;
color: #000030;
&::after {
position: absolute;
box-sizing: border-box;
content: ' ';
pointer-events: none;
right: 0;
bottom: 0;
left: 0;
border-bottom: 1px solid #ededed;
transform: scaleY(0.5);
}
.label {
width: 100px;
}
.content {
flex: 1;
overflow: hidden;
}
}
}
</style>
\ No newline at end of file
<template>
<div class="main">
<p class="recommend-history"><router-link to="/my/recommend">推荐记录</router-link></p>
<card title="我要推荐">
<v-form
ref="form"
className="recommend"
:hasFieldBorder="true"
:model="formModel"
:fields="fields"
@submit="onSubmit"
>
<input type="button" value="立即推荐" class="submit-button" @click="handleSubmit" />
</v-form>
</card>
</div>
</template>
<script>
import Card from '@/components/Card'
import VForm from '@/components/Form'
import * as api from '@/api/index'
export default {
components: { Card, VForm },
data() {
return {
formModel: {},
fields: [
{
fieldType: 'nativeSelect',
name: 'project_id',
label: '项目',
required: true,
placeholder: '请选择项目',
rules: [{ required: true, message: '请选择项目' }],
values: [
{ name: '1001', text: '金融硕士(MSF)' },
{ name: '1006', text: '应用心理学硕士(MAP)' },
{ name: '1005', text: '教育学硕士(MED)' },
{ name: '1000', text: '金融工商管理硕士(FMBA)' },
{ name: '1008', text: '酒店及旅游业工商管理硕士(HMBA)' },
{ name: '1012', text: '工商管理硕士(MBA)' }
],
valueKey: 'name'
},
{
name: 'name',
label: '姓名',
required: true,
rules: [{ required: true, message: '请输入姓名' }]
},
{
name: 'phone',
label: '手机号',
required: true,
rules: [{ required: true, message: '请输入手机号' }]
},
{
name: 'wechat',
label: '微信号',
required: true,
rules: [{ required: true, message: '请输入微信号' }]
},
{
name: 'company',
label: '工作单位',
required: true,
rules: [{ required: true, message: '请输入工作单位' }]
},
{
name: 'title',
label: '职务',
required: true,
rules: [{ required: true, message: '请输入职务' }]
},
{
type: 'textarea',
name: 'comment',
label: '推荐理由'
}
]
}
},
methods: {
handleSubmit() {
this.$refs.form.submit()
},
onSubmit(data) {
data.channel = '19963'
api.submitRecommend(data).then(() => {
this.$dialog
.alert({
confirmButtonText: '确定',
message: '推荐成功'
})
.then(() => {
this.$router.push('/my/recommend')
})
})
}
}
}
</script>
<style lang="scss" scoped>
.recommend-history {
padding-top: 20px;
text-align: right;
color: #5c5c5c;
}
.recommend {
margin-left: -16px;
margin-right: -16px;
}
.submit-button {
width: 200px;
margin: 40px auto;
}
</style>
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论