@ -0,0 +1,2 @@ |
|||||||
|
unpackage |
||||||
|
node_modules |
@ -0,0 +1,24 @@ |
|||||||
|
{ // launch.json 配置了启动调试时相关设置,configurations下节点名称可为 app-plus/h5/mp-weixin/mp-baidu/mp-alipay/mp-qq/mp-toutiao/mp-360/ |
||||||
|
// launchtype项可配置值为local或remote, local代表前端连本地云函数,remote代表前端连云端云函数 |
||||||
|
"version": "0.0", |
||||||
|
"configurations": [{ |
||||||
|
"default" : |
||||||
|
{ |
||||||
|
"launchtype" : "local" |
||||||
|
}, |
||||||
|
"h5" : |
||||||
|
{ |
||||||
|
"launchtype" : "local" |
||||||
|
}, |
||||||
|
"mp-toutiao" : |
||||||
|
{ |
||||||
|
"launchtype" : "local" |
||||||
|
}, |
||||||
|
"mp-weixin" : |
||||||
|
{ |
||||||
|
"launchtype" : "local" |
||||||
|
}, |
||||||
|
"type" : "uniCloud" |
||||||
|
} |
||||||
|
] |
||||||
|
} |
@ -0,0 +1,36 @@ |
|||||||
|
<script> |
||||||
|
export default { |
||||||
|
onLaunch: function() { |
||||||
|
// uni.setEnableDebug({ |
||||||
|
// enableDebug: true |
||||||
|
// }) |
||||||
|
}, |
||||||
|
onShow: function() { |
||||||
|
console.log('App Launch'); |
||||||
|
const updateManager = uni.getUpdateManager(); |
||||||
|
// 检查小程序是否有新版本发布 |
||||||
|
updateManager.onCheckForUpdate(function (res) { |
||||||
|
// 请求完新版本信息的回调 |
||||||
|
console.log('onCheckForUpdate', res.hasUpdate); |
||||||
|
}); |
||||||
|
|
||||||
|
// 小程序有新版本,则静默下载新版本,做好更新准备 |
||||||
|
updateManager.onUpdateReady(function (res) { |
||||||
|
updateManager.applyUpdate() |
||||||
|
}); |
||||||
|
|
||||||
|
updateManager.onUpdateFailed(function (res) { |
||||||
|
console.log('onUpdateFailed', res); |
||||||
|
// 新的版本下载失败 |
||||||
|
uni.showModal({ |
||||||
|
title: '已经有新版本了哟~', |
||||||
|
content: '新版本已经上线啦~,请您删除当前小程序,重新搜索打开哟~' |
||||||
|
}); |
||||||
|
}) |
||||||
|
} |
||||||
|
} |
||||||
|
</script> |
||||||
|
|
||||||
|
<style lang="scss"> |
||||||
|
@import '@/uni_modules/uni-scss/index.scss'; |
||||||
|
</style> |
@ -0,0 +1,26 @@ |
|||||||
|
import request from '@/apis/request.js' |
||||||
|
const { get, post } = request |
||||||
|
|
||||||
|
export const partnerOperatingList = (data) => { |
||||||
|
return post('nakadai/nakadai/partner/article/management/partnerOperatingList', data) |
||||||
|
} |
||||||
|
|
||||||
|
export const findById = id => { |
||||||
|
return post('nakadai/nakadai/applets/partner/browse?contentId=' + id) |
||||||
|
} |
||||||
|
|
||||||
|
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) |
||||||
|
} |
||||||
|
|
||||||
|
export const collectCourse = (id, state) => { |
||||||
|
return post('nakadai/nakadai/partner/article/management/collectCourse?contentId=' + id + '&state=' + state) |
||||||
|
} |
@ -0,0 +1,54 @@ |
|||||||
|
import request from '@/apis/request.js' |
||||||
|
const { get, post } = request |
||||||
|
|
||||||
|
export const queryCustomer = (data) => { |
||||||
|
return post('nakadai/nakadai/customer/queryCustomer', data) |
||||||
|
} |
||||||
|
|
||||||
|
export const list = (data) => { |
||||||
|
return post('nakadai/nakadai/applets/customer/getCustomerListBasedOnBusinessManagerId', data) |
||||||
|
} |
||||||
|
|
||||||
|
export const all = (data) => { |
||||||
|
return post('nakadai/nakadai/applets/customer/customerList', data) |
||||||
|
} |
||||||
|
|
||||||
|
export const queryCustomerDetails = (data) => { |
||||||
|
return get('nakadai/nakadai/customer/queryCustomerDetails', data) |
||||||
|
} |
||||||
|
|
||||||
|
export const querySchool = (data) => { |
||||||
|
return get('nakadai/nakadai/school/querySchool', data) |
||||||
|
} |
||||||
|
|
||||||
|
export const queryIndustryClass = (data) => { |
||||||
|
return get('nakadai/nakadai/hrIndustryClass/queryIndustryClass', data) |
||||||
|
} |
||||||
|
|
||||||
|
export const queryIndustry = (data) => { |
||||||
|
return get('nakadai/nakadai/hrIndustry/queryIndustry', data) |
||||||
|
} |
||||||
|
|
||||||
|
export const queryCustomerIsExists = (data) => { |
||||||
|
return get('nakadai/nakadai/customer/queryCustomerIsExists', data) |
||||||
|
} |
||||||
|
|
||||||
|
export const addCustomer = (data) => { |
||||||
|
return post('nakadai/nakadai/customer/addCustomer', data) |
||||||
|
} |
||||||
|
|
||||||
|
export const updateCustomer = (data) => { |
||||||
|
return post('nakadai/nakadai/customer/updateCustomer', data) |
||||||
|
} |
||||||
|
|
||||||
|
export const getProductsSubscribedByCustomers = (data) => { |
||||||
|
return get('nakadai/nakadai/customer/getProductsSubscribedByCustomers', data) |
||||||
|
} |
||||||
|
|
||||||
|
export const getTeamsByAccountId = (data) => { |
||||||
|
return post('nakadai/nakadai/applets/customer/getTeamsByAccountId', data) |
||||||
|
} |
||||||
|
|
||||||
|
export const getTheBusinessManagerIdsUnderTheTeam = id => { |
||||||
|
return post(`nakadai/nakadai/applets/customer/getTheBusinessManagerIdsUnderTheTeam?id=${id}`) |
||||||
|
} |
@ -0,0 +1,42 @@ |
|||||||
|
import request from '@/apis/request.js' |
||||||
|
const { get, post } = request |
||||||
|
|
||||||
|
export const getOrderOtherTime = (data) => { |
||||||
|
return post('nakadai/nakadai/orderOther/getOrderOtherTime', data) |
||||||
|
} |
||||||
|
|
||||||
|
export const add = (data) => { |
||||||
|
return post('nakadai/nakadai/order/add', data) |
||||||
|
} |
||||||
|
|
||||||
|
export const update = (data) => { |
||||||
|
return post('nakadai/nakadai/order/update', data) |
||||||
|
} |
||||||
|
|
||||||
|
export const getDetail = (data) => { |
||||||
|
return get('nakadai/nakadai/order/get', data) |
||||||
|
} |
||||||
|
|
||||||
|
export const renew = (data) => { |
||||||
|
return post('nakadai/nakadai/orderOther/renew', data) |
||||||
|
} |
||||||
|
|
||||||
|
export const list = (data) => { |
||||||
|
return post('nakadai/nakadai/applets/order/orderList', data) |
||||||
|
} |
||||||
|
|
||||||
|
export const orderList = (data) => { |
||||||
|
return post('nakadai/nakadai/order/list', data) |
||||||
|
} |
||||||
|
|
||||||
|
export const del = (data) => { |
||||||
|
return post('nakadai/nakadai/order/delete', data) |
||||||
|
} |
||||||
|
|
||||||
|
export const miniProgramOrderRecord = (data) => { |
||||||
|
return post('nakadai/nakadai/applets/order/miniProgramOrderRecord', data) |
||||||
|
} |
||||||
|
|
||||||
|
export const queryCitySettlementPrice = (mallId, provinceId, cityId) => { |
||||||
|
return post(`nakadai/mallPrice/queryCitySettlementPrice?mallId=${mallId}&provinceId=${provinceId}&cityId=${cityId}`) |
||||||
|
} |
@ -0,0 +1,42 @@ |
|||||||
|
import request from '@/apis/request.js' |
||||||
|
const { get, post } = request |
||||||
|
|
||||||
|
export const savePartnerAccount = (data) => { |
||||||
|
return post('nakadai/nakadai/partnerAccount/savePartnerAccount', data) |
||||||
|
} |
||||||
|
|
||||||
|
export const teamList = (data) => { |
||||||
|
return post('nakadai/nakadai/partnerAccount/partnerAccountList', data) |
||||||
|
} |
||||||
|
|
||||||
|
export const generateInvitationCode = accountId => { |
||||||
|
return post(`nakadai/nakadai/partnerAccount/generateInvitationCode?accountId=${accountId}`) |
||||||
|
} |
||||||
|
|
||||||
|
export const treeList = (data) => { |
||||||
|
return post('nakadai/nakadai/partnerClassification/treeList', data) |
||||||
|
} |
||||||
|
|
||||||
|
export const my = (data) => { |
||||||
|
return get('nakadai/nakadai/partner-team/my', data) |
||||||
|
} |
||||||
|
|
||||||
|
export const mailFileSend = (data) => { |
||||||
|
return post('nakadai/nakadai/partnerAccount/mailFileSend', data) |
||||||
|
} |
||||||
|
|
||||||
|
export const salesProgress = data => { |
||||||
|
return post(`nakadai/nakadai/applets/partner/salesProgress`, data) |
||||||
|
} |
||||||
|
|
||||||
|
export const annualOperatingAnalysis = data => { |
||||||
|
return post(`nakadai/nakadai/applets/partner/annualOperatingAnalysis`, data) |
||||||
|
} |
||||||
|
|
||||||
|
export const editProvinceCity = data => { |
||||||
|
return post(`nakadai/nakadai/partner-team/editProvinceCity`, data) |
||||||
|
} |
||||||
|
|
||||||
|
export const getPartnerTeamRates = data => { |
||||||
|
return post(`nakadai/nakadai/partner-team/getPartnerTeamRates`, data) |
||||||
|
} |
@ -0,0 +1,50 @@ |
|||||||
|
import request from '@/apis/request.js' |
||||||
|
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') |
||||||
|
} |
||||||
|
|
||||||
|
export const productTypeList = () => { |
||||||
|
return get('nakadai/productType/productTypeList') |
||||||
|
} |
||||||
|
|
||||||
|
export const addToShoppingCart = (data) => { |
||||||
|
return post('nakadai/mini/program/shopping/cart/addToShoppingCart', data) |
||||||
|
} |
||||||
|
|
||||||
|
export const delCart = (data) => { |
||||||
|
return post('nakadai/mini/program/shopping/cart/batchDeletion', data) |
||||||
|
} |
||||||
|
|
||||||
|
export const shoppingCartList = (data) => { |
||||||
|
return post('nakadai/mini/program/shopping/cart/shoppingCartList', data) |
||||||
|
} |
||||||
|
|
||||||
|
export const courseDiscipline = () => { |
||||||
|
return get('nakadai/nakadai/subject/courseDiscipline') |
||||||
|
} |
||||||
|
|
||||||
|
export const courseProfessionalClass = id => { |
||||||
|
return get('nakadai/nakadai/subject/courseProfessionalClass?disciplineId=' + id) |
||||||
|
} |
||||||
|
|
||||||
|
export const courseProfessional = id => { |
||||||
|
return get('nakadai/nakadai/subject/courseProfessional?professionalClassId=' + id) |
||||||
|
} |
@ -0,0 +1,84 @@ |
|||||||
|
import request from '@/apis/request.js' |
||||||
|
const { get, post } = request |
||||||
|
|
||||||
|
export const login = (data) => { |
||||||
|
return post('users/users/user/weChatAppletCallbackByPartner', data) |
||||||
|
} |
||||||
|
|
||||||
|
export const queryProvince = () => { |
||||||
|
return get('nakadai/nakadai/province/queryProvince') |
||||||
|
} |
||||||
|
|
||||||
|
export const queryCity = (data) => { |
||||||
|
return get('nakadai/nakadai/city/queryCity', data) |
||||||
|
} |
||||||
|
|
||||||
|
export const updateAvatars = url => { |
||||||
|
return post(`users/users/user/updateAvatars?url=` + url) |
||||||
|
} |
||||||
|
|
||||||
|
export const userBinding = (data) => { |
||||||
|
return post('users/users/user/userBinding', data) |
||||||
|
} |
||||||
|
|
||||||
|
export const examinePassword = (data) => { |
||||||
|
return post('users/users/userAccount/examinePassword', data) |
||||||
|
} |
||||||
|
|
||||||
|
export const getUserRolesPermissionMenu = (data) => { |
||||||
|
return get('users/users/user-role/getUserRolesPermissionMenu', data) |
||||||
|
} |
||||||
|
|
||||||
|
export const updatePersonCenter = (data) => { |
||||||
|
return post('users/users/userAccount/updatePersonCenter', data) |
||||||
|
} |
||||||
|
|
||||||
|
export const queryUserInfoDetails = () => { |
||||||
|
return get('users/users/userAccount/queryUserInfoDetails') |
||||||
|
} |
||||||
|
|
||||||
|
export const updateMyEmail = (data) => { |
||||||
|
return post('nakadai/nakadai/partner-team/updateMyEmail', data) |
||||||
|
} |
||||||
|
|
||||||
|
export const mailCodeSend = (data) => { |
||||||
|
return post('nakadai/nakadai/partner-team/mailCodeSend', data) |
||||||
|
} |
||||||
|
|
||||||
|
export const changeAccount = account => { |
||||||
|
return post(`users/users/applets/mine/changeAccount?account=${account}`) |
||||||
|
} |
||||||
|
|
||||||
|
export const changePhoneNumber = (phone, code) => { |
||||||
|
return post(`users/users/applets/mine/changePhoneNumber?phone=${phone}&code=${code}`) |
||||||
|
} |
||||||
|
|
||||||
|
export const checkIfAnAccountExists = account => { |
||||||
|
return post(`users/users/applets/mine/checkIfAnAccountExists?account=${account}`) |
||||||
|
} |
||||||
|
|
||||||
|
export const checkIfThePhoneNumberExists = phone => { |
||||||
|
return post(`users/users/applets/mine/checkIfThePhoneNumberExists?phone=${phone}`) |
||||||
|
} |
||||||
|
|
||||||
|
export const queryPartnerAccount = phone => { |
||||||
|
return post(`nakadai/nakadai/partnerAccount/queryPartnerAccount?phone=${phone}`) |
||||||
|
} |
||||||
|
|
||||||
|
export const getSessionKey = data => { |
||||||
|
return post(`users/users/user/getSessionKey`, data) |
||||||
|
} |
||||||
|
|
||||||
|
export const partnerAccountApplication = data => { |
||||||
|
return post(`nakadai/nakadai/partnerAccount/partnerAccountApplication`, data) |
||||||
|
} |
||||||
|
|
||||||
|
export const loginByOpenid = openid => { |
||||||
|
return post(`users/users/user/loginByOpenid?openid=` + openid) |
||||||
|
} |
||||||
|
|
||||||
|
export const checkWorkNumOrAccount = account => { |
||||||
|
return post(`occupationlab/occupationlab/architecture/checkWorkNumOrAccount?platformId=4&type=0&account=` + account) |
||||||
|
} |
||||||
|
|
||||||
|
export const updateUserAvatars = `http://39.108.250.202:9000/users/users/userAccount/updateUserAvatars` |
@ -0,0 +1,91 @@ |
|||||||
|
import config from '@/config/request' |
||||||
|
let HTTP_COUNT = 0 // loading次数
|
||||||
|
|
||||||
|
const request = options => { |
||||||
|
HTTP_COUNT++ |
||||||
|
if (config.showLoading) { |
||||||
|
// 请求数据时的loading
|
||||||
|
// uni.showToast({
|
||||||
|
// title: '加载中',
|
||||||
|
// duration: 200,
|
||||||
|
// icon: 'loading'
|
||||||
|
// })
|
||||||
|
} |
||||||
|
const header = Object.assign({}, config.headers, { |
||||||
|
token: uni.getStorageSync('token') |
||||||
|
}) |
||||||
|
const otherUrl = ['queryPartnerAccount', 'getSessionKey', 'loginByOpenid', 'partnerAccountApplication', 'checkWorkNumOrAccount'] |
||||||
|
return new Promise((resolve, reject)=>{ |
||||||
|
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, |
||||||
|
method: options.method || 'GET', // 请求类型,默认为GET
|
||||||
|
data: options.data || {}, // 请求参数,默认空对象
|
||||||
|
success: ({ data }) => { |
||||||
|
const { status, message } = data |
||||||
|
// 状态判断,根据后台定义并提示
|
||||||
|
if (status === 200) { |
||||||
|
resolve(data) |
||||||
|
} else if (status == 401) { |
||||||
|
// 登录过期
|
||||||
|
uni.clearStorageSync() |
||||||
|
uni.showToast({ |
||||||
|
title: message, |
||||||
|
icon: 'none' |
||||||
|
}) |
||||||
|
setTimeout(() => { |
||||||
|
uni.navigateTo({ |
||||||
|
url: '../login/login' |
||||||
|
}) |
||||||
|
}, 1500) |
||||||
|
reject(data) |
||||||
|
} else if (status == 10028 || status == 10014) { // 用户不存在
|
||||||
|
resolve(data) |
||||||
|
} else if (!status) { |
||||||
|
resolve(data) |
||||||
|
} else { |
||||||
|
uni.showToast({ |
||||||
|
title: message, |
||||||
|
icon: 'none' |
||||||
|
}) |
||||||
|
reject(data) |
||||||
|
} |
||||||
|
}, |
||||||
|
fail: err => { |
||||||
|
uni.showToast({ |
||||||
|
title: '请求失败!', |
||||||
|
icon: 'none' |
||||||
|
}) |
||||||
|
reject(err) |
||||||
|
}, |
||||||
|
complete: () => { |
||||||
|
if (config.showLoading) { |
||||||
|
// HTTP_COUNT--
|
||||||
|
// HTTP_COUNT || uni.hideLoading()
|
||||||
|
} |
||||||
|
} |
||||||
|
}) |
||||||
|
}) |
||||||
|
} |
||||||
|
|
||||||
|
const get = (url, data, options = {}) => { |
||||||
|
options.method = 'GET' |
||||||
|
options.data = data |
||||||
|
options.url = url |
||||||
|
return request(options) |
||||||
|
} |
||||||
|
|
||||||
|
const post = (url, data, options = {}) => { |
||||||
|
options.method = 'POST' |
||||||
|
options.data = data |
||||||
|
options.url = url |
||||||
|
return request(options) |
||||||
|
} |
||||||
|
|
||||||
|
export default { |
||||||
|
request, |
||||||
|
get, |
||||||
|
post |
||||||
|
} |
@ -0,0 +1,40 @@ |
|||||||
|
<template> |
||||||
|
<view class="none"> |
||||||
|
<image src="../../static/image/none.png" mode="widthFix"></image> |
||||||
|
<view class="text">{{ text }}</view> |
||||||
|
</view> |
||||||
|
</template> |
||||||
|
|
||||||
|
<script> |
||||||
|
export default { |
||||||
|
props: { |
||||||
|
text: { |
||||||
|
type: String, |
||||||
|
default: '暂无数据' |
||||||
|
}, |
||||||
|
}, |
||||||
|
data() { |
||||||
|
return { |
||||||
|
|
||||||
|
} |
||||||
|
}, |
||||||
|
methods: { |
||||||
|
|
||||||
|
} |
||||||
|
} |
||||||
|
</script> |
||||||
|
|
||||||
|
<style scoped lang="scss"> |
||||||
|
.none { |
||||||
|
padding-top: 100rpx; |
||||||
|
text-align: center; |
||||||
|
image { |
||||||
|
width: 426rpx; |
||||||
|
margin-bottom: 52rpx; |
||||||
|
} |
||||||
|
.text { |
||||||
|
font-size: 28rpx; |
||||||
|
color: #333; |
||||||
|
} |
||||||
|
} |
||||||
|
</style> |
@ -0,0 +1,130 @@ |
|||||||
|
<template> |
||||||
|
<view |
||||||
|
class="u-mask" |
||||||
|
hover-stop-propagation |
||||||
|
:style="[maskStyle, zoomStyle]" |
||||||
|
@tap="click" |
||||||
|
@touchmove.stop.prevent="() => {}" |
||||||
|
:class="{ |
||||||
|
'u-mask-zoom': zoom, |
||||||
|
'u-mask-show': show, |
||||||
|
}" |
||||||
|
> |
||||||
|
<slot /> |
||||||
|
</view> |
||||||
|
</template> |
||||||
|
|
||||||
|
<script> |
||||||
|
/** |
||||||
|
* mask 遮罩 |
||||||
|
* @description 创建一个遮罩层,用于强调特定的页面元素,并阻止用户对遮罩下层的内容进行操作,一般用于弹窗场景 |
||||||
|
* @tutorial https://www.uviewui.com/components/mask.html |
||||||
|
* @property {Boolean} show 是否显示遮罩(默认false) |
||||||
|
* @property {String Number} z-index z-index 层级(默认1070) |
||||||
|
* @property {Object} custom-style 自定义样式对象,见上方说明 |
||||||
|
* @property {String Number} duration 动画时长,单位毫秒(默认300) |
||||||
|
* @property {Boolean} zoom 是否使用scale对这招进行缩放(默认true) |
||||||
|
* @property {Boolean} mask-click-able 遮罩是否可点击,为false时点击不会发送click事件(默认true) |
||||||
|
* @event {Function} click mask-click-able为true时,点击遮罩发送此事件 |
||||||
|
* @example <u-mask :show="show" @click="show = false"></u-mask> |
||||||
|
*/ |
||||||
|
export default { |
||||||
|
name: "u-mask", |
||||||
|
props: { |
||||||
|
// 是否显示遮罩 |
||||||
|
show: { |
||||||
|
type: Boolean, |
||||||
|
default: false, |
||||||
|
}, |
||||||
|
// 层级z-index |
||||||
|
zIndex: { |
||||||
|
type: [Number, String], |
||||||
|
default: "", |
||||||
|
}, |
||||||
|
// 用户自定义样式 |
||||||
|
customStyle: { |
||||||
|
type: Object, |
||||||
|
default() { |
||||||
|
return {}; |
||||||
|
}, |
||||||
|
}, |
||||||
|
// 遮罩的动画样式, 是否使用使用zoom进行scale进行缩放 |
||||||
|
zoom: { |
||||||
|
type: Boolean, |
||||||
|
default: true, |
||||||
|
}, |
||||||
|
// 遮罩的过渡时间,单位为ms |
||||||
|
duration: { |
||||||
|
type: [Number, String], |
||||||
|
default: 300, |
||||||
|
}, |
||||||
|
// 是否可以通过点击遮罩进行关闭 |
||||||
|
maskClickAble: { |
||||||
|
type: Boolean, |
||||||
|
default: true, |
||||||
|
}, |
||||||
|
}, |
||||||
|
data() { |
||||||
|
return { |
||||||
|
zoomStyle: { |
||||||
|
transform: "", |
||||||
|
}, |
||||||
|
scale: "scale(1.2, 1.2)", |
||||||
|
}; |
||||||
|
}, |
||||||
|
watch: { |
||||||
|
show(n) { |
||||||
|
if (n && this.zoom) { |
||||||
|
// 当展示遮罩的时候,设置scale为1,达到缩小(原来为1.2)的效果 |
||||||
|
this.zoomStyle.transform = "scale(1, 1)"; |
||||||
|
} else if (!n && this.zoom) { |
||||||
|
// 当隐藏遮罩的时候,设置scale为1.2,达到放大(因为显示遮罩时已重置为1)的效果 |
||||||
|
this.zoomStyle.transform = this.scale; |
||||||
|
} |
||||||
|
}, |
||||||
|
}, |
||||||
|
computed: { |
||||||
|
maskStyle() { |
||||||
|
let style = {}; |
||||||
|
style.backgroundColor = "rgba(0, 0, 0, 0.6)"; |
||||||
|
if (this.show) |
||||||
|
style.zIndex = this.zIndex ? this.zIndex : this.$u.zIndex.mask; |
||||||
|
else style.zIndex = -1; |
||||||
|
style.transition = `all ${this.duration / 1000}s ease-in-out`; |
||||||
|
// 判断用户传递的对象是否为空,不为空就进行合并 |
||||||
|
if (Object.keys(this.customStyle).length) |
||||||
|
style = { |
||||||
|
...style, |
||||||
|
...this.customStyle, |
||||||
|
}; |
||||||
|
return style; |
||||||
|
}, |
||||||
|
}, |
||||||
|
methods: { |
||||||
|
click() { |
||||||
|
if (!this.maskClickAble) return; |
||||||
|
this.$emit("click"); |
||||||
|
}, |
||||||
|
}, |
||||||
|
}; |
||||||
|
</script> |
||||||
|
|
||||||
|
<style lang="scss" scoped> |
||||||
|
.u-mask { |
||||||
|
position: fixed; |
||||||
|
top: 0; |
||||||
|
left: 0; |
||||||
|
right: 0; |
||||||
|
bottom: 0; |
||||||
|
opacity: 0; |
||||||
|
transition: transform 0.3s; |
||||||
|
} |
||||||
|
|
||||||
|
.u-mask-show { |
||||||
|
opacity: 1; |
||||||
|
} |
||||||
|
|
||||||
|
.u-mask-zoom { |
||||||
|
transform: scale(1.2, 1.2); |
||||||
|
} |
||||||
|
</style> |
@ -0,0 +1,510 @@ |
|||||||
|
<template> |
||||||
|
<view |
||||||
|
v-if="visibleSync" |
||||||
|
:style="[ |
||||||
|
customStyle, |
||||||
|
{ |
||||||
|
zIndex: uZindex - 1, |
||||||
|
}, |
||||||
|
]" |
||||||
|
class="u-drawer" |
||||||
|
hover-stop-propagation |
||||||
|
> |
||||||
|
<z-mask |
||||||
|
:duration="duration" |
||||||
|
:custom-style="maskCustomStyle" |
||||||
|
:maskClickAble="maskCloseAble" |
||||||
|
:z-index="uZindex - 2" |
||||||
|
:show="showDrawer && mask" |
||||||
|
@click="maskClick" |
||||||
|
></z-mask> |
||||||
|
<view |
||||||
|
class="u-drawer-content" |
||||||
|
@tap="modeCenterClose(mode)" |
||||||
|
:class="[ |
||||||
|
safeAreaInsetBottom ? 'safe-area-inset-bottom' : '', |
||||||
|
'u-drawer-' + mode, |
||||||
|
showDrawer ? 'u-drawer-content-visible' : '', |
||||||
|
zoom && mode == 'center' ? 'u-animation-zoom' : '', |
||||||
|
]" |
||||||
|
@transitionend="transitionend" |
||||||
|
@touchmove.stop.prevent |
||||||
|
@tap.stop.prevent |
||||||
|
:style="[style]" |
||||||
|
> |
||||||
|
<view |
||||||
|
class="u-mode-center-box" |
||||||
|
@tap.stop.prevent |
||||||
|
@touchmove.stop.prevent |
||||||
|
v-if="mode == 'center'" |
||||||
|
:style="[centerStyle]" |
||||||
|
> |
||||||
|
<u-icon |
||||||
|
@click="close" |
||||||
|
v-if="closeable" |
||||||
|
class="u-close" |
||||||
|
:class="['u-close--' + closeIconPos]" |
||||||
|
:name="closeIcon" |
||||||
|
:color="closeIconColor" |
||||||
|
:size="closeIconSize" |
||||||
|
></u-icon> |
||||||
|
<scroll-view class="u-drawer__scroll-view" scroll-y="true"> |
||||||
|
<slot /> |
||||||
|
</scroll-view> |
||||||
|
<slot name="fixedContent" /> |
||||||
|
</view> |
||||||
|
<scroll-view class="u-drawer__scroll-view" scroll-y="true" v-else> |
||||||
|
<slot /> |
||||||
|
</scroll-view> |
||||||
|
<view @tap="close" class="u-close" :class="['u-close--' + closeIconPos]"> |
||||||
|
<u-icon |
||||||
|
v-if="mode != 'center' && closeable" |
||||||
|
:name="closeIcon" |
||||||
|
:color="closeIconColor" |
||||||
|
:size="closeIconSize" |
||||||
|
></u-icon> |
||||||
|
</view> |
||||||
|
</view> |
||||||
|
</view> |
||||||
|
</template> |
||||||
|
|
||||||
|
<script> |
||||||
|
/** |
||||||
|
* popup 弹窗 |
||||||
|
* @description 弹出层容器,用于展示弹窗、信息提示等内容,支持上、下、左、右和中部弹出。组件只提供容器,内部内容由用户自定义 |
||||||
|
* @tutorial https://www.uviewui.com/components/popup.html |
||||||
|
* @property {String} mode 弹出方向(默认left) |
||||||
|
* @property {Boolean} mask 是否显示遮罩(默认true) |
||||||
|
* @property {Stringr | Number} length mode=left | 见官网说明(默认auto) |
||||||
|
* @property {Boolean} zoom 是否开启缩放动画,只在mode为center时有效(默认true) |
||||||
|
* @property {Boolean} safe-area-inset-bottom 是否开启底部安全区适配(默认false) |
||||||
|
* @property {Boolean} mask-close-able 点击遮罩是否可以关闭弹出层(默认true) |
||||||
|
* @property {Object} custom-style 用户自定义样式 |
||||||
|
* @property {Stringr | Number} negative-top 中部弹出时,往上偏移的值 |
||||||
|
* @property {Numberr | String} border-radius 弹窗圆角值(默认0) |
||||||
|
* @property {Numberr | String} z-index 弹出内容的z-index值(默认1075) |
||||||
|
* @property {Boolean} closeable 是否显示关闭图标(默认false) |
||||||
|
* @property {String} close-icon 关闭图标的名称,只能uView的内置图标 |
||||||
|
* @property {String} close-icon-pos 自定义关闭图标位置(默认top-right) |
||||||
|
* @property {String} close-icon-color 关闭图标的颜色(默认#909399) |
||||||
|
* @property {Number | String} close-icon-size 关闭图标的大小,单位rpx(默认30) |
||||||
|
* @event {Function} open 弹出层打开 |
||||||
|
* @event {Function} close 弹出层收起 |
||||||
|
* @example <u-popup v-model="show"><view>出淤泥而不染,濯清涟而不妖</view></u-popup> |
||||||
|
*/ |
||||||
|
import ZMask from "./mask.vue"; |
||||||
|
export default { |
||||||
|
name: "popup", |
||||||
|
components: { |
||||||
|
ZMask, |
||||||
|
}, |
||||||
|
props: { |
||||||
|
/** |
||||||
|
* 显示状态 |
||||||
|
*/ |
||||||
|
show: { |
||||||
|
type: Boolean, |
||||||
|
default: false, |
||||||
|
}, |
||||||
|
/** |
||||||
|
* 弹出方向,left|right|top|bottom|center |
||||||
|
*/ |
||||||
|
mode: { |
||||||
|
type: String, |
||||||
|
default: "left", |
||||||
|
}, |
||||||
|
/** |
||||||
|
* 是否显示遮罩 |
||||||
|
*/ |
||||||
|
mask: { |
||||||
|
type: Boolean, |
||||||
|
default: true, |
||||||
|
}, |
||||||
|
// 抽屉的宽度(mode=left|right),或者高度(mode=top|bottom),单位rpx,或者"auto" |
||||||
|
// 或者百分比"50%",表示由内容撑开高度或者宽度 |
||||||
|
length: { |
||||||
|
type: [Number, String], |
||||||
|
default: "auto", |
||||||
|
}, |
||||||
|
// 是否开启缩放动画,只在mode=center时有效 |
||||||
|
zoom: { |
||||||
|
type: Boolean, |
||||||
|
default: true, |
||||||
|
}, |
||||||
|
// 是否开启底部安全区适配,开启的话,会在iPhoneX机型底部添加一定的内边距 |
||||||
|
safeAreaInsetBottom: { |
||||||
|
type: Boolean, |
||||||
|
default: false, |
||||||
|
}, |
||||||
|
// 是否可以通过点击遮罩进行关闭 |
||||||
|
maskCloseAble: { |
||||||
|
type: Boolean, |
||||||
|
default: true, |
||||||
|
}, |
||||||
|
// 用户自定义样式 |
||||||
|
customStyle: { |
||||||
|
type: Object, |
||||||
|
default() { |
||||||
|
return {}; |
||||||
|
}, |
||||||
|
}, |
||||||
|
value: { |
||||||
|
type: Boolean, |
||||||
|
default: false, |
||||||
|
}, |
||||||
|
// 此为内部参数,不在文档对外使用,为了解决Picker和keyboard等融合了弹窗的组件 |
||||||
|
// 对v-model双向绑定多层调用造成报错不能修改props值的问题 |
||||||
|
popup: { |
||||||
|
type: Boolean, |
||||||
|
default: true, |
||||||
|
}, |
||||||
|
// 显示显示弹窗的圆角,单位rpx |
||||||
|
borderRadius: { |
||||||
|
type: [Number, String], |
||||||
|
default: 0, |
||||||
|
}, |
||||||
|
zIndex: { |
||||||
|
type: [Number, String], |
||||||
|
default: "10075", |
||||||
|
}, |
||||||
|
// 是否显示关闭图标 |
||||||
|
closeable: { |
||||||
|
type: Boolean, |
||||||
|
default: false, |
||||||
|
}, |
||||||
|
// 关闭图标的名称,只能uView的内置图标 |
||||||
|
closeIcon: { |
||||||
|
type: String, |
||||||
|
default: "close", |
||||||
|
}, |
||||||
|
// 自定义关闭图标位置,top-left为左上角,top-right为右上角,bottom-left为左下角,bottom-right为右下角 |
||||||
|
closeIconPos: { |
||||||
|
type: String, |
||||||
|
default: "top-right", |
||||||
|
}, |
||||||
|
// 关闭图标的颜色 |
||||||
|
closeIconColor: { |
||||||
|
type: String, |
||||||
|
default: "#909399", |
||||||
|
}, |
||||||
|
// 关闭图标的大小,单位rpx |
||||||
|
closeIconSize: { |
||||||
|
type: [String, Number], |
||||||
|
default: "30", |
||||||
|
}, |
||||||
|
// 宽度,只对左,右,中部弹出时起作用,单位rpx,或者"auto" |
||||||
|
// 或者百分比"50%",表示由内容撑开高度或者宽度,优先级高于length参数 |
||||||
|
width: { |
||||||
|
type: String, |
||||||
|
default: "", |
||||||
|
}, |
||||||
|
// 高度,只对上,下,中部弹出时起作用,单位rpx,或者"auto" |
||||||
|
// 或者百分比"50%",表示由内容撑开高度或者宽度,优先级高于length参数 |
||||||
|
height: { |
||||||
|
type: String, |
||||||
|
default: "", |
||||||
|
}, |
||||||
|
// 给一个负的margin-top,往上偏移,避免和键盘重合的情况,仅在mode=center时有效 |
||||||
|
negativeTop: { |
||||||
|
type: [String, Number], |
||||||
|
default: 0, |
||||||
|
}, |
||||||
|
// 遮罩的样式,一般用于修改遮罩的透明度 |
||||||
|
maskCustomStyle: { |
||||||
|
type: Object, |
||||||
|
default() { |
||||||
|
return {}; |
||||||
|
}, |
||||||
|
}, |
||||||
|
// 遮罩打开或收起的动画过渡时间,单位ms |
||||||
|
duration: { |
||||||
|
type: [String, Number], |
||||||
|
default: 250, |
||||||
|
}, |
||||||
|
// 中间弹窗的背景颜色值 |
||||||
|
centerPupBg: { |
||||||
|
type: String, |
||||||
|
default: "#fff", |
||||||
|
}, |
||||||
|
bgColor: { |
||||||
|
type: String, |
||||||
|
default: "#fff", |
||||||
|
}, |
||||||
|
}, |
||||||
|
|
||||||
|
data() { |
||||||
|
return { |
||||||
|
visibleSync: false, |
||||||
|
showDrawer: false, |
||||||
|
timer: null, |
||||||
|
closeFromInner: false, // value的值改变,是发生在内部还是外部 |
||||||
|
}; |
||||||
|
}, |
||||||
|
computed: { |
||||||
|
// 根据mode的位置,设定其弹窗的宽度(mode = left|right),或者高度(mode = top|bottom) |
||||||
|
style() { |
||||||
|
let style = {}; |
||||||
|
// 如果是左边或者上边弹出时,需要给translate设置为负值,用于隐藏 |
||||||
|
if (this.mode == "left" || this.mode == "right") { |
||||||
|
style = { |
||||||
|
width: this.width |
||||||
|
? this.getUnitValue(this.width) |
||||||
|
: this.getUnitValue(this.length), |
||||||
|
height: "100%", |
||||||
|
transform: `translate3D(${ |
||||||
|
this.mode == "left" ? "-100%" : "100%" |
||||||
|
},0px,0px)`, |
||||||
|
background: this.bgColor, |
||||||
|
}; |
||||||
|
} else if (this.mode == "top" || this.mode == "bottom") { |
||||||
|
style = { |
||||||
|
width: "100%", |
||||||
|
height: this.height |
||||||
|
? this.getUnitValue(this.height) |
||||||
|
: this.getUnitValue(this.length), |
||||||
|
transform: `translate3D(0px,${ |
||||||
|
this.mode == "top" ? "-100%" : "100%" |
||||||
|
},0px)`, |
||||||
|
background: this.bgColor, |
||||||
|
}; |
||||||
|
} |
||||||
|
style.zIndex = this.uZindex; |
||||||
|
// 如果用户设置了borderRadius值,添加弹窗的圆角 |
||||||
|
if (this.borderRadius) { |
||||||
|
switch (this.mode) { |
||||||
|
case "left": |
||||||
|
style.borderRadius = `0 ${this.borderRadius}rpx ${this.borderRadius}rpx 0`; |
||||||
|
break; |
||||||
|
case "top": |
||||||
|
style.borderRadius = `0 0 ${this.borderRadius}rpx ${this.borderRadius}rpx`; |
||||||
|
break; |
||||||
|
case "right": |
||||||
|
style.borderRadius = `${this.borderRadius}rpx 0 0 ${this.borderRadius}rpx`; |
||||||
|
break; |
||||||
|
case "bottom": |
||||||
|
style.borderRadius = `${this.borderRadius}rpx ${this.borderRadius}rpx 0 0`; |
||||||
|
break; |
||||||
|
default: |
||||||
|
} |
||||||
|
// 不加可能圆角无效 |
||||||
|
style.overflow = "hidden"; |
||||||
|
} |
||||||
|
if (this.duration) |
||||||
|
style.transition = `all ${this.duration / 1000}s linear`; |
||||||
|
return style; |
||||||
|
}, |
||||||
|
// 中部弹窗的特有样式 |
||||||
|
centerStyle() { |
||||||
|
let style = {}; |
||||||
|
style.width = this.width |
||||||
|
? this.getUnitValue(this.width) |
||||||
|
: this.getUnitValue(this.length); |
||||||
|
// 中部弹出的模式,如果没有设置高度,就用auto值,由内容撑开高度 |
||||||
|
style.height = this.height ? this.getUnitValue(this.height) : "auto"; |
||||||
|
style.zIndex = this.uZindex; |
||||||
|
// style.marginTop = `-${this.$u.addUnit(this.negativeTop)}`; |
||||||
|
style.background = this.centerPupBg; |
||||||
|
if (this.borderRadius) { |
||||||
|
style.borderRadius = `${this.borderRadius}rpx`; |
||||||
|
// 不加可能圆角无效 |
||||||
|
style.overflow = "hidden"; |
||||||
|
} |
||||||
|
return style; |
||||||
|
}, |
||||||
|
// 计算整理后的z-index值 |
||||||
|
uZindex() { |
||||||
|
return this.zIndex ? this.zIndex : this.$u.zIndex.popup; |
||||||
|
}, |
||||||
|
}, |
||||||
|
watch: { |
||||||
|
value(val) { |
||||||
|
if (val) { |
||||||
|
this.open(); |
||||||
|
} else if (!this.closeFromInner) { |
||||||
|
this.close(); |
||||||
|
} |
||||||
|
this.closeFromInner = false; |
||||||
|
}, |
||||||
|
}, |
||||||
|
mounted() { |
||||||
|
// 组件渲染完成时,检查value是否为true,如果是,弹出popup |
||||||
|
this.value && this.open(); |
||||||
|
}, |
||||||
|
methods: { |
||||||
|
// 动画结束回调 |
||||||
|
transitionend(e) { |
||||||
|
// console.log(e, "动画结束popup"); |
||||||
|
}, |
||||||
|
// 判断传入的值,是否带有单位,如果没有,就默认用rpx单位 |
||||||
|
getUnitValue(val) { |
||||||
|
if (/(%|px|rpx|auto)$/.test(val)) return val; |
||||||
|
else return val + "rpx"; |
||||||
|
}, |
||||||
|
// 遮罩被点击 |
||||||
|
maskClick() { |
||||||
|
this.close(); |
||||||
|
}, |
||||||
|
close() { |
||||||
|
// 标记关闭是内部发生的,否则修改了value值,导致watch中对value检测,导致再执行一遍close |
||||||
|
// 造成@close事件触发两次 |
||||||
|
this.closeFromInner = true; |
||||||
|
this.change("showDrawer", "visibleSync", false); |
||||||
|
}, |
||||||
|
// 中部弹出时,需要.u-drawer-content将居中内容,此元素会铺满屏幕,点击需要关闭弹窗 |
||||||
|
// 让其只在mode=center时起作用 |
||||||
|
modeCenterClose(mode) { |
||||||
|
if (mode != "center" || !this.maskCloseAble) return; |
||||||
|
this.close(); |
||||||
|
}, |
||||||
|
open() { |
||||||
|
this.change("visibleSync", "showDrawer", true); |
||||||
|
}, |
||||||
|
// 此处的原理是,关闭时先通过动画隐藏弹窗和遮罩,再移除整个组件 |
||||||
|
// 打开时,先渲染组件,延时一定时间再让遮罩和弹窗的动画起作用 |
||||||
|
change(param1, param2, status) { |
||||||
|
// 如果this.popup为false,意味着为picker,actionsheet等组件调用了popup组件 |
||||||
|
if (this.popup == true) { |
||||||
|
this.$emit("input", status); |
||||||
|
} |
||||||
|
this[param1] = status; |
||||||
|
if (status) { |
||||||
|
// #ifdef H5 || MP |
||||||
|
this.timer = setTimeout(() => { |
||||||
|
this[param2] = status; |
||||||
|
this.$emit(status ? "open" : "close"); |
||||||
|
}, 50); |
||||||
|
// #endif |
||||||
|
// #ifndef H5 || MP |
||||||
|
this.$nextTick(() => { |
||||||
|
this[param2] = status; |
||||||
|
this.$emit(status ? "open" : "close"); |
||||||
|
}); |
||||||
|
// #endif |
||||||
|
} else { |
||||||
|
this.timer = setTimeout(() => { |
||||||
|
this[param2] = status; |
||||||
|
this.$emit(status ? "open" : "close"); |
||||||
|
}, this.duration); |
||||||
|
} |
||||||
|
}, |
||||||
|
}, |
||||||
|
}; |
||||||
|
</script> |
||||||
|
|
||||||
|
<style scoped lang="scss"> |
||||||
|
@mixin vue-flex($direction: row) { |
||||||
|
/* #ifndef APP-NVUE */ |
||||||
|
display: flex; |
||||||
|
flex-direction: $direction; |
||||||
|
/* #endif */ |
||||||
|
} |
||||||
|
.u-drawer { |
||||||
|
/* #ifndef APP-NVUE */ |
||||||
|
display: block; |
||||||
|
/* #endif */ |
||||||
|
position: fixed; |
||||||
|
top: 0; |
||||||
|
left: 0; |
||||||
|
right: 0; |
||||||
|
bottom: 0; |
||||||
|
overflow: hidden; |
||||||
|
} |
||||||
|
|
||||||
|
.u-drawer-content { |
||||||
|
/* #ifndef APP-NVUE */ |
||||||
|
display: block; |
||||||
|
/* #endif */ |
||||||
|
position: absolute; |
||||||
|
z-index: 1003; |
||||||
|
transition: all 0.25s linear; |
||||||
|
} |
||||||
|
|
||||||
|
.u-drawer__scroll-view { |
||||||
|
width: 100%; |
||||||
|
height: 100%; |
||||||
|
} |
||||||
|
|
||||||
|
.u-drawer-left { |
||||||
|
top: 0; |
||||||
|
bottom: 0; |
||||||
|
left: 0; |
||||||
|
} |
||||||
|
|
||||||
|
.u-drawer-right { |
||||||
|
right: 0; |
||||||
|
top: 0; |
||||||
|
bottom: 0; |
||||||
|
} |
||||||
|
|
||||||
|
.u-drawer-top { |
||||||
|
top: 0; |
||||||
|
left: 0; |
||||||
|
right: 0; |
||||||
|
} |
||||||
|
|
||||||
|
.u-drawer-bottom { |
||||||
|
bottom: 0; |
||||||
|
left: 0; |
||||||
|
right: 0; |
||||||
|
} |
||||||
|
|
||||||
|
.u-drawer-center { |
||||||
|
@include vue-flex; |
||||||
|
flex-direction: column; |
||||||
|
bottom: 0; |
||||||
|
left: 0; |
||||||
|
right: 0; |
||||||
|
top: 0; |
||||||
|
justify-content: center; |
||||||
|
align-items: center; |
||||||
|
opacity: 0; |
||||||
|
z-index: 99999; |
||||||
|
} |
||||||
|
|
||||||
|
.u-mode-center-box { |
||||||
|
min-width: 100rpx; |
||||||
|
min-height: 100rpx; |
||||||
|
/* #ifndef APP-NVUE */ |
||||||
|
display: block; |
||||||
|
/* #endif */ |
||||||
|
position: relative; |
||||||
|
} |
||||||
|
|
||||||
|
.u-drawer-content-visible.u-drawer-center { |
||||||
|
transform: scale(1); |
||||||
|
opacity: 1; |
||||||
|
} |
||||||
|
|
||||||
|
.u-animation-zoom { |
||||||
|
transform: scale(1.15); |
||||||
|
} |
||||||
|
|
||||||
|
.u-drawer-content-visible { |
||||||
|
transform: translate3D(0px, 0px, 0px) !important; |
||||||
|
} |
||||||
|
|
||||||
|
.u-close { |
||||||
|
position: absolute; |
||||||
|
z-index: 3; |
||||||
|
} |
||||||
|
|
||||||
|
.u-close--top-left { |
||||||
|
top: 30rpx; |
||||||
|
left: 30rpx; |
||||||
|
} |
||||||
|
|
||||||
|
.u-close--top-right { |
||||||
|
top: 30rpx; |
||||||
|
right: 30rpx; |
||||||
|
} |
||||||
|
|
||||||
|
.u-close--bottom-left { |
||||||
|
bottom: 30rpx; |
||||||
|
left: 30rpx; |
||||||
|
} |
||||||
|
|
||||||
|
.u-close--bottom-right { |
||||||
|
right: 30rpx; |
||||||
|
bottom: 30rpx; |
||||||
|
} |
||||||
|
</style> |
@ -0,0 +1,155 @@ |
|||||||
|
## 导入即用 全端支持 |
||||||
|
|
||||||
|
### 有问题 + wx : zy597172583 标注来意 可评论 看到及时回复 |
||||||
|
1.使用方式 |
||||||
|
|
||||||
|
```javascript |
||||||
|
<template> |
||||||
|
<filter-popup :data="filterData" :form.sync="filterForm" v-model="popup.filter" title="全部筛选" height="1104rpx" @finsh="subFinsh"></filter-popup> |
||||||
|
</template> |
||||||
|
<script> |
||||||
|
import FilterPopup from "@/components/filter-popup/filter-popup"; |
||||||
|
export default { |
||||||
|
components: { |
||||||
|
FilterPopup, |
||||||
|
}, |
||||||
|
data() { |
||||||
|
return { |
||||||
|
//筛选表单数据 |
||||||
|
filterData: [ |
||||||
|
{ |
||||||
|
children: false,//是否有子项 |
||||||
|
title: "意向度", |
||||||
|
key: "intention_type", //键名 接收对象名字 |
||||||
|
keyValue: "value", //获取的值是哪个 |
||||||
|
isRadio: true, //是否单选 否则多选 |
||||||
|
data: [ |
||||||
|
{ |
||||||
|
title: "一般意向", |
||||||
|
id: 1, |
||||||
|
value: 1, |
||||||
|
}, |
||||||
|
{ |
||||||
|
title: "中意向度", |
||||||
|
id: 2, |
||||||
|
value: 2, |
||||||
|
}, |
||||||
|
{ |
||||||
|
title: "高意向度", |
||||||
|
id: 3, |
||||||
|
value: 3, |
||||||
|
}, |
||||||
|
], |
||||||
|
}, |
||||||
|
{ |
||||||
|
children: false,//是否有子项 |
||||||
|
title: "手机号码", |
||||||
|
key: "is_bind_phone", //键名 接收对象名字 |
||||||
|
keyValue: "value", //获取的值是哪个 |
||||||
|
isRadio: true, //是否单选 否则多选 |
||||||
|
data: [ |
||||||
|
{ |
||||||
|
title: "未绑定", |
||||||
|
value: 0, |
||||||
|
}, |
||||||
|
{ |
||||||
|
title: "已绑定", |
||||||
|
value: 1, |
||||||
|
}, |
||||||
|
], |
||||||
|
}, |
||||||
|
{ |
||||||
|
children: false,//是否有子项 |
||||||
|
title: "企微好友", |
||||||
|
key: "is_work_customer", //键名 接收对象名字 |
||||||
|
keyValue: "value", //获取的值是哪个 |
||||||
|
isRadio: true, //是否单选 否则多选 |
||||||
|
data: [ |
||||||
|
{ |
||||||
|
title: "未添加", |
||||||
|
value: 0, |
||||||
|
}, |
||||||
|
{ |
||||||
|
title: "已添加", |
||||||
|
value: 1, |
||||||
|
}, |
||||||
|
], |
||||||
|
}, |
||||||
|
{ |
||||||
|
children: true,//是否有子项 |
||||||
|
isRadio: false, //是否单选 |
||||||
|
title: "标签内容", |
||||||
|
key: "label", //键名 接收对象名字 |
||||||
|
keyValue: "id", //获取的值是哪个 |
||||||
|
data: [ |
||||||
|
{ |
||||||
|
title: "客户重要程度", |
||||||
|
id: 22, |
||||||
|
children: [ |
||||||
|
{ |
||||||
|
title: "一般意向2", |
||||||
|
id: 32, |
||||||
|
value: 1, |
||||||
|
}, |
||||||
|
{ |
||||||
|
title: "一般意向3", |
||||||
|
id: 12, |
||||||
|
value: 1, |
||||||
|
}, |
||||||
|
], |
||||||
|
}, |
||||||
|
{ |
||||||
|
title: "客户重要程度2", |
||||||
|
id: 122, |
||||||
|
children: [ |
||||||
|
{ |
||||||
|
title: "一般意向2", |
||||||
|
id: 43, |
||||||
|
value: 1, |
||||||
|
}, |
||||||
|
{ |
||||||
|
title: "一般意向3", |
||||||
|
id: 23, |
||||||
|
value: 1, |
||||||
|
}, |
||||||
|
], |
||||||
|
}, |
||||||
|
], |
||||||
|
}, |
||||||
|
], //筛选数据 |
||||||
|
filterForm: {}, //选中的表单 |
||||||
|
}; |
||||||
|
}, |
||||||
|
} |
||||||
|
``` |
||||||
|
|
||||||
|
2.组件props |
||||||
|
|
||||||
|
| 参数名 | 类型 | 介绍 | |
||||||
|
| ---------- | ------- | ------------------------------------------------- | |
||||||
|
| form | Object | .sync双向绑定的表单值 , 可传入显示初始哪些被选中 | |
||||||
|
| data | Array | 动态渲染选项的数据数组 | |
||||||
|
| title | String | 标题 | |
||||||
|
| height | String | 弹出层高度 单位 rpx px upx 百分比 vw等 | |
||||||
|
| themeColor | String | 组件主体颜色 默认:\#0066ff | |
||||||
|
| mask | Boolean | 是否显示弹出遮盖层 | |
||||||
|
|
||||||
|
3.data 参数 |
||||||
|
|
||||||
|
| 参数名 | 类型 | 是否必填 | 介绍 | |
||||||
|
| -------- | ------- | -------- | ------------------------------------------------------------ | |
||||||
|
| children | Boolean | 是 | 是否有子项 | |
||||||
|
| data | Array | 是 | 渲染出来的选项数据 | |
||||||
|
| isRadio | Boolean | 是 | 是否单选 单个选项指定,单选还是多选 | |
||||||
|
| title | String | 是 | 标签内容标题 | |
||||||
|
| key | String | 是 | 接收对象名字 会作为@finsh返回对象的键名 | |
||||||
|
| keyValue | String | 是 | 获取的值是哪个 自定义指定获取哪个键值 value还是id或者自己定义的 | |
||||||
|
|
||||||
|
4.事件 |
||||||
|
|
||||||
|
| 事件名 | 返回参数 | 简介 | |
||||||
|
| ------ | -------- | ----------------------------------------- | |
||||||
|
| finsh | Object | 点击确定时触发 返回参数为选中值的对象数组 | |
||||||
|
| close | 无 | 组件点击关闭时触发 | |
||||||
|
|
||||||
|
![image-20210730095456900](https://yzhsaas-cdn.qietongvip.com/asd.png) |
@ -0,0 +1,596 @@ |
|||||||
|
<template> |
||||||
|
<popup |
||||||
|
:mask="mask" |
||||||
|
border-radius="50" |
||||||
|
v-model="acceptValue" |
||||||
|
mode="bottom" |
||||||
|
class="filter-popup" |
||||||
|
:height="height" |
||||||
|
@close="close" |
||||||
|
:style="{ '--color': themeColor }" |
||||||
|
:mask-custom-style="{ background: 'rgba(0, 0, 0, 0.7)' }" |
||||||
|
> |
||||||
|
<view class="top-title flex-row-sb" v-if="showTop"> |
||||||
|
<view class="popup-title flex-row-c-c">{{ title }}</view> |
||||||
|
<text class="saasIcon flex-row-c-c" @click="close"></text> |
||||||
|
</view> |
||||||
|
|
||||||
|
<scroll-view class="select-scroll" scroll-y :style="{ height: `calc( ${height} - 120rpx - 152rpx )` }"> |
||||||
|
<view class="select-main"> |
||||||
|
<view v-if="showCategory" class="select-item"> |
||||||
|
<view class="title">学科专业</view> |
||||||
|
<view class="category-wrap"> |
||||||
|
<picker mode="multiSelector" v-model="category" @change="change" @columnchange="columnchange" :range="categories" range-key="title"> |
||||||
|
<view class="category">{{categoryName ? categoryName : '请选择'}}</view> |
||||||
|
</picker> |
||||||
|
<uni-icons v-if="categoryName" class="icon" type="closeempty" size="16" color="#333" @click.stop="delCatagory"></uni-icons> |
||||||
|
</view> |
||||||
|
</view> |
||||||
|
|
||||||
|
<view class="select-item" v-for="(item, index) in data" :key="index"> |
||||||
|
<view class="title"> {{ item.title }} </view> |
||||||
|
<view class="tag-list" v-if="!item.children"> |
||||||
|
<view |
||||||
|
class="tag-item" |
||||||
|
:class="[acceptForm[item.key].includes(item2.value) ? 'select-on' : '']" |
||||||
|
v-for="(item2, index2) in item.data" |
||||||
|
:key="index2" |
||||||
|
@click="selectTagBuyValueOrId(item2, item.key, item.keyValue, item.isRadio)" |
||||||
|
> |
||||||
|
{{ item2.title }} |
||||||
|
</view> |
||||||
|
</view> |
||||||
|
<!-- 有childer --> |
||||||
|
<view class="select-childer" v-else v-for="item2 in item.data" :key="item2.id"> |
||||||
|
<view class="childer-title flex-row--c">{{ item2.title }}</view> |
||||||
|
<view class="tag-list"> |
||||||
|
<view |
||||||
|
class="tag-item" |
||||||
|
:class="[acceptForm[item.key].includes(item3.id) ? 'select-on' : '']" |
||||||
|
v-for="item3 in item2.children" |
||||||
|
:key="item3.id" |
||||||
|
@click="selectTagBuyValueOrId(item3, item.key, item.keyValue, item.isRadio)" |
||||||
|
> |
||||||
|
{{ item3.title }} |
||||||
|
</view> |
||||||
|
</view> |
||||||
|
</view> |
||||||
|
</view> |
||||||
|
</view> |
||||||
|
</scroll-view> |
||||||
|
|
||||||
|
<view class="filter-button flex-row-c"> |
||||||
|
<view class="btn flex-row"> |
||||||
|
<view class="btn-1 flex-row-c-c" @click="reset">重置</view> |
||||||
|
<view class="btn-2 flex-row-c-c" @click="finsh">完成</view> |
||||||
|
</view> |
||||||
|
</view> |
||||||
|
</popup> |
||||||
|
</template> |
||||||
|
|
||||||
|
<script> |
||||||
|
import { courseDiscipline, courseProfessionalClass, courseProfessional } from '@/apis/modules/product.js' |
||||||
|
import Popup from './components/popup.vue'; |
||||||
|
export default { |
||||||
|
components:{ |
||||||
|
Popup |
||||||
|
}, |
||||||
|
name: "filter-popup", |
||||||
|
props: { |
||||||
|
//选中的表单 |
||||||
|
form: { |
||||||
|
type: Object, |
||||||
|
default: () => {}, |
||||||
|
}, |
||||||
|
//主题颜色 |
||||||
|
themeColor: { |
||||||
|
type: String, |
||||||
|
default: "#0066ff", |
||||||
|
}, |
||||||
|
//渲染数据 |
||||||
|
data: { |
||||||
|
type: Array, |
||||||
|
default: () => [], |
||||||
|
}, |
||||||
|
//标题 |
||||||
|
title: { |
||||||
|
type: String, |
||||||
|
default: "请选择", |
||||||
|
}, |
||||||
|
value: { |
||||||
|
type: Boolean, |
||||||
|
default: false, |
||||||
|
}, |
||||||
|
mask: { |
||||||
|
type: Boolean, |
||||||
|
default: true, |
||||||
|
}, |
||||||
|
height: { |
||||||
|
type: String, |
||||||
|
default: "600rpx", |
||||||
|
}, |
||||||
|
//是否显示退出按钮 |
||||||
|
showTop: { |
||||||
|
type: Boolean, |
||||||
|
default: true, |
||||||
|
}, |
||||||
|
//是否显示学科专业选择 |
||||||
|
showCategory: { |
||||||
|
type: Boolean, |
||||||
|
default: false, |
||||||
|
}, |
||||||
|
}, |
||||||
|
computed: { |
||||||
|
// 接收表单 |
||||||
|
acceptForm: { |
||||||
|
get() { |
||||||
|
this.originForm = JSON.parse(JSON.stringify(this.form)) |
||||||
|
if (Object.keys(this.form).length) { |
||||||
|
return this.form; |
||||||
|
} else { |
||||||
|
let obj = {}; |
||||||
|
this.data.forEach((item) => { |
||||||
|
obj[item.key] = []; |
||||||
|
}); |
||||||
|
return obj; |
||||||
|
} |
||||||
|
}, |
||||||
|
set(nval) { |
||||||
|
// console.log("set Form :>> ", nval); |
||||||
|
this.$emit("update:form", nval); |
||||||
|
}, |
||||||
|
}, |
||||||
|
acceptValue: { |
||||||
|
get() { |
||||||
|
return this.value; |
||||||
|
}, |
||||||
|
set(nval) { |
||||||
|
this.$emit("input", nval); |
||||||
|
}, |
||||||
|
}, |
||||||
|
}, |
||||||
|
data() { |
||||||
|
return { |
||||||
|
originForm: {}, |
||||||
|
|
||||||
|
categoryName:'', |
||||||
|
categoryId: '', |
||||||
|
professionalCategoryId: '', |
||||||
|
professionalId: '', |
||||||
|
categories:[], |
||||||
|
category: [] |
||||||
|
} |
||||||
|
}, |
||||||
|
mounted() { |
||||||
|
this.getDis() |
||||||
|
}, |
||||||
|
methods: { |
||||||
|
//选择存value 还是id |
||||||
|
selectTagBuyValueOrId(item, key, keyValue, isRadio) { |
||||||
|
//如果是单选 |
||||||
|
if (isRadio) { |
||||||
|
if (keyValue == "value") { |
||||||
|
if (this.acceptForm[key].some((value) => value === item.value)) { |
||||||
|
this.acceptForm[key] = this.acceptForm[key].filter((value) => value !== item.value); |
||||||
|
return; |
||||||
|
} |
||||||
|
this.acceptForm[key] = []; |
||||||
|
this.acceptForm[key].push(item.value); |
||||||
|
} else { |
||||||
|
if (this.acceptForm[key].some((id) => id === item.id)) { |
||||||
|
this.acceptForm[key] = this.acceptForm[key].filter((id) => id !== item.id); |
||||||
|
return; |
||||||
|
} |
||||||
|
this.acceptForm[key] = []; |
||||||
|
this.acceptForm[key].push(item.id); |
||||||
|
} |
||||||
|
} else { |
||||||
|
if (keyValue == "value") { |
||||||
|
this.acceptForm[key].some((value) => value === item.value) |
||||||
|
? (this.acceptForm[key] = this.acceptForm[key].filter((value) => value !== item.value)) |
||||||
|
: this.acceptForm[key].push(item.value); |
||||||
|
} else { |
||||||
|
this.acceptForm[key].some((id) => id === item.id) |
||||||
|
? (this.acceptForm[key] = this.acceptForm[key].filter((id) => id !== item.id)) |
||||||
|
: this.acceptForm[key].push(item.id); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
this.acceptForm = this.acceptForm; |
||||||
|
}, |
||||||
|
|
||||||
|
// 查询学科类别 |
||||||
|
async getDis() { |
||||||
|
const { list } = await courseDiscipline() |
||||||
|
list.map(e => { |
||||||
|
e.id = e.disciplineId |
||||||
|
e.title = e.disciplineName |
||||||
|
}) |
||||||
|
this.categories.push(list) |
||||||
|
|
||||||
|
const res = await courseProfessionalClass(1) |
||||||
|
res.list.map(e => { |
||||||
|
e.id = e.professionalClassId |
||||||
|
e.title = e.professionalClassName |
||||||
|
}) |
||||||
|
this.categories.push(res.list) |
||||||
|
|
||||||
|
const res1 = await courseProfessional(1) |
||||||
|
res1.list.map(e => { |
||||||
|
e.id = e.professionalId |
||||||
|
e.title = e.professionalName |
||||||
|
}) |
||||||
|
this.categories.push(res1.list) |
||||||
|
}, |
||||||
|
// 学科专业确定回调 |
||||||
|
change(e) { |
||||||
|
const i0 = e.detail.value[0] |
||||||
|
const i1 = e.detail.value[1] |
||||||
|
const i2 = e.detail.value[2] |
||||||
|
const i1IsNumber = typeof i1 === 'number' |
||||||
|
const i2IsNumber = typeof i2 === 'number' |
||||||
|
const list = this.categories |
||||||
|
this.categoryId = list[0][i0].id |
||||||
|
this.categoryName = list[0][i0].title |
||||||
|
|
||||||
|
this.professionalCategoryId = '' |
||||||
|
this.professionalId = '' |
||||||
|
if (i1IsNumber && list[1].length > 0) { |
||||||
|
this.professionalCategoryId = list[1][i1].id |
||||||
|
this.categoryName += '/' + list[1][i1].title |
||||||
|
} |
||||||
|
if (i2IsNumber && list[2].length > 0) { |
||||||
|
this.professionalId = list[2][i2].id |
||||||
|
this.categoryName += '/' + list[2][i2].title |
||||||
|
} |
||||||
|
}, |
||||||
|
// 学科专业切换回调 |
||||||
|
async columnchange(e) { |
||||||
|
const { column } = e.detail |
||||||
|
if (column == 0) { |
||||||
|
const { list } = await courseProfessionalClass(this.categories[0][e.detail.value].id) |
||||||
|
list.map(e => { |
||||||
|
e.id = e.professionalClassId |
||||||
|
e.title = e.professionalClassName |
||||||
|
}) |
||||||
|
this.categories[1] = list |
||||||
|
this.categories[2] = [] |
||||||
|
this.$set(this.categories, 1, list) |
||||||
|
console.log('inner',this.categories) |
||||||
|
} else |
||||||
|
if (column == 1) { |
||||||
|
const { list } = await courseProfessional(this.categories[1][e.detail.value].id) |
||||||
|
list.map(e => { |
||||||
|
e.id = e.professionalId |
||||||
|
e.title = e.professionalName |
||||||
|
}) |
||||||
|
this.categories[2] = list |
||||||
|
this.$set(this.categories, 2, list) |
||||||
|
} |
||||||
|
}, |
||||||
|
// 删除学科专业 |
||||||
|
delCatagory() { |
||||||
|
this.category = [] |
||||||
|
this.categoryName = '' |
||||||
|
this.categoryId = '' |
||||||
|
this.professionalCategoryId = '' |
||||||
|
this.professionalId = '' |
||||||
|
}, |
||||||
|
|
||||||
|
// 点击完成 |
||||||
|
finsh() { |
||||||
|
if (this.showCategory) { |
||||||
|
this.acceptForm.categoryId = this.categoryId |
||||||
|
this.acceptForm.professionalCategoryId = this.professionalCategoryId |
||||||
|
this.acceptForm.professionalId = this.professionalId |
||||||
|
this.acceptForm.categoryName = this.categoryName |
||||||
|
} |
||||||
|
this.$emit("finsh", this.acceptForm); |
||||||
|
this.$emit("input", false); |
||||||
|
}, |
||||||
|
close() { |
||||||
|
this.$emit("input", false); |
||||||
|
this.$emit("close"); |
||||||
|
}, |
||||||
|
//重置 |
||||||
|
reset() { |
||||||
|
this.acceptForm = {} |
||||||
|
this.categoryId = '' |
||||||
|
this.professionalCategoryId = '' |
||||||
|
this.professionalId = '' |
||||||
|
this.categoryName = '' |
||||||
|
this.$nextTick(() => { |
||||||
|
this.$emit("finsh", this.acceptForm); |
||||||
|
this.$emit("input", false); |
||||||
|
}) |
||||||
|
}, |
||||||
|
}, |
||||||
|
}; |
||||||
|
</script> |
||||||
|
<style lang="scss" scoped> |
||||||
|
@font-face { |
||||||
|
font-family: 'iconfont'; /* Project id 2729410 */ |
||||||
|
src: url('https://at.alicdn.com/t/font_2729410_3nhq3ibbcqg.woff2?t=1628330097695') format('woff2'), |
||||||
|
url('https://at.alicdn.com/t/font_2729410_3nhq3ibbcqg.woff?t=1628330097695') format('woff'), |
||||||
|
url('https://at.alicdn.com/t/font_2729410_3nhq3ibbcqg.ttf?t=1628330097695') format('truetype'); |
||||||
|
} |
||||||
|
.saasIcon { |
||||||
|
font-family: "iconfont" !important; |
||||||
|
font-style: normal; |
||||||
|
-webkit-font-smoothing: antialiased; |
||||||
|
-webkit-text-stroke-width: 0.2px; |
||||||
|
-moz-osx-font-smoothing: grayscale; |
||||||
|
} |
||||||
|
.filter-popup { |
||||||
|
color: #000000; |
||||||
|
.top-title { |
||||||
|
font-weight: bold; |
||||||
|
height: 90rpx; |
||||||
|
margin-left: 70rpx; |
||||||
|
font-size: 30rpx; |
||||||
|
margin-top: 20rpx; |
||||||
|
.popup-title { |
||||||
|
height: 100%; |
||||||
|
} |
||||||
|
.saasIcon { |
||||||
|
// width: 150rpx; |
||||||
|
height: 100%; |
||||||
|
padding-right: 70rpx; |
||||||
|
} |
||||||
|
} |
||||||
|
.select-scroll { |
||||||
|
} |
||||||
|
.category-wrap { |
||||||
|
display: flex; |
||||||
|
align-items: center; |
||||||
|
margin-top: 10rpx; |
||||||
|
.icon { |
||||||
|
margin-left: 10rpx; |
||||||
|
} |
||||||
|
} |
||||||
|
.category { |
||||||
|
font-size: 28rpx; |
||||||
|
} |
||||||
|
.select-main { |
||||||
|
padding: 0 32rpx; |
||||||
|
.select-item { |
||||||
|
.title { |
||||||
|
font-weight: bold; |
||||||
|
font-size: 28rpx; |
||||||
|
color: #000000; |
||||||
|
padding-top: 30rpx; |
||||||
|
} |
||||||
|
.tag-list { |
||||||
|
display: flex; |
||||||
|
flex-wrap: wrap; |
||||||
|
margin-left: -12rpx; |
||||||
|
.tag-item { |
||||||
|
margin-top: 20rpx; |
||||||
|
padding: 10rpx 40rpx; |
||||||
|
font-size: 26rpx; |
||||||
|
background: #f5f5f5; |
||||||
|
color: #484848; |
||||||
|
border-radius: 36rpx; |
||||||
|
margin-left: 12rpx; |
||||||
|
&.select-on { |
||||||
|
background: var(--color); |
||||||
|
color: #fff; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
.select-childer { |
||||||
|
.childer-title { |
||||||
|
color: #484848; |
||||||
|
font-size: 28rpx; |
||||||
|
border-bottom: 1px solid #f5f5f5; |
||||||
|
height: 80rpx; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
.filter-button { |
||||||
|
width: 100%; |
||||||
|
height: 152rpx; |
||||||
|
background: #ffffff; |
||||||
|
box-shadow: 0px -3px 12px rgba(0, 0, 0, 0.06); |
||||||
|
position: fixed; |
||||||
|
bottom: 0; |
||||||
|
.btn { |
||||||
|
border-radius: 100rpx; |
||||||
|
margin-top: 26rpx; |
||||||
|
width: 680rpx; |
||||||
|
height: 80rpx; |
||||||
|
color: #ffffff; |
||||||
|
font-size: 28rpx; |
||||||
|
overflow: hidden; |
||||||
|
.btn-1 { |
||||||
|
flex: 1; |
||||||
|
background: linear-gradient(271deg, #2698fb 0%, #84c6ff 100%); |
||||||
|
} |
||||||
|
.btn-2 { |
||||||
|
flex: 1; |
||||||
|
background: linear-gradient(90deg, #0066ff 0%, #1371ff 100%); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
// 自定义css |
||||||
|
.flex-row { |
||||||
|
display: flex; |
||||||
|
} |
||||||
|
|
||||||
|
.flex-row-c { |
||||||
|
display: flex; |
||||||
|
justify-content: center; |
||||||
|
} |
||||||
|
|
||||||
|
.flex-row--c { |
||||||
|
display: flex; |
||||||
|
align-items: center; |
||||||
|
} |
||||||
|
|
||||||
|
.flex-row-c-c { |
||||||
|
display: flex; |
||||||
|
justify-content: center; |
||||||
|
align-items: center; |
||||||
|
} |
||||||
|
|
||||||
|
.flex-row-sb-c { |
||||||
|
display: flex; |
||||||
|
justify-content: space-between; |
||||||
|
align-items: center; |
||||||
|
} |
||||||
|
|
||||||
|
.flex-row-sb-t { |
||||||
|
display: flex; |
||||||
|
justify-content: space-between; |
||||||
|
align-items: flex-start; |
||||||
|
} |
||||||
|
|
||||||
|
.flex-row-sb-b { |
||||||
|
display: flex; |
||||||
|
justify-content: space-between; |
||||||
|
align-items: flex-end; |
||||||
|
} |
||||||
|
|
||||||
|
.flex-row-c-sb { |
||||||
|
display: flex; |
||||||
|
justify-content: center; |
||||||
|
align-items: space-between; |
||||||
|
} |
||||||
|
|
||||||
|
.flex-row-sb { |
||||||
|
display: flex; |
||||||
|
justify-content: space-between; |
||||||
|
} |
||||||
|
|
||||||
|
.flex-row-l { |
||||||
|
display: flex; |
||||||
|
justify-content: flex-start; |
||||||
|
} |
||||||
|
|
||||||
|
.flex-row-l-c { |
||||||
|
display: flex; |
||||||
|
justify-content: flex-start; |
||||||
|
align-items: center; |
||||||
|
} |
||||||
|
|
||||||
|
.flex-row-c-t { |
||||||
|
display: flex; |
||||||
|
justify-content: center; |
||||||
|
align-items: flex-start; |
||||||
|
} |
||||||
|
|
||||||
|
.flex-row-r-c { |
||||||
|
display: flex; |
||||||
|
justify-content: flex-end; |
||||||
|
align-items: center; |
||||||
|
} |
||||||
|
|
||||||
|
.flex-row-r { |
||||||
|
display: flex; |
||||||
|
justify-content: flex-end; |
||||||
|
} |
||||||
|
|
||||||
|
.flex-row--b { |
||||||
|
display: flex; |
||||||
|
align-items: flex-end; |
||||||
|
} |
||||||
|
|
||||||
|
.flex-col { |
||||||
|
display: flex; |
||||||
|
flex-direction: column; |
||||||
|
} |
||||||
|
|
||||||
|
.flex-col-c { |
||||||
|
display: flex; |
||||||
|
flex-direction: column; |
||||||
|
justify-content: center; |
||||||
|
} |
||||||
|
|
||||||
|
.flex-col--c { |
||||||
|
display: flex; |
||||||
|
flex-direction: column; |
||||||
|
align-items: center; |
||||||
|
} |
||||||
|
|
||||||
|
.flex-col-c-c { |
||||||
|
display: flex; |
||||||
|
flex-direction: column; |
||||||
|
justify-content: center; |
||||||
|
align-items: center; |
||||||
|
} |
||||||
|
|
||||||
|
.flex-col-sb-c { |
||||||
|
display: flex; |
||||||
|
flex-direction: column; |
||||||
|
justify-content: space-between; |
||||||
|
align-items: center; |
||||||
|
} |
||||||
|
|
||||||
|
.flex-col-c-sb { |
||||||
|
display: flex; |
||||||
|
flex-direction: column; |
||||||
|
justify-content: center; |
||||||
|
align-items: space-between; |
||||||
|
} |
||||||
|
|
||||||
|
.flex-col-sb { |
||||||
|
display: flex; |
||||||
|
flex-direction: column; |
||||||
|
justify-content: space-between; |
||||||
|
} |
||||||
|
|
||||||
|
.flex-col-t-c { |
||||||
|
display: flex; |
||||||
|
flex-direction: column; |
||||||
|
justify-content: flex-start; |
||||||
|
align-items: center; |
||||||
|
} |
||||||
|
|
||||||
|
.flex-col-c-l { |
||||||
|
display: flex; |
||||||
|
flex-direction: column; |
||||||
|
justify-content: center; |
||||||
|
align-items: flex-start; |
||||||
|
} |
||||||
|
|
||||||
|
.flex-col-t { |
||||||
|
display: flex; |
||||||
|
flex-direction: column; |
||||||
|
justify-content: flex-start; |
||||||
|
} |
||||||
|
|
||||||
|
.flex-col-b { |
||||||
|
display: flex; |
||||||
|
flex-direction: column; |
||||||
|
justify-content: flex-end; |
||||||
|
} |
||||||
|
|
||||||
|
.flex-col-b-c { |
||||||
|
display: flex; |
||||||
|
flex-direction: column; |
||||||
|
justify-content: flex-end; |
||||||
|
align-items: center; |
||||||
|
} |
||||||
|
|
||||||
|
.flex-col-c-l { |
||||||
|
display: flex; |
||||||
|
flex-direction: column; |
||||||
|
justify-content: center; |
||||||
|
align-items: flex-end; |
||||||
|
} |
||||||
|
|
||||||
|
.flex-col--l { |
||||||
|
display: flex; |
||||||
|
flex-direction: column; |
||||||
|
align-items: flex-start; |
||||||
|
} |
||||||
|
|
||||||
|
.flex-col--r { |
||||||
|
display: flex; |
||||||
|
flex-direction: column; |
||||||
|
align-items: flex-end; |
||||||
|
} |
||||||
|
} |
||||||
|
</style> |
@ -0,0 +1,26 @@ |
|||||||
|
<template> |
||||||
|
<view class="per-mask"> |
||||||
|
<view class="mask"></view> |
||||||
|
<view class="texts"> |
||||||
|
<view class="text">权限审核中,可联系下方平台运营加快审核进度</view> |
||||||
|
<image class="qrcode" src="https://occupationlab.com/images/customer.png" mode="widthFix"></image> |
||||||
|
</view> |
||||||
|
</view> |
||||||
|
</template> |
||||||
|
|
||||||
|
<script> |
||||||
|
export default { |
||||||
|
data() { |
||||||
|
return { |
||||||
|
|
||||||
|
} |
||||||
|
}, |
||||||
|
methods: { |
||||||
|
|
||||||
|
} |
||||||
|
} |
||||||
|
</script> |
||||||
|
|
||||||
|
<style scoped lang="scss"> |
||||||
|
|
||||||
|
</style> |
@ -0,0 +1,10 @@ |
|||||||
|
/** |
||||||
|
/** |
||||||
|
* 产品 配置文件 |
||||||
|
* @author yujialong |
||||||
|
*/ |
||||||
|
|
||||||
|
export default { |
||||||
|
normalIcon: 'https://huoran.oss-cn-shenzhen.aliyuncs.com/20220609/png/1534733700683030528.png', // 通用图标
|
||||||
|
dataIcon: 'https://huoran.oss-cn-shenzhen.aliyuncs.com/20220627/png/1541256164447641600.png' // 数据图标
|
||||||
|
} |
@ -0,0 +1,21 @@ |
|||||||
|
/** |
||||||
|
/** |
||||||
|
* 请求配置文件 |
||||||
|
* @author yujialong |
||||||
|
*/ |
||||||
|
|
||||||
|
export default { |
||||||
|
baseURL: 'https://huorantech.cn/', |
||||||
|
// baseURL: 'http://192.168.31.152:9000/',
|
||||||
|
// baseURL: 'http://121.37.12.51/',
|
||||||
|
headers: { |
||||||
|
'Content-Type': 'application/json;charset=UTF-8' |
||||||
|
}, |
||||||
|
data: {}, |
||||||
|
method: 'POST', |
||||||
|
responseType: 'json', // 响应数据类型
|
||||||
|
withCredentials: false, // 携带cookie
|
||||||
|
// ======================== 以下为注入axios的配置项 =============================
|
||||||
|
showLoading: true, // 是否显示加载动画
|
||||||
|
isFormData: false // 是否序列化表单数据
|
||||||
|
} |
@ -0,0 +1,14 @@ |
|||||||
|
<!DOCTYPE html> |
||||||
|
<html lang="en"> |
||||||
|
<head> |
||||||
|
<meta charset="UTF-8" /> |
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> |
||||||
|
<title></title> |
||||||
|
<!--preload-links--> |
||||||
|
<!--app-context--> |
||||||
|
</head> |
||||||
|
<body> |
||||||
|
<div id="app"><!--app-html--></div> |
||||||
|
<script type="module" src="/main.js"></script> |
||||||
|
</body> |
||||||
|
</html> |
@ -0,0 +1,35 @@ |
|||||||
|
var crypto = require('crypto') |
||||||
|
|
||||||
|
function WXBizDataCrypt(appId, sessionKey) { |
||||||
|
this.appId = appId |
||||||
|
this.sessionKey = sessionKey |
||||||
|
} |
||||||
|
|
||||||
|
WXBizDataCrypt.prototype.decryptData = function (encryptedData, iv) { |
||||||
|
// base64 decode
|
||||||
|
var sessionKey = new Buffer(this.sessionKey, 'base64') |
||||||
|
encryptedData = new Buffer(encryptedData, 'base64') |
||||||
|
iv = new Buffer(iv, 'base64') |
||||||
|
|
||||||
|
try { |
||||||
|
// 解密
|
||||||
|
var decipher = crypto.createDecipheriv('aes-128-cbc', sessionKey, iv) |
||||||
|
// 设置自动 padding 为 true,删除填充补位
|
||||||
|
decipher.setAutoPadding(true) |
||||||
|
var decoded = decipher.update(encryptedData, 'binary', 'utf8') |
||||||
|
decoded += decipher.final('utf8') |
||||||
|
|
||||||
|
decoded = JSON.parse(decoded) |
||||||
|
|
||||||
|
} catch (err) { |
||||||
|
throw new Error('Illegal Buffer') |
||||||
|
} |
||||||
|
|
||||||
|
if (decoded.watermark.appid !== this.appId) { |
||||||
|
throw new Error('Illegal Buffer') |
||||||
|
} |
||||||
|
|
||||||
|
return decoded |
||||||
|
} |
||||||
|
|
||||||
|
module.exports = WXBizDataCrypt |
@ -0,0 +1,39 @@ |
|||||||
|
/** |
||||||
|
* @file 百度移动统计配置文件 |
||||||
|
*/ |
||||||
|
|
||||||
|
module.exports = { |
||||||
|
/** |
||||||
|
* 从百度移动统计获取的AppKey |
||||||
|
* @type {string} |
||||||
|
*/ |
||||||
|
appKey: 'ce2fa79380', |
||||||
|
|
||||||
|
/** |
||||||
|
* 是否使用了插件 |
||||||
|
* @type {boolean} |
||||||
|
*/ |
||||||
|
hasPlugin: false, |
||||||
|
|
||||||
|
/** |
||||||
|
* 是否获取当前的地理位置和速度信息 |
||||||
|
* @type {boolean} |
||||||
|
*/ |
||||||
|
getLocation: false, |
||||||
|
|
||||||
|
/** |
||||||
|
* 是否获取组件滚动信息 |
||||||
|
* @type {boolean} |
||||||
|
*/ |
||||||
|
getComponentScroll: false, |
||||||
|
/** |
||||||
|
* 是否开启了A/B 测试 |
||||||
|
* @type {boolean} |
||||||
|
*/ |
||||||
|
hasABTest: false, |
||||||
|
/** |
||||||
|
* 是否开启热力图功能 |
||||||
|
* @type {boolean} |
||||||
|
*/ |
||||||
|
hasHeatmap: false, |
||||||
|
}; |
@ -0,0 +1,36 @@ |
|||||||
|
export default{ |
||||||
|
// 监听用户点击右上角菜单的「转发」按钮时触发的事件
|
||||||
|
onShareAppMessage() { |
||||||
|
// 设置转发的参数
|
||||||
|
return { |
||||||
|
title: "职站商城", |
||||||
|
// path: '',
|
||||||
|
imageUrl: "", |
||||||
|
success: function(res) { |
||||||
|
if (res.errMsg == 'shareAppMessage:ok') { |
||||||
|
console.log("成功", res) |
||||||
|
} |
||||||
|
}, |
||||||
|
fail: function(res) { |
||||||
|
console.log("失败", res) |
||||||
|
} |
||||||
|
} |
||||||
|
}, |
||||||
|
// 分享到朋友圈
|
||||||
|
onShareTimeline:function(res){ |
||||||
|
return { |
||||||
|
title: '职站商城', |
||||||
|
// imageUrl:'/static/image/phone.png',
|
||||||
|
query:''
|
||||||
|
} |
||||||
|
}, |
||||||
|
// 收藏
|
||||||
|
onAddToFavorites:function(res) { |
||||||
|
return { |
||||||
|
title: '职站商城', |
||||||
|
// imageUrl:'/static/image/phone.png',
|
||||||
|
query: '', |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,20 @@ |
|||||||
|
|
||||||
|
// #ifdef MP-WEIXIN
|
||||||
|
import uma from 'umtrack-wx'; |
||||||
|
uma.init({ |
||||||
|
appKey: '64cc98d5a1a164591b62da3e', // 由友盟分配的APP_KEY
|
||||||
|
useOpenid: true, |
||||||
|
// 使用Openid进行统计,此项为false时将使用友盟+uuid进行用户统计。
|
||||||
|
// 使用Openid来统计微信小程序的用户,会使统计的指标更为准确,对系统准确性要求高的应用推荐使用Openid
|
||||||
|
autoGetOpenid: true, |
||||||
|
// 使用openid进行统计时,是否授权友盟自动获取Openid,
|
||||||
|
// 如若需要,请到友盟后台"设置管理-应用信息"(https://mp.umeng.com/setting/appset)中设置appId及secret
|
||||||
|
debug: true,// 是否打开调试模式
|
||||||
|
uploadUserInfo: true, // 自动上传用户信息,设为false取消上传,默认为false
|
||||||
|
enableVerify: true |
||||||
|
}); |
||||||
|
uma.install = function(Vue) { |
||||||
|
Vue.prototype.$uma = uma; |
||||||
|
} |
||||||
|
export default uma; |
||||||
|
// #endif
|
@ -0,0 +1,124 @@ |
|||||||
|
import Product from '@/config/product' |
||||||
|
|
||||||
|
const files = [ |
||||||
|
'https://huorantech.cn/%E7%94%A8%E6%88%B7%E6%9C%8D%E5%8A%A1%E5%8D%8F%E8%AE%AE.docx', // 用户服务协议
|
||||||
|
'https://huorantech.cn/%E7%94%A8%E6%88%B7%E9%9A%90%E7%A7%81%E5%8D%8F%E8%AE%AE.docx', // 用户隐私协议
|
||||||
|
'https://huorantech.cn/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD%E5%AE%9E%E9%AA%8C%E5%AE%A4%E5%BB%BA%E8%AE%BE%E6%96%B9%E6%A1%88-2020.1.docx', // 人工智能
|
||||||
|
'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) { |
||||||
|
uni.navigateTo({ |
||||||
|
url |
||||||
|
}) |
||||||
|
}, |
||||||
|
// 成功提示
|
||||||
|
sucMsg(title, duration = 1500) { |
||||||
|
uni.showToast({ |
||||||
|
title, |
||||||
|
duration |
||||||
|
}) |
||||||
|
}, |
||||||
|
// 错误提示
|
||||||
|
errMsg(title, duration = 1500) { |
||||||
|
uni.showToast({ |
||||||
|
title, |
||||||
|
icon: 'none', |
||||||
|
duration |
||||||
|
}) |
||||||
|
}, |
||||||
|
// 如果非数字,则返回0
|
||||||
|
handleNaN(val) { |
||||||
|
return isNaN(val) || val == 0 ? '' : val |
||||||
|
}, |
||||||
|
// 小于10,返回0+传入值
|
||||||
|
preZero(val) { |
||||||
|
return val < 10 ? '0' + val : val |
||||||
|
}, |
||||||
|
//返回格式化时间,传参例如:"yyyy-MM-dd hh:mm:ss"
|
||||||
|
formatDate(date, fmt = 'yyyy-MM-dd hh:mm:ss') { |
||||||
|
var date = date ? date : new Date() |
||||||
|
var o = {
|
||||||
|
"M+" : date.getMonth()+1, //月份
|
||||||
|
"d+" : date.getDate(), //日
|
||||||
|
"h+" : date.getHours(), //小时
|
||||||
|
"m+" : date.getMinutes(), //分
|
||||||
|
"s+" : date.getSeconds(), //秒
|
||||||
|
"q+" : Math.floor((date.getMonth()+3)/3), //季度
|
||||||
|
"S" : date.getMilliseconds() //毫秒
|
||||||
|
} |
||||||
|
if(/(y+)/.test(fmt)) { |
||||||
|
fmt=fmt.replace(RegExp.$1, (date.getFullYear()+"").substr(4 - RegExp.$1.length)) |
||||||
|
} |
||||||
|
for(var k in o) { |
||||||
|
if(new RegExp("("+ k +")").test(fmt)){ |
||||||
|
fmt = fmt.replace(RegExp.$1, (RegExp.$1.length==1) ? (o[k]) : (("00"+ o[k]).substr((""+ o[k]).length))) |
||||||
|
} |
||||||
|
} |
||||||
|
return fmt |
||||||
|
}, |
||||||
|
// 获取商务经理id
|
||||||
|
getBmId(val) { |
||||||
|
return uni.getStorageSync('team').partnerId |
||||||
|
}, |
||||||
|
// 获取商务经理名称
|
||||||
|
getBmName(val) { |
||||||
|
return uni.getStorageSync('team').partnerClassificationName |
||||||
|
}, |
||||||
|
// 返回图标。如果有图标,则直接返回
|
||||||
|
getIcon(e) { |
||||||
|
return e.appletIcon || Product.normalIcon |
||||||
|
}, |
||||||
|
// 判断文件类型是否能够通过uni.openDocument打开(doc, xls, ppt, pdf, docx, xlsx, pptx)
|
||||||
|
isDoc(ext) { |
||||||
|
return docExts.includes(ext) |
||||||
|
}, |
||||||
|
// 预览文档
|
||||||
|
openFile(id) { |
||||||
|
uni.showLoading({ |
||||||
|
title: '加载中', |
||||||
|
mask: true |
||||||
|
}) |
||||||
|
// 下载文件资源到本地
|
||||||
|
uni.downloadFile({ |
||||||
|
url: files[id], |
||||||
|
success: function(res) { |
||||||
|
uni.hideLoading(); |
||||||
|
uni.showLoading({ |
||||||
|
title: '正在打开', |
||||||
|
mask: true |
||||||
|
}) |
||||||
|
// 新开页面打开文档,支持格式:doc, xls, ppt, pdf, docx, xlsx, pptx。
|
||||||
|
uni.openDocument({ |
||||||
|
filePath: res.tempFilePath, |
||||||
|
fileType: 'docx', // 文件类型,指定文件类型打开文件,有效值 doc, xls, ppt, pdf, docx, xlsx, pptx
|
||||||
|
showMenu: true, // 允许出现分享功能
|
||||||
|
success: res => { |
||||||
|
uni.hideLoading() |
||||||
|
}, |
||||||
|
fail: openError => { |
||||||
|
uni.hideLoading() |
||||||
|
} |
||||||
|
}) |
||||||
|
}, |
||||||
|
fail: function(err) { |
||||||
|
uni.hideLoading() |
||||||
|
} |
||||||
|
}) |
||||||
|
}, |
||||||
|
// 产品管理的产品分类(classificationId)有6个,订单管理的产品分类(authority)有5个,后者是由前者决定的,但是id不一样。把产品管理的分类id传入这个函数,即可返回订单的分类id
|
||||||
|
getOrderType(id) { |
||||||
|
if (id == 1 || id == 2) return 1 |
||||||
|
if (id == 3) return 2 |
||||||
|
if (id == 4) return 3 |
||||||
|
if (id == 5) return 0 |
||||||
|
if (id == 6) return 4 |
||||||
|
}, |
||||||
|
// 去掉html标签
|
||||||
|
removeTag(str) { |
||||||
|
return str.replace(/(<[^>]+>)|(( )+)/g , '') |
||||||
|
}, |
||||||
|
} |
@ -0,0 +1,43 @@ |
|||||||
|
|
||||||
|
// #ifndef VUE3
|
||||||
|
import Vue from 'vue' |
||||||
|
import App from './App' |
||||||
|
import util from '@/libs/util' |
||||||
|
import uma from './libs/uma' |
||||||
|
import share from './libs/share' |
||||||
|
import mtjWxSdk from './libs/mtj-wx-sdk' |
||||||
|
|
||||||
|
Vue.config.productionTip = false |
||||||
|
Vue.prototype.$util = util |
||||||
|
Vue.use(uma) |
||||||
|
Vue.mixin(share) |
||||||
|
|
||||||
|
App.mpType = 'app' |
||||||
|
|
||||||
|
// 权限控制
|
||||||
|
Vue.prototype.auth = function(text){ |
||||||
|
const auth = uni.getStorageSync('auth') |
||||||
|
if (text && auth && auth.length) { |
||||||
|
const isPermission = auth.includes(text) |
||||||
|
return auth.includes(text) |
||||||
|
} |
||||||
|
// return true
|
||||||
|
} |
||||||
|
|
||||||
|
const app = new Vue({ |
||||||
|
...App, |
||||||
|
share |
||||||
|
}) |
||||||
|
app.$mount() |
||||||
|
// #endif
|
||||||
|
|
||||||
|
// #ifdef VUE3
|
||||||
|
import { createSSRApp } from 'vue' |
||||||
|
import App from './App.vue' |
||||||
|
export function createApp() { |
||||||
|
const app = createSSRApp(App) |
||||||
|
return { |
||||||
|
app |
||||||
|
} |
||||||
|
} |
||||||
|
// #endif
|
@ -0,0 +1,73 @@ |
|||||||
|
{ |
||||||
|
"name" : "职站商城", |
||||||
|
"appid" : "__UNI__2E89BA6", |
||||||
|
"description" : "", |
||||||
|
"versionName" : "1.0.0", |
||||||
|
"versionCode" : "100", |
||||||
|
"transformPx" : false, |
||||||
|
"app-plus" : { |
||||||
|
/* 5+App特有相关 */ |
||||||
|
"usingComponents" : true, |
||||||
|
"nvueCompiler" : "uni-app", |
||||||
|
"splashscreen" : { |
||||||
|
"alwaysShowBeforeRender" : true, |
||||||
|
"waiting" : true, |
||||||
|
"autoclose" : true, |
||||||
|
"delay" : 0 |
||||||
|
}, |
||||||
|
"modules" : {}, |
||||||
|
/* 模块配置 */ |
||||||
|
"distribute" : { |
||||||
|
/* 应用发布信息 */ |
||||||
|
"android" : { |
||||||
|
/* android打包配置 */ |
||||||
|
"permissions" : [ |
||||||
|
"<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>", |
||||||
|
"<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>", |
||||||
|
"<uses-permission android:name=\"android.permission.VIBRATE\"/>", |
||||||
|
"<uses-permission android:name=\"android.permission.READ_LOGS\"/>", |
||||||
|
"<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>", |
||||||
|
"<uses-feature android:name=\"android.hardware.camera.autofocus\"/>", |
||||||
|
"<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>", |
||||||
|
"<uses-permission android:name=\"android.permission.CAMERA\"/>", |
||||||
|
"<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>", |
||||||
|
"<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>", |
||||||
|
"<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>", |
||||||
|
"<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>", |
||||||
|
"<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>", |
||||||
|
"<uses-feature android:name=\"android.hardware.camera\"/>", |
||||||
|
"<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>" |
||||||
|
] |
||||||
|
}, |
||||||
|
"ios" : {}, |
||||||
|
/* ios打包配置 */ |
||||||
|
"sdkConfigs" : {} |
||||||
|
} |
||||||
|
}, |
||||||
|
/* SDK配置 */ |
||||||
|
"sdkConfigs" : {}, |
||||||
|
"quickapp" : {}, |
||||||
|
/* 快应用特有相关 */ |
||||||
|
"mp-weixin" : { |
||||||
|
"appid" : "wx2b506fdb0eeee65d", |
||||||
|
"setting" : { |
||||||
|
"urlCheck" : false, |
||||||
|
"es6" : true, |
||||||
|
"minified" : true |
||||||
|
}, |
||||||
|
"usingComponents" : true, |
||||||
|
"optimization" : { |
||||||
|
"subPackages" : true |
||||||
|
}, |
||||||
|
"uniStatistics" : { |
||||||
|
"enable" : false |
||||||
|
} |
||||||
|
}, |
||||||
|
"vueVersion" : "2", |
||||||
|
"uniStatistics" : { |
||||||
|
"version" : "2" |
||||||
|
}, |
||||||
|
"mp-toutiao" : { |
||||||
|
"appid" : "tt2192572fbea04fe601" |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,278 @@ |
|||||||
|
<template> |
||||||
|
<view class="wrap"> |
||||||
|
<view class="banner"> |
||||||
|
<image class="pic" :src="form.mall.coverDrawing" mode="widthFix"></image> |
||||||
|
</view> |
||||||
|
|
||||||
|
<view class="info"> |
||||||
|
<view class="line"> |
||||||
|
<view class="label">状态:</view> |
||||||
|
<view class="val">进行中</view> |
||||||
|
</view> |
||||||
|
<view class="line"> |
||||||
|
<view class="label">人数限制:</view> |
||||||
|
<view class="val">进行中</view> |
||||||
|
</view> |
||||||
|
<view class="line"> |
||||||
|
<view class="label">活动地点:</view> |
||||||
|
<view class="val">进行中</view> |
||||||
|
</view> |
||||||
|
<view class="line"> |
||||||
|
<view class="label">主办方:</view> |
||||||
|
<view class="val">进行中</view> |
||||||
|
</view> |
||||||
|
<view class="line"> |
||||||
|
<view class="label">已报名人员:</view> |
||||||
|
<view class="val">进行中</view> |
||||||
|
</view> |
||||||
|
</view> |
||||||
|
|
||||||
|
<ul class="tab"> |
||||||
|
<li v-for="(tab, i) in tabs" :class="{active: curTab === tab.id}" @click="tabChange(tab)">{{ tab.name }}</li> |
||||||
|
</ul> |
||||||
|
|
||||||
|
<view v-if="!curTab" class="detail"> |
||||||
|
|
||||||
|
</view> |
||||||
|
<view v-else class="list"> |
||||||
|
|
||||||
|
</view> |
||||||
|
</view> |
||||||
|
</template> |
||||||
|
|
||||||
|
<script> |
||||||
|
import { detailsOfGoods, addToShoppingCart, shoppingCartList, productCategoryList } from '@/apis/modules/product.js' |
||||||
|
export default { |
||||||
|
data() { |
||||||
|
return { |
||||||
|
id: '', |
||||||
|
curTab: 0, |
||||||
|
tabs: [ |
||||||
|
{ |
||||||
|
name: '活动详情', |
||||||
|
id: 0 |
||||||
|
}, |
||||||
|
{ |
||||||
|
name: '活动通知', |
||||||
|
id: 1 |
||||||
|
}, |
||||||
|
{ |
||||||
|
name: '已报名人员', |
||||||
|
id: 2 |
||||||
|
} |
||||||
|
], |
||||||
|
form: { |
||||||
|
classificationIds: [], |
||||||
|
interfaceDiagram: [], |
||||||
|
mall: { |
||||||
|
coverDrawing: '' |
||||||
|
}, |
||||||
|
goodsRes: {}, |
||||||
|
mallAnnex: [] |
||||||
|
}, |
||||||
|
shopCartTotal: 0, |
||||||
|
types: [], |
||||||
|
dotsStyles: { |
||||||
|
backgroundColor: 'rgba(83, 200, 249,0.3)', |
||||||
|
border: '1px rgba(83, 200, 249,0.3) solid', |
||||||
|
color: '#fff', |
||||||
|
selectedBackgroundColor: 'rgba(83, 200, 249,0.9)', |
||||||
|
selectedBorder: '1px rgba(83, 200, 249,0.9) solid' |
||||||
|
}, |
||||||
|
mpStyle: { |
||||||
|
p: 'font-size: 25rpx !important;font-family: Microsoft Yahei !important;font-weight: 400 !important;color: #333 !important;', |
||||||
|
span: 'font-size: 25rpx !important;font-family: Microsoft Yahei !important;font-weight: 400 !important;color: #333 !important;' |
||||||
|
} |
||||||
|
} |
||||||
|
}, |
||||||
|
onShow() { |
||||||
|
const pages = getCurrentPages() |
||||||
|
const { options } = pages[pages.length - 1] |
||||||
|
this.id = options.id |
||||||
|
this.getInfo() |
||||||
|
this.getShopCart() |
||||||
|
this.getTypes() |
||||||
|
}, |
||||||
|
methods: { |
||||||
|
// 获取详情 |
||||||
|
getInfo() { |
||||||
|
uni.showLoading({ |
||||||
|
title: '加载中' |
||||||
|
}) |
||||||
|
detailsOfGoods(this.id).then(res => { |
||||||
|
const e = res.orderDetails |
||||||
|
e.mall.productIntroduction = this.$util.removeTag(e.mall.productIntroduction) |
||||||
|
// e.mall.detailedIntroduction = this.$util.removeTag(e.mall.detailedIntroduction) |
||||||
|
this.form = e |
||||||
|
const pics = this.form.mall.interfaceDiagram |
||||||
|
if (pics) { |
||||||
|
this.form.interfaceDiagram = pics.split(',') |
||||||
|
// this.tabs.push({ |
||||||
|
// name: '界面图', |
||||||
|
// id: 1 |
||||||
|
// }) |
||||||
|
} |
||||||
|
// this.form.mallAnnex && this.form.mallAnnex.length && this.tabs.push({ |
||||||
|
// name: '参数', |
||||||
|
// id: 2 |
||||||
|
// }) |
||||||
|
uni.hideLoading() |
||||||
|
}).catch(e => { |
||||||
|
uni.hideLoading() |
||||||
|
}) |
||||||
|
}, |
||||||
|
// 获取购物车数量 |
||||||
|
getShopCart() { |
||||||
|
shoppingCartList({ |
||||||
|
pageNum: 1, |
||||||
|
pageSize: 1000, |
||||||
|
}).then(({ data }) => { |
||||||
|
this.shopCartTotal = data.total |
||||||
|
}).catch(e => {}) |
||||||
|
}, |
||||||
|
// 产品分类 |
||||||
|
getTypes() { |
||||||
|
productCategoryList().then(res => { |
||||||
|
this.types = res.classificationList |
||||||
|
}).catch(e => {}) |
||||||
|
}, |
||||||
|
// tab切换 |
||||||
|
tabChange(id) { |
||||||
|
this.curTab = id |
||||||
|
}, |
||||||
|
// 下载全部 |
||||||
|
downloadAll() { |
||||||
|
const fileName = [] |
||||||
|
const urls = [] |
||||||
|
this.form.mallAnnex.forEach(e => { |
||||||
|
fileName.push(e.fileName) |
||||||
|
urls.push(e.filePath) |
||||||
|
}) |
||||||
|
uni.setStorageSync('files', { |
||||||
|
copyWriting: this.form.mall.productName, |
||||||
|
fileName, |
||||||
|
urls |
||||||
|
}) |
||||||
|
this.$util.to(`/team/send/send`) |
||||||
|
}, |
||||||
|
// 下载附件 |
||||||
|
download(item) { |
||||||
|
uni.setStorageSync('files', { |
||||||
|
copyWriting: this.form.mall.productName, |
||||||
|
fileName: [item.fileName], |
||||||
|
urls: [item.filePath] |
||||||
|
}) |
||||||
|
this.$util.to(`/team/send/send`) |
||||||
|
}, |
||||||
|
// 加入购物车 |
||||||
|
addShop() { |
||||||
|
uni.showLoading({ |
||||||
|
title: '加载中' |
||||||
|
}) |
||||||
|
addToShoppingCart({ |
||||||
|
mallId: this.id |
||||||
|
}).then(res => { |
||||||
|
this.$util.sucMsg('加购成功') |
||||||
|
uni.hideLoading() |
||||||
|
this.getShopCart() |
||||||
|
}).catch(e => { |
||||||
|
uni.hideLoading() |
||||||
|
}) |
||||||
|
}, |
||||||
|
// 下单 |
||||||
|
order() { |
||||||
|
const { mall } = this.form |
||||||
|
const classificationId = this.form.classificationIds[0] |
||||||
|
const authority = this.$util.getOrderType(classificationId) |
||||||
|
// 把该产品添加至缓存 |
||||||
|
uni.setStorageSync('courses', [{ |
||||||
|
dataOrCourseId: mall.associatedProduct, // id |
||||||
|
mallId: mall.mallId, |
||||||
|
productName: mall.productName, // 名称 |
||||||
|
periodOfUse: '', // 使用期限 |
||||||
|
startTime: this.$util.formatDate(new Date(), 'yyyy-MM-dd'), // 开始 |
||||||
|
endTime: '', // 终止 |
||||||
|
remainingPeriod: '', // 剩余期限 |
||||||
|
marketValue: '', // 市场价 |
||||||
|
marketPrice: mall.marketUnitPrice, // 市场单价 |
||||||
|
finalPrice: 0, // 成交价 |
||||||
|
finalValue: 0, // 成交单价(数据产品特有) |
||||||
|
discountRate: '0%', // 折扣率 |
||||||
|
accountNum: 1, // 账号数 |
||||||
|
totalAmount: '', // 总价 |
||||||
|
isEnable: 0, // 启用否:1启用,0禁用 |
||||||
|
ship: 0, // 发货否(0未发货,1已发货,默认不发货) |
||||||
|
authority, // 区分权限 |
||||||
|
options: 2, |
||||||
|
miniProgramPictureAddress: mall.appletIcon || '', // 图标 |
||||||
|
settlementPrice: 0, // 结算价 |
||||||
|
settlementPriceUnit: 0, // 结算单价 |
||||||
|
serviceFee: 0 // 平台服务费(前端计算后展示,不入库) |
||||||
|
}]) |
||||||
|
this.$util.to(`../orderDetail/orderDetail?shopCart=1`) |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
</script> |
||||||
|
|
||||||
|
<style scoped lang="scss"> |
||||||
|
.wrap { |
||||||
|
padding-bottom: 140rpx; |
||||||
|
} |
||||||
|
.banner { |
||||||
|
.pic { |
||||||
|
width: 100%; |
||||||
|
} |
||||||
|
} |
||||||
|
.info { |
||||||
|
position: relative; |
||||||
|
padding: 20rpx; |
||||||
|
margin: -150rpx 30rpx 30rpx; |
||||||
|
background-color: #fff; |
||||||
|
border-radius: 8px; |
||||||
|
.line { |
||||||
|
display: flex; |
||||||
|
align-items: center; |
||||||
|
margin: 20rpx 0; |
||||||
|
} |
||||||
|
.label { |
||||||
|
width: 180rpx; |
||||||
|
font-size: 28rpx; |
||||||
|
} |
||||||
|
.val { |
||||||
|
font-size: 28rpx; |
||||||
|
font-weight: 600; |
||||||
|
color: #333; |
||||||
|
} |
||||||
|
} |
||||||
|
.tabs { |
||||||
|
display: flex; |
||||||
|
justify-content: center; |
||||||
|
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; |
||||||
|
} |
||||||
|
</style> |
@ -0,0 +1,324 @@ |
|||||||
|
<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> |
||||||
|
|
||||||
|
<view class="detail"> |
||||||
|
<ul class="tabs"> |
||||||
|
<li :class="{active: curTab === 0}" @click="tabChange(0)">主页</li> |
||||||
|
<li :class="{active: curTab === 1, disabled: !form.interfaceDiagram}" @click="tabChange(1)">商品</li> |
||||||
|
</ul> |
||||||
|
</view> |
||||||
|
|
||||||
|
<view v-if="!curTab" class="detail"> |
||||||
|
<view class="title">公司简介</view> |
||||||
|
</view> |
||||||
|
<view v-else class="list"> |
||||||
|
<view class="item"> |
||||||
|
<image class="pic" src="@/static/image/info-bg.jpg"></image> |
||||||
|
<view class="texts"> |
||||||
|
<view class="name">测试标题</view> |
||||||
|
<view class="price">¥12.8</view> |
||||||
|
</view> |
||||||
|
</view> |
||||||
|
<view class="item"> |
||||||
|
<image class="pic" src="@/static/image/info-bg.jpg"></image> |
||||||
|
<view class="texts"> |
||||||
|
<view class="name">测试标题</view> |
||||||
|
<view class="price">¥12.8</view> |
||||||
|
</view> |
||||||
|
</view> |
||||||
|
<view class="item"> |
||||||
|
<image class="pic" src="@/static/image/info-bg.jpg"></image> |
||||||
|
<view class="texts"> |
||||||
|
<view class="name">测试标题</view> |
||||||
|
<view class="price">¥12.8</view> |
||||||
|
</view> |
||||||
|
</view> |
||||||
|
<view class="item"> |
||||||
|
<image class="pic" src="@/static/image/info-bg.jpg"></image> |
||||||
|
<view class="texts"> |
||||||
|
<view class="name">测试标题</view> |
||||||
|
<view class="price">¥12.8</view> |
||||||
|
</view> |
||||||
|
</view> |
||||||
|
</view> |
||||||
|
</view> |
||||||
|
</template> |
||||||
|
|
||||||
|
<script> |
||||||
|
import { detailsOfGoods, addToShoppingCart, shoppingCartList, productCategoryList } from '@/apis/modules/product.js' |
||||||
|
export default { |
||||||
|
data() { |
||||||
|
return { |
||||||
|
id: '', |
||||||
|
curTab: 0, |
||||||
|
tabs: [ |
||||||
|
{ |
||||||
|
name: '详情介绍', |
||||||
|
id: 0 |
||||||
|
}, |
||||||
|
{ |
||||||
|
name: '界面图', |
||||||
|
id: 1 |
||||||
|
}, |
||||||
|
{ |
||||||
|
name: '参数', |
||||||
|
id: 2 |
||||||
|
} |
||||||
|
], |
||||||
|
form: { |
||||||
|
classificationIds: [], |
||||||
|
interfaceDiagram: [], |
||||||
|
mall: { |
||||||
|
coverDrawing: '' |
||||||
|
}, |
||||||
|
goodsRes: {}, |
||||||
|
mallAnnex: [] |
||||||
|
}, |
||||||
|
shopCartTotal: 0, |
||||||
|
types: [], |
||||||
|
dotsStyles: { |
||||||
|
backgroundColor: 'rgba(83, 200, 249,0.3)', |
||||||
|
border: '1px rgba(83, 200, 249,0.3) solid', |
||||||
|
color: '#fff', |
||||||
|
selectedBackgroundColor: 'rgba(83, 200, 249,0.9)', |
||||||
|
selectedBorder: '1px rgba(83, 200, 249,0.9) solid' |
||||||
|
}, |
||||||
|
mpStyle: { |
||||||
|
p: 'font-size: 25rpx !important;font-family: Microsoft Yahei !important;font-weight: 400 !important;color: #333 !important;', |
||||||
|
span: 'font-size: 25rpx !important;font-family: Microsoft Yahei !important;font-weight: 400 !important;color: #333 !important;' |
||||||
|
} |
||||||
|
} |
||||||
|
}, |
||||||
|
onShow() { |
||||||
|
const pages = getCurrentPages() |
||||||
|
const { options } = pages[pages.length - 1] |
||||||
|
this.id = options.id |
||||||
|
this.getInfo() |
||||||
|
this.getShopCart() |
||||||
|
this.getTypes() |
||||||
|
}, |
||||||
|
methods: { |
||||||
|
// 获取详情 |
||||||
|
getInfo() { |
||||||
|
uni.showLoading({ |
||||||
|
title: '加载中' |
||||||
|
}) |
||||||
|
detailsOfGoods(this.id).then(res => { |
||||||
|
const e = res.orderDetails |
||||||
|
e.mall.productIntroduction = this.$util.removeTag(e.mall.productIntroduction) |
||||||
|
// e.mall.detailedIntroduction = this.$util.removeTag(e.mall.detailedIntroduction) |
||||||
|
this.form = e |
||||||
|
const pics = this.form.mall.interfaceDiagram |
||||||
|
if (pics) { |
||||||
|
this.form.interfaceDiagram = pics.split(',') |
||||||
|
// this.tabs.push({ |
||||||
|
// name: '界面图', |
||||||
|
// id: 1 |
||||||
|
// }) |
||||||
|
} |
||||||
|
// this.form.mallAnnex && this.form.mallAnnex.length && this.tabs.push({ |
||||||
|
// name: '参数', |
||||||
|
// id: 2 |
||||||
|
// }) |
||||||
|
uni.hideLoading() |
||||||
|
}).catch(e => { |
||||||
|
uni.hideLoading() |
||||||
|
}) |
||||||
|
}, |
||||||
|
// 获取购物车数量 |
||||||
|
getShopCart() { |
||||||
|
shoppingCartList({ |
||||||
|
pageNum: 1, |
||||||
|
pageSize: 1000, |
||||||
|
}).then(({ data }) => { |
||||||
|
this.shopCartTotal = data.total |
||||||
|
}).catch(e => {}) |
||||||
|
}, |
||||||
|
// 产品分类 |
||||||
|
getTypes() { |
||||||
|
productCategoryList().then(res => { |
||||||
|
this.types = res.classificationList |
||||||
|
}).catch(e => {}) |
||||||
|
}, |
||||||
|
// tab切换 |
||||||
|
tabChange(id) { |
||||||
|
this.curTab = id |
||||||
|
}, |
||||||
|
// 下载全部 |
||||||
|
downloadAll() { |
||||||
|
const fileName = [] |
||||||
|
const urls = [] |
||||||
|
this.form.mallAnnex.forEach(e => { |
||||||
|
fileName.push(e.fileName) |
||||||
|
urls.push(e.filePath) |
||||||
|
}) |
||||||
|
uni.setStorageSync('files', { |
||||||
|
copyWriting: this.form.mall.productName, |
||||||
|
fileName, |
||||||
|
urls |
||||||
|
}) |
||||||
|
this.$util.to(`/team/send/send`) |
||||||
|
}, |
||||||
|
// 下载附件 |
||||||
|
download(item) { |
||||||
|
uni.setStorageSync('files', { |
||||||
|
copyWriting: this.form.mall.productName, |
||||||
|
fileName: [item.fileName], |
||||||
|
urls: [item.filePath] |
||||||
|
}) |
||||||
|
this.$util.to(`/team/send/send`) |
||||||
|
}, |
||||||
|
// 加入购物车 |
||||||
|
addShop() { |
||||||
|
uni.showLoading({ |
||||||
|
title: '加载中' |
||||||
|
}) |
||||||
|
addToShoppingCart({ |
||||||
|
mallId: this.id |
||||||
|
}).then(res => { |
||||||
|
this.$util.sucMsg('加购成功') |
||||||
|
uni.hideLoading() |
||||||
|
this.getShopCart() |
||||||
|
}).catch(e => { |
||||||
|
uni.hideLoading() |
||||||
|
}) |
||||||
|
}, |
||||||
|
// 下单 |
||||||
|
order() { |
||||||
|
const { mall } = this.form |
||||||
|
const classificationId = this.form.classificationIds[0] |
||||||
|
const authority = this.$util.getOrderType(classificationId) |
||||||
|
// 把该产品添加至缓存 |
||||||
|
uni.setStorageSync('courses', [{ |
||||||
|
dataOrCourseId: mall.associatedProduct, // id |
||||||
|
mallId: mall.mallId, |
||||||
|
productName: mall.productName, // 名称 |
||||||
|
periodOfUse: '', // 使用期限 |
||||||
|
startTime: this.$util.formatDate(new Date(), 'yyyy-MM-dd'), // 开始 |
||||||
|
endTime: '', // 终止 |
||||||
|
remainingPeriod: '', // 剩余期限 |
||||||
|
marketValue: '', // 市场价 |
||||||
|
marketPrice: mall.marketUnitPrice, // 市场单价 |
||||||
|
finalPrice: 0, // 成交价 |
||||||
|
finalValue: 0, // 成交单价(数据产品特有) |
||||||
|
discountRate: '0%', // 折扣率 |
||||||
|
accountNum: 1, // 账号数 |
||||||
|
totalAmount: '', // 总价 |
||||||
|
isEnable: 0, // 启用否:1启用,0禁用 |
||||||
|
ship: 0, // 发货否(0未发货,1已发货,默认不发货) |
||||||
|
authority, // 区分权限 |
||||||
|
options: 2, |
||||||
|
miniProgramPictureAddress: mall.appletIcon || '', // 图标 |
||||||
|
settlementPrice: 0, // 结算价 |
||||||
|
settlementPriceUnit: 0, // 结算单价 |
||||||
|
serviceFee: 0 // 平台服务费(前端计算后展示,不入库) |
||||||
|
}]) |
||||||
|
this.$util.to(`../orderDetail/orderDetail?shopCart=1`) |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
</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; |
||||||
|
font-weight: 600; |
||||||
|
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: center; |
||||||
|
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; |
||||||
|
} |
||||||
|
.list { |
||||||
|
display: flex; |
||||||
|
flex-wrap: wrap; |
||||||
|
padding: 0 10rpx; |
||||||
|
.item { |
||||||
|
width: calc((100% - 40rpx) / 2); |
||||||
|
margin: 20rpx 10rpx; |
||||||
|
background-color: #fff; |
||||||
|
border-radius: 8px; |
||||||
|
overflow: hidden; |
||||||
|
} |
||||||
|
.pic { |
||||||
|
width: 100%; |
||||||
|
height: 200rpx; |
||||||
|
} |
||||||
|
.texts { |
||||||
|
padding: 20rpx; |
||||||
|
} |
||||||
|
.name { |
||||||
|
margin-bottom: 10rpx; |
||||||
|
font-size: 30rpx; |
||||||
|
font-weight: 600; |
||||||
|
} |
||||||
|
.price { |
||||||
|
font-size: 26rpx; |
||||||
|
color: #ff0047; |
||||||
|
} |
||||||
|
} |
||||||
|
</style> |
@ -0,0 +1,777 @@ |
|||||||
|
{ |
||||||
|
"name": "筛选 菜单 筛选菜单 上拉筛选 ", |
||||||
|
"version": "1.0.4", |
||||||
|
"lockfileVersion": 1, |
||||||
|
"requires": true, |
||||||
|
"dependencies": { |
||||||
|
"ajv": { |
||||||
|
"version": "6.12.6", |
||||||
|
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", |
||||||
|
"integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", |
||||||
|
"requires": { |
||||||
|
"fast-deep-equal": "^3.1.1", |
||||||
|
"fast-json-stable-stringify": "^2.0.0", |
||||||
|
"json-schema-traverse": "^0.4.1", |
||||||
|
"uri-js": "^4.2.2" |
||||||
|
} |
||||||
|
}, |
||||||
|
"ajv-errors": { |
||||||
|
"version": "1.0.1", |
||||||
|
"resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", |
||||||
|
"integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==" |
||||||
|
}, |
||||||
|
"ajv-keywords": { |
||||||
|
"version": "3.5.2", |
||||||
|
"resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", |
||||||
|
"integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==" |
||||||
|
}, |
||||||
|
"ansi-colors": { |
||||||
|
"version": "3.2.4", |
||||||
|
"resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", |
||||||
|
"integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==" |
||||||
|
}, |
||||||
|
"aproba": { |
||||||
|
"version": "1.2.0", |
||||||
|
"resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", |
||||||
|
"integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" |
||||||
|
}, |
||||||
|
"array-union": { |
||||||
|
"version": "1.0.2", |
||||||
|
"resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", |
||||||
|
"integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", |
||||||
|
"requires": { |
||||||
|
"array-uniq": "^1.0.1" |
||||||
|
} |
||||||
|
}, |
||||||
|
"array-uniq": { |
||||||
|
"version": "1.0.3", |
||||||
|
"resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", |
||||||
|
"integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==" |
||||||
|
}, |
||||||
|
"balanced-match": { |
||||||
|
"version": "1.0.2", |
||||||
|
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", |
||||||
|
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" |
||||||
|
}, |
||||||
|
"big.js": { |
||||||
|
"version": "5.2.2", |
||||||
|
"resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", |
||||||
|
"integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" |
||||||
|
}, |
||||||
|
"bluebird": { |
||||||
|
"version": "3.7.2", |
||||||
|
"resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", |
||||||
|
"integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" |
||||||
|
}, |
||||||
|
"brace-expansion": { |
||||||
|
"version": "1.1.11", |
||||||
|
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", |
||||||
|
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", |
||||||
|
"requires": { |
||||||
|
"balanced-match": "^1.0.0", |
||||||
|
"concat-map": "0.0.1" |
||||||
|
} |
||||||
|
}, |
||||||
|
"buffer-from": { |
||||||
|
"version": "1.1.2", |
||||||
|
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", |
||||||
|
"integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" |
||||||
|
}, |
||||||
|
"cacache": { |
||||||
|
"version": "11.3.3", |
||||||
|
"resolved": "https://registry.npmjs.org/cacache/-/cacache-11.3.3.tgz", |
||||||
|
"integrity": "sha512-p8WcneCytvzPxhDvYp31PD039vi77I12W+/KfR9S8AZbaiARFBCpsPJS+9uhWfeBfeAtW7o/4vt3MUqLkbY6nA==", |
||||||
|
"requires": { |
||||||
|
"bluebird": "^3.5.5", |
||||||
|
"chownr": "^1.1.1", |
||||||
|
"figgy-pudding": "^3.5.1", |
||||||
|
"glob": "^7.1.4", |
||||||
|
"graceful-fs": "^4.1.15", |
||||||
|
"lru-cache": "^5.1.1", |
||||||
|
"mississippi": "^3.0.0", |
||||||
|
"mkdirp": "^0.5.1", |
||||||
|
"move-concurrently": "^1.0.1", |
||||||
|
"promise-inflight": "^1.0.1", |
||||||
|
"rimraf": "^2.6.3", |
||||||
|
"ssri": "^6.0.1", |
||||||
|
"unique-filename": "^1.1.1", |
||||||
|
"y18n": "^4.0.0" |
||||||
|
} |
||||||
|
}, |
||||||
|
"chownr": { |
||||||
|
"version": "1.1.4", |
||||||
|
"resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", |
||||||
|
"integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" |
||||||
|
}, |
||||||
|
"commondir": { |
||||||
|
"version": "1.0.1", |
||||||
|
"resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", |
||||||
|
"integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" |
||||||
|
}, |
||||||
|
"concat-map": { |
||||||
|
"version": "0.0.1", |
||||||
|
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", |
||||||
|
"integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" |
||||||
|
}, |
||||||
|
"concat-stream": { |
||||||
|
"version": "1.6.2", |
||||||
|
"resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", |
||||||
|
"integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", |
||||||
|
"requires": { |
||||||
|
"buffer-from": "^1.0.0", |
||||||
|
"inherits": "^2.0.3", |
||||||
|
"readable-stream": "^2.2.2", |
||||||
|
"typedarray": "^0.0.6" |
||||||
|
} |
||||||
|
}, |
||||||
|
"copy-concurrently": { |
||||||
|
"version": "1.0.5", |
||||||
|
"resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", |
||||||
|
"integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", |
||||||
|
"requires": { |
||||||
|
"aproba": "^1.1.1", |
||||||
|
"fs-write-stream-atomic": "^1.0.8", |
||||||
|
"iferr": "^0.1.5", |
||||||
|
"mkdirp": "^0.5.1", |
||||||
|
"rimraf": "^2.5.4", |
||||||
|
"run-queue": "^1.0.0" |
||||||
|
} |
||||||
|
}, |
||||||
|
"copy-webpack-plugin": { |
||||||
|
"version": "5.0.3", |
||||||
|
"resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-5.0.3.tgz", |
||||||
|
"integrity": "sha512-PlZRs9CUMnAVylZq+vg2Juew662jWtwOXOqH4lbQD9ZFhRG9R7tVStOgHt21CBGVq7k5yIJaz8TXDLSjV+Lj8Q==", |
||||||
|
"requires": { |
||||||
|
"cacache": "^11.3.2", |
||||||
|
"find-cache-dir": "^2.1.0", |
||||||
|
"glob-parent": "^3.1.0", |
||||||
|
"globby": "^7.1.1", |
||||||
|
"is-glob": "^4.0.1", |
||||||
|
"loader-utils": "^1.2.3", |
||||||
|
"minimatch": "^3.0.4", |
||||||
|
"normalize-path": "^3.0.0", |
||||||
|
"p-limit": "^2.2.0", |
||||||
|
"schema-utils": "^1.0.0", |
||||||
|
"serialize-javascript": "^1.7.0", |
||||||
|
"webpack-log": "^2.0.0" |
||||||
|
} |
||||||
|
}, |
||||||
|
"core-util-is": { |
||||||
|
"version": "1.0.3", |
||||||
|
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", |
||||||
|
"integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" |
||||||
|
}, |
||||||
|
"cyclist": { |
||||||
|
"version": "1.0.1", |
||||||
|
"resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", |
||||||
|
"integrity": "sha512-NJGVKPS81XejHcLhaLJS7plab0fK3slPh11mESeeDq2W4ZI5kUKK/LRRdVDvjJseojbPB7ZwjnyOybg3Igea/A==" |
||||||
|
}, |
||||||
|
"dir-glob": { |
||||||
|
"version": "2.2.2", |
||||||
|
"resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz", |
||||||
|
"integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==", |
||||||
|
"requires": { |
||||||
|
"path-type": "^3.0.0" |
||||||
|
} |
||||||
|
}, |
||||||
|
"duplexify": { |
||||||
|
"version": "3.7.1", |
||||||
|
"resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", |
||||||
|
"integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", |
||||||
|
"requires": { |
||||||
|
"end-of-stream": "^1.0.0", |
||||||
|
"inherits": "^2.0.1", |
||||||
|
"readable-stream": "^2.0.0", |
||||||
|
"stream-shift": "^1.0.0" |
||||||
|
} |
||||||
|
}, |
||||||
|
"emojis-list": { |
||||||
|
"version": "3.0.0", |
||||||
|
"resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", |
||||||
|
"integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==" |
||||||
|
}, |
||||||
|
"end-of-stream": { |
||||||
|
"version": "1.4.4", |
||||||
|
"resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", |
||||||
|
"integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", |
||||||
|
"requires": { |
||||||
|
"once": "^1.4.0" |
||||||
|
} |
||||||
|
}, |
||||||
|
"fast-deep-equal": { |
||||||
|
"version": "3.1.3", |
||||||
|
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", |
||||||
|
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" |
||||||
|
}, |
||||||
|
"fast-json-stable-stringify": { |
||||||
|
"version": "2.1.0", |
||||||
|
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", |
||||||
|
"integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" |
||||||
|
}, |
||||||
|
"figgy-pudding": { |
||||||
|
"version": "3.5.2", |
||||||
|
"resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", |
||||||
|
"integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==" |
||||||
|
}, |
||||||
|
"find-cache-dir": { |
||||||
|
"version": "2.1.0", |
||||||
|
"resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", |
||||||
|
"integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", |
||||||
|
"requires": { |
||||||
|
"commondir": "^1.0.1", |
||||||
|
"make-dir": "^2.0.0", |
||||||
|
"pkg-dir": "^3.0.0" |
||||||
|
} |
||||||
|
}, |
||||||
|
"find-up": { |
||||||
|
"version": "3.0.0", |
||||||
|
"resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", |
||||||
|
"integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", |
||||||
|
"requires": { |
||||||
|
"locate-path": "^3.0.0" |
||||||
|
} |
||||||
|
}, |
||||||
|
"flush-write-stream": { |
||||||
|
"version": "1.1.1", |
||||||
|
"resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", |
||||||
|
"integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", |
||||||
|
"requires": { |
||||||
|
"inherits": "^2.0.3", |
||||||
|
"readable-stream": "^2.3.6" |
||||||
|
} |
||||||
|
}, |
||||||
|
"from2": { |
||||||
|
"version": "2.3.0", |
||||||
|
"resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", |
||||||
|
"integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", |
||||||
|
"requires": { |
||||||
|
"inherits": "^2.0.1", |
||||||
|
"readable-stream": "^2.0.0" |
||||||
|
} |
||||||
|
}, |
||||||
|
"fs-write-stream-atomic": { |
||||||
|
"version": "1.0.10", |
||||||
|
"resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", |
||||||
|
"integrity": "sha512-gehEzmPn2nAwr39eay+x3X34Ra+M2QlVUTLhkXPjWdeO8RF9kszk116avgBJM3ZyNHgHXBNx+VmPaFC36k0PzA==", |
||||||
|
"requires": { |
||||||
|
"graceful-fs": "^4.1.2", |
||||||
|
"iferr": "^0.1.5", |
||||||
|
"imurmurhash": "^0.1.4", |
||||||
|
"readable-stream": "1 || 2" |
||||||
|
} |
||||||
|
}, |
||||||
|
"fs.realpath": { |
||||||
|
"version": "1.0.0", |
||||||
|
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", |
||||||
|
"integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" |
||||||
|
}, |
||||||
|
"glob": { |
||||||
|
"version": "7.2.3", |
||||||
|
"resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", |
||||||
|
"integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", |
||||||
|
"requires": { |
||||||
|
"fs.realpath": "^1.0.0", |
||||||
|
"inflight": "^1.0.4", |
||||||
|
"inherits": "2", |
||||||
|
"minimatch": "^3.1.1", |
||||||
|
"once": "^1.3.0", |
||||||
|
"path-is-absolute": "^1.0.0" |
||||||
|
} |
||||||
|
}, |
||||||
|
"glob-parent": { |
||||||
|
"version": "3.1.0", |
||||||
|
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", |
||||||
|
"integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", |
||||||
|
"requires": { |
||||||
|
"is-glob": "^3.1.0", |
||||||
|
"path-dirname": "^1.0.0" |
||||||
|
}, |
||||||
|
"dependencies": { |
||||||
|
"is-glob": { |
||||||
|
"version": "3.1.0", |
||||||
|
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", |
||||||
|
"integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", |
||||||
|
"requires": { |
||||||
|
"is-extglob": "^2.1.0" |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
}, |
||||||
|
"globby": { |
||||||
|
"version": "7.1.1", |
||||||
|
"resolved": "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz", |
||||||
|
"integrity": "sha512-yANWAN2DUcBtuus5Cpd+SKROzXHs2iVXFZt/Ykrfz6SAXqacLX25NZpltE+39ceMexYF4TtEadjuSTw8+3wX4g==", |
||||||
|
"requires": { |
||||||
|
"array-union": "^1.0.1", |
||||||
|
"dir-glob": "^2.0.0", |
||||||
|
"glob": "^7.1.2", |
||||||
|
"ignore": "^3.3.5", |
||||||
|
"pify": "^3.0.0", |
||||||
|
"slash": "^1.0.0" |
||||||
|
}, |
||||||
|
"dependencies": { |
||||||
|
"pify": { |
||||||
|
"version": "3.0.0", |
||||||
|
"resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", |
||||||
|
"integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==" |
||||||
|
} |
||||||
|
} |
||||||
|
}, |
||||||
|
"graceful-fs": { |
||||||
|
"version": "4.2.10", |
||||||
|
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", |
||||||
|
"integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" |
||||||
|
}, |
||||||
|
"iferr": { |
||||||
|
"version": "0.1.5", |
||||||
|
"resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", |
||||||
|
"integrity": "sha512-DUNFN5j7Tln0D+TxzloUjKB+CtVu6myn0JEFak6dG18mNt9YkQ6lzGCdafwofISZ1lLF3xRHJ98VKy9ynkcFaA==" |
||||||
|
}, |
||||||
|
"ignore": { |
||||||
|
"version": "3.3.10", |
||||||
|
"resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", |
||||||
|
"integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==" |
||||||
|
}, |
||||||
|
"imurmurhash": { |
||||||
|
"version": "0.1.4", |
||||||
|
"resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", |
||||||
|
"integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" |
||||||
|
}, |
||||||
|
"inflight": { |
||||||
|
"version": "1.0.6", |
||||||
|
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", |
||||||
|
"integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", |
||||||
|
"requires": { |
||||||
|
"once": "^1.3.0", |
||||||
|
"wrappy": "1" |
||||||
|
} |
||||||
|
}, |
||||||
|
"inherits": { |
||||||
|
"version": "2.0.4", |
||||||
|
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", |
||||||
|
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" |
||||||
|
}, |
||||||
|
"is-extglob": { |
||||||
|
"version": "2.1.1", |
||||||
|
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", |
||||||
|
"integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" |
||||||
|
}, |
||||||
|
"is-glob": { |
||||||
|
"version": "4.0.3", |
||||||
|
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", |
||||||
|
"integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", |
||||||
|
"requires": { |
||||||
|
"is-extglob": "^2.1.1" |
||||||
|
} |
||||||
|
}, |
||||||
|
"isarray": { |
||||||
|
"version": "1.0.0", |
||||||
|
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", |
||||||
|
"integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" |
||||||
|
}, |
||||||
|
"json-schema-traverse": { |
||||||
|
"version": "0.4.1", |
||||||
|
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", |
||||||
|
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" |
||||||
|
}, |
||||||
|
"json5": { |
||||||
|
"version": "1.0.2", |
||||||
|
"resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", |
||||||
|
"integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", |
||||||
|
"requires": { |
||||||
|
"minimist": "^1.2.0" |
||||||
|
} |
||||||
|
}, |
||||||
|
"loader-utils": { |
||||||
|
"version": "1.4.2", |
||||||
|
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", |
||||||
|
"integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", |
||||||
|
"requires": { |
||||||
|
"big.js": "^5.2.2", |
||||||
|
"emojis-list": "^3.0.0", |
||||||
|
"json5": "^1.0.1" |
||||||
|
} |
||||||
|
}, |
||||||
|
"locate-path": { |
||||||
|
"version": "3.0.0", |
||||||
|
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", |
||||||
|
"integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", |
||||||
|
"requires": { |
||||||
|
"p-locate": "^3.0.0", |
||||||
|
"path-exists": "^3.0.0" |
||||||
|
} |
||||||
|
}, |
||||||
|
"lru-cache": { |
||||||
|
"version": "5.1.1", |
||||||
|
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", |
||||||
|
"integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", |
||||||
|
"requires": { |
||||||
|
"yallist": "^3.0.2" |
||||||
|
} |
||||||
|
}, |
||||||
|
"make-dir": { |
||||||
|
"version": "2.1.0", |
||||||
|
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", |
||||||
|
"integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", |
||||||
|
"requires": { |
||||||
|
"pify": "^4.0.1", |
||||||
|
"semver": "^5.6.0" |
||||||
|
} |
||||||
|
}, |
||||||
|
"minimatch": { |
||||||
|
"version": "3.1.2", |
||||||
|
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", |
||||||
|
"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", |
||||||
|
"requires": { |
||||||
|
"brace-expansion": "^1.1.7" |
||||||
|
} |
||||||
|
}, |
||||||
|
"minimist": { |
||||||
|
"version": "1.2.8", |
||||||
|
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", |
||||||
|
"integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==" |
||||||
|
}, |
||||||
|
"mississippi": { |
||||||
|
"version": "3.0.0", |
||||||
|
"resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", |
||||||
|
"integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", |
||||||
|
"requires": { |
||||||
|
"concat-stream": "^1.5.0", |
||||||
|
"duplexify": "^3.4.2", |
||||||
|
"end-of-stream": "^1.1.0", |
||||||
|
"flush-write-stream": "^1.0.0", |
||||||
|
"from2": "^2.1.0", |
||||||
|
"parallel-transform": "^1.1.0", |
||||||
|
"pump": "^3.0.0", |
||||||
|
"pumpify": "^1.3.3", |
||||||
|
"stream-each": "^1.1.0", |
||||||
|
"through2": "^2.0.0" |
||||||
|
} |
||||||
|
}, |
||||||
|
"mkdirp": { |
||||||
|
"version": "0.5.6", |
||||||
|
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", |
||||||
|
"integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", |
||||||
|
"requires": { |
||||||
|
"minimist": "^1.2.6" |
||||||
|
} |
||||||
|
}, |
||||||
|
"move-concurrently": { |
||||||
|
"version": "1.0.1", |
||||||
|
"resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", |
||||||
|
"integrity": "sha512-hdrFxZOycD/g6A6SoI2bB5NA/5NEqD0569+S47WZhPvm46sD50ZHdYaFmnua5lndde9rCHGjmfK7Z8BuCt/PcQ==", |
||||||
|
"requires": { |
||||||
|
"aproba": "^1.1.1", |
||||||
|
"copy-concurrently": "^1.0.0", |
||||||
|
"fs-write-stream-atomic": "^1.0.8", |
||||||
|
"mkdirp": "^0.5.1", |
||||||
|
"rimraf": "^2.5.4", |
||||||
|
"run-queue": "^1.0.3" |
||||||
|
} |
||||||
|
}, |
||||||
|
"normalize-path": { |
||||||
|
"version": "3.0.0", |
||||||
|
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", |
||||||
|
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" |
||||||
|
}, |
||||||
|
"once": { |
||||||
|
"version": "1.4.0", |
||||||
|
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", |
||||||
|
"integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", |
||||||
|
"requires": { |
||||||
|
"wrappy": "1" |
||||||
|
} |
||||||
|
}, |
||||||
|
"p-limit": { |
||||||
|
"version": "2.3.0", |
||||||
|
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", |
||||||
|
"integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", |
||||||
|
"requires": { |
||||||
|
"p-try": "^2.0.0" |
||||||
|
} |
||||||
|
}, |
||||||
|
"p-locate": { |
||||||
|
"version": "3.0.0", |
||||||
|
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", |
||||||
|
"integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", |
||||||
|
"requires": { |
||||||
|
"p-limit": "^2.0.0" |
||||||
|
} |
||||||
|
}, |
||||||
|
"p-try": { |
||||||
|
"version": "2.2.0", |
||||||
|
"resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", |
||||||
|
"integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" |
||||||
|
}, |
||||||
|
"parallel-transform": { |
||||||
|
"version": "1.2.0", |
||||||
|
"resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", |
||||||
|
"integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", |
||||||
|
"requires": { |
||||||
|
"cyclist": "^1.0.1", |
||||||
|
"inherits": "^2.0.3", |
||||||
|
"readable-stream": "^2.1.5" |
||||||
|
} |
||||||
|
}, |
||||||
|
"path-dirname": { |
||||||
|
"version": "1.0.2", |
||||||
|
"resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", |
||||||
|
"integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==" |
||||||
|
}, |
||||||
|
"path-exists": { |
||||||
|
"version": "3.0.0", |
||||||
|
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", |
||||||
|
"integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==" |
||||||
|
}, |
||||||
|
"path-is-absolute": { |
||||||
|
"version": "1.0.1", |
||||||
|
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", |
||||||
|
"integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" |
||||||
|
}, |
||||||
|
"path-type": { |
||||||
|
"version": "3.0.0", |
||||||
|
"resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", |
||||||
|
"integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", |
||||||
|
"requires": { |
||||||
|
"pify": "^3.0.0" |
||||||
|
}, |
||||||
|
"dependencies": { |
||||||
|
"pify": { |
||||||
|
"version": "3.0.0", |
||||||
|
"resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", |
||||||
|
"integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==" |
||||||
|
} |
||||||
|
} |
||||||
|
}, |
||||||
|
"pify": { |
||||||
|
"version": "4.0.1", |
||||||
|
"resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", |
||||||
|
"integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" |
||||||
|
}, |
||||||
|
"pkg-dir": { |
||||||
|
"version": "3.0.0", |
||||||
|
"resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", |
||||||
|
"integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", |
||||||
|
"requires": { |
||||||
|
"find-up": "^3.0.0" |
||||||
|
} |
||||||
|
}, |
||||||
|
"process-nextick-args": { |
||||||
|
"version": "2.0.1", |
||||||
|
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", |
||||||
|
"integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" |
||||||
|
}, |
||||||
|
"promise-inflight": { |
||||||
|
"version": "1.0.1", |
||||||
|
"resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", |
||||||
|
"integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==" |
||||||
|
}, |
||||||
|
"pump": { |
||||||
|
"version": "3.0.0", |
||||||
|
"resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", |
||||||
|
"integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", |
||||||
|
"requires": { |
||||||
|
"end-of-stream": "^1.1.0", |
||||||
|
"once": "^1.3.1" |
||||||
|
} |
||||||
|
}, |
||||||
|
"pumpify": { |
||||||
|
"version": "1.5.1", |
||||||
|
"resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", |
||||||
|
"integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", |
||||||
|
"requires": { |
||||||
|
"duplexify": "^3.6.0", |
||||||
|
"inherits": "^2.0.3", |
||||||
|
"pump": "^2.0.0" |
||||||
|
}, |
||||||
|
"dependencies": { |
||||||
|
"pump": { |
||||||
|
"version": "2.0.1", |
||||||
|
"resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", |
||||||
|
"integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", |
||||||
|
"requires": { |
||||||
|
"end-of-stream": "^1.1.0", |
||||||
|
"once": "^1.3.1" |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
}, |
||||||
|
"punycode": { |
||||||
|
"version": "2.3.0", |
||||||
|
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", |
||||||
|
"integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==" |
||||||
|
}, |
||||||
|
"readable-stream": { |
||||||
|
"version": "2.3.7", |
||||||
|
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", |
||||||
|
"integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", |
||||||
|
"requires": { |
||||||
|
"core-util-is": "~1.0.0", |
||||||
|
"inherits": "~2.0.3", |
||||||
|
"isarray": "~1.0.0", |
||||||
|
"process-nextick-args": "~2.0.0", |
||||||
|
"safe-buffer": "~5.1.1", |
||||||
|
"string_decoder": "~1.1.1", |
||||||
|
"util-deprecate": "~1.0.1" |
||||||
|
} |
||||||
|
}, |
||||||
|
"rimraf": { |
||||||
|
"version": "2.7.1", |
||||||
|
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", |
||||||
|
"integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", |
||||||
|
"requires": { |
||||||
|
"glob": "^7.1.3" |
||||||
|
} |
||||||
|
}, |
||||||
|
"run-queue": { |
||||||
|
"version": "1.0.3", |
||||||
|
"resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", |
||||||
|
"integrity": "sha512-ntymy489o0/QQplUDnpYAYUsO50K9SBrIVaKCWDOJzYJts0f9WH9RFJkyagebkw5+y1oi00R7ynNW/d12GBumg==", |
||||||
|
"requires": { |
||||||
|
"aproba": "^1.1.1" |
||||||
|
} |
||||||
|
}, |
||||||
|
"safe-buffer": { |
||||||
|
"version": "5.1.2", |
||||||
|
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", |
||||||
|
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" |
||||||
|
}, |
||||||
|
"schema-utils": { |
||||||
|
"version": "1.0.0", |
||||||
|
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", |
||||||
|
"integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", |
||||||
|
"requires": { |
||||||
|
"ajv": "^6.1.0", |
||||||
|
"ajv-errors": "^1.0.0", |
||||||
|
"ajv-keywords": "^3.1.0" |
||||||
|
} |
||||||
|
}, |
||||||
|
"semver": { |
||||||
|
"version": "5.7.1", |
||||||
|
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", |
||||||
|
"integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" |
||||||
|
}, |
||||||
|
"serialize-javascript": { |
||||||
|
"version": "1.9.1", |
||||||
|
"resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.9.1.tgz", |
||||||
|
"integrity": "sha512-0Vb/54WJ6k5v8sSWN09S0ora+Hnr+cX40r9F170nT+mSkaxltoE/7R3OrIdBSUv1OoiobH1QoWQbCnAO+e8J1A==" |
||||||
|
}, |
||||||
|
"slash": { |
||||||
|
"version": "1.0.0", |
||||||
|
"resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", |
||||||
|
"integrity": "sha512-3TYDR7xWt4dIqV2JauJr+EJeW356RXijHeUlO+8djJ+uBXPn8/2dpzBc8yQhh583sVvc9CvFAeQVgijsH+PNNg==" |
||||||
|
}, |
||||||
|
"ssri": { |
||||||
|
"version": "6.0.2", |
||||||
|
"resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", |
||||||
|
"integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", |
||||||
|
"requires": { |
||||||
|
"figgy-pudding": "^3.5.1" |
||||||
|
} |
||||||
|
}, |
||||||
|
"stream-each": { |
||||||
|
"version": "1.2.3", |
||||||
|
"resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", |
||||||
|
"integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", |
||||||
|
"requires": { |
||||||
|
"end-of-stream": "^1.1.0", |
||||||
|
"stream-shift": "^1.0.0" |
||||||
|
} |
||||||
|
}, |
||||||
|
"stream-shift": { |
||||||
|
"version": "1.0.1", |
||||||
|
"resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", |
||||||
|
"integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" |
||||||
|
}, |
||||||
|
"string_decoder": { |
||||||
|
"version": "1.1.1", |
||||||
|
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", |
||||||
|
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", |
||||||
|
"requires": { |
||||||
|
"safe-buffer": "~5.1.0" |
||||||
|
} |
||||||
|
}, |
||||||
|
"through2": { |
||||||
|
"version": "2.0.5", |
||||||
|
"resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", |
||||||
|
"integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", |
||||||
|
"requires": { |
||||||
|
"readable-stream": "~2.3.6", |
||||||
|
"xtend": "~4.0.1" |
||||||
|
} |
||||||
|
}, |
||||||
|
"typedarray": { |
||||||
|
"version": "0.0.6", |
||||||
|
"resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", |
||||||
|
"integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" |
||||||
|
}, |
||||||
|
"umtrack-wx": { |
||||||
|
"version": "2.8.0", |
||||||
|
"resolved": "https://registry.npmjs.org/umtrack-wx/-/umtrack-wx-2.8.0.tgz", |
||||||
|
"integrity": "sha512-F5ul+Q7bDJ6MDrn9ysPAyB9nyP1vCxLGUBkSJ4uvknt8rjmX4tqy1IUnJuWKj9ZH2BtkjRFpldQXJSlLDOYfhQ==" |
||||||
|
}, |
||||||
|
"unique-filename": { |
||||||
|
"version": "1.1.1", |
||||||
|
"resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", |
||||||
|
"integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", |
||||||
|
"requires": { |
||||||
|
"unique-slug": "^2.0.0" |
||||||
|
} |
||||||
|
}, |
||||||
|
"unique-slug": { |
||||||
|
"version": "2.0.2", |
||||||
|
"resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", |
||||||
|
"integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", |
||||||
|
"requires": { |
||||||
|
"imurmurhash": "^0.1.4" |
||||||
|
} |
||||||
|
}, |
||||||
|
"uri-js": { |
||||||
|
"version": "4.4.1", |
||||||
|
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", |
||||||
|
"integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", |
||||||
|
"requires": { |
||||||
|
"punycode": "^2.1.0" |
||||||
|
} |
||||||
|
}, |
||||||
|
"util-deprecate": { |
||||||
|
"version": "1.0.2", |
||||||
|
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", |
||||||
|
"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" |
||||||
|
}, |
||||||
|
"uuid": { |
||||||
|
"version": "3.4.0", |
||||||
|
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", |
||||||
|
"integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" |
||||||
|
}, |
||||||
|
"webpack-log": { |
||||||
|
"version": "2.0.0", |
||||||
|
"resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", |
||||||
|
"integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", |
||||||
|
"requires": { |
||||||
|
"ansi-colors": "^3.0.0", |
||||||
|
"uuid": "^3.3.2" |
||||||
|
} |
||||||
|
}, |
||||||
|
"wrappy": { |
||||||
|
"version": "1.0.2", |
||||||
|
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", |
||||||
|
"integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" |
||||||
|
}, |
||||||
|
"xtend": { |
||||||
|
"version": "4.0.2", |
||||||
|
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", |
||||||
|
"integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" |
||||||
|
}, |
||||||
|
"y18n": { |
||||||
|
"version": "4.0.3", |
||||||
|
"resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", |
||||||
|
"integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" |
||||||
|
}, |
||||||
|
"yallist": { |
||||||
|
"version": "3.1.1", |
||||||
|
"resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", |
||||||
|
"integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,16 @@ |
|||||||
|
{ |
||||||
|
"id": "filter-popup", |
||||||
|
"name": "筛选 菜单 筛选菜单 上拉筛选 ", |
||||||
|
"version": "1.0.4", |
||||||
|
"description": "筛选菜单,支持单选和多选 , 选择后的数据通过.sync双向绑定,全端支持 导入即用", |
||||||
|
"keywords": [ |
||||||
|
"筛选", |
||||||
|
"菜单", |
||||||
|
"筛选菜单", |
||||||
|
"上拉筛选" |
||||||
|
], |
||||||
|
"dependencies": { |
||||||
|
"copy-webpack-plugin": "^5.0.3", |
||||||
|
"umtrack-wx": "^2.8.0" |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,222 @@ |
|||||||
|
{ |
||||||
|
"pages": [ |
||||||
|
{ |
||||||
|
"path" : "pages/login/login", |
||||||
|
"style" : |
||||||
|
{ |
||||||
|
"navigationBarTitleText": "登录", |
||||||
|
"enablePullDownRefresh": false |
||||||
|
} |
||||||
|
}, |
||||||
|
{ |
||||||
|
"path" : "pages/index/index", |
||||||
|
"style" : |
||||||
|
{ |
||||||
|
"enablePullDownRefresh": false |
||||||
|
} |
||||||
|
}, |
||||||
|
{ |
||||||
|
"path" : "pages/supplier/supplier", |
||||||
|
"style" : |
||||||
|
{ |
||||||
|
"navigationBarTitleText": "供应商", |
||||||
|
"enablePullDownRefresh": false |
||||||
|
} |
||||||
|
}, |
||||||
|
{ |
||||||
|
"path" : "pages/shop/shop", |
||||||
|
"style" : |
||||||
|
{ |
||||||
|
"navigationBarTitleText": "商城", |
||||||
|
"enablePullDownRefresh": false |
||||||
|
} |
||||||
|
}, |
||||||
|
{ |
||||||
|
"path" : "pages/person/person", |
||||||
|
"style" : |
||||||
|
{ |
||||||
|
"navigationBarTitleText": "我的", |
||||||
|
"navigationStyle": "custom", |
||||||
|
"enablePullDownRefresh": false |
||||||
|
} |
||||||
|
} |
||||||
|
,{ |
||||||
|
"path" : "pages/reg/reg", |
||||||
|
"style" : |
||||||
|
{ |
||||||
|
"navigationBarTitleText": "", |
||||||
|
"enablePullDownRefresh": false |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
], |
||||||
|
"subPackages": [ |
||||||
|
{ |
||||||
|
"root": "order", |
||||||
|
"pages": [ |
||||||
|
{ |
||||||
|
"path" : "supplierDetail/supplierDetail", |
||||||
|
"style" : |
||||||
|
{ |
||||||
|
"navigationBarTitleText": "供应商详情", |
||||||
|
"enablePullDownRefresh": false |
||||||
|
} |
||||||
|
}, |
||||||
|
{ |
||||||
|
"path" : "activityDetail/activityDetail", |
||||||
|
"style" : |
||||||
|
{ |
||||||
|
"navigationBarTitleText" : "活动详情", |
||||||
|
"enablePullDownRefresh" : false |
||||||
|
} |
||||||
|
} |
||||||
|
] |
||||||
|
}, |
||||||
|
{ |
||||||
|
"root": "team", |
||||||
|
"pages": [ |
||||||
|
{ |
||||||
|
"path" : "setting/setting", |
||||||
|
"style" : |
||||||
|
{ |
||||||
|
"navigationBarTitleText": "设置", |
||||||
|
"enablePullDownRefresh": false |
||||||
|
} |
||||||
|
}, |
||||||
|
{ |
||||||
|
"path" : "password/password", |
||||||
|
"style" : |
||||||
|
{ |
||||||
|
"navigationBarTitleText": "修改密码", |
||||||
|
"enablePullDownRefresh": false |
||||||
|
} |
||||||
|
}, |
||||||
|
{ |
||||||
|
"path" : "teams/teams", |
||||||
|
"style" : |
||||||
|
{ |
||||||
|
"navigationBarTitleText": "团队", |
||||||
|
"enablePullDownRefresh": true |
||||||
|
} |
||||||
|
}, |
||||||
|
{ |
||||||
|
"path" : "addStaff/addStaff", |
||||||
|
"style" : |
||||||
|
{ |
||||||
|
"navigationBarTitleText": "邀请成员", |
||||||
|
"enablePullDownRefresh": false |
||||||
|
} |
||||||
|
}, |
||||||
|
{ |
||||||
|
"path" : "account/account", |
||||||
|
"style" : |
||||||
|
{ |
||||||
|
"navigationBarTitleText": "修改账号", |
||||||
|
"enablePullDownRefresh": false |
||||||
|
} |
||||||
|
} |
||||||
|
,{ |
||||||
|
"path" : "phone/phone", |
||||||
|
"style" : |
||||||
|
{ |
||||||
|
"navigationBarTitleText": "修改手机号", |
||||||
|
"enablePullDownRefresh": false |
||||||
|
} |
||||||
|
} |
||||||
|
,{ |
||||||
|
"path" : "email/email", |
||||||
|
"style" : |
||||||
|
{ |
||||||
|
"navigationBarTitleText": "修改邮箱", |
||||||
|
"enablePullDownRefresh": false |
||||||
|
} |
||||||
|
} |
||||||
|
,{ |
||||||
|
"path" : "qrcode/qrcode", |
||||||
|
"style" : |
||||||
|
{ |
||||||
|
"navigationBarTitleText": "邀请加入", |
||||||
|
"enablePullDownRefresh": false |
||||||
|
} |
||||||
|
} |
||||||
|
,{ |
||||||
|
"path" : "article/article", |
||||||
|
"style" : |
||||||
|
{ |
||||||
|
"navigationBarTitleText": "学习", |
||||||
|
"navigationBarTextStyle": "black", |
||||||
|
"navigationBarBackgroundColor": "#fff", |
||||||
|
"enablePullDownRefresh": false |
||||||
|
} |
||||||
|
} |
||||||
|
,{ |
||||||
|
"path" : "scheme/scheme", |
||||||
|
"style" : |
||||||
|
{ |
||||||
|
"navigationBarTitleText": "方案详情", |
||||||
|
"enablePullDownRefresh": false |
||||||
|
} |
||||||
|
}, |
||||||
|
{ |
||||||
|
"path" : "send/send", |
||||||
|
"style" : |
||||||
|
{ |
||||||
|
"navigationBarTitleText": "下载发送", |
||||||
|
"enablePullDownRefresh": false |
||||||
|
} |
||||||
|
} |
||||||
|
] |
||||||
|
} |
||||||
|
], |
||||||
|
"preloadRule": { |
||||||
|
"pages/index/index": { |
||||||
|
"network": "all", |
||||||
|
"packages": ["order"] |
||||||
|
} |
||||||
|
}, |
||||||
|
"condition": { //模式配置,仅开发期间生效 |
||||||
|
"current": 0, //当前激活的模式(list 的索引项) |
||||||
|
"list": [{ |
||||||
|
"name": "test", //模式名称 |
||||||
|
"path": "pages/login/login" //启动页面,必选 |
||||||
|
}] |
||||||
|
}, |
||||||
|
"globalStyle": { |
||||||
|
"navigationBarTextStyle": "white", |
||||||
|
"navigationBarTitleText": "幼教产业B2B产业平台", |
||||||
|
"navigationBarBackgroundColor": "#007EFF", |
||||||
|
"backgroundColor": "#f5f5f5", |
||||||
|
"app-plus": { |
||||||
|
"background": "#efeff4" |
||||||
|
} |
||||||
|
}, |
||||||
|
"tabBar": { |
||||||
|
"color": "#B8B9B8", |
||||||
|
"selectedColor": "#007FFF", |
||||||
|
"borderStyle": "white", |
||||||
|
"backgroundColor": "#ffffff", |
||||||
|
"fontSize": "22px", |
||||||
|
"iconWidth": "20px", |
||||||
|
"list": [{ |
||||||
|
"pagePath": "pages/index/index", |
||||||
|
"iconPath": "static/image/tab1.png", |
||||||
|
"selectedIconPath": "static/image/tab1-1.png", |
||||||
|
"text": "首页" |
||||||
|
}, { |
||||||
|
"pagePath": "pages/supplier/supplier", |
||||||
|
"iconPath": "static/image/tab2.png", |
||||||
|
"selectedIconPath": "static/image/tab2-1.png", |
||||||
|
"text": "供应商" |
||||||
|
},{ |
||||||
|
"pagePath": "pages/shop/shop", |
||||||
|
"iconPath": "static/image/tab3.png", |
||||||
|
"selectedIconPath": "static/image/tab3-1.png", |
||||||
|
"text": "商城" |
||||||
|
}, { |
||||||
|
"pagePath": "pages/person/person", |
||||||
|
"iconPath": "static/image/tab4.png", |
||||||
|
"selectedIconPath": "static/image/tab4-1.png", |
||||||
|
"text": "我的" |
||||||
|
}] |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,211 @@ |
|||||||
|
<template> |
||||||
|
<view :class="[{oh: !per}]"> |
||||||
|
<view class="page"> |
||||||
|
<view class="search-wrap"> |
||||||
|
<uni-search-bar class="search" radius="30" placeholder="请输入" v-model="keyword" clearButton="auto" cancelButton="none" @confirm="searchConfirm" /> |
||||||
|
<view> |
||||||
|
<uni-icons type="notification" size="20"></uni-icons> |
||||||
|
</view> |
||||||
|
</view> |
||||||
|
|
||||||
|
<view class="banner"> |
||||||
|
<image class="pic" src="@/static/image/index/banner.png" mode="widthFix"></image> |
||||||
|
</view> |
||||||
|
|
||||||
|
|
||||||
|
<view class="block"> |
||||||
|
<view class="title-wrap"> |
||||||
|
<view class="title">爆款推荐</view> |
||||||
|
</view> |
||||||
|
|
||||||
|
<image class="pic" src="@/static/image/info-bg.jpg" mode="widthFix"></image> |
||||||
|
</view> |
||||||
|
|
||||||
|
<view class="block"> |
||||||
|
<view class="title">活动速递</view> |
||||||
|
<ul class="tab"> |
||||||
|
<li v-for="(tab, i) in tabs" :class="{active: curTab === tab.id}" @click="tabChange(tab)">{{ tab.name }}</li> |
||||||
|
</ul> |
||||||
|
<view class="list"> |
||||||
|
<view v-for="(item, i) in hotProducts" :key="i" class="item" @click="toDetail(item)"> |
||||||
|
<image class="pic" src="@/static/image/info-bg.jpg"></image> |
||||||
|
<view class="texts"> |
||||||
|
<view class="name ell">{{ item.productName }}</view> |
||||||
|
<view class="des ell">{{ item.tagsName }}</view> |
||||||
|
<view class="meta">{{ item.marketUnitPrice }}元/年</view> |
||||||
|
</view> |
||||||
|
</view> |
||||||
|
</view> |
||||||
|
</view> |
||||||
|
</view> |
||||||
|
<view v-if="!per" class="per-mask">功能升级中,敬请期待...</view> |
||||||
|
</view> |
||||||
|
</template> |
||||||
|
|
||||||
|
<script> |
||||||
|
import { getUserRolesPermissionMenu } from '@/apis/modules/user.js' |
||||||
|
import { tagsList, listOfGoods, shoppingCartList } from '@/apis/modules/product.js' |
||||||
|
import { getTeamsByAccountId } from '@/apis/modules/client.js' |
||||||
|
export default { |
||||||
|
data() { |
||||||
|
return { |
||||||
|
per: true, // 是否有权限 |
||||||
|
teamId: uni.getStorageSync('teamId') || '', |
||||||
|
list: [], |
||||||
|
keyword: '', |
||||||
|
tags: [], |
||||||
|
hotProducts: [], |
||||||
|
offcialProducts: [], |
||||||
|
total: 0, |
||||||
|
curTab: 0, |
||||||
|
tabs: [ |
||||||
|
{ |
||||||
|
name: '全部', |
||||||
|
id: 0 |
||||||
|
}, |
||||||
|
{ |
||||||
|
name: '论坛', |
||||||
|
id: 1 |
||||||
|
} |
||||||
|
], |
||||||
|
} |
||||||
|
}, |
||||||
|
onShow() { |
||||||
|
this.keyword = '' |
||||||
|
this.per = true |
||||||
|
this.getProducts() |
||||||
|
}, |
||||||
|
methods: { |
||||||
|
// 初始化权限 |
||||||
|
initRole() { |
||||||
|
if (!uni.getStorageSync('auth').includes('首页')) { |
||||||
|
this.per = false |
||||||
|
} |
||||||
|
this.getProducts() |
||||||
|
}, |
||||||
|
// 产品 |
||||||
|
getProducts() { |
||||||
|
// 热销产品 |
||||||
|
listOfGoods({ |
||||||
|
pageNum: 1, |
||||||
|
pageSize: 5, |
||||||
|
sort: 1, |
||||||
|
isShelves: 0, |
||||||
|
hotTag: 1 |
||||||
|
}).then(({ page }) => { |
||||||
|
page.records.forEach(e => { |
||||||
|
e.productIntroduction = this.$util.removeTag(e.productIntroduction) |
||||||
|
}) |
||||||
|
this.hotProducts = page.records |
||||||
|
}).catch(e => {}) |
||||||
|
}, |
||||||
|
// 模糊查询回调 |
||||||
|
searchConfirm(e) { |
||||||
|
e.value && this.$util.to(`/order/products/products?keyword=${e.value}`) |
||||||
|
}, |
||||||
|
// 跳转学习详情 |
||||||
|
toDetail(item) { |
||||||
|
this.$util.to('/order/activityDetail/activityDetail?id=' + item.mallId) |
||||||
|
}, |
||||||
|
// tab切换 |
||||||
|
tabChange(tab) { |
||||||
|
this.curTab = tab.id |
||||||
|
// this.initList() |
||||||
|
}, |
||||||
|
} |
||||||
|
} |
||||||
|
</script> |
||||||
|
|
||||||
|
<style scoped lang="scss"> |
||||||
|
.page { |
||||||
|
position: relative; |
||||||
|
box-sizing: border-box; |
||||||
|
background-color: #fff; |
||||||
|
border-top-left-radius: 16px; |
||||||
|
border-top-right-radius: 16px; |
||||||
|
} |
||||||
|
.banner { |
||||||
|
position: relative; |
||||||
|
.pic { |
||||||
|
width: 100%; |
||||||
|
} |
||||||
|
} |
||||||
|
.search-wrap { |
||||||
|
display: flex; |
||||||
|
justify-content: space-between; |
||||||
|
align-items: center; |
||||||
|
padding: 0 10rpx; |
||||||
|
.search { |
||||||
|
flex: 1; |
||||||
|
} |
||||||
|
} |
||||||
|
.all { |
||||||
|
font-size: 24rpx; |
||||||
|
border-radius: 20px; |
||||||
|
} |
||||||
|
.block { |
||||||
|
margin: 20rpx 0; |
||||||
|
.title-wrap { |
||||||
|
display: flex; |
||||||
|
justify-content: space-between; |
||||||
|
margin-bottom: 34rpx; |
||||||
|
} |
||||||
|
.title { |
||||||
|
display: inline-flex; |
||||||
|
align-items: center; |
||||||
|
font-size: 28rpx; |
||||||
|
font-weight: 600; |
||||||
|
color: #333; |
||||||
|
} |
||||||
|
} |
||||||
|
.list { |
||||||
|
.item { |
||||||
|
display: flex; |
||||||
|
align-items: center; |
||||||
|
margin-bottom: 28rpx; |
||||||
|
} |
||||||
|
.pic { |
||||||
|
width: 220rpx; |
||||||
|
height: 140rpx; |
||||||
|
margin-right: 20rpx; |
||||||
|
border-radius: 8px; |
||||||
|
} |
||||||
|
.texts { |
||||||
|
width: calc(100% - 240rpx); |
||||||
|
} |
||||||
|
.name { |
||||||
|
font-size: 28rpx; |
||||||
|
font-weight: 600; |
||||||
|
color: #333; |
||||||
|
} |
||||||
|
.des { |
||||||
|
margin: 10rpx 0; |
||||||
|
font-size: 22rpx; |
||||||
|
color: #666; |
||||||
|
} |
||||||
|
.meta { |
||||||
|
display: flex; |
||||||
|
align-items: center; |
||||||
|
font-size: 24rpx; |
||||||
|
color: #2E2D31; |
||||||
|
.icon { |
||||||
|
width: 32rpx; |
||||||
|
height: 32rpx; |
||||||
|
margin-right: 12rpx; |
||||||
|
} |
||||||
|
text { |
||||||
|
width: 330rpx; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
.plus { |
||||||
|
bottom: 140rpx; |
||||||
|
right: 60rpx; |
||||||
|
.icon { |
||||||
|
width: 106rpx; |
||||||
|
} |
||||||
|
.uni-badge { |
||||||
|
font-size: 32rpx; |
||||||
|
} |
||||||
|
} |
||||||
|
</style> |
@ -0,0 +1,328 @@ |
|||||||
|
<template> |
||||||
|
<view class="page"> |
||||||
|
<view class="wrap"> |
||||||
|
<!-- <image class="logo" src="@/static/image/logo.png" mode="widthFix"></image> --> |
||||||
|
<view class="hello">幼教产业B2B产业平台登录</view> |
||||||
|
<template v-if="isLogin"> |
||||||
|
<button class="btn phone" open-type="getPhoneNumber" @getphonenumber="onGetPhoneNumber"> |
||||||
|
<image src="@/static/image/phone.png" mode="widthFix"></image> |
||||||
|
{{ isReg ? '获取手机号' : '绑定手机'}} |
||||||
|
</button> |
||||||
|
</template> |
||||||
|
<template v-else> |
||||||
|
<view class="btn wechat" @click="login"> |
||||||
|
快捷登录 |
||||||
|
</view> |
||||||
|
</template> |
||||||
|
<view class="tips">如果没有账号会自动创建账号</view> |
||||||
|
|
||||||
|
<view class="agree"> |
||||||
|
<uni-data-checkbox class="check" multiple v-model="agree" :localdata="agreeData"></uni-data-checkbox> |
||||||
|
<text @click="toAgreement(0)">《用户服务协议》</text> |
||||||
|
<text @click="toAgreement(1)">《用户隐私协议》</text> |
||||||
|
</view> |
||||||
|
</view> |
||||||
|
</view> |
||||||
|
</template> |
||||||
|
|
||||||
|
<script> |
||||||
|
import { login, userBinding, getSessionKey, queryPartnerAccount } from '@/apis/modules/user.js' |
||||||
|
import WXBizDataCrypt from '@/libs/WXBizDataCrypt' |
||||||
|
export default { |
||||||
|
data() { |
||||||
|
return { |
||||||
|
agree: [], |
||||||
|
agreeData: [{ |
||||||
|
text: '同意', |
||||||
|
value: 1 |
||||||
|
}], |
||||||
|
isLogin: false, // 是否已登录 |
||||||
|
isReg: false, // 是否是注册 |
||||||
|
sessionKey: '', |
||||||
|
openid: '', |
||||||
|
unionid: '', |
||||||
|
submiting: false |
||||||
|
} |
||||||
|
}, |
||||||
|
onShow() { |
||||||
|
// uni.setStorageSync('token', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1c2VyIiwiaWF0IjoxNjg2NzExNTA5LCJleHAiOjE2ODY3NTQ3MDksImFjY291bnRJZCI6IjEyNTU4In0.SX1sNFtb2JiCufgTz3ZmQkcJ-FtVci7Hp0DFd_mVk8E') |
||||||
|
// 先授权用户信息,再授权手机号 |
||||||
|
this.checkLogin() |
||||||
|
}, |
||||||
|
methods: { |
||||||
|
// 检查登录状态 |
||||||
|
checkLogin() { |
||||||
|
if (uni.getStorageSync('token')) { |
||||||
|
this.toIndex() |
||||||
|
} else { |
||||||
|
uni.clearStorageSync() |
||||||
|
this.isLogin = false |
||||||
|
} |
||||||
|
}, |
||||||
|
// 授权用户信息 |
||||||
|
login() { |
||||||
|
this.isReg = false |
||||||
|
if (this.agree.length) { |
||||||
|
if (this.submiting) return false |
||||||
|
const that = this |
||||||
|
uni.getUserProfile({ |
||||||
|
lang: 'zh_CN', |
||||||
|
desc: '登录', |
||||||
|
success: ({ userInfo }) => { |
||||||
|
uni.setStorageSync('userName', userInfo.nickName) |
||||||
|
uni.setStorageSync('avatar', userInfo.avatarUrl) |
||||||
|
uni.login({ |
||||||
|
success: ({ code }) => { |
||||||
|
if (code) { |
||||||
|
this.submiting = true |
||||||
|
login({ |
||||||
|
code, |
||||||
|
avatarUrl: userInfo.avatarUrl |
||||||
|
}).then((res) => { |
||||||
|
const { data, status } = res |
||||||
|
this.submiting = false |
||||||
|
// 用户不存在,则让用户授权手机号,直接去注册 |
||||||
|
if (status == 10028) { |
||||||
|
// 这里需要再调一次uni的login,因为code用过了一次,已经失效了 |
||||||
|
uni.login({ |
||||||
|
success: ({ code }) => { |
||||||
|
getSessionKey({ |
||||||
|
code, |
||||||
|
}).then(({ sessionKey }) => { |
||||||
|
this.sessionKey = sessionKey.session_key |
||||||
|
this.openid = sessionKey.openid |
||||||
|
this.isLogin = true |
||||||
|
}).catch(e => {}) |
||||||
|
this.isReg = true |
||||||
|
} |
||||||
|
}) |
||||||
|
} else { |
||||||
|
const e = data.sessionKey |
||||||
|
this.sessionKey = e.session_key |
||||||
|
this.openid = e.openid |
||||||
|
this.unionid = e.unionid |
||||||
|
uni.setStorageSync('sessionKey', e.session_key) |
||||||
|
uni.setStorageSync('openid', e.openid) |
||||||
|
// 如果没有绑定手机号,则显示绑定按钮,引导用户绑定,否则,直接跳到首页 |
||||||
|
if (data.state === 'login') { |
||||||
|
this.toIndex() |
||||||
|
uni.setStorageSync('token', data.token) |
||||||
|
} else { |
||||||
|
this.isLogin = true |
||||||
|
} |
||||||
|
} |
||||||
|
}).catch(e => { |
||||||
|
this.submiting = false |
||||||
|
}) |
||||||
|
} else { |
||||||
|
this.submiting = false |
||||||
|
that.$util.errMsg('登录失败!') |
||||||
|
} |
||||||
|
} |
||||||
|
}) |
||||||
|
}, |
||||||
|
fail(res) { |
||||||
|
that.$util.errMsg('登录授权失败!') |
||||||
|
} |
||||||
|
}) |
||||||
|
} else { |
||||||
|
this.$util.errMsg('请先阅读勾选协议!') |
||||||
|
} |
||||||
|
}, |
||||||
|
// 绑定手机号 |
||||||
|
onGetPhoneNumber(e){ |
||||||
|
if (this.submiting) return false |
||||||
|
const { encryptedData, iv } = e.detail |
||||||
|
// 获取手机号有两种方法,1.前端使用js完成;2.使用接口完成 |
||||||
|
// const WXBizDataCrypt = require('@/libs/WXBizDataCrypt') |
||||||
|
const accountInfo = uni.getAccountInfoSync() // 获取小程序appid |
||||||
|
const pc = new WXBizDataCrypt(accountInfo.miniProgram.appId , this.sessionKey) |
||||||
|
const data = pc.decryptData(encryptedData , iv) |
||||||
|
this.submiting = true |
||||||
|
const phone = data.phoneNumber |
||||||
|
if (this.isReg) { // 注册 |
||||||
|
this.$util.to(`../reg/reg?openid=${this.openid}&phone=${phone}`) |
||||||
|
} else { // 登录绑定手机号 |
||||||
|
userBinding({ |
||||||
|
openid: this.openid, |
||||||
|
phone, |
||||||
|
unionid: this.unionid, |
||||||
|
platformId: 4 |
||||||
|
}).then(res => { |
||||||
|
const { token, status } = res |
||||||
|
if (status == 10014) { |
||||||
|
// 这里需要再调一次uni的login,因为code用过了一次,已经失效了 |
||||||
|
uni.login({ |
||||||
|
success: ({ code }) => { |
||||||
|
getSessionKey({ |
||||||
|
code, |
||||||
|
}).then(({ sessionKey }) => { |
||||||
|
this.sessionKey = sessionKey.session_key |
||||||
|
this.openid = sessionKey.openid |
||||||
|
this.$util.to(`../reg/reg?openid=${this.openid}&phone=${phone}`) |
||||||
|
}).catch(e => {}) |
||||||
|
this.isReg = true |
||||||
|
} |
||||||
|
}) |
||||||
|
} else { |
||||||
|
this.submiting = false |
||||||
|
uni.setStorageSync('token', token) |
||||||
|
this.toIndex() |
||||||
|
} |
||||||
|
}).catch(e => { |
||||||
|
this.submiting = false |
||||||
|
uni.showToast({ |
||||||
|
title: e.message, |
||||||
|
icon: 'none' |
||||||
|
}) |
||||||
|
}) |
||||||
|
} |
||||||
|
}, |
||||||
|
// 注册申请授权 |
||||||
|
toReg() { |
||||||
|
this.isReg = true |
||||||
|
if (this.agree.length) { |
||||||
|
const that = this |
||||||
|
uni.getUserProfile({ |
||||||
|
lang: 'zh_CN', |
||||||
|
desc: '登录', |
||||||
|
success: ({ userInfo }) => { |
||||||
|
console.log(22, userInfo) |
||||||
|
uni.setStorageSync('userName', userInfo.nickName) |
||||||
|
uni.setStorageSync('avatar', userInfo.avatarUrl) |
||||||
|
uni.login({ |
||||||
|
success: ({ code }) => { |
||||||
|
if (code) { |
||||||
|
this.submiting = true |
||||||
|
getSessionKey({ |
||||||
|
code, |
||||||
|
}).then(({ sessionKey }) => { |
||||||
|
console.log(11, sessionKey) |
||||||
|
this.sessionKey = sessionKey.session_key |
||||||
|
this.openid = sessionKey.openid |
||||||
|
this.submiting = false |
||||||
|
this.isLogin = true |
||||||
|
|
||||||
|
}).catch(e => { |
||||||
|
this.submiting = false |
||||||
|
}) |
||||||
|
} else { |
||||||
|
this.submiting = false |
||||||
|
that.$util.errMsg('登录失败!') |
||||||
|
} |
||||||
|
} |
||||||
|
}) |
||||||
|
}, |
||||||
|
fail(res) { |
||||||
|
that.$util.errMsg('登录授权失败!') |
||||||
|
} |
||||||
|
}) |
||||||
|
} else { |
||||||
|
this.$util.errMsg('请先阅读勾选协议!') |
||||||
|
} |
||||||
|
}, |
||||||
|
toAgreement(id) { |
||||||
|
this.$util.openFile(id) |
||||||
|
}, |
||||||
|
// 跳转到首页 |
||||||
|
toIndex() { |
||||||
|
uni.reLaunch({ |
||||||
|
url: '../index/index' |
||||||
|
}) |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
</script> |
||||||
|
|
||||||
|
<style scoped lang="scss"> |
||||||
|
.page { |
||||||
|
min-height: calc(100vh - 170rpx); |
||||||
|
padding-top: 170rpx; |
||||||
|
background: url(@/static/image/login1.png) 0 0/175rpx auto no-repeat, |
||||||
|
url(@/static/image/login2.png) bottom right/123rpx auto no-repeat; |
||||||
|
overflow: hidden; |
||||||
|
} |
||||||
|
.wrap { |
||||||
|
position: relative; |
||||||
|
height: 60vh; |
||||||
|
padding: 214rpx 74rpx 28rpx; |
||||||
|
margin: 0 61rpx; |
||||||
|
text-align: center; |
||||||
|
background-color: #fff; |
||||||
|
border-radius: 20rpx; |
||||||
|
.logo { |
||||||
|
width: 393rpx; |
||||||
|
} |
||||||
|
.hello { |
||||||
|
margin: 36rpx 0; |
||||||
|
font-size: 28rpx; |
||||||
|
color: #333; |
||||||
|
} |
||||||
|
.tips { |
||||||
|
margin-top: 30rpx; |
||||||
|
font-size: 24rpx; |
||||||
|
color: #adadad; |
||||||
|
text-align: right; |
||||||
|
} |
||||||
|
.btn { |
||||||
|
display: flex; |
||||||
|
justify-content: center; |
||||||
|
align-items: center; |
||||||
|
width: 100%; |
||||||
|
height: 88rpx; |
||||||
|
font-size: 32rpx; |
||||||
|
border-radius: 10rpx; |
||||||
|
image { |
||||||
|
width: 50rpx; |
||||||
|
margin-right: 15rpx; |
||||||
|
} |
||||||
|
} |
||||||
|
.wechat { |
||||||
|
margin-bottom: 38rpx; |
||||||
|
color: #fff; |
||||||
|
background-color: #007EFF; |
||||||
|
} |
||||||
|
.phone { |
||||||
|
color: #007EFF; |
||||||
|
border: 1px solid #007EFF; |
||||||
|
background-color: #fff; |
||||||
|
image { |
||||||
|
width: 40rpx; |
||||||
|
} |
||||||
|
} |
||||||
|
.reg { |
||||||
|
font-size: 28rpx; |
||||||
|
color: #e61717; |
||||||
|
text-align: right; |
||||||
|
} |
||||||
|
.agree { |
||||||
|
position: absolute; |
||||||
|
bottom: 28rpx; |
||||||
|
left: 0%; |
||||||
|
display: flex; |
||||||
|
justify-content: center; |
||||||
|
align-items: center; |
||||||
|
width: 100%; |
||||||
|
text-align: center; |
||||||
|
font-size: 24rpx; |
||||||
|
color: #ccc; |
||||||
|
text { |
||||||
|
color: #007EFF; |
||||||
|
} |
||||||
|
} |
||||||
|
/deep/.check { |
||||||
|
.checklist-box { |
||||||
|
margin: 0; |
||||||
|
} |
||||||
|
.checkbox__inner { |
||||||
|
width: 40rpx !important; |
||||||
|
height: 40rpx !important; |
||||||
|
border-radius: 50% !important; |
||||||
|
} |
||||||
|
.checkbox__inner-icon { |
||||||
|
top: 8rpx !important; |
||||||
|
left: 14rpx !important; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
</style> |
@ -0,0 +1,406 @@ |
|||||||
|
<template> |
||||||
|
<view class="page"> |
||||||
|
<view class="status-bar"></view> |
||||||
|
<image class="bg" src="@/static/image/person-bg.png"></image> |
||||||
|
<view class="wrap"> |
||||||
|
<view class="info"> |
||||||
|
<button class="avatar-btn" open-type="chooseAvatar" @chooseavatar="onChooseAvatar"> |
||||||
|
<image class="avatar" :src="avatar" mode=""></image> |
||||||
|
</button> |
||||||
|
<view class="text"> |
||||||
|
<view class="name">{{ my.info.userName }}</view> |
||||||
|
<view class="phone">{{ my.info.phone }}</view> |
||||||
|
</view> |
||||||
|
<view v-if="!disabled" class="tag">团队负责人</view> |
||||||
|
</view> |
||||||
|
|
||||||
|
<view class="block"> |
||||||
|
<view class="title">基础功能</view> |
||||||
|
|
||||||
|
<ul class="func"> |
||||||
|
<li v-for="(item, i) in funcs" :key="i" @click="toFunc(item)"> |
||||||
|
<view class="icon"> |
||||||
|
<image src="@/static/image/info-bg.jpg"></image> |
||||||
|
</view> |
||||||
|
<view class="text ell">{{ item.name }}</view> |
||||||
|
</li> |
||||||
|
</ul> |
||||||
|
</view> |
||||||
|
|
||||||
|
<view class="block"> |
||||||
|
<view class="supplier"> |
||||||
|
<view class="title">我是供应商</view> |
||||||
|
<view class="badge">供应商负责人</view> |
||||||
|
<view class="auth">未认证</view> |
||||||
|
</view> |
||||||
|
</view> |
||||||
|
|
||||||
|
|
||||||
|
<view class="block"> |
||||||
|
<view class="title">工作台</view> |
||||||
|
|
||||||
|
<ul class="func"> |
||||||
|
<li v-for="(item, i) in funcs" :key="i" @click="toFunc(item)"> |
||||||
|
<view class="icon"> |
||||||
|
<image src="@/static/image/info-bg.jpg"></image> |
||||||
|
</view> |
||||||
|
<view class="text ell">{{ item.name }}</view> |
||||||
|
</li> |
||||||
|
</ul> |
||||||
|
</view> |
||||||
|
|
||||||
|
<view class="list"> |
||||||
|
<view v-if="auth('我的:设置')" class="item" @click="toSet"> |
||||||
|
<view class="left"> |
||||||
|
<image class="icon" src="@/static/image/person3.png" mode=""></image> |
||||||
|
<text class="name">设置</text> |
||||||
|
</view> |
||||||
|
</view> |
||||||
|
</view> |
||||||
|
</view> |
||||||
|
<view v-if="!per" class="per-mask">功能升级中,敬请期待...</view> |
||||||
|
</view> |
||||||
|
</template> |
||||||
|
|
||||||
|
<script> |
||||||
|
import { my, editProvinceCity } from '@/apis/modules/parner.js' |
||||||
|
import { queryProvince, queryCity, updateAvatars, getUserRolesPermissionMenu } from '@/apis/modules/user.js' |
||||||
|
import { getTeamsByAccountId } from '@/apis/modules/client.js' |
||||||
|
export default { |
||||||
|
data() { |
||||||
|
return { |
||||||
|
per: true, // 是否有权限 |
||||||
|
teamId: uni.getStorageSync('teamId') || '', |
||||||
|
teams: [], |
||||||
|
my: { |
||||||
|
info: { |
||||||
|
phone: '' |
||||||
|
}, |
||||||
|
teamInfo: { |
||||||
|
annualMarketingFee: '', |
||||||
|
annualTeamFee: '', |
||||||
|
}, |
||||||
|
myIncome: 0, |
||||||
|
teamIncome: 0 |
||||||
|
}, |
||||||
|
avatar: uni.getStorageSync('avatar') || '@/static/image/avatar.png', |
||||||
|
userName: uni.getStorageSync('userName'), |
||||||
|
hasOwnTeam: 0, // 有自己的团队 |
||||||
|
disabled: true, |
||||||
|
provinces: [], |
||||||
|
cities: [], |
||||||
|
provinceIcon: { |
||||||
|
color: '#007eff', |
||||||
|
size: '22', |
||||||
|
type: 'location' |
||||||
|
}, |
||||||
|
cityIcon: { |
||||||
|
color: '#007eff', |
||||||
|
size: '22', |
||||||
|
type: 'map-pin-ellipse' |
||||||
|
}, |
||||||
|
provinceId: '', |
||||||
|
cityId: '', |
||||||
|
provinceName: '', |
||||||
|
cityName: '', |
||||||
|
funcs: [ |
||||||
|
{ |
||||||
|
id: 1, |
||||||
|
name: '我的电子券' |
||||||
|
}, |
||||||
|
{ |
||||||
|
id: 2, |
||||||
|
name: '已报名活动' |
||||||
|
}, |
||||||
|
] |
||||||
|
} |
||||||
|
}, |
||||||
|
onShow() { |
||||||
|
this.per = true |
||||||
|
this.getTeam() |
||||||
|
}, |
||||||
|
methods: { |
||||||
|
// 初始化权限 |
||||||
|
initRole() { |
||||||
|
if (!uni.getStorageSync('auth').includes('我的')) { |
||||||
|
this.per = false |
||||||
|
} else { |
||||||
|
this.getInfo() |
||||||
|
} |
||||||
|
}, |
||||||
|
// 查询当前角色权限 |
||||||
|
getAuth() { |
||||||
|
uni.showLoading({ |
||||||
|
title: '加载中' |
||||||
|
}) |
||||||
|
getUserRolesPermissionMenu({ |
||||||
|
teamId: this.teams.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.initRole() |
||||||
|
}).catch(e => { |
||||||
|
uni.hideLoading() |
||||||
|
uni.setStorageSync('auth', []) |
||||||
|
this.initRole() |
||||||
|
}) |
||||||
|
}, |
||||||
|
// 获取团队 |
||||||
|
getTeam() { |
||||||
|
uni.showLoading({ |
||||||
|
title: '加载中' |
||||||
|
}) |
||||||
|
getTeamsByAccountId().then(({ data }) => { |
||||||
|
let hasOwnTeam = 0 // 是否有自己的团队 |
||||||
|
data.map(e => { |
||||||
|
const n = e.partnerClassificationList |
||||||
|
e.id = n.id |
||||||
|
// parnerId是商务经理id,teamId则是下面这个,其他地方要用的话直接uni.getStorageSync('team').partnerId去使用 |
||||||
|
e.teamId = e.isTeam == 1 ? +e.partnerClassificationId : n.id |
||||||
|
e.partnerClassificationName = n.partnerClassificationName |
||||||
|
delete e.partnerClassificationList |
||||||
|
if (e.isTeam == 1) hasOwnTeam = 1 |
||||||
|
}) |
||||||
|
this.hasOwnTeam = hasOwnTeam |
||||||
|
const teamId = uni.getStorageSync('teamId') |
||||||
|
if (data.length) { |
||||||
|
/** |
||||||
|
* @description 如果是第一次进,则默认选中第一个团队,并把该团队的信息存入缓存 |
||||||
|
* 或者团队列表里没有该id,则说明超管已经被转让,也需要重新选中团队 |
||||||
|
*/ |
||||||
|
const curTeam = data.find(e => e.teamId == teamId) |
||||||
|
if (teamId && curTeam) { |
||||||
|
uni.setStorageSync('team', curTeam) |
||||||
|
} else if (!uni.getStorageSync('team') || !curTeam) { |
||||||
|
this.teamId = data[0].teamId |
||||||
|
uni.setStorageSync('teamId', data[0].teamId) |
||||||
|
uni.setStorageSync('team', data[0]) |
||||||
|
} |
||||||
|
} else { |
||||||
|
// 如果没有团队,则退出登录 |
||||||
|
uni.hideLoading() |
||||||
|
uni.clearStorageSync() |
||||||
|
uni.navigateTo({ |
||||||
|
url: '../login/login' |
||||||
|
}) |
||||||
|
} |
||||||
|
this.disabled = uni.getStorageSync('team').isTeam == 0 // 成员不能改省份城市 |
||||||
|
this.teams = data |
||||||
|
this.getAuth() |
||||||
|
}).catch(e => { |
||||||
|
uni.hideLoading() |
||||||
|
}) |
||||||
|
}, |
||||||
|
// 获取个人信息 |
||||||
|
getInfo() { |
||||||
|
const { partnerId, teamId } = uni.getStorageSync('team') |
||||||
|
my({ |
||||||
|
partnerId, |
||||||
|
teamId |
||||||
|
}).then(({ my }) => { |
||||||
|
this.my = my |
||||||
|
const avatar = my.info.userAvatars || 'https://cube.elemecdn.com/3/7c/3ea6beec64369c2642b92c6726f1epng.png' |
||||||
|
this.avatar = avatar |
||||||
|
uni.setStorageSync('avatar', avatar) |
||||||
|
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 => {}) |
||||||
|
}, |
||||||
|
// 上传头像回调 |
||||||
|
onChooseAvatar(e) { |
||||||
|
uni.uploadFile({ |
||||||
|
url: 'https://huorantech.cn/nakadai/nakadai/oss/fileUpload', |
||||||
|
filePath: e.detail.avatarUrl, |
||||||
|
name: 'file', |
||||||
|
header: { |
||||||
|
token: uni.getStorageSync('token'), |
||||||
|
}, |
||||||
|
formData: {}, |
||||||
|
success: ({ data }) => { |
||||||
|
updateAvatars(JSON.parse(data).filesResult.fileUrl).then(res => { |
||||||
|
this.getInfo() |
||||||
|
}).catch(e => {}) |
||||||
|
} |
||||||
|
}) |
||||||
|
}, |
||||||
|
// 创建自己的团队 |
||||||
|
createTeam() { |
||||||
|
this.$util.to(`../reg/reg?openid=${uni.getStorageSync('openid')}&phone=${this.my.info.phone}&my=1`) |
||||||
|
}, |
||||||
|
// 进入设置 |
||||||
|
toSet() { |
||||||
|
this.$util.to(`/team/setting/setting`) |
||||||
|
}, |
||||||
|
toFunc(item) { |
||||||
|
|
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
</script> |
||||||
|
|
||||||
|
<style scoped lang="scss"> |
||||||
|
.bg { |
||||||
|
width: 100%; |
||||||
|
height: calc(var(--status-bar-height) + 317rpx); |
||||||
|
} |
||||||
|
.wrap { |
||||||
|
position: relative; |
||||||
|
padding: 0 24rpx; |
||||||
|
margin-top: -150rpx; |
||||||
|
} |
||||||
|
.block { |
||||||
|
padding: 24rpx; |
||||||
|
margin-left: 0; |
||||||
|
margin-right: 0; |
||||||
|
.title { |
||||||
|
margin-bottom: 20rpx; |
||||||
|
font-size: 28rpx; |
||||||
|
font-weight: 600; |
||||||
|
} |
||||||
|
} |
||||||
|
.info { |
||||||
|
display: flex; |
||||||
|
align-items: center; |
||||||
|
padding: 26rpx 34rpx; |
||||||
|
background-color: #fff; |
||||||
|
border-radius: 16rpx; |
||||||
|
.avatar-btn { |
||||||
|
padding: 0; |
||||||
|
margin: 0 28rpx 0 0; |
||||||
|
line-height: 0; |
||||||
|
border: 0 !important; |
||||||
|
background-color: transparent; |
||||||
|
outline: none; |
||||||
|
border-radius: 50%; |
||||||
|
} |
||||||
|
.avatar { |
||||||
|
width: 120rpx; |
||||||
|
height: 120rpx; |
||||||
|
border: 0; |
||||||
|
} |
||||||
|
.text { |
||||||
|
margin-right: 20rpx; |
||||||
|
} |
||||||
|
.name { |
||||||
|
margin-bottom: 10rpx; |
||||||
|
font-size: 40rpx; |
||||||
|
color: #333; |
||||||
|
} |
||||||
|
.phone { |
||||||
|
font-size: 28rpx; |
||||||
|
color: #333; |
||||||
|
} |
||||||
|
.tag { |
||||||
|
padding: 8rpx 16rpx; |
||||||
|
margin-top: -50rpx; |
||||||
|
font-size: 24rpx; |
||||||
|
color: #fff; |
||||||
|
background-color: #2979ff; |
||||||
|
border-radius: 20px; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
.func { |
||||||
|
display: flex; |
||||||
|
flex-wrap: wrap; |
||||||
|
li { |
||||||
|
width: 25%; |
||||||
|
margin-bottom: 24rpx; |
||||||
|
text-align: center; |
||||||
|
&:last-child { |
||||||
|
image { |
||||||
|
width: 50rpx; |
||||||
|
height: 50rpx; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
.icon { |
||||||
|
display: flex; |
||||||
|
justify-content: center; |
||||||
|
align-items: center; |
||||||
|
width: 90rpx; |
||||||
|
height: 90rpx; |
||||||
|
margin: 0 auto 18rpx; |
||||||
|
background-color: rgb(228,239,255); |
||||||
|
border-radius: 50%; |
||||||
|
} |
||||||
|
image { |
||||||
|
width: 60rpx; |
||||||
|
height: 60rpx; |
||||||
|
} |
||||||
|
.text { |
||||||
|
width: 165rpx; |
||||||
|
margin: 0 auto; |
||||||
|
font-size: 24rpx; |
||||||
|
color: #333; |
||||||
|
} |
||||||
|
} |
||||||
|
.supplier { |
||||||
|
display: flex; |
||||||
|
justify-content: space-between; |
||||||
|
align-items: center; |
||||||
|
.title { |
||||||
|
margin-bottom: 0; |
||||||
|
} |
||||||
|
.badge { |
||||||
|
padding: 8rpx 16rpx; |
||||||
|
font-size: 24rpx; |
||||||
|
color: #fff; |
||||||
|
background-color: #37cc07; |
||||||
|
border-radius: 10px; |
||||||
|
} |
||||||
|
.auth { |
||||||
|
font-size: 24rpx; |
||||||
|
color: #9c9c9c; |
||||||
|
} |
||||||
|
} |
||||||
|
.list { |
||||||
|
margin-top: 16rpx; |
||||||
|
.item { |
||||||
|
display: flex; |
||||||
|
justify-content: space-between; |
||||||
|
align-items: center; |
||||||
|
padding: 26rpx 28rpx; |
||||||
|
margin-bottom: 16rpx; |
||||||
|
background-color: #fff; |
||||||
|
border-radius: 16rpx; |
||||||
|
} |
||||||
|
.left { |
||||||
|
display: inline-flex; |
||||||
|
align-items: center; |
||||||
|
} |
||||||
|
.icon { |
||||||
|
width: 40rpx; |
||||||
|
height: 40rpx; |
||||||
|
margin-right: 16rpx; |
||||||
|
} |
||||||
|
text { |
||||||
|
font-size: 28rpx; |
||||||
|
color: #333; |
||||||
|
} |
||||||
|
} |
||||||
|
.location { |
||||||
|
margin-top: 30rpx; |
||||||
|
} |
||||||
|
.picker-wrap { |
||||||
|
margin-top: 4px; |
||||||
|
} |
||||||
|
.name { |
||||||
|
font-size: 24rpx; |
||||||
|
} |
||||||
|
</style> |
@ -0,0 +1,187 @@ |
|||||||
|
<template> |
||||||
|
<view class="page"> |
||||||
|
<image class="logo" src="@/static/image/logo.png" mode="widthFix"></image> |
||||||
|
<view class="wrap"> |
||||||
|
<view class="hello"> |
||||||
|
{{ form.isTeam ? '或然科技城市合伙人,欢迎回来!' : form.isTeam === 0 ? '请认真填写您的姓名和意向开展业务的区域。创建成功后,我们将会有区域运营与您联系沟通后续事宜。' : '欢迎加入或然城市合伙人计划!请认真填写您的姓名和意向开展业务的区域。注册后,我们将会有区域运营与您联系沟通后续事宜。'}} |
||||||
|
</view> |
||||||
|
<view> |
||||||
|
<uni-forms> |
||||||
|
<uni-forms-item label="姓名"> |
||||||
|
<uni-easyinput type="text" v-model="form.userName" placeholder="请输入姓名" :disabled="exist" /> |
||||||
|
</uni-forms-item> |
||||||
|
<uni-forms-item label="业务省份"> |
||||||
|
<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="业务城市"> |
||||||
|
<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 @click="back">取消</button> |
||||||
|
</view> |
||||||
|
</view> |
||||||
|
</view> |
||||||
|
</view> |
||||||
|
</template> |
||||||
|
|
||||||
|
<script> |
||||||
|
import { queryPartnerAccount, queryProvince, queryCity, partnerAccountApplication, loginByOpenid, checkWorkNumOrAccount } from '@/apis/modules/user.js' |
||||||
|
export default { |
||||||
|
data() { |
||||||
|
return { |
||||||
|
openid: '', |
||||||
|
phone: '', |
||||||
|
my: false, |
||||||
|
form: { |
||||||
|
userName: '', |
||||||
|
provinceId: '', |
||||||
|
cityId: '', |
||||||
|
}, |
||||||
|
accountRepeat: false, |
||||||
|
provinces: [], |
||||||
|
cities: [], |
||||||
|
exist: false |
||||||
|
} |
||||||
|
}, |
||||||
|
onShow() { |
||||||
|
const pages = getCurrentPages() |
||||||
|
const { options } = pages[pages.length - 1] |
||||||
|
this.openid = options.openid |
||||||
|
this.phone = options.phone |
||||||
|
this.my = options.my |
||||||
|
this.getProvince() |
||||||
|
this.checkLogin() |
||||||
|
}, |
||||||
|
methods: { |
||||||
|
// 检查登录状态 |
||||||
|
checkLogin() { |
||||||
|
// 根据手机号获取是否注册过,如果有,则判断是否是队长(isTeam 1:队长,0:成员),如果没有返回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.isTeam = 0 |
||||||
|
if (team.userName) this.form.userName = team.userName |
||||||
|
} |
||||||
|
} else if (username) { // 没有团队,只有username |
||||||
|
this.form.userName = username |
||||||
|
} |
||||||
|
}).catch(e => {}) |
||||||
|
}, |
||||||
|
// 获取省份 |
||||||
|
getProvince() { |
||||||
|
queryProvince().then(({ list }) => { |
||||||
|
this.provinces = list |
||||||
|
}).catch(res => {}) |
||||||
|
}, |
||||||
|
// 获取城市 |
||||||
|
getCity(val) { |
||||||
|
if (this.form.provinceId) { |
||||||
|
queryCity({ |
||||||
|
provinceId: this.form.provinceId |
||||||
|
}).then(({ list }) => { |
||||||
|
this.cities = list |
||||||
|
}).catch(res => {}) |
||||||
|
} else { |
||||||
|
this.cities = [] |
||||||
|
} |
||||||
|
if (val) this.form.cityId = '' |
||||||
|
}, |
||||||
|
// 提交 |
||||||
|
submit() { |
||||||
|
const { form } = this |
||||||
|
if (!form.userName) return this.$util.errMsg('请输入姓名!') |
||||||
|
if (!form.provinceId) return this.$util.errMsg('请选择意向省份!') |
||||||
|
if (!form.cityId) return this.$util.errMsg('请选择意向城市!') |
||||||
|
form.phone = this.phone |
||||||
|
form.appOpenId = this.openid |
||||||
|
form.uniqueIdentification = Date.now() |
||||||
|
if (form.isTeam) { // 队长,直接登录 |
||||||
|
loginByOpenid(this.openid).then(({ data }) => { |
||||||
|
uni.setStorageSync('token', data.token) |
||||||
|
this.toIndex() |
||||||
|
}).catch(res => {}) |
||||||
|
} else { // 新用户,注册。or 成员,创建自己的团队 |
||||||
|
partnerAccountApplication(form).then(({ token, teamId }) => { |
||||||
|
this.$util.sucMsg(form.isTeam === 0 ? '创建成功' : '注册成功') |
||||||
|
// 如果返回了token,直接登录,并且把teamId存在缓存里,到了首页后直接选中该团队 |
||||||
|
if (token) { |
||||||
|
teamId && uni.setStorageSync('teamId', teamId) |
||||||
|
uni.setStorageSync('token', token) |
||||||
|
setTimeout(() => { |
||||||
|
this.toIndex() |
||||||
|
}, 1500) |
||||||
|
} else { |
||||||
|
setTimeout(() => { |
||||||
|
uni.redirectTo({ |
||||||
|
url: '../login/login' |
||||||
|
}) |
||||||
|
}, 1500) |
||||||
|
} |
||||||
|
}).catch(res => {}) |
||||||
|
} |
||||||
|
}, |
||||||
|
// 跳转到首页 |
||||||
|
toIndex() { |
||||||
|
uni.reLaunch({ |
||||||
|
url: this.my ? '../person/person' : '../index/index' |
||||||
|
}) |
||||||
|
}, |
||||||
|
// 返回 |
||||||
|
back() { |
||||||
|
uni.navigateBack() |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
</script> |
||||||
|
|
||||||
|
<style scoped lang="scss"> |
||||||
|
.page { |
||||||
|
min-height: 100%; |
||||||
|
text-align: center; |
||||||
|
background: url(@/static/image/login1.png) 0 0/175rpx auto no-repeat, |
||||||
|
url(@/static/image/login2.png) bottom right/123rpx auto no-repeat; |
||||||
|
.logo { |
||||||
|
width: 393rpx; |
||||||
|
margin: 100rpx 0 60rpx; |
||||||
|
} |
||||||
|
} |
||||||
|
.wrap { |
||||||
|
position: relative; |
||||||
|
padding: 60rpx; |
||||||
|
margin: 0 61rpx; |
||||||
|
text-align: center; |
||||||
|
border-radius: 8rpx; |
||||||
|
background-color: #fff; |
||||||
|
.hello { |
||||||
|
margin-bottom: 30rpx; |
||||||
|
font-size: 28rpx; |
||||||
|
color: #333; |
||||||
|
} |
||||||
|
.btns { |
||||||
|
display: flex; |
||||||
|
button { |
||||||
|
width: 200rpx; |
||||||
|
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> |
@ -0,0 +1,25 @@ |
|||||||
|
<template> |
||||||
|
<view class="oh"> |
||||||
|
<view class="per-mask">功能升级中,敬请期待...</view> |
||||||
|
</view> |
||||||
|
</template> |
||||||
|
|
||||||
|
<script> |
||||||
|
export default { |
||||||
|
data() { |
||||||
|
return { |
||||||
|
per: true, // 是否有权限 |
||||||
|
} |
||||||
|
}, |
||||||
|
onShow() { |
||||||
|
|
||||||
|
}, |
||||||
|
methods: { |
||||||
|
|
||||||
|
} |
||||||
|
} |
||||||
|
</script> |
||||||
|
|
||||||
|
<style scoped lang="scss"> |
||||||
|
|
||||||
|
</style> |
@ -0,0 +1,281 @@ |
|||||||
|
<template> |
||||||
|
<view :class="[{oh: !per}]"> |
||||||
|
<view class="page"> |
||||||
|
<view class="search-wrap"> |
||||||
|
<uni-search-bar class="search" radius="30" placeholder="请输入" v-model="keyword" clearButton="auto" cancelButton="none" @confirm="searchConfirm" /> |
||||||
|
</view> |
||||||
|
|
||||||
|
<view class="banner"> |
||||||
|
<image class="pic" src="@/static/image/index/banner.png" mode="widthFix"></image> |
||||||
|
</view> |
||||||
|
|
||||||
|
<ul class="tab"> |
||||||
|
<li v-for="(tab, i) in tabs" :class="{active: curTab === tab.id}" @click="tabChange(tab)">{{ tab.name }}</li> |
||||||
|
</ul> |
||||||
|
<view class="list"> |
||||||
|
<li v-for="(item, i) in list" :key="i" @click="toDetail(item)"> |
||||||
|
<view class="pro-name"> |
||||||
|
<image class="icon" src="@/static/image/info-bg.jpg"></image> |
||||||
|
{{ item.productName }} |
||||||
|
</view> |
||||||
|
<view class="info"> |
||||||
|
<view class="line"> |
||||||
|
<text class="name">产品简介:</text> |
||||||
|
<view class="val ell-wrap"> |
||||||
|
<view class="ell">{{ item.productIntroduction }}</view> |
||||||
|
</view> |
||||||
|
</view> |
||||||
|
<view class="line"> |
||||||
|
<text class="name">产品类型:</text> |
||||||
|
<text class="val">{{ item.typeName }}</text> |
||||||
|
</view> |
||||||
|
</view> |
||||||
|
</li> |
||||||
|
</view> |
||||||
|
</view> |
||||||
|
<view v-if="!per" class="per-mask">功能升级中,敬请期待...</view> |
||||||
|
</view> |
||||||
|
</template> |
||||||
|
|
||||||
|
<script> |
||||||
|
import { getUserRolesPermissionMenu } from '@/apis/modules/user.js' |
||||||
|
import { tagsList, listOfGoods, shoppingCartList } from '@/apis/modules/product.js' |
||||||
|
import { getTeamsByAccountId } from '@/apis/modules/client.js' |
||||||
|
export default { |
||||||
|
data() { |
||||||
|
return { |
||||||
|
per: true, // 是否有权限 |
||||||
|
teamId: uni.getStorageSync('teamId') || '', |
||||||
|
list: [], |
||||||
|
keyword: '', |
||||||
|
tags: [], |
||||||
|
hotProducts: [], |
||||||
|
offcialProducts: [], |
||||||
|
total: 0, |
||||||
|
curTab: 0, |
||||||
|
tabs: [ |
||||||
|
{ |
||||||
|
name: '全部', |
||||||
|
id: 0 |
||||||
|
}, |
||||||
|
{ |
||||||
|
name: '论坛', |
||||||
|
id: 1 |
||||||
|
} |
||||||
|
], |
||||||
|
} |
||||||
|
}, |
||||||
|
onShow() { |
||||||
|
this.keyword = '' |
||||||
|
this.per = true |
||||||
|
this.getInfo() |
||||||
|
this.getShopCart() |
||||||
|
}, |
||||||
|
methods: { |
||||||
|
// 初始化权限 |
||||||
|
initRole() { |
||||||
|
if (!uni.getStorageSync('auth').includes('首页')) { |
||||||
|
this.per = false |
||||||
|
} |
||||||
|
this.getTags() |
||||||
|
this.getProducts() |
||||||
|
}, |
||||||
|
// 查询当前角色权限 |
||||||
|
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 |
||||||
|
// parnerId是商务经理id,teamId则是下面这个,其他地方要用的话直接uni.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 => {}) |
||||||
|
}, |
||||||
|
// 获取购物车数量 |
||||||
|
getShopCart() { |
||||||
|
shoppingCartList({ |
||||||
|
pageNum: 1, |
||||||
|
pageSize: 1000, |
||||||
|
}).then(({ data }) => { |
||||||
|
this.total = data.total |
||||||
|
}).catch(e => {}) |
||||||
|
}, |
||||||
|
// 产品 |
||||||
|
getProducts() { |
||||||
|
// 热销产品 |
||||||
|
listOfGoods({ |
||||||
|
pageNum: 1, |
||||||
|
pageSize: 5, |
||||||
|
sort: 1, |
||||||
|
isShelves: 0, |
||||||
|
hotTag: 1 |
||||||
|
}).then(({ page }) => { |
||||||
|
page.records.forEach(e => { |
||||||
|
e.productIntroduction = this.$util.removeTag(e.productIntroduction) |
||||||
|
}) |
||||||
|
this.hotProducts = page.records |
||||||
|
}).catch(e => {}) |
||||||
|
|
||||||
|
// 官方推荐 |
||||||
|
listOfGoods({ |
||||||
|
pageNum: 1, |
||||||
|
pageSize: 5, |
||||||
|
sort: 0, |
||||||
|
isShelves: 0, |
||||||
|
hotTag: 1, |
||||||
|
selection: 1 |
||||||
|
}).then(({ page }) => { |
||||||
|
page.records.forEach(e => { |
||||||
|
e.productIntroduction = this.$util.removeTag(e.productIntroduction) |
||||||
|
}) |
||||||
|
this.offcialProducts = page.records |
||||||
|
}).catch(e => {}) |
||||||
|
}, |
||||||
|
// 模糊查询回调 |
||||||
|
searchConfirm(e) { |
||||||
|
e.value && this.$util.to(`/order/products/products?keyword=${e.value}`) |
||||||
|
}, |
||||||
|
// 跳转热门标签 |
||||||
|
toHot(item) { |
||||||
|
this.$util.to(`/order/products/products?tagId=${item.tagsId}&tagsName=${item.tagsName}`) |
||||||
|
}, |
||||||
|
// 跳转学习 |
||||||
|
toProduct() { |
||||||
|
this.$util.to('/order/products/products') |
||||||
|
}, |
||||||
|
// 跳转学习详情 |
||||||
|
toDetail(item) { |
||||||
|
this.$util.to('/order/supplierDetail/supplierDetail?id=') |
||||||
|
}, |
||||||
|
// tab切换 |
||||||
|
tabChange(tab) { |
||||||
|
this.curTab = tab.id |
||||||
|
// this.initList() |
||||||
|
}, |
||||||
|
} |
||||||
|
} |
||||||
|
</script> |
||||||
|
|
||||||
|
<style scoped lang="scss"> |
||||||
|
.banner { |
||||||
|
position: relative; |
||||||
|
.pic { |
||||||
|
width: 100%; |
||||||
|
} |
||||||
|
} |
||||||
|
.list { |
||||||
|
li { |
||||||
|
padding: 24rpx; |
||||||
|
margin: 16rpx 24rpx; |
||||||
|
background-color: #fff; |
||||||
|
border-radius: 16rpx; |
||||||
|
} |
||||||
|
.pro-name { |
||||||
|
display: flex; |
||||||
|
align-items: center; |
||||||
|
padding: 18rpx 0; |
||||||
|
font-size: 30rpx; |
||||||
|
font-weight: 600; |
||||||
|
color: #333; |
||||||
|
border-bottom: 1px solid #E6E8ED; |
||||||
|
.icon { |
||||||
|
width: 58rpx; |
||||||
|
min-width: 58rpx; |
||||||
|
height: 58rpx; |
||||||
|
margin-right: 20rpx; |
||||||
|
border-radius: 4px; |
||||||
|
} |
||||||
|
} |
||||||
|
.info { |
||||||
|
padding: 12rpx 0; |
||||||
|
} |
||||||
|
.line { |
||||||
|
display: flex; |
||||||
|
padding: 12rpx 0; |
||||||
|
} |
||||||
|
.name { |
||||||
|
margin-right: 10rpx; |
||||||
|
font-size: 28rpx; |
||||||
|
color: #999; |
||||||
|
} |
||||||
|
.val { |
||||||
|
max-width: 70%; |
||||||
|
font-size: 28rpx; |
||||||
|
color: #333; |
||||||
|
} |
||||||
|
.ell-wrap { |
||||||
|
display: inline-flex; |
||||||
|
align-items: center; |
||||||
|
} |
||||||
|
.ell { |
||||||
|
white-space: nowrap; |
||||||
|
text-overflow: ellipsis; |
||||||
|
overflow: hidden; |
||||||
|
} |
||||||
|
.toggle { |
||||||
|
margin-left: 10rpx; |
||||||
|
white-space: nowrap; |
||||||
|
font-size: 24rpx; |
||||||
|
color: #0e92ef; |
||||||
|
} |
||||||
|
} |
||||||
|
</style> |
@ -0,0 +1,32 @@ |
|||||||
|
@font-face { |
||||||
|
font-family: "iconfont";
src: url('/static/iconfont/iconfont.ttf') format('truetype'); |
||||||
|
} |
||||||
|
|
||||||
|
.iconfont { |
||||||
|
font-family: "iconfont" !important; |
||||||
|
font-size: 16px; |
||||||
|
font-style: normal; |
||||||
|
-webkit-font-smoothing: antialiased; |
||||||
|
-moz-osx-font-smoothing: grayscale; |
||||||
|
} |
||||||
|
|
||||||
|
.icon-qrcode:before { |
||||||
|
content: "\e7dd"; |
||||||
|
} |
||||||
|
|
||||||
|
.icon-dingdan:before { |
||||||
|
content: "\e601"; |
||||||
|
} |
||||||
|
|
||||||
|
.icon-product:before { |
||||||
|
content: "\e788"; |
||||||
|
} |
||||||
|
|
||||||
|
.icon-edit:before { |
||||||
|
content: "\e621"; |
||||||
|
} |
||||||
|
|
||||||
|
.icon-filter:before { |
||||||
|
content: "\e6b9"; |
||||||
|
} |
||||||
|
|
After Width: | Height: | Size: 257 B |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 775 B |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 599 B |
After Width: | Height: | Size: 439 B |
After Width: | Height: | Size: 1.0 KiB |
After Width: | Height: | Size: 518 B |
After Width: | Height: | Size: 522 B |
After Width: | Height: | Size: 25 KiB |
After Width: | Height: | Size: 21 KiB |
After Width: | Height: | Size: 21 KiB |
After Width: | Height: | Size: 28 KiB |
After Width: | Height: | Size: 9.0 KiB |
After Width: | Height: | Size: 4.5 KiB |
After Width: | Height: | Size: 9.7 KiB |
After Width: | Height: | Size: 3.0 KiB |
After Width: | Height: | Size: 7.5 KiB |
After Width: | Height: | Size: 26 KiB |
After Width: | Height: | Size: 528 B |
After Width: | Height: | Size: 620 B |
After Width: | Height: | Size: 382 B |
After Width: | Height: | Size: 537 B |
After Width: | Height: | Size: 514 B |
After Width: | Height: | Size: 689 B |
After Width: | Height: | Size: 519 B |
After Width: | Height: | Size: 457 B |
After Width: | Height: | Size: 270 B |
After Width: | Height: | Size: 734 B |
After Width: | Height: | Size: 372 B |
After Width: | Height: | Size: 302 B |
After Width: | Height: | Size: 3.5 KiB |
After Width: | Height: | Size: 483 B |
After Width: | Height: | Size: 434 B |
After Width: | Height: | Size: 298 B |
After Width: | Height: | Size: 351 B |
After Width: | Height: | Size: 641 B |
After Width: | Height: | Size: 251 B |
After Width: | Height: | Size: 480 B |
After Width: | Height: | Size: 440 B |
After Width: | Height: | Size: 347 B |
After Width: | Height: | Size: 1007 B |
After Width: | Height: | Size: 510 B |
After Width: | Height: | Size: 502 B |
After Width: | Height: | Size: 325 B |
After Width: | Height: | Size: 282 B |
After Width: | Height: | Size: 48 KiB |
After Width: | Height: | Size: 368 B |
After Width: | Height: | Size: 218 B |
After Width: | Height: | Size: 223 B |
After Width: | Height: | Size: 372 B |
After Width: | Height: | Size: 195 B |
After Width: | Height: | Size: 331 B |
After Width: | Height: | Size: 222 B |
After Width: | Height: | Size: 410 B |
After Width: | Height: | Size: 373 B |
After Width: | Height: | Size: 197 B |