首页、产品详情等开发

master
yujialong 2 years ago
parent 1cebaa25e9
commit 61114ba893
  1. 16
      apis/modules/product.js
  2. 2
      libs/util.js
  3. 86
      order/addCourse/addCourse.vue
  4. 15
      order/orderDetail/orderDetail.vue
  5. 343
      order/productDetail/productDetail.vue
  6. 264
      order/products/products.vue
  7. 87
      pages.json
  8. 519
      pages/index/index.vue
  9. 4
      pages/orders/orders.vue
  10. 18
      pages/products/products.vue
  11. 488
      pages/workbench/workbench.vue
  12. BIN
      static/image/index/1.png
  13. BIN
      static/image/index/2.png
  14. BIN
      static/image/index/3.png
  15. BIN
      static/image/index/4.png
  16. BIN
      static/image/index/5.png
  17. BIN
      static/image/index/6.png
  18. BIN
      static/image/index/7.png
  19. BIN
      static/image/index/8.png
  20. BIN
      static/image/index/9.png
  21. BIN
      static/image/product.png
  22. BIN
      static/image/product/1.png
  23. BIN
      static/image/product/2.png
  24. BIN
      static/image/product/3.png
  25. BIN
      static/image/product/4.png
  26. BIN
      static/image/product/5.png
  27. BIN
      static/image/product/6.png
  28. BIN
      static/image/product/excel.png
  29. BIN
      static/image/product/pdf.png
  30. BIN
      static/image/product/ppt.png
  31. BIN
      static/image/product/shop.png
  32. BIN
      static/image/product/word.png
  33. 0
      static/image/workbench/index1.png
  34. 0
      static/image/workbench/index10.png
  35. 0
      static/image/workbench/index2.png
  36. 0
      static/image/workbench/index3.png
  37. 0
      static/image/workbench/index4.png
  38. 0
      static/image/workbench/index5.png
  39. 0
      static/image/workbench/index6.png
  40. 0
      static/image/workbench/index7.png
  41. 0
      static/image/workbench/index8.png
  42. 0
      static/image/workbench/index9.png
  43. 3
      styles/common.scss
  44. 0
      team/info/info.vue
  45. 0
      team/study/study.vue

@ -3,4 +3,20 @@ const { get, post } = request
export const AppletsDataProductList = (data) => {
return post('nakadai/nakadai/dataProduct/AppletsDataProductList', data)
}
export const tagsList = () => {
return get('nakadai/tags/tagsList')
}
export const listOfGoods = (data) => {
return post('nakadai/mall/listOfGoods', data)
}
export const detailsOfGoods = (id) => {
return get('nakadai/mall/detailsOfGoods?mallId=' + id)
}
export const productCategoryList = () => {
return get('nakadai/productClassification/productCategoryList')
}

