Răsfoiți Sursa

用户协议及隐私政策修改

zuypeng 1 an în urmă
părinte
comite
5bade355d1

+ 1 - 1
src/components/login-bar/index.vue

@@ -64,7 +64,7 @@ const handleGetPhone = (e:any) => {
 const handleGotoLoginPage = () => {
   tryLogin().then((token)=>{
     console.log(">>>>>>>>>",token)
-
+    uni.$emit('login', {isLogin: true})
   }).catch(e=>{
     console.error("尝试登录失败,跳转登录页注册",e)
     uni.navigateTo({

+ 3 - 3
src/pages-order/list/index.vue

@@ -8,9 +8,9 @@
               <view class="wallet-item_header">
                 <view class="flex-inline">
                   <text class="wallet-item_header-type">洗车消费</text>
-                  <uv-tags class="ml10" style="margin-left: 10px;" size="mini" plain
+                  <uv-text class="ml10" style="margin-left: 10px;" size="mini" plain :size="12"
                            :type="item.payStatus==0?'primary':(item.payStatus==1?'success':'error')"
-                           :text="fmtDictName('Order.pay', item.payStatus)"></uv-tags>
+                           :text="fmtDictName('Order.pay', item.payStatus)"></uv-text>
 
 <!--                  <uv-tags class="ml10" style="margin-left: 10px;" size="mini" plain
                            :type="item.orderStatus==0?'primary':(item.orderStatus==1?'success':'error')"
@@ -132,7 +132,7 @@ const handleClickDetail = (orderDetail: any) => {
 
     &-type {
       font-weight: 500;
-      font-size: 14px;
+      font-size: 16px;
       margin-right: 15rpx;
     }
 

+ 122 - 31
src/pages-user/agreement/index.vue

@@ -1,45 +1,136 @@
 <template>
-  <view class="page">
-    <text>用户协议 </text>
-  </view>
+  <div class="user-agreement">
+    <div class="agreement-container">
+<!--      <h1>用户协议</h1>-->
+      <div class="agreement-content">
+        <p>
+          欢迎使用 [Yeswash]!在使用本小程序之前,请您仔细阅读并理解以下用户协议的全部条款。使用本小程序,即表示您已阅读、理解并同意本协议的全部条款,并愿意遵守本协议的约束。
+        </p>
+        <h2>一、协议的范围</h2>
+        <p>
+          本用户协议(以下简称“本协议”)是您(以下称为“用户”)与 [深圳市超级进化科技有限公司](以下称为“我们”)之间关于使用本小程序的法律协议。
+        </p>
+        <h2>二、用户资格</h2>
+        <p>
+          用户必须是具有完全民事行为能力的自然人,或者是具有合法经营资格的法人或其他组织。如果您是无民事行为能力人或限制民事行为能力人,请在法定监护人的陪同下使用本小程序,并确保您的行为在法定监护人的监督和允许范围内。
+        </p>
+        <h2>三、用户账号与密码</h2>
+        <p>
+          用户在使用本小程序时需要注册一个账号。用户应自行负责账号的安全,并对使用该账号进行的所有活动承担全部责任。用户不得将账号转让、出借或以其他方式提供给第三方使用。
+        </p>
+        <h2>四、用户权利与义务</h2>
+        <p>
+          用户有权按照本协议的约定使用本小程序提供的各项服务,并享有本小程序提供的各种权益和优惠。用户应遵守中华人民共和国相关法律法规,不得利用本小程序从事任何违法、违规或不道德的活动。
+        </p>
+        <h2>五、我们的权利与义务</h2>
+        <p>
+          我们有权根据法律法规的要求和本小程序的运营需要,对本协议的内容进行修改和更新,并在本小程序上进行公示。用户在继续使用本小程序时,应遵守修改后的协议内容。
+        </p>
+        <h2>六、知识产权</h2>
+        <p>
+          本小程序的全部内容,包括但不限于文字、图片、音频、视频、软件、商标、标识等,均受中华人民共和国法律法规和国际知识产权法律的保护。未经我们事先书面同意,用户不得以任何方式复制、修改、传播、出售、出租、转让、许可或以其他方式使用本小程序的任何内容。
+        </p>
+        <h2>七、免责声明</h2>
+        <p>
+          用户明确同意使用本小程序的风险由用户自行承担。本小程序提供的服务是按照现有技术和条件所能达到的现状提供的,我们不保证本小程序的服务不会中断、延迟、丢失数据或出现其他技术问题。
+        </p>
+        <h2>八、违约责任</h2>
+        <p>
+          如果用户违反本协议的任何条款,我们将有权采取相应的措施,包括但不限于警告、限制服务、暂停账号、终止服务等,并有权要求用户赔偿因此给我们造成的损失。
+        </p>
+        <h2>九、法律适用与争议解决</h2>
+        <p>
+          本协议的订立、执行和解释及争议的解决均应适用中华人民共和国法律。如双方就本协议内容或其执行发生任何争议,双方应尽量友好协商解决;协商不成时,任何一方均可向我们所在地有管辖权的人民法院提起诉讼。
+        </p>
+        <h2>十、其他</h2>
+        <p>
+          本协议的任何条款无论因何种原因无效或不具可执行性,其余条款仍应有效并具有约束力。
+        </p>
+      </div>
+      <div class="agreement-buttons">
+<!--        <button @click="agree">同意</button>
+        <button @click="disagree">不同意</button>-->
+      </div>
+    </div>
+  </div>
 </template>
 
-<script setup lang="ts">
-import {onHide, onShow} from "@dcloudio/uni-app";
-import {reactive} from "vue";
-import {body} from "@/utils/https"
+<script>
+export default {
+  name: "UserAgreement",
+  methods: {
+    agree() {
+      // 用户同意协议,可以跳转到下一步或记录用户同意状态
+      console.log("用户同意协议");
+      this.$emit("agreed"); // 可以通过事件通知父组件用户已同意协议
+    },
+    disagree() {
+      // 用户不同意协议,可以提示用户或关闭页面
+      console.log("用户不同意协议");
+      this.$emit("disagreed"); // 可以通过事件通知父组件用户不同意协议
+    },
+  },
+};
+</script>
 
+<style scoped>
+.user-agreement {
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  /*height: 100vh;*/
+  background-color: #f5f5f5;
+}
 
-const initState = () => ({
-  questions: [] as any[],
-  servicerPhone: "",
-})
+.agreement-container {
+  width: 90%;
+  max-width: 600px;
+  background-color: #fff;
+  padding: 20px;
+  border-radius: 8px;
+  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
+}
 
-const state = reactive(initState())
+h1 {
+  text-align: center;
+  font-size: 24px;
+  margin-bottom: 20px;
+}
 
+.agreement-content {
+  margin-bottom: 20px;
+}
 
-const call = () => {
-  uni.makePhoneCall({
-    phoneNumber: state.servicerPhone,
-  });
-};
+.agreement-content h2 {
+  font-size: 18px;
+  margin: 20px 0 10px;
+}
 
+.agreement-content p {
+  font-size: 14px;
+  line-height: 1.5;
+}
 
-onShow(() => {
-  state.servicerPhone =getApp<any>().globalData.config?.servicePhone;
-});
+.agreement-buttons {
+  display: flex;
+  justify-content: space-between;
+}
 
-onHide(() => {
-  Object.assign(state, initState());
-})
-</script>
+.agreement-buttons button {
+  padding: 10px 20px;
+  font-size: 16px;
+  border: none;
+  border-radius: 4px;
+  cursor: pointer;
+}
 
-<style lang="scss">
-.page {
-  min-height: 100vh;
-  background: #fff;
-  box-sizing: border-box;
-  padding: 40rpx 32rpx;
+.agreement-buttons button:first-child {
+  background-color: #4caf50;
+  color: #fff;
 }
 
-</style>
+.agreement-buttons button:last-child {
+  background-color: #f44336;
+  color: #fff;
+}
+</style>

+ 3 - 1
src/pages-user/faq/index.vue

@@ -12,6 +12,7 @@
 import {onHide, onShow} from "@dcloudio/uni-app";
 import {reactive} from "vue";
 import {body} from "@/utils/https"
+import {getServicePhone} from "@/utils/common";
 
 
 const initState = () => ({
@@ -49,7 +50,8 @@ const toggle = (index: number) => {
 };
 
 onShow(() => {
-  state.servicerPhone =getApp<any>().globalData.config?.servicePhone;
+  state.servicerPhone =getServicePhone();
+  // getApp<any>().globalData.config?.servicePhone;
   body(`/faq/list`).then((res: any) => {
     state.questions = res.list;
   })

+ 2 - 1
src/pages-user/feedback/index.vue

@@ -90,7 +90,8 @@ const toggle = (index: number) => {
 onShow(() => {
   let gd = getApp<any>().globalData;
   console.log(gd)
-  state.servicerPhone =getApp<any>().globalData.config?.servicePhone;
+  state.servicerPhone = getServicePhone();
+  // getApp<any>().globalData.config?.servicePhone;
   loadDataList()
 });
 

+ 1 - 0
src/pages-user/login/index.vue

@@ -136,6 +136,7 @@ const handleGetPhone = (e:any) => {
 }
 
 .logo {
+  border-radius: 50%;
   width: 120px;
   height: 120px;
   margin-bottom: 20px;

+ 142 - 98
src/pages-user/policy/index.vue

@@ -1,113 +1,157 @@
 <template>
-  <view class="page">
-    <view>
-
-      # 小程序隐私政策
-
-      欢迎使用[小程序名称](以下简称“本小程序”)。本隐私政策旨在向您说明我们在您使用本小程序时如何收集、使用、存储、共享和保护您的个人信息,以及您所享有的相关权利
-
-      ## 一、信息收集
-
-      1. **收集信息的范围**
-      为了向您提供服务,我们可能会收集以下类型的个人信息:
-      - **基本信息**:微信昵称、头像。
-      - **联系方式**:手机号码。
-      - **位置信息**:用于提供基于位置的服务。
-      - **其他信息**:根据具体功能需要,可能还会收集其他必要信息,如照片、视频等。
-
-      2. **收集信息的目的**
-      我们仅在实现小程序功能所必要的范围内收集信息,例如:
-      - 使用微信昵称和头像进行用户身份识别。
-      - 使用手机号码进行账号注册或验证。
-      - 使用位置信息提供精准服务。
-
-      ## 二、信息使用
-
-      1. 我们将根据收集的个人信息类型,按照合法、正当、必要的原则使用个人信息,包括但不限于以下用途:
-      - 提供和优化本小程序的服务。
-      - 用于用户身份验证和安全保护。
-      - 分析用户行为以改进用户体验。
-
-      2. 如需将您的信息用于本隐私政策未明确的其他用途,我们将再次征得您的明示同意。
-
-      ## 三、信息存储和保护
-
-      1. 我们将按照相关法律法规和标准要求,对收集的用户个人信息进行安全存储和保护。
-      2. 我们承诺,除法律法规另有规定外,对您的信息的保存期限为实现处理目的所必要的最短时间。
-      3. 我们将采取必要的技术和管理措施,确保用户个人信息的保密性、完整性、可用性和可追溯性。
-      4. 如发生个人信息泄露等安全事件,我们将立即采取补救措施并及时告知用户,同时依法向相关部门报告。
-
-      ## 四、第三方链接和数据共享
-
-      1. 本小程序可能包含第三方链接或服务,用户点击后可能会跳转到其他网站或应用。请用户在使用前仔细阅读相关隐私政策或服务条款。
-      2. 我们将按照法律法规和用户意愿,在以下情况下共享或转让个人信息:
-      - 经用户明确同意。
-      - 为实现特定功能,接入第三方插件或SDK时,将按照第三方的隐私政策处理信息。
-      3. 我们将与第三方共享必要的信息时,要求第三方遵守相关法律法规和本政策的约定,对个人信息进行保护
-
-      ## 五、用户权益
-
-      1. **查阅、复制、更正、删除个人信息**
-      您可以通过以下方式与我们联系,行使查阅、复制、更正、删除等法定权利:
-      - 邮箱:[具体邮箱地址]。
-      - 小程序内设置路径:小程序主页右上角“…”—“设置”—“小程序已获取的信息”。
-
-      2. **撤回授权**
-      您可以通过小程序内的设置页面,撤回对某些权限的授权。
-
-      3. **账号注销**
-      若您在小程序中注册了账号,可以通过以下方式与我们联系,申请注销账号:
-      - 邮箱:[具体邮箱地址]。
-      - 我们承诺在十五个工作日内完成核查和处理,并按照法律法规要求处理您的相关信息。
-
-      ## 六、隐私政策的修改和更新
-
-      我们保留随时修改本政策的权利,如有必要,我们会及时告知用户并对本政策进行更新。更新日期:[具体日期]。
-
-      ## 七、联系方式
+  <div class="privacy-policy">
+    <div class="policy-container">
+      <h1>隐私政策</h1>
+      <div class="policy-content">
+        <p>
+          欢迎使用 [Yeswash]!在使用本小程序之前,请您仔细阅读并理解以下隐私政策的全部条款。您点击“同意”按钮或以其他方式确认接受本隐私政策,即表示您已阅读、理解并同意本隐私政策的全部条款,并愿意遵守本隐私政策的约束
+        </p>
+        <h2>一、信息收集</h2>
+        <p>
+          为了向您提供更好的服务,我们可能会收集以下信息:
+        </p>
+        <ul>
+          <li>您在注册时提供的个人信息,如姓名、手机号码、电子邮箱等。</li>
+          <li>您在使用本小程序过程中产生的行为数据,如浏览记录、购买记录等。</li>
+          <li>您的设备信息,如设备型号、操作系统版本、IP地址等。</li>
+        </ul>
+        <h2>二、信息使用</h2>
+        <p>
+          我们将收集的信息用于以下目的:
+        </p>
+        <ul>
+          <li>为您提供个性化服务和推荐。</li>
+          <li>改进我们的产品和服务。</li>
+          <li>与您进行沟通和联系。</li>
+        </ul>
+        <h2>三、信息保护</h2>
+        <p>
+          我们将采取合理的措施保护您的个人信息,防止信息泄露、篡改或丢失。我们不会将您的个人信息出售、出租或以其他方式提供给第三方,除非:
+        </p>
+        <ul>
+          <li>已获得您的明确同意。</li>
+          <li>根据法律法规的要求。</li>
+          <li>为了保护您的合法权益。</li>
+        </ul>
+        <h2>四、信息共享</h2>
+        <p>
+          我们可能会在以下情况下与第三方共享您的信息:
+        </p>
+        <ul>
+          <li>与我们的合作伙伴共享,以便为您提供更好的服务。</li>
+          <li>与我们的服务提供商共享,以便他们为我们提供技术支持。</li>
+        </ul>
+        <h2>五、用户权利</h2>
+        <p>
+          您有权访问、更正、删除您的个人信息。如果您有任何疑问或需要帮助,请随时联系我们
+        </p>
+        <h2>六、未成年人保护</h2>
+        <p>
+          我们非常重视未成年人的隐私保护。如果您是未成年人,请在您的父母或监护人的指导下使用本小程序。
+        </p>
+        <h2>七、法律适用与争议解决</h2>
+        <p>
+          本隐私政策的订立、执行和解释及争议的解决均应适用中华人民共和国法律。如双方就本隐私政策内容或其执行发生任何争议,双方应尽量友好协商解决;协商不成时,任何一方均可向我们所在地有管辖权的人民法院提起诉讼。
+        </p>
+        <h2>八、其他</h2>
+        <p>
+          本隐私政策的任何条款无论因何种原因无效或不具可执行性,其余条款仍应有效并具有约束力。
+        </p>
+      </div>
+      <div class="policy-buttons">
+<!--        <button @click="agree">同意</button>
+        <button @click="disagree">不同意</button>-->
+      </div>
+    </div>
+  </div>
+</template>
 
-      如果您对本隐私政策有任何疑问或建议,或认为我们未遵守上述约定,您可以通过以下方式与我们联系:
-      - 邮箱:[具体邮箱地址]。
+<script>
+export default {
+  name: "PrivacyPolicy",
+  methods: {
+    agree() {
+      // 用户同意隐私政策,可以跳转到下一步或记录用户同意状态
+      console.log("用户同意隐私政策");
+      this.$emit("agreed"); // 可以通过事件通知父组件用户已同意隐私政策
+    },
+    disagree() {
+      // 用户不同意隐私政策,可以提示用户或关闭页面
+      console.log("用户不同意隐私政策");
+      this.$emit("disagreed"); // 可以通过事件通知父组件用户不同意隐私政策
+    },
+  },
+};
+</script>
 
-    </view>
-  </view>
-</template>
+<style scoped>
+.privacy-policy {
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  /*height: 100vh;*/
+  background-color: #f5f5f5;
+}
 
-<script setup lang="ts">
-import {onHide, onShow} from "@dcloudio/uni-app";
-import {reactive} from "vue";
-import {body} from "@/utils/https"
+.policy-container {
+  width: 90%;
+  max-width: 600px;
+  background-color: #fff;
+  padding: 20px;
+  border-radius: 8px;
+  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
+}
 
+h1 {
+  text-align: center;
+  font-size: 24px;
+  margin-bottom: 20px;
+}
 
-const initState = () => ({
-  servicerPhone: "",
-})
+.policy-content {
+  margin-bottom: 20px;
+}
 
-const state = reactive(initState())
+.policy-content h2 {
+  font-size: 18px;
+  margin: 20px 0 10px;
+}
 
+.policy-content p {
+  font-size: 14px;
+  line-height: 1.5;
+}
 
-const call = () => {
-  uni.makePhoneCall({
-    phoneNumber: state.servicerPhone,
-  });
-};
+.policy-content ul {
+  list-style-type: disc;
+  padding-left: 20px;
+}
 
+.policy-content li {
+  font-size: 14px;
+  line-height: 1.5;
+}
 
-onShow(() => {
-  state.servicerPhone =getApp<any>().globalData.config?.servicePhone;
-});
+.policy-buttons {
+  display: flex;
+  justify-content: space-between;
+}
 
-onHide(() => {
-  Object.assign(state, initState());
-})
-</script>
+.policy-buttons button {
+  padding: 10px 20px;
+  font-size: 16px;
+  border: none;
+  border-radius: 4px;
+  cursor: pointer;
+}
 
-<style lang="scss">
-.page {
-  min-height: 100vh;
-  background: #fff;
-  box-sizing: border-box;
-  padding: 40rpx 32rpx;
+.policy-buttons button:first-child {
+  background-color: #4caf50;
+  color: #fff;
 }
 
-</style>
+.policy-buttons button:last-child {
+  background-color: #f44336;
+  color: #fff;
+}
+</style>

+ 3 - 3
src/pages-user/wallet/index.vue

@@ -38,9 +38,9 @@
                 <view class="wallet-item_header">
                   <view class="flex-inline">
                     <text class="wallet-item_header-type">{{ fmtDictName('WalletDetail.type', item.type) }}</text>
-                    <uv-tags class="ml10 wallet-item_header-status" style="margin-left: 10px;" size="mini" plain
+                    <uv-text class="ml10 wallet-item_header-status" style="margin-left: 10px;" size="mini" plain :size="12"
                              :type="item.status==0?'primary':(item.status==1?'success':'error')"
-                             :text="fmtDictName('WalletDetail.status', item.status)"></uv-tags>
+                             :text="fmtDictName('WalletDetail.status', item.status)"></uv-text>
                   </view>
                   <text class="wallet-item_header-amt">{{ (item.amount / 100).toFixed(2) }}元</text>
                 </view>
@@ -248,7 +248,7 @@ const handleClickDetail = (walletDetail: any) => {
 
           &-type {
             font-weight: 500;
-            font-size: 14px;
+            font-size: 16px;
             margin-right: 15rpx;
           }
 

+ 0 - 2
src/pages.json

@@ -118,7 +118,6 @@
             "navigationStyle": "default",
             "navigationBarTitleText": "用户协议",
             "navigationBarBackgroundColor": "#ffffff",
-            "enablePullDownRefresh": true
           }
         },
         {
@@ -127,7 +126,6 @@
             "navigationStyle": "default",
             "navigationBarTitleText": "隐私政策",
             "navigationBarBackgroundColor": "#ffffff",
-            "enablePullDownRefresh": true
           }
         }
       ]

BIN
src/static/logo.png


+ 1 - 1
src/utils/auth.ts

@@ -253,7 +253,7 @@ export function setToken(token: string) {
 
 export function clearToken() {
     getApp<any>().globalData.token = "";
-    getApp<any>().globalData.isLong = false;
+    getApp<any>().globalData.isLogin = false;
     getApp<any>().globalData.user = {};
     uni.$emit('logout')
     uni.removeStorageSync("token")

+ 5 - 1
src/utils/https.ts

@@ -1,5 +1,5 @@
 // @ts-ignore
-import {fetchToken} from "@/utils/auth"
+import {clearToken, fetchToken} from "@/utils/auth"
 
 let isDevelopment = (process.env.NODE_ENV === 'development')
 
@@ -120,6 +120,10 @@ const request = (options: any) => {
                     icon: 'error',
                     duration:5000
                 });
+                if(response.code==1001){
+                    //清除登录状态
+                    clearToken();
+                }
                 reject(errMsg);
             } else {
                 resolve(response.data);