yujialong 2 years ago
parent 9f468ffd0f
commit fab6e0aa3d
  1. 4
      apis/modules/article.js
  2. 4
      apis/request.js
  3. 4
      config/request.js
  4. 5
      libs/util.js
  5. 4
      order/editCourse/editCourse.vue
  6. 10
      order/orderDetail/orderDetail.vue
  7. 40
      pages.json
  8. 100
      pages/index/index.vue
  9. 71
      pages/info/info.vue
  10. 6
      pages/login/login.vue
  11. 11
      pages/person/person.vue
  12. 94
      pages/plans/plans.vue
  13. 8
      pages/products/products.vue
  14. 42
      pages/reg/reg.vue
  15. 68
      pages/study/study.vue
  16. BIN
      static/image/info-bg.jpg
  17. 44
      styles/common.scss
  18. 0
      team/addStaff/addStaff.vue
  19. 77
      team/article/article.vue
  20. 50
      team/qrcode/qrcode.vue
  21. 110
      team/scheme/scheme.vue
  22. 11
      team/send/send.vue
  23. 3
      team/teams/teams.vue

@ -16,3 +16,7 @@ export const queryClassificationByType = id => {
export const schemeList = data => {
return post('nakadai/nakadai/partner/schemeManagement/schemeList', data)
}
export const schemeFindById = id => {
return post('nakadai/nakadai/partner/schemeManagement/findById?id=' + id)
}

@ -19,8 +19,8 @@ const request = options => {
const { url } = options
uni.request({
header,
url: (otherUrl.find(e => url.includes(e)) ? 'http://192.168.31.116:9000/' : config.baseURL) + url,
// url: config.baseURL + url,
// url: (otherUrl.find(e => url.includes(e)) ? 'http://192.168.31.116:9000/' : config.baseURL) + url,
url: config.baseURL + url,
method: options.method || 'GET', // 请求类型,默认为GET
data: options.data || {}, // 请求参数,默认空对象
success: ({ data }) => {

@ -6,8 +6,8 @@
export default {
// baseURL: 'https://huorantech.cn/',
// baseURL: 'http://192.168.31.151:9000/',
baseURL: 'http://121.37.12.51/',
baseURL: 'http://192.168.31.151:9000/',
// baseURL: 'http://121.37.12.51/',
headers: {
'Content-Type': 'application/json;charset=UTF-8'
},

@ -7,6 +7,7 @@ const files = [
'https://huorantech.cn/%E5%A4%A7%E6%95%B0%E6%8D%AE%E7%AE%A1%E7%90%86%E4%B8%8E%E5%BA%94%E7%94%A8%E4%B8%93%E4%B8%9A%E5%BB%BA%E8%AE%BE%E6%96%B9%E6%A1%88.docx', // 大数据
'https://huorantech.cn/%E9%87%91%E8%9E%8D%E7%A7%91%E6%8A%80%E5%AE%9E%E9%AA%8C%E5%AE%A4%E5%BB%BA%E8%AE%BE%E6%96%B9%E6%A1%88V2.0.docx', // 金融科技
]
const docExts = ['doc', 'xls', 'ppt', 'pdf', 'docx', 'xlsx', 'pptx']
export default {
// 路由跳转
to(url) {
@ -71,6 +72,10 @@ export default {
getIcon(e) {
return e.miniProgramPictureAddress || (e.productType === 2 ? Product.dataIcon : Product.normalIcon)
},
// 判断文件类型是否能够通过uni.openDocument打开(doc, xls, ppt, pdf, docx, xlsx, pptx)
isDoc(ext) {
return docExts.includes(ext)
},
// 预览文档
openFile(id) {
uni.showLoading({

@ -275,7 +275,7 @@
row.settlementPrice = this.$util.handleNaN(sPrice)
// *10%
if (row.settlementPrice) {
row.serviceFee = (row.finalPrice * (this.rate ? this.rate / 100 : 1)).toFixed(2)
row.serviceFee = (row.finalPrice * (this.rate / 100)).toFixed(2)
}
}
},
@ -284,7 +284,7 @@
getPartnerTeamRates({
teamId: uni.getStorageSync('team').teamId
}).then(({ teamRates }) => {
this.rate = teamRates.annualMarketingFee
this.rate = teamRates.annualMarketingFee || 0
}).catch(res => {})
},
//

@ -287,7 +287,7 @@
}
// 3push(0-> 1- 2 )
list.map(e => {
e.serviceFee = (e.settlementPrice * (this.rate ? this.rate / 100 : 1)).toFixed(2) // != 0 &&
e.serviceFee = (e.settlementPrice * (this.rate / 100)).toFixed(2) // != 0 &&
const type = e.productType
!type ?
courses.theory.list.push(e) :
@ -349,7 +349,7 @@
getPartnerTeamRates({
teamId: uni.getStorageSync('team').teamId
}).then(({ teamRates }) => {
this.rate = teamRates.annualMarketingFee
this.rate = teamRates.annualMarketingFee || 0
}).catch(res => {})
},
//
@ -427,9 +427,9 @@
profit += +e.finalPrice - curPurchase
}
})
form.purchaseCost = Math.round(purchase)
form.profit = Math.round(profit)
form.orderAmount = +form.purchaseCost + +form.profit
form.purchaseCost = purchase
form.profit = profit
form.orderAmount = (+form.purchaseCost + +form.profit).toFixed(2)
},
//
handleErr(val) {

@ -40,14 +40,6 @@
"enablePullDownRefresh": false
}
},
{
"path" : "pages/addStaff/addStaff",
"style" :
{
"navigationBarTitleText": "邀请成员",
"enablePullDownRefresh": false
}
},
{
"path" : "pages/plans/plans",
"style" :
@ -63,14 +55,6 @@
"navigationBarTitleText": "我的",
"enablePullDownRefresh": false
}
},
{
"path" : "pages/send/send",
"style" :
{
"navigationBarTitleText": "下载发送",
"enablePullDownRefresh": false
}
}
,{
"path" : "pages/reg/reg",
@ -181,6 +165,14 @@
"enablePullDownRefresh": true
}
},
{
"path" : "addStaff/addStaff",
"style" :
{
"navigationBarTitleText": "邀请成员",
"enablePullDownRefresh": false
}
},
{
"path" : "account/account",
"style" :
@ -221,6 +213,22 @@
"enablePullDownRefresh": false
}
}
,{
"path" : "scheme/scheme",
"style" :
{
"navigationBarTitleText": "",
"enablePullDownRefresh": false
}
},
{
"path" : "send/send",
"style" :
{
"navigationBarTitleText": "下载发送",
"enablePullDownRefresh": false
}
}
]
}
],

