2 Commits

10 changed files with 103 additions and 110 deletions
Unified View
  1. +9
    -9
      components/base/arrow.vue
  2. +1
    -1
      components/base/suspendDropdown.vue
  3. +5
    -5
      pages/index/case.vue
  4. +2
    -8
      pages/index/center.vue
  5. +4
    -8
      pages/index/index.vue
  6. +2
    -5
      pages/index/serve.vue
  7. +17
    -17
      pages_order/case/index.vue
  8. +58
    -41
      pages_order/thesis/index.vue
  9. +4
    -14
      pages_order/thesis/search.vue
  10. +1
    -2
      store/store.js

+ 9
- 9
components/base/arrow.vue View File

@ -21,22 +21,22 @@ export default {
&-blank { &-blank {
position: absolute; position: absolute;
left: 0;
right: 0;
&-top { &-top {
top: 0; top: 0;
border-top: 8rpx solid #FFFFFF;
border-right: 14rpx solid #FFFFFF;
border-bottom: 8rpx solid transparent;
border-left: 14rpx solid transparent;
border-top: 9rpx solid #FFFFFF;
border-right: 15rpx solid #FFFFFF;
border-bottom: 9rpx solid transparent;
border-left: 15rpx solid transparent;
} }
&-bottom { &-bottom {
bottom: 0; bottom: 0;
border-top: 8rpx solid transparent;
border-right: 14rpx solid #FFFFFF;
border-bottom: 8rpx solid #FFFFFF;
border-left: 14rpx solid transparent;
border-top: 9rpx solid transparent;
border-right: 15rpx solid #FFFFFF;
border-bottom: 9rpx solid #FFFFFF;
border-left: 15rpx solid transparent;
} }
} }
} }

+ 1
- 1
components/base/suspendDropdown.vue View File

@ -69,7 +69,7 @@
}, },
onSelect(val) { onSelect(val) {
const selected = this.value const selected = this.value
const newVal = selected === val ? null : val
const newVal = selected === val ? '' : val
this.$emit('input', newVal) this.$emit('input', newVal)
this.$emit('change', newVal) this.$emit('change', newVal)


+ 5
- 5
pages/index/case.vue View File

@ -32,7 +32,7 @@
<view class="list"> <view class="list">
<template v-if="total"> <template v-if="total">
<view class="list-item" v-for="item in list" :key="item.id" @click="jumpToDetail(item.thesisId)">
<view class="list-item" v-for="item in list" :key="item.id" @click="jumpToDetail(item.id)">
<image class="img" :src="item.image" mode="aspectFill"></image> <image class="img" :src="item.image" mode="aspectFill"></image>
</view> </view>
</template> </template>
@ -71,10 +71,10 @@
queryParams: { queryParams: {
pageNo: 1, pageNo: 1,
pageSize: 10, pageSize: 10,
title: null,
categoryServiceId: null,
categoryMajorId: null,
categoryPeriodId: null,
title: '',
categoryServiceId: '',
categoryMajorId: '',
categoryPeriodId: '',
}, },
mixinsListApi: 'queryAriticleList', mixinsListApi: 'queryAriticleList',
} }


+ 2
- 8
pages/index/center.vue View File

