shmily1213 1 ماه پیش
والد
کامیت
06dafe7dd7
100فایلهای تغییر یافته به همراه1864 افزوده شده و 700 حذف شده
  1. 3 2
      package.json
  2. 4 6
      src/api/flyio.ts
  3. 1 1
      src/api/modules/login.ts
  4. 19 0
      src/api/modules/news.ts
  5. 0 0
      src/api/modules/system.ts
  6. 30 0
      src/common/enum.ts
  7. 1 1
      src/common/mxConst.js
  8. 24 0
      src/components/ie-card/ie-card.vue
  9. 35 0
      src/components/ie-dict/ie-dict.vue
  10. 21 4
      src/components/ie-image/ie-image.vue
  11. 18 12
      src/components/ie-navbar/ie-navbar.vue
  12. 34 0
      src/components/ie-news-item/ie-news-item.vue
  13. 0 40
      src/components/ie-oss-image/ie-oss-image.vue
  14. 10 7
      src/components/ie-page/ie-page.vue
  15. 30 0
      src/components/ie-safe-toolbar/ie-safe-toolbar.vue
  16. 6 6
      src/components/ie-sms/ie-captcha.vue
  17. 24 24
      src/components/ie-sms/ie-sms.vue
  18. 34 0
      src/components/ie-tab/ie-tab.vue
  19. 124 0
      src/components/ie-tabbar/ie-tabbar.vue
  20. 1 1
      src/components/mx-login-form-item/mx-login-form-item.vue
  21. 0 22
      src/config.js
  22. 25 0
      src/config.ts
  23. 17 0
      src/hooks/useAppConfig.ts
  24. 86 0
      src/hooks/useDebounce.ts
  25. 14 0
      src/hooks/useNavbar.ts
  26. 8 8
      src/hooks/useScroll.ts
  27. 3 3
      src/hooks/useSms.ts
  28. 1 1
      src/hooks/useTheme.js
  29. 1 1
      src/hooks/useTransfer.js
  30. 170 0
      src/hooks/useTransferPage.ts
  31. 2 2
      src/hooks/useUserStorePageFilter.js
  32. 13 1
      src/main.ts
  33. 521 440
      src/pages.json
  34. 0 55
      src/pages/test-center/mbti/components/character-result.vue
  35. 65 0
      src/pagesMain/pages/index/components/index-banner.vue
  36. 79 0
      src/pagesMain/pages/index/components/index-guide.vue
  37. 36 0
      src/pagesMain/pages/index/components/index-news.vue
  38. 53 0
      src/pagesMain/pages/index/index.vue
  39. 54 0
      src/pagesMain/pages/me/components/me-info.vue
  40. 7 0
      src/pagesMain/pages/me/components/me-menu copy.vue
  41. 97 0
      src/pagesMain/pages/me/components/me-menu.vue
  42. 15 0
      src/pagesMain/pages/me/me.vue
  43. 39 0
      src/pagesMain/pages/splash/splash.vue
  44. 76 0
      src/pagesMain/pages/volunteer/volunteer.vue
  45. BIN
      src/pagesMain/static/image/tabbar/icon-home-active.png
  46. BIN
      src/pagesMain/static/image/tabbar/icon-home.png
  47. BIN
      src/pagesMain/static/image/tabbar/icon-me-active.png
  48. BIN
      src/pagesMain/static/image/tabbar/icon-me.png
  49. BIN
      src/pagesMain/static/image/tabbar/icon-volunteer-active.png
  50. BIN
      src/pagesMain/static/image/tabbar/icon-volunteer.png
  51. 0 0
      src/pagesOther/pages/career/query-segment/components/segment-score-table.vue
  52. 1 1
      src/pagesOther/pages/career/query-segment/query-segment.vue
  53. 0 0
      src/pagesOther/pages/college-library/components/college-detail-brochureCell.vue
  54. 0 0
      src/pagesOther/pages/college-library/components/college-detail-summary.vue
  55. 1 1
      src/pagesOther/pages/college-library/components/college-item-collect.vue
  56. 0 0
      src/pagesOther/pages/college-library/components/college-item.vue
  57. 1 1
      src/pagesOther/pages/college-library/components/college-list.vue
  58. 0 0
      src/pagesOther/pages/college-library/components/college-major-tag.vue
  59. 1 1
      src/pagesOther/pages/college-library/components/college-rank.vue
  60. 0 0
      src/pagesOther/pages/college-library/components/plan-enroll-descriptor.vue
  61. 1 1
      src/pagesOther/pages/college-library/components/plan-enroll-list.vue
  62. 0 0
      src/pagesOther/pages/college-library/components/useCollegeCollectionService.js
  63. 5 5
      src/pagesOther/pages/college-library/detail/detail.vue
  64. 2 2
      src/pagesOther/pages/college-library/index/index.vue
  65. 0 0
      src/pagesOther/pages/college-library/introduction/introduction.vue
  66. 1 1
      src/pagesOther/pages/college-library/picker/picker.vue
  67. 0 0
      src/pagesOther/pages/h5/h5.vue
  68. 0 0
      src/pagesOther/pages/ie/components/AIFormCommonStyle.js
  69. 0 0
      src/pagesOther/pages/ie/components/ai-form/InjectFormDataMixin.js
  70. 0 0
      src/pagesOther/pages/ie/components/ai-form/RenderRulesDemo.js
  71. 0 0
      src/pagesOther/pages/ie/components/ai-form/ai-form-item.vue
  72. 1 1
      src/pagesOther/pages/ie/components/ai-form/ai-form.vue
  73. 1 1
      src/pagesOther/pages/ie/components/ai-form/items/AIFormFieldBase.js
  74. 3 3
      src/pagesOther/pages/ie/components/ai-form/items/ai-form-college-major.vue
  75. 2 2
      src/pagesOther/pages/ie/components/ai-form/items/ai-form-college.vue
  76. 9 9
      src/pagesOther/pages/ie/components/ai-form/items/ai-form-item-group.vue
  77. 1 1
      src/pagesOther/pages/ie/components/ai-form/items/ai-form-item-template.vue
  78. 2 2
      src/pagesOther/pages/ie/components/ai-form/items/major-category-picker.vue
  79. 1 1
      src/pagesOther/pages/ie/components/ai-form/items/templates/AIFormRuleField.js
  80. 1 1
      src/pagesOther/pages/ie/components/ai-form/items/templates/AIFormRuleOptions.js
  81. 1 1
      src/pagesOther/pages/ie/components/ai-form/items/templates/ai-form-field-checkbox.vue
  82. 2 2
      src/pagesOther/pages/ie/components/ai-form/items/templates/ai-form-field-eyesight.vue
  83. 2 2
      src/pagesOther/pages/ie/components/ai-form/items/templates/ai-form-field-number.vue
  84. 3 3
      src/pagesOther/pages/ie/components/ai-form/items/templates/ai-form-field-picker.vue
  85. 1 1
      src/pagesOther/pages/ie/components/ai-form/items/templates/ai-form-field-radio.vue
  86. 2 2
      src/pagesOther/pages/ie/components/ai-form/items/templates/ai-form-field-score.vue
  87. 2 2
      src/pagesOther/pages/ie/components/ai-form/items/templates/ai-form-field-text.vue
  88. 1 1
      src/pagesOther/pages/ie/components/card/pretty-card.vue
  89. 2 2
      src/pagesOther/pages/ie/components/card/pure-card.vue
  90. 2 2
      src/pagesOther/pages/ie/components/card/voluntary-card.vue
  91. 2 2
      src/pagesOther/pages/ie/components/card/voluntary-major.vue
  92. 0 0
      src/pagesOther/pages/ie/components/horizontal-button.vue
  93. 0 0
      src/pagesOther/pages/ie/components/large-header.vue
  94. 0 0
      src/pagesOther/pages/ie/components/picker/FormattedPickerMixin.js
  95. 1 1
      src/pagesOther/pages/ie/components/picker/college-picker.vue
  96. 0 0
      src/pagesOther/pages/ie/components/picker/common-picker-cell.vue
  97. 3 3
      src/pagesOther/pages/ie/components/picker/ie-form-picker-single.vue
  98. 0 0
      src/pagesOther/pages/ie/components/picker/ie-form-picker.vue
  99. 2 2
      src/pagesOther/pages/ie/components/picker/major-picker.vue
  100. 3 3
      src/pagesOther/pages/ie/entry-ai-detail/entry-ai-detail.vue

+ 3 - 2
package.json

@@ -42,6 +42,7 @@
     "tailwindcss-rem2px-preset": "^1.0.3",
     "unplugin-auto-import": "^19.3.0",
     "unplugin-vue-components": "^28.7.0",
-    "vite": "5.2.8"
+    "vite": "5.2.8",
+    "vite-plugin-uni-polyfill": "^0.1.0"
   }
-}
+}

+ 4 - 6
src/api/flyio.ts

@@ -1,16 +1,14 @@
 // @ts-ignore
 import Fly from "flyio/dist/npm/wx"
-// @ts-ignore
 import config from "@/config";
-// @ts-ignore
-import { useUserStore } from '@/hooks/useUserStore';
+import useUserStore from '@/store/userStore';
 import { storeToRefs } from 'pinia';
 import { ApiResponse, LoginInfo } from "@/types";
 
