订单等修复

master V1.0.1
yujialong 1 year ago
parent 5a441a2188
commit 61d2383593
  1. 4
      .hbuilderx/launch.json
  2. 14
      apis/modules/article.js
  3. 4
      config/request.js
  4. 5
      order/clientDetail/clientDetail.vue
  5. 3
      order/curClient/curClient.vue
  6. 8
      order/editCourse/editCourse.vue
  7. 121
      order/orderDetail/orderDetail.vue
  8. 10
      pages.json
  9. 2
      pages/person/person.vue
  10. BIN
      static/image/unfold.png
  11. 8
      styles/common.scss
  12. 267
      team/plans/plans.vue
  13. 83
      team/scheme/scheme.vue
  14. 22
      team/send/send.vue
  15. 2
      team/teamDetail/teamDetail.vue
  16. 10
      uni_modules/uni-tooltip/changelog.md
  17. 70
      uni_modules/uni-tooltip/components/uni-tooltip/uni-tooltip.vue
  18. 83
      uni_modules/uni-tooltip/package.json
  19. 8
      uni_modules/uni-tooltip/readme.md

@ -6,6 +6,10 @@
{ {
"launchtype" : "local" "launchtype" : "local"
}, },
"h5" :
{
"launchtype" : "local"
},
"mp-weixin" : "mp-weixin" :
{ {
"launchtype" : "local" "launchtype" : "local"

@ -0,0 +1,14 @@
import request from '@/apis/request.js'
const { get, post } = request
export const queryClassificationByType = id => {
return post('nakadai/nakadai/partner/article/classification/queryClassificationByType?typeId=' + 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)
}

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

@ -39,7 +39,6 @@
<view v-if="isDetail" class="val">{{ form.name }}</view> <view v-if="isDetail" class="val">{{ form.name }}</view>
<template v-else> <template v-else>
<input type="text" placeholder="请输入" v-model="form.name" @change="handleErr('name')"> <input type="text" placeholder="请输入" v-model="form.name" @change="handleErr('name')">
<uni-icons class="edit" type="compose" size="20" color="#b3b3b3"></uni-icons>
</template> </template>
</view> </view>
<view :class="['line req', {err: err === 'phone'}]"> <view :class="['line req', {err: err === 'phone'}]">
@ -47,7 +46,6 @@
<view v-if="isDetail" class="val">{{ form.phone }}</view> <view v-if="isDetail" class="val">{{ form.phone }}</view>
<template v-else> <template v-else>
<input type="number" maxlength="11" placeholder="请输入" v-model="form.phone" @change="handleErr('phone')"> <input type="number" maxlength="11" placeholder="请输入" v-model="form.phone" @change="handleErr('phone')">
<uni-icons class="edit" type="compose" size="20" color="#b3b3b3"></uni-icons>
</template> </template>
</view> </view>
<view :class="['line req', {err: err === 'account'}]"> <view :class="['line req', {err: err === 'account'}]">
@ -55,7 +53,6 @@
<view v-if="isDetail" class="val">{{ form.account }}</view> <view v-if="isDetail" class="val">{{ form.account }}</view>
<template v-else> <template v-else>
<input type="text" placeholder="请以院校首字母+admin的格式来设置" v-model="form.account" @change="handleErr('account')"> <input type="text" placeholder="请以院校首字母+admin的格式来设置" v-model="form.account" @change="handleErr('account')">
<uni-icons class="edit" type="compose" size="20" color="#b3b3b3"></uni-icons>
</template> </template>
</view> </view>
<view class="line"> <view class="line">
@ -63,7 +60,6 @@
<view v-if="isDetail" class="val">{{ form.position }}</view> <view v-if="isDetail" class="val">{{ form.position }}</view>
<template v-else> <template v-else>
<input type="text" placeholder="请输入" v-model="form.position"> <input type="text" placeholder="请输入" v-model="form.position">
<uni-icons class="edit" type="compose" size="20" color="#b3b3b3"></uni-icons>
</template> </template>
</view> </view>
<view class="line"> <view class="line">
@ -71,7 +67,6 @@
<view v-if="isDetail" class="val">{{ form.email }}</view> <view v-if="isDetail" class="val">{{ form.email }}</view>
<template v-else> <template v-else>
<input type="text" placeholder="请输入" v-model="form.email"> <input type="text" placeholder="请输入" v-model="form.email">
<uni-icons class="edit" type="compose" size="20" color="#b3b3b3"></uni-icons>
</template> </template>
</view> </view>
<view v-if="customerId" class="line"> <view v-if="customerId" class="line">

@ -12,6 +12,7 @@
v-for="item in list" v-for="item in list"
:threshold="0" :threshold="0"
:right-options="delOption" :right-options="delOption"
:disabled="!auth('订单管理:删除')"
@click="del(item)" @click="del(item)"
> >
<view class="item" @click="toDetail(item)"> <view class="item" @click="toDetail(item)">
@ -54,7 +55,7 @@
</template> </template>
<empty v-else></empty> <empty v-else></empty>
<uni-icons class="plus" type="plus-filled" size="60" color="#007eff" @click="$util.to(`../orderDetail/orderDetail?customerId=${customerId}`)"></uni-icons> <uni-icons v-if="auth('订单管理:新建订单')" class="plus" type="plus-filled" size="60" color="#007eff" @click="$util.to(`../orderDetail/orderDetail?customerId=${customerId}`)"></uni-icons>
<filter-popup :data="filterData" :form.sync="filterForm" v-model="popup" title="全部筛选" height="1104rpx" @finsh="subFinsh"></filter-popup> <filter-popup :data="filterData" :form.sync="filterForm" v-model="popup" title="全部筛选" height="1104rpx" @finsh="subFinsh"></filter-popup>
</view> </view>
</template> </template>

@ -43,12 +43,12 @@
</view> </view>
<view :class="['line req', {err: err === 'accountNum' + item.dataOrCourseId + item.authority}]"> <view :class="['line req', {err: err === 'accountNum' + item.dataOrCourseId + item.authority}]">
<view class="name">数量</view> <view class="name">数量</view>
<view v-if="item.authority" class="val">1</view> <view v-if="item.authority" class="ph">1</view>
<input v-else type="number" v-model="item.accountNum" placeholder="请输入账号数量" @input="calcFinalPrice(item)" @change="handleErr(item, 'accountNum')"> <input v-else type="number" v-model="item.accountNum" placeholder="请输入账号数量" @input="calcFinalPrice(item)" @change="handleErr(item, 'accountNum')">
</view> </view>
<view class="line"> <view class="line">
<view class="name">{{ item.authority ? '市场价' : '市场单价' }}</view> <view class="name">{{ item.authority ? '市场价' : '市场单价' }}</view>
<view class="val">{{ item.marketValue }}</view> <view class="ph">{{ item.marketValue }}</view>
</view> </view>
<view class="line"> <view class="line">
<view class="name">结算价</view> <view class="name">结算价</view>
@ -59,11 +59,11 @@
</view> </view>
<view class="line"> <view class="line">
<view class="name">折扣率</view> <view class="name">折扣率</view>
<view class="val">{{ item.discountRate }}</view> <view class="ph">{{ item.discountRate }}</view>
</view> </view>
<view class="line"> <view class="line">
<view class="name">平台服务费</view> <view class="name">平台服务费</view>
<view class="val">{{ item.serviceFee }}</view> <view class="ph">{{ item.serviceFee }}</view>
</view> </view>
<view :class="['line req', {err: err === 'finalPrice' + item.dataOrCourseId + item.authority}]"> <view :class="['line req', {err: err === 'finalPrice' + item.dataOrCourseId + item.authority}]">
<view class="name">成交价</view> <view class="name">成交价</view>

@ -1,5 +1,5 @@
<template> <template>
<view :class="['page', { show: isDetail }]"> <view :class="['page', { show: isDetail && (form.isDel !== 1 && (auth('订单管理:修改') || (form.orderStatus === 1 && auth('订单管理:续费'))) || auth('订单管理:删除')) }]">
<view class="block"> <view class="block">
<view class="l-title">基本信息</view> <view class="l-title">基本信息</view>
<view class="form-list"> <view class="form-list">
@ -77,10 +77,12 @@
<!-- 1查看时不可操作 <!-- 1查看时不可操作
2发货和启用不要同时出现生效前只会显示发货不发货按钮生效后只显示禁启用按钮 2发货和启用不要同时出现生效前只会显示发货不发货按钮生效后只显示禁启用按钮
3处理中的订单显示发货不显示禁用 --> 3处理中的订单显示发货不显示禁用 -->
<button v-if="item.status === 1 || isHandle || !orderId && auth('订单管理:发货')" class="course-btn" type="primary" @click.stop="handleDeliver(n, i)">{{ item.ship ? '取消' : ''}}发货</button> <template v-if="!isDetail && (item.ship == 0 || isHandle || !orderId)">
<button v-else-if="!isDetail && auth('订单管理:启用')" class="course-btn" type="primary" @click.stop="handleEnable(n, i)">{{ item.isEnable ? '禁用' : '启用'}}</button> <button v-if="auth('订单管理:发货')" class="course-btn" type="primary" @click.stop="handleDeliver(n, i)">{{ item.ship ? '取消' : ''}}发货</button>
<image v-if="!orderId || isRenew" class="del" src="@/static/image/trash.png" mode="widthFix" @click.stop="delCourse(c, i)"></image> </template>
<button v-if="(item.authority == 3 || item.authority == 4) && ((item.mallNonAssociatedLinks && item.mallNonAssociatedLinks.length) || item.shipContent)" class="course-btn mg" type="primary" @click.stop="showShip(item)">发货信息</button> <button v-else-if="!isDetail && auth('订单管理:启用')" class="course-btn" type="primary" @click.stop="handleEnable(n, i)">{{ item.isEnable ? '禁用' : '启用'}}</button>
<button v-if="auth('订单管理:发货') && (item.authority == 3 || item.authority == 4) && (!isDetail || (isDetail && item.shipContent))" class="course-btn mg" type="primary" @click.stop="showShip(item)">发货信息</button>
<image v-if="!orderId || isRenew || isHandle" class="del" src="@/static/image/trash.png" mode="widthFix" @click.stop="delCourse(c, i)"></image>
</view> </view>
</view> </view>
@ -88,7 +90,7 @@
<view class="line"> <view class="line">
<view class="label">起始日期</view> <view class="label">起始日期</view>
<!-- <view class="val">{{ item.startTime + (item.endTime && ' - ' + item.endTime) }}</view> --> <!-- <view class="val">{{ item.startTime + (item.endTime && ' - ' + item.endTime) }}</view> -->
<view v-if="isDetail || isEdit">{{ item.endTime ? item.startTime + ' - ' + item.endTime : item.startTime}}</view> <view v-if="isDetail || isEdit" class="ph">{{ item.endTime ? item.startTime + ' - ' + item.endTime : item.startTime}}</view>
<uni-datetime-picker v-else type="date" v-model="item.startTime" :border="false" @change="calcDate(item)"> <uni-datetime-picker v-else type="date" v-model="item.startTime" :border="false" @change="calcDate(item)">
<view :class="['ph', {val: item.startTime}]"> <view :class="['ph', {val: item.startTime}]">
{{ item.endTime ? item.startTime + ' - ' + item.endTime : item.startTime}} {{ item.endTime ? item.startTime + ' - ' + item.endTime : item.startTime}}
@ -97,26 +99,29 @@
</view> </view>
<view class="line" :class="[ {err: err === 'periodOfUse' + item.dataOrCourseId + item.authority}]"> <view class="line" :class="[ {err: err === 'periodOfUse' + item.dataOrCourseId + item.authority}]">
<view class="label">使用期限</view> <view class="label">使用期限</view>
<input class="period" type="number" v-model="item.periodOfUse" placeholder="请输入" :disabled="isDetail || isEdit" @input="calcDate(item, !item.authority)" @change="handleErr(item, 'periodOfUse')"> <view v-if="isDetail || isEdit" class="ph">{{item.periodOfUse}}{{ units.find(e => e.id === item.options).text }}</view>
<view v-if="isDetail || isEdit" class="defaultBox">{{item.periodOfUse}}{{ units.find(e => e.id === item.options).text }}</view> <template v-else>
<input class="period" type="number" v-model="item.periodOfUse" placeholder="请输入" @input="calcDate(item, !item.authority)" @change="handleErr(item, 'periodOfUse')">
<view v-else class="val unit" @click="selectUnit(item)"> <view class="val unit" @click="selectUnit(item)">
<text>{{ units.find(e => e.id === item.options).text }}</text> <text>{{ units.find(e => e.id === item.options).text }}</text>
<image class="icon" src="@/static/image/arrow-down.png" mode="widthFix"></image> <image class="icon" src="@/static/image/arrow-down.png" mode="widthFix"></image>
</view> </view>
</template>
</view> </view>
<view :class="['line req', {err: err === 'accountNum' + item.dataOrCourseId + item.authority}]"> <view :class="['line req', {err: err === 'accountNum' + item.dataOrCourseId + item.authority}]">
<view class="label">数量</view> <view class="label">数量</view>
<view v-if="item.authority" class="val">1</view> <view v-if="item.authority || (!item.authority && isDetail)" class="ph">1</view>
<input v-else type="number" v-model="item.accountNum" placeholder="请输入账号数量" @input="calcFinalPrice(item)" @change="handleErr(item, 'accountNum')"> <view v-else class="inline">
<input type="number" v-model="item.accountNum" placeholder="请输入账号数量" @input="calcFinalPrice(item)" @change="handleErr(item, 'accountNum')">
</view>
</view> </view>
<view class="line"> <view class="line">
<view class="label">{{ item.authority ? '市场价' : '市场单价' }}</view> <view class="label">{{ item.authority ? '市场价' : '市场单价' }}</view>
<view class="val">{{ item.marketValue && item.marketValue + '元' }}</view> <view class="ph">{{ item.marketValue && item.marketValue + '元' }}</view>
</view> </view>
<view class="line"> <view class="line">
<view class="label">结算价</view> <view class="label">结算价</view>
<view v-if="isDetail" class="defaultBox">{{ item.settlementPrice }}</view> <view v-if="isDetail" class="ph">{{ item.settlementPrice }}</view>
<view class="inline" v-else> <view class="inline" v-else>
<input type="number" v-model="item.settlementPrice" placeholder="请输入" @change="handleErr(item, 'settlementPrice')" @input="updateServiceFee(item)"> <input type="number" v-model="item.settlementPrice" placeholder="请输入" @change="handleErr(item, 'settlementPrice')" @input="updateServiceFee(item)">
@ -124,17 +129,17 @@
</view> </view>
<view class="line"> <view class="line">
<view class="label">折扣率</view> <view class="label">折扣率</view>
<view class="val">{{ item.discountRate }}</view> <view class="ph">{{ item.discountRate }}</view>
</view> </view>
<view class="line"> <view class="line">
<view class="label">平台服务费</view> <view class="label">平台服务费</view>
<view class="val">{{ item.serviceFee }}</view> <view class="ph">{{ item.serviceFee }}</view>
</view> </view>
<view :class="['line req', {err: err === 'finalPrice' + item.dataOrCourseId + item.authority}]"> <view :class="['line req', {err: err === 'finalPrice' + item.dataOrCourseId + item.authority}]">
<view class="label">成交价</view> <view class="label">成交价</view>
<view v-if="isDetail" class="defaultBox">{{ item.finalPrice }}</view> <view v-if="isDetail || (isEdit && !item.authority)" class="ph">{{ item.finalPrice }}</view>
<view class="inline" v-else> <view class="inline" v-else>
<input type="number" v-model="item.finalPrice" placeholder="请输入" :disabled="isEdit && !item.authority" @input="calcFinalValue(item)" @change="handleErr(item, 'finalPrice')"> <input type="number" v-model="item.finalPrice" placeholder="请输入" @input="calcFinalValue(item)" @change="handleErr(item, 'finalPrice')">
</view> </view>
</view> </view>
@ -145,7 +150,7 @@
</template> </template>
<view class="bottom"> <view class="bottom">
<view v-if="!orderId" class="add-wrap"> <view v-if="!orderId || isHandle" class="add-wrap">
<view class="add-btn" @click="toAdd"> <view class="add-btn" @click="toAdd">
<uni-icons class="icon" type="plus" color="#007FFF"></uni-icons> <uni-icons class="icon" type="plus" color="#007FFF"></uni-icons>
添加产品 添加产品
@ -169,7 +174,7 @@
</view> </view>
<view class="product-btns"> <view class="product-btns">
<view v-if="!isDetail" class="btn" @click="submit">提交({{ courses.length }})</view> <view v-if="!isDetail" class="btn" @click="submit">提交({{ courses.length }})</view>
<view v-if="isHandle || (!orderId && courses.length) && auth('订单管理:发货')" class="btn" @click="batchDeliver">{{ courses.find(e => !e.ship) ? '一键发货' : '取消全部发货' }}</view> <view v-if="auth('订单管理:发货') && (isHandle || (!orderId && courses.length))" class="btn" @click="batchDeliver">{{ courses.find(e => !e.ship) ? '一键发货' : '取消全部发货' }}</view>
</view> </view>
</view> </view>
</view> </view>
@ -186,12 +191,12 @@
<view class="text">续费</view> <view class="text">续费</view>
</view> </view>
</template> </template>
<view v-else class="item" @click="toAction(`../orderDetail/orderDetail?orderId=${orderId}&action=handle`)"> <view v-else-if="auth('订单管理:修改')" class="item" @click="toAction(`../orderDetail/orderDetail?orderId=${orderId}&action=handle`)">
<uni-icons class="icon" custom-prefix="iconfont" type="icon-edit" size="30" color="#959595"></uni-icons> <uni-icons class="icon" custom-prefix="iconfont" type="icon-edit" size="30" color="#959595"></uni-icons>
<view class="text">处理</view> <view class="text">处理</view>
</view> </view>
</template> </template>
<view class="item" @click="del"> <view v-if="auth('订单管理:删除')" class="item" @click="del">
<uni-icons class="icon" type="trash-filled" size="30" color="#959595"></uni-icons> <uni-icons class="icon" type="trash-filled" size="30" color="#959595"></uni-icons>
<view class="text">删除</view> <view class="text">删除</view>
</view> </view>
@ -208,8 +213,14 @@
</view> </view>
<uni-popup ref="info" type="bottom" background-color="#fff"> <uni-popup ref="info" type="bottom" background-color="#fff">
<view class="ship-info"> <view class="ship-info">
<view class="ship-text" v-html="shipInfo" @click="copy"></view> <view v-if="isDetail" class="ship-text" v-html="shipContent" @click="copy"></view>
<uni-easyinput type="textarea" v-model="shipContent" placeholder="请填写需交付的产品登录地址、账号、密码等内容...(300个字以内)" :disabled="isDetail"></uni-easyinput> <template v-else>
<uni-easyinput type="textarea" focus v-model="shipContent" placeholder="请填写需交付的产品登录地址、账号、密码等内容...(300个字以内)" maxlength="300"></uni-easyinput>
<view v-if="shipInfo" class="ship-links">
<view>产品链接</view>
<view class="tooltip" @click="copy">{{ shipInfo }}</view>
</view>
</template>
</view> </view>
<view v-if="!isDetail" class="ship-btns"> <view v-if="!isDetail" class="ship-btns">
<button @click.stop="closeShip">取消</button> <button @click.stop="closeShip">取消</button>
@ -637,7 +648,7 @@
handleDeliver(c, i) { handleDeliver(c, i) {
const row = this.courseList[c].list[i] const row = this.courseList[c].list[i]
row.ship = row.ship ? 0 : 1 row.ship = row.ship ? 0 : 1
this.isEdit && ship(row).then(res => {}).catch(res => {}) // if (row.ship == 1) row.isEnable = 1 //
}, },
// //
calcTotal(out) { calcTotal(out) {
@ -723,7 +734,7 @@
copy() { copy() {
const that = this const that = this
uni.setClipboardData({ uni.setClipboardData({
data: this.shipInfo, data: that.isDetail ? that.shipContent : this.shipInfo,
success() { success() {
that.$util.sucMsg('复制成功') that.$util.sucMsg('复制成功')
} }
@ -759,6 +770,7 @@
for (const i in list) { for (const i in list) {
list[i].list.forEach(e => { list[i].list.forEach(e => {
e.ship = ship e.ship = ship
if (e.ship == 1) e.isEnable = 1
courses.push(e) courses.push(e)
}) })
} }
@ -790,7 +802,7 @@
const unit = row.options // 使 const unit = row.options // 使
const useUnit = row.periodOfUse // 使 const useUnit = row.periodOfUse // 使
// //
const price = row.marketPrice // const price = row.marketPrice || 0 //
// //365,/12) // //365,/12)
row.marketValue = (!unit ? row.marketValue = (!unit ?
price / 365 * useUnit : price / 365 * useUnit :
@ -1017,6 +1029,7 @@
display: inline-flex; display: inline-flex;
align-items: center; align-items: center;
max-width: 480rpx; max-width: 480rpx;
margin-right: 10rpx;
} }
.course-action { .course-action {
display: inline-flex; display: inline-flex;
@ -1026,6 +1039,7 @@
padding: 0 16rpx; padding: 0 16rpx;
margin-right: 10rpx; margin-right: 10rpx;
font-size: 28rpx; font-size: 28rpx;
white-space: nowrap;
&.mg { &.mg {
margin-left: 10rpx; margin-left: 10rpx;
} }
@ -1053,6 +1067,10 @@
font-size: 28rpx; font-size: 28rpx;
color: #999; color: #999;
} }
.ph {
font-size: 28rpx;
color: #999;
}
.val { .val {
font-size: 28rpx; font-size: 28rpx;
color: #333; color: #333;
@ -1158,15 +1176,16 @@
.product-btns { .product-btns {
display: inline-flex; display: inline-flex;
align-items: center; align-items: center;
margin-left: 20rpx; margin-left: 10rpx;
} }
.btn { .btn {
padding: 0 20rpx; padding: 0 20rpx;
margin-left: 16rpx; margin-left: 8rpx;
line-height: 80rpx; line-height: 80rpx;
font-size: 30rpx; font-size: 26rpx;
text-align: center; text-align: center;
color: #fff; color: #fff;
white-space: nowrap;
border-radius: 10rpx; border-radius: 10rpx;
background-color: #007EFF; background-color: #007EFF;
} }
@ -1207,18 +1226,46 @@
font-size: 28rpx; font-size: 28rpx;
text-align: center; text-align: center;
} }
.defaultBox {
font-size: 28rpx;
}
.ship-info { .ship-info {
height: 400rpx;
padding: 30rpx; padding: 30rpx;
white-space: pre-wrap; white-space: pre-wrap;
font-size: 28rpx; font-size: 28rpx;
overflow: auto;
.ship-text { .ship-text {
margin-bottom: 20rpx; margin-bottom: 20rpx;
} }
} }
.ship-links {
position: relative;
display: flex;
justify-content: flex-end;
align-items: center;
margin-top: 20rpx;
font-size: 24rpx;
color: #007eff;
.tooltip {
z-index: 1000;
display: none;
position: absolute;
top: 40rpx;
left: 0;
max-width: 90%;
padding: 12px;
color: #fff;
font-size: 12px;
text-align: left;
line-height: 16px;
background-color: #333;
border-radius: 8px;
}
&:hover {
.tooltip {
display: block;
}
}
}
.ship-btns { .ship-btns {
display: flex; display: flex;
justify-content: center; justify-content: center;

@ -202,7 +202,15 @@
"navigationBarTitleText": "产品方案", "navigationBarTitleText": "产品方案",
"enablePullDownRefresh": false "enablePullDownRefresh": false
} }
} },
{
"path" : "scheme/scheme",
"style" :
{
"navigationBarTitleText": "方案详情",
"enablePullDownRefresh": false
}
}
] ]
} }
], ],

@ -10,7 +10,7 @@
</view> </view>
</view> </view>
<view class="list"> <view class="list">
<view class="item" @click="$util.to('../setting/setting')"> <view class="item" @click="$util.to('/team/setting/setting')">
<view class="left"> <view class="left">
<image class="icon" src="@/static/image/person3.png" mode=""></image> <image class="icon" src="@/static/image/person3.png" mode=""></image>
<text class="name">设置</text> <text class="name">设置</text>

Binary file not shown.

After

Width:  |  Height:  |  Size: 197 B

@ -17,6 +17,11 @@ ul {
border-radius: 16rpx; border-radius: 16rpx;
background-color: #fff; background-color: #fff;
} }
.ell {
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
}
.l-title { .l-title {
display: flex; display: flex;
align-items: center; align-items: center;
@ -232,6 +237,9 @@ ul {
border-top: 1px solid #f3f3f3; border-top: 1px solid #f3f3f3;
box-shadow: 0 -2px 2px #f5f5f5; box-shadow: 0 -2px 2px #f5f5f5;
box-sizing: border-box; box-sizing: border-box;
&:empty {
padding: 0 !important;
}
.item { .item {
text-align: center; text-align: center;
} }

@ -1,140 +1,159 @@
<template> <template>
<view> <view>
<view class="filter"> <view class="filter">
<uni-search-bar class="search" radius="30" placeholder="请输入方案名称" clearButton="auto" cancelButton="none" @confirm="search" /> <uni-search-bar class="search" radius="30" placeholder="请输入方案名称" clearButton="auto" cancelButton="none" v-model="keyword" />
</view> </view>
<ul class="tab"> <ul class="tab">
<li v-for="(tab, i) in tabs" :class="{active: curTab === tab.id}" @click="tabChange(tab)">{{ tab.name }}</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> </ul>
<view v-if="list.length" class="list"> <view v-if="list.length" class="list">
<view v-for="(item, i) in list" class="item" @click="toDetail(i + 2)"> <view v-for="(item, i) in list" class="item" @click="toDetail(item)">
<view class="c-name">{{ item.name }}</view> <view class="c-name ell">{{ item.title }}</view>
<view class="content"> <view class="content">
<view class="info"> <view class="info">
<view class="line"> <view class="line">
<view class="name">产品</view> <view class="name">产品</view>
<view class="val ell-wrap"> <view class="val ell-wrap">
<view :class="{ell: !item.toggle}" v-html="item.product"></view> <view :class="['product', {ell: !item.toggle}]">{{ item.productNames }}</view>
<view v-if="item.product.length > 14" class="toggle" @click.stop="toggle(item)">{{ item.toggle ? '收起' : '展开' }}</view> <view v-if="item.productNames && item.productNames.length > 24" class="toggle" @click.stop="toggle(item)">{{ item.toggle ? '收起' : '展开' }}</view>
</view> </view>
</view> </view>
<view class="line"> <view class="line">
<view class="name">更新日期</view> <view class="name">更新日期</view>
<view class="val">{{ item.date }}</view> <view class="val">{{ item.updateTime }}</view>
</view> </view>
<view class="line"> <view class="line">
<view class="name">适用专业</view> <view class="name">适用专业</view>
<view class="val">{{ item.major }}</view> <view class="val">{{ item.applicableMajor }}</view>
</view> </view>
</view> </view>
<view class="detail" @click.stop="toEmail(i)">下载</view>
</view> </view>
</view> </view>
</view> </view>
<empty v-else></empty> <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> </view>
</template> </template>
<script> <script>
import { schemeList, queryClassificationByType } from '@/apis/modules/article.js'
export default { export default {
data() { data() {
return { return {
curTab: '', active: '',
tabs: [ typeVisible: false,
{ classifications: [],
name: '不限', reachBottom: 0, // 0->,1->,-1->
id: '' status: 'more', // more|loading|noMore
}, searchTimer: null,
{ articleNameSort: 'desc',
name: '标准方案', keyword: '',
id: 1
},
{
name: '智信云方案',
id: 2
}
],
list: [], list: [],
all: [ page: 1,
{ pageSize: 10,
type: 1, }
toggle: false, },
name: '人工智能实验室建设方案-2020.1', watch: {
product: `python程序设计实验教学系统<br> keyword () {
Docker技术实验教学系统<br> clearTimeout(this.searchTimer)
JAVA语言程序设计实验教学系统<br> this.searchTimer = setTimeout(() => {
大数据开发实验教学系统<br> this.initList()
Openstack云计算实验教学系统`, }, 500)
date: '2022-06-02', }
major: '人工智能方向' },
}, //
{ onPullDownRefresh() {
type: 1, this.initList()
toggle: false, setTimeout(() => {
name: '大数据管理与应用专业建设方案', uni.stopPullDownRefresh()
product: `python程序设计实验教学系统<br> }, 1500)
量化投资实验教学系统<br> },
区块链数字货币交易实验系统<br> //
大数分析实验教学系统<br> onReachBottom() {
数据可视化实验教学系统<br> if (this.reachBottom >= 0) {
大数据实证科研平台<br> this.reachBottom = 1
全球宏观经济<br> this.status = 'loading'
数据库全球金融交易数据库 `, this.getList()
date: '2022-06-02',
major: '大数据方向'
},
{
type: 1,
toggle: false,
name: '金融科技实验室建设方案V2.0',
product: `python程序设计实验教学系统<br>
量化投资实验教学系统<br>
区块链数字货币交易实验教学系统<br>
大数据采集实验教学系统<br>
大数据分析实验教学系统<br>
金融建模实验教学系统<br>
互联网小贷实验教学系统<br>
互联网支付实验教学系统<br>
R语言实验教学系统<br>
供应链金融实验教学系统<br>
Python数据清洗实验教学系统<br>
数据可视化实验教学系统<br>
金融随机过程实验教学系统<br>
银行综合系统<br>
大数据实证科研平台<br>
财经数据库`,
date: '2022-06-02',
major: '金融科技,大数据方向'
}
]
} }
}, },
onShow() { onShow() {
this.list = JSON.parse(JSON.stringify(this.all)) this.keyword = ''
this.active = ''
this.initList()
this.getClassification()
}, },
methods: { methods: {
search(res) { getList() {
uni.showToast({ uni.showLoading({
title: '搜索:' + res.value, title: '加载中'
icon: 'none' })
schemeList({
keyWord: this.keyword,
pageNum: this.page,
pageSize: this.pageSize,
querySource: 4,
classificationId: this.active
}).then(({ data }) => {
uni.hideLoading()
// list
const list = data.records
list.forEach(e => {
if (e.productNames) e.toggle = e.productNames.length < 24 // 14
})
this.list = this.reachBottom > 0 ? [...this.list, ...list] : list
this.page++ // page+1
const noMore = this.list.length === data.total //
this.status = noMore ? 'noMore' : 'more' // noMore
this.reachBottom = noMore ? -1 : 0 // -1
}).catch(e => {
uni.hideLoading()
}) })
}, },
initList() {
this.page = 1
this.reachBottom = 0
this.getList()
},
//
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 // tab
tabChange(tab) { tabChange(tab) {
const { id } = tab this.active = tab.id
const { all } = this this.initList()
this.curTab = id
this.list = id ? all.filter(e => e.type === id) : all
}, },
// //
toDetail(id) { toDetail(item) {
this.$util.openFile(id) this.$util.to(`/team/scheme/scheme?id=` + item.id)
},
//
toEmail(id) {
this.$util.to(`../send/send?id=${id}`)
}, },
// //
toggle(item) { toggle(item) {
@ -145,6 +164,21 @@
</script> </script>
<style scoped lang="scss"> <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 { .list {
background-color: #fff; background-color: #fff;
.item { .item {
@ -173,15 +207,15 @@
color: #999; color: #999;
} }
.val { .val {
max-width: 88%;
font-size: 28rpx; font-size: 28rpx;
color: #333; color: #333;
} }
.ell { .product {
height: 38rpx; max-width: 67vw;
white-space: nowrap; white-space: pre-wrap;
text-overflow: ellipsis; &.ell {
overflow: hidden; white-space: nowrap;
}
} }
.toggle { .toggle {
margin-top: 10rpx; margin-top: 10rpx;
@ -196,4 +230,43 @@
white-space: nowrap; white-space: nowrap;
} }
} }
.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;
}
}
}
</style> </style>

@ -0,0 +1,83 @@
<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 }) => {
if (data.productList) data.product = data.productList.map(e => e.productName).join('、')
this.form = data
uni.hideLoading()
}).catch(e => {
uni.hideLoading()
})
},
//
download() {
uni.setStorageSync('files', {
copyWriting: this.form.title,
fileName: [this.form.fileName],
urls: [this.form.schemeFile]
})
this.$util.to(`/team/send/send`)
}
}
}
</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,6 @@
export default { export default {
data() { data() {
return { return {
id: '',
email: '', email: '',
otherEmail: '', otherEmail: '',
myVal: 1, myVal: 1,
@ -34,27 +33,15 @@
text: '', text: '',
value: 1 value: 1
}], }],
files: [
'人工智能实验室建设方案-2020.1.docx',
'大数据管理与应用专业建设方案.docx',
'金融科技实验室建设方案V2.0.docx'
]
} }
}, },
onShow() { onShow() {
const pages = getCurrentPages()
const { options } = pages[pages.length - 1]
this.id = options.id
this.getInfo() this.getInfo()
}, },
methods: { methods: {
// //
getInfo() { getInfo() {
const team = uni.getStorageSync('team') my().then(({ my }) => {
my({
partnerId: team.partnerId,
teamId: team.teamId
}).then(({ my }) => {
this.email = my.info.email this.email = my.info.email
}).catch(e => {}) }).catch(e => {})
}, },
@ -69,10 +56,9 @@
const { otherEmail } = this const { otherEmail } = this
if (this.myVal && !this.email) return this.$util.errMsg('请选择其他邮箱!') if (this.myVal && !this.email) return this.$util.errMsg('请选择其他邮箱!')
if (this.otherVal && !otherEmail) return this.$util.errMsg('请输入邮箱!') if (this.otherVal && !otherEmail) return this.$util.errMsg('请输入邮箱!')
mailFileSend({ const data = uni.getStorageSync('files')
copyWriting: this.files[this.id], data.mail = this.myVal ? this.email : otherEmail
mail: this.myVal ? this.email : otherEmail mailFileSend(data).then(res => {
}).then(res => {
this.$util.sucMsg('发送成功!') this.$util.sucMsg('发送成功!')
setTimeout(() => { setTimeout(() => {
uni.navigateBack() uni.navigateBack()

@ -24,7 +24,7 @@
</template> </template>
<empty v-else></empty> <empty v-else></empty>
<uni-icons class="plus" type="plus-filled" size="60" color="#007eff" @click="$util.to('../addStaff/addStaff')"></uni-icons> <uni-icons v-if="auth('合伙管理:账号管理:添加城市合伙人')" class="plus" type="plus-filled" size="60" color="#007eff" @click="$util.to('../addStaff/addStaff')"></uni-icons>
</view> </view>
</template> </template>

@ -0,0 +1,10 @@
## 0.2.1(2022-05-09)
- 修复 content 为空时仍然弹出的bug
## 0.2.0(2022-05-07)
**注意:破坏性更新**
- 更新 text 属性变更为 content
- 更新 移除 width 属性
## 0.1.1(2022-04-27)
- 修复 组件根 text 嵌套组件 warning
## 0.1.0(2022-04-21)
- 初始化

@ -0,0 +1,70 @@
<template>
<view class="uni-tooltip">
<slot></slot>
<view v-if="content || $slots.content" class="uni-tooltip-popup">
<slot name="content">
{{content}}
</slot>
</view>
</view>
</template>
<script>
/**
* Tooltip 提示文字
* @description 常用于展示鼠标 hover 时的提示信息
* @tutorial https://uniapp.dcloud.io/component/uniui/uni-tooltip
* @property {String} content 弹出层显示的内容
* @property {String} placement出现位置, 目前只支持 left
*/
export default {
name: "uni-tooltip",
data() {
return {
};
},
props: {
content: {
type: String,
default: ''
},
placement: {
type: String,
default: 'bottom'
},
}
}
</script>
<style>
.uni-tooltip {
position: relative;
cursor: pointer;
}
.uni-tooltip-popup {
z-index: 1000;
display: none;
position: absolute;
top: 40rpx;
left: 0;
max-width: 90%;
background-color: #333;
border-radius: 8px;
color: #fff;
font-size: 12px;
text-align: left;
line-height: 16px;
padding: 12px;
}
.uni-tooltip:hover .uni-tooltip-popup {
display: block;
}
</style>

@ -0,0 +1,83 @@
{
"id": "uni-tooltip",
"displayName": "uni-tooltip",
"version": "0.2.1",
"description": "Tooltip 提示文字",
"keywords": [
"uni-tooltip",
"uni-ui",
"tooltip",
"tip",
"文字提示"
],
"repository": "",
"engines": {
},
"dcloudext": {
"category": [
"前端组件",
"通用组件"
],
"sale": {
"regular": {
"price": "0.00"
},
"sourcecode": {
"price": "0.00"
}
},
"contact": {
"qq": ""
},
"declaration": {
"ads": "无 ",
"data": "无",
"permissions": "无"
},
"npmurl": ""
},
"uni_modules": {
"dependencies": [],
"encrypt": [],
"platforms": {
"cloud": {
"tcb": "y",
"aliyun": "y"
},
"client": {
"Vue": {
"vue2": "y",
"vue3": "y"
},
"App": {
"app-vue": "y",
"app-nvue": "u"
},
"H5-mobile": {
"Safari": "y",
"Android Browser": "y",
"微信浏览器(Android)": "y",
"QQ浏览器(Android)": "y"
},
"H5-pc": {
"Chrome": "y",
"IE": "y",
"Edge": "y",
"Firefox": "y",
"Safari": "y"
},
"小程序": {
"微信": "y",
"阿里": "u",
"百度": "u",
"字节跳动": "u",
"QQ": "u"
},
"快应用": {
"华为": "u",
"联盟": "u"
}
}
}
}
}

@ -0,0 +1,8 @@
## Badge 数字角标
> **组件名:uni-tooltip**
> 代码块: `uTooltip`
数字角标一般和其它控件(列表、9宫格等)配合使用,用于进行数量提示,默认为实心灰色背景,
### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-tooltip)
#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839
Loading…
Cancel
Save