123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370 |
- <template>
- <view>
- <PageHeader class="page-heard" :title="'青少年模式'" />
- <view class="reserveASeat"></view>
- <view class="title-box">
- <view class="title" v-if="state == 1">设置家长密码</view>
- <view class="title" v-if="state == 2">修改密码</view>
- <view class="title" v-if="state == 3">设置新密码</view>
- <view class="title" v-if="state == 4">验证密码</view>
- <view class="subtitle" v-if="state == 1">此密码为关闭青少年模式的密码</view>
- <view class="subtitle" v-if="state == 2">请输入当前密码</view>
- <view class="subtitle" v-if="state == 3">请输入当前密码</view>
- <view class="subtitle" v-if="state == 4">请输入密码{{ action == 'open' ? '打开' : '关闭' }}青少年模式</view>
- </view>
- <view class="code-box">
- <yi-code ref="code" class="yiCode" :width="590" @onComplete="complete" :focus="false"
- :maxlength="4"></yi-code>
- </view>
- <view class="subtitle" v-if="state == 2 || state == 4"> 忘记了?<span @click="openCustomPopup">联系客服反馈</span> </view>
- <view class="subtitle" v-if="state == 3"> 此密码为长期密码,请牢记自己的密码 </view>
- <view class="btn-box">
- <view class="btn" @click="selection(false)" v-if="state != 4">{{ state != 2 ? '确认' : '下一步' }}</view>
- <view class="btn" @click="selection(false)" v-if="state == 4">{{ action == 'open' ? '打开' : '关闭' }}青少年模式
- </view>
- </view>
- <CustomerServicePopup ref="customerServicePopup"></CustomerServicePopup>
- </view>
- </template>
- <script>
- import PageHeader from '@/components/PageHeader/PageHeader.vue'
- export default {
- components: { PageHeader },
- data() {
- return {
- state: 1,
- code: '',
- password: '',
- originalPassword: '',
- newPassword: '',
- action: 'open',
- }
- },
- onLoad(e) {
- // e.state 1 首次进来设置密码 2修改密码(验证原密码) 3 修改密码(验证新密码) 4 验证原密码后 切换青少年状态
- if (e.state) {
- this.state = e.state
- }
- if (e.is_open_young == 1) {
- this.action = 'close'
- } else if (e.is_open_young == 0 || e.is_open_young == -1) {
- this.action = 'open'
- }
- },
- onShow() {
- },
- onHide() {
- },
- methods: {
- openCustomPopup() {
- this.$refs.customerServicePopup.$refs.customPopup.open()
- },
- complete(code) {
- this.code = code
- this.selection(true)
- },
- async selection(auto) {
- auto = auto || false
- if (!this.code || this.code.length != 4) {
- uni.showToast({
- title: '请输入四位密码',
- icon: 'none'
- });
- return
- }
- var res
- // 设置密码
- if (this.state == 1) {
- this.password = this.code
- if (!auto) {
- res = await this.setParentPassword()
- }
- }
- // 验证原密码
- if (this.state == 2) {
- res = await this.verifyParentPassword()
- if (res.str == '密码验证成功') {
- this.originalPassword = this.code
- this.$refs.code.clear()
- res.str = '请输入新密码'
- this.state = 3
- } else {
- res.str = '密码不正确请重新输入'
- this.$refs.code.clear() // 清空输入框
- }
- }
- // 设置新的密码
- if (this.state == 3) {
- if (!auto) {
- res = await this.setParentPassword()
- }
- }
- // 验证原密码后切换状态
- if (this.state == 4) {
- var res1 = await this.verifyParentPassword()
- if (res1.str == '密码验证成功') {
- res = await this.toggleYoungMode()
- this.goBack()
- } else {
- res1.str = '密码不正确请重新输入'
- uni.showToast({
- title: res1.str,
- icon: 'none'
- });
- this.$refs.code.clear() // 清空输入框
- }
- }
-
- if (res && res.str) {
- if (res && res.str == '操作成功') {
- uni.hideToast();
- if (this.action == 'open') {
- res.str = '青少年模式已开启'
- } else {
- res.str = '青少年模式已关闭'
- }
- }
- uni.showToast({
- title: res.str,
- icon: 'none'
- });
- }
- if (res && res.str == '密码设置成功') {
- this.goBack()
- }
- },
- // 设置家长密码
- setParentPassword() {
- console.log('执行方法');
- return new Promise((resolve, reject) => {
- var rql = {}
- // 第一次设置时
- rql.password = this.code
- // 修改密码时
- if (this.state == 3) {
- rql.old_password = this.originalPassword
- }
- console.log(rql, 111);
- uni.request({
- url: this.$apiHost + '/Young/setParentPassword',
- data: {
- uuid: getApp().globalData.uuid,
- ...rql
- },
- header: {
- "content-type": "application/json",
- 'sign': getApp().globalData.headerSign
- },
- success: (res) => {
- console.log("设置结果:", res.data);
- resolve(res.data);
- },
- fail: (e) => {
- console.log("设置失败:", e);
- reject(e);
- }
- });
- });
- },
- // 验证家长密码
- verifyParentPassword() {
- return new Promise((resolve, reject) => {
- uni.request({
- url: this.$apiHost + '/Young/verifyParentPassword',
- data: {
- uuid: getApp().globalData.uuid,
- password: this.code
- },
- header: {
- "content-type": "application/json",
- 'sign': getApp().globalData.headerSign
- },
- success: (res) => {
- console.log("验证结果:", res.data);
- resolve(res.data);
- },
- fail: (e) => {
- console.log("验证失败:", e);
- reject(e);
- }
- });
- });
- },
- // 切换青少年模式状态
- toggleYoungMode() {
- return new Promise((resolve, reject) => {
- uni.request({
- url: this.$apiHost + '/Young/toggleYoungMode',
- data: {
- uuid: getApp().globalData.uuid,
- password: this.code,
- action: this.action
- },
- header: {
- "content-type": "application/json",
- 'sign': getApp().globalData.headerSign
- },
- success: (res) => {
- console.log("切换结果:", res.data);
- resolve(res.data);
- },
- fail: (e) => {
- console.log("切换失败:", e);
- reject(e);
- }
- });
- });
- },
- goBack() {
- setTimeout(() => {
- uni.navigateBack();
- }, 800)
- },
- }
- }
- </script>
- <style lang="scss">
- page {
- background-color: #f2f6f2;
- font-family: 'PingFang SC-Medium';
- min-height: 100vh;
- padding-bottom: calc(var (--window-bottom));
- box-sizing: border-box;
- position: relative;
- left: 0;
- top: 0;
- }
- .page-heard {
- background-color: #f2f6f2;
- }
- .reserveASeat {
- width: 100%;
- height: calc(90rpx + var(--status-bar-height))
- }
- .title-box {
- padding-top: 90rpx;
- padding-bottom: 72rpx;
- display: flex;
- align-items: center;
- justify-content: center;
- flex-direction: column;
- .title {
- font-weight: 600;
- font-size: 20px;
- color: #1F1F1F;
- }
- .subtitle {
- padding: 0;
- padding-top: 20rpx;
- }
- }
- .subtitle {
- font-size: 24rpx;
- color: #999999;
- text-align: center;
- padding-top: 44rpx;
- span{
- color: #0084FF;
- }
- }
- .code-box {
- padding: 0 80rpx;
- .yiCode {
- width: 100%;
- }
- }
- .yiCode {
- &::v-deep.yi-code {
- .yi-code-show {
- .yi-code-show-item {
- width: 124rpx;
- height: 124rpx;
- border: 4rpx #000 solid;
- border-radius: 20rpx;
- font-size: 56rpx;
- color: #1F1F1F;
- &.yi-code-show-active {
- border: solid 2px #ff5500;
- animation: myfirst 600ms infinite;
- @keyframes myfirst {
- 0% {
- opacity: 0.1
- }
- 100% {
- opacity: 1
- }
- }
- }
- }
- }
- .yi-code-hide {
- height: 124rpx;
- }
- }
- }
- .btn-box {
- position: absolute;
- bottom: 20rpx;
- left: 50%;
- transform: translateX(-50%);
- .btn {
- background: #1F1F1F;
- color: #fff;
- margin: 0 auto;
- width: 626rpx;
- height: 88rpx;
- font-size: 32rpx;
- font-family: 'PingFang SC-Bold';
- background: #1F1F1F;
- border-radius: 58rpx;
- display: flex;
- align-items: center;
- justify-content: center;
- }
- }
- </style>
- <style>
- .navbar-title
- {
- font-weight: 500;
- font-size: 32px;
- font-family: 'PingFang SC-Medium' !important;
- }
- </style>
|