first commit

This commit is contained in:
编码猿
2024-09-27 01:32:49 +08:00
commit 28ebe05a64
7399 changed files with 1174529 additions and 0 deletions

View File

@@ -0,0 +1 @@
1b90bfde-b6df-48c9-b59a-41d3ff312bf5

View File

@@ -0,0 +1,104 @@
<template>
<div class="AddressPopup">
<uni-popup class="AddressPopup" ref="AddressPopup" type="bottom">
<div class="title">
<text class="address">请选择省份</text>
<text class="submit" @click="close">关闭</text>
</div>
<ul>
<li v-for="(it,index) in address"
:class="{ on: index == cIndex }"
@click="addressChoice(it,index)"
:key="index">
{{ it.title }}
</li>
</ul>
</uni-popup>
</div>
</template>
<script>
import uniPopup from "@/components/uni-popup/uni-popup.vue"
export default {
components: {
uniPopup
},
props: {
address: {
type: Array,
default: []
},
currentIndex: {
type: Number,
default: 0
}
},
data() {
return {
cIndex: this.currentIndex, // 默认省份
}
},
watch:{
currentIndex: function (val){
this.cIndex = val
}
},
methods: {
open() {
this.$refs.AddressPopup.open()
},
close() {
this.$refs.AddressPopup.close()
},
addressChoice(it,index) {
this.cIndex = index;
this.$emit("itemChange", it)
}
}
}
</script>
<style lang="less" scoped>
@import url("../../common/less/tpl/color");
.AddressPopup {
padding: 18.115rpx;
box-sizing: border-box;
.title {
height: 81.521rpx;
display: flex;
justify-content: space-between;
align-items: center;
padding: 9.057rpx 36.231rpx;
border-bottom: 1.811rpx solid #ececec;
.address {
font-size: 28.985rpx;
}
.submit {
font-size: 27.173rpx;
color: @themeColor;
}
}
ul {
display: flex;
justify-content: space-around;
text-align: center;
padding: 0 9.057rpx;
padding-top: 27.173rpx;
flex-wrap: wrap;
li {
color: #8d8d8d;
font-size: 25.362rpx;
width: 16%;
padding: 5.434rpx;
border: 1.811rpx solid #e4e4e4;
border-radius: 54.347rpx;
margin-bottom: 18.115rpx;
}
.on {
color: @themeColor;
border: 1.811rpx solid @themeColor;
}
}
}
</style>

View File

@@ -0,0 +1,40 @@
<template>
<div class="CustomerService">
<view class="customer_service" @click="goToKf">
<span class="iconfont">&#xe614;</span>
<text>联系客服</text>
</view>
</div>
</template>
<script>
export default {
methods: {
goToKf(){
uni.navigateTo({
url: '../feedback/feedback?type=2&title=联系客服'
});
}
}
}
</script>
<style scoped lang="less">
@import "../../common/less/index";
.customer_service {
width: 100%;
bottom: 36.231rpx;
text-align: center;
margin: 52.536rpx 0 86.956rpx 0;
span {
color: @themeColor;
font-size: 30.797rpx;
font-weight: bolder;
margin-right: 18.115rpx;
}
text {
font-size: 30.797rpx;
color: #000;
}
}
</style>

View File

@@ -0,0 +1,101 @@
<template>
<view class="header">
<navigation :title="title"></navigation>
<div class="portrait">
<div class="left">
<image src="http://static.geekhelp.cn/auth.jpg" alt=""></image>
<view class="portrait_info">
<text>{{ UserMessage ? UserMessage.user_name : '未登录' }}</text>
<view class="phone">手机号{{ UserMessage ? UserMessage.phone : '购买后自动绑定' }}</view>
</view>
</div>
<div class="right">
<slot name="action"></slot>
</div>
</div>
</view>
</template>
<script>
import navigation from '@/components/tpl/navigation.vue'
export default {
components: {
navigation
},
props: {
title: {
type: String,
default: ""
}
},
data() {
return {
UserMessage: this.$utils.getLocalStorage("user_message")
}
},
methods: {
}
}
</script>
<style lang="less" scoped>
@import "../../common/less/index";
.header {
width: 100%;
height: 286.231rpx;
background: url("~@/static/img/header_back.jpg") no-repeat;
background-size: cover;
position: relative;
padding-top: var(--status-bar-height);
.portrait {
position: absolute;
bottom: -68.84rpx;
margin: 0 auto;
height: 217.391rpx;
left: 50%;
margin-left: -95% / 2;
width: 95%;
border-radius: 19.927rpx;
background-color: rgba(255, 255, 255, 1);
text-align: center;
box-shadow: 0px 0 9.057rpx 3.623rpx rgba(162, 159, 159, 0.4);
border: 1.811rpx solid rgba(255, 255, 255, 0);
display: flex;
justify-content: space-between;
align-items: center;
padding: 0 28rpx;
box-sizing: border-box;
.left {
display: flex;
align-items: center;
image {
width: 124.999rpx;
height: 130.434rpx;
border-radius: 128.623rpx;
margin-right: 27.173rpx;
}
.portrait_info {
text-align: left;
text {
color: rgba(16, 16, 16, 1);
font-size: 27.173rpx;
text-align: left;
}
.phone {
color: rgba(187, 185, 185, 1);
font-size: 23.55rpx;
text-align: left;
}
}
}
.right {
}
}
}
</style>

