feat: 登录上传头像+协议添加
This commit is contained in:
parent
c25e4ed02c
commit
b58c6f2a67
10
api/user.js
10
api/user.js
@ -1,4 +1,6 @@
|
||||
import request from '@/utils/request'
|
||||
import {httpRequest} from '@/utils/request/axios'
|
||||
const baseUrl = 'https://api.1024api.com/api-interface/app'
|
||||
|
||||
// api地址
|
||||
const api = {
|
||||
@ -32,3 +34,11 @@ export const bindMobile = (data, option) => {
|
||||
export const personal = (data, option) => {
|
||||
return request.post(api.personal, data, option)
|
||||
}
|
||||
|
||||
// 修改个人信息(头像昵称)
|
||||
export const apiUpdateUserInfo = (data) => {
|
||||
return httpRequest.post(
|
||||
`${baseUrl}/buyer/info/update`,
|
||||
data
|
||||
);
|
||||
}
|
||||
|
||||
@ -138,6 +138,7 @@
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.diy-goods {
|
||||
padding: 20rpx;
|
||||
// 解决 margin-bottom: -10px 导致的容器异常
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
12
pages.json
12
pages.json
@ -107,6 +107,18 @@
|
||||
"navigationBarTitleText": "帮助中心"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/agreement/index",
|
||||
"style": {
|
||||
"navigationBarTitleText": "相关协议"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/agreement/detail",
|
||||
"style": {
|
||||
"navigationBarTitleText": "协议详情"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/coupon/index",
|
||||
"style": {
|
||||
|
||||
1
pages/agreement/activity.js
Normal file
1
pages/agreement/activity.js
Normal file
@ -0,0 +1 @@
|
||||
export default `<p><br></p><p>限时秒杀、平台补贴、加价购、满额赠</p><p>限时秒杀、加价购⋯</p><p>限时秒杀、加价购、满额赠、限时专享价</p><p>活动说明</p><p>一、参与对象</p><p>“限时秒杀”、”满额赠”:邀约制,由随机获得邀请的用户参与,未收到邀请的用户暂无法参与。</p><p>“限时专享价”:活动期间通过推广链接搜索进入购de着的用户可享受该活动价格。</p><p>二、活动时间</p><p>“限时秒杀”、”加价购”、”满额赠”、 “限时专享价”等促销活动将不定期开展,具体以购de着小程序实际展示活动时间和参与活动的城市为准。</p><p>三、活动价格</p><p>相同商品在不同的“限时秒杀”、“加价购”、“满额赠”、”限时专享价“等活动下可能会出现不同的价格,具体以购de着小程序展示的为准。</p><p>四、特别说明</p><p>1.因不同的访问或查找商品方式的经营成本、促销活动等不同,购de着在不同的方式下展示的商品价格、服务费用、活动等均有可能出现不一致的情况, 用户可以自主选择喜欢的方式获取商品进行下单或参与活动等(不同方式包括但不限于通过搜索查找商品、在购de着小程序端频道页查找商品等)。</p><p>2.参与促销活动的部分商品存在限量购买、不能与优惠券共同使用等限制,具体以购de着小程序的购物车或实际结算页面展示为准。</p><p>3.促销活动过程中,用户不得使用任何外挂、插件以及其他破坏活动规则、违背活动公平原则的方式参加本次活动(如批量注册、恶意退款、虚假分享、倒买倒卖、虚假交易等),用户不得进行有组织的众包作弊行为,否则购de着有权取消用户参与活动资格,或者对部分商品采取限购、禁售等动作,必要时购de着还会取消用户后续参与购de着任意活动的权利或者冻结购de着,并追究法律责任。</p><p>4.促销活动过程中,若出现因网络攻击、黑客攻击、 数据泄露、自然灾害等原因导致活动无法继续,购de着有权暂停或提前终止活动。</p><p>5.如对相关促销活动有任何疑问,用户可进入购de着小程序”我的“-”联系客服”咨询反馈,或拨打客服热线18458195149。</p>`
|
||||
1
pages/agreement/appPermission.js
Normal file
1
pages/agreement/appPermission.js
Normal file
File diff suppressed because one or more lines are too long
113
pages/agreement/content.js
Normal file
113
pages/agreement/content.js
Normal file
@ -0,0 +1,113 @@
|
||||
// 协议内容模板
|
||||
export const agreementContent = {
|
||||
// 用户协议
|
||||
'user': `
|
||||
<h2>用户协议</h2>
|
||||
<p>欢迎使用本应用。在使用本应用前,请您仔细阅读本用户协议。当您注册、登录、使用本应用时,即表示您已阅读、理解并同意接受本协议的全部内容。</p>
|
||||
|
||||
<h3>一、服务条款的接受</h3>
|
||||
<p>本服务条款是您与我们之间关于使用本服务的法律协议。通过使用本服务,您同意遵守本条款的所有规定。</p>
|
||||
|
||||
<h3>二、服务说明</h3>
|
||||
<p>我们向您提供包括但不限于以下服务:</p>
|
||||
<p>1. 商品展示与浏览服务</p>
|
||||
<p>2. 商品购买与交易服务</p>
|
||||
<p>3. 用户账户管理服务</p>
|
||||
<p>4. 其他相关服务</p>
|
||||
|
||||
<h3>三、用户账户</h3>
|
||||
<p>您在使用本服务时,需要注册一个账户。您应当保证账户信息的真实性、准确性和完整性。您对账户的所有活动负责。</p>
|
||||
|
||||
<h3>四、用户行为规范</h3>
|
||||
<p>您在使用本服务时,应当遵守相关法律法规,不得利用本服务从事违法违规活动。</p>
|
||||
|
||||
<h3>五、隐私保护</h3>
|
||||
<p>我们非常重视您的隐私保护,具体内容请参见《隐私政策》。</p>
|
||||
|
||||
<h3>六、免责声明</h3>
|
||||
<p>在法律允许的范围内,我们对因使用或无法使用本服务而产生的任何损害不承担责任。</p>
|
||||
|
||||
<h3>七、协议修改</h3>
|
||||
<p>我们保留随时修改本协议的权利,修改后的协议将在本应用上公布后立即生效。</p>
|
||||
|
||||
<h3>八、联系我们</h3>
|
||||
<p>如果您对本协议有任何疑问,请联系我们的客服。</p>
|
||||
`,
|
||||
|
||||
// 隐私政策
|
||||
'privacy': `
|
||||
<h2>隐私政策</h2>
|
||||
<p>我们非常重视您的隐私保护。本隐私政策说明了我们如何收集、使用、存储和保护您的个人信息。</p>
|
||||
|
||||
<h3>一、信息收集</h3>
|
||||
<p>我们可能收集以下信息:</p>
|
||||
<p>1. 您主动提供的信息:包括但不限于姓名、手机号、地址等</p>
|
||||
<p>2. 自动收集的信息:包括但不限于设备信息、日志信息、位置信息等</p>
|
||||
|
||||
<h3>二、信息使用</h3>
|
||||
<p>我们使用收集的信息用于:</p>
|
||||
<p>1. 提供、维护和改进我们的服务</p>
|
||||
<p>2. 处理您的订单和交易</p>
|
||||
<p>3. 向您发送服务通知</p>
|
||||
<p>4. 进行数据分析,改善用户体验</p>
|
||||
|
||||
<h3>三、信息存储</h3>
|
||||
<p>我们会采取合理的安全措施保护您的个人信息,防止信息泄露、丢失或滥用。</p>
|
||||
|
||||
<h3>四、信息共享</h3>
|
||||
<p>我们不会向第三方出售、出租或以其他方式披露您的个人信息,除非:</p>
|
||||
<p>1. 获得您的明确同意</p>
|
||||
<p>2. 法律法规要求</p>
|
||||
<p>3. 为提供服务所必需</p>
|
||||
|
||||
<h3>五、您的权利</h3>
|
||||
<p>您有权:</p>
|
||||
<p>1. 访问、更正您的个人信息</p>
|
||||
<p>2. 删除您的个人信息</p>
|
||||
<p>3. 撤回您的同意</p>
|
||||
|
||||
<h3>六、未成年人保护</h3>
|
||||
<p>我们非常重视未成年人的个人信息保护。如果您是未成年人,请在监护人同意和指导下使用我们的服务。</p>
|
||||
|
||||
<h3>七、政策更新</h3>
|
||||
<p>我们可能会不时更新本隐私政策。更新后的政策将在本应用上公布。</p>
|
||||
`,
|
||||
|
||||
// 服务条款
|
||||
'service': `
|
||||
<h2>服务条款</h2>
|
||||
<p>本服务条款是您与我们之间关于使用本服务的法律协议。通过使用本服务,您同意遵守本条款的所有规定。</p>
|
||||
|
||||
<h3>一、服务内容</h3>
|
||||
<p>我们为您提供在线购物平台服务,包括商品展示、订单管理、支付处理等功能。</p>
|
||||
|
||||
<h3>二、用户责任</h3>
|
||||
<p>您在使用本服务时,应当:</p>
|
||||
<p>1. 遵守相关法律法规</p>
|
||||
<p>2. 提供真实、准确的信息</p>
|
||||
<p>3. 妥善保管账户信息</p>
|
||||
<p>4. 不得利用本服务从事违法违规活动</p>
|
||||
|
||||
<h3>三、商品信息</h3>
|
||||
<p>我们努力确保商品信息的准确性,但不对商品信息的绝对准确性做出保证。</p>
|
||||
|
||||
<h3>四、价格与支付</h3>
|
||||
<p>商品价格以页面显示为准。我们保留调整价格的权利。您可以通过我们提供的支付方式完成支付。</p>
|
||||
|
||||
<h3>五、订单处理</h3>
|
||||
<p>订单提交后,我们将尽快处理。如遇特殊情况,我们可能会延迟或取消订单。</p>
|
||||
|
||||
<h3>六、退换货政策</h3>
|
||||
<p>退换货政策请参见相关页面说明。我们会在符合条件的情况下为您办理退换货。</p>
|
||||
|
||||
<h3>七、知识产权</h3>
|
||||
<p>本服务中的所有内容,包括但不限于文字、图片、商标等,均受知识产权法保护。</p>
|
||||
|
||||
<h3>八、免责声明</h3>
|
||||
<p>在法律允许的范围内,我们对因使用或无法使用本服务而产生的任何损害不承担责任。</p>
|
||||
|
||||
<h3>九、争议解决</h3>
|
||||
<p>因本服务条款引起的争议,双方应友好协商解决;协商不成的,提交有管辖权的人民法院解决。</p>
|
||||
`
|
||||
}
|
||||
|
||||
1
pages/agreement/delivery.js
Normal file
1
pages/agreement/delivery.js
Normal file
@ -0,0 +1 @@
|
||||
export default `<p><br></p><p><br></p><p>购de着配送规则</p><p><br></p><p>更新日期:2023年11月30日</p><p><br></p><p>生效日期:2023年12月8日</p><p><br></p><p><strong>请您理解、同意并遵守以下配送服务相关规则:</strong></p><p><br></p><p>1.为了让您的商品及时准确送达、品质得到保证,<strong>您应准确填写收货人真实姓名、收货地址及联系方式等配送信息,请您理解并授权购de着将您订单中的配送信息粘贴在商品外包装上;</strong>购de着提醒您收到商品后立即销毁外包装上的个人信息。</p><p><br></p><p>2.配送费用(如有)具体由:基础配送费、超重费、 夜间配送费、恶劣天气配送费等组成。最终收取的金额会因为订单重量、订单距离、预计配送时间、天气情况等因素不同而不同。因此,您实际所需支付的费用,会因线下具体站点服务、商品金额、商品重量、 配送时间、配送地点、天气情况等因素的不同而有所差异,具体金额将以您提交订单时购de着平台所显示的所需支付费用为准。</p><p><br></p><p>3.您的订单生成后可在购de着平台相关页面查看商品预计送达时间,预计送达时间系根据库存状况、配货流程、送货地点等因素由系统估算生成;<strong>预计送达时间为参考时间,并不作为购de着对您做出关于配送到达时间的承诺。如遇以下情况造成订单配送延迟或无法配送,购de着不承担配送延迟或无法配送的责任:</strong></p><p><br></p><p>(1) 用户提供的配送信息有误或不详细等原因导致的;</p><p>(2)商品送达后无人接收等原因导致的;</p><p>(3) 根据用户指示,商品放置于代收地点或其他室外地点的;</p><p>(4)用户拒收的;</p><p>(5)因节假日、大型促销活动、店庆、预购或抢购人数众多等原因导致的;</p><p>(6)恶劣天气、自然灾害、交通管制等多种外界不可抗力因素导致的。</p>`
|
||||
106
pages/agreement/detail.vue
Normal file
106
pages/agreement/detail.vue
Normal file
@ -0,0 +1,106 @@
|
||||
<template>
|
||||
<view class="container b-f p-b">
|
||||
<view class="agreement-content" v-if="content">
|
||||
<mp-html :content="content" />
|
||||
</view>
|
||||
<view class="empty" v-else>
|
||||
<text>协议内容不存在</text>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import service from './service'
|
||||
import appPermission from './appPermission'
|
||||
import activity from './activity'
|
||||
import minor from './minor'
|
||||
import privacy from './privacy'
|
||||
import review from './review'
|
||||
import refund from './refund'
|
||||
import delivery from './delivery'
|
||||
import getByMyself from './getByMyself'
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
// 协议ID
|
||||
agreementId: null,
|
||||
// 协议内容
|
||||
content: '',
|
||||
agreementContent: {
|
||||
service: service,
|
||||
appPermission: appPermission,
|
||||
activity: activity,
|
||||
minor: minor,
|
||||
privacy: privacy,
|
||||
review: review,
|
||||
refund: refund,
|
||||
delivery: delivery,
|
||||
getByMyself: getByMyself,
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面加载
|
||||
*/
|
||||
onLoad(options) {
|
||||
// 获取协议ID
|
||||
this.agreementId = options.id
|
||||
// 加载协议内容
|
||||
this.loadAgreementContent()
|
||||
},
|
||||
|
||||
methods: {
|
||||
// 加载协议内容
|
||||
loadAgreementContent() {
|
||||
if (!this.agreementId) {
|
||||
return
|
||||
}
|
||||
// 根据ID匹配协议内容
|
||||
this.content = this.agreementContent[this.agreementId] || ''
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.container {
|
||||
padding: 30rpx;
|
||||
min-height: 100vh;
|
||||
}
|
||||
|
||||
.agreement-content {
|
||||
font-size: 28rpx;
|
||||
line-height: 1.8;
|
||||
color: #333;
|
||||
|
||||
h2 {
|
||||
font-size: 36rpx;
|
||||
font-weight: bold;
|
||||
margin: 30rpx 0 20rpx;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-size: 32rpx;
|
||||
font-weight: bold;
|
||||
margin: 24rpx 0 16rpx;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
p {
|
||||
font-size: 28rpx;
|
||||
line-height: 1.8;
|
||||
margin: 12rpx 0;
|
||||
color: #666;
|
||||
}
|
||||
}
|
||||
|
||||
.empty {
|
||||
text-align: center;
|
||||
padding: 100rpx 0;
|
||||
color: #999;
|
||||
font-size: 28rpx;
|
||||
}
|
||||
</style>
|
||||
1
pages/agreement/getByMyself.ts
Normal file
1
pages/agreement/getByMyself.ts
Normal file
File diff suppressed because one or more lines are too long
96
pages/agreement/index.vue
Normal file
96
pages/agreement/index.vue
Normal file
@ -0,0 +1,96 @@
|
||||
<template>
|
||||
<view class="container">
|
||||
<view class="agreement-item cont-box b-f" v-for="(item, index) in list" :key="index" @click="handleItemClick(item.id)">
|
||||
<view class="title">
|
||||
<text>{{ item.title }}</text>
|
||||
</view>
|
||||
<view class="arrow">
|
||||
<text class="iconfont icon-arrow-right"></text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
// 协议列表数据(写死)
|
||||
list: [
|
||||
{
|
||||
id: 'privacy',
|
||||
title: '隐私政策'
|
||||
},
|
||||
{
|
||||
id: 'service',
|
||||
title: '用户服务条款'
|
||||
},
|
||||
{
|
||||
id: 'getByMyself',
|
||||
title: '自提服务协议'
|
||||
},
|
||||
{
|
||||
id: 'delivery',
|
||||
title: '配送规则'
|
||||
},
|
||||
{
|
||||
id: 'refund',
|
||||
title: '退换货政策'
|
||||
},
|
||||
{
|
||||
id: 'activity',
|
||||
title: '限时秒杀、平台补贴、加价购、满额赠'
|
||||
},
|
||||
{
|
||||
id: 'minor',
|
||||
title: '未成年人个人信息保护'
|
||||
},
|
||||
{
|
||||
id: 'review',
|
||||
title: '评价管理规范'
|
||||
},
|
||||
{
|
||||
id: 'privacy',
|
||||
title: '隐私政策'
|
||||
},
|
||||
{
|
||||
id: 'appPermission',
|
||||
title: '应用权限说明'
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面加载
|
||||
*/
|
||||
onLoad(options) {},
|
||||
|
||||
methods: {
|
||||
// 点击协议项,跳转到详情页
|
||||
handleItemClick(id) {
|
||||
this.$navTo('pages/agreement/detail', { id })
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.agreement-item {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
padding: 30rpx;
|
||||
border-bottom: 1rpx solid #f6f6f9;
|
||||
|
||||
.title {
|
||||
font-size: 32rpx;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.arrow {
|
||||
color: #999;
|
||||
font-size: 28rpx;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
1
pages/agreement/minor.js
Normal file
1
pages/agreement/minor.js
Normal file
File diff suppressed because one or more lines are too long
1
pages/agreement/privacy.js
Normal file
1
pages/agreement/privacy.js
Normal file
File diff suppressed because one or more lines are too long
1
pages/agreement/refund.js
Normal file
1
pages/agreement/refund.js
Normal file
@ -0,0 +1 @@
|
||||
export default `<p><br></p><p><br></p><p><strong>购de着退换货政策</strong></p><p><br></p><p>更新日期:【2023】年【11】月【30】日</p><p><br></p><p>生效日期:【2023】 年【12】月【8】日</p><p><br></p><p>【特别提示】请您在使用购de着(以下称“我们“) 提供的各项产品/服务前,仔细阅读并充分理解本 《退换货政策》(下称“本政策“)并做出相应选择 (<strong>重点内容已将字体加粗请您特别关注</strong>)。一旦您通过购de着平台下单购买我们的商品,即意味着您同意本政策。</p><p><br></p><p><strong>一、验货与签收</strong></p><p>1、为保障您的权益,请您在收到商品时与配送员当场核对,核对范围包括但不限于:商品种类、规格、 数量(包括商品最小包装单位)、金额、赠品、外包装、标识、票据、防伪码等是否与订单一致,商品表面质量及性状是否有问题等。</p><p>2、如果您在验货时发现商品存在上述问题,您可与客服联络或拒收商品,并将商品交由配送员带回。</p><p>3、如订单商品确认无误,您可进行签收。<strong>若您的订单商品交由他人代收,代收人享有与您同等权利,我们将视为您本人签收。</strong></p><p>4、部分商品因商品特征以及现有科技水平限制,无法实现与您实际下单重量完全一致,会存在微小误差,因此,如您实际收到的商品重量小于您下单时选择的重量,我们将为您自动退差,如您实际收到的商品重量超过您下单时选择的重量,我们将按照您下单时选择的重量与您结算,具体请查看订单信息。</p><p><br></p><p><strong>二、退换货细则</strong></p><p>1、除本政策另有约定外,如满足以下条件,则您可以在收到商品后7日内申请无理由退货:</p><p>(1)申请退货的商品及赠品(如有)本身及包装无损坏;</p><p>(2)申请退货的商品及赠品数量不缺少;</p><p>(3)不影响我们二次销售。</p><p>2、如您发现商品存在质量问题,可随时联系客服申请退换货。但以下情况不属于质量问题: </p><p>(1)由于受季节、气候、生长环境等因素影响,不同批次略有差异属正常现象,不属质量问题;</p><p>(2)由于商品特殊性、拍摄灯光及不同显示器色差等问题可能造成宣传图片与实物有一定差异,不属质量问题,我们尽最大努力确保购de着平台的宣传图片与实物的一致性。</p><p><br></p><p><strong>3、以下情形,除存在商品质量问题外,我们不提供退换货服务:</strong></p><p>(1)定作商品;</p><p>(2) 加工商品;</p><p>(3)临期特卖、瑕疵降价、特价促销等商品;</p><p>(4)因您使用或保管不当导致出现质量问题的商品;</p><p>(5)一经激活或者试用后价值贬损较大的商品;</p><p>(6)商品详情页或结算页标注“不支持无理由退货” 的商品;</p><p>(7) 其他根据商品性质不适宜退货且您购买时同意不予退货的商品。</p><p><br></p><p><br></p><p><strong>三、特别说明</strong></p><p><br></p><p>1、成套商品或者礼盒装商品中有部分商品存在质量问题,在办理退换货时,需将整套商品退回,否则无法办理退货。</p><p>2、赠品的主商品进行退货时,需将赠品一并退回, 如赠品未退回,则主商品无法全额退款。</p><p>3、加工商品或含加工商品的订单在下单并进入备货环节后不支持取消订单,备货环节前可申请取消,请您关注订单信息的变化。但您收货后,仍可根据本政策申请退换货。</p><p>4、通常情况下,一张订单只能进行一次退换货操作,所以为了确保您的权益,请您考虑周全后与我们联系。</p><p>5、退货审核通过后,已支付的款项我们将按原支付方式和路径安排退款。</p><p>6、退款时订单中使用的优惠券、积分权益、红包等优惠或折扣,会按照优惠券、积分、红包等优惠或折扣规则进行处理。</p><p>7、退货金额按照您实付的金额进行退款。</p>`
|
||||
1
pages/agreement/review.js
Normal file
1
pages/agreement/review.js
Normal file
@ -0,0 +1 @@
|
||||
export default `<p><br></p><p>购de着评价管理规范</p><p>一、概述</p><p>第一条【目标】</p><p>为促进、保障评价内容能公正、客观、真实的反映商品或服务情况,进而为其他消费者在购买决策过程中提供相对可靠的参考,维护买卖双方的合法权益及经营秩序,根据《中华人民共和国电子商务法》以及其他相关法律法规、《购de着用户服务协议》《购de着用户服务条款》等相关平台规则及协议,制定本规范。</p><p>第二条【适用范围】</p><p>本规范适用于在购de着上进行交易、参与评价的所有用户。</p><p>二、评价说明</p><p>第三条【评价资格】为保证评价的及时性和有效性, 买家基于真实有效的交易订单和商品,在交易成功后 15天内,有权对本次交易的商品及服务进行评价。</p><p>第四条【评价内容】评价包括”商品评价”和”骑手评价”。“商品评价“包括“好评/差评”、“评价标签”、 “文字评论”、“图片评论“及”视频评论”等;“配送评价“包括”满意/还行/不满意”、“评价标签“和”文字评论”。</p><p>第五条【评论修改】暂不支持在提交评价后进行修改、删除、追评。</p><p>三、处理规则</p><p>第六条【基础原则】平台可基于买家消费体验、平台经营及管理等需要对评价内容进行审核,针对不合理评价或异常交易产生的评价进行处理,调整评价工具适用范围及相关计算逻辑并进行公示。</p><p>第七条【禁发评价】用户应当理解评价将成为其他用户对该商品或服务的重要判断依据,需承诺提交真实有效的评价,不得发表任何违法违规评价内容。禁止发布的内容,包括但不限于如下:</p><p>1、包含暴力恐怖、犯罪、赌博、毒品等违法相关信息;</p><p>2、包含政治敏感、反政府言论、宣传宗教迷信等相关信息;</p><p>3、包含淫秽、色情等低俗或其他有违公序良俗等相关信息的评价;</p><p>4、过激言论,出现人身攻击、恶意诋毁、辱骂、泄露个人信息等相关评价;</p><p>5、侵犯他人知识产权、人格权、肖像权等内容的评价;</p><p>6、包含联系方式、二维码、以及非本平台上的其他商品、商家信息等广告宣传信息内容的评价;</p><p>7、未经他人同意,涉及盗用他人文字、图片、视频并编辑后发布的评价;</p><p>8、同行竞争者给予与事实不符的差评、负面内容等的恶意评价,以及非竞争者通过不正当手段提交大量重复、非真实的好评;</p><p>9、非本订单评价或与本订单商家、商品或服务无直接关系的评价;</p><p>10、图片、视频非本商品/服务相关或图片、视频不清晰的;</p><p>11、仅包含纯数字、无规则字母、乱码、标点符号、 表情、无意义的灌水等信息,以及内容重复超过60% 以上,无参考意义的评价;</p><p>12、其他违反法律法规、相关平台规则及协议、本管理规范等的评价。</p><p>四、附则</p><p>第八条【生效时间】本规范于2024年10月17日首次发布,2024年10月24日正式生效。</p><p>第九条【规范变更】根据法律法规以及经营需要,平台有权对本规范进行修改更新,修改更新后的内容将进行公告。如您不同意接受修改更新,可停止使用;</p><p>如您继续使用,则视为知悉并接受修改更新。</p>`
|
||||
2
pages/agreement/service.js
Normal file
2
pages/agreement/service.js
Normal file
File diff suppressed because one or more lines are too long
@ -173,10 +173,10 @@
|
||||
*/
|
||||
getGoodsList(pageNo = 1) {
|
||||
const app = this
|
||||
const categoryId = app.getCategoryId()
|
||||
const categoryIdResult = app.getCategoryId()
|
||||
return new Promise((resolve, reject) => {
|
||||
// testorigin GoodsApi.list({ categoryId, page: pageNo }, { load: false })
|
||||
GoodsApi.apiGetCommodityList({ categoryId })
|
||||
GoodsApi.apiGetCommodityList({ categoryId: categoryIdResult })
|
||||
.then(result => {
|
||||
const newList = result.data.rows
|
||||
app.goodsList.data = getMoreListData({ data: newList }, app.goodsList, pageNo)
|
||||
@ -190,10 +190,14 @@
|
||||
// 获取当前选择的分类ID
|
||||
getCategoryId() {
|
||||
const app = this
|
||||
const result = { categoryId1: '', categoryId2: '' }
|
||||
if (app.curIndex2 > -1) {
|
||||
return app.subCateList[app.curIndex2].id
|
||||
result.categoryId2 = app.subCateList[app.curIndex2].id || ''
|
||||
}
|
||||
return app.curIndex > -1 ? app.list[app.curIndex].id : 0
|
||||
if (app.curIndex > -1) {
|
||||
result.categoryId1 = app.list[app.curIndex].id || ''
|
||||
}
|
||||
return result
|
||||
},
|
||||
|
||||
// 一级分类:选中分类
|
||||
|
||||
@ -347,6 +347,10 @@ import storage from '@/utils/storage'
|
||||
if (!app.onVerifyFrom()) {
|
||||
return false
|
||||
}
|
||||
if (!this.order.address.id) {
|
||||
app.showToast('请先选择收货地址后再下单')
|
||||
return false
|
||||
}
|
||||
// 按钮禁用
|
||||
app.disabled = true
|
||||
const skuList = app.order.goodsList.map(item => ({
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
<!-- 主图视频 -->
|
||||
<swiper-item v-if="video">
|
||||
<view class="slide-video">
|
||||
<video id="myVideo" class="video" :poster="videoCover ? videoCover.preview_url : ''" :src="video.external_url" controls
|
||||
<video id="myVideo" class="video" :poster="videoCover ? videoCover.preview_url : ''" :src="video" autoplay
|
||||
x5-playsinline playsinline x5-video-player-type="h5" x5-video-player-fullscreen x5-video-orientation="portrait"
|
||||
:enable-progress-gesture="false" @play="onVideoPlay"></video>
|
||||
</view>
|
||||
|
||||
@ -91,7 +91,7 @@
|
||||
</view>
|
||||
</view>
|
||||
<!-- 客服 -->
|
||||
<customer-btn v-if="isShowCustomerBtn" :showCard="true" :cardTitle="goods.title" :cardImage="goods.goods_image"
|
||||
<customer-btn v-if="isShowCustomerBtn" :showCard="true" :cardTitle="goods.title" :cardImage="goods.goods_images ? goods.goods_images[0] : ''"
|
||||
:cardPath="pagePath">
|
||||
<view class="fast-item">
|
||||
<view class="fast-icon">
|
||||
@ -132,7 +132,7 @@
|
||||
<!-- <shortcut bottom="120" /> -->
|
||||
|
||||
<!-- 分享菜单 -->
|
||||
<share-sheet v-model="showShareSheet" :shareTitle="goods.title" :shareImageUrl="goods.goods_image" />
|
||||
<share-sheet v-model="showShareSheet" :shareTitle="goods.title" :shareImageUrl="goods.goods_images ? goods.goods_images[0] : ''" />
|
||||
|
||||
</view>
|
||||
</template>
|
||||
|
||||
@ -34,7 +34,14 @@ export default {
|
||||
items: [],
|
||||
};
|
||||
},
|
||||
onLoad() {
|
||||
onLoad(options) {
|
||||
// 拿到路由的参数
|
||||
// 将参数内容以字符串形式toast提示
|
||||
uni.showToast({
|
||||
title: `参数: ${JSON.stringify(options)}`,
|
||||
icon: 'none',
|
||||
duration: 2000
|
||||
});
|
||||
this.getPageData();
|
||||
},
|
||||
onShow() {
|
||||
|
||||
@ -40,17 +40,37 @@
|
||||
</view>
|
||||
</view>
|
||||
<view class="auth-title">申请获取以下权限</view>
|
||||
<view class="auth-subtitle">获得你的公开信息(昵称、头像、手机号等)</view>
|
||||
<view class="auth-subtitle">获得你的公开信息(昵称、头像等)</view>
|
||||
<!-- #ifdef MP-WEIXIN -->
|
||||
<view class="agreement-box">
|
||||
<view class="agreement-checkbox" @click="toggleAgreement">
|
||||
<view class="checkbox-icon" :class="{ checked: agreedToTerms }">
|
||||
<u-icon v-if="agreedToTerms" name="checkbox-mark" color="#fff" size="28"></u-icon>
|
||||
</view>
|
||||
<text class="agreement-text">
|
||||
我已同意
|
||||
<text class="agreement-link" @click.stop="openAgreement">《相关协议》</text>
|
||||
</text>
|
||||
</view>
|
||||
</view>
|
||||
<view class="login-btn">
|
||||
<button class="button" open-type="getPhoneNumber" @getphonenumber="handleLoginWithPhone" @click="clickPhoneNumber" :class="{ disabled }">
|
||||
一键登录
|
||||
</button>
|
||||
<view class="button" :class="{ disabled: disabled || !agreedToTerms }" @click="handleLogin()">一键登录</view>
|
||||
</view>
|
||||
<!-- #endif -->
|
||||
<!-- #ifndef MP-WEIXIN -->
|
||||
<view class="agreement-box">
|
||||
<view class="agreement-checkbox" @click="toggleAgreement">
|
||||
<view class="checkbox-icon" :class="{ checked: agreedToTerms }">
|
||||
<u-icon v-if="agreedToTerms" name="checkbox-mark" color="#fff" size="28"></u-icon>
|
||||
</view>
|
||||
<text class="agreement-text">
|
||||
我已同意
|
||||
<text class="agreement-link" @click.stop="openAgreement">《相关协议》</text>
|
||||
</text>
|
||||
</view>
|
||||
</view>
|
||||
<view class="login-btn">
|
||||
<view class="button" :class="{ disabled }" @click="handleLogin()">一键登录</view>
|
||||
<view class="button" :class="{ disabled: disabled || !agreedToTerms }" @click="handleLogin()">一键登录</view>
|
||||
</view>
|
||||
<!-- #endif -->
|
||||
<view class="no-login-btn">
|
||||
@ -65,6 +85,7 @@
|
||||
import AvatarImage from '@/components/avatar-image'
|
||||
import * as Verify from '@/utils/verify'
|
||||
import * as OrderApi from '@/api/order'
|
||||
import * as UserApi from '@/api/user'
|
||||
|
||||
export default {
|
||||
components: {
|
||||
@ -76,6 +97,8 @@
|
||||
isPersonal: false,
|
||||
// 按钮禁用
|
||||
disabled: false,
|
||||
// 是否同意协议
|
||||
agreedToTerms: false,
|
||||
// 头像路径 (用于显示)
|
||||
avatarUrl: '',
|
||||
// 临时图片 (用于上传)
|
||||
@ -84,9 +107,6 @@
|
||||
form: {
|
||||
nickName: ''
|
||||
},
|
||||
// 手机号加密数据
|
||||
phoneEncryptedData: '',
|
||||
phoneIv: '',
|
||||
// 微信小程序登录凭证 (code)
|
||||
// 提交到后端,用于换取openid
|
||||
code: ''
|
||||
@ -94,92 +114,40 @@
|
||||
},
|
||||
|
||||
methods: {
|
||||
// 一键登录按钮点击事件(非微信小程序环境)
|
||||
handleLogin() {
|
||||
this.onAuthSuccess({})
|
||||
},
|
||||
|
||||
// 按钮点击事件: 获取微信手机号按钮
|
||||
// 实现目的: 在getphonenumber事件触发之前获取微信登录code
|
||||
// 因为如果在getphonenumber事件中获取code的话,提交到后端的encryptedData会存在解密不了的情况
|
||||
async clickPhoneNumber() {
|
||||
// #ifdef MP-WEIXIN
|
||||
if (!this.disabled) {
|
||||
// 一键登录按钮点击事件
|
||||
async handleLogin() {
|
||||
if (!this.agreedToTerms) {
|
||||
this.$toast('请先同意相关协议')
|
||||
return
|
||||
}
|
||||
// 获取微信登录code
|
||||
if (!this.code) {
|
||||
this.code = await this.getCode()
|
||||
}
|
||||
// #endif
|
||||
},
|
||||
|
||||
// 微信小程序一键登录(带手机号授权)
|
||||
async handleLoginWithPhone({ detail }) {
|
||||
const app = this
|
||||
// #ifdef MP-WEIXIN
|
||||
// 处理手机号授权
|
||||
if (detail.errMsg === 'getPhoneNumber:ok') {
|
||||
// 获取手机号成功
|
||||
app.phoneEncryptedData = detail.encryptedData
|
||||
app.phoneIv = detail.iv
|
||||
console.log('获取手机号成功', {
|
||||
hasEncryptedData: !!detail.encryptedData,
|
||||
hasIv: !!detail.iv,
|
||||
hasCode: !!app.code
|
||||
})
|
||||
|
||||
// 准备用户信息数据,包含手机号加密信息
|
||||
let userInfo = {
|
||||
phoneEncryptedData: detail.encryptedData,
|
||||
phoneIv: detail.iv,
|
||||
nickName: '',
|
||||
avatarUrl: ''
|
||||
}
|
||||
|
||||
// 执行登录,将手机号信息传递给后端
|
||||
app.onAuthSuccess(userInfo)
|
||||
} else {
|
||||
// 用户拒绝授权手机号
|
||||
console.log('用户拒绝授权手机号', detail)
|
||||
app.$toast('为了更好的体验,请授权手机号再登录')
|
||||
}
|
||||
// #endif
|
||||
this.onAuthSuccess()
|
||||
},
|
||||
// 授权成功事件
|
||||
// 这里分为两个逻辑:
|
||||
// 1.将code和userInfo提交到后端,如果存在该用户 则实现自动登录,无需再填写手机号
|
||||
// 2.如果不存在该用户, 则显示注册页面, 需填写手机号
|
||||
// 1.将code和userInfo提交到后端,如果存在该用户 则实现自动登录
|
||||
// 2.如果不存在该用户, 则显示注册页面
|
||||
// 3.如果后端报错了, 则显示错误信息
|
||||
async onAuthSuccess(userInfo) {
|
||||
async onAuthSuccess() {
|
||||
const app = this
|
||||
// 如果还没有获取code,则获取code
|
||||
// 提交到后端
|
||||
if (!app.code) {
|
||||
app.code = await app.getCode()
|
||||
}
|
||||
|
||||
// 准备登录数据,包含手机号、昵称和头像信息
|
||||
const loginData = {
|
||||
code: app.code,
|
||||
phoneEncryptedData: userInfo.phoneEncryptedData || '',
|
||||
phoneIv: userInfo.phoneIv || '',
|
||||
nickName: userInfo.nickName || '',
|
||||
avatarUrl: userInfo.avatarUrl || ''
|
||||
}
|
||||
|
||||
console.log('登录数据:', {
|
||||
hasCode: !!loginData.code,
|
||||
hasPhoneNumber: !!(loginData.phoneEncryptedData && loginData.phoneIv),
|
||||
nickName: loginData.nickName,
|
||||
hasAvatar: !!(loginData.avatarUrl)
|
||||
})
|
||||
|
||||
// 按钮禁用
|
||||
app.disabled = true
|
||||
|
||||
store.dispatch('LoginMpWx', loginData)
|
||||
store.dispatch('LoginMpWx', { code: app.code })
|
||||
.then(result => {
|
||||
app.disabled = false
|
||||
if (!result.data.buyer.avatarUrl) {
|
||||
if (!result.data.buyer.avatar) {
|
||||
app.isPersonal = true
|
||||
} else {
|
||||
store.dispatch('UpdateUserInfo', res.data.buyer)
|
||||
app.$toast('登录成功')
|
||||
uni.$emit('syncRefresh', true)
|
||||
setTimeout(() => app.onNavigateBack(), 2000)
|
||||
@ -340,8 +308,7 @@
|
||||
app.disabled = false
|
||||
return
|
||||
}
|
||||
// 提交到后端
|
||||
app.onAuthSuccess({ nickName: app.form.nickName, avatarUrl: app.form.avatarUrl })
|
||||
store.dispatch('UpdateUserInfo', { buyerName: app.form.nickName, avatar: app.form.avatarUrl })
|
||||
},
|
||||
|
||||
// 将oauth提交给父级
|
||||
@ -375,6 +342,20 @@
|
||||
} else {
|
||||
this.$navTo('pages/index/index')
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* 切换协议同意状态
|
||||
*/
|
||||
toggleAgreement() {
|
||||
this.agreedToTerms = !this.agreedToTerms
|
||||
},
|
||||
|
||||
/**
|
||||
* 打开协议页面
|
||||
*/
|
||||
openAgreement() {
|
||||
this.$navTo('pages/agreement/index')
|
||||
}
|
||||
|
||||
}
|
||||
@ -522,4 +503,52 @@
|
||||
align-items: center;
|
||||
}
|
||||
}
|
||||
|
||||
.agreement-box {
|
||||
margin-bottom: 30rpx;
|
||||
padding: 0 10rpx;
|
||||
|
||||
.agreement-checkbox {
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
font-size: 24rpx;
|
||||
color: #666;
|
||||
line-height: 1.6;
|
||||
|
||||
.checkbox-icon {
|
||||
width: 32rpx;
|
||||
height: 32rpx;
|
||||
border: 2rpx solid #ddd;
|
||||
border-radius: 4rpx;
|
||||
margin-right: 12rpx;
|
||||
margin-top: 2rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
flex-shrink: 0;
|
||||
transition: all 0.3s;
|
||||
|
||||
&.checked {
|
||||
background: $main-bg;
|
||||
border-color: $main-bg;
|
||||
}
|
||||
|
||||
.icon-check2 {
|
||||
color: #fff;
|
||||
font-size: 20rpx;
|
||||
font-weight: bold;
|
||||
}
|
||||
}
|
||||
|
||||
.agreement-text {
|
||||
flex: 1;
|
||||
line-height: 1.6;
|
||||
}
|
||||
|
||||
.agreement-link {
|
||||
color: $main-bg;
|
||||
text-decoration: underline;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@ -1,5 +1,6 @@
|
||||
import storage from '@/utils/storage'
|
||||
import * as LoginApi from '@/api/login'
|
||||
import * as UserApi from '@/api/user'
|
||||
|
||||
const user = {
|
||||
state: {
|
||||
@ -46,6 +47,21 @@ const user = {
|
||||
})
|
||||
},
|
||||
|
||||
// 修改个人信息(头像昵称)
|
||||
UpdateUserInfo({ commit }, data) {
|
||||
if (data.token) {
|
||||
storage.set('user_info', data)
|
||||
commit('SET_USER_INFO', data)
|
||||
} else {
|
||||
UserApi.apiUpdateUserInfo(data)
|
||||
.then(response => {
|
||||
const { token, buyerId, flag } = this.state
|
||||
commit('SET_USER_INFO', { token, buyerId, flag, ...data })
|
||||
resolve(response)
|
||||
})
|
||||
}
|
||||
},
|
||||
|
||||
// 微信小程序一键授权登录 (授权手机号)
|
||||
LoginMpWxMobile({ commit }, data) {
|
||||
return new Promise((resolve, reject) => {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user