This commit is contained in:
徐哼唧L
2024-01-08 13:50:53 +08:00
parent c3f3918c9b
commit 50da1d7e38
14 changed files with 2610 additions and 347 deletions

View File

@@ -0,0 +1,187 @@
<template>
<view>
<view class="dp_title">疯子读书软件许可及服务协议</view>
<view class="dp_content">
<view>导言</view>
<view>欢迎你使用疯子读书软件及服务 </view>
<view>为使用疯子读书软件及服务以下简称本软件疯子读书服务本服务你应当阅读并遵守疯子读书软件许可及服务协议以下简称本协议以及会员订阅服务条款等疯子读书服务的各项制度规范
</view>
<view>请你务必审慎阅读充分理解各条款内容特别是免除或限制疯子读书责任的相应条款以及开通或使用某项服务如无限卡会员订阅服务的单独协议并选择接受或不接受限制免责条款可能以加粗形式提示你注意
</view>
<view>除非你已阅读并接受本协议所有条款否则你无权下载安装或使用本软件及相关服务你的下载安装使用登录等行为即视为你已阅读并同意上述协议的约束 </view>
<view>你有违反本协议的任何行为时疯子读书有权依照违反情况随时单方限制中止或终止向你提供本服务并有权追究你的相关责任
如果你未满18周岁请在监护人的陪同下阅读本协议及其他上述协议并特别注意未成年人使用条款 </view>
<view class="dp_con1">协议的范围 </view>
<view class="dp_con2">1. 本协议是你与疯子读书之间关于你下载安装使用复制本软件以及使用疯子读书相关服务所订立的协议</view>
<view class="dp_con2">2.
本协议被视为疯子读书服务协议疯子读书微信软件许可及服务协议的补充协议是其不可分割的组成部分与其构成统一整体本协议与上述内容存在冲突的以本协议为准
</view>
<view class="dp_con2">3. 本协议内容同时包括疯子读书可能不断发布的关于本服务的相关协议服务声明业务规则及公告指引等内容以下统称为专项规则上述内容一经正式发布即为本协议不可分割的组成部分你同样应当遵守
</view>
<view class="dp_con1">术语定义 </view>
<view class="dp_con2">1.
疯子读书软件是指疯子读书向用户提供的购买阅读赠送分享电子读物发布读书想法等服务的客户端软件你启用本软件后可以阅读赠送分享评论你通过本服务购买的电子读物你也可以在你的微信好友允许的情况下浏览微信好友通过本服务阅读分享的读物及其读书想法等
</view>
<view class="dp_con2">2. 疯子读书是指天津众妙之门科技有限公司及其相关服务可能存在的运营关联单位 </view>
<view class="dp_con2">3. 用户是指启用浏览或上传数据至疯子读书服务的用户在本协议中也称为 </view>
<view class="dp_con2">4. 其他用户是指除用户本人外与疯子读书服务相关的其他微信用户 </view>
<view class="dp_con1">关于本软件 </view>
<view class="dp_con2">1.服务许可 </view>
<view>本软件可能提供多个应用版本用户必须选择与所安装设备相匹配的软件版本各应用版本之间的功能可能不一致具体以相应版本中展示的为准用户可根据本协议获得以下许可 </view>
<view>1.1 疯子读书给予你一项个人的不可转让及非排他性的许可以使用本软件你可以为非商业目的在单一台终端设备上安装使用显示运行本软件 </view>
<view>1.2 你可以为使用本软件的目的复制本软件的一个副本仅用作备份备份副本必须包含原软件中含有的所有著作权信息 </view>
<view>1.3 本条及本协议其他条款未明示授权的其他一切权利仍由疯子读书保留你在行使这些权利时须另外取得疯子读书的书面许可疯子读书如果未行使前述任何权利并不构成对该权利的放弃 </view>
<view class="dp_con2">2.安装与卸载 </view>
<view>2.1
你可以直接从疯子读书的网站上获取本软件也可以从得到疯子读书授权的第三方获取如果你从未经疯子读书授权的第三方获取本软件或与本软件名称相同的安装程序疯子读书无法保证本软件能够正常使用并对因此给你造成的损失不予负责
</view>
<view>2.2
疯子读书可能为不同的终端设备开发了不同的软件版本你应当根据实际情况选择下载合适的版本进行安装下载安装程序后你需要按照该程序提示的步骤正确安装为提供更加优质安全的服务在本软件安装时疯子读书可能推荐你安装其他软件你可以选择安装或不安装
</view>
<view>2.3 如果你不再需要使用本软件或者需要安装新版软件可以自行卸载如果你愿意帮助疯子读书改进产品服务请告知卸载的原因 </view>
<view>2.4
为了改善用户体验完善服务内容疯子读书将不断努力开发新的服务并为你不时提供软件更新这些更新可能会采取软件替换修改功能强化版本升级等形式为了保证本软件安全性和功能的一致性疯子读书有权不经向你特别通知而对软件进行更新或者对软件的部分功能效果进行改变或限制本软件新版本发布后旧版本的软件可能无法使用疯子读书不保证旧版本软件继续可用及相应的客户服务请你随时核对并下载最新版本
</view>
<view class="dp_con1">用户个人信息保护 </view>
<view class="dp_con2">1.
保护用户个人信息是疯子读书的一项基本原则疯子读书将会采取合理的措施保护用户的个人信息除法律法规规定或本协议另有约定的情形外未经用户许可疯子读书不会向第三方公开透露用户个人信息疯子读书对相关信息采用专业加密存储与传输方式保障用户个人信息的安全
</view>
<view class="dp_con2">2.
你使用本服务的部分功能前需要有一个成功注册的微信帐号并通过该微信帐号进行授权授权内容包括但不限于获得该微信帐号的公开信息昵称头像等寻找与你共同使用该应用的微信好友帮助你分享信息到朋友圈等对于你的微信帐号信息疯子读书将采用专业加密存储与传输方式保障信息安全不会擅自收集利用透露或公开用户有责任妥善保管你的微信帐号信息及帐号密码的安全因你自身的原因导致微信帐号及密码泄漏而造成的本服务下相关信息的泄露篡改删除等后果疯子读书不承担任何责任
</view>
<view class="dp_con2">3. 疯子读书将运用各种安全技术和程序建立完善的管理制度来保护你的个人信息以免遭受未经授权的访问使用或披露 </view>
<view class="dp_con2">4. 未经你的同意疯子读书不会向疯子读书以外的任何公司组织和个人披露你的个人信息但法律法规另有规定或本协议另有约定的除外 </view>
<view class="dp_con1">用户注意事项 </view>
<view class="dp_con2">1. 你理解并同意为了向你提供有效的服务本软件会利用你设备终端的处理器和带宽等资源本软件使用过程中可能产生数据流量的费用用户需自行向运营商了解相关资费信息并自行承担相关费用 </view>
<view class="dp_con2">2. 你在使用本软件某一特定服务时该服务可能会另有单独的协议专项规则等你在使用该项服务前请阅读并同意相关的单独协议专项规则包括但不限于适用于无限卡会员订阅服务的会员订阅服务条款
</view>
<view class="dp_con2">3. 你理解并同意疯子读书将会尽其商业上的合理努力保障你在本软件中的数据存储安全但是疯子读书并不能就此提供完全保证包括但不限于以下情形 </view>
<view>3.1 疯子读书不对你在本软件中相关数据的删除或储存失败负责 </view>
<view>3.2 疯子读书有权根据实际情况自行决定单个用户在本软件中数据的最长储存期限并在服务器上为其分配数据最大存储空间等 </view>
<view>3.3 如果你停止使用本软件或服务被终止或取消疯子读书可以从服务器上永久地删除你的数据服务停止终止或取消后疯子读书没有义务向你返还任何数据 </view>
<view class="dp_con2">4. 用户在使用本软件时须自行承担如下来自疯子读书不可掌控的风险内容包括但不限于</view>
<view>4.1 由于信息网络设备维护连接故障系统故障电力故障罢工暴乱火灾洪水风暴爆炸战争政府行为司法行政机关的命令或因第三方因素可能引起的个人信息丢失泄漏及其他损害等风险
</view>
<view>4.2 如使用本客户端软件用户必须选择与所安装设备相匹配的软件版本否则由于软件与设备型号不相匹配所导致的任何问题或损害均由用户自行承担 </view>
<view>4.3 用户发布的内容或你的软件使用信息包括但不限于使用本服务所产生的你的书架你正在阅读的读物你推荐的读物及你的读书想法等信息被他人转发分享因此等传播可能带来的风险和责任 </view>
<view>4.4 由于网络信号不稳定网络带宽小等原因所引起的本软件登录失败资料同步不完整页面打开速度慢等风险 </view>
<view class="dp_con2">
5.
你理解并同意本服务可生成软件使用信息包括但不限于你的书架你正在阅读的读物你推荐的读物及你的读书想法等信息并向与你有微信好友关系的用户及其他用户开放浏览可见用户之间可浏览对方因使用本服务所生成的全部或部分软件使用信息你也可以选择对前述软件使用信息的可见范围等进行相关设置
</view>
<view class="dp_con1">用户行为规范 </view>
<view class="dp_con2">1. 服务使用规范 </view>
<view>1.1
你应遵守本协议使用本服务你理解并同意本服务是你与其他用户之间就读物阅读进行信息交流的平台疯子读书不鼓励你在未经其他用户允许的前提下将其他用户使用本服务所产生的软件使用信息对外转发分享传播或用作其他违法或不合理用途
</view>
<view class="dp_con2">2. 信息内容规范 </view>
<view>2.1 本条所述信息内容是指用户使用本服务过程中所制作复制发布传播的任何内容包括但不限于图片文字相关链接页面等使用本服务所产生的内容 </view>
<view>2.2 你理解并同意疯子读书一直致力于为用户提供文明健康规范有序的网络环境你不得利用本服务制作复制发布传播如下干扰本服务正常运营以及侵犯其他用户或第三方合法权益的内容包括但不限于
</view>
<view>2.2.1 发布传送传播储存违反国家法律法规禁止的内容 </view>
<view>1违反宪法确定的基本原则的 </view>
<view>2危害国家安全泄露国家秘密颠覆国家政权破坏国家统一的 </view>
<view>3损害国家荣誉和利益的 </view>
<view>4煽动民族仇恨民族歧视破坏民族团结的 </view>
<view>5破坏国家宗教政策宣扬邪教和封建迷信的 </view>
<view>6散布谣言扰乱社会秩序破坏社会稳定的 </view>
<view>7散布淫秽色情赌博暴力恐怖或者教唆犯罪的 </view>
<view>8侮辱或者诽谤他人侵害他人合法权益的 </view>
<view>9煽动非法集会结社游行示威聚众扰乱社会秩序 </view>
<view>10以非法民间组织名义活动的 </view>
<view>11含有法律行政法规禁止的其他内容的 </view>
<view>2.2.2 发布传送传播储存侵害他人名誉权肖像权知识产权商业秘密等合法权利的内容 </view>
<view>2.2.3 未经他人许可发布传送传播涉及他人隐私个人信息或资料的内容但因使用本服务所默认生成并公布的软件使用信息除外 </view>
<view>2.2.4 发表传送传播骚扰广告信息及垃圾信息或含有任何性或性暗示的 </view>
<view>2.2.5 其他违反法律法规政策及公序良俗社会公德或干扰本服务正常运营和侵犯其他用户或第三方合法权益内容的信息 </view>
<view class="dp_con2">3.运营规范 </view>
<view>你使用本服务过程中不得从事下列行为 </view>
<view>3.1 提交发布虚假信息或冒充利用他人名义的 </view>
<view>3.2 诱导其他用户点击链接页面或分享信息的 </view>
<view>3.3 虚构事实隐瞒真相以误导欺骗他人的 </view>
<view>3.4 侵害他人名誉权肖像权知识产权商业秘密等合法权利的 </view>
<view>3.5 未经疯子读书书面许可利用微信帐号和任何服务以及第三方运营平台进行推广或互相推广的 </view>
<view>3.6 利用本软件及服务从事任何违法犯罪活动的 </view>
<view>3.7 制作发布与以上行为相关的方法工具或对此类方法工具进行运营或传播无论这些行为是否为商业目的 </view>
<view>3.8 其他违反法律法规规定侵犯其他用户合法权益干扰产品正常运营或疯子读书未明示授权的行为 </view>
<view class="dp_con2">4.对自己行为负责 </view>
<view>
你充分了解并同意你必须为自己注册帐号下的一切行为负责包括你所发表的任何内容以及由此产生的任何后果你应对本服务中的内容自行加以判断并承担因使用内容而引起的所有风险包括因对内容的正确性完整性或实用性的依赖而产生的风险同时你应在本协议约定的范围内使用本服务因你利用本服务进行违反法律法规本协议专项规则的行为所产生的风险亦由你自行承担疯子读书无法且不会对因前述风险而导致的任何损失或损害承担责任
</view>
<view class="dp_con1">管理规范 </view>
<view class="dp_con2">
1.
疯子读书有权根据国家相关法规政策按照本协议的规定对你发布传送传播储存的内容进行审查以保证用户使用本服务的行为不违反法律法规及社会公共道德准则不侵犯疯子读书或第三方的合法权益不带有诋毁疯子读书及其产品形象的要素但并不因为疯子读书的审核而减轻你自身使用本服务时应承担的责任由此产生的一切责任和后果仍由你单独承担
</view>
<view class="dp_con2">
2.
如果疯子读书发现或收到他人举报或投诉用户违反本协议约定的疯子读书有权不经通知随时对相关内容进行删除屏蔽并视行为情节对违规帐号处以包括但不限于警告限制或禁止使用部分或全部服务帐号封禁直至注销的处罚并公告处理结果
</view>
<view class="dp_con2">
3.
你理解并同意疯子读书有权依合理判断对违反有关法律法规或本协议规定的行为进行处罚对违法违规的任何用户采取适当的法律行动并依据法律法规保存有关信息向有关部门报告等用户应独自承担由此而产生的一切法律责任
</view>
<view class="dp_con2">4. 你理解并同意因你违反本协议或相关服务条款的规定导致或产生第三方主张的任何索赔要求或损失你应当独立承担责任疯子读书因此遭受损失的你也应当一并赔偿 </view>
<view class="dp_con1">知识产权声明 </view>
<view class="dp_con2">1.
疯子读书是本软件的知识产权权利人本软件的一切著作权商标权专利权商业秘密等知识产权以及与本软件相关的所有信息内容包括但不限于文字图片音频视频图表界面设计版面框架有关数据或电子文档等均受中华人民共和国法律法规和相应的国际条约保护疯子读书享有上述知识产权但相关权利人依照法律规定应享有的权利除外
</view>
<view class="dp_con2">2. 未经疯子读书或相关权利人书面同意你不得为任何商业或非商业目的自行或许可任何第三方实施利用转让上述知识产权 </view>
<view class="dp_con1">终端安全责任 </view>
<view class="dp_con2">1.
你理解并同意本软件同大多数互联网软件一样可能会受多种因素影响包括但不限于用户原因网络服务质量社会环境等也可能会受各种安全问题的侵扰包括但不限于他人非法利用用户资料进行现实中的骚扰用户下载安装的其他软件或访问的其他网站中可能含有病毒木马程序或其他恶意程序威胁你的终端设备信息和数据安全继而影响本软件的正常使用等因此你应加强信息安全及个人信息的保护意识注意密码保护以免遭受损失
</view>
<view class="dp_con2">2. 你不得制作发布使用传播用于窃取微信帐号及他人个人信息财产的恶意程序 </view>
<view class="dp_con2">3. 维护软件安全与正常使用是疯子读书和你的共同责任疯子读书将按照行业标准合理审慎地采取必要技术措施保护你的终端设备信息和数据安全但是你承认和同意疯子读书并不能就此提供完全保证 </view>
<view class="dp_con2">4. 在任何情况下你不应轻信借款索要密码或其他涉及财产的网络信息涉及财产操作的请一定先核实对方身份并请经常留意疯子读书有关防范诈骗犯罪的提示 </view>
<view class="dp_con1">未成年人保护 </view>
<view class="dp_con2">疯子读书非常重视对未成年人个人信息的保护若你是18周岁以下的未成年人在使用疯子读书的服务前应事先取得你监护人的书面同意</view>
<view class="dp_con1">十一其他 </view>
<view class="dp_con2">1.
你使用本软件即视为你已阅读并同意受本协议的约束疯子读书有权在必要时修改本协议条款你可以在本软件的最新版本中查阅相关协议条款本协议条款变更后如果你继续使用本软件即视为你已接受修改后的协议如果你不接受修改后的协议应当停止使用本软件
</view>
<view class="dp_con2">2. 本协议签订地为中华人民共和国天津市南开区 </view>
<view class="dp_con2">3. 本协议的成立生效履行解释及纠纷解决适用中华人民共和国大陆地区法律不包括冲突法 </view>
<view class="dp_con2">4. 若你和疯子读书之间发生任何纠纷或争议首先应友好协商解决协商不成的你同意将纠纷或争议提交本协议签订地有管辖权的人民法院管辖 </view>
<view class="dp_con2">5. 本协议所有条款的标题仅为阅读方便本身并无实际涵义不能作为本协议涵义解释的依据</view>
<view class="dp_con2">6. 本协议条款无论因何种原因部分无效或不可执行其余条款仍有效对双方具有约束力正文完 </view>
<view>天津众妙之门科技有限公司 </view>
</view>
</view>
</template>
<style scoped lang="less">
.dp_title {
font-size: 36rpx;
margin-bottom: 50rpx;
color: #555;
text-align: center;
font-weight: bold;
}
.dp_content {
max-height: 1000rpx;
overflow-y: scroll;
font-size: 28rpx;
color: #555;
line-height: 45rpx;
.dp_con1 {
font-weight: bold;
font-size: 32rpx;
margin-top: 20rpx;
margin-bottom: 20rpx;
}
.dp_con2 {
font-size: 30rpx;
margin-top: 10rpx;
margin-bottom: 10rpx;
}
}
</style>

