Ver Fonte

6-27修改,h5端调整

chenrong há 1 ano atrás
pai
commit
3ccc1efc66

+ 3 - 0
.env.development

@@ -6,6 +6,9 @@ ENV = 'development'
 
 # 元宇宙/开发环境
 VUE_APP_BASE_API = '/dev-api'
+#VUE_APP_BASE_API = 'http://192.168.0.105:8086'
+
+VUE_APP_BASE_URL = 'http://192.168.0.105:8089'
 
 # 路由懒加载
 VUE_CLI_BABEL_TRANSPILE_MODULES = true

+ 2 - 0
.env.production

@@ -6,3 +6,5 @@ ENV = 'production'
 
 # 元宇宙/生产环境
 VUE_APP_BASE_API = 'http://192.168.0.105:8086'
+
+VUE_APP_BASE_URL = 'http://192.168.0.105:8089'

+ 23 - 0
src/App.vue

@@ -23,6 +23,29 @@ export default  {
               return title ? `${title} - ${process.env.VUE_APP_TITLE}` : process.env.VUE_APP_TITLE
           }
       }
+  },
+  mounted() {
+    this.pdIsMobile()
+    let _this = this
+    window.onresize = () => {
+      setTimeout(() => {
+        _this.pdIsMobile()
+      }, 100)
+    }
+  },
+  methods: {
+    pdIsMobile() {
+      if (this.fIsMobile()) {
+        this.$store.commit('app/TOGGLE_MOBILE', true)
+        // this.isMobile = true
+      } else {
+        this.$store.commit('app/TOGGLE_MOBILE', false)
+        // this.isMobile = false
+      }
+    },
+    fIsMobile() {
+      return /Android|iPhone|iPad|iPod|BlackBerry|webOS|Windows Phone|SymbianOS|IEMobile|Opera Mini/i.test(navigator.userAgent);
+    }
   }
 }
 </script>

+ 4 - 0
src/assets/styles/element-ui.scss

@@ -99,4 +99,8 @@
   background: var(--bg-color4);
   border-color: var(--bg-color4);
   color: #FFFFFF;
+}
+.el-message-box {
+  max-width: 420px;
+  width: 90%;
 }

+ 13 - 1
src/assets/styles/index.scss

@@ -4,7 +4,15 @@
 @import './element-ui.scss';
 @import './sidebar.scss';
 @import './btn.scss';
