فهرست منبع

refactor(merchant): 商家版首页

EvilDragon 5 ماه پیش
والد
کامیت
ae05ea6ba8

+ 2 - 2
packages/app/src/components/section-heading.vue

@@ -16,7 +16,7 @@ const props = defineProps({
     required: false,
   },
   size: {
-    type: String as PropType<'base' | 'xl'>,
+    type: String as PropType<'sm' | 'base' | 'xl'>,
     default: () => 'xl',
   },
   endText: {
@@ -32,7 +32,7 @@ const handleMore = async () => {
   <view class="flex justify-between items-center" :class="[customClass]">
     <div
       class="font-normal"
-      :class="[`text-${size}`, { base: 'text-black/90', xl: 'text-black' }[size]]"
+      :class="[`text-${size}`, {sm: 'text-black/90', base: 'text-black/90', xl: 'text-black' }[size]]"
     >
       {{ title }}
     </div>

+ 10 - 0
packages/assets/src/assets/svgs/merchant-page-header-bg.svg

@@ -0,0 +1,10 @@
+<svg width="375" height="390" viewBox="0 0 375 390" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M0 0H375V390C375 390 260.457 390 187 390C113.543 390 0 390 0 390V0Z" fill="url(#paint0_linear_755_6461)"/>
+<defs>
+<linearGradient id="paint0_linear_755_6461" x1="187.5" y1="-5.37152e-08" x2="186.453" y2="379.037" gradientUnits="userSpaceOnUse">
+<stop stop-color="#2357E9"/>
+<stop offset="0.455" stop-color="#2357E9"/>
+<stop offset="1" stop-color="#2357E9" stop-opacity="0"/>
+</linearGradient>
+</defs>
+</svg>

+ 2 - 1
packages/assets/src/svgs.ts

@@ -1,4 +1,5 @@
 import ts from "./typescript.svg";
 import pageHeaderBg from "./assets/svgs/page-header-bg.svg";
 import pageHeaderFilter from "./assets/svgs/page-header-filter.svg";
-export { ts, pageHeaderBg, pageHeaderFilter };
+import merchantPageHeaderBg from "./assets/svgs/merchant-page-header-bg.svg";
+export { ts, pageHeaderBg, pageHeaderFilter, merchantPageHeaderBg };

+ 5 - 1
packages/merchant/.eslintrc-auto-import.json

@@ -89,6 +89,10 @@
     "watch": true,
     "watchEffect": true,
     "watchPostEffect": true,
-    "watchSyncEffect": true
+    "watchSyncEffect": true,
+    "onWatcherCleanup": true,
+    "useId": true,
+    "useModel": true,
+    "useTemplateRef": true
   }
 }

+ 2 - 2
packages/merchant/.minicirc

@@ -1,7 +1,7 @@
 {
   "weixin": {
-    "appid": "wx4d95c9addba81089",
-    "privateKeyPath": "keys/private.wx4d95c9addba81089.key",
+    "appid": "wxfbe1df95a05d1912",
+    "privateKeyPath": "keys/private.wxfbe1df95a05d1912.key",
     "projectPath": "dist/build/mp-weixin"
   },
   "version": "0.0.1",

+ 2 - 0
packages/merchant/package.json

@@ -90,6 +90,8 @@
     "@dcloudio/uni-h5": "3.0.0-alpha-4010520240507001",
     "@dcloudio/uni-mp-weixin": "3.0.0-alpha-4010520240507001",
     "@webevostudio/test.ui.login-test": "^0.0.1",
+    "@designer-hub/assets": "workspace:*",
+    "@designer-hub/app": "workspace:*",
     "czg": "^1.9.3",
     "dayjs": "1.11.10",
     "pinia": "2.0.36",

+ 22 - 15
packages/merchant/src/layouts/tabbar.vue

@@ -23,12 +23,12 @@ const items = [
     selectedIconPath: homeActive,
     path: '/pages/home/index',
   },
-  {
-    title: '材料',
-    iconPath: material,
-    selectedIconPath: materialActive,
-    path: '/pages/material/index',
-  },
+  // {
+  //   title: '材料',
+  //   iconPath: material,
+  //   selectedIconPath: materialActive,
+  //   path: '/pages/material/index',
+  // },
   {
     title: '发布',
     iconPath: publish,
@@ -36,12 +36,12 @@ const items = [
     path: '/pages/publish/index',
     hiddenTitle: true,
   },
-  {
-    title: '消息',
-    iconPath: message,
-    selectedIconPath: messageActive,
-    path: '/pages/messages/index',
-  },
+  // {
+  //   title: '消息',
+  //   iconPath: message,
+  //   selectedIconPath: messageActive,
+  //   path: '/pages/messages/index',
+  // },
   {
     title: '我的',
     iconPath: mine,
@@ -67,8 +67,8 @@ const toPublishCase = () => {
 </script>
 
 <template>
-  <wd-config-provider :themeVars="defaultThemeVars">
-    <view class="bg-[#f6f6f6] pb-20">
+  <wd-config-provider :themeVars="defaultThemeVars" custom-class="flex-grow flex flex-col">
+    <view class="bg-[#f6f6f6] pb-20 flex-grow">
       <slot />
     </view>
 
@@ -118,4 +118,11 @@ const toPublishCase = () => {
   </wd-config-provider>
 </template>
 
-<style lang="scss"></style>
+<style lang="scss">
+/* stylelint-disable-next-line selector-type-no-unknown */
+layout-tabbar-uni {
+  display: flex;
+  flex-direction: column;
+  flex-grow: 1;
+}
+</style>

+ 86 - 6
packages/merchant/src/pages/home/index.vue

@@ -10,7 +10,6 @@
 </route>
 
 <script lang="ts" setup>
-import Card from '@/components/card.vue'
 import HotActivity from '@/components/hot-activity.vue'
 import MomentItem from '@/components/moment-item.vue'
 import useRequest from '../../hooks/useRequest'
@@ -18,6 +17,9 @@ import dayjs from 'dayjs'
 import Menus from './components/menus.vue'
 import ScheduleCard from './components/schedule-card.vue'
 import { getCircles } from '../../core/libs/requests'
+import SectionHeading from '@designer-hub/app/src/components/section-heading.vue'
+import Card from '@designer-hub/app/src/components/card.vue'
+import { merchantPageHeaderBg } from '@designer-hub/assets/src/svgs'
 
 defineOptions({
   name: 'Home',
@@ -96,7 +98,7 @@ const { data } = useRequest(async () => ({ code: 0, msg: '', data: {} }) as IRes
 const { data: circlesData, run } = useRequest(() => getCircles({}), { initialData: { list: [] } })
 console.log(data.value)
 onShow(async () => {
-  await run()
+  // await run()
   console.log(circlesData.value)
 })
 onLoad(() => {})
@@ -104,13 +106,91 @@ onShareAppMessage(() => ({}))
 </script>
 
 <template>
-  <view class="">
-    <view class="bg-black w-full pos-relative aspect-[1.26/1]">
+  <view class="flex-grow relative">
+    <div class="aspect-[0.96/1] absolute left-0 right-0 top--1">
+      <wd-img
+        width="100%"
+        height="100%"
+        :src="merchantPageHeaderBg"
+        custom-class="vertical-bottom"
+      ></wd-img>
+    </div>
+    1
+    <wd-navbar custom-class="bg-transparent!" safe-area-inset-top :bordered="false">
+      <template #left>
+        <div
+          class="ml-1 text-center text-white text-lg font-normal font-['PingFang SC'] leading-relaxed"
+        >
+          今日待办
+        </div>
+      </template>
+    </wd-navbar>
+    <div class="flex flex-col gap-8 p-4 relative box-border">
+      <div>
+        <SectionHeading
+          title="渠道任务"
+          path="/pages/home/index"
+          end-text="查看全部"
+          custom-class="mb-5"
+        ></SectionHeading>
+        <Card><wd-status-tip image="search" tip="当前暂无未开始/进行中的任务" /></Card>
+      </div>
+      <div>
+        <SectionHeading title="设计师" path="" custom-class="mb-5"></SectionHeading>
+        <div class="flex flex-col gap-4">
+          <template
+            v-for="{ label, color } of [
+              { label: '重点跟进设计师', color: '#FF523F' },
+              { label: '全部设计师', color: '#7199FF' },
+              { label: '本月新增设计师', color: '#FFE786' },
+              { label: '超过30天未跟进', color: '#89F4E3' },
+              { label: '超过60天未产生积分设计师', color: '#FFBA6A' },
+              { label: '超过60天未消耗积分设计师', color: '#C494FF' },
+              { label: '未成交过设计师', color: '#FF9EE2' },
+            ]"
+            :key="label"
+          >
+            <div class="h-12 bg-white rounded-lg shadow flex items-center hover:bg-[#fff6f5]">
+              <div
+                class="w-1.5 h-12 rounded-tl-lg rounded-bl-lg shadow"
+                :class="[`bg-[${color}]`]"
+                :style="{ background: color }"
+              ></div>
+              <div class="flex-1 mx-3">
+                <SectionHeading :title="label" path="/pages/home/index" size="sm"></SectionHeading>
+              </div>
+            </div>
+          </template>
+        </div>
+      </div>
+      <div>
+        <SectionHeading title="设计师最新动态" path="" custom-class="mb-5"></SectionHeading>
+        <div class="flex flex-col gap-4">
+          <template
+            v-for="{ title, date } of [
+              { title: '苏小萌报名了日本设计游学', date: new Date() },
+              { title: '苏小萌报名了骑行活动', date: new Date() },
+              { title: '苏小萌获取imola16000积分', date: new Date() },
+            ]"
+            :key="title"
+          >
+            <Card>
+              <div class="text-black/90 text-sm font-normal font-['PingFang SC'] leading-none">
+                {{ title }}
+              </div>
+              <div class="mt-3 text-black/30 text-xs font-normal font-['PingFang SC'] leading-none">
+                {{ dayjs(date).format('YYYY-MM-DD hh:mm') }}
+              </div>
+            </Card>
+          </template>
+        </div>
+      </div>
+    </div>
+    <!-- <view class="bg-black w-full pos-relative aspect-[1.26/1]">
       <wd-img custom-class="w-[375px] h-[297px]" src="https://via.placeholder.com/375x297" />
       <div
         class="w-[375px] h-[90px] bg-gradient-to-t from-black to-black/0 absolute left-0 bottom-0 w-full flex items-center"
       >
-        <!-- <div class="w-[82px] h-[33px] rounded-[60px] border border-white"></div> -->
         <view class="mx-7">
           <wd-button plain custom-class="bg-transparent! border-white! text-white!">
             02:30
@@ -135,7 +215,7 @@ onShareAppMessage(() => ({}))
           </view>
         </template>
       </view>
-    </view>
+    </view> -->
   </view>
 </template>
 

+ 24 - 175
packages/merchant/src/pages/mine/index.vue

@@ -4,25 +4,15 @@
 
 <script setup lang="ts">
 import { onMounted, ref } from 'vue'
-import CardMenu from '@/components/card-menu.vue'
-import SectionHeading from '@/components/section-heading.vue'
-import { designer, settled, treaty, vipBg, memberTextV1 } from '../../core/libs/pngs'
-import {
-  integral,
-  coupon,
-  order,
-  agent,
-  setting,
-  vip,
-  scan,
-  memberIconV1,
-} from '../../core/libs/svgs'
+import { designer, settled, treaty } from '../../core/libs/pngs'
+import { integral, coupon, order, agent, setting, scan } from '../../core/libs/svgs'
 import { getMemberUserInfo, getTasks } from '../../core/libs/requests'
 import { useUserStore } from '../../store'
 import { storeToRefs } from 'pinia'
 import { isEmpty } from 'radash'
-import TasksCard from './components/tasks-card.vue'
-import Card from '@/components/card.vue'
+import Card from '@designer-hub/app/src/components/card.vue'
+import SectionHeading from '@designer-hub/app/src/components/section-heading.vue'
+import { merchantPageHeaderBg } from '@designer-hub/assets/src/svgs'
 
 const userStore = useUserStore()
 const { isLogined, userInfo } = storeToRefs(userStore)
@@ -90,7 +80,7 @@ const handleToHomepage = () => {
 onMounted(async () => {
   // await run()
   // console.log(data.value)
-  await getTaskData()
+  // await getTaskData()
 })
 const navBarProps = ref({ customClass: 'bg-transparent!' })
 onPageScroll(({ scrollTop }: { scrollTop: number }) => {
@@ -101,6 +91,14 @@ onPageScroll(({ scrollTop }: { scrollTop: number }) => {
 
 <template>
   <view>
+    <div class="aspect-[0.96/1] absolute left-0 right-0 top--1">
+      <wd-img
+        width="100%"
+        height="100%"
+        :src="merchantPageHeaderBg"
+        custom-class="vertical-bottom"
+      ></wd-img>
+    </div>
     <wd-navbar
       fixed
       safeAreaInsetTop
@@ -114,166 +112,17 @@ onPageScroll(({ scrollTop }: { scrollTop: number }) => {
         </wd-button>
       </template>
     </wd-navbar>
-    <!-- <StartMenuButton>
-      <div class="flex">
-        <wd-button type="text" size="small" custom-class="p-0!" :round="false">
-          <wd-img width="25" height="25" :src="scan" custom-class="vertical-bottom"></wd-img>
-        </wd-button>
-      </div>
-    </StartMenuButton> -->
-    <div
-      class="bg-black/30 backdrop-blur-[60px] flex flex-col justify-end box-border"
-      :class="[userInfo.userStatusEnabled ? 'aspect-[0.94/1] pb-44' : 'aspect-[1.15/1] pb-20']"
-    >
-      <div class="my-6.5 px-3.5 flex">
-        <img class="w-[72px] h-[72px] rounded-full border border-white" :src="avatar" />
-        <div class="ms-3.5 ml-3.5">
-          <div
-            class="text-white text-xl font-normal font-['PingFang SC'] leading-normal"
-            @click="nickNameClickHandle"
-          >
-            {{ !isLogined ? '请点击登录' : userInfo?.nickname }}
-          </div>
-          <div
-            v-if="!userInfo.userStatusEnabled"
-            class="mt-2 w-[63px] h-[26px] bg-black/10 rounded-[20px] border border-white/60 flex items-center justify-center"
-          >
-            <div
-              class="text-center text-white text-xs font-normal font-['PingFang SC'] leading-normal"
-            >
-              未认证
-            </div>
-          </div>
-          <div
-            v-if="userInfo.userStatusEnabled"
-            class="flex items-center text-white"
-            @click="handleToHomepage"
-          >
-            <div
-              class="text-center text-white text-sm font-normal font-['PingFang SC'] leading-normal"
-            >
-              个人主页
-            </div>
-            <wd-icon name="arrow-right"></wd-icon>
-          </div>
-        </div>
-      </div>
-      <div class="px-3.5 flex items-center">
-        <div class="flex items-center">
-          <div class="text-white text-base font-normal font-['PingFang SC'] leading-normal mr-1">
-            36
-          </div>
-          <div
-            class="text-center text-[#e9e7e4] text-xs font-normal font-['PingFang SC'] leading-normal"
-          >
-            分享
-          </div>
-        </div>
-
-        <div class="h-4 w-[2px] mx-4 bg-[#e9e7e4]"></div>
-
-        <div class="flex items-center">
-          <div class="text-white text-base font-normal font-['PingFang SC'] leading-normal mr-1">
-            36
-          </div>
-          <div
-            class="text-center text-[#e9e7e4] text-xs font-normal font-['PingFang SC'] leading-normal"
-          >
-            分享
-          </div>
-        </div>
-
-        <div class="h-4 w-[2px] mx-4 bg-[#e9e7e4]"></div>
-
-        <div class="flex items-center">
-          <div class="text-white text-base font-normal font-['PingFang SC'] leading-normal mr-1">
-            36
-          </div>
-          <div
-            class="text-center text-[#e9e7e4] text-xs font-normal font-['PingFang SC'] leading-normal"
-          >
-            分享
-          </div>
-        </div>
-      </div>
-    </div>
-    <div class="relative top--18" v-if="!userInfo.userStatusEnabled">
-      <div class="mx-3.5 box-border absolute left-0 right-0 top-0">
-        <wd-img :src="vipBg" width="100%" mode="widthFix"></wd-img>
-      </div>
-      <div class="mx-3.5 box-border absolute left-0 right-0 top-0 p-3.5">
-        <div class="flex items-center">
-          <wd-img custom-class="vertical-bottom" :src="vip" width="35" mode="widthFix"></wd-img>
-          <div
-            class="ml-2 text-center text-[#faeac6] text-sm font-normal font-['PingFang SC'] leading-normal"
-          >
-            查看会员等级权益
-          </div>
-          <div class="flex-1"></div>
-          <div
-            class="w-[83px] h-[29px] bg-gradient-to-l from-[#ffdab6] to-[#ffebd5] rounded-[30px] flex items-center justify-center"
-            @click="handleToAuthentication()"
-          >
-            <div
-              class="text-[#9e5934] text-[13px] font-normal font-['PingFang SC'] leading-relaxed"
-            >
-              去认证
-            </div>
-          </div>
-        </div>
-      </div>
+    <div class="p-4 flex flex-col gap-4 relative">
+      <Card>
+        <SectionHeading title="本年目标" size="base"></SectionHeading>
+      </Card>
+      <Card>
+        <SectionHeading title="设计师数据" size="base"></SectionHeading>
+      </Card>
+      <Card>
+        <SectionHeading title="跟进数据" size="base"></SectionHeading>
+      </Card>
     </div>
-    <template v-else>
-      <div class="relative top--36">
-        <div
-          class="mx-3.5 absolute left-0 right-0 top--4 w-[347px] h-[180px] bg-gradient-to-r from-[#141414] to-[#4b4b49] rounded-tl-[10px] rounded-tr-[10px] p-3.5 box-border"
-          :class="['text-[#8FB8DB]']"
-        >
-          <div class="flex items-center">
-            <wd-img class="" width="20" height="20" :src="memberIconV1"></wd-img>
-            <wd-img class="" width="108" height="27" :src="memberTextV1"></wd-img>
-            <div class="flex-1"></div>
-            <div
-              class="h-[22px] bg-gradient-to-r from-[#333333] to-[#20201e] rounded-tl-[20px] rounded-bl-[20px] mr--3.5 px-2"
-            >
-              <div class="text-xs font-normal font-['PingFang SC'] leading-relaxed">
-                更多等级权益
-              </div>
-            </div>
-          </div>
-          <div class="flex items-end mt-10">
-            <div>
-              <span class="text-4xl font-normal font-['D-DIN Exp']">{{ userInfo.point }}</span>
-              <span class="text-center text-xs font-normal font-['PingFang SC']">积分</span>
-            </div>
-            <div class="flex-1"></div>
-            <div class="text-sm font-normal font-['PingFang SC']">
-              会员号:{{ userInfo.userId }}
-            </div>
-          </div>
-        </div>
-      </div>
-      <!-- <div class="relative h-4 box-border bg-transparent rounded-b-[50%] z-1"></div> -->
-    </template>
-    <view class="bg-neutral-100 relative bottom-4 rounded-t-2xl py-1 px-3.5">
-      <div class="flex justify-around my-6">
-        <template v-for="({ title, icon }, i) in menus" :key="i">
-          <div class="flex flex-col items-center">
-            <div class="relative flex-col justify-start items-start inline-flex">
-              <wd-img :src="icon" width="24" height="24" custom-class="vertical-bottom"></wd-img>
-            </div>
-            <div
-              class="mt-2 text-black/90 text-[12.86px] font-normal font-['PingFang SC'] leading-relaxed"
-            >
-              {{ title }}
-            </div>
-          </div>
-        </template>
-      </div>
-      <TasksCard custom-class="my-6" :items="taskData.list"></TasksCard>
-      <SectionHeading custom-class="my-6" title="和筑巢荟一起共同成长"></SectionHeading>
-      <CardMenu :items="pieces" custom-class="grid-cols-2" />
-    </view>
   </view>
 </template>
 

+ 0 - 5
packages/merchant/src/style/index.scss

@@ -39,9 +39,4 @@ page {
 // 微信小程序填充最小高度
 /* stylelint-disable-next-line selector-type-no-unknown */
 // layout-default-uni,
-.wot-theme-light {
-  display: flex;
-  flex-direction: column;
-  flex-grow: 1;
-}
 /* endif */

+ 8 - 82
packages/merchant/src/types/auto-import.d.ts

@@ -59,6 +59,7 @@ declare global {
   const onUnload: typeof import('@dcloudio/uni-app')['onUnload']
   const onUnmounted: typeof import('vue')['onUnmounted']
   const onUpdated: typeof import('vue')['onUpdated']
+  const onWatcherCleanup: typeof import('vue')['onWatcherCleanup']
   const provide: typeof import('vue')['provide']
   const reactive: typeof import('vue')['reactive']
   const readonly: typeof import('vue')['readonly']
@@ -76,9 +77,12 @@ declare global {
   const useAttrs: typeof import('vue')['useAttrs']
   const useCssModule: typeof import('vue')['useCssModule']
   const useCssVars: typeof import('vue')['useCssVars']
+  const useId: typeof import('vue')['useId']
+  const useModel: typeof import('vue')['useModel']
   const useNavbarWeixin: (typeof import('../hooks/useNavbarWeixin'))['default']
   const useRequest: typeof import('../hooks/useRequest')['default']
   const useSlots: typeof import('vue')['useSlots']
+  const useTemplateRef: typeof import('vue')['useTemplateRef']
   const useUpload: typeof import('../hooks/useUpload')['default']
   const useUpload2: typeof import('../hooks/useUpload2')['default']
   const watch: typeof import('vue')['watch']
@@ -150,6 +154,7 @@ declare module 'vue' {
     readonly onUnload: UnwrapRef<typeof import('@dcloudio/uni-app')['onUnload']>
     readonly onUnmounted: UnwrapRef<typeof import('vue')['onUnmounted']>
     readonly onUpdated: UnwrapRef<typeof import('vue')['onUpdated']>
+    readonly onWatcherCleanup: UnwrapRef<typeof import('vue')['onWatcherCleanup']>
     readonly provide: UnwrapRef<typeof import('vue')['provide']>
     readonly reactive: UnwrapRef<typeof import('vue')['reactive']>
     readonly readonly: UnwrapRef<typeof import('vue')['readonly']>
@@ -167,90 +172,11 @@ declare module 'vue' {
     readonly useAttrs: UnwrapRef<typeof import('vue')['useAttrs']>
     readonly useCssModule: UnwrapRef<typeof import('vue')['useCssModule']>
     readonly useCssVars: UnwrapRef<typeof import('vue')['useCssVars']>
+    readonly useId: UnwrapRef<typeof import('vue')['useId']>
+    readonly useModel: UnwrapRef<typeof import('vue')['useModel']>
     readonly useRequest: UnwrapRef<typeof import('../hooks/useRequest')['default']>
     readonly useSlots: UnwrapRef<typeof import('vue')['useSlots']>
-    readonly useUpload: UnwrapRef<typeof import('../hooks/useUpload')['default']>
-    readonly watch: UnwrapRef<typeof import('vue')['watch']>
-    readonly watchEffect: UnwrapRef<typeof import('vue')['watchEffect']>
-    readonly watchPostEffect: UnwrapRef<typeof import('vue')['watchPostEffect']>
-    readonly watchSyncEffect: UnwrapRef<typeof import('vue')['watchSyncEffect']>
-  }
-}
-declare module '@vue/runtime-core' {
-  interface GlobalComponents {}
-  interface ComponentCustomProperties {
-    readonly EffectScope: UnwrapRef<typeof import('vue')['EffectScope']>
-    readonly computed: UnwrapRef<typeof import('vue')['computed']>
-    readonly createApp: UnwrapRef<typeof import('vue')['createApp']>
-    readonly customRef: UnwrapRef<typeof import('vue')['customRef']>
-    readonly defineAsyncComponent: UnwrapRef<typeof import('vue')['defineAsyncComponent']>
-    readonly defineComponent: UnwrapRef<typeof import('vue')['defineComponent']>
-    readonly effectScope: UnwrapRef<typeof import('vue')['effectScope']>
-    readonly getCurrentInstance: UnwrapRef<typeof import('vue')['getCurrentInstance']>
-    readonly getCurrentScope: UnwrapRef<typeof import('vue')['getCurrentScope']>
-    readonly inject: UnwrapRef<typeof import('vue')['inject']>
-    readonly isProxy: UnwrapRef<typeof import('vue')['isProxy']>
-    readonly isReactive: UnwrapRef<typeof import('vue')['isReactive']>
-    readonly isReadonly: UnwrapRef<typeof import('vue')['isReadonly']>
-    readonly isRef: UnwrapRef<typeof import('vue')['isRef']>
-    readonly markRaw: UnwrapRef<typeof import('vue')['markRaw']>
-    readonly nextTick: UnwrapRef<typeof import('vue')['nextTick']>
-    readonly onActivated: UnwrapRef<typeof import('vue')['onActivated']>
-    readonly onAddToFavorites: UnwrapRef<typeof import('@dcloudio/uni-app')['onAddToFavorites']>
-    readonly onBackPress: UnwrapRef<typeof import('@dcloudio/uni-app')['onBackPress']>
-    readonly onBeforeMount: UnwrapRef<typeof import('vue')['onBeforeMount']>
-    readonly onBeforeUnmount: UnwrapRef<typeof import('vue')['onBeforeUnmount']>
-    readonly onBeforeUpdate: UnwrapRef<typeof import('vue')['onBeforeUpdate']>
-    readonly onDeactivated: UnwrapRef<typeof import('vue')['onDeactivated']>
-    readonly onError: UnwrapRef<typeof import('@dcloudio/uni-app')['onError']>
-    readonly onErrorCaptured: UnwrapRef<typeof import('vue')['onErrorCaptured']>
-    readonly onHide: UnwrapRef<typeof import('@dcloudio/uni-app')['onHide']>
-    readonly onLaunch: UnwrapRef<typeof import('@dcloudio/uni-app')['onLaunch']>
-    readonly onLoad: UnwrapRef<typeof import('@dcloudio/uni-app')['onLoad']>
-    readonly onMounted: UnwrapRef<typeof import('vue')['onMounted']>
-    readonly onNavigationBarButtonTap: UnwrapRef<typeof import('@dcloudio/uni-app')['onNavigationBarButtonTap']>
-    readonly onNavigationBarSearchInputChanged: UnwrapRef<typeof import('@dcloudio/uni-app')['onNavigationBarSearchInputChanged']>
-    readonly onNavigationBarSearchInputClicked: UnwrapRef<typeof import('@dcloudio/uni-app')['onNavigationBarSearchInputClicked']>
-    readonly onNavigationBarSearchInputConfirmed: UnwrapRef<typeof import('@dcloudio/uni-app')['onNavigationBarSearchInputConfirmed']>
-    readonly onNavigationBarSearchInputFocusChanged: UnwrapRef<typeof import('@dcloudio/uni-app')['onNavigationBarSearchInputFocusChanged']>
-    readonly onPageNotFound: UnwrapRef<typeof import('@dcloudio/uni-app')['onPageNotFound']>
-    readonly onPageScroll: UnwrapRef<typeof import('@dcloudio/uni-app')['onPageScroll']>
-    readonly onPullDownRefresh: UnwrapRef<typeof import('@dcloudio/uni-app')['onPullDownRefresh']>
-    readonly onReachBottom: UnwrapRef<typeof import('@dcloudio/uni-app')['onReachBottom']>
-    readonly onReady: UnwrapRef<typeof import('@dcloudio/uni-app')['onReady']>
-    readonly onRenderTracked: UnwrapRef<typeof import('vue')['onRenderTracked']>
-    readonly onRenderTriggered: UnwrapRef<typeof import('vue')['onRenderTriggered']>
-    readonly onResize: UnwrapRef<typeof import('@dcloudio/uni-app')['onResize']>
-    readonly onScopeDispose: UnwrapRef<typeof import('vue')['onScopeDispose']>
-    readonly onServerPrefetch: UnwrapRef<typeof import('vue')['onServerPrefetch']>
-    readonly onShareAppMessage: UnwrapRef<typeof import('@dcloudio/uni-app')['onShareAppMessage']>
-    readonly onShareTimeline: UnwrapRef<typeof import('@dcloudio/uni-app')['onShareTimeline']>
-    readonly onShow: UnwrapRef<typeof import('@dcloudio/uni-app')['onShow']>
-    readonly onTabItemTap: UnwrapRef<typeof import('@dcloudio/uni-app')['onTabItemTap']>
-    readonly onThemeChange: UnwrapRef<typeof import('@dcloudio/uni-app')['onThemeChange']>
-    readonly onUnhandledRejection: UnwrapRef<typeof import('@dcloudio/uni-app')['onUnhandledRejection']>
-    readonly onUnload: UnwrapRef<typeof import('@dcloudio/uni-app')['onUnload']>
-    readonly onUnmounted: UnwrapRef<typeof import('vue')['onUnmounted']>
-    readonly onUpdated: UnwrapRef<typeof import('vue')['onUpdated']>
-    readonly provide: UnwrapRef<typeof import('vue')['provide']>
-    readonly reactive: UnwrapRef<typeof import('vue')['reactive']>
-    readonly readonly: UnwrapRef<typeof import('vue')['readonly']>
-    readonly ref: UnwrapRef<typeof import('vue')['ref']>
-    readonly resolveComponent: UnwrapRef<typeof import('vue')['resolveComponent']>
-    readonly shallowReactive: UnwrapRef<typeof import('vue')['shallowReactive']>
-    readonly shallowReadonly: UnwrapRef<typeof import('vue')['shallowReadonly']>
-    readonly shallowRef: UnwrapRef<typeof import('vue')['shallowRef']>
-    readonly toRaw: UnwrapRef<typeof import('vue')['toRaw']>
-    readonly toRef: UnwrapRef<typeof import('vue')['toRef']>
-    readonly toRefs: UnwrapRef<typeof import('vue')['toRefs']>
-    readonly toValue: UnwrapRef<typeof import('vue')['toValue']>
-    readonly triggerRef: UnwrapRef<typeof import('vue')['triggerRef']>
-    readonly unref: UnwrapRef<typeof import('vue')['unref']>
-    readonly useAttrs: UnwrapRef<typeof import('vue')['useAttrs']>
-    readonly useCssModule: UnwrapRef<typeof import('vue')['useCssModule']>
-    readonly useCssVars: UnwrapRef<typeof import('vue')['useCssVars']>
-    readonly useRequest: UnwrapRef<typeof import('../hooks/useRequest')['default']>
-    readonly useSlots: UnwrapRef<typeof import('vue')['useSlots']>
+    readonly useTemplateRef: UnwrapRef<typeof import('vue')['useTemplateRef']>
     readonly useUpload: UnwrapRef<typeof import('../hooks/useUpload')['default']>
     readonly watch: UnwrapRef<typeof import('vue')['watch']>
     readonly watchEffect: UnwrapRef<typeof import('vue')['watchEffect']>

+ 6 - 0
pnpm-lock.yaml

@@ -284,6 +284,12 @@ importers:
       '@dcloudio/uni-mp-weixin':
         specifier: 3.0.0-alpha-4010520240507001
         version: 3.0.0-alpha-4010520240507001(bufferutil@4.0.8)(postcss@8.4.47)(rollup@4.22.5)(vue@3.4.21(typescript@4.9.5))
+      '@designer-hub/app':
+        specifier: workspace:*
+        version: link:../app
+      '@designer-hub/assets':
+        specifier: workspace:*
+        version: link:../assets
       '@webevostudio/test.ui.login-test':
         specifier: ^0.0.1
         version: 0.0.1(@testing-library/vue@8.1.0(@vue/compiler-sfc@3.5.10)(vue@3.4.21(typescript@4.9.5)))(vue@3.4.21(typescript@4.9.5))