@ -33,11 +33,15 @@
</ul>
<view class="panel study-panel">
<view class="title" @click="toPanel(1)">
<view class="title" @click="toStudy">
<view class="left">
<image class="icon" src="@/static/image/index/index8.png" mode="widthFix"></image>
学习速递
</view>
<view class="right">
<text>全部</text>
<image class="arrow" src="@/static/image/index/index10.png" mode="widthFix"></image>
</view>
</view>
<view class="study">
<scroll-view class="scroll" scroll-x="true">
@ -65,21 +69,21 @@
<view class="line">
<view class="item">
<view class="name">本月新增试用客户</view>
<view class="val">{{ sell.trialUser }}</view>
<view class="val">{{ sell.trialUser || 0 }}</view>
</view>
<view class="item">
<view class="name">本月成单客户</view>
<view class="val">{{ sell.regularUser }}</view>
<view class="val">{{ sell.regularUser || 0 }}</view>
</view>
</view>
<view class="line">
<view class="item">
<view class="name">本月新增产品试用</view>
<view class="val">{{ sell.trialProduct }}</view>
<view class="val">{{ sell.trialProduct || 0 }}</view>
</view>
<view class="item">
<view class="name">本月成交订单产品</view>
<view class="val">{{ sell.officialProduct }}</view>
<view class="val">{{ sell.officialProduct || 0 }}</view>
</view>
</view>
</view>
@ -96,20 +100,20 @@
</view>
<view class="data second">
<view class="line">
<view class="item">
<view class="val">{{ analysis.finalPrice }}</view>
<view class="item item1">
<view class="val">{{ handleNum(analysis.finalPrice) }}</view>
<view class="name">总成交金额</view>
</view>
<view class="item">
<view class="val">{{ analysis.settlementPrice }}</view>
<view class="item item2">
<view class="val">{{ handleNum(analysis.settlementPrice) }}</view>
<view class="name">总结算金额</view>
</view>
<view class="item">
<view class="val">{{ analysis.marketingServiceCharge }}</view>
<view class="item equal">
<view class="val">{{ handleNum(analysis.marketingServiceCharge) }}</view>
<view class="name">市场服务费</view>
</view>
<view class="item">
<view class="val">{{ analysis.projectBenefit }}</view>
<view class="val">{{ handleNum(analysis.projectBenefit) }}</view>
<view class="name">项目收益</view>
</view>
</view>
@ -128,17 +132,22 @@
data() {
return {
per: true, //
// teamId: uni.getStorageSync('team').teamId || '',
teamId: '',
teamId: uni.getStorageSync('teamId') || '',
list: [],
id: '',
teamList: [],
studies: [],
sell: {},
analysis: {}
analysis: {
finalPrice: 0,
settlementPrice: 0,
marketingServiceCharge: 0,
projectBenefit: 0,
}
}
},
onShow() {
console.log(444, this.teamId)
this.per = true
this.getInfo()
},
@ -155,7 +164,7 @@
//
getAuth() {
uni.getStorageSync('token') && getUserRolesPermissionMenu({
teamId: this.list.find(e => e.teamId === this.teamId).partnerClassificationId,
teamId: this.list.find(e => e.teamId == this.teamId).partnerClassificationId,
platformId: 4
}).then(({ permissionMenu }) => {
uni.hideLoading()
@ -188,7 +197,7 @@
const n = e.partnerClassificationList
e.id = n.id
// parnerIdidteamIduni.getStorageSync('team').partnerId使
e.teamId = e.isTeam == 1 ? e.partnerClassificationId : n.id
e.teamId = e.isTeam == 1 ? +e.partnerClassificationId : n.id
e.partnerClassificationName = n.partnerClassificationName
delete e.partnerClassificationList
})
@ -197,7 +206,7 @@
* @description 如果是第一次进则默认选中第一个团队并把该团队的信息存入缓存
* 或者团队列表里没有该id则说明超管已经被转让也需要重新选中团队
*/
if (!this.teamId || !data.find(e => e.teamId == this.teamId)) {
if (!uni.getStorageSync('team') || !data.find(e => e.teamId == this.teamId)) {
this.teamId = data[0].teamId
uni.setStorageSync('team', data[0])
}
@ -219,15 +228,21 @@
//
getStudy() {
partnerOperatingList({
createTimeSort: 'desc',
pageNum: 1,
pageSize: 5,
querySource: 4,
typeId: 1,
articleNameSort: 'desc'
}).then(({ data }) => {
this.studies = data.records
}).then(({ page }) => {
this.studies = page
}).catch(e => {})
},
//
toStudy() {
uni.switchTab({
url: '/pages/study/study'
})
},
//
toDetail(item) {
this.$util.to(`/team/article/article?id=` + item.id)
@ -241,13 +256,18 @@
this.sell = res
}).catch(e => {})
},
// 10000 + w
handleNum(num) {
// return num ? parseInt(num / 10000) + 'w' : 0
return num
},
//
getAnalysis() {
annualOperatingAnalysis({
businessManagerId: uni.getStorageSync('team').partnerId,
teamId: this.teamId,
}).then(({ data }) => {
this.analysis = data
if (data) this.analysis = data
}).catch(e => {})
},
//
@ -387,12 +407,40 @@
}
}
.second {
padding: 38rpx 36rpx;
.line {
justify-content: space-between;
}
padding: 38rpx 10rpx;
.item {
position: relative;
text-align: center;
&:after {
content: '';
position: absolute;
bottom: 14rpx;
right: -35rpx;
width: 22rpx;
height: 2px;
background-color: #ccc;
}
&.item1 {
margin-right: 53rpx;
}
&.item2 {
margin-right: 54rpx;
}
&.equal {
margin-right: 50rpx;
&:after {
bottom: 6rpx;
right: -39rpx;
height: 2px;
padding-bottom: 5px;
border-bottom: 2px solid #ccc;
background-clip:content-box;
box-sizing: content-box;
}
}
&:last-child:after {
display: none;
}
}
.val {
margin-bottom: 10rpx;

@ -17,10 +17,10 @@
<template v-if="list.length">
<view class="list">
<view v-for="(item, i) in list" :key="i" class="item" @click="toDetail(item)">
<view class="title">{{ item.title }}</view>
<view class="title ell">{{ item.title }}</view>
<view class="texts">
<view class="left">
<view class="des" v-html="item.mainBody"></view>
<view class="des">{{ item.mainBody }}</view>
<view class="metas">
<text class="date">{{ item.releaseTime }}</text>
<view v-if="item.labelName" class="labels">
@ -51,18 +51,13 @@
export default {
data() {
return {
classifications: [
{
id: '',
classificationName: '不限'
}
],
classifications: [],
active: '',
typeVisible: false,
reachBottom: 0, // 0->,1->,-1->
status: 'more', // more|loading|noMore
searchTimer: null,
articleNameSort: 'desc',
articleNameSort: '',
keyword: '',
list: [],
page: 1,
@ -94,6 +89,9 @@
}
},
onShow() {
this.keyword = ''
this.active = ''
this.typeVisible = false
this.initRole()
},
methods: {
@ -118,16 +116,17 @@
uni.showLoading({
title: '加载中'
})
partnerOperatingList(data).then(({ data }) => {
partnerOperatingList(data).then(({ page, total }) => {
uni.hideLoading()
// list
const list = data.records
const list = page
list.forEach(e => {
if (e.labelName) e.labelName = e.labelName.split(',').slice(0, 2) //
e.mainBody = (e.summary || e.mainBody).replace(/(<[^>]+>)|((&nbsp;)+)/g , '')
})
this.list = this.reachBottom > 0 ? [...this.list, ...list] : list
this.page++ // page+1
const noMore = this.list.length === data.total //
const noMore = this.list.length === total //
this.status = noMore ? 'noMore' : 'more' // noMore
this.reachBottom = noMore ? -1 : 0 // -1
}).catch(e => {
@ -142,6 +141,12 @@
//
getClassification() {
queryClassificationByType(2).then(({ data }) => {
this.classifications = [
{
id: '',
classificationName: '不限'
}
]
this.classifications.push(...data)
}).catch(e => {})
},
@ -166,7 +171,7 @@
},
//
toDetail(item) {
this.$util.to(`/team/article/article?id=` + item.id)
this.$util.to(`/team/article/article?info=1&id=` + item.id)
},
}
}
@ -215,44 +220,6 @@
width: 40rpx;
}
}
.type-popup {
z-index: 10;
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
padding: 10rpx;
background-color: #fff;
.close {
position: absolute;
top: 50rpx;
right: 50rpx;
}
.title {
margin: 150rpx 20rpx 30rpx;
font-size: 30rpx;
color: #333;
}
.types {
display: flex;
flex-wrap: wrap;
}
.item {
width: calc((100% - 80rpx) / 3);
margin: 10rpx;
font-size: 28rpx;
line-height: 3;
text-align: center;
color: #1f1f1f;
background-color: #dbebff;
border-radius: 2px;
&.active {
color: #fff;
background-color: #007EFF;
}
}
}
.list {
background-color: #fff;
.item {
@ -274,6 +241,7 @@
width: calc(100% - 280rpx);
}
.title {
margin-bottom: 20rpx;
font-size: 32rpx;
font-weight: 600;
color: #333;
@ -286,6 +254,7 @@
overflow: hidden;
}
.metas {
margin-top: 10rpx;
display: flex;
justify-content: space-between;
align-items: center;

@ -45,7 +45,7 @@
}
},
onShow() {
// uni.setStorageSync('token', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1c2VyIiwiaWF0IjoxNjc5OTcwMDM5LCJleHAiOjE2ODAwMTMyMzksImFjY291bnRJZCI6IjIwNCJ9.sO9Nguaw5dNlWWE2Jg3599PE4D-njPcsNI8ODH9hJD8')
uni.setStorageSync('token', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1c2VyIiwiaWF0IjoxNjgwNTgwODQ5LCJleHAiOjE2ODA2MjQwNDksImFjY291bnRJZCI6IjIxNiJ9.oyssva0Fdvs0i8ud1mU_TF693qMGzx76xyYJiBbzeBI')
//
this.checkLogin()
},
@ -150,6 +150,7 @@
//
toReg() {
this.isReg = true
if (this.agree.length) {
const that = this
uni.getUserProfile({
lang: 'zh_CN',
@ -185,6 +186,9 @@
that.$util.errMsg('登录授权失败!')
}
})
} else {
this.$util.errMsg('请先阅读勾选协议!')
}
},
toAgreement(id) {
this.$util.openFile(id)

@ -17,6 +17,7 @@
<image class="icon" src="@/static/image/person4.png" mode=""></image>
<text class="name">我的团队</text>
</view>
<uni-icons type="right" size="15" color="#ccc"></uni-icons>
</view>
<view v-if="auth('我的:团队收益')" class="item">
<view class="left">
@ -43,14 +44,14 @@
<image class="icon" src="@/static/image/person6.png" mode=""></image>
<text class="name">市场服务费</text>
</view>
<text class="val">项目抽成{{ my.teamInfo.annualMarketingFee || 0 }}%</text>
<text class="val">{{ my.teamInfo.annualMarketingFee ? '项目抽成' + my.teamInfo.annualMarketingFee + '%' :'-' }}</text>
</view>
<view v-if="auth('我的:团队年费')" class="item">
<view class="left">
<image class="icon" src="@/static/image/person7.png" mode=""></image>
<text class="name">团队年费</text>
</view>
<text class="val">固定年费{{ my.teamInfo.annualTeamFee || 0 }}w</text>
<text class="val">{{ my.teamInfo.annualTeamFee ? '固定年费' + my.teamInfo.annualTeamFee + 'w' : '-' }}</text>
</view>
<view v-if="auth('我的:业务省份')" class="item">
<view class="left">
@ -124,6 +125,7 @@
}
},
onShow() {
console.log(11, uni.getStorageSync('avatar'))
this.per = true
this.initRole()
this.disabled = uni.getStorageSync('team').isTeam == 0 //
@ -145,8 +147,12 @@
teamId
}).then(({ my }) => {
this.my = my
this.avatar = my.info.userAvatars
uni.setStorageSync('avatar', my.info.userAvatars)
this.provinceId = my.teamInfo.provinceId
this.cityId = my.teamInfo.cityId
uni.setStorageSync('provinceId', this.provinceId)
uni.setStorageSync('cityId', this.cityId)
this.getProvince()
this.provinceId && this.getCity()
}).catch(e => {})
@ -155,6 +161,7 @@
onChooseAvatar(e) {
this.avatar = e.detail.avatarUrl
updateAvatars(e.detail.avatarUrl).then(res => {}).catch(e => {})
this.getInfo()
},
//
toSet() {

@ -5,18 +5,19 @@
</view>
<ul class="tab">
<li v-for="(tab, i) in classifications" :class="{active: curTab === tab.id}" @click="tabChange(tab)">{{ tab.classificationName }}</li>
<li v-for="(tab, i) in classifications.slice(0, 4)" :class="{active: active === tab.id}" @click="tabChange(tab)">{{ tab.classificationName }}</li>
<image class="unfold" src="@/static/image/unfold.png" mode="widthFix" @click="typeVisible = true"></image>
</ul>
<view v-if="list.length" class="list">
<view v-for="(item, i) in list" class="item" @click="toDetail(i + 2)">
<view class="c-name">{{ item.title }}</view>
<view v-for="(item, i) in list" class="item" @click="toDetail(item)">
<view class="c-name ell">{{ item.title }}</view>
<view class="content">
<view class="info">
<view class="line">
<view class="name">产品</view>
<view class="val ell-wrap">
<view :class="{ell: !item.toggle}" v-html="item.product"></view>
<view :class="['product', {ell: !item.toggle}]" v-html="item.product"></view>
<view v-if="item.product.length > 14" class="toggle" @click.stop="toggle(item)">{{ item.toggle ? '收起' : '展开' }}</view>
</view>
</view>
@ -29,11 +30,19 @@
<view class="val">{{ item.applicableMajor }}</view>
</view>
</view>
<view class="detail" @click.stop="toEmail(i)">下载</view>
<!-- <view class="detail" @click.stop="toEmail(i)">下载</view> -->
</view>
</view>
</view>
<empty v-else></empty>
<view class="type-popup" v-show="typeVisible">
<uni-icons class="close" type="closeempty" size="20" color="#757575" @click="closeType"></uni-icons>
<view class="title">所属分类</view>
<view class="types">
<view v-for="(item, i) in classifications" :key="i" :class="['item', {active: active == item.id}]" @click="classificationClick(item)">{{ item.classificationName }}</view>
</view>
</view>
</view>
</template>
@ -42,13 +51,9 @@
export default {
data() {
return {
curTab: '',
classifications: [
{
id: '',
classificationName: '不限'
}
],
active: '',
typeVisible: false,
classifications: [],
reachBottom: 0, // 0->,1->,-1->
status: 'more', // more|loading|noMore
searchTimer: null,
@ -83,25 +88,29 @@
}
},
onShow() {
this.keyword = ''
this.active = ''
this.initList()
this.getClassification()
},
methods: {
getList() {
const data = {
uni.showLoading({
title: '加载中'
})
schemeList({
keyWord: this.keyword,
pageNum: this.page,
pageSize: this.pageSize,
querySource: 4,
classificationId: this.curTab
}
uni.showLoading({
title: '加载中'
})
schemeList(data).then(({ data }) => {
classificationId: this.active
}).then(({ data }) => {
uni.hideLoading()
// list
const list = data.records
list.forEach(e => {
e.toggle = false
})
this.list = this.reachBottom > 0 ? [...this.list, ...list] : list
this.page++ // page+1
const noMore = this.list.length === data.total //
@ -119,17 +128,33 @@
//
getClassification() {
queryClassificationByType(3).then(({ data }) => {
this.classifications = [
{
id: '',
classificationName: '不限'
}
]
this.classifications.push(...data)
}).catch(e => {})
},
//
classificationClick(item, query) {
this.active = item.id
query && this.initList()
},
//
closeType() {
this.typeVisible = false
this.initList()
},
// tab
tabChange(tab) {
this.curTab = tab.id
this.active = tab.id
this.initList()
},
//
toDetail(id) {
this.$util.openFile(id)
toDetail(item) {
this.$util.to(`/team/scheme/scheme?id=` + item.id)
},
//
toEmail(id) {
@ -144,6 +169,21 @@
</script>
<style scoped lang="scss">
.tab {
position: relative;
justify-content: flex-start;
li {
padding: 0 30rpx;
}
.unfold {
position: absolute;
top: 32rpx;
right: 12rpx;
right: 44rpx;
width: 40rpx;
}
}
.list {
background-color: #fff;
.item {
@ -172,15 +212,15 @@
color: #999;
}
.val {
max-width: 88%;
font-size: 28rpx;
color: #333;
}
.ell {
height: 38rpx;
.product {
max-width: 67vw;
white-space: pre-wrap;
&.ell {
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
}
}
.toggle {
margin-top: 10rpx;

@ -20,7 +20,7 @@
<text class="name">产品简介</text>
<view class="val ell-wrap">
<view :class="{ell: !item.toggle}">{{ item.briefIntroduction }}</view>
<view class="toggle" @click="toggle(item)">{{ item.toggle ? '收起' : '展开' }}</view>
<view v-if="item.briefIntroduction.length > 14" class="toggle" @click="toggle(item)">{{ item.toggle ? '收起' : '展开' }}</view>
</view>
</view>
<view class="line">
@ -33,11 +33,7 @@
</view>
<view class="line">
<text class="name">结算方式</text>
<text class="val">{{ item.settlementMethod ? '比例分成' : '结算单价' }}</text>
</view>
<view class="line">
<text class="name">结算金额</text>
<text class="val">{{ item.settlementPrice }}</text>
<text class="val">{{ item.settlementMethod ? '比例分成' : '结算单价' }} {{ item.settlementPrice }}/</text>
</view>
<view class="line">
<text class="name">供应厂商</text>

@ -8,18 +8,20 @@
<view>
<uni-forms>
<uni-forms-item label="姓名">
<uni-easyinput type="text" v-model="form.userName" placeholder="请输入姓名" />
<uni-easyinput type="text" v-model="form.userName" placeholder="请输入姓名" :disabled="exist" />
</uni-forms-item>
<uni-forms-item label="业务省份">
<uni-data-picker placeholder="请选择省份" popup-title="请选择省份" preload :localdata="provinces" :map="{text: 'provinceName', value: 'provinceId'}" v-model="form.provinceId" @change="getCity"></uni-data-picker>
<view v-if="form.isTeam" class="location">{{ form.provinceName }}</view>
<uni-data-picker v-else placeholder="请选择省份" popup-title="请选择省份" preload :localdata="provinces" :map="{text: 'provinceName', value: 'provinceId'}" v-model="form.provinceId" @change="getCity"></uni-data-picker>
</uni-forms-item>
<uni-forms-item label="业务城市">
<uni-data-picker placeholder="请选择城市" popup-title="请选择城市" preload :localdata="cities" :map="{text: 'cityName', value: 'cityId'}" v-model="form.cityId"></uni-data-picker>
<view v-if="form.isTeam" class="location">{{ form.cityName }}</view>
<uni-data-picker v-else placeholder="请选择城市" popup-title="请选择城市" preload :localdata="cities" :map="{text: 'cityName', value: 'cityId'}" v-model="form.cityId"></uni-data-picker>
</uni-forms-item>
</uni-forms>
<view class="btns">
<button type="primary" @click="submit">{{ form.isTeam ? '登录' : form.isTeam === 0 ? '确定' : '注册' }}</button>
<button>取消</button>
<button @click="back">取消</button>
</view>
</view>
</view>
@ -40,7 +42,8 @@
},
accountRepeat: false,
provinces: [],
cities: []
cities: [],
exist: false
}
},
onShow() {
@ -49,7 +52,6 @@
this.openid = options.openid
this.phone = options.phone
this.getProvince()
//
this.checkLogin()
},
methods: {
@ -59,17 +61,20 @@
this.toIndex()
} else {
// isTeam 10team
queryPartnerAccount(this.phone).then(({ team }) => {
queryPartnerAccount(this.phone).then(({ team, username }) => {
if (team) {
team.teamId && uni.setStorageSync('teamId', team.teamId)
this.form.userName = team.userName
if (team) this.exist = true
if (team.isTeam) {
this.form = team
this.getCity()
} else {
this.form.userName = team.userName
this.form.isTeam = 0
if (team.userName) this.form.userName = team.userName
uni.showModal({
title: '提示',
content: `或然科技城市合伙人,欢迎回来!
您已在${team.teamName}的团队是否要创建自己的团队`,
content: `或然科技城市合伙人,欢迎回来!您已在${team.teamName},是否要创建自己的团队?`,
success: function (res) {
if (res.confirm) {
console.log('用户点击确定');
@ -81,6 +86,8 @@
}
})
}
} else if (username) { // username
this.form.userName = username
}
}).catch(e => {})
}
@ -134,6 +141,12 @@
uni.reLaunch({
url: '../index/index'
})
},
//
back() {
uni.redirectTo({
url: '../login/login'
})
}
}
}
@ -170,5 +183,14 @@
font-size: 30rpx;
}
}
.location {
padding-left: 10px;
line-height: 38px;
font-size: 14px;
color: #D5D5D5;
border: 1px solid #e5e5e5;
background-color: #F7F6F6;
border-radius: 4px;
}
}
</style>

@ -18,9 +18,9 @@
<view v-for="(item, i) in list" :key="i" class="item" @click="toDetail(item)">
<image class="pic" :src="item.bannerImg"></image>
<view class="right">
<view class="title">{{ item.title }}</view>
<view class="title ell">{{ item.title }}</view>
<view v-if="item.labelName" class="labels">
<view v-for="(label, j) in item.labelName.split(',')" :key="j" class="label">{{ label }}</view>
<view v-for="(label, j) in item.labelName.split(',').slice(0, 2)" :key="j" class="label">{{ label }}</view>
</view>
<view class="metas">
<view class="meta">
@ -55,18 +55,13 @@
export default {
data() {
return {
classifications: [
{
id: '',
classificationName: '不限'
}
],
classifications: [],
active: '',
typeVisible: false,
reachBottom: 0, // 0->,1->,-1->
status: 'more', // more|loading|noMore
searchTimer: null,
articleNameSort: 'desc',
articleNameSort: '',
keyword: '',
list: [],
page: 1,
@ -97,6 +92,9 @@
}
},
onShow() {
this.keyword = ''
this.active = ''
this.typeVisible = false
this.initRole()
},
methods: {
@ -121,13 +119,13 @@
uni.showLoading({
title: '加载中'
})
partnerOperatingList(data).then(({ data }) => {
partnerOperatingList(data).then(({ page, total }) => {
uni.hideLoading()
// list
const list = data.records
const list = page
this.list = this.reachBottom > 0 ? [...this.list, ...list] : list
this.page++ // page+1
const noMore = this.list.length === data.total //
const noMore = this.list.length === total //
this.status = noMore ? 'noMore' : 'more' // noMore
this.reachBottom = noMore ? -1 : 0 // -1
}).catch(e => {
@ -142,6 +140,12 @@
//
getClassification() {
queryClassificationByType(1).then(({ data }) => {
this.classifications = [
{
id: '',
classificationName: '不限'
}
]
this.classifications.push(...data)
}).catch(e => {})
},
@ -215,44 +219,6 @@
width: 40rpx;
}
}
.type-popup {
z-index: 10;
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
padding: 10rpx;
background-color: #fff;
.close {
position: absolute;
top: 50rpx;
right: 50rpx;
}
.title {
margin: 150rpx 20rpx 30rpx;
font-size: 30rpx;
color: #333;
}
.types {
display: flex;
flex-wrap: wrap;
}
.item {
width: calc((100% - 80rpx) / 3);
margin: 10rpx;
font-size: 28rpx;
line-height: 3;
text-align: center;
color: #1f1f1f;
background-color: #dbebff;
border-radius: 2px;
&.active {
color: #fff;
background-color: #007EFF;
}
}
}
.list {
background-color: #fff;
.item {
@ -273,6 +239,7 @@
width: calc(100% - 280rpx);
}
.title {
margin-bottom: 15rpx;
font-size: 32rpx;
font-weight: 600;
color: #333;
@ -281,7 +248,6 @@
display: flex;
flex-wrap: wrap;
align-items: center;
margin-top: 15rpx;
}
.label {
padding: 2px 6px;

Binary file not shown.

Before

Width:  |  Height:  |  Size: 53 KiB

After

Width:  |  Height:  |  Size: 50 KiB

@ -17,6 +17,11 @@ ul {
border-radius: 16rpx;
background-color: #fff;
}
.ell {
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
}
.l-title {
display: flex;
align-items: center;
@ -125,6 +130,7 @@ ul {
li {
padding: 0 20rpx;
font-size: 28rpx;
white-space: nowrap;
line-height: 100rpx;
border-bottom: 3px solid transparent;
}
@ -179,6 +185,44 @@ ul {
}
}
}
.type-popup {
z-index: 10;
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
padding: 10rpx;
background-color: #fff;
.close {
position: absolute;
top: 50rpx;
right: 50rpx;
}
.title {
margin: 150rpx 20rpx 30rpx;
font-size: 30rpx;
color: #333;
}
.types {
display: flex;
flex-wrap: wrap;
}
.item {
width: calc((100% - 80rpx) / 3);
margin: 10rpx;
font-size: 28rpx;
line-height: 3;
text-align: center;
color: #1f1f1f;
background-color: #dbebff;
border-radius: 2px;
&.active {
color: #fff;
background-color: #007EFF;
}
}
}
.btn-wrap {
z-index: 10;
position: fixed;

@ -1,21 +1,31 @@
<template>
<view>
<image class="banner" :src="form.bannerImg" mode="widthFix"></image>
<view class="wrap">
<view class="title">{{ form.title }}</view>
<view class="metas">
<view class="meta">
<template v-if="isInfo">
<view class="meta">{{ form.source }}</view>
<view class="meta">{{ form.releaseTime }}</view>
</template>
<view v-else class="meta">
<uni-icons class="icon" type="eye" size="22" color="#007FFF"></uni-icons>
{{ form.totalBrowsing }}人学过
</view>
<view v-if="form.labelNameList" class="labels">
<view v-for="(label, j) in form.labelNameList" :key="j" class="label">{{ label }}</view>
</view>
<!-- <view class="meta">
<uni-icons class="icon" type="star" size="22" color="#007eff"></uni-icons>
123
</view> -->
</view>
<view class="text" v-html="form.mainBody"></view>
<view v-if="form.fileList" class="files">
<view v-for="(file, i) in form.fileList" :key="i" class="item" @click="download(file)">
<view class="file">{{ file.fileName }}</view>
<view class="download">下载</view>
</view>
</view>
</view>
</view>
</template>
@ -25,6 +35,7 @@
data() {
return {
id: '',
isInfo: 0, //
form: {
totalBrowsing: ''
}
@ -34,6 +45,7 @@
const pages = getCurrentPages()
const { options } = pages[pages.length - 1]
this.id = options.id
this.isInfo = options.info
this.getInfo()
},
methods: {
@ -49,6 +61,34 @@
uni.hideLoading()
})
},
//
download(item) {
this.$util.to(`../send/send?url=${item.filePath}`)
// uni.showLoading({
// title: '...',
// mask: true
// })
// const url = item.filePath
// const that = this
// //
// uni.downloadFile({
// url,
// success: function(res) {
// console.log(444, res)
// uni.saveFile({
// tempFilePath: res.tempFilePath,
// success: function(res) {
// console.log(555, res)
// uni.hideLoading()
// that.$util.sucMsg('')
// }
// })
// },
// fail: function(err) {
// uni.hideLoading()
// }
// })
}
}
}
</script>
@ -58,8 +98,11 @@
padding: 30rpx;
background-color: #fff;
}
.banner {
width: 100%;
}
.title {
font-size: 30rpx;
font-size: 34rpx;
font-weight: 600;
color: #333;
}
@ -85,10 +128,32 @@
display: inline-flex;
align-items: center;
white-space: nowrap;
font-size: 24rpx;
color: #ccc;
}
.icon {
margin-right: 8rpx;
}
}
.text {
font-size: 28rpx;
line-height: 1.6;
}
.files {
margin-top: 20rpx;
.item {
display: flex;
align-items: center;
margin-bottom: 20rpx;
}
.file {
margin-right: 20rpx;
font-size: 26rpx;
color: #5a5a5a;
}
.download {
font-size: 26rpx;
color: #007EFF;
}
}
</style>

@ -11,8 +11,11 @@
</view>
</view>
<view class="com">{{ team.partnerClassificationName }}</view>
<u-qrcode ref="qrcode" canvas-id="qrcode" :size="size" :value="link"></u-qrcode>
<view class="tips">扫一扫加入我们吧</view>
<u-qrcode class="qrcode" ref="qrcode" canvas-id="qrcode" isQueueLoadImage :size="size" :value="link" @complete="qrcodeComplete"></u-qrcode>
<image class="qrcode-img" :src="qrcodeImg" show-menu-by-longpress @click="previewImage"></image>
<view class="tips" style="margin-top: 20rpx;">扫一扫加入我们吧</view>
<view class="tips">长按可转发至微信好友和保存图片</view>
</view>
<view class="warn">邀请二维码失效日期{{ expireTime }}</view>
</view>
@ -31,6 +34,7 @@
expireTime: '',
qrcode: '',
link: '',
qrcodeImg: '',
size: uni.upx2px(420),
team: uni.getStorageSync('team')
}
@ -58,9 +62,37 @@
const date = new Date(Date.now() + expireTime * 1000) // *1000
this.expireTime = `${date.getFullYear()}-${this.$util.preZero(date.getMonth() + 1)}-${this.$util.preZero(date.getDate())} ${this.$util.preZero(date.getHours())}:${this.$util.preZero(date.getMinutes())}:${this.$util.preZero(date.getMinutes())}`
// this.link = `https://huorantech.cn/#/join?accountId=${team.accountId}&id=${team.teamId}&isTeam=0&teamName=${this.my.info.userName}`
this.link = `http://121.37.12.51/backstage/#/join?accountId=${team.accountId}&id=${team.teamId}&isTeam=0&teamName=${this.my.info.userName}`
this.link = `http://121.37.12.51/backstage/#/join?accountId=${team.accountId}&id=${team.teamId}&isTeam=0&teamName=${this.my.info.userName}&provinceId=${uni.getStorageSync('provinceId')}&cityId=${uni.getStorageSync('cityId')}`
}).catch(e => {})
},
// imageimage
qrcodeComplete() {
this.$refs.qrcode.toTempFilePath({
success: res => {
this.qrcodeImg = res.tempFilePath
}
});
},
previewImage(e){
uni.previewImage({
// urls
urls: [e.target.src],
// /
current: e.target.src,
//
indicator:'default',
//
loop:false,
//
// longPressActions:{
// itemList:[this.l(''),this.l]
// },
success: res => {
console.log('previewImage res', res);
},
fail: err => {}
})
},
}
}
</script>
@ -78,6 +110,7 @@
text-align: center;
background-color: #fff;
.inner {
position: relative;
display: flex;
flex-direction: column;
justify-content: center;
@ -87,6 +120,7 @@
.info {
display: flex;
align-items: center;
margin-bottom: 40rpx;
text-align: left;
}
.avatar {
@ -107,12 +141,20 @@
margin: 20rpx 0;
font-size: 30rpx;
}
.qrcode {
display: none;
}
.qrcode-img {
width: 420rpx;
height: 420rpx;
}
.tips {
margin: 30rpx 0 20rpx;
margin-bottom: 10rpx;
font-size: 24rpx;
color: #333;
}
.warn {
margin-top: 10rpx;
font-size: 24rpx;
color: #f00;
}

@ -0,0 +1,110 @@
<template>
<view class="wrap">
<view class="title">{{ form.title }}</view>
<view class="text">{{ form.applicableMajor }}</view>
<view class="text">{{ form.schemeIntroduction }}</view>
<view class="text">{{ form.product }}</view>
<template v-if="form.fileName">
<view class="file">{{ form.fileName }}</view>
<view class="detail" @click.stop="download">下载</view>
</template>
</view>
</template>
<script>
import { schemeFindById } from '@/apis/modules/article.js'
export default {
data() {
return {
id: '',
form: {
totalBrowsing: ''
}
}
},
onShow() {
const pages = getCurrentPages()
const { options } = pages[pages.length - 1]
this.id = options.id
this.getInfo()
},
methods: {
//
getInfo() {
uni.showLoading({
title: '加载中'
})
schemeFindById(this.id).then(({ data }) => {
this.form = data
uni.hideLoading()
}).catch(e => {
uni.hideLoading()
})
},
//
download() {
this.$util.to(`../send/send?url=${this.form.schemeFile}`)
// uni.showLoading({
// title: '',
// mask: true
// })
// const url = this.form.schemeFile
// const that = this
// //
// uni.downloadFile({
// url,
// success: function(res) {
// console.log(444, res)
// uni.saveFile({
// tempFilePath: res.tempFilePath,
// success: function(res) {
// console.log(555, res)
// // doc, xls, ppt, pdf, docx, xlsx, pptx
// that.$util.isDoc(url.substring(url.lastIndexOf('.') +1)) && uni.openDocument({
// filePath: res.savedFilePath,
// showMenu: true, //
// success: res => {
// uni.hideLoading()
// },
// fail: openError => {
// uni.hideLoading()
// }
// })
// }
// })
// },
// fail: function(err) {
// uni.hideLoading()
// }
// })
}
}
}
</script>
<style scoped lang="scss">
.wrap {
padding: 30rpx;
background-color: #fff;
}
.title {
font-size: 34rpx;
font-weight: 600;
color: #333;
}
.text {
margin: 20rpx 0;
font-size: 28rpx;
line-height: 1.6;
}
.file {
margin: 20rpx 0;
font-size: 26rpx;
word-break: break-all;
}
.detail {
font-size: 30rpx;
color: #1f83ff;
}
</style>

@ -25,7 +25,7 @@
export default {
data() {
return {
id: '',
url: '',
email: '',
otherEmail: '',
myVal: 1,
@ -34,17 +34,12 @@
text: '',
value: 1
}],
files: [
'人工智能实验室建设方案-2020.1.docx',
'大数据管理与应用专业建设方案.docx',
'金融科技实验室建设方案V2.0.docx'
]
}
},
onShow() {
const pages = getCurrentPages()
const { options } = pages[pages.length - 1]
this.id = options.id
this.url = options.url
this.getInfo()
},
methods: {
@ -70,7 +65,7 @@
if (this.myVal && !this.email) return this.$util.errMsg('请选择其他邮箱!')
if (this.otherVal && !otherEmail) return this.$util.errMsg('请输入邮箱!')
mailFileSend({
copyWriting: this.files[this.id],
copyWriting: this.url,
mail: this.myVal ? this.email : otherEmail
}).then(res => {
this.$util.sucMsg('发送成功!')

@ -25,7 +25,7 @@
</template>
<empty v-else></empty>
<uni-icons v-if="auth('团队:邀请成员')" class="plus" type="plus-filled" size="60" color="#007eff" @click="$util.to('../addStaff/addStaff')"></uni-icons>
<uni-icons v-if="isTeam" class="plus" type="plus-filled" size="60" color="#007eff" @click="$util.to('../addStaff/addStaff')"></uni-icons>
<view v-if="!per" class="per-mask">功能升级中敬请期待...</view>
</view>
</template>
@ -35,6 +35,7 @@
export default {
data() {
return {
isTeam: uni.getStorageSync('team').isTeam == 1, //
per: true, //
reachBottom: 0, // 0->,1->,-1->
status: 'more', // more|loading|noMore

Loading…
Cancel
Save