@ -70,7 +70,7 @@ export default {
},
// 返回图标。如果有图标,则直接返回,否则判断是否是数据产品,即productType=2,如果是,则取数据图标,否则则显示通用图标,这两个图标都在config/product.js里有配置
getIcon(e) {
return e.miniProgramPictureAddress || (e.productType === 2 ? Product.dataIcon : Product.normalIcon)
return e.appletIcon || Product.normalIcon
},
// 判断文件类型是否能够通过uni.openDocument打开(doc, xls, ppt, pdf, docx, xlsx, pptx)
isDoc(ext) {

@ -4,8 +4,10 @@
<uni-search-bar class="search" radius="5" placeholder="请输入产品名称" clearButton="auto" cancelButton="none" v-model="keyword" />
</uni-card>
<ul class="tab">
<li v-for="(tab, i) in tabs" :class="{active: curTab === tab.id}" @click="tabChange(tab)">{{ tab.name }}</li>
<ul class="tab-wrap">
<scroll-view scroll-x :scroll-left="scrollLeft" class="tab">
<li v-for="(tab, i) in tabs" :class="{active: curTab === tab.id}" @click="tabChange(tab)">{{ tab.name }}</li>
</scroll-view>
</ul>
<ul class="list">
@ -26,7 +28,7 @@
</template>
<script>
import { AppletsDataProductList } from '@/apis/modules/product.js'
import { productCategoryList, listOfGoods } from '@/apis/modules/product.js'
import { renew } from '@/apis/modules/order.js'
export default {
data() {
@ -39,19 +41,8 @@
name: '全部',
id: ''
},
{
name: '实训课程',
id: 1
},
{
name: '理论课程',
id: 0
},
{
name: '数据产品',
id: 2
}
],
scrollLeft: 0,
reachBottom: 0, // 0->,1->,-1->
status: 'more', // more|loading|noMore
searchTimer: null,
@ -105,22 +96,35 @@
const { options } = pages[pages.length - 1]
this.orderType = options.orderType
this.customerId = options.customerId
this.getTypes()
this.getList()
},
methods: {
//
getTypes() {
productCategoryList().then(res => {
res.classificationList.forEach(e => {
e.id = e.classificationId
e.name = e.classificationName
})
this.tabs.push(...res.classificationList)
}).catch(e => {})
},
//
getList() {
uni.showLoading({
title: '加载中'
})
AppletsDataProductList({
sort: 'desc',
keywords: this.keyword,
productType: this.curTab,
listOfGoods({
pageNum: this.page,
pageSize: this.pageSize
}).then(({ data }) => {
const { records } = data
pageSize: this.pageSize,
sort: 0,
isShelves: 0,
hotTag: 1,
productName: this.keyword,
productClassification: this.curTab,
}).then(({ page }) => {
const { records } = page
const list = this.courses
const all = this.checkAll.length //
const pageChange = this.reachBottom > 0 //
@ -131,9 +135,9 @@
text: '',
value: 1
}
e.check = (all && pageChange) || checked.find(n => n.id === e.id && n.productType === e.productType) ? 1 : 0
e.check = (all && pageChange) || checked.find(n => n.mallId === e.mallId) ? 1 : 0
//
if (list.find(n => n.dataOrCourseId == e.id && n.productType == e.productType)) {
if (list.find(n => n.dataOrCourseId == e.mallId)) {
//
checkData.disable = true
e.check = 1
@ -144,7 +148,7 @@
// list
this.list = pageChange ? [...this.list, ...records] : records
this.page++ // page+1
const noMore = this.list.length === data.total //
const noMore = this.list.length === page.total //
this.status = noMore ? 'noMore' : 'more' // noMore
this.reachBottom = noMore ? -1 : 0 // -1
uni.hideLoading()
@ -166,8 +170,8 @@
checkChange(e, i) {
const { checked } = this
const item = this.list[i]
const { id, productType } = item
const include = checked.findIndex(e => e.id === id && e.productType === productType)
const { mallId } = item
const include = checked.findIndex(e => e.mallId === mallId)
// pushpush
if (e.detail.value.length) {
include === -1 && checked.push(item)
@ -185,8 +189,8 @@
const { checked, list } = this
list.map(e => {
e.check = isCheck ? 1 : 0
const { id, productType } = e
const include = checked.findIndex(n => n.id === id && n.productType === productType)
const { mallId } = e
const include = checked.findIndex(n => n.mallId === mallId)
// pushpush
if (isCheck) {
include === -1 && checked.push(e)
@ -201,29 +205,28 @@
const { orderType } = this
const trial = orderType == 2 //
return {
dataOrCourseId: e.id, // id
dataOrCourseId: e.associatedProduct, // id
mallId: e.mallId,
productName: e.productName, //
periodOfUse: '', // 使
startTime: this.$util.formatDate(new Date(), 'yyyy-MM-dd'), //
endTime: '', //
remainingPeriod: '', //
marketValue: '', //
marketPrice: e.marketPrice, //
marketPrice: e.marketUnitPrice, //
finalPrice: trial ? 0 : '', //
finalValue: trial ? 0 : '', //
discountRate: trial ? '0%' : '', //
accountNum: e.productType === 2 ? '' : 1, //
accountNum: '', //
totalAmount: '', //
isEnable: 1, // 10
isEnable: 0, // 10
ship: 0, // 01
authority: e.productType === 2 ? 0 : 1, // 01
productType: e.productType, // (0-> 1- 2 )
options: 2,
miniProgramPictureAddress: e.miniProgramPictureAddress, //
miniProgramPictureAddress: e.appletIcon, //
settlementPrice: trial ? 0 : '', //
settlementMethod: e.settlementMethod, // 01
settlementPriceUnit: e.settlementPrice, //
businessProportion: e.businessProportion, //
serviceFee: 0 //
}
},
@ -257,7 +260,7 @@
const { customerId } = this
list.map(e => {
// id
if (!result.find(n => (n.dataOrCourseId == e.id || n.dataOrCourseId == e.dataOrCourseId) && ((n.authority && e.productType != 2) || (!n.authority && e.productType == 2)))) {
if (!result.find(n => (n.dataOrCourseId == e.associatedProduct || n.dataOrCourseId == e.dataOrCourseId) && n.authority == e.authority)) {
e.productType === 2 ? dataIds.push(e.id) : courseIds.push(e.id)
result.push(this.createParam(e))
}
@ -288,6 +291,15 @@
.page {
padding-bottom: 130rpx;
}
.tab-wrap {
.tab {
width: 100%;
white-space: nowrap;
li {
display: inline-block;
}
}
}
.list {
li {
display: flex;

@ -10,7 +10,10 @@
<view :class="['line req', {err: err === 'customerName'}]">
<view class="name">客户名称</view>
<view v-if="isDetail" class="val">{{ form.customerName }}</view>
<view v-else :class="['ph', {val: form.customerName}]" @click="customerVisible = true">{{ form.customerName || '请选择客户' }}</view>
<view v-else class="customer-wrap">
<view :class="['ph', {val: form.customerName}]" @click="customerVisible = true">{{ form.customerName || '请选择客户' }}</view>
<view class="create" @click="$util.to(`/pages/clientDetail/clientDetail`)">找不到客户马上创建</view>
</view>
</view>
<view class="line" v-if="form.customerName">
<view class="name">省份</view>
@ -576,6 +579,16 @@
.show {
padding-bottom: 280rpx;
}
.form-list {
.customer-wrap {
text-align: right;
}
.create {
margin-top: 10rpx;
font-size: 20rpx;
color: #f00;
}
}
.pro-wrap {
position: relative;
padding: 0;

@ -0,0 +1,343 @@
<template>
<view class="wrap">
<view class="banner-wrap bg-wh">
<view class="pic-wrap">
<image class="pic" :src="form.mall.coverDrawing" mode="widthFix"></image>
<view class="pro-title">{{ form.mall.productName }}</view>
</view>
<view class="fields">
<view class="field">
<image class="icon" src="@/static/image/product/1.png"></image>
市场建议价{{ form.mall.marketUnitPrice }}/
</view>
<view class="field">
<image class="icon" src="@/static/image/product/2.png"></image>
产品类型{{ form.goodsRes.typeName }}
</view>
</view>
</view>
<view class="detail">
<ul class="tabs">
<li v-for="(tab, i) in tabs" :class="{active: curTab === tab.id}" @click="tabChange(tab)">{{ tab.name }}</li>
</ul>
<view class="title">
<image class="icon" src="@/static/image/product/3.png"></image>
产品详情
</view>
<view class="texts">
<view class="line">
<text class="name">产品简介</text>
<view class="val" v-html="form.mall.productIntroduction"></view>
</view>
<view class="line">
<text class="name">适用专业</text>
<text class="val">{{ form.goodsRes.professionalName }}</text>
</view>
<view v-if="form.mall.courseHours" class="line">
<text class="name">预计课时</text>
<text class="val">{{ form.mall.courseHours }}</text>
</view>
<view v-if="form.mall.matchingCourse" class="line">
<text class="name">匹配课程</text>
<text class="val">{{ form.mall.matchingCourse }}</text>
</view>
<view v-if="form.mall.applicationScenario" class="line">
<text class="name">适用场景</text>
<text class="val">{{ form.mall.applicationScenario }}</text>
</view>
<view class="line">
<text class="name">详情介绍</text>
<view class="val" v-html="form.mall.detailedIntroduction"></view>
</view>
</view>
</view>
<view v-if="form.mall.interfaceDiagram" class="detail">
<view class="title mb">
<image class="icon" src="@/static/image/product/4.png"></image>
产品界面图
</view>
<template>
<image v-for="(pic, i) in form.mall.interfaceDiagram" :key="i" class="pic" mode="widthFix" :src="pic"></image>
</template>
</view>
<view v-if="form.mallAnnex && form.mallAnnex.length" class="detail">
<view class="title-wrap">
<view class="title">
<image class="icon" src="@/static/image/product/5.png"></image>
产品参数
</view>
<view class="download">
下载全部
<image class="icon" src="@/static/image/product/6.png"></image>
</view>
</view>
<view v-if="form.mallAnnex" class="files">
<view v-for="(file, i) in form.mallAnnex" :key="i" class="file" @click="download(file)">
<view class="text">
<image class="icon" src="@/static/image/product/ppt.png"></image>
{{ file.fileName }}
</view>
<view class="download">下载</view>
</view>
</view>
</view>
<view class="footer">
<view class="shop">
<image class="icon" src="@/static/image/product/shop.png" mode="widthFix"></image>
<view>购物车</view>
</view>
<view class="btns">
<view class="btn">加入购物车</view>
<view class="btn order">下单</view>
</view>
</view>
</view>
</template>
<script>
import { detailsOfGoods } from '@/apis/modules/product.js'
export default {
data() {
return {
id: '',
curTab: 0,
tabs: [
{
name: '详情介绍',
id: 0
},
{
name: '界面图',
id: 1
},
{
name: '参数',
id: 2
},
],
form: {
classificationIds: [],
mall: {
coverDrawing: ''
},
goodsRes: {},
mallAnnex: []
},
}
},
onShow() {
const pages = getCurrentPages()
const { options } = pages[pages.length - 1]
this.id = options.id
this.getInfo()
},
methods: {
//
getInfo() {
uni.showLoading({
title: '加载中'
})
detailsOfGoods(this.id).then(res => {
this.form = res.orderDetails
uni.hideLoading()
}).catch(e => {
uni.hideLoading()
})
},
// tab
tabChange(tab) {
this.curTab = tab.id
},
//
download(item) {
this.$util.to(`../send/send?url=${item.filePath}&copyWriting=${item.fileName}`)
},
}
}
</script>
<style scoped lang="scss">
.wrap {
padding-bottom: 140rpx;
}
.banner-wrap {
width: 100%;
border-radius: 0px 0px 20px 20px;
.pic-wrap {
padding: 20rpx 32rpx;
border-bottom: 1px solid #E2E2E2;
}
.pic {
width: 100%;
}
.pro-title {
margin-top: 22rpx;
font-size: 30rpx;
color: #333;
}
.fields {
padding: 26rpx 32rpx;
}
.field {
display: flex;
align-items: center;
font-size: 28rpx;
color: #333;
&:first-child {
margin-bottom: 22rpx;
}
.icon {
width: 36rpx;
height: 36rpx;
margin-right: 12rpx ;
}
}
}
.tabs {
display: flex;
justify-content: space-around;
margin-bottom: 32rpx;
li {
width: 33.33%;
text-align: center;
font-size: 28rpx;
color: #333;
white-space: nowrap;
}
.active {
color: #007EFF;
&:after {
content: '';
display: block;
width: 40rpx;
height: 8rpx;
margin: 18rpx auto 0;
border-radius: 4px;
background-color: #007EFF;
}
}
}
.detail {
padding: 34rpx 32rpx;
margin: 16rpx 0;
border-radius: 20px;
background-color: #fff;
.title-wrap {
display: flex;
justify-content: space-between;
align-items: center;
.download {
display: inline-flex;
align-items: center;
padding: 7rpx 16rpx;
font-size: 24rpx;
color: #007EFF;
text-align: center;
background-color: #F2F8FF;
.icon {
width: 30rpx;
height: 30rpx;
margin-left: 4rpx;
}
}
}
.title {
display: flex;
align-items: center;
font-size: 30rpx;
color: #333 ;
.icon {
width: 36rpx;
height: 36rpx;
margin-right: 11rpx;
}
&.mb {
margin-bottom: 32rpx;
}
}
.texts {
margin-top: 32rpx;
}
.line {
display: flex;
margin-bottom: 18rpx;
line-height: 40rpx;
text {
font-size: 26rpx;
color: #333;
}
.name {
font-weight: 600;
white-space: nowrap;
}
}
.pic {
width: 100%;
}
.files {
margin-top: 34rpx;
.file {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 24rpx;
.text {
display: inline-flex;
align-items: center;
font-size: 26rpx;
color: #333;
}
.icon {
width: 36rpx;
height: 36rpx;
margin-right: 14rpx;
}
.download {
font-size: 26rpx;
color: #007EFF;
}
}
}
}
.footer {
position: fixed;
bottom: 0;
left: 0;
display: flex;
justify-content: space-between;
width: 100%;
padding: 24rpx 32rpx 24rpx 73rpx;
background-color: #fff;
box-sizing: border-box;
.shop {
.icon {
width: 56rpx;
}
font-size: 24rpx;
color: #333;
}
.btns {
display: inline-flex;
.btn {
width: 229rpx;
line-height: 80rpx;
text-align: center;
font-size: 32rpx;
color: #333;
background-color: #E5EEF7;
border-radius: 100px 0px 0px 100px;
}
.order {
color: #fff;
background-color: #007EFF;
border-radius: 0px 100px 100px 0px;
}
}
}
</style>

@ -0,0 +1,264 @@
<template>
<view>
<view class="filter">
<uni-search-bar class="search" radius="30" placeholder="请输入产品名称" v-model="keyword" clearButton="auto" cancelButton="none" />
<view :class="['sort', sort]" @click="switchSort"></view>
<uni-icons class="icon" custom-prefix="iconfont" type="icon-filter" size="22" color="#007eff" @click="popup = true"></uni-icons>
</view>
<ul class="tab">
<li v-for="(tab, i) in tabs" :class="{active: curTab === tab.id}" @click="tabChange(tab)">{{ tab.name }}</li>
</ul>
<ul class="list">
<li v-for="item in list">
<view class="pro-name">
<image class="icon" :src="$util.getIcon(item)" mode="widthFix"></image>
{{ item.productName }}
</view>
<view class="info">
<view class="line">
<text class="name">产品简介</text>
<view class="val ell-wrap">
<view :class="{ell: !item.toggle}" v-html="item.productIntroduction"></view>
<view v-if="item.productIntroduction.length > 14" class="toggle" @click="toggle(item)">{{ item.toggle ? '收起' : '展开' }}</view>
</view>
</view>
<view class="line">
<text class="name">产品类型</text>
<text class="val">{{ item.typeName }}</text>
</view>
<view class="line">
<text class="name">适用专业</text>
<text class="val">{{ item.professionalName }}</text>
</view>
<view class="line">
<text class="name">市场建议单价</text>
<text class="val">{{ item.marketUnitPrice }}/</text>
</view>
</view>
</li>
</ul>
<uni-icons class="plus" type="plus-filled" size="60" color="#007eff" @click="$util.to('/order/orderDetail/orderDetail')"></uni-icons>
<filter-popup :data="filterData" :form.sync="filterForm" v-model="popup" title="全部筛选" height="1104rpx" @finsh="subFinsh"></filter-popup>
</view>
</template>
<script>
import { tagsList, listOfGoods } from '@/apis/modules/product.js'
import { queryCustomer } from '@/apis/modules/client.js'
import { list, del } from '@/apis/modules/order.js'
export default {
data() {
return {
popup: false,
//
filterData: [
{
children: false,//
title: "订单状态",
key: "orderStatus", //
keyValue: "value", //
isRadio: true, //
data: [
{
title: "待发货",
value: 0
},
{
title: "已完成",
value: 1
},
],
}
],
filterForm: {},
curTab: 0,
tabs: [
{
name: '综合排序',
id: 0
},
{
name: '热搜排行',
id: 1
},
{
name: '发布时间',
id: 1
}
],
reachBottom: 0, // 0->,1->,-1->
status: 'more', // more|loading|noMore
searchTimer: null,
orderStatus: '',
sort: 'desc',
keyword: '',
list: [],
page: 1,
pageSize: 10,
delOption: [{
text: '删除',
style: {
backgroundColor: '#F56C6C'
}
}],
}
},
watch: {
keyword () {
clearTimeout(this.searchTimer)
this.searchTimer = setTimeout(() => {
this.initList()
}, 500)
}
},
//
onPullDownRefresh() {
this.initList()
setTimeout(() => {
uni.stopPullDownRefresh()
}, 1500)
},
//
onReachBottom() {
if (this.reachBottom >= 0) {
this.reachBottom = 1
this.status = 'loading'
this.getList()
}
},
onShow() {
this.getList()
},
methods: {
getList() {
listOfGoods({
pageNum: this.page,
pageSize: this.pageSize,
sort: 0,
isShelves: 0,
hotTag: 1,
productName: this.keyword,
}).then(({ page }) => {
// list
const list = page.records
list.map(e => {
e.toggle = e.productIntroduction.length < 14 // 14
})
this.list = this.reachBottom > 0 ? [...this.list, ...list] : list
this.page++ // page+1
const noMore = this.list.length === page.total //
this.status = noMore ? 'noMore' : 'more' // noMore
this.reachBottom = noMore ? -1 : 0 // -1
}).catch(e => {})
},
initList() {
this.page = 1
this.reachBottom = 0
this.getList()
},
//
toggle(item) {
item.toggle = !item.toggle
},
//
subFinsh(val) {
const { orderStatus } = val
this.orderStatus = orderStatus.length ? orderStatus[0] : ''
this.initList()
},
//
switchSort() {
this.sort = this.sort === 'desc' ? 'asc' : 'desc'
this.initList()
},
// tab
tabChange(tab) {
this.curTab = tab.id
this.initList()
},
//
toDetail(item) {
this.$util.to(`/order/orderDetail/orderDetail?orderId=${item.orderId}&show=1`)
},
//
del(e) {
const that = this
uni.showModal({
title: '提示',
content: '确定要删除吗?',
success(res) {
if (res.confirm) {
del({
ids: [e.orderId]
}).then(res => {
that.$util.sucMsg('删除成功')
that.initList()
}).catch(res => {})
}
}
})
},
}
}
</script>
<style scoped lang="scss">
.list {
margin-top: 20rpx;
background-color: #fff;
.item {
padding: 20rpx 40rpx;
border-bottom: 1px solid #f1f1f1;
}
.c-name {
font-size: 30rpx;
color: #333;
}
.info {
display: flex;
justify-content: space-between;
align-items: center;
margin-top: 10rpx;
}
.left {
max-width: 70%;
}
.line {
display: flex;
padding: 10rpx 0;
}
.name {
margin-right: 10rpx;
white-space: nowrap;
font-size: 28rpx;
color: #999;
}
.val {
max-width: 88%;
font-size: 28rpx;
color: #333;
}
.ell {
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
}
.toggle {
margin-top: 10rpx;
white-space: nowrap;
font-size: 24rpx;
color: #0e92ef;
}
.type {
margin-left: 20rpx;
font-size: 28rpx;
color: #ff7b2d;
white-space: nowrap;
}
.type1 {
color: #bdbdbd;
}
}
</style>

@ -15,7 +15,23 @@
"navigationBarTitleText": "",
"enablePullDownRefresh": false
}
},
{
"path" : "pages/workbench/workbench",
"style" :
{
"navigationBarTitleText": "工作台",
"enablePullDownRefresh": false
}
},
{
"path": "pages/orders/orders",
"style" :
{
"navigationBarTitleText": "订单列表",
"enablePullDownRefresh": true
}
},
{
"path" : "pages/clients/clients",
"style" :
@ -65,37 +81,11 @@
}
}
,{
"path" : "pages/study/study",
"style" :
{
"navigationBarTitleText": "学习",
"enablePullDownRefresh": true
}
}
,{
"path" : "pages/info/info",
"style" :
{
"navigationBarTitleText": "资讯",
"enablePullDownRefresh": true
}
}
],
"subPackages": [
{
"root": "order",
"pages": [
{
"path": "orders/orders",
"style" :
{
"navigationBarTitleText": "订单列表",
"enablePullDownRefresh": true
}
},
{
"path" : "addCourse/addCourse",
"style" :
@ -135,12 +125,47 @@
"navigationBarTitleText": "订单记录",
"enablePullDownRefresh": false
}
},
{
"path" : "productDetail/productDetail",
"style" :
{
"navigationBarTitleText": "产品详情",
"enablePullDownRefresh": false
}
}
]
,{
"path" : "products/products",
"style" :
{
"navigationBarTitleText": "产品",
"enablePullDownRefresh": true
}
}
]
},
{
"root": "team",
"pages": [
{
"path" : "study/study",
"style" :
{
"navigationBarTitleText": "学习",
"enablePullDownRefresh": true
}
}
,{
"path" : "info/info",
"style" :
{
"navigationBarTitleText": "资讯",
"enablePullDownRefresh": true
}
},
{
"path" : "setting/setting",
"style" :
@ -267,15 +292,15 @@
"selectedIconPath": "static/image/tab1-1.png",
"text": "首页"
}, {
"pagePath": "pages/study/study",
"pagePath": "pages/workbench/workbench",
"iconPath": "static/image/tab2.png",
"selectedIconPath": "static/image/tab2-1.png",
"text": "学习"
"text": "工作台"
}, {
"pagePath": "pages/info/info",
"pagePath": "pages/orders/orders",
"iconPath": "static/image/tab3.png",
"selectedIconPath": "static/image/tab3-1.png",
"text": "资讯"
"text": "订单"
}, {
"pagePath": "pages/person/person",
"iconPath": "static/image/tab4.png",

@ -1,155 +1,101 @@
<template>
<view :class="['page', {oh: !per}]">
<image class="bg" src="@/static/image/index/index2.png" mode="widthFix"></image>
<view class="team">
<uni-data-picker class="picker-input" placeholder="切换团队" popup-title="切换团队" preload :clear-icon="false" :localdata="list" :map="{text: 'partnerClassificationName', value: 'teamId'}" v-model="teamId" @change="teamChange"></uni-data-picker>
</view>
<uni-search-bar class="search" radius="30" placeholder="请输入" v-model="keyword" clearButton="auto" cancelButton="none" />
<view class="banner">
<image class="img" src="@/static/image/index/index1.png" mode="widthFix"></image>
<image class="img" src="@/static/image/workbench/index1.png" mode="widthFix"></image>
<view class="info">
<view class="title">城市合伙人招募中</view>
<view class="text">携手共创教育信息化新未来合伙共享产业互联领域新红利</view>
</view>
</view>
<ul class="entry">
<li v-if="auth('首页:客户')" @click="$util.to('../clients/clients')">
<image class="icon" src="@/static/image/index/index3.png" mode="widthFix"></image>
<view class="text">客户</view>
</li>
<li v-if="auth('首页:方案')" @click="$util.to('../plans/plans')">
<image class="icon" src="@/static/image/index/index4.png" mode="widthFix"></image>
<view class="text">方案</view>
</li>
<li v-if="auth('首页:订单')" @click="$util.to('/order/orders/orders')">
<image class="icon" src="@/static/image/index/index5.png" mode="widthFix"></image>
<view class="text">订单</view>
</li>
<li v-if="auth('首页:产品')" @click="$util.to('../products/products')">
<image class="icon" src="@/static/image/index/index6.png" mode="widthFix"></image>
<view class="text">产品</view>
</li>
</ul>
<view class="panel study-panel">
<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">
<view v-for="(item, i) in studies" :key="i" class="item" @click="toDetail(item)">
<image class="pic" :src="item.bannerImg"></image>
<view class="text">{{ item.title }}</view>
</view>
</scroll-view>
<view class="block">
<view class="title-wrap">
<view class="title">热门标签</view>
</view>
<ul class="tags">
<li v-for="(tag, i) in tags" :key="i" @click="$util.to('/order/productDetail/productDetail?id=' + item.mallId)">
<image class="icon" :src="require('@/static/image/index/' + (i + 1) + '.png')"></image>
<view class="text ell">{{ tag.tagsName }}</view>
</li>
</ul>
</view>
<view class="panel">
<view class="title" @click="toPanel(1)">
<view class="left">
<image class="icon" src="@/static/image/index/index8.png" mode="widthFix"></image>
销售进展
</view>
<view class="right">
<image class="date" src="@/static/image/index/index7.png" mode="widthFix"></image>
<text>本月</text>
<image class="arrow" src="@/static/image/index/index10.png" mode="widthFix"></image>
</view>
<view class="block">
<view class="title-wrap">
<view class="title">热销产品</view>
<view class="all">全部产品</view>
</view>
<view class="data first">
<view class="line">
<view class="item">
<view class="name">本月新增试用客户</view>
<view class="val">{{ sell.trialUser || 0 }}</view>
</view>
<view class="item">
<view class="name">本月成单客户</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 || 0 }}</view>
</view>
<view class="item">
<view class="name">本月成交订单产品</view>
<view class="val">{{ sell.officialProduct || 0 }}</view>
<view class="list">
<view v-for="(item, i) in hotProducts" :key="i" class="item" @click="toDetail(item)">
<image class="pic" :src="item.appletIcon"></image>
<view class="texts">
<view class="name ell">{{ item.productName }}</view>
<view class="des ell" v-html="item.productIntroduction"></view>
<view class="meta">
<image class="icon" src="@/static/image/index/9.png"></image>
适用专业:
<text class="ell">{{ item.professionalName }}</text>
</view>
</view>
</view>
</view>
</view>
<view class="panel">
<view class="title y-title" @click="toPanel(1)">
<view class="left">
<image class="icon" src="@/static/image/index/index9.png" mode="widthFix"></image>
年度经营分析
</view>
<image class="arrow" src="@/static/image/index/index10.png" mode="widthFix"></image>
<view class="block">
<view class="title-wrap">
<view class="title">官方推荐</view>
<view class="all">全部产品</view>
</view>
<view class="data second">
<view class="line">
<view class="item item1">
<view class="val">{{ handleNum(analysis.finalPrice) }}</view>
<view class="name">总成交金额</view>
</view>
<view class="item item2">
<view class="val">{{ handleNum(analysis.settlementPrice) }}</view>
<view class="name">总结算金额</view>
</view>
<view class="item equal">
<view class="val">{{ handleNum(analysis.marketingServiceCharge) }}</view>
<view class="name">市场服务费</view>
</view>
<view class="item">
<view class="val">{{ handleNum(analysis.projectBenefit) }}</view>
<view class="name">项目收益</view>
<view class="list">
<view v-for="(item, i) in offcialProducts" :key="i" class="item" @click="toDetail(item)">
<image class="pic" :src="item.appletIcon || require('@/static/image/product.png')"></image>
<view class="texts">
<view class="name ell">{{ item.productName }}</view>
<view class="des ell" v-html="item.productIntroduction"></view>
<view class="meta">
<image class="icon" src="@/static/image/index/9.png"></image>
适用专业:
<text class="ell">{{ item.professionalName }}</text>
</view>
</view>
</view>
</view>
</view>
<view v-if="!per" class="per-mask">功能升级中敬请期待...</view>
</view>
</template>
<script>
import { getUserRolesPermissionMenu } from '@/apis/modules/user.js'
import { getTeamsByAccountId, getTheBusinessManagerIdsUnderTheTeam } from '@/apis/modules/client.js'
import { treeList, salesProgress, annualOperatingAnalysis } from '@/apis/modules/parner.js'
import { partnerOperatingList } from '@/apis/modules/article.js'
import { tagsList, listOfGoods } from '@/apis/modules/product.js'
export default {
data() {
return {
per: true, //
teamId: uni.getStorageSync('teamId') || '',
list: [],
id: '',
teamList: [],
studies: [],
sell: {},
analysis: {
finalPrice: 0,
settlementPrice: 0,
marketingServiceCharge: 0,
projectBenefit: 0,
}
keyword: '',
tags: [],
hotProducts: [],
offcialProducts: []
}
},
watch: {
keyword () {
clearTimeout(this.searchTimer)
this.searchTimer = setTimeout(() => {
this.initList()
}, 500)
}
},
onShow() {
console.log(444, this.teamId)
this.per = true
this.getInfo()
this.getTags()
this.getProducts()
},
methods: {
//
@ -161,80 +107,35 @@
this.getSell()
this.getAnalysis()
},
//
getAuth() {
uni.getStorageSync('token') && getUserRolesPermissionMenu({
teamId: this.list.find(e => e.teamId == this.teamId).partnerClassificationId,
platformId: 4
}).then(({ permissionMenu }) => {
uni.hideLoading()
const auth = []
//
const generateAuth = (list, parent) => {
list.map(e => {
const name = `${parent ? parent + ':' : ''}${e.name}`
auth.push(name)
generateAuth(e.children, name)
})
}
generateAuth(permissionMenu[0].children, '')
uni.setStorageSync('auth', auth)
this.$forceUpdate()
this.initRole()
}).catch(e => {
uni.hideLoading()
uni.setStorageSync('auth', [])
this.initRole()
})
},
//
getInfo() {
uni.showLoading({
title: '加载中'
})
getTeamsByAccountId().then(({ data }) => {
data.map(e => {
const n = e.partnerClassificationList
e.id = n.id
// parnerIdidteamIduni.getStorageSync('team').partnerId使
e.teamId = e.isTeam == 1 ? +e.partnerClassificationId : n.id
e.partnerClassificationName = n.partnerClassificationName
delete e.partnerClassificationList
})
if (data.length) {
/**
* @description 如果是第一次进则默认选中第一个团队并把该团队的信息存入缓存
* 或者团队列表里没有该id则说明超管已经被转让也需要重新选中团队
*/
if (!uni.getStorageSync('team') || !data.find(e => e.teamId == this.teamId)) {
this.teamId = data[0].teamId
uni.setStorageSync('team', data[0])
}
} else {
// 退
uni.hideLoading()
uni.clearStorageSync()
uni.navigateTo({
url: '../login/login'
})
}
this.list = data
this.getAuth()
}).catch(e => {
uni.hideLoading()
})
//
getTags() {
tagsList().then(res => {
this.tags = res.tagsList.slice(0, 8)
}).catch(e => {})
},
//
getStudy() {
partnerOperatingList({
topSort: 'desc',
//
getProducts() {
//
listOfGoods({
pageNum: 1,
pageSize: 5,
sort: 1,
isShelves: 0,
hotTag: 1
}).then(({ page }) => {
this.hotProducts = page.records
}).catch(e => {})
//
listOfGoods({
pageNum: 1,
pageSize: 5,
querySource: 4,
typeId: 1,
sort: 0,
isShelves: 0,
hotTag: 1,
selection: 1
}).then(({ page }) => {
this.studies = page
this.offcialProducts = page.records
}).catch(e => {})
},
//
@ -245,42 +146,8 @@
},
//
toDetail(item) {
this.$util.to(`/team/article/article?id=` + item.id)
},
//
getSell() {
salesProgress({
businessManagerId: uni.getStorageSync('team').partnerId,
teamId: this.teamId,
}).then(res => {
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 }) => {
if (data) this.analysis = data
}).catch(e => {})
},
//
teamChange() {
const { teamId } = this
const e = this.list.find(e => e.teamId == teamId)
uni.setStorageSync('team', e)
this.getAuth()
this.$util.to('/order/productDetail/productDetail?id=' + item.mallId)
},
//
toPanel(i) {
this.$util.errMsg('功能暂未开放!')
}
}
}
</script>
@ -291,18 +158,7 @@
min-height: 100%;
padding: 30rpx 22rpx;
box-sizing: border-box;
}
.bg {
z-index: -1;
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
.team {
width: 300rpx;
margin-bottom: 30rpx;
background-color: #fff;
}
.banner {
position: relative;
@ -326,164 +182,87 @@
color: #001D67;
}
}
.entry {
display: flex;
justify-content: space-around;
align-items: center;
margin: 10rpx 0 30rpx;
text-align: center;
.icon {
width: 78rpx;
}
.text {
font-size: 28rpx;
color: #333;
}
}
.panel {
margin: 20rpx 10rpx;
background-color: #fff;
border-radius: 20rpx;
overflow: hidden;
&.study-panel {
background-color: transparent;
}
.title {
.block {
margin: 40rpx 0;
.title-wrap {
display: flex;
justify-content: space-between;
align-items: center;
padding: 17rpx 20rpx;
background: linear-gradient(90deg, #E5EFFF 0%, #FFFFFF 100%);
}
.y-title {
background: linear-gradient(90deg, #FFF5E5 0%, #FFFFFF 100%);
}
.left {
display: flex;
align-items: center;
font-size: 30rpx;
color: #333;
margin-bottom: 34rpx;
.all {
font-size: 24rpx;
color: #666;
}
}
.right {
display: flex;
.title {
display: inline-flex;
align-items: center;
font-size: 28rpx;
color: #333;
text {
margin: 0 15rpx 0 8rpx;
&:before {
content: '';
width: 10rpx;
height: 26rpx;
margin-right: 14rpx;
background: #007FFF;
border-radius: 5px;
}
}
}
.tags {
display: flex;
flex-wrap: wrap;
li {
width: 25%;
margin-bottom: 24rpx;
text-align: center;
}
.icon {
width: 36rpx;
margin-right: 10rpx;
width: 64rpx;
height: 64rpx;
margin-bottom: 18rpx;
}
.date {
width: 26rpx;
.text {
width: 110rpx;
margin: 0 auto;
font-size: 24rpx;
color: #333;
}
.arrow {
width: 16rpx;
}
.list {
.item {
display: flex;
margin-bottom: 28rpx;
}
.data {
padding: 33rpx 36rpx;
.pic {
width: 136rpx;
height: 136rpx;
margin-right: 20rpx;
}
.line {
display: flex;
.texts {
width: calc(100% - 156rpx);
}
.first {
.item:first-child {
width: 65%;
}
.name {
margin-bottom: 14rpx;
font-size: 24rpx;
color: #999;
}
.val {
font-size: 30rpx;
color: #333;
}
.line:first-child {
margin-bottom: 32rpx;
}
.name {
font-size: 28rpx;
color: #333;
}
.second {
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;
font-size: 30rpx;
color: #333;
}
.name {
font-size: 24rpx;
color: #999;
}
.des {
margin: 17rpx 0;
font-size: 24rpx;
color: #666;
}
.study {
width: 100%;
margin-top: 15rpx;
overflow: auto;
.item {
display: inline-block;
width: 280rpx;
margin-right: 20rpx;
background-color: #fff;
border-radius: 8px;
overflow: hidden;
}
.pic {
width: 100%;
height: 130rpx;
.meta {
display: flex;
align-items: center;
font-size: 24rpx;
color: #2E2D31;
.icon {
width: 32rpx;
height: 32rpx;
margin-right: 12rpx;
}
.text {
padding: 15rpx;
font-size: 28rpx;
color: #333;
text-align: center;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
text {
width: 330rpx;
}
}
.scroll {
width: 100%;
white-space: nowrap;
}
}
.oh {
overflow: hidden;
}
</style>

@ -58,7 +58,7 @@
</template>
<empty v-else></empty>
<uni-icons class="plus" type="plus-filled" size="60" color="#007eff" @click="$util.to('../orderDetail/orderDetail')"></uni-icons>
<uni-icons class="plus" type="plus-filled" size="60" color="#007eff" @click="$util.to('/order/orderDetail/orderDetail')"></uni-icons>
<filter-popup :data="filterData" :form.sync="filterForm" v-model="popup" title="全部筛选" height="1104rpx" @finsh="subFinsh"></filter-popup>
</view>
</template>
@ -227,7 +227,7 @@
},
//
toDetail(item) {
this.$util.to(`../orderDetail/orderDetail?orderId=${item.orderId}&show=1`)
this.$util.to(`/order/orderDetail/orderDetail?orderId=${item.orderId}&show=1`)
},
//
del(e) {

@ -47,6 +47,7 @@
</template>
<script>
import { tagsList, listOfGoods } from '@/apis/modules/product.js'
import { AppletsDataProductList } from '@/apis/modules/product.js'
export default {
data() {
@ -108,21 +109,22 @@
},
methods: {
getList() {
AppletsDataProductList({
sort: this.sort,
keywords: this.keyword,
productType: this.curTab,
listOfGoods({
pageNum: this.page,
pageSize: this.pageSize
}).then(({ data }) => {
pageSize: this.pageSize,
sort: 0,
isShelves: 0,
hotTag: 1,
productName: this.keyword,
}).then(({ page }) => {
// list
const list = data.records
const list = page.records
list.map(e => {
e.toggle = e.briefIntroduction.length < 14 // 14
})
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 === page.total //
this.status = noMore ? 'noMore' : 'more' // noMore
this.reachBottom = noMore ? -1 : 0 // -1
}).catch(e => {})

@ -0,0 +1,488 @@
<template>
<view :class="['page', {oh: !per}]">
<image class="bg" src="@/static/image/workbench/index2.png" mode="widthFix"></image>
<view class="team">
<uni-data-picker class="picker-input" placeholder="切换团队" popup-title="切换团队" preload :clear-icon="false" :localdata="list" :map="{text: 'partnerClassificationName', value: 'teamId'}" v-model="teamId" @change="teamChange"></uni-data-picker>
</view>
<view class="banner">
<image class="img" src="@/static/image/workbench/index1.png" mode="widthFix"></image>
<view class="info">
<view class="title">城市合伙人招募中</view>
<view class="text">携手共创教育信息化新未来合伙共享产业互联领域新红利</view>
</view>
</view>
<ul class="entry">
<li v-if="auth('首页:客户')" @click="$util.to('../clients/clients')">
<image class="icon" src="@/static/image/workbench/index3.png" mode="widthFix"></image>
<view class="text">客户</view>
</li>
<li v-if="auth('首页:方案')" @click="$util.to('../plans/plans')">
<image class="icon" src="@/static/image/workbench/index4.png" mode="widthFix"></image>
<view class="text">方案</view>
</li>
<li @click="$util.to('/team/study/study')">
<image class="icon" src="@/static/image/tab2-1.png" mode="widthFix"></image>
<view class="text">学习</view>
</li>
<li @click="$util.to('/team/info/info')">
<image class="icon" src="@/static/image/tab3-1.png" mode="widthFix"></image>
<view class="text">资讯</view>
</li>
</ul>
<view class="panel study-panel">
<view class="title" @click="toStudy">
<view class="left">
<image class="icon" src="@/static/image/workbench/index8.png" mode="widthFix"></image>
学习速递
</view>
<view class="right">
<text>全部</text>
<image class="arrow" src="@/static/image/workbench/index10.png" mode="widthFix"></image>
</view>
</view>
<view class="study">
<scroll-view class="scroll" scroll-x="true">
<view v-for="(item, i) in studies" :key="i" class="item" @click="toDetail(item)">
<image class="pic" :src="item.bannerImg"></image>
<view class="text">{{ item.title }}</view>
</view>
</scroll-view>
</view>
</view>
<view class="panel">
<view class="title" @click="toPanel(1)">
<view class="left">
<image class="icon" src="@/static/image/workbench/index8.png" mode="widthFix"></image>
销售进展
</view>
<view class="right">
<image class="date" src="@/static/image/workbench/index7.png" mode="widthFix"></image>
<text>本月</text>
<image class="arrow" src="@/static/image/workbench/index10.png" mode="widthFix"></image>
</view>
</view>
<view class="data first">
<view class="line">
<view class="item">
<view class="name">本月新增试用客户</view>
<view class="val">{{ sell.trialUser || 0 }}</view>
</view>
<view class="item">
<view class="name">本月成单客户</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 || 0 }}</view>
</view>
<view class="item">
<view class="name">本月成交订单产品</view>
<view class="val">{{ sell.officialProduct || 0 }}</view>
</view>
</view>
</view>
</view>
<view class="panel">
<view class="title y-title" @click="toPanel(1)">
<view class="left">
<image class="icon" src="@/static/image/workbench/index9.png" mode="widthFix"></image>
年度经营分析
</view>
<image class="arrow" src="@/static/image/workbench/index10.png" mode="widthFix"></image>
</view>
<view class="data second">
<view class="line">
<view class="item item1">
<view class="val">{{ handleNum(analysis.finalPrice) }}</view>
<view class="name">总成交金额</view>
</view>
<view class="item item2">
<view class="val">{{ handleNum(analysis.settlementPrice) }}</view>
<view class="name">总结算金额</view>
</view>
<view class="item equal">
<view class="val">{{ handleNum(analysis.marketingServiceCharge) }}</view>
<view class="name">市场服务费</view>
</view>
<view class="item">
<view class="val">{{ handleNum(analysis.projectBenefit) }}</view>
<view class="name">项目收益</view>
</view>
</view>
</view>
</view>
<view v-if="!per" class="per-mask">功能升级中敬请期待...</view>
</view>
</template>
<script>
import { getUserRolesPermissionMenu } from '@/apis/modules/user.js'
import { getTeamsByAccountId, getTheBusinessManagerIdsUnderTheTeam } from '@/apis/modules/client.js'
import { treeList, salesProgress, annualOperatingAnalysis } from '@/apis/modules/parner.js'
import { partnerOperatingList } from '@/apis/modules/article.js'
export default {
data() {
return {
per: true, //
teamId: uni.getStorageSync('teamId') || '',
list: [],
id: '',
teamList: [],
studies: [],
sell: {},
analysis: {
finalPrice: 0,
settlementPrice: 0,
marketingServiceCharge: 0,
projectBenefit: 0,
}
}
},
onShow() {
this.per = true
this.getInfo()
},
methods: {
//
initRole() {
if (!uni.getStorageSync('auth').includes('首页')) {
this.per = false
}
this.getStudy()
this.getSell()
this.getAnalysis()
},
//
getAuth() {
uni.getStorageSync('token') && getUserRolesPermissionMenu({
teamId: this.list.find(e => e.teamId == this.teamId).partnerClassificationId,
platformId: 4
}).then(({ permissionMenu }) => {
uni.hideLoading()
const auth = []
//
const generateAuth = (list, parent) => {
list.map(e => {
const name = `${parent ? parent + ':' : ''}${e.name}`
auth.push(name)
generateAuth(e.children, name)
})
}
generateAuth(permissionMenu[0].children, '')
uni.setStorageSync('auth', auth)
this.$forceUpdate()
this.initRole()
}).catch(e => {
uni.hideLoading()
uni.setStorageSync('auth', [])
this.initRole()
})
},
//
getInfo() {
uni.showLoading({
title: '加载中'
})
getTeamsByAccountId().then(({ data }) => {
data.map(e => {
const n = e.partnerClassificationList
e.id = n.id
// parnerIdidteamIduni.getStorageSync('team').partnerId使
e.teamId = e.isTeam == 1 ? +e.partnerClassificationId : n.id
e.partnerClassificationName = n.partnerClassificationName
delete e.partnerClassificationList
})
if (data.length) {
/**
* @description 如果是第一次进则默认选中第一个团队并把该团队的信息存入缓存
* 或者团队列表里没有该id则说明超管已经被转让也需要重新选中团队
*/
if (!uni.getStorageSync('team') || !data.find(e => e.teamId == this.teamId)) {
this.teamId = data[0].teamId
uni.setStorageSync('team', data[0])
}
} else {
// 退
uni.hideLoading()
uni.clearStorageSync()
uni.navigateTo({
url: '../login/login'
})
}
this.list = data
this.getAuth()
}).catch(e => {
uni.hideLoading()
})
},
//
getStudy() {
partnerOperatingList({
topSort: 'desc',
pageNum: 1,
pageSize: 5,
querySource: 4,
typeId: 1,
}).then(({ page }) => {
this.studies = page
}).catch(e => {})
},
//
toStudy() {
uni.switchTab({
url: '/team/study/study'
})
},
//
toDetail(item) {
this.$util.to(`/team/article/article?id=` + item.id)
},
//
getSell() {
salesProgress({
businessManagerId: uni.getStorageSync('team').partnerId,
teamId: this.teamId,
}).then(res => {
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 }) => {
if (data) this.analysis = data
}).catch(e => {})
},
//
teamChange() {
const { teamId } = this
const e = this.list.find(e => e.teamId == teamId)
uni.setStorageSync('team', e)
this.getAuth()
},
//
toPanel(i) {
this.$util.errMsg('功能暂未开放!')
}
}
}
</script>
<style scoped lang="scss">
.page {
position: relative;
min-height: 100%;
padding: 30rpx 22rpx;
box-sizing: border-box;
}
.bg {
z-index: -1;
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
.team {
width: 300rpx;
margin-bottom: 30rpx;
}
.banner {
position: relative;
.img {
width: 100%;
}
.info {
position: absolute;
top: 80rpx;
left: 46rpx;
}
.title {
margin-bottom: 15rpx;
font-size: 36rpx;
font-weight: 600;
color: #001D67;
}
.text {
font-size: 20rpx;
font-family: PingFangSC-Regular, PingFang SC;
color: #001D67;
}
}
.entry {
display: flex;
justify-content: space-around;
align-items: center;
margin: 10rpx 0 30rpx;
text-align: center;
.icon {
width: 78rpx;
}
.text {
font-size: 28rpx;
color: #333;
}
}
.panel {
margin: 20rpx 10rpx;
background-color: #fff;
border-radius: 20rpx;
overflow: hidden;
&.study-panel {
background-color: transparent;
}
.title {
display: flex;
justify-content: space-between;
align-items: center;
padding: 17rpx 20rpx;
background: linear-gradient(90deg, #E5EFFF 0%, #FFFFFF 100%);
}
.y-title {
background: linear-gradient(90deg, #FFF5E5 0%, #FFFFFF 100%);
}
.left {
display: flex;
align-items: center;
font-size: 30rpx;
color: #333;
}
.right {
display: flex;
align-items: center;
font-size: 28rpx;
color: #333;
text {
margin: 0 15rpx 0 8rpx;
}
}
.icon {
width: 36rpx;
margin-right: 10rpx;
}
.date {
width: 26rpx;
}
.arrow {
width: 16rpx;
}
.data {
padding: 33rpx 36rpx;
}
.line {
display: flex;
}
.first {
.item:first-child {
width: 65%;
}
.name {
margin-bottom: 14rpx;
font-size: 24rpx;
color: #999;
}
.val {
font-size: 30rpx;
color: #333;
}
.line:first-child {
margin-bottom: 32rpx;
}
}
.second {
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;
font-size: 30rpx;
color: #333;
}
.name {
font-size: 24rpx;
color: #999;
}
}
.study {
width: 100%;
margin-top: 15rpx;
overflow: auto;
.item {
display: inline-block;
width: 280rpx;
margin-right: 20rpx;
background-color: #fff;
border-radius: 8px;
overflow: hidden;
}
.pic {
width: 100%;
height: 130rpx;
}
.text {
padding: 15rpx;
font-size: 28rpx;
color: #333;
text-align: center;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
}
.scroll {
width: 100%;
white-space: nowrap;
}
}
.oh {
overflow: hidden;
}
</style>

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 783 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 988 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 513 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 581 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 427 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 848 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 644 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 38 KiB

Before

Width:  |  Height:  |  Size: 230 B

After

Width:  |  Height:  |  Size: 230 B

Before

Width:  |  Height:  |  Size: 72 KiB

After

Width:  |  Height:  |  Size: 72 KiB

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

Before

Width:  |  Height:  |  Size: 840 B

After

Width:  |  Height:  |  Size: 840 B

Before

Width:  |  Height:  |  Size: 319 B

After

Width:  |  Height:  |  Size: 319 B

Before

Width:  |  Height:  |  Size: 727 B

After

Width:  |  Height:  |  Size: 727 B

Before

Width:  |  Height:  |  Size: 295 B

After

Width:  |  Height:  |  Size: 295 B

Before

Width:  |  Height:  |  Size: 844 B

After

Width:  |  Height:  |  Size: 844 B

Before

Width:  |  Height:  |  Size: 672 B

After

Width:  |  Height:  |  Size: 672 B

@ -1,6 +1,9 @@
button[type=primary] {
background-color: #007eff;
}
.bg-wh {
background-color: #fff;
}
page {
height: 100%;
background-color: #f5f5f5;

Loading…
Cancel
Save