@ -6,12 +6,10 @@
<view class="header"> <view class="header">
<view class="title"> <view class="title">
<!-- todo: check key -->
<view class="title-text">吉光研途</view>
<view class="title-text">{{ configList.config_name }}</view>
<view class="title-line"></view> <view class="title-line"></view>
</view> </view>
<!-- todo: check key -->
<view class="desc">为您提供更专业优质靠谱的学术服务</view>
<view class="desc">{{ configList.config_desc }}</view>
</view> </view>
<!-- 轮播图 --> <!-- 轮播图 -->
@ -20,7 +18,6 @@
</view> </view>
<view class="list"> <view class="list">
<!-- todo: check list will change? -->
<view class="list-item" @click="jumpToDetail('other_service')"> <view class="list-item" @click="jumpToDetail('other_service')">
<image class="list-item-bg" src="@/static/image/bg-other-serve.png" mode="widthFix"></image> <image class="list-item-bg" src="@/static/image/bg-other-serve.png" mode="widthFix"></image>
<view class="list-item-fg"> <view class="list-item-fg">
@ -49,9 +46,6 @@
} }
}, },
onLoad() { onLoad() {
// todo: check
this.$fetch('querySummaryList')
this.fetchBanner() this.fetchBanner()
}, },
methods: { methods: {


+ 4
- 8
pages/index/index.vue View File

@ -28,8 +28,7 @@
<template v-if="gIdx === 0"> <template v-if="gIdx === 0">
<view class="card-item card-row" v-for="item in group.children" :key="item.id"> <view class="card-item card-row" v-for="item in group.children" :key="item.id">
<view class="flex info"> <view class="flex info">
<!-- todo -->
<image class="info-icon" :src="item.icon" mode="widthFix"></image>
<image class="info-icon" :src="item.image" mode="widthFix"></image>
<view class="info-label">{{ item.title }}</view> <view class="info-label">{{ item.title }}</view>
</view> </view>
<button class="btn" @click="jumpToCategory(group.id, item.id, item.title)">查看</button> <button class="btn" @click="jumpToCategory(group.id, item.id, item.title)">查看</button>
@ -38,8 +37,7 @@
<template v-else> <template v-else>
<view class="card-box"> <view class="card-box">
<view class="card-item info" v-for="item in group.children" :key="item.id" @click="jumpToCategory(group.id, item.id, item.title)"> <view class="card-item info" v-for="item in group.children" :key="item.id" @click="jumpToCategory(group.id, item.id, item.title)">
<!-- todo -->
<image class="info-icon" :src="item.icon" mode="widthFix"></image>
<image class="info-icon" :src="item.image" mode="widthFix"></image>
<view class="info-label">{{ item.title }}</view> <view class="info-label">{{ item.title }}</view>
</view> </view>
</view> </view>
@ -81,7 +79,6 @@
records.forEach(record => { records.forEach(record => {
if (record.hasChild == 1) { if (record.hasChild == 1) {
// todo: icon
const { id, title, createTime } = record const { id, title, createTime } = record
const index = groups.findIndex(group => group.id === id) const index = groups.findIndex(group => group.id === id)
if (index === -1) { if (index === -1) {
@ -91,10 +88,9 @@
groups[index].createTime = createTime groups[index].createTime = createTime
} }
} else { } else {
// todo: icon
const { pid, id, title, createTime } = record
const { pid, id, title, image, createTime } = record
const index = groups.findIndex(group => group.id === pid) const index = groups.findIndex(group => group.id === pid)
const item = { id, title, createTime }
const item = { id, title, image, createTime }
if (index === -1) { if (index === -1) {
groups.push({ id: pid, children: [item] }) groups.push({ id: pid, children: [item] })
} else { } else {


+ 2
- 5
pages/index/serve.vue View File

@ -6,12 +6,10 @@
<view class="header"> <view class="header">
<view class="title"> <view class="title">
<!-- todo: check key -->
<view class="title-text">吉光研途</view>
<view class="title-text">{{ configList.config_name }}</view>
<view class="title-line"></view> <view class="title-line"></view>
</view> </view>
<!-- todo: check key -->
<view class="desc">为您提供更专业优质靠谱的学术服务</view>
<view class="desc">{{ configList.config_desc }}</view>
</view> </view>
<!-- 轮播图 --> <!-- 轮播图 -->
@ -20,7 +18,6 @@
</view> </view>
<view class="list"> <view class="list">
<!-- todo: check list will change? -->
<view class="list-item" @click="jumpToDetail('academic_advising')"> <view class="list-item" @click="jumpToDetail('academic_advising')">
<image class="list-item-bg" src="@/static/image/bg-academic-advising.png" mode="widthFix"></image> <image class="list-item-bg" src="@/static/image/bg-academic-advising.png" mode="widthFix"></image>
<view class="list-item-fg"> <view class="list-item-fg">


+ 17
- 17
pages_order/case/index.vue View File

@ -2,11 +2,11 @@
<view class="page__view"> <view class="page__view">
<!-- 导航栏 --> <!-- 导航栏 -->
<navbar :title="title" leftClick @leftClick="$utils.navigateBack" bgColor="#4883F9" color="#FFFFFF" />
<navbar :title="details.title" leftClick @leftClick="$utils.navigateBack" bgColor="#4883F9" color="#FFFFFF" />
<!-- 轮播图 --> <!-- 轮播图 -->
<view class="swiper"> <view class="swiper">
<uv-swiper :list="bannerList" keyName="image" :autoplay="bannerList.length" :indicator="bannerList.length" indicatorMode="dot" indicatorActiveColor="#4883F9" indicatorInactiveColor="#FFFFFF" height="424rpx"></uv-swiper>
<uv-swiper :list="bannerList" keyName="image" :autoplay="bannerList.length > 1" :indicator="bannerList.length > 1" indicatorMode="dot" indicatorActiveColor="#4883F9" indicatorInactiveColor="#FFFFFF" height="424rpx"></uv-swiper>
</view> </view>
<!-- 学生情况 --> <!-- 学生情况 -->
@ -16,8 +16,7 @@
<view>学生情况</view> <view>学生情况</view>
</view> </view>
<view class="section-content"> <view class="section-content">
<!-- todo: check key -->
<uv-parse :content="detail.content"></uv-parse>
<uv-parse :content="details.studentCondition"></uv-parse>
</view> </view>
</view> </view>
@ -28,8 +27,7 @@
<view>服务项目</view> <view>服务项目</view>
</view> </view>
<view class="section-content"> <view class="section-content">
<!-- todo: check key -->
<uv-parse :content="detail.content"></uv-parse>
<uv-parse :content="details.serviceItem"></uv-parse>
</view> </view>
</view> </view>
@ -40,8 +38,7 @@
<view>服务过程</view> <view>服务过程</view>
</view> </view>
<view class="section-content"> <view class="section-content">
<!-- todo: check key -->
<uv-parse :content="detail.content"></uv-parse>
<uv-parse :content="details.serviceProcess"></uv-parse>
</view> </view>
</view> </view>
@ -52,8 +49,7 @@
<view>服务结果</view> <view>服务结果</view>
</view> </view>
<view class="section-content"> <view class="section-content">
<!-- todo: check key -->
<uv-parse :content="detail.content"></uv-parse>
<uv-parse :content="details.serviceResult"></uv-parse>
</view> </view>
</view> </view>
@ -64,8 +60,7 @@
<view>服务感受</view> <view>服务感受</view>
</view> </view>
<view class="section-content"> <view class="section-content">
<!-- todo: check key -->
<uv-parse :content="detail.content"></uv-parse>
<uv-parse :content="details.serviceFeeling"></uv-parse>
</view> </view>
</view> </view>
@ -81,20 +76,23 @@
}, },
data() { data() {
return { return {
title: '',
bannerList: [],
detail: {},
details: {},
} }
}, },
onLoad({ articleId }) { onLoad({ articleId }) {
this.getData(articleId) this.getData(articleId)
}, },
computed: {
bannerList() {
const { image } = this.details || {}
return (image || '').split(',').map(url => ({ image: url }))
}
},
methods: { methods: {
async getData(articleId) { async getData(articleId) {
try { try {
// todo
await this.$fetch('queryAriticleById', { articleId })
this.details = await this.$fetch('queryAriticleById', { articleId })
} catch (err) { } catch (err) {
} }
@ -114,6 +112,8 @@
.swiper { .swiper {
margin: 20rpx 18rpx 47rpx 18rpx; margin: 20rpx 18rpx 47rpx 18rpx;
border-radius: 25rpx;
overflow: hidden;
/deep/ .uv-swiper-indicator__wrapper__dot { /deep/ .uv-swiper-indicator__wrapper__dot {
width: 15rpx; width: 15rpx;


+ 58
- 41
pages_order/thesis/index.vue View File

@ -2,11 +2,11 @@
<view class="page__view"> <view class="page__view">
<!-- 导航栏 --> <!-- 导航栏 -->
<navbar :title="title" leftClick @leftClick="$utils.navigateBack" bgColor="#4883F9" color="#FFFFFF" />
<navbar :title="details.title" leftClick @leftClick="$utils.navigateBack" bgColor="#4883F9" color="#FFFFFF" />
<!-- 轮播图 --> <!-- 轮播图 -->
<view class="swiper"> <view class="swiper">
<uv-swiper :list="bannerList" keyName="image" :autoplay="bannerList.length" :indicator="bannerList.length" indicatorMode="dot" indicatorActiveColor="#4883F9" indicatorInactiveColor="#FFFFFF" height="424rpx"></uv-swiper>
<uv-swiper :list="bannerList" keyName="image" :autoplay="bannerList.length > 1" :indicator="bannerList.length > 1" indicatorMode="dot" indicatorActiveColor="#4883F9" indicatorInactiveColor="#FFFFFF" height="424rpx"></uv-swiper>
</view> </view>
<!-- 发表全流程辅导 --> <!-- 发表全流程辅导 -->
@ -14,11 +14,7 @@
<view class="section-header">发表全流程辅导</view> <view class="section-header">发表全流程辅导</view>
<view class="section-content paragraph process"> <view class="section-content paragraph process">
<view class="paragraph"> <view class="paragraph">
<view class="flex difficulty">
<view>难度</view>
<uv-rate :value="process.difficulty" size="28rpx" activeColor="#4883F9" :allowHalf="true" :minCount="0.5" readonly></uv-rate>
</view>
<view>{{ process.content }}</view>
<uv-parse :content="details.process"></uv-parse>
</view> </view>
</view> </view>
</view> </view>
@ -31,9 +27,9 @@
</view> </view>
<view class="section-content direction"> <view class="section-content direction">
<view class="table"> <view class="table">
<view class="table-row" v-for="row in direction" :key="row.id">
<view class="table-row" v-for="row in details.educationTargetList" :key="row.id">
<view class="table-cell">{{ row.title }}</view> <view class="table-cell">{{ row.title }}</view>
<view class="table-cell">{{ row.desc }}</view>
<view class="table-cell">{{ row.description }}</view>
</view> </view>
</view> </view>
</view> </view>
@ -46,18 +42,18 @@
<view>师资介绍</view> <view>师资介绍</view>
</view> </view>
<view class="section-content teachers"> <view class="section-content teachers">
<view class="card" v-for="item in teachers" :key="item.id">
<view class="card" v-for="item in details.educationTeacherList" :key="item.id">
<view class="info"> <view class="info">
<view class="title"> <view class="title">
<view class="name">{{ item.name }}</view>
<view class="name">{{ item.title }}</view>
<view class="label"> <view class="label">
<view class="label-text">{{ item.label }}</view>
<view class="label-text">{{ item.career }}</view>
<view class="label-line"></view> <view class="label-line"></view>
</view> </view>
</view> </view>
<view class="tag"> <view class="tag">
<image class="tag-icon" src="@/static/image/icon-degree.png" mode="widthFix"></image> <image class="tag-icon" src="@/static/image/icon-degree.png" mode="widthFix"></image>
<vie>{{ item.degree }}</vie>
<vie>{{ item.qualification }}</vie>
</view> </view>
<view class="desc"> <view class="desc">
<view>专业经历</view> <view>专业经历</view>
@ -79,12 +75,9 @@
</view> </view>
<view class="section-content"> <view class="section-content">
<view class="table"> <view class="table">
<view class="table-row" v-for="row in course" :key="row.id">
<view class="table-cell">
<view>{{ row.title }}</view>
<view>{{ `(共${row.length}课时)` }}</view>
</view>
<view class="table-cell">{{ row.desc }}</view>
<view class="table-row" v-for="row in details.educationCourseList" :key="row.id">
<view class="table-cell">{{ row.title }}</view>
<view class="table-cell">{{ row.description }}</view>
</view> </view>
</view> </view>
</view> </view>
@ -98,7 +91,7 @@
</view> </view>
<view class="section-content target-audience"> <view class="section-content target-audience">
<view class="paragraph"> <view class="paragraph">
{{ targetAudience }}
<uv-parse :content="details.suit"></uv-parse>
</view> </view>
</view> </view>
</view> </view>
@ -110,19 +103,19 @@
<view>期刊推荐</view> <view>期刊推荐</view>
</view> </view>
<view class="section-content journal"> <view class="section-content journal">
<view class="box" v-for="item in journal" :key="item.id">
<view class="box" v-for="item in details.educationPeriodicalList" :key="item.id">
<view class="card"> <view class="card">
<view class="top"> <view class="top">
<view class="pic"> <view class="pic">
<image class="img" :src="item.image" mode="aspectFill"></image> <image class="img" :src="item.image" mode="aspectFill"></image>
</view> </view>
<view class="info"> <view class="info">
<view class="name">{{ item.name }}</view>
<view class="desc">{{ item.desc }}</view>
<view class="name">{{ item.title }}</view>
<view class="desc">{{ item.shortTitle }}</view>
</view> </view>
</view> </view>
<view class="main"> <view class="main">
{{ item.intro }}
{{ item.description }}
</view> </view>
</view> </view>
</view> </view>
@ -136,7 +129,7 @@
<view>附加材料</view> <view>附加材料</view>
</view> </view>
<view class="section-content attachment"> <view class="section-content attachment">
<view class="flex file" v-for="item in attachment" :key="item.id">
<view class="flex file" v-for="item in details.educationDocumentList" :key="item.id">
<view class="file-info"> <view class="file-info">
<template v-if="item.type == 'pdf'"> <template v-if="item.type == 'pdf'">
<image class="file-icon" src="@/static/image/icon-pdf.png" mode="widthFix"></image> <image class="file-icon" src="@/static/image/icon-pdf.png" mode="widthFix"></image>
@ -145,11 +138,11 @@
<image class="file-icon" src="@/static/image/icon-word.png" mode="widthFix"></image> <image class="file-icon" src="@/static/image/icon-word.png" mode="widthFix"></image>
</template> </template>
<view class="file-detail"> <view class="file-detail">
<view class="title">{{ item.name }}</view>
<view class="desc">{{ `${item.type} ${item.size}MB` }}</view>
<view class="title">{{ item.title }}</view>
<view class="desc">{{ `${getFileType(item.document)} ${item.size || '-'}MB` }}</view>
</view> </view>
</view> </view>
<button class="btn" @click="downloadFile(item.url)">下载</button>
<button class="btn" @click="downloadFile(item.document)">下载</button>
</view> </view>
</view> </view>
</view> </view>
@ -160,31 +153,34 @@
export default { export default {
data() { data() {
return { return {
title: '',
bannerList: [],
process: {},
direction: [],
teachers: [],
course: [],
targetAudience: '',
journal: [],
attachment: [],
details: {},
} }
}, },
onLoad({ thesisId }) { onLoad({ thesisId }) {
this.getData(thesisId) this.getData(thesisId)
}, },
computed: {
bannerList() {
const { image } = this.details || {}
return (image || '').split(',').map(url => ({ image: url }))
}
},
methods: { methods: {
async getData(thesisId) { async getData(thesisId) {
try { try {
// todo
await this.$fetch('queryThesisById', { thesisId })
this.details = await this.$fetch('queryThesisById', { thesisId })
} catch (err) { } catch (err) {
} }
}, },
getFileType(fileName) {
const pdfReg = /(.pdf)$/g
// const officeReg = /(doc|docx|ppt|pptx|xls|xlsx)$/g
return pdfReg.test(fileName) ? 'pdf' : ''
},
downloadFile(url) { downloadFile(url) {
console.log('downloadFile', url) console.log('downloadFile', url)
uni.downloadFile({ uni.downloadFile({
@ -219,6 +215,8 @@
.swiper { .swiper {
margin: 20rpx 18rpx 32rpx 18rpx; margin: 20rpx 18rpx 32rpx 18rpx;
border-radius: 25rpx;
overflow: hidden;
/deep/ .uv-swiper-indicator__wrapper__dot { /deep/ .uv-swiper-indicator__wrapper__dot {
width: 15rpx; width: 15rpx;
@ -389,7 +387,7 @@
} }
.pic { .pic {
padding: 48rpx 9rpx 48rpx 0;
margin: 48rpx 9rpx 48rpx 0;
width: 253rpx; width: 253rpx;
height: 345rpx; height: 345rpx;
border-radius: 127rpx; border-radius: 127rpx;
@ -409,7 +407,7 @@
} }
.pic { .pic {
padding: 48rpx 0 48rpx 9rpx;
margin: 48rpx 0 48rpx 9rpx;
} }
} }
} }
@ -449,6 +447,25 @@
.info { .info {
height: 181rpx; height: 181rpx;
padding: 0 14rpx 0 266rpx; padding: 0 14rpx 0 266rpx;
.name {
padding-left: 6rpx;
font-size: 32rpx;
font-weight: 700;
color: #000000;
}
.desc {
margin-top: 24rpx;
font-size: 28rpx;
font-weight: 700;
color: #707070;
overflow: hidden;
text-overflow: ellipsis;
display:-webkit-box; //
-webkit-box-orient:vertical; //--
-webkit-line-clamp:3; //
}
} }
} }


+ 4
- 14
pages_order/thesis/search.vue View File

@ -18,10 +18,10 @@
<view class="main"> <view class="main">
<template v-if="total"> <template v-if="total">
<view class="flex card" v-for="item in list" :key="item.id" @click="jumpToDetail(item.thesisId)">
<view class="flex card" v-for="item in list" :key="item.id" @click="jumpToDetail(item.id)">
<view class="left"> <view class="left">
<view class="title">{{ item.title }}</view> <view class="title">{{ item.title }}</view>
<view class="content">{{ item.description }}</view>
<view class="content">{{ item.shortTitle }}</view>
</view> </view>
<view class="right"> <view class="right">
<image class="img" :src="item.image" mode="aspectFill"></image> <image class="img" :src="item.image" mode="aspectFill"></image>
@ -50,8 +50,7 @@
queryParams: { queryParams: {
pageNo: 1, pageNo: 1,
pageSize: 10, pageSize: 10,
title: null,
cid: null,
title: '',
}, },
mixinsListApi: 'queryThesisList', mixinsListApi: 'queryThesisList',
} }
@ -78,16 +77,6 @@
this.queryParams.title = this.keyword this.queryParams.title = this.keyword
this.getData() this.getData()
}, },
getDataThen(list) {
// todo: check
const reg = /\<[^>]*\>/g
this.list = list.map(item => {
const description = item.description.replace(reg, '')
return { ...item, description }
})
},
jumpToDetail(thesisId) { jumpToDetail(thesisId) {
uni.navigateTo({ uni.navigateTo({
url: `/pages_order/thesis/index?thesisId=${thesisId}` url: `/pages_order/thesis/index?thesisId=${thesisId}`
@ -136,6 +125,7 @@
} }
.card { .card {
align-items: flex-start;
background: #ffffff; background: #ffffff;
border-radius: 20rpx; border-radius: 20rpx;
box-shadow: 0rpx 3rpx 6rpx 0rpx rgba(0,0,0,0.16); box-shadow: 0rpx 3rpx 6rpx 0rpx rgba(0,0,0,0.16);


+ 1
- 2
store/store.js View File

@ -27,8 +27,7 @@ const store = new Vuex.Store({
} }
if (res.code == 200) { if (res.code == 200) {
res.result?.records?.forEach(n => { res.result?.records?.forEach(n => {
configList[n.keyName] = n.keyContent;
configList[n.keyName + '_keyValue'] = n.keyValue;
configList[n.paramCode] = n.paramImage || n.paramText || n.paramTextarea;
}); });
} }
state.configList = configList state.configList = configList


Loading…
Cancel
Save