View File

@@ -0,0 +1,126 @@
<template>
<div class="JurisdictionAlert">
<uni-popup ref="showpopup" :maskClick="false" class="showpopup" type="center">
<div class="title">
<div class="left_tips">
<span class="iconfont">&#xe660;</span>
<text>温馨提示</text>
</div>
<icon class="closed" @click="cancelPopup(true)" type="cancel" color="#1aa3fa" size="18"/>
</div>
<div class="contents" v-html="text"></div>
<div class="buy" @click="buy">点击购买</div>
<div v-if="showCancel" @click="cancelPopup(true)" class="cancel">以后再说</div>
</uni-popup>
</div>
</template>
<script>
import uniPopup from "@/components/uni-popup/uni-popup.vue";
export default {
props: {
text: {
type: String,
default: ''
},
showCancel: {
type: Boolean,
default: true
},
vipType: {
type: Number,
default: 1
}
},
data() {
return {
}
},
methods: {
buy() {
this.$emit("clearChoice")
// 已经登录成功去购买页面
if (this.$utils.checkLogin()) {
this.$utils.enterPage(`../payment/payment?type=${this.vipType}`)
// 没有登录,去登录页面登录
} else {
uni.showToast({
title: '尚未登录,请登录后购买',
duration: 2000,
icon: 'none',
complete: () =>
setTimeout(() =>
this.$utils.enterPage(`../login/login?type=${this.vipType}`),1800)
});
}
},
cancelPopup(type) {
if (type) {
this.$emit("clearChoice")
} else {
this.$refs.showpopup.close()
}
},
openPopup() {
this.$refs.showpopup.open()
}
},
components: {uniPopup}
}
</script>
<style lang="less" scoped>
@import "../../common/less/index";
.JurisdictionAlert {
.showpopup {
.title {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 41.666rpx;
.left_tips {
.iconfont {
font-size: 39.855rpx;
vertical-align: middle;
color: @themeColor;
}
text {
margin-left: 9.057rpx;
font-size: 27.173rpx;
}
}
}
.contents {
font-size: 30.797rpx;
width: 83%;
margin: 0 auto;
margin-bottom: 72.463rpx;
line-height: 50.724rpx;
b {
color: @themeColor;
}
}
.buy {
height: 63.405rpx;
background: @themeColor;
color: #fff;
text-align: center;
line-height: 63.405rpx;
border-radius: 54.347rpx;
font-size: 25.362rpx;
width: 90%;
margin: 0 auto;
}
.cancel {
color: #BAC2C8;
text-align: center;
margin-top: 19.927rpx;
font-size: 23.55rpx;
}
}
}
</style>

View File

