diff --git a/src/app.config.ts b/src/app.config.ts index 919353f..0cb2c31 100644 --- a/src/app.config.ts +++ b/src/app.config.ts @@ -15,6 +15,8 @@ export default defineAppConfig({ 'pages/payment-detail/index', 'pages/settings/index', 'pages/login/index', + 'pages/agreement/index', + 'pages/privacy/index', 'pages/change-password/index', 'pages/store-info/index', ], diff --git a/src/components/PriceText/index.tsx b/src/components/PriceText/index.tsx index f2afd3d..99a5559 100644 --- a/src/components/PriceText/index.tsx +++ b/src/components/PriceText/index.tsx @@ -30,7 +30,7 @@ export default function PriceText({ price, spec, className, mode = 'inline' }: P ¥{price} {retail !== null && ( - 零售价:¥{retail} + 单价:¥{retail} )} ) @@ -40,7 +40,7 @@ export default function PriceText({ price, spec, className, mode = 'inline' }: P ¥{price} {retail !== null && ( - 零售价:¥{retail} + 单价:¥{retail} )} ) diff --git a/src/pages/agreement/index.config.ts b/src/pages/agreement/index.config.ts new file mode 100644 index 0000000..3cc6a2f --- /dev/null +++ b/src/pages/agreement/index.config.ts @@ -0,0 +1,4 @@ +export default definePageConfig({ + navigationStyle: 'custom', + navigationBarTitleText: '用户服务协议', +}) diff --git a/src/pages/agreement/index.less b/src/pages/agreement/index.less new file mode 100644 index 0000000..83e3ed5 --- /dev/null +++ b/src/pages/agreement/index.less @@ -0,0 +1,54 @@ +/* ======================================== + 协议/政策页面(用户协议、隐私政策共用) + ======================================== */ + +.agreement-page { + min-height: 100vh; + background: #fff; +} + +.agreement-scroll { + height: 100vh; +} + +.agreement-content { + padding: 32px 40px 80px; + + .doc-title { + display: block; + font-size: 40px; + font-weight: 600; + color: #323233; + text-align: center; + margin-bottom: 16px; + } + + .doc-updated { + display: block; + font-size: 24px; + color: #969799; + text-align: center; + margin-bottom: 48px; + } + + .doc-p { + display: block; + font-size: 28px; + color: #323233; + line-height: 1.8; + margin-bottom: 24px; + text-align: justify; + } + + .doc-h2 { + display: block; + font-size: 32px; + font-weight: 600; + color: #323233; + margin: 48px 0 16px; + } + + .doc-bold { + font-weight: 600; + } +} diff --git a/src/pages/agreement/index.tsx b/src/pages/agreement/index.tsx new file mode 100644 index 0000000..cae45cb --- /dev/null +++ b/src/pages/agreement/index.tsx @@ -0,0 +1,69 @@ +import { View, Text, ScrollView } from '@tarojs/components' +import CustomNavBar from '@/components/NavBar' +import './index.less' + +/** + * 用户服务协议 + * 静态协议文本页,由登录页/设置页进入 + */ +export default function AgreementPage() { + return ( + + + + + 用户服务协议 + 更新日期:2026年8月21日 生效日期:2026年8月21日 + + + 欢迎使用「订货采购」小程序(以下简称“本小程序”)。本小程序由平台运营方(以下简称“我们”)为合作门店提供商品订货、订单管理、对账结算等采购服务。请您在使用本小程序前,认真阅读并充分理解本协议全部内容。 + + + 您勾选“我已阅读并同意”并点击登录,即表示您已充分阅读、理解并接受本协议的全部内容,本协议即在您与我们之间产生法律效力。若您不同意本协议的任何内容,请立即停止登录或使用本小程序。 + + + 一、账号与登录 + 1.1 本小程序面向已与我们建立合作关系的门店用户开放,登录账号及初始密码由商家(供货方)在后台分配,本小程序不提供自助注册功能。 + 1.2 您应妥善保管账号和密码,不得将账号出借、转让或授权他人使用。因您主动泄露密码或遭受他人攻击、诈骗等行为导致的损失,由您自行承担。 + 1.3 如发现账号被他人非法使用或存在安全漏洞,请立即联系客服处理。 + 1.4 您可在登录后通过“我的-设置-修改密码”功能自行修改登录密码。 + + 二、服务内容 + 2.1 本小程序为您提供以下服务:商品浏览与搜索、在线下单订货、购物车管理、订单查询与管理、账单查看与对账、在线付款及付款记录查询、门店信息查看、消息通知等。 + 2.2 您理解并同意,商品的价格、库存、配送等信息由商家(供货方)提供并负责,实际交易关系发生在您与商家之间。 + 2.3 我们有权根据业务调整对服务功能进行变更、暂停或终止,并以页面公告等方式通知您。 + + 三、用户行为规范 + 3.1 您承诺在使用本小程序过程中遵守国家法律法规,不得利用本小程序从事任何违法违规活动,包括但不限于:发布违法信息、恶意刷单、攻击系统、窃取数据等。 + 3.2 您应保证下单、付款等操作的真实性,并按照与商家的约定及时完成结算。 + 3.3 如您违反本协议约定,我们有权视情节采取警示、限制功能、暂停或终止向您提供服务等措施。 + + 四、交易与结算 + 4.1 您通过本小程序提交的订单,经商家确认后生效。订单的履行(发货、配送、退换货等)由商家负责。 + 4.2 账单金额、回款周期等结算规则以您与商家的约定及小程序内展示为准。 + 4.3 付款记录、账单明细等信息可在“账单”及“付款记录”页面查询,请您及时核对;如有异议,请及时联系客服。 + + 五、知识产权 + 5.1 本小程序的页面设计、程序代码、商标标识等知识产权归我们或相关权利人所有。未经书面许可,您不得复制、传播、修改或用于任何商业用途。 + 5.2 商品图片、描述等内容由商家提供,相关权利归商家或其权利人所有。 + + 六、免责声明 + 6.1 因不可抗力(自然灾害、政府行为、网络故障等)导致服务中断或数据损失的,我们不承担责任,但将尽力减少对您的影响。 + 6.2 因您自身原因(如账号泄露、操作失误、网络环境异常等)造成的损失,由您自行承担。 + 6.3 您与商家之间因商品质量、交付、售后等产生的纠纷,由您与商家协商解决,我们将提供必要的协助。 + + 七、协议的变更与终止 + 7.1 我们有权根据法律法规及业务需要修订本协议,修订后的协议将在本页面公示。若您不同意修订后的协议,应停止使用本小程序;继续使用则视为接受修订后的协议。 + 7.2 如您与商家的合作关系终止,我们有权停止或注销您的登录账号。 + + 八、法律适用与争议解决 + 8.1 本协议的订立、执行和解释及争议的解决均适用中华人民共和国法律。 + 8.2 因本协议引起的或与本协议有关的任何争议,双方应友好协商解决;协商不成的,任何一方均可向我们所在地有管辖权的人民法院提起诉讼。 + + 九、联系我们 + 如您对本协议有任何疑问、意见或建议,可通过小程序内“消息”页面或商家提供的客服渠道与我们联系。 + + + + ) +} diff --git a/src/pages/login/index.less b/src/pages/login/index.less index b64fb01..866497d 100644 --- a/src/pages/login/index.less +++ b/src/pages/login/index.less @@ -184,7 +184,7 @@ } } -/* ========== 协议文字 ========== */ +/* ========== 协议勾选区 ========== */ .login-agreement { display: flex; align-items: center; @@ -193,9 +193,35 @@ margin-top: 32px; line-height: 1.6; + .agree-checkbox { + width: 32px; + height: 32px; + border-radius: 50%; + border: 2px solid #c8c9cc; + margin-right: 12px; + flex-shrink: 0; + display: flex; + align-items: center; + justify-content: center; + box-sizing: border-box; + transition: all 0.2s; + + &--checked { + background: #ee0a24; + border-color: #ee0a24; + } + } + + .agree-checkbox-tick { + font-size: 22px; + color: #fff; + line-height: 1; + font-weight: 700; + } + .agree-text { font-size: 24px; - color: #c8c9cc; + color: #969799; } .agree-link { diff --git a/src/pages/login/index.tsx b/src/pages/login/index.tsx index d2c5256..94c664f 100644 --- a/src/pages/login/index.tsx +++ b/src/pages/login/index.tsx @@ -18,6 +18,8 @@ export default function LoginPage() { /** 登录密码 */ const [password, setPassword] = useState('') const [submitting, setSubmitting] = useState(false) + /** 是否已阅读并同意协议(默认不勾选,须用户自主勾选后才能登录) */ + const [agreed, setAgreed] = useState(false) /** 返回上一页(无页面栈时回首页) */ const goBack = useCallback(() => { @@ -41,6 +43,10 @@ export default function LoginPage() { Taro.showToast({ title: '请输入登录密码', icon: 'none' }) return } + if (!agreed) { + Taro.showToast({ title: '请先阅读并勾选同意《用户服务协议》和《隐私政策》', icon: 'none' }) + return + } setSubmitting(true) try { await login({ username: account, password }) @@ -51,16 +57,21 @@ export default function LoginPage() { } finally { setSubmitting(false) } - }, [login, submitting, username, password, goBack]) + }, [login, submitting, username, password, agreed, goBack]) - /** 查看用户协议 */ + /** 查看用户服务协议 */ const handleShowAgreement = useCallback(() => { - Taro.showToast({ title: '用户协议即将上线', icon: 'none' }) + Taro.navigateTo({ url: '/pages/agreement/index' }) }, []) /** 查看隐私政策 */ const handleShowPrivacy = useCallback(() => { - Taro.showToast({ title: '隐私政策即将上线', icon: 'none' }) + Taro.navigateTo({ url: '/pages/privacy/index' }) + }, []) + + /** 勾选/取消勾选协议 */ + const toggleAgreed = useCallback(() => { + setAgreed(v => !v) }, []) return ( @@ -125,9 +136,15 @@ export default function LoginPage() { - 登录即代表同意 + + {agreed && } + + 我已阅读并同意 - 《用户协议》 + 《用户服务协议》 diff --git a/src/pages/privacy/index.config.ts b/src/pages/privacy/index.config.ts new file mode 100644 index 0000000..3ed6c77 --- /dev/null +++ b/src/pages/privacy/index.config.ts @@ -0,0 +1,4 @@ +export default definePageConfig({ + navigationStyle: 'custom', + navigationBarTitleText: '隐私政策', +}) diff --git a/src/pages/privacy/index.less b/src/pages/privacy/index.less new file mode 100644 index 0000000..6c27478 --- /dev/null +++ b/src/pages/privacy/index.less @@ -0,0 +1,54 @@ +/* ======================================== + 隐私政策页面(与用户协议共用样式) + ======================================== */ + +.privacy-page { + min-height: 100vh; + background: #fff; +} + +.privacy-scroll { + height: 100vh; +} + +.privacy-content { + padding: 32px 40px 80px; + + .doc-title { + display: block; + font-size: 40px; + font-weight: 600; + color: #323233; + text-align: center; + margin-bottom: 16px; + } + + .doc-updated { + display: block; + font-size: 24px; + color: #969799; + text-align: center; + margin-bottom: 48px; + } + + .doc-p { + display: block; + font-size: 28px; + color: #323233; + line-height: 1.8; + margin-bottom: 24px; + text-align: justify; + } + + .doc-h2 { + display: block; + font-size: 32px; + font-weight: 600; + color: #323233; + margin: 48px 0 16px; + } + + .doc-bold { + font-weight: 600; + } +} diff --git a/src/pages/privacy/index.tsx b/src/pages/privacy/index.tsx new file mode 100644 index 0000000..074e68d --- /dev/null +++ b/src/pages/privacy/index.tsx @@ -0,0 +1,64 @@ +import { View, Text, ScrollView } from '@tarojs/components' +import CustomNavBar from '@/components/NavBar' +import './index.less' + +/** + * 隐私政策 + * 静态政策文本页,由登录页/设置页进入 + */ +export default function PrivacyPage() { + return ( + + + + + 隐私政策 + 更新日期:2026年8月21日 生效日期:2026年8月21日 + + + 「订货采购」小程序(以下简称“本小程序”)由平台运营方(以下简称“我们”)运营。我们深知个人信息对您的重要性,并会尽全力保护您的个人信息安全可靠。我们致力于维持您对我们的信任,恪守以下原则保护您的个人信息:权责一致原则、目的明确原则、选择同意原则、最小必要原则、确保安全原则、主体参与原则、公开透明原则等。 + + + 请您在使用本小程序前,仔细阅读并充分理解本政策全部内容。您勾选“我已阅读并同意”并点击登录,即表示您同意我们按照本政策收集、使用、存储和共享您的相关信息。若您不同意本政策的任何内容,您可以选择不使用本小程序。 + + + 一、我们收集的信息及用途 + 为向您提供订货采购相关服务,我们会在以下场景收集和使用您的信息: + 1.1 账号登录信息:当您使用账号密码登录时,我们会收集您的登录账号、密码(加密传输与存储),用于验证您的身份并完成登录。 + 1.2 门店与联系人信息:为完成订单配送与结算,我们会使用商家在后台录入的门店名称、门店地址、联系人、联系电话等信息,用于订单配送、账单对账及售后服务。 + 1.3 交易信息:当您下单、付款时,我们会收集您的订单信息(商品、数量、金额)、账单信息、付款记录等,用于订单履行、对账结算与售后处理。 + 1.4 设备与日志信息:为保障服务安全稳定运行,我们可能会收集您的设备型号、操作系统、网络状态、操作日志等信息,用于故障排查、安全风控与服务优化。 + + 二、我们如何使用信息 + 2.1 我们仅将收集的信息用于实现本小程序的核心功能,包括:身份验证、商品展示与下单、订单管理、账单对账、付款结算、消息通知、客户服务等。 + 2.2 我们不会将您的个人信息用于与上述功能无关的用途;如超出原目的使用您的信息,我们会再次征得您的明示同意。 + + 三、信息的共享、转让与公开披露 + 3.1 我们不会向任何无关第三方出售您的个人信息。 + 3.2 为完成订单履约,我们会将配送所需的信息(门店名称、地址、联系人、电话、订单明细)提供给为您提供商品的商家及配送服务方。 + 3.3 基于法律规定、司法机关或行政机关的合法要求,我们可能会披露您的相关信息。 + + 四、信息的存储与保护 + 4.1 您的个人信息存储于中华人民共和国境内。我们仅在为您提供服务所必需的期间内保留您的信息。 + 4.2 我们采用加密传输、访问控制等安全技术和管理措施保护您的信息,防止信息遭到未经授权的访问、披露、使用或损毁。 + 4.3 请您妥善保管账号密码。如发生个人信息安全事件,我们将按照法律法规要求及时告知您并向主管部门报告。 + + 五、您的权利 + 5.1 查询与更正:您可在小程序内查询您的订单、账单、付款记录及门店信息;如信息有误,可联系客服更正。 + 5.2 密码管理:您可通过“我的-设置-修改密码”功能自行修改登录密码。 + 5.3 账号注销:如您与商家的合作关系终止,可申请注销账号;账号注销后,我们将删除或匿名化处理您的个人信息,法律法规另有规定的除外。 + 5.4 撤回同意:您可以通过停止使用本小程序的方式撤回对您个人信息收集使用的授权。 + + 六、未成年人保护 + 本小程序面向从事经营活动的门店用户,不面向未成年人提供服务。如您为未成年人,请勿使用本小程序。 + + 七、本政策的更新 + 我们可能适时修订本政策。政策更新后,我们会在本页面公示更新内容。若您不同意更新后的政策,应停止使用本小程序;继续使用即视为您接受更新后的政策。 + + 八、联系我们 + 如您对本政策或您的个人信息处理有任何疑问、意见或投诉,可通过小程序内“消息”页面或商家提供的客服渠道与我们联系,我们将尽快予以答复。 + + + + ) +} diff --git a/src/pages/settings/index.tsx b/src/pages/settings/index.tsx index 0164d74..147ab5f 100644 --- a/src/pages/settings/index.tsx +++ b/src/pages/settings/index.tsx @@ -21,11 +21,11 @@ export default function SettingsPage() { 清除缓存 - handlePlaceholder('用户协议')}> - 用户协议 + Taro.navigateTo({ url: '/pages/agreement/index' })}> + 用户服务协议 - handlePlaceholder('隐私政策')}> + Taro.navigateTo({ url: '/pages/privacy/index' })}> 隐私政策