-
+* {
+  -webkit-tap-highlight-color: rgba(0, 0, 0, 0); /* iOS Safari */
+  -webkit-user-select: none; /* Safari */
+  -khtml-user-select: none; /* Konqueror HTML */
+  -moz-user-select: none; /* Firefox */
+  -ms-user-select: none; /* Internet Explorer/Edge */
+  user-select: none; /* Non-prefixed version, currently supported by Chrome and Opera */
+  outline: none; /* Remove outline in all browsers */
+}
 body {
   height: 100%;
   -moz-osx-font-smoothing: grayscale;
@@ -222,4 +230,8 @@ button, input, optgroup, select, textarea {
   --bg-color4: #9387ff;
   --color1: #e2e2e2;
   --color2: #8f8f8f;
+}
+
+.bgColor1 {
+  background-color: var(--bg-color1);
 }

+ 10 - 3
src/layout/index.vue

@@ -1,14 +1,17 @@
 <template>
   <div class="app-wrapper flex">
-    <NavMenu />
-    <div class="pageContent">
+    <NavMenu v-if="!$store.state.app.isMobile" />
+    <div class="pageContent" :class="$store.state.app.isMobile && 'w-full'">
       <app-main />
     </div>
+    <NavMenu_H5 v-if="$store.state.app.isMobile" />
   </div>
 </template>
 
 <script>
 import NavMenu from '@/views/components/NavMenu'
+import NavMenu_H5 from '@/views/components/NavMenu_H5'
+
 import ResizeMixin from './mixin/ResizeHandler'
 import { AppMain, Navbar, Settings, Sidebar, TagsView } from './components'
 
@@ -16,7 +19,8 @@ export default {
   name: 'Layout',
   components: {
     AppMain,
-    NavMenu
+    NavMenu,
+    NavMenu_H5
   },
   mixins: [ResizeMixin],
   computed: {
@@ -40,4 +44,7 @@ export default {
     overflow: visible;
     // overflow-y: auto;
   }
+  .w-full {
+    width: 100%;
+  }
 </style>

+ 6 - 1
src/router/index.js

@@ -38,7 +38,7 @@ export const constantRoutes = [
     children: [
       {
         path: "/home",
-        component: () => import("@/views/home"),
+        component: () => import("@/views/home/index"),
         name: "Home",
       },
       // 对话界面
@@ -79,6 +79,11 @@ export const constantRoutes = [
     component: () => import("@/views/privacyPolicy"),
     name: "privacyPolicy",
   },
+  {
+    path: "/termOfUse",
+    component: () => import("@/views/termOfUse"),
+    name: "termOfUse",
+  },
   // 角色详情界面(废弃)
   {
     path: "/detail",

+ 4 - 0
src/store/modules/app.js

@@ -6,12 +6,16 @@ const state = {
     withoutAnimation: false,
     hide: false, 
   },
+  isMobile: false,
   showPopup: false,
   device: 'desktop',
   size: Cookies.get('size') || 'medium'
 }
 
 const mutations = {
+  TOGGLE_MOBILE: (state, status) => {
+    state.isMobile = status
+  },
   TOGGLE_POPUP: (state, status) => {
     state.showPopup = status
   },

+ 26 - 3
src/views/chat/index.vue

@@ -445,7 +445,7 @@ export default {
       // 选中的角色聊天记录
       historyRes: [],
       recordsIndex: null,
-      showDetail: false,
+      showDetail: true,
       showConfig: false,
       showInfo: 0,
       messageOptions: [],
@@ -470,6 +470,11 @@ export default {
       //音频相关↓
       //音频地址
       audioUrl: '',
+      audioUrlArr: [
+        'https://botgenx.s3.amazonaws.com/fandom/a/prod/a100473974212042300/greeting_1717089890.mp3',
+        'https://botgenx.s3.amazonaws.com/fandom/a/prod/a100473974217450127/greeting_1717741379.mp3'
+      ],
+      audioUrlArrIndx: 0,
       videoLoop: null,
       videoLoopTime: 0,
       //场景下拉菜单
@@ -1273,6 +1278,14 @@ export default {
       this.loopGetVoice(history.id, index)
     },
     playAudio(url, index) {
+      // this.audioUrlArrIndx = 0
+      // this.audioUrl = this.audioUrlArr[this.audioUrlArrIndx]
+      // setTimeout(() => {
+      //   if (this.audioUrl) {
+      //     this.$refs.audio.play()
+      //   }
+      // }, 100)
+      // return
       this.audioUrl = url
       this.audioPlayIndex = index
       this.$refs.audio.volume = 1
@@ -1323,8 +1336,18 @@ export default {
       }
     },
     audioEnd() {
-      // console.log('播放结束');
-      this.audioPlayIndex = null
+      if (this.audioUrlArrIndx < this.audioUrlArr.length - 1) {
+        this.audioUrlArrIndx += 1
+        this.audioUrl = this.audioUrlArr[this.audioUrlArrIndx]
+        setTimeout(() => {
+          if (this.audioUrl) {
+            this.$refs.audio.play()
+          }
+        }, 100)
+      } else {
+        // console.log('播放结束');
+        this.audioPlayIndex = null
+      }
     },
     // 场景业务相关↓
     async sceneChange(item) {

+ 161 - 0
src/views/components/NavMenu_H5.vue

@@ -0,0 +1,161 @@
+<template>
+  <div class="nav-menu h-full bg-white w-full">
+    <div class="menus">
+      <div class="menu " :class="$route.path == '/home' && 'menuActive'" @click="routeTo('/home')">
+        <i class="icon el-icon-discover"></i>
+        <div class="text">发现</div>
+      </div>
+      <div class="menu" :class="$route.path == '/chat' && 'menuActive'" @click="routeTo('/chat')">
+        <i class="icon el-icon-chat-line-round"></i>
+        <div class="text">对话</div>
+      </div>
+      <el-popover
+        placement="top"
+        width="160"
+        v-model="popoverVisible">
+        <div class="flex flex-col">
+          <div class="submenu w-full text-gray-600 text-center py-2 rounded cursor-pointer"
+            @click="() => {
+              popoverVisible = false
+              routeTo('/createScene')
+            }"
+          >
+            创建场景
+          </div>
+          <div class="submenu w-full text-gray-600 text-center py-2 rounded cursor-pointer" 
+            @click="() => {
+              popoverVisible = false
+              routeTo('/create')
+            }"
+          >
+            创建角色
+          </div>
+        </div>
+        <div slot="reference" class="menu p-2 rounded-full bgColor1" 
+          :class="($route.path == '/create' || $route.path == '/createScene') && 'menuActive'"
+        >
+          <i class="icon el-icon-plus text-white"></i>
+          <!-- <div class="text">创建</div> -->
+        </div>
+      </el-popover>
+      <div class="menu" :class="$route.path == '/profile' && 'menuActive'" @click="routeTo('/profile')">
+        <i class="icon el-icon-files"></i>
+        <div class="text">我的</div>
+      </div>
+      <div class="menu" :class="$route.path == '/user' && 'menuActive'" @click="routeTo('/user')">
+        <i class="icon el-icon-user"></i>
+        <div class="text">个人中心</div>
+      </div>
+    </div>
+    <!-- <div v-if="!haveToken" class="loginTip fixed w-56 h-32 bg-white left-20 bottom-6 z-50 p-3 rounded flex flex-col">
+      <div class=" text-base text-black font-semibold">欢迎来到《元宇宙》</div>
+      <div class=" text-gray-400">登录畅享所有服务</div>
+      <el-button class="w-full mt-6" @click="showLogin">登录</el-button>
+    </div> -->
+  </div>
+</template>
+
+<script>
+// 引入需要的图标
+import { getToken, setToken, removeToken } from '@/utils/auth'
+import 'vue-awesome/icons/crown'
+
+
+export default {
+  data() {
+    return {
+      popoverVisible: false,
+      haveToken: false,
+      getToken, 
+    }
+  },
+  created() {
+    if (this.getToken()) {
+      this.haveToken = true
+    }
+  },
+  mounted() {
+  },
+  watch: {
+    '$store.state.user.token': function(newVal, oldVal) {
+      console.log(newVal, '登录状态变化');
+      if (newVal) {
+        this.haveToken = true
+      } else {
+        this.haveToken = false
+      }
+    }
+  },
+  methods: {
+    toUser() {
+      if (this.getToken()) {
+        this.$router.push('/user')
+      } else {
+        this.showLogin()
+      }
+      
+    },
+    routeTo(url) {
+      this.$router.push(url)
+    },
+    showLogin() {
+      this.$store.commit('app/TOGGLE_POPUP', true)
+    },
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.nav-menu {
+  position: fixed;
+  bottom: 0;
+  height: 60px;
+  font-size: 14px;
+  display: flex;
+  // flex-direction: column;
+  justify-content: space-between;
+  border-right-width: 1px;
+  border-color: #d3d3d365;
+  align-items: center;
+
+  .menus {
+    display: flex;
+    // flex-direction: column;
+    cursor: pointer;
+    width: 100%;
+    justify-content: space-around;
+    align-items: center;
+    .menu {
+      display: flex;
+      flex-direction: column;
+      align-items: center;
+      // margin: 10px 0;
+      .icon {
+        font-size: 26px;
+      }
+    }
+    .menuActive {
+      color: var(--bg-color1);
+    }
+  }
+  .photo {
+    width: 30px;
+    height: 30px;
+    border-radius: 50%;
+    background: var(--bg-color1);
+    border: solid 1px #e5e7eb;
+    .img {
+      width: 100%;
+      height: 100%;
+      border-radius: 50%;
+    }
+  }
+}
+.loginTip {
+  box-shadow: 1px 1px 4px #bfbfbf;
+}
+.submenu:hover {
+  color: #fff;
+  background: var(--bg-color1);
+}
+</style>

+ 0 - 49
src/views/home.vue

@@ -1,49 +0,0 @@
-<template>
-  <div class="app-pageContainer">
-    <HomePC v-if="!isMobile" />
-    <HomeH5 v-else />
-  </div>
-</template>
-
-<script>
-import HomePC from "@/views/homeComponents/HomePC.vue"
-import HomeH5 from "@/views/homeComponents/HomeH5.vue"
-
-export default {
-  name: "home",
-  components: {
-    HomePC,
-    HomeH5
-  },
-  data() {
-    return {
-      isMobile: false,
-    }
-  },
-  mounted() {
-    this.pdIsMobile()
-    let _this = this
-    window.onresize = () => {
-      setTimeout(() => {
-        _this.pdIsMobile()
-      }, 100)
-    }
-  },
-  methods: {
-    pdIsMobile() {
-      if (this.fIsMobile()) {
-        this.isMobile = true
-      } else {
-        this.isMobile = false
-      }
-    },
-    fIsMobile() {
-      return /Android|iPhone|iPad|iPod|BlackBerry|webOS|Windows Phone|SymbianOS|IEMobile|Opera Mini/i.test(navigator.userAgent);
-    }
-  },
-};
-</script>
-
-<style scoped lang="scss">
-
-</style>

+ 33 - 0
src/views/home/index.vue

@@ -0,0 +1,33 @@
+<template>
+  <div class="app-pageContainer">
+    <HomePC v-if="!$store.state.app.isMobile" />
+    <HomeH5 v-else />
+  </div>
+</template>
+
+<script>
+import HomePC from "@/views/homeComponents/HomePC.vue"
+import HomeH5 from "@/views/homeComponents/HomeH5.vue"
+
+export default {
+  name: "home",
+  components: {
+    HomePC,
+    HomeH5
+  },
+  data() {
+    return {
+
+    }
+  },
+  mounted() {
+  },
+  methods: {
+
+  },
+};
+</script>
+
+<style scoped lang="scss">
+
+</style>

+ 9 - 1
src/views/homeComponents/login.vue

@@ -24,7 +24,14 @@
       </el-form-item>
       <el-form-item label="" prop="checked">
         <el-checkbox class="checkbox" v-model="checked"></el-checkbox>
-        勾选即代表您已同意<span class="text-blue-500">《用户协议》</span>和<span class="text-blue-500">《隐私政策》</span>
+        勾选即代表您已同意
+        <span class="text-blue-500">
+          <a :href="`${baseURL}/#/termOfUse`" target="_blank" class="underline mx-1">《用户协议》</a>
+        </span>
+        和
+        <span class="text-blue-500">
+          <a :href="`${baseURL}/#/privacyPolicy`" target="_blank" class="underline mx-1">《隐私政策》</a>
+        </span>
       </el-form-item>
       <el-form-item label="">
         <span style="font-size: 1rem;">
@@ -41,6 +48,7 @@ import { getToken, setToken, removeToken } from '@/utils/auth'
 export default {
   data() {
     return {
+      baseURL: process.env.VUE_APP_BASE_URL,
       loading: false,
       popupType: 'login',
       codeTime: -1,

+ 2 - 1
src/views/homeComponents/loginPopup.vue

@@ -1,10 +1,11 @@
 <template>
   <el-dialog
-    class="dialog"
+    :class="!$store.state.app.isMobile && 'dialog'"
     :close-on-click-modal="false"
     :visible.sync="$store.state.app.showPopup"
     append-to-body
     top="50vh"
+    :fullscreen="$store.state.app.isMobile"
     width="450px"
     :before-close="handleClose">
     <div slot="title" class="popupTitle">

+ 1 - 1
src/views/homeComponents/register.vue

@@ -23,7 +23,7 @@
         </el-button>
         <el-form-item label="">
           <span style="font-size: 1rem;">
-            <span class="textButton" @click="toLogin">返回登录</span>
+            <span class="textButton" @click="toLogin">已有账号直接登录</span>
           </span>
         </el-form-item>
       </el-form-item>

+ 1 - 0
src/views/profile/index.vue

@@ -11,6 +11,7 @@
             </div>
             <div class="flex flex-col justify-center ml-3">
               <div class="font-medium text-2xl ">{{ userInfo.userName }}</div>
+              <div class="text-base">账号:{{ userInfo.account }}</div>
               <div class=" text-base">UID:1231235 <i class="el-icon-copy-document text-base"></i></div>
             </div>
           </div>

+ 151 - 54
src/views/termOfUse.vue

@@ -1,59 +1,155 @@
 <template>
   <div class=" w-full h-full">
     <div class=" mx-auto py-10" style="max-width: 800px;">
-      <h1>元宇宙网站隐私政策</h1>
-      <p>最后更新日期:[请填写日期]</p>
-
-      <h2>一、引言与定义</h2>
-      <p>欢迎您来到元宇宙网站(以下简称“我们”或“网站”)。本隐私政策旨在阐述我们如何收集、使用、保护您的个人信息。在本政策中,“个人信息”指能够单独或与其他信息结合识别特定自然人身份的各种信息。</p>
-
-      <h2>二、数据收集</h2>
-      <h3>2.1 收集方式</h3>
-      <p>我们可能通过以下方式收集您的个人信息:</p>
-      <ul>
-        <li>当您注册账户时,提交的姓名、邮箱地址、电话号码等;</li>
-        <li>使用网站服务过程中,系统自动记录的行为数据,如浏览记录、IP地址等;</li>
-        <li>通过cookies和其他追踪技术收集的浏览偏好信息。</li>
-      </ul>
-
-      <h3>2.2 收集目的</h3>
-      <p>我们收集您的个人信息主要用于以下目的:</p>
-      <ul>
-        <li>提供、维护和改进我们的服务;</li>
-        <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>
-        <li>为保护您或其他人的合法权益所必需。</li>
-      </ul>
-
-      <h2>五、您的权利</h2>
-      <p>您拥有以下关于您个人信息的权利:</p>
-      <ul>
-        <li>访问、更正您的个人信息;</li>
-        <li>请求删除您的个人信息;</li>
-        <li>撤回对个人信息处理的同意;</li>
-        <li>投诉或举报我们对个人信息处理的违规行为。</li>
-      </ul>
-
-      <h2>六、联系我们</h2>
-      <p>对于本隐私政策或您的个人信息有任何疑问、意见或请求,您可以通过[请填写联系方式]与我们联系。</p>
-
-      <p>我们保留在必要时修改本隐私政策的权利。任何更改将在网站上公布,不再单独通知。继续使用我们的服务即代表您接受最新版本的隐私政策。</p>
+      <h1 class="page-title">用户使用协议</h1>
+      <div class="page-body">
+        <p class="">最后修改日期:2024 年 06 月 27 日</p>
+        <h2 class="">接受服务条款</h2>
+        <p class="">
+          通过访问、使用或浏览
+          <a href="https://xxx.com">https://xxx.com</a>
+          (以下简称“平台”)或我们的社区(包括但不限于Discord上的社区,以下统称为“社区”)以及其中提供的任何内容、功能和服务,即表示您接受并同意这些服务条款(以下简称“条款”)。
+        </p>
+        <p class="">这些条款适用于平台和我们社区的所有用户。无论用户是通过计算机、移动设备或任何其他技术媒介或方法访问平台和社区的,均以“您”、“用户”或“用户”表示,具体取决于上下文。这些条款构成您与
+          元宇宙 Inc.(以下简称“元宇宙”、“我们”或“我们”)之间的协议。</p>
+        <h2 class="">定义和关键术语</h2>
+        <p class="">为了尽量清晰地解释这些《服务条款》,每次提到这些术语时,它们都被严格定义如下:</p>
+        <ul class="bulleted-list">
+          <li style="list-style-type:disc">Cookie(Cookie):由网站生成并由您的网络浏览器保存的少量数据。它用于识别您的浏览器,提供分析信息,记住有关您的信息,如您的语言首选项或登录信息。
+          </li>
+        </ul>
+        <ul class="bulleted-list">
+          <li style="list-style-type:disc">公司(Company):当这些条款提到“公司”、“我们”、“我们”或“我们的”时,指的是元宇宙(总部),该公司根据这些《服务条款》负责您的信息。</li>
+        </ul>
+        <ul class="bulleted-list">
+          <li style="list-style-type:disc">国家(Country):元宇宙或元宇宙的所有者/创始人所在的地方,在这种情况下是美国。</li>
+        </ul>
+        <ul class="bulleted-list">
+          <li style="list-style-type:disc">设备(Device):任何互联网连接设备,如手机、平板电脑、计算机或任何其他可用于访问元宇宙并使用服务的设备。</li>
+        </ul>
+        <ul class="bulleted-list">
+          <li style="list-style-type:disc">
+            服务(Service):指元宇宙根据相关条款(如果有)和本平台上描述的服务。</li>
+        </ul>
+        <ul class="bulleted-list">
+          <li style="list-style-type:disc">第三方服务(Third-party
+            service):指广告商、竞赛赞助商、促销和营销合作伙伴以及提供我们内容或我们认为可能对您感兴趣的产品或服务的其他方。</li>
+        </ul>
+        <ul class="bulleted-list">
+          <li style="list-style-type:disc">网站(Website):元宇宙的网站,可通过以下网址访问:<a href="https://xxx.com/">https://xxx.com/</a>
+          </li>
+        </ul>
+        <ul class="bulleted-list">
+          <li style="list-style-type:disc">您(You):是注册到元宇宙以使用服务的个人或实体。</li>
+        </ul>
+        <h2 class="">年龄要求</h2>
+        <p class="">元宇宙
+          致力于为我们的用户提供一个安全的平台。我们的平台仅面向年满 18 岁的个人。</p>
+        <p class="">如果您未满 18
+          岁,您不得使用此平台、创建帐户或参与我们的任何社区。我们非常重视此政策,并将积极删除涉嫌属于未满 18 岁个体的帐户。</p>
+        <p class="">通过使用 元宇宙,您确认自己已年满 18
+          岁,并将遵守这些条款。由于年龄虚报而违反我们的服务条款,可能会导致立即终止帐户。</p>
+        <h2 class="">可接受使用行为</h2>
+        <p class="">您同意不使用平台和社群来收集、上传、传输、显示或分发任何以下内容:</p>
+        <ul class="bulleted-list">
+          <li style="list-style-type:disc">违反第三方权利、知识产权或专有权利的内容;</li>
+        </ul>
+        <ul class="bulleted-list">
+          <li style="list-style-type:disc">
+            非法、骚扰、滥用、侵权、威胁、有害、侵犯他人隐私、诽谤、虚假、故意误导、侵犯商誉、涉及未成年人的色情、公然冒犯、宣传种族主义、偏见、仇恨或针对任何群体或个人的身体伤害的内容;
+          </li>
+        </ul>
+        <ul class="bulleted-list">
+          <li style="list-style-type:disc">以任何方式对未成年人造成伤害;</li>
+        </ul>
+        <ul class="bulleted-list">
+          <li style="list-style-type:disc">违反任何法律、法规或第三方强加的义务或限制。</li>
+        </ul>
+        <p class="">此外,您同意不得:</p>
+        <ul class="bulleted-list">
+          <li style="list-style-type:disc">上传、传输或分发旨在损害或更改计算机系统或数据的软件;</li>
+        </ul>
+        <ul class="bulleted-list">
+          <li style="list-style-type:disc">通过平台和社群发送未经请求或未经授权的广告、推广材料、垃圾邮件、传销、或任何其他形式的重复或未经请求的消息;</li>
+        </ul>
+        <ul class="bulleted-list">
+          <li style="list-style-type:disc">利用平台和社群未经其他用户同意收集、搜集、汇集或收集其他用户信息或数据;
+          </li>
+        </ul>
+        <ul class="bulleted-list">
+          <li style="list-style-type:disc">干扰、破坏或对连接到平台和社群的服务器或网络产生不适当负担,或违反此类网络的规定、政策或程序;</li>
+        </ul>
+        <ul class="bulleted-list">
+          <li style="list-style-type:disc">企图未经授权访问平台和社群,无论是通过挖掘密码还是任何其他方式;</li>
+        </ul>
+        <ul class="bulleted-list">
+          <li style="list-style-type:disc">骚扰或干扰其他用户对平台和社群的使用和享受;</li>
+        </ul>
+        <ul class="bulleted-list">
+          <li style="list-style-type:disc">使用软件、自动代理或脚本在平台和社群上创建多个帐户,或生成自动搜索、请求或查询。
+          </li>
+        </ul>
+        <p class="">
+          我们保留权利审查任何内容,并在我们自行决定违反这些条款的情况下对您采取适当的行动,如果您违反这些条款或以其他方式为我们或任何其他人创建了法律责任。此类行动可能包括删除或修改您的内容、终止您的帐户,并/或向执法当局报告您。
+        </p>
+        <h2 class="">付款
+        </h2>
+        <p class="">
+          如果您参与了我们的定期付款付款,您同意根据生效时的费用、收费和结算条款支付您的帐户的所有服务费或费用。
+          除非订单表中另有说明,否则您必须向元宇宙提供有效的信用卡(Visa、MasterCard或我们接受的其他发卡机构)(“支付提供商”)作为注册高级计划的条件。您的支付提供商协议规定了您使用指定信用卡帐户的权利和义务,您必须参考该协议而不是这些条款以确定您与支付提供商的权利和义务。
+          通过向元宇宙提供您的信用卡号和相关的付款信息,您同意元宇宙有权立即验证信息,并随后向您的帐户开具根据这里应支付的所有费用和费用的发票,而无需额外通知或同意。
+          您同意立即通知元宇宙您的帐单地址或用于付款的信用卡的任何更改。元宇宙保留随时更改价格和计费方式的权利,不论是立即张贴在我们的网站上还是通过电子邮件交付给您的组织管理员。
+        </p>
+        <p class="">您对使用服务时可能产生的任何第三方费用负责。</p>
+        <p class="">
+          在元宇宙接受确认性电子邮件、SMS/MMS消息或其他适当的通信方式确认您的订单之前,您与元宇宙之间将不存在服务合同。</p>
+        <h2 class="">退货和退款政策</h2>
+        <p class="">感谢您在元宇宙购买服务。我们感谢您喜欢我们的付费产品。我们也希望确保您在探索、评估和购买我们的产品时有一次愉快的体验。</p>
+        <p class="">
+          与任何购物体验一样,适用于在元宇宙进行交易的条款和条件。我们会在法律允许的情况下尽量简明扼要。需要记住的事情是,通过在元宇宙下订单或购买产品,您同意遵守这些条款以及元宇宙的隐私政策。</p>
+        <p class="">如果由于任何原因您对我们提供的任何商品或服务不满意,请随时与我们联系,我们将讨论您在使用我们的产品中遇到的任何问题。</p>
+        <h2 class="">知识产权</h2>
+        <p class="">
+          用户上传到网站的用户内容。
+          关于您上传到或使用服务创建的内容或其他材料(统称为“用户内容”),您声明并保证您拥有全部的权利、所有权和利益,包括但不限于其中包含的所有版权和肖像权,或以其他方式被允许用于适用目的,例如通过许可或法律例外或限制。通过创建或上传您拥有或使用服务创建的任何用户内容,您保留了它的所有权利(在您否则会持有这些权利的范围内),并在法律允许的最大范围内,授予元宇宙非排他性、全球性、免费的、完全支付的、可转让的、可转让的、永久的、不可撤销的许可,用于复制、展示、上传、执行、分发、存储、修改和以其他方式使用您的用户内容,以用于任何元宇宙相关目的,以任何现在已知或以后开发的形式、媒体或技术。
+        </p>
+        <p class="">
+          角色和生成物。对于您使用服务创建或上传的任何自动化AI角色(“角色”),您拥有该角色的所有权(并在您创建派生作品的范围内,您拥有您否则会拥有的所有权利),以及您直接或间接引导的由该角色引发的任何文本、图像或视频(“生成物”),并授予元宇宙和从您的角色引发生成物的任何元宇宙用户在法律允许的最大范围内,非排他性、全球性、免费的、完全支付的、可转让的、可转让的、永久的、不可撤销的许可,用于复制、展示、上传、执行、分发、存储、修改和以其他方式使用您创建的角色和任何相关生成物,以用于任何已知或以后开发的任何形式、媒体或技术的任何目的。对于与另一用户创建或上传的角色互动,或由元宇宙创建或上传的角色互动的用户,引发生成物的用户拥有这些生成物的所有权,并授予元宇宙和适用角色的创建者非排他性、全球性、免费的、完全支付的、可转让的、可转让的、永久的、不可撤销的许可,以复制、展示、上传、执行、分发、存储、修改和以其他方式使用任何生成物。为避免疑问,与元宇宙的可接受使用政策无关的侵犯知识产权问题不会影响用户对任何角色或生成物的知识产权。
+        </p>
+        <p class="">
+          网站或服务内容、软件和商标。您承认并同意网站或服务可能包含受版权、专利、商标、商业秘密或其他专有权利和法律保护的内容或特征(“网站内容”)。在您使用网站或服务时,您不会从事或使用任何数据挖掘、机器人、抓取或类似的自动数据收集或提取方法。如果元宇宙阻止您访问网站或服务(包括通过阻止您的IP地址),您同意不采取任何措施来规避此类阻止(例如,通过掩盖您的IP地址或使用代理IP地址)。除非明确授权,严禁使用网站或服务或网站内容以外的任何方式使用。未明示授予的任何权利均由元宇宙保留。
+        </p>
+        <p class="">
+          元宇宙名称和标志是元宇宙的商标(统称“元宇宙商标”)。通过网站或服务使用和显示的其他商标可能是其各自所有者的商标,这些所有者可能或可能不支持或与元宇宙有关或连接。这些条款或网站或服务中的任何内容不应被解释为未经我们事先书面许可,以任何方式授予使用任何元宇宙商标的许可或权利,无论是通过暗示、禁止反言,还是以其他方式。使用元宇宙商标产生的一切善意将归我们独家享有。
+        </p>
+        <p class="">
+          第三方材料。在任何情况下,元宇宙都不对任何第三方的内容或材料承担任何责任,包括第三方创建的角色机器人以及由此类角色机器人产生的任何生成物,包括但不限于知识产权侵权,对任何内容中的错误或遗漏,或因使用任何此类内容而产生的任何种类的损失或损害。您承认元宇宙不会预先筛选内容,但元宇宙及其被指定人员将有权(但无义务)依其自行决定拒绝或删除通过网站或服务提供的任何内容。在不限制前述的情况下,元宇宙及其被指定人员将有权删除违反这些条款或在元宇宙的唯一判断下被认为具有其他不可接受性的内容。您同意您必须评估,并承担与使用任何内容相关的所有风险,包括对此类内容的准确性、完整性或实用性的依赖。
+        </p>
+        <p class="">您承认并同意,您提供给元宇宙的关于网站或服务的任何问题、评论、建议、想法、反馈或其他信息(以下简称“提交”)都是非机密的,元宇宙有权无限制地使用和传播这些提交,无需承认或支付给您任何报酬。</p>
+        <h2 class="">条款和终止</h2>
+        <p class="">
+          在您使用平台和社群期间,这些条款将始终有效。我们可以随时根据自己的判断暂停或终止您使用平台和社群的权利,包括因违反这些条款而使用平台和社群。在这些条款下终止您的权利后,您的帐户和访问以及使用平台和社群的权利将立即终止。您了解,终止您的帐户可能涉及将与您的帐户相关的内容从我们的实时数据库中删除。对于这些条款下的任何终止,我们将不对您承担任何责任。即使在这些条款下终止您的权利后,这些条款仍将有效。
+        </p>
+        <h2 class="">免责声明</h2>
+        <p class="">
+          平台和社群按现状提供。在法律允许的范围内,我们对平台和社群不作任何明示、默示、法定或其他方面的保证,包括但不限于对适销性、适用于特定用途、质量满意、不侵权和安静使用的保证,以及源自交易或贸易惯例的任何保证。我们不保证平台和社群将不中断、准确或无错误,或任何内容将是安全的或不会丢失或被更改。
+        </p>
+        <h2 class="">争议通知</h2>
+        <p class="">在发生争议时,您或元宇宙必须向对方提供争议通知,这是一份书面声明,其中包括提供方的名称、地址和联系信息,引发争议的事实,以及所请求的救助。您必须通过电子邮件发送争议通知到:<a
+            href="xxx.com">xxx.com</a>
+          )。元宇宙将通过邮件寄送争议通知到您的地址,如果我们有您的地址,否则将发送到您的电子邮件地址。您和元宇宙将在发送争议通知之日起的六十(60)天内尝试通过非正式协商解决任何争议。六十(60)天后,您或元宇宙可以提起仲裁。
+        </p>
+        <h2 class="">强制仲裁</h2>
+        <p class="">
+          如果您和元宇宙无法通过非正式协商解决任何争议,解决争议的任何其他努力将专门通过具体描述在本部分的强制仲裁来进行。您正在放弃在法庭上与法官或陪审团争议所有纠纷的权利(或作为当事方或类成员参与)。争议应根据美国仲裁协会的商业仲裁规则进行强制仲裁。任何一方均可在必要时寻求来自任何具有管辖权的法院的任何中间或初步禁令,以保护一方的权利或财产,以等待仲裁完成。胜诉一方应承担所赔偿的任何和所有法律、会计和其他费用、费用和开支,由败诉一方承担。
+        </p>
+        <h2 class="">服务条款的更改</h2>
+        <p class="">我们保留在任何时间修改这些服务条款并且不需要提前通知的权利。您有责任定期查看这些服务条款的任何修改。您继续使用网站即表示您接受并遵守修订后的条款。
+        </p>
+        <p class="">发布后,服务条款的最新版本立即取代了所有之前的版本,之前的版本将不再具有任何法律效力。</p>
+        <h2 class="">联系我们</h2>
+        <p class="">如果您对我们的服务有任何问题,或者要报告违反这些条款或我们的可接受使用政策的行为,请通过 <a href="mailto:xxx.com">xxx.com</a> 与我们联系。 </p>
+      </div>
     </div>
   </div>
 </template>
@@ -83,7 +179,8 @@ h3 {
   margin-bottom: 10px;
 }
 
-p, ul {
+p,
+ul {
   margin-bottom: 10px;
 }
 </style>

+ 6 - 2
src/views/user/index.vue

@@ -62,9 +62,9 @@
       </div>
       <div class=" text-gray-500 mt-2 text-sm">
         © 2024 Rochat
-        <a href="https://upro.ai/terms" target="_blank" class="underline mx-1">服務條款</a>
+        <a :href="`${baseURL}/#/termOfUse`" target="_blank" class="underline mx-1">用户协议</a>
         &amp;
-        <a href="https://upro.ai/privacy" target="_blank" class="underline mx-1">隱私政策</a>
+        <a :href="`${baseURL}/#/privacyPolicy`" target="_blank" class="underline mx-1">隐私政策</a>
         v1.8.1
       </div>
     </div>
@@ -86,6 +86,7 @@ export default {
   },
   data() {
     return {
+      baseURL: process.env.VUE_APP_BASE_URL,
       active: '1',
       userInfo: {
         name: '张三',
@@ -93,6 +94,9 @@ export default {
       }
     }
   },
+  mounted() {
+    console.log(process.env.VUE_APP_BASE_API, 'process.env.VUE_APP_BASE_API');
+  },
   methods: {
     menuClick(i) {
       this.active = i