@@ -0,0 +1,258 @@
<template>
<div class="listItem">
<div v-if="list.length != 0">
<view v-for="(i,index) in list" :key="index" class="list_item">
<view class="item_title">
<div class="title_left">
<text @click="titleClick(i)">{{i.alias || i.professionName || i.collegeName}}</text>
<view v-if="i.recommendType == 1" class="t chong"></view>
<view v-if="i.recommendType == 2" class="t wen"></view>
<view v-if="i.recommendType == 3" class="t ti"></view>
</div>
<!--新高考 按专业查询-->
<div v-if="i.chooseCns" class="title_right">
选科要求{{i.chooseCns}}
</div>
<!--新高考 按学校查询-->
<div v-else-if="i.is_sch" class="title_right" @click="recruit(i)">
匹配专业{{i.majorNum}}
<span v-if="showDown" class="iconfont">&#xe611;</span>
</div>
<!--普通高考-->
<div v-else class="title_right" @click="recruit(i)">
招收专业{{i.majorNum}}
<span v-if="showDown" class="iconfont">&#xe611;</span>
</div>
</view>
<div class="item_content">
<view class="content_center">
<img v-if="i.hasOwnProperty('logo')" :src="$img.url(i.sch_id || i.collegeId)"/>
<text v-else class="probability_text">{{i.probability}}%</text>
<view class="center_f">
<!--新高考 按专业查询-->
<view v-if="i.collegeCode" class="center_text">
院校代码 {{i.collegeCode}}
</view>
<!--新高考 按学校查询-->
<view v-else-if="i.majorCode" class="center_text">
<text>{{i.collegeName}}</text>
专业代码 {{i.professionCode}}
</view>
<!--普通高考-->
<view v-else class="center_text">
录取概率
<text>{{i.probability}}%</text>
{{i.batch_title}}
</view>
<ul class="center_li" v-if="i.hasOwnProperty('tags')">
<li v-for="(j,index) in i.tags" :key="index">{{j}}</li>
</ul>
</view>
</view>
<!--
collect: 1: 已收藏
2: 移除
0 收藏
-->
<view :class="i.is_collect == 1 ? 'yj_like like' : 'like' "
@tap="i.is_collect === 0 ? AddUserLike(i) : i.is_collect === 2 ? RemoveLike(i,index) : '' ">
<span v-if="i.is_collect == 0" class="iconfont">&#xe626;</span>
<text> {{ i.is_collect == 1 ? '已收藏' : i.is_collect == 2 ? '移除' : '收藏' }}</text>
</view>
</div>
<ul class="item_message">
<li>
<text>2019最低位次</text>
<view>{{i.lowestRank || '- ' }}</view>
</li>
<li>
<text>2019最低分</text>
<view>{{i.minScore == null || i.minScore == 0 ? '-' : `${i.minScore}` }}</view>
</li>
<li>
<text>2019招生</text>
<view>{{i.enterNum || i.planNum ? `${i.enterNum || i.planNum }` : '-' }}</view>
</li>
<li>
<text>全国排名</text>
<view>{{i.rankOfCn || '- '}}</view>
</li>
</ul>
</view>
<Loading></Loading>
</div>
<div v-else class="nodata">暂无数据</div>
</div>
</template>
<script>
import uniTransition from "@/components/uni-transition/uni-transition.vue"
import Loading from "@/components/tpl/Loading.vue"
export default {
components: {
uniTransition,
Loading
},
props: {
list: {
type: Array,
default: []
},
showDown: {
type: Boolean,
default: true
}
},
created() {
},
methods: {
titleClick(item) {
this.$emit('titleClick', item)
},
AddUserLike(item) {
this.$emit("AddUserLike", item)
},
RemoveLike(item,index) {
this.$emit("RemoveLike", item,index)
},
recruit(item) {
this.$emit("recruit", item)
}
}
}
</script>
<style scoped lang="less">
@import "../../common/less/tpl/color";
.nodata {
text-align: center;
font-size: 25.362rpx;
color: #8d8d8d;
margin-top: 60rpx;
}
.list_item {
margin: 9.057rpx 18.115rpx;
margin-bottom: 27.173rpx;
padding: 18.115rpx 27.173rpx;
box-shadow: 0 3px 15px 0 rgba(97,81,66,.18);
border-radius: 18.115rpx;
.item_title {
display: flex;
justify-content: space-between;
align-items: center;
.title_left{
width: 70%;
text {
font-size: 30.997rpx;
font-weight: 400;
}
.t {
display: inline-block;
margin-left: 5.434rpx;
min-width: 28.985rpx;
width: 28.985rpx;
height: 28.985rpx;
color: #fff;
font-size: 21.739rpx;
line-height: 28.985rpx;
text-align: center;
border-radius: 7.246rpx;
}
.ti {
background: #16d88e;
}
.wen {
background: #03bfff !important;
}
.chong {
background: #ff5f47 !important;
}
}
.title_right {
width: 30%;
text-align: center;
font-size: 23.95rpx;
color: #a9a9a9;
span {
vertical-align: middle;
margin-left: 5.434rpx;
}
}
}
.item_content {
display: flex;
justify-content: space-between;
align-items: center;
margin-top: 19.927rpx;
padding-bottom: 14.492rpx;
border-bottom: 1.811rpx dashed #ede8e3;
.content_center {
display: flex;
align-items: center;
img {
width: 90.579rpx;
height: 90.579rpx;
margin-right: 16.304rpx;
}
.probability_text {
font-size: 43.778rpx;
color: @themeColor;
margin-right: 21.739rpx;
}
.center_f {
.center_text {
font-size: 27.673rpx;
color: #696969;
margin-bottom: 10.869rpx;
width: 362.618rpx;
text {
color: @themeColor;
margin: 0 9.057rpx;
}
}
.center_li {
display: flex;
li {
background: #f0eeec;
border-radius: 1.811rpx;
line-height: 30.997rpx;
font-size: 23.75rpx;
color: #aea4ab;
padding: 1.811rpx 5.434rpx;
margin: 0 3.623rpx 3.623rpx 0;
}
}
}
}
}
}
</style>