View File

@@ -0,0 +1,191 @@
<template>
<view>
<view class="dp_title" v-html="yszcText.title"></view>
<view class="dp_content" v-html="yszcText.content"></view>
<!-- <view class="dp_title">隐私策略</view>
<view class="dp_content">
<view class="dp_con1" style="margin-top: 0;">隐私保护</view>
<view class="dp_con2">
1.
用户同意个人隐私信息是指那些能够对用户进行个人辨识或涉及个人通信的信息包括下列信息用户真实姓名身份证号手机号码IP地址而非个人隐私信息是指用户对本服务的操作状态以及使用习惯等一些明确且客观反映在本公司服务器端的基本记录信息和其他一切个人隐私信息范围外的普通信息以及用户同意公开的上述隐私信息
</view>
<view class="dp_con2">
2.
保护用户(特别是未成年人)的隐私是疯子读书的一项基本政策疯子读书将对用户所提供的资料进行严格的管理及保护并使用相应的技术防止用户的个人资料丢失被盗用或遭篡改保证不对外公开或向第三方提供单个用户的注册资料及用户在使用网络服务时存储在疯子读书的非公开内容但下列情况除外
</view>
<view>2.1 事先获得用户的明确授权</view>
<view>2.2 根据有关的法律法规要求</view>
<view>2.3 按照相关政府主管部门的要求</view>
<view>2.4 为维护社会公众的利益</view>
<view>2.5 为维护疯子读书的合法权益</view>
<view class="dp_con2">
3. 任何时候如果您对我们的隐私策略有疑问请利用电子邮件huashengxiangyue@163.com联系我们我们会尽一切努力请合理适当的范围内立即改善这个问题
</view>
<view class="dp_con1">第三方信息共享清单</view>
<view class="dp_con2">aliPay SDK支付宝支付sdk</view>
<view class="dp_con2">共享的信息收款账户信息订单数据信息</view>
<view class="dp_con2">wxpay SDK 微信支付sdk</view>
<view class="dp_con2">共享的信息收款账户信息订单数据信息</view>
<view class="dp_con1">我们获取的您的信息</view>
<view>您使用服务时我们可能收集已经经过您授权获取或主动填写的如下信息</view>
<view class="dp_con2">1日志信息指您使用我们的服务时系统可能通过自动采集的技术信息包括</view>
<view>1.1 获取设备信息或获取已安装APP信息例如您的移动设备网页浏览器或用于接入我们服务的其他程序所提供的配置信息您的IP地址和移动设备所用的版本和设备识别码</view>
<view>1.2 您通过我们的服务进行通讯的信息例如曾通讯的账号</view>
<view>1.3 您通过我们的服务分享的内容所包含的信息元数据例如拍摄或上传的共享照片或录像的日期时间或地点等</view>
<view class="dp_con2">2位置信息指您开启设备定位功能并使用我们基于位置提供的相关服务时收集的有关您位置的信息包括</view>
<view>2.1 您通过具有定位功能的移动设备使用我们的服务时通过GPS或WiFi等方式收集的您的地理位置信息用于 健康超市收货 提供位置信息</view>
<view>
2.2 您或其他用户提供的包含您所处地理位置的实时信息例如您提供的账户信息中包含的您所在地区信息您上传的显示您当前或曾经所处地理位置的共享信息您或其他人共享的照片包含的地理标记信息
</view>
<view>2.3 您可以通过关闭定位功能停止对您的地理位置信息的收集</view>
<view class="dp_con2">
3. 设备信息包括
</view>
<view>3.1 在使用疯子读书时可能获取并上传您的的设备信息Android_ID网络设备硬件地址MAC地址获取手机状态获取其中的设备序列号用于验证手机型号及安卓版本</view>
<view>3.2 获取OAID用以标记设备唯一性</view>
<view>3.3 获取定位信息用于应用获取您的位置信息提供应用服务</view>
<view>3.4 获取软件安装列表用以第三方应用服务或链接</view>
<view class="dp_con2">4. 根据相关法律法规及国家标准在以下情形中我们可能会依法收集并使用您的个人信息无需征得您的同意:</view>
<view>4.1 与国家安全国防安全直接相关的</view>
<view>4.2 与公共安全公共卫生重大公共利益直接相关的</view>
<view>4.3 与犯罪侦查起诉审判和判决执行等直接相关的</view>
<view>4.4 出于维护您或他人的生命财产等重大合法权益但又很难得到您本人同意的</view>
<view>4.5 所收集的个人信息是您自行向社会公众公开的</view>
<view>4.6 根据您的要求签订和履行合同所必需的</view>
<view>4.7 用于维护所提供的服务的安全稳定运行所必需的例如发现处置服务的故障</view>
<view>4.8 法律法规规定的其他情形</view>
<view class="dp_con1">. 我们可能如何使用信息</view>
<view>我们可能将在向您提供服务的过程之中所收集的信息用作下列用途</view>
<view class="dp_con2">1. 向您提供服务</view>
<view class="dp_con2">2. 在我们提供服务时用于身份验证客户服务安全防范等用途确保我们向您提供的产品和服务的安全性</view>
<view class="dp_con2">3. 帮助我们设计新服务改善我们现有服务</view>
<view class="dp_con2">4. 让您参与有关我们产品和服务的调查</view>
<view class="dp_con1">. 您如何访问和控制自己的个人信息</view>
<view>我们非常重视您对个人信息的管理并尽全力保护您对于您个人信息的查询访问修改删除撤回同意授权注销账号功能的相关权利以使您有能力保障您的隐私和信息安全</view>
<view class="dp_con2">1. 您可以在设备本身操作系统中关闭GPS地理位置摄像头麦克风相册权限改变同意范围或撤回您的授权撤回授权后我们将不再收集与这些权限相关信息
</view>
<view class="dp_con2">
2.
特定的业务功能和服务将需要您的信息才能得以完成当您撤回同意或授权后我们无法继续为您提供撤回同意或授权所对应的功能和服务也不再处理您相应的个人信息但您撤回同意或授权的决定不会影响此前基于您的授权而开展的个人信息处理
</view>
<view class="dp_con2">3. 访问更正您的个人信息您可以查询访问您的头像用户名昵称等信息</view>
<view class="dp_con2">
4. 注销账号账号注销采用客服注销的形式注销流程先APP内提交注销账户操作然后联系官方客服客服提交注销申请路径我的注销账户客服电话022-24142321
</view>
<view class="dp_con1">信息安全</view>
<view>我们仅在本隐私协议所述目的所必需的期间和法律法规要求的时限内保留您的个人信息</view>
<view class="dp_con2">
1. 我们非常重视您个人信息的安全将努力采取合理的安全措施包括技术方面和管理方面来保护您的个人信息防止您提供的个人信息被不当使用或未经授权的情况下被访问公开披露使用修改损坏丢失或泄漏
</view>
<view class="dp_con2">2. 我们会使用加密技术匿名化处理及相关合理可行的手段保护您的个人信息并使用安全保护机制防止您的个人信息遭到恶意攻击</view>
<view class="dp_con2">3. 我们依照法律法规的规定将在境内运营过程中收集和产生的您的个人信息存储于中华人民共和国境内目前我们不会将上述信息传输至境外</view>
<view class="dp_con2">
4.
您知悉并理解您接入我们的服务所用的系统和通讯网络有可能因我们可控范围外的因素而出现问题因此我们强烈建议您采取积极措施保护个人信息的安全包括但不限于使用复杂密码定期修改密码不将自己的账号密码及相关个人信息透露给他人
</view>
<view class="dp_con2">
5.
我们会制定应急处理预案并在发生用户信息安全事件时立即启动应急预案努力阻止这些安全事件的影响和后果扩大一旦发生用户信息安全事件泄露丢失我们将按照法律法规的要求及时向您告知安全事件的基本情况和可能的影响我们已经采取或将要采取的处置措施您可自主防范和降低风险的建议对您的补救措施我们将及时将事件相关情况以推送通知短信及相关形式告知您难以逐一告知时我们会采取合理有效的方式发布公告同时我们还将按照相关监管部门要求上报用户信息安全事件的处置情况
</view>
<view class="dp_con1">知识产权</view>
<view class="dp_con2">1. 天津众妙之门科技有限公司系疯子读书的著作权人未经疯子读书许可用户不得对该软件进行反向工程reverse
engineer反向编译decompile或反汇编disassemble</view>
<view class="dp_con2">
2.
疯子读书提供的网络服务中包含的任何文本图片图形音频和/或视频资料均受版权商标和/或其它财产所有权法律的保护未经相关权利人同意上述资料均不得在任何媒体直接或间接发布播放出于播放或发布目的而改写或再发行或者被用于其他任何商业目的所有这些资料或资料的任何部分仅可作为私人和非商业用途而保存在用户终端内疯子读书不就由上述资料产生或在传送或递交全部或部分上述资料过程中产生的延误不准确错误和遗漏或从中产生或由此产生的任何损害赔偿以任何形式向用户或任何第三方负责
</view>
<view class="dp_con2">3. 疯子读书所有作品内容仅代表作者自己的立场和观点与疯子读书无关由作者本人承担一切法律责任</view>
</view> -->
</view>
</template>
<script>
import $http from '@/config/requestConfig.js';
export default {
data() {
return {
yhxyText: {},
yszcText: {},
};
},
//第一次加载
onLoad(e) {
this.getSettlement()
},
//页面显示
onShow() {
this.getSettlement()
},
//方法
methods: {
// 获取协议内容
getSettlement() {
this.$http
.post('sys/agreement/getPrivacyDetail')
.then(res => {
this.yszcText = res.privacy
this.yszcText.content = this.yszcText.content.replace(/<p>/g, '');
this.yszcText.content = this.yszcText.content.replace(/<\/p>/g, '<br/>');
console.log(this.yszcText.content)
}).catch((e) => {
console.log(e, 'e')
})
this.$http
.post('sys/agreement/getUserDetail')
.then(res => {
this.yhxyText = res.user
}).catch((e) => {
console.log(e, 'e')
})
},
},
};
</script>
<style scoped lang="less">
.dp_title {
font-size: 36rpx;
margin-bottom: 50rpx;
color: #555;
text-align: center;
font-weight: bold;
}
.dp_content {
max-height: 1000rpx;
overflow-y: scroll;
font-size: 28rpx;
color: #555;
line-height: 45rpx;
.dp_con1 {
font-weight: bold;
font-size: 32rpx;
margin-top: 20rpx;
margin-bottom: 20rpx;
}
.dp_con2 {
font-size: 30rpx;
margin-top: 10rpx;
margin-bottom: 10rpx;
}
}
</style>