-const { baseUrl } = config;
+const { serverBaseUrl } = config;
 
 const requestConfig = {
-  baseURL: baseUrl,
+  baseURL: serverBaseUrl,
   timeout: 10000,
   headers: {
     "Content-Type": "application/json",
@@ -25,7 +23,7 @@ refreshFly.config = requestConfig;
 
 fly.interceptors.request.use((request: any) => {
   const userStore = useUserStore();
-  const token = userStore.token;
+  const token = userStore.accessToken;
   if (token) {
     request.headers['Authorization'] = 'Bearer ' + token;
   }

+ 1 - 1
src/api/new/login.ts → src/api/modules/login.ts

@@ -25,5 +25,5 @@ export function registry(params: RegisterInfo) {
  * @returns 用户信息
  */
 export function getUserInfo() {
-  return flyio.get('/front/user/getInfo') as Promise<ApiResponse<any>>;
+  return flyio.get('/front/user/getInfo') as Promise<ApiResponse<UserInfo>>;
 }

+ 19 - 0
src/api/modules/news.ts

@@ -0,0 +1,19 @@
+import { Guide, News, NewsQueryDTO } from "@/types/news";
+import flyio from "../flyio";
+import { ApiCaptchaResponse, ApiResponse, ApiResponseList, CaptchaImage, ConfigItem, DictItem, SmsRequestDTO } from "@/types";
+
+/**
+ * 获取新闻列表
+ * @returns 
+ */
+export function getNewsMainList() {
+  return flyio.get('/front/news/getMainListNoToken') as Promise<ApiResponseList<Guide>>;
+}
+
+/**
+ * 获取资讯列表
+ * @returns 
+ */
+export function getNewsListNoToken(params: NewsQueryDTO) {
+  return flyio.get('/front/news/listNoToken', params) as Promise<ApiResponseList<News>>;
+}

+ 0 - 0
src/api/new/system.ts → src/api/modules/system.ts


+ 30 - 0
src/common/enum.ts

@@ -42,4 +42,34 @@ export enum EnumSmsType {
    * password
    */
   PASSWORD = 'PASSWORD'
+}
+
+export enum EnumDictName {
+  /**
+   * 考生类别
+   */
+  EXAM_TYPE = 'exam_type'
+}
+
+export enum STATIC_PAGE_PATH {
+  /**
+   * 登录
+   */
+  LOGIN = '/pagesSystem/pages/login/login',
+  /**
+   * 注册
+   */
+  REGISTER = '/pagesSystem/pages/register/register',
+  /**
+   * 找回密码
+   */
+  FIND_PASSWORD = '/pagesSystem/pages/find-password/find-password',
+  /**
+   * 修改密码
+   */
+  CHANGE_PASSWORD = '/pagesSystem/pages/change-password/change-password',
+  /**
+   * 绑定手机号
+   */
+  BIND_PHONE = '/pagesSystem/pages/bind-phone/bind-phone'
 }

+ 1 - 1
src/common/mxConst.js

@@ -25,7 +25,7 @@ const consts = {
         setting: '/pages/personal-center/setting/setting',
         basicInfo: '/pages/personal-center/basic-info/basic-info',
         newsIndex: '/pages/news/index/index',
-        newsDetail: '/pages/news/detail/detail',
+        newsDetail: '/pagesOther/pages/news/detail/detail',
         newsGroup: '/pages/news/group/group',
         videoPlay: '/pages/video-center/play/play'
     },

+ 24 - 0
src/components/ie-card/ie-card.vue

@@ -0,0 +1,24 @@
+<template>
+  <view class="ie-card" :style="{ backgroundColor: bgColor }">
+    <view class="relative flex items-center">
+      <view class="w-8 h-24 bg-primary mr-14 rounded-2"></view>
+      <view class="text-30 text-fore-title">{{ title }}</view>
+    </view>
+    <view class="mt-20">
+      <slot></slot>
+    </view>
+  </view>
+</template>
+<script lang="ts" setup>
+const props = defineProps({
+  title: {
+    type: String,
+    default: ''
+  },
+  bgColor: {
+    type: String,
+    default: 'transparent'
+  }
+});
+</script>
+<style lang="scss" scoped></style>

+ 35 - 0
src/components/ie-dict/ie-dict.vue

@@ -0,0 +1,35 @@
+<template>
+  <text :customClass="customClass">{{ dictLabels }}</text>
+</template>
+
+<script lang="ts" setup>
+import useDictStore from '@/store/dictStore';
+const dictStore = useDictStore();
+const props = defineProps({
+  dictName: {
+    type: String,
+    required: true
+  },
+  dictValue: {
+    type: [String, Number, Array<string | number>],
+    required: true
+  },
+  customClass: {
+    type: String,
+    default: ''
+  }
+});
+const dictLabels = computed(() => {
+  if (!props.dictName || !props.dictValue) {
+    return '';
+  }
+  if (Array.isArray(props.dictValue)) {
+    return props.dictValue.map((value) => {
+      return dictStore.getDictLabel(props.dictName, value);
+    });
+  }
+  return dictStore.getDictLabel(props.dictName, props.dictValue);
+});
+dictStore.loadDict(props.dictName);
+</script>
+<style lang="scss" scoped></style>

+ 21 - 4
src/components/ie-image/ie-image.vue

@@ -1,16 +1,22 @@
 <template>
-  <view class="overflow-hidden mx-auto" :class="customClass" @click="handleClick"
-    :style="{ borderRadius: round + 'px' }">
-    <image class="w-full h-full block" :src="src" :mode="mode" :lazy-load="lazyLoad"
-      :style="{ borderRadius: round + 'px' }"></image>
+  <view class="overflow-hidden" :class="customClass" @click="handleClick"
+    :style="{ borderRadius: round + 'px', backgroundColor: loaded ? 'transparent' : bgColor }">
+    <image class="w-full h-full block" :src="imageSrc" :mode="mode" :lazy-load="lazyLoad"
+      :style="{ borderRadius: round + 'px' }" @load="onLoad"></image>
   </view>
 </template>
 <script lang="ts" setup>
+// @ts-ignore
+import config from '@/config';
 const props = defineProps({
   src: {
     type: String,
     default: ''
   },
+  isOss: {
+    type: Boolean,
+    default: false
+  },
   mode: {
     type: String,
     default: 'widthFix'
@@ -26,10 +32,21 @@ const props = defineProps({
   round: {
     type: Number,
     default: 0
+  },
+  bgColor: {
+    type: String,
+    default: '#F3F5F6'
   }
 });
+const imageSrc = computed(() => {
+  return props.src ? (props.isOss ? config.ossUrl + props.src : props.src) : '';
+});
 const emit = defineEmits(['click']);
 const handleClick = () => {
   emit('click');
 }
+const loaded = ref(false);
+const onLoad = () => {
+  loaded.value = true;
+}
 </script>

+ 18 - 12
src/components/ie-navbar/ie-navbar.vue

@@ -14,10 +14,10 @@
   </view>
 </template>
 
-<script setup>
-// import useTransferPage from "@/hooks/useTransferPage";
+<script lang="ts" setup>
+import useTransferPage from "@/hooks/useTransferPage";
 import useScroll from '@/hooks/useScroll';
-// const { transferBack } = useTransferPage();
+const { transferBack } = useTransferPage();
 const { scrollTop } = useScroll();
 const isTransparent = ref(false);
 /**
@@ -35,16 +35,22 @@ const isTransparent = ref(false);
  * @property {Object} titleStyle 标题样式
  */
 
-const props = defineProps({
-  title: '',
-  bgColor: 'white',
-  titleColor: '',
+type NavbarOptions = {
+  title: string;
+  bgColor: string;
+  titleColor: string;
+  fixed: boolean;
+  placeholder: boolean;
+  opacity: boolean;
+  transparent: boolean;
+  keepTitleColor: boolean;
+  customBack: boolean;
+  clickHover: boolean;
+  titleStyle: any;
+}
+const props = withDefaults(defineProps<NavbarOptions>(), {
   fixed: true,
   placeholder: true,
-  opacity: false,
-  transparent: false,
-  keepTitleColor: false,
-  customBack: false,
   clickHover: true,
   titleStyle: () => ({})
 });
@@ -107,7 +113,7 @@ const leftClick = () => {
   }
 }
 const handleBack = () => {
-  // transferBack();
+  transferBack();
 }
 </script>
 

+ 34 - 0
src/components/ie-news-item/ie-news-item.vue

@@ -0,0 +1,34 @@
+<template>
+  <view class="shadow-card p-24 rounded-6" @click="handleClikc">
+    <view class="text-28 text-fore-title font-bold ellipsis-2">{{ data.title }}</view>
+    <view class="mt-10 text-26 text-fore-light ellipsis-2">{{ data.description }}</view>
+    <view class="mt-10 flex items-center justify-between">
+      <view class="px-4 py-4 border border-solid border-primary rounded-4 text-primary text-20">{{ data.type }}</view>
+      <view class="flex items-center gap-x-5">
+        <uv-icon name="eye" size="12" />
+        <text class="mr-12 text-22 text-fore-light">{{ data.clicked }}</text>
+        <uv-icon name="clock" size="12" />
+        <text class="text-22 text-fore-light">{{ data.sendDate }}</text>
+      </view>
+    </view>
+  </view>
+</template>
+<script lang="ts" setup>
+import { News } from '@/types/news';
+import { PropType } from 'vue';
+
+const props = defineProps({
+  data: {
+    type: Object as PropType<News>,
+    default: () => ({})
+  }
+});
+
+const emit = defineEmits<{
+  click: [data: News]
+}>();
+const handleClikc = () => {
+  emit('click', props.data);
+}
+</script>
+<style lang="scss" scoped></style>

+ 0 - 40
src/components/ie-oss-image/ie-oss-image.vue

@@ -1,40 +0,0 @@
-<template>
-  <view class="overflow-hidden mx-auto" :class="customClass" @click="handleClick"
-    :style="{ borderRadius: round + 'px' }">
-    <image class="w-full h-full block" :src="imageSrc" :mode="mode" :lazy-load="lazyLoad"
-      :style="{ borderRadius: round + 'px' }"></image>
-  </view>
-</template>
-<script lang="ts" setup>
-// @ts-ignore
-import config from '@/config';
-const props = defineProps({
-  src: {
-    type: String,
-    default: ''
-  },
-  mode: {
-    type: String,
-    default: 'widthFix'
-  },
-  lazyLoad: {
-    type: Boolean,
-    default: true
-  },
-  customClass: {
-    type: String,
-    default: ''
-  },
-  round: {
-    type: Number,
-    default: 0
-  }
-});
-const imageSrc = computed(() => {
-  return props.src ? config.ossUrl + props.src : '';
-});
-const emit = defineEmits(['click']);
-const handleClick = () => {
-  emit('click');
-}
-</script>

+ 10 - 7
src/components/ie-page/ie-page.vue

@@ -2,10 +2,10 @@
   <view class="ie-page theme-ie"
     :class="[tabbar ? '' : (safeAreaInsetBottom ? 'safe-area-inset-bottom' : ''), { 'is-fixed': fixHeight }]"
     :style="{ backgroundColor: bgColor }">
-    <view class="ie-page-content relative" :class="{ 'tabbar-layout': tabbar }">
+    <view class="ie-page-content" :class="{ 'tabbar-layout': tabbar }">
       <slot></slot>
     </view>
-    <view class="relative z-100 flex-shrink-0">
+    <view v-if="tabbar" class="ie-page-tabbar">
       <slot name="tabbar"></slot>
     </view>
   </view>
@@ -45,16 +45,19 @@ const props = defineProps({
 }
 
 .ie-page-content {
-  min-height: 100%;
-  display: flex;
-  flex-direction: column;
+  @apply min-h-full relative flex flex-col;
 
   &.tabbar-layout {
-    padding-bottom: calc(50px + env(safe-area-inset-bottom));
-    min-height: calc(100vh - 50px - env(safe-area-inset-bottom));
+    // padding-bottom: 60px;
+    // min-height: calc(100vh - 50px);
+    // min-height: calc(100vh - 0px);
   }
 }
 
+.ie-page-tabbar {
+  @apply relative z-100 h-[50px];
+}
+
 .is-fixed {
   height: 1px;
 }

+ 30 - 0
src/components/ie-safe-toolbar/ie-safe-toolbar.vue

@@ -0,0 +1,30 @@
+<template>
+  <view class="min-h-62" :style="{ minHeight: minHeight + 'px' }">
+    <view class="safe-area-inset-bottom fixed left-0 bottom-0 right-0 z-10 box-border"
+      :class="{ 'shadow-box': shadow }" :style="{ height: minHeight + 'px' }">
+      <slot></slot>
+    </view>
+  </view>
+</template>
+<script lang="ts" setup>
+import useAppStore from '@/store/appStore';
+const appStore = useAppStore();
+const props = defineProps({
+  height: {
+    type: Number,
+    default: 62
+  },
+  shadow: {
+    type: Boolean,
+    default: true
+  }
+});
+const minHeight = computed(() => {
+  return (appStore.systemInfo.safeAreaInsets?.bottom ?? 0) + props.height;
+});
+</script>
+<style lang="scss" scoped>
+.shadow-box {
+  box-shadow: 0 -2px 8px 0 rgba(0, 0, 0, 0.05);
+}
+</style>

+ 6 - 6
src/components/ie-sms/ie-captcha.vue

@@ -1,11 +1,11 @@
 <template>
   <root-portal externalClass="theme-ie">
     <uv-popup ref="popupRef" mode="bottom" :close-on-click-overlay="false" :closeable="true" :round="16">
-      <view class="w-auto mx-20 box-border p-20 pt-50 pb-30 bg-white">
-        <dw-image :src="captchaImage" custom-class="w-fit h-52" mode="heightFix" @click="debounceGetImage" />
-        <dw-input v-model="codeModelValue" custom-class="mt-20" type="number" :maxlength="3"
+      <view class="w-auto mx-20 box-border px-40 pt-100 pb-60 bg-white">
+        <ie-image :src="captchaImage" custom-class="w-fit h-104 mx-auto" mode="heightFix" @click="debounceGetImage" />
+        <ie-input v-model="codeModelValue" custom-class="mt-40" type="number" :maxlength="3"
           placeholder="请输入验证码" />
-        <dw-button custom-class="mt-20" @click="handleSubmit">确定</dw-button>
+        <ie-button custom-class="mt-40" @click="handleSubmit">确定</ie-button>
       </view>
     </uv-popup>
   </root-portal>
@@ -35,7 +35,7 @@ const open = async () => {
   try {
     await getImage();
   } catch (error) {
-    uni.$dw.showToast('获取验证码失败');
+    uni.$ie.showToast('获取验证码失败');
   }
   popupRef.value.open();
 }
@@ -46,7 +46,7 @@ const close = () => {
 const emit = defineEmits(['valid']);
 const handleSubmit = () => {
   if (!codeModelValue.value) {
-    uni.$dw.showToast('请输入验证码');
+    uni.$ie.showToast('请输入验证码');
     return;
   }
   emit('valid', {

+ 24 - 24
src/components/ie-sms/ie-sms.vue

@@ -3,14 +3,14 @@
   <ie-captcha ref="captchaRef" v-model:code="code" v-model:uuid="uuid" @valid="handleValid" />
 </template>
 <script lang="ts" setup>
-// import useAppConfig from '@/hooks/useAppConfig';
+import useAppConfig from '@/hooks/useAppConfig';
 import useSms from '@/hooks/useSms';
-import DwCaptcha from './ie-captcha.vue';
+import IeCaptcha from './ie-captcha.vue';
 import { EnumSmsApiType, EnumSmsType } from '@/common/enum';
 import { SmsRequestDTO } from '@/types';
 const sms = useSms();
 const { smsTip, isCountingDown, smsIsSending } = sms;
-// const appConfig = useAppConfig();
+const appConfig = useAppConfig();
 defineOptions({
   virtualHost: true,
 })
@@ -43,10 +43,10 @@ const handleValid = (data: { code: string; uuid: string }) => {
 }
 
 const handleSubmit = () => {
-  // if (appConfig.isSmsCaptchaEnable.value && !code.value) {
-  //   uni.$ie.showToast('请输入验证码');
-  //   return;
-  // }
+  if (appConfig.isSmsCaptchaEnable.value && !code.value) {
+    uni.$ie.showToast('请输入验证码');
+    return;
+  }
   uni.$ie.showLoading();
   const params: SmsRequestDTO = {
     mobile: props.phone,
@@ -54,18 +54,18 @@ const handleSubmit = () => {
     uuid: uuid.value,
     code: code.value
   };
-  // sms.sendSms(props.smsApiType, params).then(success => {
-  //   uni.$ie.hideLoading();
-  //   if (success) {
-  //     captchaRef.value.close();
-  //     uni.$ie.showToast('短信发送成功');
-  //     emit('send', props.phone, code.value, uuid.value);
-  //   } else {
-  //     captchaRef.value.changeImage();
-  //   }
-  // }).catch(() => {
-  //   uni.$ie.hideLoading();
-  // });
+  sms.sendSms(props.smsApiType, params).then(success => {
+    uni.$ie.hideLoading();
+    if (success) {
+      captchaRef.value.close();
+      uni.$ie.showToast('短信发送成功');
+      emit('send', props.phone, code.value, uuid.value);
+    } else {
+      captchaRef.value.changeImage();
+    }
+  }).catch(() => {
+    uni.$ie.hideLoading();
+  });
 }
 
 const emit = defineEmits<{
@@ -80,11 +80,11 @@ const handleSend = async () => {
   if (smsIsSending.value || isCountingDown.value) {
     return;
   }
-  // if (appConfig.isSmsCaptchaEnable.value) {
-  //   captchaRef.value.open();
-  // } else {
-  //   handleSubmit();
-  // }
+  if (appConfig.isSmsCaptchaEnable.value) {
+    captchaRef.value.open();
+  } else {
+    handleSubmit();
+  }
 }
 
 onLoad(() => {

+ 34 - 0
src/components/ie-tab/ie-tab.vue

@@ -0,0 +1,34 @@
+<template>
+  <view class="w-fit bg-[#EBF9FF] p-4 rounded-full flex items-center">
+    <view class="w-fit px-20 py-10 rounded-full text-28" :class="{ 'is-active': modelValue === item.value }"
+      v-for="item in options" @click="changeTab(item.value)">
+      {{ item.label }}
+    </view>
+  </view>
+</template>
+<script lang="ts" setup>
+import { PropType } from 'vue';
+
+const modelValue = defineModel('modelValue', {
+  type: String,
+  default: '0'
+});
+const props = defineProps({
+  options: {
+    type: Array as PropType<{
+      label: string;
+      value: string;
+    }[]>,
+    default: () => ([])
+  }
+});
+
+const changeTab = (value: string) => {
+  modelValue.value = value;
+}
+</script>
+<style lang="scss" scoped>
+.is-active {
+  @apply text-white bg-gradient-to-r from-[#91E0FE] to-[#16AFF5];
+}
+</style>

+ 124 - 0
src/components/ie-tabbar/ie-tabbar.vue

@@ -0,0 +1,124 @@
+<template>
+  <view class="ie-tabbar">
+    <view class="ie-tabbar-item" v-for="(item, index) in list" :key="item.pagePath" @click="handleClick(index)">
+      <view class="ie-tabbar-item-container">
+        <ie-image class="ie-tabbar-item-image" :src="active === index ? item.selectedIconPath : item.iconPath"
+          mode="widthFix" />
+      </view>
+      <view :class="[active === index ? 'text-primary' : 'text-fore-subcontent', 'ie-tabbar-item-text']">{{ item.text }}
+      </view>
+    </view>
+  </view>
+</template>
+<script lang="ts" setup>
+import iconHome from '@/pagesMain/static/image/tabbar/icon-home.png';
+import iconHomeActive from '@/pagesMain/static/image/tabbar/icon-home-active.png';
+import iconVolunteer from '@/pagesMain/static/image/tabbar/icon-volunteer.png';
+import iconVolunteerActive from '@/pagesMain/static/image/tabbar/icon-volunteer-active.png';
+import iconMe from '@/pagesMain/static/image/tabbar/icon-me.png';
+import iconMeActive from '@/pagesMain/static/image/tabbar/icon-me-active.png';
+defineOptions({
+  options: {
+    virtualHost: true
+  }
+})
+const props = defineProps({
+  active: {
+    type: Number,
+    default: 0
+  }
+});
+
+const handleClick = (index: number) => {
+  uni.switchTab({
+    url: list[index].pagePath,
+    complete: () => { },
+    fail: (e) => {
+      uni.showToast({
+        title: '跳转失败',
+        icon: 'none'
+      });
+    }
+  });
+}
+const list = [
+  {
+    pagePath: "/pagesMain/pages/index/index",
+    iconPath: iconHome,
+    selectedIconPath: iconHomeActive,
+    text: "首页"
+  },
+  {
+    pagePath: "/pagesMain/pages/volunteer/volunteer",
+    iconPath: iconVolunteer,
+    selectedIconPath: iconVolunteerActive,
+    text: "填志愿"
+  },
+  {
+    pagePath: "/pagesMain/pages/me/me",
+    iconPath: iconMe,
+    selectedIconPath: iconMeActive,
+    text: "我的"
+  }
+];
+// #ifdef H5
+uni.hideTabBar();
+// #endif
+</script>
+<style lang="scss" scoped>
+.ie-tabbar {
+  
+  position: fixed;
+  bottom: 0;
+  left: 0;
+  right: 0;
+  height: 50px;
+  background-color: white;
+  // border-top: 1px solid #efefef;
+  box-shadow: 0 -1px 1px 0 rgba(0, 0, 0, 0.05);
+  display: flex;
+  flex-direction: row;
+  padding-bottom: env(safe-area-inset-bottom);
+  flex-shrink: 0;
+  transform-style: preserve-3d;
+  -webkit-transform-style: preserve-3d;
+  backface-visibility: hidden;
+  -webkit-backface-visibility: hidden;
+}
+
+.ie-tabbar-border {
+  background-color: rgba(0, 0, 0, 0.33);
+  position: absolute;
+  left: 0;
+  top: 0;
+  width: 100%;
+  height: 1px;
+  transform: scaleY(0.5);
+}
+
+.ie-tabbar-item {
+  flex: 1;
+  text-align: center;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  flex-direction: column;
+  position: relative;
+  z-index: 99;
+}
+
+.ie-tabbar-item-container {
+  width: 22px;
+  height: 22px;
+}
+
+.ie-tabbar-item-image {
+  width: 100%;
+  height: 100%;
+}
+
+.ie-tabbar-item-text {
+  font-size: 10px;
+  margin-top: 2px;
+}
+</style>

+ 1 - 1
src/components/mx-login-form-item/mx-login-form-item.vue

@@ -16,7 +16,7 @@
 /*NOTE: 必须设置父级uv-form.labelPosition=`top`来确保该组件的布局*/
 import {computed, ref} from 'vue'
 import {createPropDefine} from "@/utils";
-import {useInjectFormData} from "@/pages/login/components/hooks/useFormDataInjection";
+import {useInjectFormData} from "@/pagesOther/pages/login/components/hooks/useFormDataInjection";
 
 const props = defineProps({
     prop: createPropDefine(''),

+ 0 - 22
src/config.js

@@ -1,22 +0,0 @@
-const config = {
-    identifier: "frontApp",
-    inlineSiteBaseUrl: 'https://www.dz1kt.com/admin',
-    mathJaxCDN: 'https://mingxuejingbang.oss-cn-beijing.aliyuncs.com/MathJaxFiles/3.2.0/es5/tex-svg-full.js',
-    ossUrl: 'https://mingxuejingbang.oss-cn-beijing.aliyuncs.com/ie/iePlus/appIcon'
-};
-
-if (process.env.NODE_ENV === "development") {
-    // config.serverBaseUrl = "https://ieh5.jinlizhiyuan.com/prod-api";
-    // config.serverBaseUrl = "https://www.dz1kt.com/admin/prod-api";
-    config.serverBaseUrl = "https://dz.shineking.top/prod-api";
-    config.paySiteUrl = 'https://www.dz1kt.com/h5';
-    config.responseErrorCatch = true; // API 返回错误时,是否控制台打印
-} else {
-    // config.serverBaseUrl = "https://ieh5.jinlizhiyuan.com/prod-api";
-    // config.serverBaseUrl = "https://www.dz1kt.com/admin/prod-api";
-    config.serverBaseUrl = "https://dz.shineking.top/prod-api";
-    config.paySiteUrl = 'https://www.dz1kt.com/h5';
-    config.responseErrorCatch = true;
-}
-
-export default config;

+ 25 - 0
src/config.ts

@@ -0,0 +1,25 @@
+const config = {
+  identifier: "frontApp",
+  inlineSiteBaseUrl: 'https://www.dz1kt.com/admin',
+  mathJaxCDN: 'https://mingxuejingbang.oss-cn-beijing.aliyuncs.com/MathJaxFiles/3.2.0/es5/tex-svg-full.js',
+  ossUrl: 'https://mingxuejingbang.oss-cn-beijing.aliyuncs.com/ie/iePlus/appIcon',
+  serverBaseUrl: '',
+  paySiteUrl: '',
+  responseErrorCatch: true,
+};
+
+if (process.env.NODE_ENV === "development") {
+  // config.serverBaseUrl = "https://ieh5.jinlizhiyuan.com/prod-api";
+  // config.serverBaseUrl = "https://www.dz1kt.com/admin/prod-api";
+  config.serverBaseUrl = "https://dz.shineking.top/prod-api";
+  config.paySiteUrl = 'https://www.dz1kt.com/h5';
+  config.responseErrorCatch = true; // API 返回错误时,是否控制台打印
+} else {
+  // config.serverBaseUrl = "https://ieh5.jinlizhiyuan.com/prod-api";
+  // config.serverBaseUrl = "https://www.dz1kt.com/admin/prod-api";
+  config.serverBaseUrl = "https://dz.shineking.top/prod-api";
+  config.paySiteUrl = 'https://www.dz1kt.com/h5';
+  config.responseErrorCatch = true;
+}
+
+export default config;

+ 17 - 0
src/hooks/useAppConfig.ts

@@ -0,0 +1,17 @@
+import { EnumAppConfigKey } from "@/common/enum";
+import useAppStore from "@/store/appStore";
+
+const useAppConfig = () => {
+  const appStore = useAppStore();
+  /**
+   * 短信验证码是否开启图形验证
+   */
+  const isSmsCaptchaEnable = computed(() => {
+    return appStore.getAppConfig(EnumAppConfigKey.SMS_CAPTCHA_ENABLE) === 'true';
+  });
+  return {
+    isSmsCaptchaEnable
+  }
+}
+
+export default useAppConfig;

+ 86 - 0
src/hooks/useDebounce.ts

@@ -0,0 +1,86 @@
+/**
+ * 防抖函数 - 延迟函数执行,直到事件停止后的一段时间
+ * @param fn 需要防抖的函数
+ * @param wait 等待时间(毫秒)
+ * @param options 配置选项
+ * @returns 防抖后的函数
+ */
+export function useDebounce<T extends (...args: any[]) => any>(
+  fn: T,
+  wait: number,
+  options?: {
+    /** 是否立即执行第一次调用 */
+    immediate?: boolean;
+  }
+): {
+  /** 防抖后的函数 */
+  (this: any, ...args: Parameters<T>): void;
+  /** 取消当前等待执行的函数调用 */
+  cancel: () => void;
+  /** 立即执行当前等待的函数调用 */
+  flush: () => void;
+} {
+  let timeoutId: ReturnType<typeof setTimeout> | null = null;
+  const immediate = options?.immediate ?? false;
+  
+  const debounced = function (this: any, ...args: Parameters<T>) {
+    // 清除之前的定时器
+    if (timeoutId !== null) {
+      clearTimeout(timeoutId);
+    }
+    
+    // 立即执行模式
+    if (immediate && timeoutId === null) {
+      fn.apply(this, args);
+    }
+    
+    // 设置新的定时器
+    timeoutId = setTimeout(() => {
+      // 非立即执行模式,或者是之后的调用
+      if (!immediate || timeoutId !== null) {
+        fn.apply(this, args);
+      }
+      timeoutId = null;
+    }, wait);
+  };
+  
+  /**
+   * 取消当前等待执行的函数调用
+   */
+  debounced.cancel = function () {
+    if (timeoutId !== null) {
+      clearTimeout(timeoutId);
+      timeoutId = null;
+    }
+  };
+  
+  /**
+   * 立即执行当前等待的函数调用
+   */
+  debounced.flush = function () {
+    if (timeoutId !== null) {
+      clearTimeout(timeoutId);
+      fn();
+      timeoutId = null;
+    }
+  };
+  
+  return debounced;
+}
+
+/**
+ * 用于Vue组件中的防抖钩子
+ * @param value 需要防抖的值
+ * @param wait 等待时间(毫秒)
+ * @returns 防抖后的值
+ */
+export function useDebouncedValue<T>(value: T, wait: number): T {
+  let debouncedValue = value;
+  let timeoutId: ReturnType<typeof setTimeout> | null = null;
+  
+  // 简单实现,实际项目中可能需要结合ref或reactive使用
+  // 完整实现可能需要:import { ref, watch } from 'vue';
+  // 这里仅提供一个基础版本
+  
+  return debouncedValue;
+}

+ 14 - 0
src/hooks/useNavbar.ts

@@ -0,0 +1,14 @@
+const useNavbar = () => {
+  const height = ref(44);
+  const statusBarHeight = uni.getSystemInfoSync().statusBarHeight;
+  const baseStickyTop = computed(() => {
+    return height.value + (statusBarHeight || 0);
+  });
+  return {
+    height,
+    statusBarHeight,
+    baseStickyTop
+  }
+};
+
+export default useNavbar;

+ 8 - 8
src/hooks/useScroll.js → src/hooks/useScroll.ts

@@ -1,7 +1,6 @@
-import {ref, computed, onMounted, onUnmounted} from 'vue'
 import { onPageScroll } from '@dcloudio/uni-app';
 
-const useScrollList = (height) => {
+const useScrollList = (height?: number) => {
   const scrollTop = ref(0);
   const opacity = computed(() => {
     if (height) {
@@ -15,7 +14,7 @@ const useScrollList = (height) => {
    * @param selector 
    * @param offset 
    */
-  const scrollTo = async (selector, offset = 0) => {
+  const scrollTo = async (selector: string, offset: number = 0) => {
     const rect2 = await getRect(selector);
     uni.pageScrollTo({
       scrollTop: scrollTop.value + rect2.top - offset,
@@ -28,22 +27,23 @@ const useScrollList = (height) => {
    * @param selector 
    * @returns 
    */
-  const getRect = (selector) => {
-    return new Promise(resolve => {
+  const getRect = (selector: string) => {
+    return new Promise((resolve: (rect: { top: number, height: number }) => void) => {
       const query = uni.createSelectorQuery();
       query.select(selector).boundingClientRect(function (rect) {
-        resolve(rect );
+        resolve(rect as { top: number, height: number });
       }).exec();
     });
   }
 
-  onPageScroll((e) => {
+  onPageScroll((e: any) => {
     scrollTop.value = e.scrollTop
   });
   return {
     scrollTop,
     opacity,
-    scrollTo
+    scrollTo,
+    getRect
   };
 }
 

+ 3 - 3
src/hooks/useSms.ts

@@ -1,6 +1,6 @@
 import { ref, computed } from 'vue';
 import useUniStore from './useUniStore';
-import { sendSmsNoValidationNoToken, sendSmsNoToken, sendSms as sendSmsApi } from '@/api/new/system';
+import { sendSmsNoValidationNoToken, sendSmsNoToken, sendSms as sendSmsApi } from '@/api/modules/system';
 import { EnumSmsApiType, EnumSmsType } from '@/common/enum';
 
 type SmsApiType = EnumSmsApiType;
@@ -17,8 +17,8 @@ const useSms = () => {
   // 状态常量定义
   const SMS_COUNTDOWN_TIME = 60; // 倒计时时长(秒)
   const STORAGE_KEYS = {
-    LAST_TIME: 'smsLastTime',
-    WAIT_TIME: 'smsWaitTime'
+    LAST_TIME: 'ie-smsLastTime',
+    WAIT_TIME: 'ie-smsWaitTime'
   };
 
   // 剩余等待时间 (-1表示未开始倒计时)

+ 1 - 1
src/hooks/useTheme.js

@@ -6,7 +6,7 @@ import _ from 'lodash';
 export const defaultTheme = {
     // brands 里的颜色会自动生成多种变种,如 lighter、light、DEFAULT、deep、deeper
     brands: {
-        primary: '#3a84f9',
+        primary: '#31A0FC',
         success: '#6ad000',
         warning: '#ff9800',
         error: '#f44336',

+ 1 - 1
src/hooks/useTransfer.js

@@ -76,7 +76,7 @@ export const useTransfer = function () {
         // 这里并没有干涉其它参数,所以$uv.route支持的功能这里应该都能用
         options.params = formatParams
         uni.$uv.route(options)
-        console.log('transferTo:', options, params)
+        // console.log('transferTo:', options, params)
     }
 
     const handleCallback = async function (event) {

+ 170 - 0
src/hooks/useTransferPage.ts

@@ -0,0 +1,170 @@
+import { onLoad } from "@dcloudio/uni-app";
+const useTransferPage = () => {
+  const funcMap = {
+    redirect: uni.redirectTo,
+    reLaunch: uni.reLaunch,
+    switchTab: uni.switchTab
+  };
+  let prevData = ref<Record<string, any>>({});
+  let transferResolver: ((value: unknown) => void) | null = null;
+  let eventChannel: UniApp.EventChannel | null = null;
+  // onMounted(() => {
+  // 使用instance获取getOpenerEventChannel在非页面级组件中会报错
+  // const instance = getCurrentInstance().proxy
+  // if (instance) {
+  //   eventChannel = instance.getOpenerEventChannel();
+  // }
+  // });
+  type Callback = (() => void) | null;
+  type TransferOptions = {
+    data?: Record<string, any> | null,
+    type?: string,
+    bigData?: Record<string, any> | null,
+    callback?: Callback
+  }
+
+  onLoad((opt) => {
+    const pages = getCurrentPages();
+    const page = pages[pages.length - 1];
+    eventChannel = (page as any).getOpenerEventChannel();
+    emit('onPageOpen');
+    for (const key in opt) {
+      if (opt.hasOwnProperty(key) && !['data', 'storageKey'].includes(key)) {
+        prevData.value[key] = decodeURIComponent(opt[key]);
+      }
+    }
+    if (!opt) return;
+    let originData = opt.data;
+    if (opt.data) {
+      if (opt.data.startsWith('%257B')) {
+        originData = decodeURIComponent(opt.data);
+      }
+      const data = JSON.parse(decodeURIComponent(originData || '{}'));
+      Object.assign(prevData.value, data);
+    }
+    const storageKey = opt.storageKey;
+    if (storageKey) {
+      const storageData = uni.getStorageSync(storageKey);
+      Object.assign(prevData.value, storageData);
+    }
+  });
+
+  function getTransferUrl(url: string, data: any, bigData: any) {
+    const urlParams = {
+      data: data ? encodeURIComponent(JSON.stringify(data)) : null,
+      storageKey: bigData ? 'transferBigData' : null
+    };
+
+    // 处理URL中已存在的参数
+    const [baseUrl, existingQuery] = url.split('?');
+    const existingParams = {};
+
+    // 解析现有参数
+    if (existingQuery) {
+      existingQuery.split('&').forEach(param => {
+        const [key, value] = param.split('=');
+        if (key) {
+          // 为 existingParams 显式声明类型为 Record<string, string>
+          (existingParams as Record<string, string>)[key] = value;
+        }
+      });
+    }
+
+    // 合并新参数
+    Object.entries(urlParams)
+      .filter(([_, value]) => value)
+      .forEach(([key, value]) => {
+        (existingParams as Record<string, string>)[key] = value as string;
+      });
+
+    // 构建查询字符串
+    const queryString = Object.entries(existingParams)
+      .map(([key, value]) => `${key}=${value}`)
+      .join('&');
+
+    return queryString ? `${baseUrl}?${queryString}` : baseUrl;
+  }
+
+  function transferTo(url: string, { data = null, type = 'navigate', bigData = null, callback = null }: TransferOptions = {}) {
+    return new Promise((resolve, reject) => {
+      transferResolver = resolve;
+      if (bigData) {
+        uni.setStorageSync('transferBigData', bigData);
+      } else {
+        // clear big data by force
+        uni.removeStorageSync('transferBigData');
+      }
+      const nextUrl = getTransferUrl(url, data, bigData);
+      if (type === 'navigate') {
+        uni.navigateTo({
+          url: nextUrl,
+          events: {
+            transferEnd: (data: any) => {
+              transferResolver?.(data);
+            },
+            onPageOpen: () => {
+              if (callback) {
+                callback?.();
+              }
+            }
+          },
+          fail: (err) => { 
+            console.log('transferTo fail', err);
+          }
+        });
+      } else {
+        const routeFunc = funcMap[type as keyof typeof funcMap];
+        routeFunc({
+          url: nextUrl,
+          fail: (err) => {
+            console.log('transferTo fail', err);
+            reject(err);
+          }
+        });
+      }
+
+
+    });
+  }
+  function transferBack(data:any = null, delta = 1) {
+    emit('transferEnd', data);
+    // force clear big data
+    uni.removeStorageSync('transferBigData');
+    const pages = getCurrentPages();
+    if (pages.length === 1) {
+      switchTab('/pages/splash/splash');
+    } else {
+      uni.navigateBack({
+        delta: delta,
+        success: () => { },
+        fail: (err) => {
+          switchTab('/pages/splash/splash');
+        }
+      });
+    }
+  }
+  function switchTab(url: string) {
+    uni.switchTab({
+      url: url,
+      fail: (err) => {
+        console.log(err);
+      }
+    });
+  }
+
+  function emit(event: string, data = null) {
+    if (eventChannel?.emit) {
+      eventChannel.emit(event, data);
+    } else {
+      console.warn('上级页面丢失,无法触发transferEnd');
+    }
+  }
+
+  return {
+    prevData,
+    transferTo,
+    transferBack,
+  }
+};
+
+export default useTransferPage;

+ 2 - 2
src/hooks/useUserStorePageFilter.js

@@ -25,8 +25,8 @@ export const storeGetterFilter = function (userStore, arraySource, refConfig) {
             return !opposite ? propResult : !propResult
         }
         return !menu["satisfyAny"] ?
-            menu["satisfyStoreGetters"].every(propReader) :
-            menu["satisfyStoreGetters"].some(propReader)
+            menu["satisfyStoreGetters"].every?.(propReader) :
+            menu["satisfyStoreGetters"].some?.(propReader)
     })
     return refConfig ?
         results.map(r => mergeConfigFn(userStore, r, refConfig)) :

+ 13 - 1
src/main.ts

@@ -1,11 +1,14 @@
 // @ts-nocheck
 import App from './App'
 import uvUiTools from "@/uni_modules/uv-ui-tools";
+// #ifdef H5
 import "@/uni.webview.1.5.4"
 import './common/webview.bridge.js'
+// #endif
 import { useRequest } from '@/utils/request'
 import tool from '@/utils/uni-tool'
-
+import * as Pinia from 'pinia';
+import piniaPluginPersistedstate from 'pinia-plugin-persistedstate'
 
 // #ifndef VUE3
 import Vue from 'vue'
@@ -61,10 +64,19 @@ export function createApp() {
         height: { default: 140 },
         width: { default: 140 },
         text: { default: '暂无相关数据' }
+      },
+      icon: {
+        customClass: {
+          default: ''
+        }
       }
     }
   })
 
+  const pinia = Pinia.createPinia();
+  app.use(pinia);
+  pinia.use(piniaPluginPersistedstate);
+
   return {
     app
   }

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 521 - 440
src/pages.json


+ 0 - 55
src/pages/test-center/mbti/components/character-result.vue

@@ -1,55 +0,0 @@
-<template>
-    <component :is="blockMap[code]" :scores="scores"/>
-    <uv-back-top :scroll-top="scrollTop"/>
-</template>
-
-<script setup>
-import {createPropDefine} from "@/utils";
-import ENFJ from "@/pages/test-center/mbti/components/results/ENFJ.vue";
-import ENFP from "@/pages/test-center/mbti/components/results/ENFP.vue";
-import ENTJ from "@/pages/test-center/mbti/components/results/ENTJ.vue";
-import ENTP from "@/pages/test-center/mbti/components/results/ENTP.vue";
-import ESFJ from "@/pages/test-center/mbti/components/results/ESFJ.vue";
-import ESFP from "@/pages/test-center/mbti/components/results/ESFP.vue";
-import ESTJ from "@/pages/test-center/mbti/components/results/ESTJ.vue";
-import ESTP from "@/pages/test-center/mbti/components/results/ESTP.vue";
-import INFJ from "@/pages/test-center/mbti/components/results/INFJ.vue";
-import INFP from "@/pages/test-center/mbti/components/results/INFP.vue";
-import INTJ from "@/pages/test-center/mbti/components/results/INTJ.vue";
-import INTP from "@/pages/test-center/mbti/components/results/INTP.vue";
-import ISFJ from "@/pages/test-center/mbti/components/results/ISFJ.vue";
-import ISFP from "@/pages/test-center/mbti/components/results/ISFP.vue";
-import ISTJ from "@/pages/test-center/mbti/components/results/ISTJ.vue";
-import ISTP from "@/pages/test-center/mbti/components/results/ISTP.vue";
-import {useInjectPageScroll} from "@/hooks/usePageScrollInjection";
-
-defineProps({
-    code: createPropDefine(''),
-    scores: createPropDefine([], Array)
-})
-
-const {scrollTop} = useInjectPageScroll()
-
-const blockMap = {
-    'ENFJ': ENFJ,
-    'ENFP': ENFP,
-    'ENTJ': ENTJ,
-    'ENTP': ENTP,
-    'ESFJ': ESFJ,
-    'ESFP': ESFP,
-    'ESTJ': ESTJ,
-    'ESTP': ESTP,
-    'INFJ': INFJ,
-    'INFP': INFP,
-    'INTJ': INTJ,
-    'INTP': INTP,
-    'ISFJ': ISFJ,
-    'ISFP': ISFP,
-    'ISTJ': ISTJ,
-    'ISTP': ISTP
-}
-</script>
-
-<style scoped>
-
-</style>

+ 65 - 0
src/pagesMain/pages/index/components/index-banner.vue

@@ -0,0 +1,65 @@
+<template>
+  <view class="shadow-card mx-30 bg-white overflow-hidden rounded-17 p-2">
+    <ie-image :is-oss="true" src="/banner/index-banner-1.png" custom-class="w-full min-h-264 overflow-hidden"
+      :round="15" />
+    <view class="pt-24 pb-40 bg-white grid grid-cols-4 gap-y-32 justify-items-center">
+      <view class="w-fit justify-items-center" v-for="item in menus" :key="item.name" @click="navigateTo(item.pageUrl)">
+        <ie-image :is-oss="true" custom-class="w-auto h-82" :round="10" :src="item.icon" mode="heightFix" />
+        <view class="text-26 text-fore-title">{{ item.name }}</view>
+      </view>
+    </view>
+  </view>
+  <view class="mx-30 mt-36">
+    <ie-image :is-oss="true" src="/banner/index-banner-2.png" custom-class="w-full min-h-180 bg-back" :round="15" />
+  </view>
+</template>
+<script lang="ts" setup>
+import useTransferPage from '@/hooks/useTransferPage';
+const { transferTo } = useTransferPage();
+const menus = [
+  {
+    name: '学习备考',
+    icon: '/menu/menu-study.png',
+    pageUrl: '/pagesStudy/pages/index/index',
+  },
+  {
+    name: '志愿填报',
+    icon: '/menu/menu-volunteer.png',
+    pageUrl: '/pages/index/index',
+  },
+  {
+    name: '找院校',
+    icon: '/menu/menu-college.png',
+    pageUrl: '/pages/index/index',
+  },
+  {
+    name: '查专业',
+    icon: '/menu/menu-major.png',
+    pageUrl: '/pages/index/index',
+  },
+  {
+    name: '看职业',
+    icon: '/menu/menu-work.png',
+    pageUrl: '/pages/index/index',
+  },
+  {
+    name: '自我测评',
+    icon: '/menu/menu-test.png',
+    pageUrl: '/pagesTest/index/index',
+  },
+  {
+    name: '单招资讯',
+    icon: '/menu/menu-news.png',
+    pageUrl: '/pages/index/index',
+  },
+  {
+    name: '专升本',
+    icon: '/menu/menu-upgrade.png',
+    pageUrl: '/pages/index/index',
+  }
+]
+const navigateTo = (pageUrl: string) => {
+  transferTo(pageUrl);
+}
+</script>
+<style lang="scss" scoped></style>

+ 79 - 0
src/pagesMain/pages/index/components/index-guide.vue

@@ -0,0 +1,79 @@
+<template>
+  <view class="mt-32 mx-30">
+    <ie-card title="通关指南">
+      <view class="wrap mt-20 bg-white rounded-15">
+        <uv-tabs :current="current" :list="tabs" :scrollable="false" @change="handleChange"></uv-tabs>
+        <view class="p-30 grid grid-cols-2 gap-x-20 gap-y-20 justify-items-center">
+          <view class="w-full justify-items-center relative" v-for="(item, index) in contentList" :key="item.id"
+            @click="handleClick(item)">
+            <ie-image :src="item.image" class="w-full h-150" :round="10" bg-color="transparent" />
+            <view class="absolute inset-0 h-full z-1 flex flex-col items-start justify-center box-border pl-16">
+              <view v-if="item.subType" class="text-28 text-fore-title font-bold">{{ item.subType }}</view>
+              <view v-if="item.description" class="mt-6 text-20 text-fore-light">{{ item.description }}</view>
+            </view>
+          </view>
+        </view>
+      </view>
+    </ie-card>
+  </view>
+</template>
+<script lang="ts" setup>
+import { getNewsMainList } from '@/api/modules/news';
+import { Guide } from '@/types/news';
+import config from '@/config';
+import useUserStore from '@/store/userStore';
+import useTransferPage from '@/hooks/useTransferPage';
+const userStore = useUserStore();
+const { transferTo } = useTransferPage();
+
+const current = ref(0);
+const newsList = ref<Guide[]>([]);
+const bgPool = [
+  ['ie-guide-5.png', 'ie-guide-6.png', 'ie-guide-7.png'],
+  ['ie-guide-1.png', 'ie-guide-2.png', 'ie-guide-3.png', 'ie-guide-4.png'],
+  ['ie-guide-8.png']
+]
+const tabs = computed(() => {
+  const set = new Set();
+  if (!newsList.value.length) {
+    return [];
+  }
+  newsList.value.forEach(item => {
+    set.add(item.type);
+  });
+  return Array.from(set).map(type => ({ name: type }));
+});
+const contentList = computed(() => {
+  return newsList.value.filter(news => news.type === tabs.value[current.value].name).map((item, index) => {
+    const bgPoolIndex = current.value % bgPool.length;
+    return {
+      ...item,
+      image: config.ossUrl + '/guide/' + bgPool[bgPoolIndex][index % bgPool[bgPoolIndex].length]
+    }
+  });
+});
+
+const handleChange = (e: any) => {
+  current.value = e.index;
+}
+
+const emit = defineEmits<{
+  detail: [id: number | string]
+}>();
+
+const handleClick = async (data: Guide) => {
+  emit('detail', data.refIds);
+}
+
+const loadData = () => {
+  getNewsMainList().then(res => {
+    newsList.value = res.rows;
+  });
+}
+loadData();
+</script>
+<style lang="scss" scoped>
+.wrap {
+  box-shadow: 0px 2px 20px 0px rgba(0, 0, 0, 0.05);
+}
+</style>

+ 36 - 0
src/pagesMain/pages/index/components/index-news.vue

@@ -0,0 +1,36 @@
+<template>
+  <view class="mt-32 mx-30">
+    <ie-card title="最新动态">
+      <view class="wrap mt-20 bg-white rounded-15">
+        <view class="mb-20" v-for="item in newsList" :key="item.id">
+          <ie-news-item :data="item" @click="handleClick" />
+        </view>
+      </view>
+    </ie-card>
+  </view>
+</template>
+<script lang="ts" setup>
+import { getNewsListNoToken } from '@/api/modules/news';
+import { News } from '@/types/news';
+const newsList = ref<News[]>([]);
+
+const emit = defineEmits<{
+  detail: [id: number | string]
+}>();
+
+const handleClick = async (data: News) => {
+  emit('detail', data.id);
+}
+const loadData = async () => {
+  const { rows } = await getNewsListNoToken({
+    pageNum: 1,
+    pageSize: 5
+  });
+  newsList.value = rows;
+}
+
+onLoad(() => {
+  loadData();
+});
+</script>
+<style lang="scss" scoped></style>

+ 53 - 0
src/pagesMain/pages/index/index.vue

@@ -0,0 +1,53 @@
+<template>
+  <ie-page tabbar bg-color="white">
+    <ie-navbar transparent bg-color="#FFFFFF" :placeholder="false">
+      <template #headerLeft>
+        <view class="flex items-center">
+          <view class="text-36 text-fore-title font-bold">单招一卡通</view>
+          <view class="w-6 h-6 rounded-2 bg-black mx-12"></view>
+          <view>升学备考好帮手</view>
+        </view>
+      </template>
+    </ie-navbar>
+    <view class="absolute top-0 left-0 right-0 z-0 h-[489rpx] bg-gradient-to-b from-[#6ACAFF] to-white"></view>
+    <view class="relative z-2" :style="{ paddingTop: baseStickyTop + 10 + 'px' }">
+      <index-banner />
+      <index-guide @detail="handleDetail" />
+      <index-news @detail="handleDetail" />
+    </view>
+    <template #tabbar>
+      <ie-tabbar :active="0" />
+    </template>
+    
+  </ie-page>
+</template>
+
+<script lang="ts" setup>
+import IndexBanner from './components/index-banner.vue';
+import IndexGuide from './components/index-guide.vue';
+import IndexNews from './components/index-news.vue';
+
+import useUserStore from '@/store/userStore';
+// @ts-ignore
+import mxConst from '@/common/mxConst';
+import useTransferPage from '@/hooks/useTransferPage';
+import useNavbar from '@/hooks/useNavbar';
+const { transferTo } = useTransferPage();
+const { baseStickyTop } = useNavbar();
+const userStore = useUserStore();
+
+const handleDetail = async (id: number | string) => {
+  const isLogin = await userStore.checkLogin();
+  if (isLogin) {
+    transferTo(mxConst.routes.newsDetail, {
+      data: {
+        id: id
+      }
+    });
+  }
+}
+
+onPageScroll(() => { });
+</script>
+
+<style lang="scss" scoped></style>

+ 54 - 0
src/pagesMain/pages/me/components/me-info.vue

@@ -0,0 +1,54 @@
+<template>
+  <view class="mx-30 mt-80">
+    <view class="flex items-center justify-between gap-x-20" @click="handleHeaderClick">
+      <ie-image :src="avatar" custom-class="w-128 h-128" :round="999" />
+      <view class="flex-1 min-w-1">
+        <view class="text-40 text-fore-title flex items-center gap-x-20">
+          <text class="font-bold">{{ nickName }}</text>
+          <ie-image v-if="!isVip" src="/static/personal/vip_tag.png" custom-class="w-100 h-36" />
+        </view>
+        <view v-if="phonenumber" class="text-30 text-fore-subcontent">{{ phonenumber }}</view>
+      </view>
+      <view>
+        <ie-image src="/static/personal/setting.png" custom-class="w-48 h-48" />
+      </view>
+    </view>
+    <view class="my-30 flex items-center text-center">
+      <view class="flex-1">
+        <view class="text-30 text-fore-title font-bold">0</view>
+        <view class="mt-10 text-26 text-fore-subcontent">做题数量</view>
+      </view>
+      <view class="flex-1">
+        <view class="text-30 text-fore-title font-bold">0</view>
+        <view class="mt-10 text-26 text-fore-subcontent">视频观看时长</view>
+      </view>
+      <view class="flex-1">
+        <view class="text-30 text-fore-title font-bold">0</view>
+        <view class="mt-10 text-26 text-fore-subcontent">登录次数</view>
+      </view>
+    </view>
+    <view class="relative">
+      <ie-image src="/static/personal/buy_vip.png" custom-class="w-full h-96" />
+      <view class="absolute left-100 right-20 top-0 h-full flex items-center justify-between">
+        <view class="text-26 text-fore-title">已开通会员,享受权益中</view>
+        <view class="text-26 text-fore-subcontent">2025-01-01 到期</view>
+      </view>
+    </view>
+  </view>
+</template>
+<script lang="ts" setup>
+import useUserStore from '@/store/userStore';
+import useTransferPage from '@/hooks/useTransferPage';
+const userStore = useUserStore();
+const { transferTo } = useTransferPage();
+const avatar = computed(() => userStore.avatar);
+const nickName = computed(() => userStore.nickName);
+const phonenumber = computed(() => userStore.anonymousPhoneNumber);
+const isVip = computed(() => userStore.isVip);
+
+const handleHeaderClick = async () => {
+  // 不询问直接跳转登录
+  const isLogin = await userStore.checkLogin({ askToLogin: false });
+}
+</script>
+<style lang="scss" scoped></style>

+ 7 - 0
src/pagesMain/pages/me/components/me-menu copy.vue

@@ -0,0 +1,7 @@
+<template>
+  <view></view>
+</template>
+<script lang="ts" setup>
+
+</script>
+<style lang="scss" scoped></style>

+ 97 - 0
src/pagesMain/pages/me/components/me-menu.vue

@@ -0,0 +1,97 @@
+<template>
+  <view class="">
+    <view class="mx-30">
+      <view class="mt-40 text-30 text-fore-title font-bold mb-16">常用功能</view>
+      <view class="shadow-card rounded-8 py-20 grid grid-cols-4 bg-white">
+        <view v-for="item in menus" :key="item.name" class="flex flex-col items-center" @click="handleClick(item)">
+          <ie-image :src="item.icon" custom-class="w-70 h-70 rounded-full" />
+          <view class="mt-10 text-28 text-fore-subtitle">{{ item.name }}</view>
+        </view>
+      </view>
+      <view class="mt-40 text-30 text-fore-title font-bold">其他功能</view>
+    </view>
+    <view class="-mt-10 rounded-8 py-20">
+      <uv-cell-group :border="false">
+        <uv-cell isLink :cellStyle="cellStyle">
+          <template #title>
+            <view class="flex items-center gap-x-10">
+              <ie-image src="/static/personal/icon_jibenziliao@2x.png" custom-class="w-34 h-34" />
+              <text class="text-30 text-fore-subtitle">基本资料</text>
+            </view>
+          </template>
+
+        </uv-cell>
+        <uv-cell isLink :cellStyle="cellStyle">
+          <template #title>
+            <view class="flex items-center gap-x-10">
+              <ie-image src="/static/personal/icon_password@2x.png" custom-class="w-36 h-36" />
+              <text class="text-30 text-fore-subtitle">修改密码</text>
+            </view>
+          </template>
+        </uv-cell>
+        <uv-cell isLink :cellStyle="cellStyle">
+          <template #title>
+            <view class="flex items-center gap-x-10">
+              <uv-icon name="question-circle" size="16" color="#888888" />
+              <text class="text-30 text-fore-subtitle">常见问题</text>
+            </view>
+          </template>
+        </uv-cell>
+      </uv-cell-group>
+    </view>
+    <view v-if="userStore.isLogin" class="mt-80 w-400 mx-auto">
+      <uv-button type="error" size="medium" shape="circle" text="退出登陆" plain @click="handleLogout"></uv-button>
+    </view>
+  </view>
+</template>
+<script lang="ts" setup>
+import useTransferPage from '@/hooks/useTransferPage';
+import useUserStore from '@/store/userStore';
+const { transferTo } = useTransferPage();
+const userStore = useUserStore();
+
+type MenuItem = {
+  name: string;
+  icon: string;
+  pagePath: string;
+};
+
+const menus = [
+  {
+    name: '测评报告',
+    icon: '/static/personal/test_report.png',
+    pagePath: '/pages/test-center/list/list',
+  },
+  {
+    name: '我的收藏',
+    icon: '/static/personal/my_collected.png',
+    pagePath: '/pages/test-center/list/list',
+  },
+  {
+    name: '我的志愿表',
+    icon: '/static/personal/my_simulated.png',
+    pagePath: '/pages/test-center/list/list',
+  },
+  {
+    name: '绑定会员卡',
+    icon: '/static/personal/bind_card.png',
+    pagePath: '/pages/test-center/list/list',
+  }
+];
+const cellStyle = {
+  padding: '30rpx 30rpx'
+}
+const handleClick = async (item: MenuItem) => {
+  const isLogin = await userStore.checkLogin();
+  if (isLogin) {
+    transferTo(item.pagePath);
+  }
+}
+const handleLogout = async () => {
+  const confirm = await userStore.askLogout();
+  if (confirm) {
+
+  }
+}
+</script>
+<style lang="scss" scoped></style>

+ 15 - 0
src/pagesMain/pages/me/me.vue

@@ -0,0 +1,15 @@
+<template>
+  <ie-page>
+    <ie-image :is-oss="true" src="/volunteer/page-bg.png" custom-class="w-full h-auto absolute top-0 left-0 -z-1" />
+    <me-info />
+    <me-menu />
+    <ie-tabbar #tabbar :active="2" />
+  </ie-page>
+</template>
+
+<script lang="ts" setup>
+import meInfo from './components/me-info.vue';
+import meMenu from './components/me-menu.vue';
+</script>
+
+<style></style>

+ 39 - 0
src/pagesMain/pages/splash/splash.vue

@@ -0,0 +1,39 @@
+<template>
+  <ie-page :fix-height="true">
+    <view class="flex-1 min-h-1 h-full flex items-center justify-center">
+      <uv-image :src="imgLaunch" width="55vw" height="auto" mode="widthFix" class="-mt-300" />
+    </view>
+  </ie-page>
+</template>
+
+<script lang="ts" setup>
+import config from '@/config';
+import useAppStore from '@/store/appStore';
+import useAppConfig from '@/hooks/useAppConfig';
+import useUserStore from '@/store/userStore';
+import useTransferPage from '@/hooks/useTransferPage';
+const appStore = useAppStore();
+const userStore = useUserStore();
+const { transferTo } = useTransferPage();
+// #ifdef H5
+uni.hideTabBar();
+// #endif
+const imgLaunch = computed(() => {
+  return config.ossUrl + '/launch.png'
+});
+const handleLoad = () => {
+  // 执行初始化的操作:预加载字典、提前校验token是否有效等
+  appStore.init().then(() => {
+    setTimeout(() => {
+      transferTo('/pagesMain/pages/index/index', {
+        type: 'reLaunch'
+      });
+    }, 1500);
+  });
+};
+onLoad(() => {
+  handleLoad();
+});
+</script>
+
+<style></style>

+ 76 - 0
src/pagesMain/pages/volunteer/volunteer.vue

@@ -0,0 +1,76 @@
+<template>
+  <ie-page>
+    <ie-image :is-oss="true" src="/volunteer/page-bg.png" custom-class="w-full h-auto absolute top-0 left-0 -z-1" />
+    <ie-image :is-oss="true" src="/volunteer/title-right.png" custom-class="w-400 h-auto absolute top-100 right-0" />
+    <view class="pt-200 ml-30">
+      <ie-image :is-oss="true" src="/volunteer/title.png" custom-class="w-auto h-140 bg-back" mode="heightFix" />
+    </view>
+    <view class="relative">
+      <ie-image :is-oss="true" src="/volunteer/volunteer-bg.png" custom-class="w-full h-220" mode="scaleToFill" />
+      <view class="text-28 text-white absolute top-42 left-60">我的信息</view>
+      <view
+        class="px-46 h-1/2 absolute left-0 right-0 top-1/2 -translate-y-1/2 flex items-center justify-between box-border pt-50 text-24 text-primary">
+        <text>姓名:{{ userStore.nickName }}</text>
+        <text>省份:{{ userStore.userInfo.location || '--' }}</text>
+        <text>类别:<ie-dict :dict-name="EnumDictName.EXAM_TYPE" :dict-value="userStore.userInfo.examType || '--'" /></text>
+      </view>
+    </view>
+    <view class="mx-26">
+      <view class="mb-20 shadow-card px-30 py-20 bg-white rounded-8 flex items-center justify-between gap-x-30"
+        v-for="item in menu" :key="item.title" @click="handleClick(item)">
+        <ie-image :is-oss="true" :src="item.icon" custom-class="w-96 h-96 rounded-full" />
+        <view class="flex-1">
+          <view class="text-28 text-fore-title">{{ item.title }}</view>
+          <view class="mt-8 text-22 text-fore-light">{{ item.desc }}</view>
+        </view>
+        <uv-icon name="arrow-right" size="16" color="#B2B2B2" />
+      </view>
+    </view>
+    <ie-tabbar #tabbar :active="1" />
+  </ie-page>
+</template>
+
+<script lang="ts" setup>
+import useUserStore from '@/store/userStore';
+import useTransferPage from '@/hooks/useTransferPage';
+import { EnumDictName } from '@/common/enum';
+const { transferTo } = useTransferPage();
+const userStore = useUserStore();
+type MenuItem = {
+  title: string;
+  desc: string;
+  icon: string;
+  pagePath: string;
+};
+const menu: MenuItem[] = [
+  {
+    title: '院校录取概率测试',
+    desc: '输入院校专业,精准测算录取结果',
+    icon: '/volunteer/single.png',
+    pagePath: '/pagesOther/pages/ie/entry-single/entry-single'
+  },
+  {
+    title: '模拟志愿分析',
+    desc: '精准分析你的志愿表',
+    icon: '/volunteer/analysis.png',
+    pagePath: '/pagesOther/pages/ie/entry-analysis/entry-analysis'
+  },
+  {
+    title: 'AI志愿',
+    desc: '精准推荐合理志愿,生成志愿表',
+    icon: '/volunteer/ai.png',
+    pagePath: '/pagesOther/pages/ie/entry-ai/entry-ai'
+  },
+  {
+    title: '测职业技能分',
+    desc: '结合院校录取规则,快速测算',
+    icon: '/volunteer/calculate.png',
+    pagePath: '/pagesOther/pages/ie/entry-calculate/entry-calculate'
+  }
+];
+const handleClick = (item: MenuItem) => {
+  transferTo(item.pagePath);
+}
+</script>
+
+<style lang="scss" scoped></style>

BIN
src/pagesMain/static/image/tabbar/icon-home-active.png


BIN
src/pagesMain/static/image/tabbar/icon-home.png


BIN
src/pagesMain/static/image/tabbar/icon-me-active.png


BIN
src/pagesMain/static/image/tabbar/icon-me.png


BIN
src/pagesMain/static/image/tabbar/icon-volunteer-active.png


BIN
src/pagesMain/static/image/tabbar/icon-volunteer.png


+ 0 - 0
src/pages/career/query-segment/components/segment-score-table.vue → src/pagesOther/pages/career/query-segment/components/segment-score-table.vue


+ 1 - 1
src/pages/career/query-segment/query-segment.vue → src/pagesOther/pages/career/query-segment/query-segment.vue

@@ -58,7 +58,7 @@ import {useConditionSegmentMode} from "@/components/mx-condition/modules/useCond
 import {useProvideVoluntaryData} from "@/hooks/useVoluntaryDataInjection";
 import {useCacheStore} from "@/hooks/useCacheStore";
 import {cacheActions} from "@/hooks/defineCacheActions";
-import SegmentScoreTable from "@/pages/career/query-segment/components/segment-score-table.vue";
+import SegmentScoreTable from "@/pagesOther/pages/career/query-segment/components/segment-score-table.vue";
 
 const paging = ref(null)
 const form = ref(null)

+ 0 - 0
src/pages/college-library/components/college-detail-brochureCell.vue → src/pagesOther/pages/college-library/components/college-detail-brochureCell.vue


+ 0 - 0
src/pages/college-library/components/college-detail-summary.vue → src/pagesOther/pages/college-library/components/college-detail-summary.vue


+ 1 - 1
src/pages/college-library/components/college-item-collect.vue → src/pagesOther/pages/college-library/components/college-item-collect.vue

@@ -8,7 +8,7 @@
 <script setup>
 import {computed} from 'vue';
 import {createPropDefine} from "@/utils";
-import {useCollegeCollectionService} from "@/pages/college-library/components/useCollegeCollectionService";
+import {useCollegeCollectionService} from "@/pagesOther/pages/college-library/components/useCollegeCollectionService";
 
 const props = defineProps({
     college: createPropDefine({}, Object)

+ 0 - 0
src/pages/college-library/components/college-item.vue → src/pagesOther/pages/college-library/components/college-item.vue


+ 1 - 1
src/pages/college-library/components/college-list.vue → src/pagesOther/pages/college-library/components/college-list.vue

@@ -26,7 +26,7 @@ import {useConditionCollegeFeatures} from "@/components/mx-condition/modules/use
 import {useConditionCollegeType} from "@/components/mx-condition/modules/useConditionCollegeType";
 import {useConditionCollegeNatureTypeCN} from "@/components/mx-condition/modules/useConditionCollegeNatureTypeCN";
 import {useConditionCollegeLocation} from "@/components/mx-condition/modules/useConditionCollegeLocation";
-import CollegeItem from "@/pages/college-library/components/college-item.vue";
+import CollegeItem from "@/pagesOther/pages/college-library/components/college-item.vue";
 import {sleep} from "@/uni_modules/uv-ui-tools/libs/function";
 import {createPropDefine} from "@/utils";
 

+ 0 - 0
src/pages/college-library/components/college-major-tag.vue → src/pagesOther/pages/college-library/components/college-major-tag.vue


+ 1 - 1
src/pages/college-library/components/college-rank.vue → src/pagesOther/pages/college-library/components/college-rank.vue

@@ -17,7 +17,7 @@ import {ref, computed} from 'vue'
 import {useUserStore} from "@/hooks/useUserStore";
 import {useTransfer} from "@/hooks/useTransfer";
 import {useCacheStore} from "@/hooks/useCacheStore";
-import CollegeItem from "@/pages/college-library/components/college-item.vue";
+import CollegeItem from "@/pagesOther/pages/college-library/components/college-item.vue";
 import {universityList} from "@/api/webApi/collegemajor";
 
 const {currentUser} = useUserStore()

+ 0 - 0
src/pages/college-library/components/plan-enroll-descriptor.vue → src/pagesOther/pages/college-library/components/plan-enroll-descriptor.vue


+ 1 - 1
src/pages/college-library/components/plan-enroll-list.vue → src/pagesOther/pages/college-library/components/plan-enroll-list.vue

@@ -38,7 +38,7 @@ import {createPropDefine} from "@/utils";
 import {useUserStore} from "@/hooks/useUserStore";
 import {conditionSharedConfig} from "@/components/mx-condition/modules/conditionSharedConfig";
 import {useProvideSearchModel} from "@/components/mx-condition/useSearchModelInjection";
-import PlanEnrollDescriptor from "@/pages/college-library/components/plan-enroll-descriptor.vue";
+import PlanEnrollDescriptor from "@/pagesOther/pages/college-library/components/plan-enroll-descriptor.vue";
 
 const props = defineProps({
     list: createPropDefine([], Array),

+ 0 - 0
src/pages/college-library/components/useCollegeCollectionService.js → src/pagesOther/pages/college-library/components/useCollegeCollectionService.js


+ 5 - 5
src/pages/college-library/detail/detail.vue → src/pagesOther/pages/college-library/detail/detail.vue

@@ -55,11 +55,11 @@ import {useTransfer} from "@/hooks/useTransfer";
 import {useUserStore} from "@/hooks/useUserStore";
 import {useCacheStore} from "@/hooks/useCacheStore";
 import {universityDetail} from "@/api/webApi/collegemajor";
-import CollegeItem from "@/pages/college-library/components/college-item.vue";
-import CollegeItemCollect from "@/pages/college-library/components/college-item-collect.vue";
-import CollegeDetailSummary from "@/pages/college-library/components/college-detail-summary.vue";
-import CollegeDetailBrochureCell from "@/pages/college-library/components/college-detail-brochureCell.vue";
-import PlanEnrollList from "@/pages/college-library/components/plan-enroll-list.vue";
+import CollegeItem from "@/pagesOther/pages/college-library/components/college-item.vue";
+import CollegeItemCollect from "@/pagesOther/pages/college-library/components/college-item-collect.vue";
+import CollegeDetailSummary from "@/pagesOther/pages/college-library/components/college-detail-summary.vue";
+import CollegeDetailBrochureCell from "@/pagesOther/pages/college-library/components/college-detail-brochureCell.vue";
+import PlanEnrollList from "@/pagesOther/pages/college-library/components/plan-enroll-list.vue";
 
 const {prevData} = useTransfer()
 const {isCultural} = useUserStore()

+ 2 - 2
src/pages/college-library/index/index.vue → src/pagesOther/pages/college-library/index/index.vue

@@ -14,8 +14,8 @@
 
 <script setup>
 import {ref, computed} from 'vue'
-import CollegeList from "@/pages/college-library/components/college-list.vue";
-import CollegeRank from "@/pages/college-library/components/college-rank.vue";
+import CollegeList from "@/pagesOther/pages/college-library/components/college-list.vue";
+import CollegeRank from "@/pagesOther/pages/college-library/components/college-rank.vue";
 
 const current = ref(0)
 const tabs = ref([{name: '院校库', template: 'college'}, {name: '院校排名', template: 'rank'}])

+ 0 - 0
src/pages/college-library/introduction/introduction.vue → src/pagesOther/pages/college-library/introduction/introduction.vue


+ 1 - 1
src/pages/college-library/picker/picker.vue → src/pagesOther/pages/college-library/picker/picker.vue

@@ -14,7 +14,7 @@
 
 <script setup>
 import {ref, computed, onMounted} from 'vue';
-import CollegeList from "@/pages/college-library/components/college-list.vue";
+import CollegeList from "@/pagesOther/pages/college-library/components/college-list.vue";
 import {useCacheStore} from "@/hooks/useCacheStore";
 import {useTransfer} from "@/hooks/useTransfer";
 import {cacheActions} from "@/hooks/defineCacheActions";

+ 0 - 0
src/pages/h5/h5.vue → src/pagesOther/pages/h5/h5.vue


+ 0 - 0
src/pages/ie/components/AIFormCommonStyle.js → src/pagesOther/pages/ie/components/AIFormCommonStyle.js


+ 0 - 0
src/pages/ie/components/ai-form/InjectFormDataMixin.js → src/pagesOther/pages/ie/components/ai-form/InjectFormDataMixin.js


+ 0 - 0
src/pages/ie/components/ai-form/RenderRulesDemo.js → src/pagesOther/pages/ie/components/ai-form/RenderRulesDemo.js


+ 0 - 0
src/pages/ie/components/ai-form/ai-form-item.vue → src/pagesOther/pages/ie/components/ai-form/ai-form-item.vue


+ 1 - 1
src/pages/ie/components/ai-form/ai-form.vue → src/pagesOther/pages/ie/components/ai-form/ai-form.vue

@@ -16,7 +16,7 @@
 <script>
 import MxConst from "@/common/MxConst";
 import _ from 'lodash';
-import AiFormItemGroup from "@/pages/ie/components/ai-form/items/ai-form-item-group.vue";
+import AiFormItemGroup from "@/pagesOther/pages/ie/components/ai-form/items/ai-form-item-group.vue";
 import {toast} from "@/uni_modules/uv-ui-tools/libs/function";
 
 export default {

+ 1 - 1
src/pages/ie/components/ai-form/items/AIFormFieldBase.js → src/pagesOther/pages/ie/components/ai-form/items/AIFormFieldBase.js

@@ -1,4 +1,4 @@
-import InjectFormDataMixin from "@/pages/ie/components/ai-form/InjectFormDataMixin";
+import InjectFormDataMixin from "@/pagesOther/pages/ie/components/ai-form/InjectFormDataMixin";
 
 export default {
     mixins: [InjectFormDataMixin],

+ 3 - 3
src/pages/ie/components/ai-form/items/ai-form-college-major.vue → src/pagesOther/pages/ie/components/ai-form/items/ai-form-college-major.vue

@@ -7,9 +7,9 @@
 </template>
 
 <script>
-import IeFormPicker from "@/pages/ie/components/picker/ie-form-picker.vue";
-import MajorPicker from "@/pages/ie/components/picker/major-picker.vue";
-import AIFormFieldBase from "@/pages/ie/components/ai-form/items/AIFormFieldBase";
+import IeFormPicker from "@/pagesOther/pages/ie/components/picker/ie-form-picker.vue";
+import MajorPicker from "@/pagesOther/pages/ie/components/picker/major-picker.vue";
+import AIFormFieldBase from "@/pagesOther/pages/ie/components/ai-form/items/AIFormFieldBase";
 import {toast} from "@/uni_modules/uv-ui-tools/libs/function";
 
 export default {

+ 2 - 2
src/pages/ie/components/ai-form/items/ai-form-college.vue → src/pagesOther/pages/ie/components/ai-form/items/ai-form-college.vue

@@ -6,8 +6,8 @@
 
 <script>
 import {ref, getCurrentInstance} from 'vue';
-import IeFormPicker from "@/pages/ie/components/picker/ie-form-picker.vue";
-import AIFormFieldBase from "@/pages/ie/components/ai-form/items/AIFormFieldBase";
+import IeFormPicker from "@/pagesOther/pages/ie/components/picker/ie-form-picker.vue";
+import AIFormFieldBase from "@/pagesOther/pages/ie/components/ai-form/items/AIFormFieldBase";
 import {useTransfer} from "@/hooks/useTransfer";
 import mxConst from "@/common/mxConst";
 

+ 9 - 9
src/pages/ie/components/ai-form/items/ai-form-item-group.vue → src/pagesOther/pages/ie/components/ai-form/items/ai-form-item-group.vue

@@ -26,15 +26,15 @@
 </template>
 
 <script>
-import AIFormCommonStyle from "@/pages/ie/components/AIFormCommonStyle";
-import AiFormItemTemplate from "@/pages/ie/components/ai-form/items/ai-form-item-template.vue";
-import AiFormFieldText from "@/pages/ie/components/ai-form/items/templates/ai-form-field-text.vue";
-import AiFormFieldNumber from "@/pages/ie/components/ai-form/items/templates/ai-form-field-number.vue";
-import AiFormFieldScore from "@/pages/ie/components/ai-form/items/templates/ai-form-field-score.vue";
-import AiFormFieldPicker from "@/pages/ie/components/ai-form/items/templates/ai-form-field-picker.vue";
-import AiFormFieldEyesight from "@/pages/ie/components/ai-form/items/templates/ai-form-field-eyesight.vue";
-import AiFormFieldRadio from "@/pages/ie/components/ai-form/items/templates/ai-form-field-radio.vue";
-import AiFormFieldCheckbox from "@/pages/ie/components/ai-form/items/templates/ai-form-field-checkbox.vue";
+import AIFormCommonStyle from "@/pagesOther/pages/ie/components/AIFormCommonStyle";
+import AiFormItemTemplate from "@/pagesOther/pages/ie/components/ai-form/items/ai-form-item-template.vue";
+import AiFormFieldText from "@/pagesOther/pages/ie/components/ai-form/items/templates/ai-form-field-text.vue";
+import AiFormFieldNumber from "@/pagesOther/pages/ie/components/ai-form/items/templates/ai-form-field-number.vue";
+import AiFormFieldScore from "@/pagesOther/pages/ie/components/ai-form/items/templates/ai-form-field-score.vue";
+import AiFormFieldPicker from "@/pagesOther/pages/ie/components/ai-form/items/templates/ai-form-field-picker.vue";
+import AiFormFieldEyesight from "@/pagesOther/pages/ie/components/ai-form/items/templates/ai-form-field-eyesight.vue";
+import AiFormFieldRadio from "@/pagesOther/pages/ie/components/ai-form/items/templates/ai-form-field-radio.vue";
+import AiFormFieldCheckbox from "@/pagesOther/pages/ie/components/ai-form/items/templates/ai-form-field-checkbox.vue";
 import mxConst from "@/common/mxConst";
 
 export default {

+ 1 - 1
src/pages/ie/components/ai-form/items/ai-form-item-template.vue → src/pagesOther/pages/ie/components/ai-form/items/ai-form-item-template.vue

@@ -9,7 +9,7 @@
 </template>
 
 <script>
-import AiFormItem from "@/pages/ie/components/ai-form/ai-form-item.vue";
+import AiFormItem from "@/pagesOther/pages/ie/components/ai-form/ai-form-item.vue";
 import MxConst from "@/common/MxConst";
 
 export default {

+ 2 - 2
src/pages/ie/components/ai-form/items/major-category-picker.vue → src/pagesOther/pages/ie/components/ai-form/items/major-category-picker.vue

@@ -1,7 +1,7 @@
 <script>
 import {getCurrentInstance, watch} from 'vue';
-import IeFormPickerSingle from "@/pages/ie/components/picker/ie-form-picker-single.vue";
-import {useInjectMajorTreeService} from "@/pages/ie/hooks/useMajorTreeInjection";
+import IeFormPickerSingle from "@/pagesOther/pages/ie/components/picker/ie-form-picker-single.vue";
+import {useInjectMajorTreeService} from "@/pagesOther/pages/ie/hooks/useMajorTreeInjection";
 
 export default {
     /* major category: 一级分类 */

+ 1 - 1
src/pages/ie/components/ai-form/items/templates/AIFormRuleField.js → src/pagesOther/pages/ie/components/ai-form/items/templates/AIFormRuleField.js

@@ -1,4 +1,4 @@
-import AIFormFieldBase from "@/pages/ie/components/ai-form/items/AIFormFieldBase";
+import AIFormFieldBase from "@/pagesOther/pages/ie/components/ai-form/items/AIFormFieldBase";
 
 export default {
     mixins: [AIFormFieldBase],

+ 1 - 1
src/pages/ie/components/ai-form/items/templates/AIFormRuleOptions.js → src/pagesOther/pages/ie/components/ai-form/items/templates/AIFormRuleOptions.js

@@ -1,4 +1,4 @@
-import AIFormRuleField from "@/pages/ie/components/ai-form/items/templates/AIFormRuleField";
+import AIFormRuleField from "@/pagesOther/pages/ie/components/ai-form/items/templates/AIFormRuleField";
 
 export default {
     mixins: [AIFormRuleField],

+ 1 - 1
src/pages/ie/components/ai-form/items/templates/ai-form-field-checkbox.vue → src/pagesOther/pages/ie/components/ai-form/items/templates/ai-form-field-checkbox.vue

@@ -9,7 +9,7 @@
 
 <script>
 import _ from 'lodash';
-import AiFormFieldPicker from "@/pages/ie/components/ai-form/items/templates/ai-form-field-picker.vue";
+import AiFormFieldPicker from "@/pagesOther/pages/ie/components/ai-form/items/templates/ai-form-field-picker.vue";
 
 export default {
     name: "ai-form-field-checkbox",

+ 2 - 2
src/pages/ie/components/ai-form/items/templates/ai-form-field-eyesight.vue → src/pagesOther/pages/ie/components/ai-form/items/templates/ai-form-field-eyesight.vue

@@ -1,6 +1,6 @@
 <script>
-import EyesightPicker from "@/pages/ie/entry-ai/components/eyesight-picker.vue";
-import AIFormRuleField from "@/pages/ie/components/ai-form/items/templates/AIFormRuleField";
+import EyesightPicker from "@/pagesOther/pages/ie/entry-ai/components/eyesight-picker.vue";
+import AIFormRuleField from "@/pagesOther/pages/ie/components/ai-form/items/templates/AIFormRuleField";
 
 export default {
   name: "ai-form-field-eyesight",

+ 2 - 2
src/pages/ie/components/ai-form/items/templates/ai-form-field-number.vue → src/pagesOther/pages/ie/components/ai-form/items/templates/ai-form-field-number.vue

@@ -6,8 +6,8 @@
 </template>
 
 <script>
-import AIFormRuleField from "@/pages/ie/components/ai-form/items/templates/AIFormRuleField";
-import IeFormPicker from "@/pages/ie/components/picker/ie-form-picker.vue";
+import AIFormRuleField from "@/pagesOther/pages/ie/components/ai-form/items/templates/AIFormRuleField";
+import IeFormPicker from "@/pagesOther/pages/ie/components/picker/ie-form-picker.vue";
 
 export default {
     name: "ai-form-field-number",

+ 3 - 3
src/pages/ie/components/ai-form/items/templates/ai-form-field-picker.vue → src/pagesOther/pages/ie/components/ai-form/items/templates/ai-form-field-picker.vue

@@ -1,7 +1,7 @@
 <script>
-import IeFormPickerSingle from "@/pages/ie/components/picker/ie-form-picker-single.vue";
-import AIFormRuleField from "@/pages/ie/components/ai-form/items/templates/AIFormRuleField";
-import AIFormRuleOptions from "@/pages/ie/components/ai-form/items/templates/AIFormRuleOptions";
+import IeFormPickerSingle from "@/pagesOther/pages/ie/components/picker/ie-form-picker-single.vue";
+import AIFormRuleField from "@/pagesOther/pages/ie/components/ai-form/items/templates/AIFormRuleField";
+import AIFormRuleOptions from "@/pagesOther/pages/ie/components/ai-form/items/templates/AIFormRuleOptions";
 
 export default {
   name: "ai-form-field-picker",

+ 1 - 1
src/pages/ie/components/ai-form/items/templates/ai-form-field-radio.vue → src/pagesOther/pages/ie/components/ai-form/items/templates/ai-form-field-radio.vue

@@ -7,7 +7,7 @@
 </template>
 
 <script>
-import AiFormFieldPicker from "@/pages/ie/components/ai-form/items/templates/ai-form-field-picker.vue";
+import AiFormFieldPicker from "@/pagesOther/pages/ie/components/ai-form/items/templates/ai-form-field-picker.vue";
 
 export default {
     name: "ai-form-field-radio",

+ 2 - 2
src/pages/ie/components/ai-form/items/templates/ai-form-field-score.vue → src/pagesOther/pages/ie/components/ai-form/items/templates/ai-form-field-score.vue

@@ -24,8 +24,8 @@
 </template>
 
 <script>
-import AiFormFieldNumber from "@/pages/ie/components/ai-form/items/templates/ai-form-field-number.vue";
-import FormattedPickerMixin from "@/pages/ie/components/picker/FormattedPickerMixin";
+import AiFormFieldNumber from "@/pagesOther/pages/ie/components/ai-form/items/templates/ai-form-field-number.vue";
+import FormattedPickerMixin from "@/pagesOther/pages/ie/components/picker/FormattedPickerMixin";
 
 export default {
     name: "ai-form-field-score",

+ 2 - 2
src/pages/ie/components/ai-form/items/templates/ai-form-field-text.vue → src/pagesOther/pages/ie/components/ai-form/items/templates/ai-form-field-text.vue

@@ -7,8 +7,8 @@
 </template>
 
 <script>
-import AIFormRuleField from "@/pages/ie/components/ai-form/items/templates/AIFormRuleField";
-import AIFormCommonStyle from "@/pages/ie/components/AIFormCommonStyle";
+import AIFormRuleField from "@/pagesOther/pages/ie/components/ai-form/items/templates/AIFormRuleField";
+import AIFormCommonStyle from "@/pagesOther/pages/ie/components/AIFormCommonStyle";
 
 export default {
     name: "ai-form-field-text",

+ 1 - 1
src/pages/ie/components/card/pretty-card.vue → src/pagesOther/pages/ie/components/card/pretty-card.vue

@@ -14,7 +14,7 @@
 </template>
 
 <script>
-import {useInjectUserSnapshot} from "@/pages/ie/hooks/useUserSnapshotInjection";
+import {useInjectUserSnapshot} from "@/pagesOther/pages/ie/hooks/useUserSnapshotInjection";
 
 export default {
     name: "pretty-card",

+ 2 - 2
src/pages/ie/components/card/pure-card.vue → src/pagesOther/pages/ie/components/card/pure-card.vue

@@ -12,8 +12,8 @@
 </template>
 
 <script>
-import PrettyCard from "@/pages/ie/components/card/pretty-card.vue";
-import {useInjectUserSnapshot} from "@/pages/ie/hooks/useUserSnapshotInjection";
+import PrettyCard from "@/pagesOther/pages/ie/components/card/pretty-card.vue";
+import {useInjectUserSnapshot} from "@/pagesOther/pages/ie/hooks/useUserSnapshotInjection";
 
 export default {
     name: "pure-card",

+ 2 - 2
src/pages/ie/components/card/voluntary-card.vue → src/pagesOther/pages/ie/components/card/voluntary-card.vue

@@ -16,8 +16,8 @@
 <script>
 
 import {findTreeNode} from "@/utils/tree-helper";
-import {useInjectUserSnapshot} from "@/pages/ie/hooks/useUserSnapshotInjection";
-import {useInjectMajorTreeService} from "@/pages/ie/hooks/useMajorTreeInjection";
+import {useInjectUserSnapshot} from "@/pagesOther/pages/ie/hooks/useUserSnapshotInjection";
+import {useInjectMajorTreeService} from "@/pagesOther/pages/ie/hooks/useMajorTreeInjection";
 
 export default {
     name: 'voluntary-card',

+ 2 - 2
src/pages/ie/components/card/voluntary-major.vue → src/pagesOther/pages/ie/components/card/voluntary-major.vue

@@ -71,9 +71,9 @@
 <script>
 import _ from 'lodash';
 import MxConst from "@/common/MxConst";
-import InjectAIDataMixin from "@/pages/ie/entry-ai-form/components/InjectAIDataMixin";
+import InjectAIDataMixin from "@/pagesOther/pages/ie/entry-ai-form/components/InjectAIDataMixin";
 import {confirmAsync} from "@/utils/uni-helper";
-import CollegeItem from "@/pages/college-library/components/college-item.vue";
+import CollegeItem from "@/pagesOther/pages/college-library/components/college-item.vue";
 import {useTransfer} from "@/hooks/useTransfer";
 
 export default {

+ 0 - 0
src/pages/ie/components/horizontal-button.vue → src/pagesOther/pages/ie/components/horizontal-button.vue


+ 0 - 0
src/pages/ie/components/large-header.vue → src/pagesOther/pages/ie/components/large-header.vue


+ 0 - 0
src/pages/ie/components/picker/FormattedPickerMixin.js → src/pagesOther/pages/ie/components/picker/FormattedPickerMixin.js


+ 1 - 1
src/pages/ie/components/picker/college-picker.vue → src/pagesOther/pages/ie/components/picker/college-picker.vue

@@ -19,7 +19,7 @@
 </template>
 
 <script>
-import CollegeLibrary from "@/pages/career/college-major/components/college-library.vue";
+import CollegeLibrary from "@/pagesOther/pages/career/college-major/components/college-library.vue";
 import {findTreeNode} from "@/common/tools/tree-helper";
 
 export default {

+ 0 - 0
src/pages/ie/components/picker/common-picker-cell.vue → src/pagesOther/pages/ie/components/picker/common-picker-cell.vue


+ 3 - 3
src/pages/ie/components/picker/ie-form-picker-single.vue → src/pagesOther/pages/ie/components/picker/ie-form-picker-single.vue

@@ -8,9 +8,9 @@
 </template>
 
 <script>
-import IeFormPicker from "@/pages/ie/components/picker/ie-form-picker.vue";
-import FormattedPickerMixin from "@/pages/ie/components/picker/FormattedPickerMixin";
-import InjectFormDataMixin from "@/pages/ie/components/ai-form/InjectFormDataMixin";
+import IeFormPicker from "@/pagesOther/pages/ie/components/picker/ie-form-picker.vue";
+import FormattedPickerMixin from "@/pagesOther/pages/ie/components/picker/FormattedPickerMixin";
+import InjectFormDataMixin from "@/pagesOther/pages/ie/components/ai-form/InjectFormDataMixin";
 
 export default {
     name: "ie-form-picker-single",

+ 0 - 0
src/pages/ie/components/picker/ie-form-picker.vue → src/pagesOther/pages/ie/components/picker/ie-form-picker.vue


+ 2 - 2
src/pages/ie/components/picker/major-picker.vue → src/pagesOther/pages/ie/components/picker/major-picker.vue

@@ -44,11 +44,11 @@
 import {computed, ref, watch} from 'vue';
 import _ from 'lodash';
 import {findTreeNode} from "@/utils/tree-helper";
-import CommonPickerCell from "@/pages/ie/components/picker/common-picker-cell.vue";
+import CommonPickerCell from "@/pagesOther/pages/ie/components/picker/common-picker-cell.vue";
 import {useCacheStore} from "@/hooks/useCacheStore";
 import {universityDetail} from "@/api/webApi/collegemajor";
 import {toast} from "@/uni_modules/uv-ui-tools/libs/function";
-import {useInjectMajorTreeService} from "@/pages/ie/hooks/useMajorTreeInjection";
+import {useInjectMajorTreeService} from "@/pagesOther/pages/ie/hooks/useMajorTreeInjection";
 
 export default {
     name: "major-picker",

+ 3 - 3
src/pages/ie/entry-ai-detail/entry-ai-detail.vue → src/pagesOther/pages/ie/entry-ai-detail/entry-ai-detail.vue

@@ -19,11 +19,11 @@ import {getVoluntary} from "@/api/webApi/ie-voluntary";
 import {universityDetail} from "@/api/webApi/collegemajor";
 import VoluntaryCard from "../components/card/voluntary-card.vue";
 import VoluntaryMajor from "../components/card/voluntary-major.vue";
-import AIFormCommonStyle from "@/pages/ie/components/AIFormCommonStyle";
+import AIFormCommonStyle from "@/pagesOther/pages/ie/components/AIFormCommonStyle";
 import {useTransfer} from "@/hooks/useTransfer";
-import {useProvideMajorTreeService} from "@/pages/ie/hooks/useMajorTreeInjection";
+import {useProvideMajorTreeService} from "@/pagesOther/pages/ie/hooks/useMajorTreeInjection";
 import {useCacheStore} from "@/hooks/useCacheStore";
-import {useProvideUserSnapshot} from "@/pages/ie/hooks/useUserSnapshotInjection";
+import {useProvideUserSnapshot} from "@/pagesOther/pages/ie/hooks/useUserSnapshotInjection";
 
 export default {
     mixins: [AIFormCommonStyle],

برخی فایل ها در این مقایسه diff نمایش داده نمی شوند زیرا تعداد فایل ها بسیار زیاد است