View File

@@ -0,0 +1,50 @@
<template>
<div class="loading" :data-index="$store.state.showStatus">
<div class="WaitingText" v-if="$store.state.showStatus == 1">{{waitingText}}</div>
<div class="EndText" v-else-if="$store.state.showStatus == 2">{{endText}}</div>
<div class="EmptyText" v-else="$store.state.showStatus == 3">{{emptyText}}</div>
</div>
</template>
<script>
export default {
props: {
waitingText: {
type: String,
default: "正在加载.."
},
endText: {
type: String,
default: "加载完成"
},
emptyText: {
type: String,
default: "暂无数据"
}
},
data() {
return {
}
},
onLaunch() {
},
created() {
},
methods: {
}
}
</script>
<style scoped lang="less">
.loading {
.WaitingText,
.EmptyText,
.EndText{
margin-top: 20px;
font-size: 27.173rpx;
text-align: center;
color: #a499a1;
}
}
</style>

View File

@@ -0,0 +1,169 @@
<template>
<!--招生专业-->
<div class="Major">
<div class="major_list_item">
<div class="title">
<!--如果有学校名称那么现实学校名称 和专业名-->
<div v-if="item.sch_name">
<div class="m_title">概率 {{item.probability}}%</div>
<slot name="shctitle"></slot>
</div>
<!--如果没有学校名称那么只显示学习标题-->
<div v-else>
<div class="m_school_title">{{item.title}}</div>
</div>
</div>
<view class="item_content">
<div class="left" :data-index="item.logo">
<img :src="
item.hasOwnProperty('logo')
? $img.url(item.sch_id || item.collegeId)
: require('@/static/img/current_school.jpg')" alt="">
<!--判断是否有 学费如果有显示普通高考 全部院校的布局-->
<div v-if="item.hasOwnProperty('cost')" class="cen">
<div class="cen_t">专业代码{{item.code}} 专业学费 {{item.cost}}</div>
<text class="badeg" v-if="typeof item.tags == 'string' ">{{item.tags}}</text>
</div>
<div v-else class="cen">
<div class="cen_t">{{item.title}} {{item.learnYear}}学制 {{item.degree}}</div>
<text class="badeg">{{item.typeName}}</text>
<text class="proportion">男女比例{{item.sex_bili}}</text>
</div>
</div>
<div class="right" @click="showSchoolPopup(item)">
<slot name="action"></slot>
</div>
</view>
<div class="item_footer" v-if="item.hasOwnProperty('countSch')">
2020年在本省招生该专业院校共{{item.countSch}}招生人数共{{item.sumPlan}}
</div>
<div class="item_footer" v-else>
<ul class="item_message">
<li>
<text>2018最低位次</text>
<view>{{item.lowestRank || '- ' }}</view>
</li>
<li>
<text>2018最低分</text>
<view>{{item.minScore == null || item.minScore == 0 ? '-' : `${item.minScore}`}}</view>
</li>
<li>
<text>2019录取人数</text>
<view>{{item.enterNum == null || item.enterNum == 0 ? '-' : `${item.enterNum}` }}</view>
</li>
<li>
<text>2020招生人数</text>
<view>{{item.planNum || '- ' }}</view>
</li>
</ul>
</div>
</div>
</div>
</template>
<script>
export default {
props: {
item: {
type: Object,
default: {}
}
},
methods: {
showSchoolPopup(item) {
this.$emit("showPopup", item)
}
},
components: {
}
}
</script>
<style lang="less" scoped>
.major_list_item {
border-radius: 14.492rpx;
background-color: rgba(255, 255, 255, 1);
border: 1.811rpx solid rgba(255, 255, 255, 0);
box-shadow: 0 3px 15px 0 rgba(97,81,66,.18);
padding: 32.608rpx 19.927rpx;
margin-bottom: 32.608rpx;
padding-bottom: 0;
.title {
overflow: hidden;
.m_title {
float: right;
font-size: 27.173rpx;
color: #7c7777;
}
.m_school_title {
font-size: 27.173rpx;
font-weight: 400;
float: left;
width: 75%;
}
}
.item_content {
display: flex;
margin-top: 18.115rpx;
padding-bottom: 12.681rpx;
border-bottom: 1px dashed #ede8e3;
align-items: center;
justify-content: space-between;
padding-bottom: 21.739rpx;
.left {
display: flex;
img {
width: 88.768rpx;
height: 88.768rpx;
margin-right: 14.492rpx;
}
.cen {
.cen_t {
font-size: 25.362rpx;
color: #7D7878;
width: 362.318rpx;
white-space: pre-wrap;
}
.badeg {
padding: 3.923rpx 12.981rpx;
font-size: 23.75rpx;
background: #f0eeec;
border-radius: 52.536rpx;
margin-right: 12.681rpx;
color: #aea4ab;
}
.proportion {
font-size: 21.739rpx;
color: #999595;
}
}
}
}
.item_footer {
font-size: 23.55rpx;
color: #ACACAC;
padding: 28.985rpx 10.869rpx;
}
}
</style>