View File

@@ -15,13 +15,13 @@
<image :src="productInfo.images" mode="aspectFill" class="imageradius bookinfoimage"></image>
<view class="bookInfo-inner">
<span class="title">{{productInfo.name}}</span>
<span class="author">作者{{productInfo.authorName}}</span>
<span class="author" v-if="productInfo.authorName!=''">作者{{productInfo.authorName}}</span>
<!-- <view class="description">{{productInfo.bookdesc}}</view> -->
<view class="ting-du-mai">
<view class="ting-du-mai-item" @click="toOtherPage(1,productInfo)">听书</view>
<view class="ting-du-mai-item" @click="toOtherPage(2,productInfo)">读书打卡</view>
<view class="ting-du-mai-item" @click="toOtherPage(3,productInfo)">立即购买</view>
<view class="ting-du-mai-item" v-if="productInfo.canListen" @click="toOtherPage(1,productInfo)">听书</view>
<view class="ting-du-mai-item" v-if="productInfo.clockIn == 1" @click="toOtherPage(2,productInfo)">读书打卡</view>
<view class="ting-du-mai-item" v-if="productInfo.bookType == 0" @click="toOtherPage(3,productInfo)">立即购买</view>
</view>
</view>

View File

@@ -171,17 +171,17 @@ import { data } from 'jquery';
status:3,
shupingList:[],
bfaid:null,
commentsTabs: [{
commentsTabs: [ {
name: '书集',
value: 3
},{
name: '最新',
value: 1
}, {
name: '最热',
value: 2
}, {
name: '书集',
value: 3
}],
commentsListTab: 1,
commentsListTab: 3,
newestpage: 1,
hotestpage: 1,
booksetpage: 1,
@@ -221,7 +221,7 @@ import { data } from 'jquery';
this.windowWidth = uni.getSystemInfoSync().windowWidth;
console.log(e,'onload')
// this.bookid = e.bookid
this.getBookList(1, false)
this.getBookList(3, false)
},
computed:{
...mapState(['userInfo']),

View File

@@ -10,7 +10,7 @@
<view style="font-weight: bold;margin-bottom: 30rpx;">
{{bookMessage.name}}
</view>
<view style="color: #9b9b9b;font-size: 28rpx;margin:20rpx 0 0 0;max-width: 400rpx;line-height: 38rpx;">
<view v-if="bookMessage.bookType==0" style="color: #9b9b9b;font-size: 28rpx;margin:20rpx 0 0 0;max-width: 400rpx;line-height: 38rpx;">
<p @click="onAuCHJump(bookMessage.author.id,1)" style="margin-bottom: 20rpx;">
{{bookMessage.author.authorName}} [] >
</p>
@@ -18,7 +18,7 @@
{{item.title}} >
</p> -->
</view>
<view class="tags">
<view class="tags" v-if="bookMessage.bookType==0">
<uni-tag class="tag" @click="toMore()" :inverted="true" text="书评" type="success"></uni-tag>
<uni-tag @click="gotoListen()" class="tag" v-if="bookMessage.canListen" :inverted="true" text="听书"
type="primary"></uni-tag>
@@ -28,7 +28,16 @@
<uni-tag @click="goJiangShu()" v-if="bookMessage.teachIn == 1" class="tag" :inverted="true"
text="讲书" type="error"></uni-tag>
</view>
<view class="buy" v-if="!bookMessage.isBuy">
<!-- <view class="tags" v-if="bookMessage.bookType==1||bookMessage.bookType==2">
<uni-tag class="tag" @click="onPageJump('../comments/comments?bookid=' + bookId)" :inverted="true" text="书评" type="success"></uni-tag>
<uni-tag @click="onPageJump('../listen/listen?bookid='+ bookId)" class="tag" v-if="bookMessage.canListen" :inverted="true" text="听书"
type="primary"></uni-tag>
<uni-tag @click="onPageJump('../clock/clock?bookid='+ bookId)" v-if="bookMessage.clockIn == 1" class="tag" :inverted="true" text="打卡"
type="warning"></uni-tag>
<uni-tag @click="onPageJump('../talkBook/talkBookML?bookid='+ bookId)" v-if="bookMessage.teachIn == 1" class="tag" :inverted="true"
text="讲书" type="error"></uni-tag>
</view> -->
<view class="buy" v-if="!bookMessage.isBuy&&bookMessage.bookType==0">
<view class="btn" @click="goBuy">
立即购买
</view>
@@ -193,14 +202,15 @@
// .post('book/book/appinfo/' + this.bookId + '/' + this.userInfo.id)
.post('book/book/getBookInfo', {
'bookId': this.bookId,
// 'bookId': this.bookId,
'userId': this.userInfo.id
})
.then(res => {
console.log('书详细', res.book)
this.bookMessage = res.book
this.bokMesDet.bookId = res.book.id
this.bokMesDet.bookName = res.book.name,
this.bokMesDet.images = res.book.images
this.bokMesDet.bookName = res.book.name
this.bokMesDet.images = res.book.images
this.isBuy = res.book.isBuy
this.freeChapterCount = res.book.freeChapterCount
this.bokMesDet.userId = this.userInfo.id
@@ -285,6 +295,7 @@
'userId': this.userInfo.id,
'bookId': this.bookId
}
checkBookRight(data,res=>{
console.log(res)
if(res.success){
@@ -408,9 +419,6 @@
},
};
</script>

View File

@@ -5,6 +5,7 @@
<!-- <z-nav-bar title="我的图书"></z-nav-bar> -->
<view class="home_bg">
<view class="" style=" ">
<view style="height: 80rpx"></view>
<view class="icon_hua">
<image src="../../static/icon/home_icon_3.png" mode="aspectFit" class="icon_hua_1"></image>
</view>
@@ -101,6 +102,18 @@
<text> </text>
</view>
</view>
<view class="item " >
<!-- <u-icon name="chat" color="#fcbd71" size="24"></u-icon> -->
<view class="" v-if="item.relationId != null && item.relationId != 0" @click="goGuji(item)">
<image src="../../static/icon/home6.png" mode="aspectFit"></image>
</view>
<view class="" v-else @click="noOp()">
<image class="gray" src="../../static/icon/home6.png" mode="aspectFit"></image>
</view>
<view class="v1">
<text> </text>
</view>
</view>
</view>
</view>
</view>
@@ -353,6 +366,12 @@
url: '../talkBook/talkBookDetail?bookId='+ val.id
})
},
// 跳转到古籍
goGuji(val){
uni.navigateTo({
url: '../eBook/bookContent?Id='+ val.relationId
})
},
// 跳转到打卡
goDaKa(val){
uni.navigateTo({
@@ -392,7 +411,7 @@
image{
display: block; height: 108rpx;
}
.v1{margin-top: -30rpx;}
.v1{margin-top: -10rpx;}
}
}
.author{
@@ -401,7 +420,7 @@
.info{width:200rpx;
image{width:100% ; height: 280rpx; border-radius: 20rpx;}
}
.icons{ margin-top: 10rpx;
.icons{ margin-top: 10rpx;margin-left: -10rpx;
text{font-size: 26rpx; margin-top: -10rpx; color: #999;}
}
}
@@ -469,7 +488,7 @@
}
.bookName {
margin-top: 10rpx;
margin-top: 30rpx;
display: block;
white-space: nowrap;
// font-weight: bold;

View File

@@ -3,7 +3,7 @@
<!-- <z-nav-bar backState="2000" title="首页"></z-nav-bar> -->
<view class="home_bg">
<view class="" style=" ">
<view style="height: 60rpx"></view>
<view class="icon_hua">
<image src="../../static/icon/home_icon_1.png" mode="aspectFit" class="icon_hua_1"></image>
</view>

View File

@@ -1,11 +1,11 @@
<template>
<!--父组件-->
<view class="container" style="padding-bottom: 10rpx;">
<!-- <view class="mini"></view> -->
<view>
<z-nav-bar title="讲书目录"></z-nav-bar>
<!-- 基本信息 -->
<!-- 基本信息 -->
<view class="book_neir">
<view class="flexbox info">
<view class="item">
@@ -31,13 +31,20 @@
{{item.title}} >
</p>
</view>
<view class="tags">
<view class="tags" v-if="bookInfo.bookType==0">
<uni-tag class="tag" @click="toMore()" :inverted="true" text="书评"
type="success"></uni-tag>
<!-- 1:打卡2不打卡 -->
<uni-tag @click="gotoclock()" v-if="bookInfo.clockIn == 1" class="tag" :inverted="true"
text="签到" type="warning"></uni-tag>
</view>
<view class="tags" v-if="bookInfo.bookType==1||bookInfo.bookType==2">
<uni-tag class="tag" @click="onPageJump('../comments/comments?bookid=' + bookid)" :inverted="true" text="书评"
type="success"></uni-tag>
<!-- 1:打卡2不打卡 -->
<uni-tag @click="onPageJump('../clock/clock?bookid='+ bookid)" v-if="bookInfo.clockIn == 1" class="tag" :inverted="true"
text="签到" type="warning"></uni-tag>
</view>
</view>
</view>
</view>
@@ -49,11 +56,17 @@
<view>
<view @click="toDetail(item)" class="flexbox muluitem">
<span>{{item.title}}</span>&nbsp;&nbsp;
<view >
<uni-tag v-if="item.voices != ''" class="tag" size="small" :inverted="true" text="音频"
type="success" /></view>
<view ><uni-tag v-if="item.content != ''" class="tag" size="small" :inverted="true" text="文字"
type="primary" /></view>
<view>
<uni-tag v-if="item.voices != ''" class="tag" size="small" :inverted="true" text="音频"
type="success" />
<uni-tag v-if="item.images != ''" class="tag" size="small" :inverted="true" text="图片"
type="error" />
<uni-tag v-if="item.video != ''" class="tag" size="small" :inverted="true" text="视频"
type="warning" />
<uni-tag v-if="item.content != ''" class="tag" size="small" :inverted="true" text="文字"
type="primary" />
</view>
<!-- <image class="playingFig" src="/static/playingGif.gif" mode="aspectFill"></image> -->
</view>
</view>
@@ -61,17 +74,18 @@
<view style="width: 100%;">
<view v-if="status==0" style="text-align: center;">
<u-loading-icon style="display: inline-block;"></u-loading-icon>
<font style='vertical-align: super;margin-left: 10px;font-size: 26rpx;color: #909399;'>努力加载中</font>
<font style='vertical-align: super;margin-left: 10px;font-size: 26rpx;color: #909399;'>努力加载中
</font>
</view>
<view v-if="status==1">
<u-divider text="全部加载完成"></u-divider>
</view>
</view>
</view>
</view>
<u-divider v-else text="暂无讲书目录"></u-divider>
<music-play :playData="playData"></music-play>
<!-- 公共组件-每个页面必须引入 -->
<public-module></public-module>
<public-module></public-module>
<!-- <z-navigation></z-navigation> -->
</view>
</view>
@@ -98,19 +112,19 @@
data() {
return {
isBuy: false, // true 已购买false 未购买
playData: {},
playData: {},
bookInfo: {
author:{
authorName:''
author: {
authorName: ''
}
}, // 书籍详情
bookid: null, // 书籍id
status:3,
status: 3,
freeChapterCount: 0, // 免费章节数
libLIst: [], // 书籍目录
videoList: [], //音频文件
page:1,
totalPage:0,
page: 1,
totalPage: 0,
}
},
onPullDownRefresh() {
@@ -123,12 +137,12 @@
},
onReachBottom() {
// console.log('到底了',this.page+1 , this.totalPage)
if(this.page+1 <= this.totalPage){
if (this.page + 1 <= this.totalPage) {
this.page++
this.status = 0
this.getLibList()
}else{
} else {
this.status = 1
}
},
@@ -142,15 +156,15 @@
// 隐藏原生的tabbar
console.log(e, 'e')
uni.hideTabBar();
this.bookid = e.bookid
},
this.bookid = e.bookid
},
onShow() {
// this.libLIst = []
// this.page = 1
// this.totalPage = 0
this.getLibList()
this.getBookInfo()
},
computed: {
...mapState(['userInfo'])
@@ -165,20 +179,20 @@
'userId': this.userInfo.id,
'bookId': this.bookid
}
checkBookRight(data,res=>{
checkBookRight(data, res => {
console.log(res)
if(res.success){
if (res.success) {
uni.navigateTo({
url: '../comments/comments?bookid=' + this.bookid,
});
}else{
} else {
uni.showToast({
title:'购买本书后方可查看此内容!',
icon:'none'
title: '购买本书后方可查看此内容!',
icon: 'none'
})
}
})
},
// 去打卡
gotoclock() {
@@ -188,7 +202,7 @@
},
getBookInfo() {
// 获取书本基本信息
this.$http
this.$http
.post('book/book/getBookInfo', {
'bookId': this.bookid,
'userId': this.userInfo.id
@@ -212,7 +226,7 @@
toDetail(item) {
console.log('点击了', item)
uni.navigateTo({
url: './talkBookDetail?teachId=' + item.teachId +"&bookId="+item.bookId
url: './talkBookDetail?teachId=' + item.teachId + "&bookId=" + item.bookId
});
},
@@ -228,18 +242,18 @@
.post('book/teach/getBookTeachItems', {
'bookId': this.bookid,
'limit': 20,
'page': this.page
'page': this.page
})
.then(res => {
if (res.code == 0) {
console.log( '章节目录',res)
console.log('章节目录', res)
if (res.page.records.length > 0) {
this.libLIst = this.libLIst.concat(res.page.records)
this.status = 3
this.totalPage = res.page.pages
if(this.totalPage == res.page.current){
this.totalPage = res.page.pages
if (this.totalPage == res.page.current) {
this.status = 1
}
}
} else {
this.libLIst = []
this.totalPage = 0
@@ -250,18 +264,29 @@
})
},
// 跳转
onPageJump(url) {
uni.navigateTo({
url: url
});
},
},
}
</script>
<style lang="less">
.muluitem{
span{
.muluitem {
span {
white-space: nowrap;
overflow-x: hidden;
text-overflow: ellipsis;
}
}
.playingFig {
width: 100rpx;
height: 100rpx;

View File

@@ -15,58 +15,79 @@
<!-- <view class="title" :class="{ active: type == 2000 }" @click="type = 2000">验证码登录/注册</view>
<view class="title" :class="{ active: type == 1000 }" @click="type = 1000">密码登录</view> -->
</view>
<view class="flexbox" style=" margin-top: 20rpx;">
<view class="input_tit" style="margin-top: 0; margin-right: 20rpx;">手机号</view>
<view class="quhao">
<uni-data-select class="myselect" placeholder="选择区号" v-model="quCode" :localdata="quCodeList" style="height: 30rpx !important;"
@change="quChange"></uni-data-select>
<!-- 验证码登录 -->
<view v-if="type == 2000">
<view class="flexbox" style=" margin-top: 50rpx;">
<view class="input_tit emaPho" style="margin-top: 0; margin-right: 20rpx;">
<view @click="brand=3000" :class="{ active: brand == 3000 }">手机号</view>
<span>/</span>
<view @click="brand=4000" :class="{ active: brand == 4000 }">邮箱</view>
</view>
</view>
</view>
<!-- 带区号 -->
<view class="flexbox " style="margin:36rpx 0; justify-content: space-between;">
<view class="triangle borderBottom phoneNumberInput" style="width: 150rpx;">
<input type="number" v-model="quCode" placeholder="区号" placeholder-class="grey" />
<!-- 带区号手机号 -->
<view class="flexbox" v-if="brand == 3000" style="margin:36rpx 0; justify-content: space-between;">
<!-- <view class="triangle borderBottom phoneNumberInput" style="width: 150rpx;">
<input type="number" v-model="quCode" placeholder="区号" placeholder-class="grey" />
</view> -->
<view class="quhao">
<uni-data-select class="myselect" placeholder="请选择区号" v-model="quCode" :localdata="quCodeList"
style="height: 30rpx !important;" @change="quChange"></uni-data-select>
</view>
<view class="triangle borderBottom phoneNumberInput"
:clasfs="[type == 1000 ? 'left_triangle': 'right_triangle']">
<input type="number" v-model="phone" @input="onInput" placeholder="请输入您的手机号"
placeholder-class="grey" />
</view>
</view>
<view class="triangle borderBottom phoneNumberInput"
<!-- 不带区号 -->
<!-- <view class="triangle borderBottom phoneNumberInput input_box"
:clasfs="[type == 1000 ? 'left_triangle': 'right_triangle']">
<input type="number" v-model="phone" @input="onInput" placeholder="请输入您的手机号"
placeholder-class="grey" />
<input type="number" v-model="phone" @input="onInput" placeholder="请输入您的手机号" placeholder-class="grey" />
</view> -->
<!-- 邮箱 -->
<view class="input_box" v-if="brand == 4000">
<input v-model="email" placeholder="请输入您的邮箱" placeholder-class="grey" @input="onInput" />
</view>
<view class="input_tit">验证码</view>
<view class="input_box">
<input v-model="code" placeholder="请输入您的验证码" placeholder-class="grey" @input="onInput" maxlength="6"
@confirm="onSubmit" />
<button class="active" @click="onSetCode">{{ codeText }}</button>
</view>
</view>
<!-- 不带区号 -->
<!-- <view class="triangle borderBottom phoneNumberInput input_box"
:clasfs="[type == 1000 ? 'left_triangle': 'right_triangle']">
<input type="number" v-model="phone" @input="onInput" placeholder="请输入您的手机号" placeholder-class="grey" />
</view> -->
<view class="input_tit" v-if="type == 1000">密码</view>
<view class="input_box" v-if="type == 1000">
<input class="input_item" v-model="password" @input="onInput" :password="!isSee" placeholder="请输入密码"
placeholder-class="grey" @confirm="onSubmit" />
<image v-if="isSee" src="../../static/icon/ic_logon_display.png" mode="aspectFit"
@click="isSee = false">
</image>
<image v-else-if="!isSee" src="../../static/icon/ic_logon_hide.png" mode="aspectFit"
@click="isSee = true">
</image>
<!-- 密码登录 -->
<view v-if="type == 1000">
<!-- 手机号/邮箱 -->
<view class="input_tit" style=" margin-top: 80rpx;">手机号 / 邮箱</view>
<view class="input_box">
<input v-model="phoneEmail" placeholder="请输入您的手机号或者邮箱" placeholder-class="grey" @input="onInput" />
</view>
<view class="input_tit">密码</view>
<view class="input_box">
<input class="input_item" v-model="password" @input="onInput" :password="!isSee" placeholder="请输入密码"
placeholder-class="grey" @confirm="onSubmit" />
<image v-if="isSee" src="../../static/icon/ic_logon_display.png" mode="aspectFit"
@click="isSee = false">
</image>
<image v-else-if="!isSee" src="../../static/icon/ic_logon_hide.png" mode="aspectFit"
@click="isSee = true">
</image>
</view>
</view>
<view class="input_tit" v-if="type == 2000">验证码</view>
<view class="input_box" v-if="type == 2000">
<input v-model="code" placeholder="请输入您的验证码" placeholder-class="grey" @input="onInput" maxlength="6"
@confirm="onSubmit" />
<button class="active" @click="onSetCode">{{ codeText }}</button>
</view>
<view class="protocol_box">
<view class="select" :class="{active: agree}" @click="agree = !agree"></view>
我已同意
<!-- <text @click="plus.runtime.openURL('https://main.nuttyreading.com/agreement.html')">用户协议</text> -->
<!-- <text @click="onPageJump('/pages/user/protocol')">用户协议</text> -->
<span class="highlight" @click="showXieyi('user')">用户协议</span>
<span class="highlight" @click="yhxyShow=true">用户协议</span>
<span class="highlight" @click="showXieyi('privacy')">隐私协议</span>
<span class="highlight" @click="yszcShow=true">隐私协议</span>
<!-- <text @click="onPageJump('/pages/user/protocol')">隐私协议</text>-->
</view>
<view class="btn_box">
@@ -93,6 +114,11 @@
</view>
</view>
<view class="youKeL">
<view @click="onPageJump('/pages/user/visitor')">免登陆体验</view>
</view>
<z-popup v-model="HealthOpen" type="center" :hideOnBlur="false">
<view class="popup_box">
<view class="popup_title">
@@ -138,14 +164,22 @@
</view> -->
<!-- #endif -->
<u-popup :show="xieyiShow" :round="10" @close="xieyiShow=false">
<u-popup :show="yhxyShow" title='用户协议' :round="10" @close="yhxyShow=false">
<view class="tanchu">
<view class="dp_title">{{xieyi.title}}</view>
<view style="max-height: 1000rpx;overflow-y: scroll;">
<view v-html="xieyi.Content"></view>
</view>
<view class="dp_title" v-html="yhxyText.title"></view>
<view class="dp_content" v-html="yhxyText.content"></view>
<!-- <yhxyPage></yhxyPage> -->
</view>
</u-popup>
<u-popup :show="yszcShow" title='隐私政策' :round="10" @close="yszcShow=false">
<view class="tanchu">
<view class="dp_title" v-html="yszcText.title"></view>
<view class="dp_content" v-html="yszcText.content"></view>
<!-- <yszcPage></yszcPage> -->
</view>
</u-popup>
</view>
</view>
@@ -154,9 +188,12 @@
<script>
import $http from '@/config/requestConfig.js';
import md5 from '@/plugins/md5';
// import yhxyPage from '@/pages/agreement/yhxyPage.vue';
// import yszcPage from '@/pages/agreement/yszcPage.vue';
import localuserxieyi from '@/static/json/userAndyinsiP.json'
import localyinsixieyi from '@/static/json/yinsiP.json'
// import localuserxieyi from '@/static/json/userAndyinsiP.json'
// import localyinsixieyi from '@/static/json/yinsiP.json'
var clear;
import {
mapState,
@@ -164,14 +201,21 @@
} from 'vuex';
import socket from '@/config/socket';
export default {
// components: {
// yhxyPage,
// yszcPage
// },
data() {
return {
type: 2000,
brand: 3000,
isSee: false,
code: '',
// phone: '15022449475',
// phone: '18047689535',
phone: '',
email: '',
phoneEmail: '',
password: '',
//验证码
codeText: '获取验证码',
@@ -189,11 +233,10 @@
health_phone: '',
health_password: '',
isSee_H: false,
xieyiShow: false,
xieyi: {
title: '',
Content: ''
},
yhxyShow: false,
yszcShow: false,
yhxyText: {},
yszcText: {},
quShow: false,
quCodeList: [], // 国家区域码
quCode: 86,
@@ -215,6 +258,7 @@
//页面显示
onShow() {
this.getCountyCode()
this.getSettlement()
},
//方法
methods: {
@@ -236,7 +280,7 @@
// this.quCodeList = res.baseAreas
this.quCodeList = res.baseAreas.map(item => {
let obj = {
'text': item.title,
'text': item.title + ' (+' + item.code + ')',
'value': item.code,
}
return obj
@@ -250,6 +294,35 @@
console.log(e, 'e')
});
},
// 获取协议内容
getSettlement() {
this.$http
.post('sys/agreement/getPrivacyDetail')
.then(res => {
this.yszcText = res.privacy
this.yszcText.content = this.yszcText.content.replace(/<h5>/g,
'<view style="font-weight: bold;font-size: 32rpx;margin-top: 20rpx;margin-bottom: 20rpx;">'
);
this.yszcText.content = this.yszcText.content.replace(/<\/h5>/g, '</view>');
}).catch((e) => {
console.log(e, 'e')
})
this.$http
.post('sys/agreement/getUserDetail')
.then(res => {
this.yhxyText = res.user
this.yhxyText.content = this.yhxyText.content.replace(/<h5>/g,
'<view style="font-weight: bold;font-size: 32rpx;margin-top: 20rpx;margin-bottom: 20rpx;">'
);
this.yhxyText.content = this.yhxyText.content.replace(/<\/h5>/g, '</view>');
}).catch((e) => {
console.log(e, 'e')
})
},
quChange(e) {
console.log(e, 'e')
},
@@ -260,17 +333,8 @@
url: "/pages/home/shop/goodsDetail"
})
},
// 显示协议
showXieyi(str) {
if (str == 'user') {
this.xieyi = localuserxieyi
} else {
this.xieyi = localyinsixieyi
}
//console.log(localuserxieyi)
this.xieyiShow = true
},
onPageJump(url) {
uni.navigateTo({
url: url
@@ -316,23 +380,7 @@
if (this.readonly) {
return;
}
if (!this.phone) {
uni.showToast({
title: '请输入手机号',
icon: 'none'
});
return;
}
if (this.quCode == null || this.quCode == 86) { // 如果没选择国家code默认是中国大陆
if (!this.$base.phoneRegular.test(this.phone)) {
uni.showToast({
title: '手机格式不正确',
icon: 'none'
});
return;
}
console.log(this.quCode, '选择的区段')
}
if (!this.agree) {
uni.showToast({
title: '请先同意《用户协议》和《隐私协议》',
@@ -341,19 +389,66 @@
return;
}
this.$http
.get('book/user/sms/sendcode', {
phone: this.phone,
areaCode: this.quCode,
type: 2000
})
.then(res => {
if (this.brand == 3000) {
if (!this.phone) {
uni.showToast({
title: '验证码发送成功',
title: '请输入手机号',
icon: 'none'
});
this.getCodeState();
});
return;
}
if (this.quCode == null || this.quCode == 86) { // 如果没选择国家code默认是中国大陆
if (!this.$base.phoneRegular.test(this.phone)) {
uni.showToast({
title: '手机格式不正确',
icon: 'none'
});
return;
}
console.log(this.quCode, '选择的区段')
}
this.$http
.get('book/user/sms/sendcode', {
phone: this.phone,
areaCode: this.quCode,
type: 2000
})
.then(res => {
uni.showToast({
title: '验证码发送成功',
icon: 'none'
});
this.getCodeState();
});
} else {
if (!this.email) {
uni.showToast({
title: '请输入邮箱',
icon: 'none'
});
return;
}
if (!this.$base.mailRegular.test(this.email)) {
uni.showToast({
title: '邮箱格式不正确',
icon: 'none'
});
return;
}
this.$http
.get('book/user/getMailCaptcha', {
email: this.email
})
.then(res => {
uni.showToast({
title: '验证码发送成功',
icon: 'none'
});
this.getCodeState();
});
}
},
// 手机密码登录
@@ -365,24 +460,44 @@
});
return;
}
if (!this.phone) {
uni.showToast({
title: '请输入手机号',
icon: 'none'
});
return;
}
if (this.quCode == null || this.quCode == 86) {
if (!this.$base.phoneRegular.test(this.phone)) {
uni.showToast({
title: '手机格式不正确',
icon: 'none'
});
return;
}
}
let httpData = {};
if (this.type == 2000) {
if (this.brand == 3000) {
if (!this.phone) {
uni.showToast({
title: '请输入手机号',
icon: 'none'
});
return;
}
if (this.quCode == null || this.quCode == 86) {
if (!this.$base.phoneRegular.test(this.phone)) {
uni.showToast({
title: '手机格式不正确',
icon: 'none'
});
return;
}
}
httpData.tel = this.phone;
} else {
if (!this.email) {
uni.showToast({
title: '请输入邮箱',
icon: 'none'
});
return;
}
if (!this.$base.mailRegular.test(this.email)) {
uni.showToast({
title: '邮箱格式不正确',
icon: 'none'
});
return;
}
httpData.tel = this.email;
}
if (!this.code) {
uni.showToast({
title: '请输入验证码',
@@ -391,7 +506,7 @@
return;
}
httpData.code = this.code;
httpData.tel = this.phone;
this.$http
.get('book/user/registerOrLogin', httpData)
.then(res => {
@@ -409,6 +524,13 @@
}, 1000);
});
} else {
if (!this.phoneEmail) {
uni.showToast({
title: '请输入手机号或邮箱',
icon: 'none'
});
return;
}
if (!this.password) {
uni.showToast({
title: '请输入密码',
@@ -418,7 +540,7 @@
}
// httpData.password = md5(this.password);
httpData.password = this.password;
httpData.phone = this.phone;
httpData.phone = this.phoneEmail;
this.$http
.post('book/user/login', httpData)
.then(res => {
@@ -670,7 +792,7 @@
</script>
<style lang="scss" scoped>
@import '@/style/mixin.scss';
.myselect{height: 50rpx !important;}
.phoneNumberInput {
width: calc(100% - 160rpx);
// width: 100%;
@@ -692,9 +814,28 @@
.quhao {
height: 50rpx;
width: 180rpx;
width: 290rpx;
margin: 12rpx 15rpx 0 0;
}
.myselect {
height: 50rpx !important;
/deep/.uni-select {
font-size: 24rpx;
}
/deep/.uni-select__selector-item {
font-size: 24rpx;
}
}
.highlight {
color: $themeColor;
}
@@ -704,13 +845,6 @@
position: relative;
.dp_title {
font-size: 32rpx;
margin-bottom: 50rpx;
color: #555;
text-align: center;
font-weight: bold;
}
@@ -817,6 +951,28 @@
margin-top: 20rpx;
font-size: 34rpx;
font-weight: bold;
color: #54a966;
}
.emaPho {}
.emaPho>view {
display: inline-block;
padding: 10rpx 0;
color: #888;
}
.emaPho>view.active {
color: #54a966;
padding: 10rpx 10rpx;
border-bottom: 2px solid #54a966;
font-weight: bold;
}
.emaPho>span {
display: inline-block;
margin: 0 30rpx;
color: #ccc;
}
.input_box {
@@ -1019,9 +1175,61 @@
}
}
.dp_title {
font-size: 36rpx;
margin-bottom: 50rpx;
color: #555;
text-align: center;
font-weight: bold;
}
.dp_content {
max-height: 1000rpx;
overflow-y: scroll;
font-size: 28rpx;
color: #555;
line-height: 45rpx;
.dp_con1 {
font-weight: bold;
font-size: 32rpx;
margin-top: 20rpx;
margin-bottom: 20rpx;
}
// .dp_con2 {
// font-size: 30rpx;
// margin-top: 10rpx;
// margin-bottom: 10rpx;
// }
}
.qie_huan {
font-size: 26rpx;
margin: 20rpx 0 0 0;
text-align: center;
}
.comTy {
font-size: 28rpx;
line-height: 46rpx;
text-align: left;
}
.youKeL {
display: flex;
justify-content: center;
margin: 30rpx 0 0 0;
font-size: 26rpx;
color: #54a966;
view {
font-weight: bold;
border: 1px solid #54a966;
border-radius: 10rpx;
padding: 5rpx 15rpx;
}
}
</style>

View File

@@ -5,33 +5,92 @@
<z-nav-bar title="个人资料"></z-nav-bar>
<view class="tabulate">
<view class="per_list">
<text class="biaoti"></text>
<text class="neirong">{{userMes.tel}}</text>
<text class="biaoti">手机</text>
<text class="neirong">{{userMsage.tel}}</text>
<text class="marPer" v-if="userMsage.tel==''" @click="phoneShow = true;OpenClear()"
style="background-color: #ed901d;">点击绑定</text>
</view>
<view class="per_list">
<text class="biaoti">邮箱</text>
<text class="neirong">{{userMsage.email}}</text>
<text class="marPer" v-if="userMsage.email!=''" @click="emailShow = true;OpenClear()"
style="background-color: #ed901d;">点击绑定</text>
</view>
<view class="per_list per_list_arrow" @click="avatarShow = true">
<text class="biaoti" style="margin-top: 40rpx;">头像</text>
<text class="neirong" style="margin-top: 0;">
<image :src="userMes.avatar" class="per_mes_img"></image>
<image :src="userMsage.avatar" class="per_mes_img"></image>
</text>
</view>
<view class="per_list per_list_arrow" @click="nicknameShow = true">
<text class="biaoti">昵称</text>
<text class="neirong">{{userMes.nickname}}</text>
<text class="neirong">{{userMsage.nickname}}</text>
</view>
<view class="per_list per_list_arrow" @click="passwordShow = true">
<text class="biaoti">修改密码</text>
<text class="biaoti">密码</text>
<text v-if="userMsage.YNpass!=''" class="neirong">点击修改</text>
<text class="marPer" v-if="userMsage.YNpass!=''"
style="background-color: #92c78c;margin-right: 40rpx;">已设定</text>
<text v-if="userMsage.YNpass==''" class="neirong">去设置</text>
<text class="marPer" v-if="userMsage.YNpass==''"
style="background-color: #9d9d9d;margin-right: 40rpx;">未设定</text>
</view>
<view class="per_list per_list_arrow" @click="ageShow = true">
<text class="biaoti">年龄</text>
<text class="neirong">{{userMes.age}}</text>
<text class="neirong">{{userMsage.age}}</text>
</view>
<view class="per_list per_list_arrow" @click="sexShow = true">
<text class="biaoti">性别</text>
<text class="neirong" v-if="userMes.sex==1"></text>
<text class="neirong" v-if="userMes.sex==0"></text>
<text class="neirong" v-if="userMsage.sex==1"></text>
<text class="neirong" v-if="userMsage.sex==0"></text>
</view>
</view>
<!-- 手机 -->
<u-popup :show="phoneShow" :round="10" @close="phoneShow=false;">
<view class="tanchu">
<view class="dp_title">请输入手机号</view>
<view style="display: flex;">
<view class="quhao">
<uni-data-select class="quhaoSel" placeholder="请选择区号" v-model="userMes.quCode"
:localdata="quCodeList"></uni-data-select>
</view> <u--input v-model="userMes.phone" placeholder="请输入手机号" border="surround" clearable>
</u--input>
</view>
<view style="display: flex;">
<u--input v-model="userMes.phonecode" type="number" placeholder="请输入验证码" border="surround" clearable
style="margin-top: 20rpx;">
</u--input>
<button class="emPHCode" @click="onSetCode('phone')">{{ PhoneEmailNote }}</button>
</view>
<u-button color="linear-gradient(to right, #72d386, #317e42)" text="确定" @click="chosePhone()"
style="margin-top: 50rpx;"></u-button>
<view @click="phoneShow=false" class="dp_canBtn">
取消</view>
</view>
</u-popup>
<!-- 邮箱 -->
<u-popup :show="emailShow" :round="10" @close="emailShow=false;PhoneEmailNote = '获取验证码'">
<view class="tanchu">
<view class="dp_title">请输入邮箱</view>
<u--input v-model="userMes.email" placeholder="请输入邮箱" border="surround" clearable>
</u--input>
<view style="display: flex;">
<u--input v-model="userMes.emailcode" type="number" placeholder="请输入验证码" border="surround" clearable
style="margin-top: 20rpx;">
</u--input>
<button class="emPHCode" @click="onSetCode('email')">{{ PhoneEmailNote }}</button>
</view>
<u-button color="linear-gradient(to right, #72d386, #317e42)" text="确定" @click="choseEmail()"
style="margin-top: 50rpx;"></u-button>
<view @click="emailShow=false" class="dp_canBtn">
取消</view>
</view>
</u-popup>
<!-- 头像 -->
<u-popup :show="avatarShow" :round="10" @close="avatarShow=false">
<view class="tanchu">
@@ -91,15 +150,15 @@
<u-popup :show="passwordShow" :round="10" @close="cancelPass">
<view class="tanchu">
<view class="dp_title">请修改密码</view>
<u--input maxlength="8" v-model="userMes.password" placeholder="请输入新密码" :password="true" border="surround" clearable
@input="inputMethod(userMes.password)">
<u--input maxlength="8" v-model="userMiMa.password" placeholder="请输入新密码" :password="true"
border="surround" clearable @input="inputMethod(userMiMa.password)">
</u--input>
<view class="" style="font-size: 28rpx; color: #999;">
<p v-if="note != ''">{{note}}</p>
<p v-html="str2" style="margin-top: 10rpx;"></p>
</view>
<u--input maxlength="8" v-model="userMes.Repassword" placeholder="请再确认密码" :password="true" border="surround" clearable
style="margin-top: 20rpx;"></u--input>
<p v-if="passNote != ''">{{passNote}}</p>
<p v-html="passStr" style="margin-top: 10rpx;"></p>
</view>
<u--input maxlength="8" v-model="userMiMa.Repassword" placeholder="请再确认密码" :password="true"
border="surround" clearable style="margin-top: 20rpx;"></u--input>
<u-button color="linear-gradient(to right, #72d386, #317e42)" text="确定" @click="chosePassword()"
style="margin-top: 50rpx;"></u-button>
<view @click="cancelPass" class="dp_canBtn">取消</view>
@@ -115,6 +174,7 @@
<script>
import musicPlay from '@/components/music.vue'
import $http from '@/config/requestConfig.js';
var clear;
import {
mapState
} from 'vuex';
@@ -131,21 +191,45 @@
return {
playData: {},
userMes: {
quCode: '',
phone: '',
email: '',
id: '',
age: '',
sex: '',
nickname: '',
tel: '',
password: '',
Repassword: '',
oldName: '', // 老的用户名
},
userMsage: {
quCode: '',
phonecode: '',
phone: '',
emailcode: '',
email: '',
id: '',
age: '',
sex: '',
nickname: '',
tel: '',
YNpass: '',
oldName: '', // 老的用户名
},
userMiMa: {
id: '',
password: '',
Repassword: '',
},
readonly: false,
phoneShow: false,
emailShow: false,
avatarShow: false,
nicknameShow: false,
ageShow: false,
sexShow: false,
passwordShow: false,
fileAvatar: [],
quCodeList: [], // 国家区域码
sexList: [{
title: '男',
id: 1,
@@ -155,9 +239,10 @@
id: 0,
}
],
note: '',
str2: '',
passwordOk:false, // 密码是否满足规则
PhoneEmailNote: '获取验证码',
passNote: '',
passStr: '',
passwordOk: false, // 密码是否满足规则
};
},
//第一次加载
@@ -173,6 +258,7 @@
// 隐藏原生的tabbar
uni.hideTabBar();
this.getData();
this.getCountyCode()
},
components: {
musicPlay
@@ -180,8 +266,37 @@
//方法
methods: {
// 获取
getCountyCode() {
let that = this
// 获取国家区域编码
$http.request({
url: "book/baseArea/getAllBaseArea",
method: "POST", // POST、GET、PUT、DELETE具体说明查看官方文档
data: {},
header: { //默认 无 说明:请求头
'Content-Type': 'application/json'
},
})
.then(res => {
// console.log(res,'区域码')
if (res.code == 0 && res.baseAreas.length > 0) {
that.quCodeList = res.baseAreas.map(item => {
let obj = {
'text': item.title + ' (+' + item.code + ')',
'value': item.code,
}
return obj
})
} else {
that.quCodeList = []
}
}).catch(e => {
console.log(e, 'e')
});
},
getData() {
let that = this
// 获取个人信息
if (this.userInfo.id != undefined) {
this.$http
@@ -194,173 +309,371 @@
that.userMes.tel = res.user.tel
that.userMes.avatar = res.user.avatar
that.userMes.oldName = that.userMes.nickname
that.userMes.id = res.user.id
that.userMsage.age = res.user.age
that.userMsage.email = res.user.email
that.userMsage.sex = res.user.sex
that.userMsage.nickname = res.user.nickname
that.userMsage.tel = res.user.tel
that.userMsage.avatar = res.user.avatar
that.userMsage.YNpass = res.user.password
that.userMiMa.id = res.user.id
});
}
},
cancelPass(){
this.passwordShow = false,
this.userMes.password = '',
this.userMes.Repassword = ''
this.note = '',
this.str2 = ''
cancelPass() {
this.passwordShow = false
this.userMiMa.password = ''
this.userMiMa.Repassword = ''
this.passNote = ''
this.passStr = ''
},
// 密码验证
inputMethod(value) {
this.passwordOk = false
// console.log('输入的值为:', value)
// console.log('输入的值为:', value)
if (strongRegex.test(value)) {
//console.log('强密码-----',value)
this.str2 = "<span style='color:#18bc37'>密码强度很不错哦!</span>"
// this.note = '请至少使用大小写字母、数字、符号两种类型组合的密码长度为8位。'
this.note = ''
this.passStr = "<span style='color:#18bc37'>密码强度很不错哦!</span>"
// this.passNote = '请至少使用大小写字母、数字、符号两种类型组合的密码长度为8位。'
this.passNote = ''
this.passwordOk = true
} else if (mediumRegex.test(value)) {
//console.log('中等密码-----',value)
this.note = '请至少使用大小写字母、数字、符号两种类型组合的密码长度为8位。'
this.str2 = "<span style='color:#2979ff'>密码强度中等!</span>"
this.passNote = '请至少使用大小写字母、数字、符号两种类型组合的密码长度为8位。'
this.passStr = "<span style='color:#2979ff'>密码强度中等!</span>"
this.passwordOk = true
} else if (enoughRegex.test(value)) {
//console.log('弱密码-----',value)
this.str2 = "<span style='color:#f3a73f'>密码强度太弱!</span>"
this.note = '请至少使用大小写字母、数字、符号两种类型组合的密码长度为8位。'
this.passStr = "<span style='color:#f3a73f'>密码强度太弱!</span>"
this.passNote = '请至少使用大小写字母、数字、符号两种类型组合的密码长度为8位。'
} else {
this.passwordOk = false
this.note = '请至少使用大小写字母、数字、符号两种类型组合的密码长度为8位。'
this.str2 = ""
this.passNote = '请至少使用大小写字母、数字、符号两种类型组合的密码长度为8位。'
this.passStr = ""
//console.log('密码-----',value)
}
},
// 头像
choseAvatar(e) {
let that = this
if (that.fileAvatar.length == 0) {
uni.showToast({
title: "请选择图片",
icon: 'none'
});
return
}
that.userMes.avatar = that.fileAvatar[0].url
that.choseData()
that.avatarShow = false
that.fileAvatar.splice(0, 1)
},
// 年龄
choseAge(e) {
let that = this
if (that.userMes.age <= 0) {
uni.showToast({
title: "年龄不能小于0",
icon: 'none'
});
return
}
that.choseData()
that.ageShow = false
},
// 昵称
choseNickname(e) {
let that = this
if (e && e != '') {
that.choseData()
that.nicknameShow = false
} else {
that.userMes.nickname = that.userMes.oldName
console.log(that.userMes.nickname)
uni.showToast({
title: '昵称不可为空',
icon: 'none'
})
}
},
// 性别
choseSex(e) {
let that = this
that.userMes.sex = e
that.choseData()
that.sexShow = false
},
// 修改密码
chosePassword() {
if(!this.passwordOk){
console.log('不满足密码格式',this.note)
uni.showToast({
title:this.note,
icon: 'none'
})
return
}
let that = this
if (that.userMes.Repassword == '' || that.userMes.password == '') {
uni.showToast({
icon: "none",
title: "请输入密码!"
});
return
}
if (that.userMes.Repassword != that.userMes.password) {
uni.showToast({
icon: "none",
title: "两次密码输入不一致!"
});
return
}
that.choseData()
that.passwordShow = false
},
// 修改个人资料
choseData() {
let that = this
$http.request({
url: "book/user/update",
method: "POST",
data: that.userMes,
header: {
'Content-Type': 'application/json'
},
}).then(function(res) {
if (res.code == 0) {
uni.showToast({
title: "修改成功"
});
}
}).catch(function(error) {
console.log(error);
});
},
// 头像上传
afterRead(e) {
let that = this
uni.uploadFile({
url: this.$baseUrl + 'oss/fileoss',
filePath: e.file[0].url,
name: 'file',
formData: {},
success: (res) => {
that.fileAvatar.push({
url: JSON.parse(res.data).url
})
}
});
},
// 删除图片
deletePic() {
let that = this
that.fileAvatar.splice(0, 1)
},
}
},
};
// 清除验证码
OpenClear() {
clearInterval(clear)
this.PhoneEmailNote = '获取验证码';
this.readonly = false;
},
// 获取验证码
emPHCode() {
clear && clearInterval(clear);
this.readonly = true
this.PhoneEmailNote = '60S';
var s = 60;
clear = setInterval(() => {
s--;
this.PhoneEmailNote = s + 'S';
if (s <= 0) {
clearInterval(clear);
this.PhoneEmailNote = '获取验证码';
this.readonly = false;
}
}, 1000);
},
// 发送验证码
onSetCode(e) {
if (this.readonly) {
return;
}
if (e == 'phone') {
if (!this.userMes.phone) {
uni.showToast({
title: '请输入手机号',
icon: 'none'
});
return;
}
if (this.userMes.quCode == null || this.userMes.quCode == 86) {
if (!this.$base.phoneRegular.test(this.userMes.phone)) {
uni.showToast({
title: '手机格式不正确',
icon: 'none'
});
return;
}
}
this.$http
.get('book/user/sms/sendcode', {
phone: this.userMes.phone,
areaCode: this.userMes.quCode,
type: 2000
})
.then(res => {
uni.showToast({
title: '验证码发送成功',
icon: 'none'
});
this.emPHCode();
});
}
if (e == 'email') {
if (!this.userMes.email) {
uni.showToast({
title: '请输入邮箱',
icon: 'none'
});
return;
}
if (!this.$base.mailRegular.test(this.userMes.email)) {
uni.showToast({
title: '邮箱格式不正确',
icon: 'none'
});
return;
}
this.$http
.get('book/user/getMailCaptcha', {
email: this.userMes.email
})
.then(res => {
uni.showToast({
title: '验证码发送成功',
icon: 'none'
});
this.emPHCode();
});
}
},
// 手机
chosePhone(e) {
this.userMes.code = this.userMes.phonecode
if (this.userMes.email == '') {
uni.showToast({
title: '请输入手机号',
icon: 'none'
});
return;
}
if (this.userMes.code == '' || this.userMes.code == null) {
uni.showToast({
title: '请输入验证码',
icon: 'none'
});
return;
}
$http.request({
url: "book/user/updateUserTel",
method: "POST",
data: this.userMes,
header: {
'Content-Type': 'application/json'
},
}).then(function(res) {
if (res.code == 0) {
this.getData();
this.phoneShow = false
uni.showToast({
title: "绑定手机号成功"
});
}
}).catch(function(error) {
console.log(error);
});
},
// 邮箱
choseEmail(e) {
this.userMes.code = this.userMes.emailcode
if (this.userMes.email == '') {
uni.showToast({
title: '请输入邮箱',
icon: 'none'
});
return;
}
if (this.userMes.code == '' || this.userMes.code == null) {
uni.showToast({
title: '请输入验证码',
icon: 'none'
});
return;
}
$http.request({
url: "book/user/updateUserEmail",
method: "POST",
data: this.userMes,
header: {
'Content-Type': 'application/json'
},
}).then(function(res) {
if (res.code == 0) {
this.getData();
this.emailShow = false
uni.showToast({
title: "绑定邮箱成功"
});
}
}).catch(function(error) {
console.log(error);
});
},
// 头像
choseAvatar(e) {
let that = this
if (that.fileAvatar.length == 0) {
uni.showToast({
title: "请选择图片",
icon: 'none'
});
return
}
that.userMes.avatar = that.fileAvatar[0].url
that.choseData()
that.avatarShow = false
that.fileAvatar.splice(0, 1)
},
// 年龄
choseAge(e) {
let that = this
if (that.userMes.age <= 0) {
uni.showToast({
title: "年龄不能小于0",
icon: 'none'
});
return
}
that.choseData()
that.ageShow = false
},
// 昵称
choseNickname(e) {
let that = this
if (e && e != '') {
that.choseData()
that.nicknameShow = false
} else {
that.userMes.nickname = that.userMes.oldName
console.log(that.userMes.nickname)
uni.showToast({
title: '昵称不可为空',
icon: 'none'
})
}
},
// 性别
choseSex(e) {
let that = this
that.userMes.sex = e
that.choseData()
that.sexShow = false
},
// 修改密码
chosePassword() {
if (!this.passwordOk) {
console.log('不满足密码格式', this.passNote)
uni.showToast({
title: this.passNote,
icon: 'none'
})
return
}
let that = this
if (that.userMiMa.Repassword == '' || that.userMiMa.password == '') {
uni.showToast({
icon: "none",
title: "请输入密码!"
});
return
}
if (that.userMiMa.Repassword != that.userMiMa.password) {
uni.showToast({
icon: "none",
title: "两次密码输入不一致!"
});
return
}
$http.request({
url: "book/user/updateUserPassword",
method: "POST",
data: that.userMiMa,
header: {
'Content-Type': 'application/json'
},
}).then(function(res) {
if (res.code == 0) {
uni.showToast({
title: "修改成功"
});
that.passwordShow = false
}
}).catch(function(error) {
console.log(error);
});
},
// 修改个人资料
choseData() {
let that = this
$http.request({
url: "book/user/update",
method: "POST",
data: that.userMes,
header: {
'Content-Type': 'application/json'
},
}).then(function(res) {
if (res.code == 0) {
that.getData();
// that.$forceUpdate()
uni.showToast({
title: "修改成功"
});
}
}).catch(function(error) {
console.log(error);
});
},
// 头像上传
afterRead(e) {
let that = this
uni.uploadFile({
url: this.$baseUrl + 'oss/fileoss',
filePath: e.file[0].url,
name: 'file',
formData: {},
success: (res) => {
that.fileAvatar.push({
url: JSON.parse(res.data).url
})
}
});
},
// 删除图片
deletePic() {
let that = this
that.fileAvatar.splice(0, 1)
},
},
};
</script>
<style lang="scss" scoped>
@import '@/style/mixin.scss';
@@ -409,6 +722,17 @@
display: block;
}
text.marPer {
color: #fff;
font-weight: normal;
float: right;
margin: 25rpx 0 0 0;
display: block;
border-radius: 10rpx;
background-color: #eee;
padding: 2rpx 10rpx;
}
}
@@ -484,7 +808,40 @@
margin-top: 25rpx;
color: #888;
}
}
.submit {}
.emPHCode {
height: 80rpx;
width: 200rpx;
background-color: #f8f9fb;
font-size: 28rpx;
padding: 0 14rpx;
color: #54a966;
line-height: 80rpx;
margin: 20rpx 0 0 20rpx;
display: inline-block;
}
.quhao {
height: 60rpx;
width: 240rpx;
margin: 1rpx 15rpx 0 0;
.quhaoSel {
/deep/.uni-select {
font-size: 24rpx;
}
/deep/.uni-select__selector-item {
font-size: 24rpx;
}
/deep/.uni-stat__select {
height: 60rpx;
}
}
}
}
</style>

1255
pages/user/visitor.vue Normal file

File diff suppressed because it is too large Load Diff