View File

@@ -0,0 +1,22 @@
<template>
<div class="nodata">
暂无数据
</div>
</template>
<script>
export default {
}
</script>
<style lang="less" scoped>
.nodata {
text-align: center;
font-size: 25.362rpx;
margin-top: 25%;
color: #bbb9b9;
}
</style>

View File

@@ -0,0 +1,87 @@
<template>
<div class="tabs_item">
<div class="city_action">
<view v-if="hiddenClosed" class="iconfont closed" @click="Closed">&#xe627;</view>
<view v-if="hiddenClear" class="clear" @click="Clear">重置</view>
<view v-if="hiddenSubmit" class="determine" @click="Submit">{{submitTitle}}</view>
</div>
</div>
</template>
<script>
export default {
props: {
refName: {
type: String,
default: ""
},
hiddenClear: {
type: Boolean,
default: true
},
submitTitle: {
type: String,
default: "确定"
},
hiddenSubmit: {
type: Boolean,
default: true
},
hiddenClosed: {
type: Boolean,
default: true
}
},
methods: {
Closed() {
this.$emit("Closed")
},
/**
* 重置
*/
Clear() {
this.$emit("Clear")
},
Submit() {
this.$emit("Submit")
}
}
}
</script>
<style scoped lang="less">
@import "../../common/less/index";
.city_action {
width: 100%;
height: 97.826rpx;
color: #fff;
font-size: 30.997rpx;
display: flex;
margin-top:126.811rpx;
position: fixed;
left: 0;
bottom: 0;
.closed {
position: absolute;
top: -112.318rpx;
color: #1b78fa;
font-size: 54.347rpx;
left: 50%;
margin-left: calc(-54.347rpx / 2);
}
.clear {
text-align: center;
width: 50%;
line-height: 97.826rpx;
background-color: #1ba3fa;
}
.determine {
width: 50%;
text-align: center;
line-height: 97.826rpx;
background-color: @themeColor;
}
}
</style>

View File

@@ -0,0 +1,29 @@
<template>
<div class="TipsTitle">
{{title}}
</div>
</template>
<script>
export default {
props: {
title: {
type: String,
default: ''
}
}
}
</script>
<style lang="less" scoped>
@import "../../common/less/index";
.TipsTitle {
margin-top: 18.115rpx;
font-size: 29.985rpx;
padding-left: 21.939rpx;
margin-bottom: 18.515rpx;
color: #000;
font-weight: 500;
border-left: 5.434rpx solid @themeColor;
}
</style>

View File

@@ -0,0 +1,71 @@
<template>
<!--如果是pc访问限制头部导航条宽度-->
<div :class=" scrolled ? 'nav back' : 'nav ddd'">
<view class="navigation" @click="back">
<span class="iconfont">&#xe654;</span>
<text>{{ title }}</text>
</view>
</div>
</template>
<script>
export default {
props: {
title: {
type: String,
default: ""
}
},
data() {
return {
scrolled: false
}
},
mounted() {
window.addEventListener('scroll', this.handleScroll);
},
methods: {
handleScroll () {
this.scrolled = window.scrollY > 50;
},
back() {
if (this.$utils.getLocalStorage("order_message")) {
this.$utils.enterPage("../index/index")
} else {
this.$utils.backPage()
}
}
}
}
</script>
<style scoped lang="less">
.nav {
position: fixed;
width: 100%;
left: 0;
top: 0;
z-index: 999;
background: rgba(27, 120, 250, 0);
transition: all 2s ease;
}
.back {
background: rgba(27, 120, 250, 1);
}
.navigation {
width: 100%;
height: 79.71rpx;
font-size: 28.985rpx;
color: #fff;
display: flex;
align-items: center;
padding: 0 18.115rpx;
box-sizing: border-box;
margin: 0;
span {
margin-right: 23.55rpx;
}
}
</style>