Quellcode durchsuchen

🎨 同步自查审核为网页版

快乐的梦鱼 vor 2 Wochen
Ursprung
Commit
4ed5c66c86

+ 0 - 7
src/pages.json

@@ -325,13 +325,6 @@
           }
         },
         {
-          "path": "assessment/evaluation-form-review",
-          "style": {
-            "navigationBarTitleText": "自查评估表审核",
-            "enablePullDownRefresh": false
-          }
-        },
-        {
           "path": "assessment/evaluation-list",
           "style": {
             "navigationBarTitleText": "自查评估表列表",

+ 2 - 2
src/pages/collect/admin.vue

@@ -31,8 +31,8 @@
         </FlexRow>
       </FlexRow>
       <CellGroup round>
-      <Cell icon="https://mncdn.wenlvti.net/uploads/20250313/9fb29e8bdb66490034145c90f892773a.png" title="传承协议签署表" showArrow touchable @click="navTo('assessment/argeement-sign-list')" />
-      <Cell icon="https://mncdn.wenlvti.net/uploads/20250313/66d4665b1da5075e60148312469b2630.png" title="自查评估表" showArrow touchable @click="navTo('assessment/evaluation-list')" />
+      <Cell icon="https://mncdn.wenlvti.net/uploads/20250313/9fb29e8bdb66490034145c90f892773a.png" title="传承协议签署表" showArrow touchable @click="navTo('/pages/collect/assessment/argeement-sign-list')" />
+      <Cell icon="https://mncdn.wenlvti.net/uploads/20250313/66d4665b1da5075e60148312469b2630.png" title="自查评估表" showArrow touchable @click="navTo('/pages/collect/assessment/evaluation-list')" />
       </CellGroup>
       <CellGroup round>
         <Cell title="返回闽南文化" showArrow touchable @click="back()" />

+ 3 - 101
src/pages/collect/assessment/argeement-sign-list.vue

@@ -1,107 +1,9 @@
 <template>
-  <FlexCol padding="space.lg" gap="gap.md">
-    <FlexRow justify="space-between" gap="gap.sm">
-      <SearchBar v-model="search" placeholder="输入关键词搜索" :innerStyle="{ width: '400rpx' }" @search="loader.reload()" />
-      <SimpleDropDownPicker
-        v-model="progressFilter"
-        :columns="progressOptions"
-        default-text="全部状态" 
-      />
-    </FlexRow>
-    <SimplePageListLoader :loader="loader">
-      <FlexCol gap="gap.md">
-        <Touchable
-          v-for="item in loader.list.value"
-          :key="`${item.userId}-${item.agreementId ?? 0}`"
-          direction="row"
-          justify="space-between"
-          backgroundColor="white"
-          padding="space.md"
-          radius="radius.md"
-          @click="openRow(item)"
-        >
-          <FlexCol>
-            <Text :text="item.title || item.partyB || '—'" />
-            <Text fontConfig="subText" :text="subLine(item)" />
-          </FlexCol>
-          <FlexRow align="center" gap="gap.sm">
-            <Text fontConfig="subText" :text="progressLabel(item.progress)" />
-            <Icon name="arrow-right-bold" />
-          </FlexRow>
-        </Touchable>
-      </FlexCol>
-    </SimplePageListLoader>
-    <XBarSpace />
-  </FlexCol>
+  <web-view :src="src" />
 </template>
 
 <script setup lang="ts">
-import { ref, watch } from 'vue';
-import { useSimplePageListLoader } from '@/components/composeabe/loader/SimplePageListLoader';
-import { navTo } from '@/components/utils/PageAction';
-import AssessmentContentApi, { type UserAgreementListRow } from '@/api/collect/AssessmentContent';
-import SimpleDropDownPicker, { type SimpleDropDownPickerItem } from '@/common/components/SimpleDropDownPicker.vue';
-import FlexCol from '@/components/layout/FlexCol.vue';
-import XBarSpace from '@/components/layout/space/XBarSpace.vue';
-import Text from '@/components/basic/Text.vue';
-import Icon from '@/components/basic/Icon.vue';
-import SearchBar from '@/components/form/SearchBar.vue';
-import Touchable from '@/components/feedback/Touchable.vue';
-import SimplePageListLoader from '@/components/loader/SimplePageListLoader.vue';
-import FlexRow from '@/components/layout/FlexRow.vue';
+import { useWebPageUrl } from './composeabe/WebPageUrl';
 
-const search = ref('');
-const progressFilter = ref(-100);
-
-/** 与 ich/check/getUserAgreement 列表进度一致 */
-const progressOptions: SimpleDropDownPickerItem[] = [
-  { id: -100, name: '全部状态' },
-  { id: -1, name: '未提交' },
-  { id: 0, name: '草稿' },
-  { id: 1, name: '已提交审核' },
-  { id: 2, name: '审核完成' },
-];
-
-const agreementProgressLabels: Record<number, string> = {
-  [-1]: '未提交',
-  0: '草稿',
-  1: '已提交审核',
-  2: '审核完成',
-};
-
-function progressLabel(p: number | null | undefined) {
-  if (p === null || p === undefined)
-    return '未填写';
-  return agreementProgressLabels[p] ?? `未填写`;
-}
-
-function subLine(item: UserAgreementListRow) {
-  return [item.mobile, item.ichTitle].filter(Boolean).join(' · ') || '—';
-}
-
-function openRow(item: UserAgreementListRow) {
-  const id = item.agreementId && item.agreementId > 0 ? item.agreementId : 0;
-  const uid = item.userId ?? 0;
-  navTo('./argeement-sign', { id, userId: uid });
-}
-
-const loader = useSimplePageListLoader(20, async (page, pageSize) => {
-  const pv = progressFilter.value;
-  const progress = pv > -50 ? pv : undefined;
-  const list = await AssessmentContentApi.getUserAgreementList({
-    year: new Date().getFullYear(),
-    page,
-    pageSize,
-    keywords: search.value?.trim() || undefined,
-    progress,
-  });
-  return {
-    list: list.data,
-    total: list.total,
-  };
-});
-
-watch(progressFilter, () => {
-  loader.reload();
-});
+const { src } = useWebPageUrl('/admin?tab=9')
 </script>

+ 24 - 0
src/pages/collect/assessment/composeabe/WebPageUrl.ts

@@ -0,0 +1,24 @@
+import { useAuthStore } from "@/store/auth";
+import { computed } from "vue";
+
+const WEB_URL = 'http://192.168.1.219:5173';
+
+export function useWebPageUrl(subPath: string) {
+
+  const authStore = useAuthStore();
+
+  const src = computed(() => {
+    const authInfo = {
+      token: authStore.token,
+      userId: authStore.userId,
+      expireAt: authStore.expireAt,
+      userInfo: authStore.userInfo,
+      loginType: authStore.loginType,
+    };
+    return WEB_URL + `?inMiniProgram=true&directAuthInfo=${encodeURIComponent(JSON.stringify(authInfo))}#${subPath}`
+  });
+
+  return {
+    src
+  }
+}

+ 0 - 364
src/pages/collect/assessment/evaluation-form-review.vue

@@ -1,364 +0,0 @@
-<template>
-  <CommonRoot>
-    <FlexCol padding="space.lg">
-      <SimplePageContentLoader :loader="loader">
-        <template v-if="loader.isLoaded.value">
-          <Result
-            v-if="!currentForm"
-            status="warning"
-            title="无法加载评估表"
-            description="请从自查评估表列表进入,并确认参数正确。"
-          />
-          <FlexCol v-else gap="gap.lg">
-            <Alert type="info" :message="progressHint" />
-            <SelfAssessmentFormDisplay
-              :current-form="(currentForm as SelfAssessmentDetail)"
-              :form-options="formOptions"
-              :form-options-end="formOptionsEnd"
-              :check-item-list="(checkItemList as CheckItemInfo[])"
-              :current-form-check-items="(currentFormCheckItems as SelfAssessmentCheckItemAnswer[])"
-              :readonly="true"
-            />
-            <Divider />
-            <H3>审核提交</H3>
-            <Alert
-              v-if="!canSubmitReview"
-              type="warning"
-              message="当前账号用户组无权在此环节审核"
-              description="仅项目保护单位(9)、县(区)文旅部门(5)、设区市文旅部门/省非遗中心(10)、省文化和旅游厅(11) 可提交。"
-            />
-            <FlexCol gap="gap.md">
-              <Text bold :text="`审核环节:${reviewLevelLabel}`" />
-              <Text fontConfig="subText" text="审核意见(必选)" />
-              <FlexRow wrap gap="gap.sm">
-                <Button
-                  v-for="o in opinionSelectOptions"
-                  :key="o.value"
-                  :type="reviewOpinion === o.value ? 'primary' : 'default'"
-                  size="small"
-                  @click="reviewOpinion = o.value"
-                >
-                  {{ o.label }}
-                </Button>
-              </FlexRow>
-              <Text fontConfig="subText" text="评分(可选,0–100)" />
-              <Stepper
-                :min="0"
-                :max="100"
-                :step="1"
-                :model-value="reviewPoints ?? 0"
-                @update:model-value="reviewPoints = $event"
-              />
-              <Text fontConfig="subText" text="提交后进度" />
-              <Text :text="progressSubmitLabel" />
-              <Button
-                type="primary"
-                block
-                :loading="submitLoading"
-                :touchable="canSubmitReview"
-                @click="submitReview"
-              >
-                提交审核
-              </Button>
-              <Button
-                type="danger"
-                block
-                :loading="rejectLoading"
-                :touchable="canSubmitReview"
-                @click="submitReject"
-              >
-                回退
-              </Button>
-            </FlexCol>
-          </FlexCol>
-        </template>
-      </SimplePageContentLoader>
-      <XBarSpace />
-    </FlexCol>
-  </CommonRoot>
-</template>
-
-<script setup lang="ts">
-import { computed, ref, watch } from 'vue';
-import { useSimpleDataLoader } from '@/components/composeabe/loader/SimpleDataLoader';
-import { formatError, waitTimeOut } from '@imengyu/imengyu-utils';
-import { toast, alert } from '@/components/dialog/CommonRoot';
-import AssessmentContentApi, {
-  type CheckItemInfo,
-  type SelfAssessmentCheckItemAnswer,
-  SelfAssessmentDetail,
-} from '@/api/collect/AssessmentContent';
-import CommonRoot from '@/components/dialog/CommonRoot.vue';
-import FlexCol from '@/components/layout/FlexCol.vue';
-import SimplePageContentLoader from '@/components/loader/SimplePageContentLoader.vue';
-import Result from '@/components/feedback/Result.vue';
-import SelfAssessmentFormDisplay from './components/SelfAssessmentFormDisplay.vue';
-import { buildSelfAssessmentFormOptions } from './evaluationFormOptions';
-import { useImageSimpleUploadCo } from '@/common/components/upload/ImageUploadCo';
-import Divider from '@/components/display/Divider.vue';
-import H3 from '@/components/typography/H3.vue';
-import Text from '@/components/basic/Text.vue';
-import Button from '@/components/basic/Button.vue';
-import FlexRow from '@/components/layout/FlexRow.vue';
-import Stepper from '@/components/form/Stepper.vue';
-import Alert from '@/components/feedback/Alert.vue';
-import XBarSpace from '@/components/layout/space/XBarSpace.vue';
-import { useLoadQuerys } from '@/components/composeabe/LoadQuerys';
-import { useAuthStore } from '@/store/auth';
-
-const signUploadCo = useImageSimpleUploadCo();
-const formOptions = buildSelfAssessmentFormOptions(signUploadCo, 'start');
-const formOptionsEnd = buildSelfAssessmentFormOptions(signUploadCo, 'end');
-
-const authStore = useAuthStore();
-const currentUserGroups = computed(() => authStore.userInfo?.adminGroup || []);
-
-const currentForm = ref<SelfAssessmentDetail | null>(null);
-const currentFormCheckItems = ref<SelfAssessmentCheckItemAnswer[]>([]);
-const checkItemList = ref<CheckItemInfo[]>([]);
-
-const submitLoading = ref(false);
-const rejectLoading = ref(false);
-const reviewOpinion = ref<number | null>(null);
-const reviewPoints = ref<number | null>(null);
-
-/** 用户组 → 本环节提交后的 progress */
-const GROUP_TO_REVIEW_PROGRESS: Record<number, number> = {
-  9: 2, // 项目保护单位
-  5: 3, // 县(区)文旅部门
-  10: 4, // 设区市文旅部门、省非遗中心
-  11: 5, // 省文化和旅游厅
-};
-
-const PROGRESS_SUBMIT_LABELS: Record<number, string> = {
-  2: '2 — 项目保护单位审核完成',
-  3: '3 — 县(区)文旅部门审核完成',
-  4: '4 — 设区市文旅部门、省非遗中心审核完成',
-  5: '5 — 省文化和旅游厅审核完成',
-};
-
-const opinionSelectOptions = [
-  { label: '优秀', value: 1 },
-  { label: '合格', value: 2 },
-  { label: '不合格', value: 3 },
-  { label: '丧失传承能力', value: 4 },
-  { label: '取消资格', value: 5 },
-];
-
-const reviewProgress = computed(() => {
-  const currentUserGroup = currentUserGroups.value.find(
-    (group) => GROUP_TO_REVIEW_PROGRESS[group.id],
-  );
-  return GROUP_TO_REVIEW_PROGRESS[currentUserGroup?.id ?? 0] ?? 0;
-});
-
-const canSubmitReview = computed(
-  () => reviewProgress.value >= 2 && reviewProgress.value <= 5,
-);
-
-const progressSubmitLabel = computed(
-  () => PROGRESS_SUBMIT_LABELS[reviewProgress.value] ?? '—',
-);
-
-const { querys } = useLoadQuerys({
-  id: 0,
-  userId: 0,
-  progress: Number.NaN,
-}, () => {
-  loader.load();
-});
-
-const listProgress = computed(() => {
-  const p = querys.value.progress;
-  return Number.isFinite(p) ? p : Number.NaN;
-});
-
-const reviewLevelLabel = computed(() => {
-  switch (reviewProgress.value) {
-    case 2:
-      return '项目保护单位';
-    case 3:
-      return '县(区)文旅部门';
-    case 4:
-      return '设区市文旅部门、省非遗中心';
-    case 5:
-      return '省文化和旅游厅';
-    default:
-      return '';
-  }
-});
-
-const progressHint = computed(() => {
-  const roleText = canSubmitReview.value
-    ? `当前账号审核环节:${reviewLevelLabel.value}`
-    : `当前用户组 ${currentUserGroups.value.map((group) => group.name).join('、') || '—'} 无对应审核环节`;
-  return `${roleText}。`;
-});
-
-function levelTitleFromForm(f: SelfAssessmentDetail) {
-  if (f.level === 23) return '国家级';
-  if (f.level === 24) return '省级';
-  if (f.level === 25) return '市级';
-  return '国家级';
-}
-
-function loadEditorContent(f: SelfAssessmentDetail) {
-  if (typeof f.content !== 'object' || f.content === null)
-    f.content = {};
-  f.content.title = `传承人填写${f.year}年1月1日至${f.year}年12月31日${levelTitleFromForm(f)}非遗传承人义务履行和传承补助经费使用情况等,不超过1000字,如未履行职责请进行说明。参考提纲如下:`;
-  for (let i = 0; i < 8; i++) {
-    if (typeof f.content[`item${i}`] !== 'string')
-      f.content[`item${i}`] = '';
-  }
-}
-
-async function loadCheckItems(f: SelfAssessmentDetail) {
-  const { top } = await AssessmentContentApi.getCheckItems(Number(f.level));
-  checkItemList.value = top;
-  currentFormCheckItems.value = [...f.checkItems] as SelfAssessmentCheckItemAnswer[];
-}
-
-function applyPrefillFromDetail(f: SelfAssessmentDetail) {
-  const t = reviewProgress.value;
-  if (!canSubmitReview.value)
-    return;
-  if (t === 2) {
-    reviewOpinion.value = f.ichUnit ?? null;
-    reviewPoints.value = f.unitPoints || null;
-  } else if (t === 3) {
-    reviewOpinion.value = f.county ?? null;
-    reviewPoints.value = f.countyPoints || null;
-  } else if (t === 4) {
-    reviewOpinion.value = f.district ?? null;
-    reviewPoints.value = f.districtPoints || null;
-  } else if (t === 5) {
-    reviewOpinion.value = f.province ?? null;
-    reviewPoints.value = f.provincePoints || null;
-  }
-}
-
-const loader = useSimpleDataLoader(async () => {
-  const id = querys.value.id;
-  const uid = querys.value.userId;
-  if (!id || !uid) {
-    currentForm.value = null;
-    return null;
-  }
-  const detail = await AssessmentContentApi.getSelfAssessmentDetail(id, uid);
-  await waitTimeOut(200);
-  currentForm.value = detail;
-  loadEditorContent(detail);
-  await waitTimeOut(200);
-  await loadCheckItems(detail);
-  await waitTimeOut(200);
-  applyPrefillFromDetail(detail);
-  await waitTimeOut(200);
-  return detail;
-}, false);
-
-watch(reviewProgress, () => {
-  const f = currentForm.value;
-  if (f)
-    applyPrefillFromDetail(f as SelfAssessmentDetail);
-});
-
-/** 回退后 progress:退回至上一环节 */
-const rejectTargetProgress = computed(() => Math.max(1, reviewProgress.value - 1));
-
-function promptRejectReason() {
-  return new Promise<string | null>((resolve) => {
-    uni.showModal({
-      title: '回退自查评估表',
-      editable: true,
-      placeholderText: '请输入回退原因(必填)',
-      content: '',
-      confirmText: '确认回退',
-      cancelText: '取消',
-      success: (res) => {
-        if (!res.confirm) {
-          resolve(null);
-          return;
-        }
-        const reason = (res.content ?? '').trim();
-        if (!reason) {
-          toast('请输入回退原因');
-          resolve(null);
-          return;
-        }
-        resolve(reason);
-      },
-      fail: () => resolve(null),
-    });
-  });
-}
-
-async function submitReject() {
-  const f = currentForm.value;
-  if (!f?.id) {
-    toast('缺少自查表 ID');
-    return;
-  }
-  if (!canSubmitReview.value) {
-    toast('当前账号用户组无权回退');
-    return;
-  }
-  const rejectReason = await promptRejectReason();
-  if (rejectReason === null)
-    return;
-  const t = reviewProgress.value;
-  rejectLoading.value = true;
-  try {
-    await AssessmentContentApi.reviewSelfAssessment({
-      id: f.id,
-      progress: rejectTargetProgress.value,
-      rejectType: t,
-      rejectReason,
-    });
-    toast('已回退');
-    await waitTimeOut(400);
-    uni.navigateBack();
-  } catch (e) {
-    alert({ title: '回退失败', content: formatError(e) });
-  } finally {
-    rejectLoading.value = false;
-  }
-}
-
-async function submitReview() {
-  const f = currentForm.value;
-  if (!f?.id) {
-    toast('缺少自查表 ID');
-    return;
-  }
-  if (!canSubmitReview.value) {
-    toast('当前账号用户组无权提交审核');
-    return;
-  }
-  if (reviewOpinion.value == null) {
-    toast('请选择审核意见');
-    return;
-  }
-  const t = reviewProgress.value;
-  const base = { id: f.id, progress: t };
-  const points = reviewPoints.value != null && reviewPoints.value >= 0 ? reviewPoints.value : undefined;
-  const op = reviewOpinion.value;
-  submitLoading.value = true;
-  try {
-    if (t === 2)
-      await AssessmentContentApi.reviewSelfAssessment({ ...base, ichUnit: op, unitPoints: points });
-    else if (t === 3)
-      await AssessmentContentApi.reviewSelfAssessment({ ...base, county: op, countyPoints: points });
-    else if (t === 4)
-      await AssessmentContentApi.reviewSelfAssessment({ ...base, district: op, districtPoints: points });
-    else
-      await AssessmentContentApi.reviewSelfAssessment({ ...base, province: op, provincePoints: points });
-    toast('审核提交成功');
-    await waitTimeOut(400);
-    uni.navigateBack();
-  } catch (e) {
-    alert({ title: '审核提交失败', content: formatError(e) });
-  } finally {
-    submitLoading.value = false;
-  }
-}
-</script>

+ 3 - 154
src/pages/collect/assessment/evaluation-list.vue

@@ -1,160 +1,9 @@
 <template>
-  <FlexCol padding="space.lg" gap="gap.md">
-    <FlexRow justify="space-between" gap="gap.sm">
-      <SearchBar v-model="search" placeholder="输入关键词搜索" :innerStyle="{ width: '400rpx' }" @search="loader.reload()" />
-      <SimpleDropDownPicker
-        v-model="progressFilter"
-        :columns="progressOptions"
-        default-text="全部状态"
-      />
-    </FlexRow>
-    <SimplePageListLoader :loader="loader">
-      <FlexCol gap="gap.md">
-        <FlexRow
-          v-for="item in loader.list.value"
-          :key="`${item.userId}-${item.checkId ?? item.id}`"
-          align="center"
-          justify="space-between"
-          gap="gap.sm"
-          backgroundColor="white"
-          padding="space.md"
-          radius="radius.md"
-        >
-          <Touchable
-            flex="1"
-            direction="row"
-            justify="space-between"
-            @click="openEdit(item)"
-          >
-            <FlexCol flex="1">
-              <Text :text="item.inheritor ?? item.title ?? '?'" />
-              <Text fontConfig="subText" :text="subLine(item)" />
-            </FlexCol>
-          </Touchable>
-          <Text fontConfig="subText" :text="progressLabel(item.progress)" />
-          <Button
-            v-if="canReview(item)"
-            type="primary"
-            size="small"
-            @click.stop="openReview(item)"
-          >
-            审核
-          </Button>
-          <Icon name="arrow-right-bold" />
-        </FlexRow>
-      </FlexCol>
-    </SimplePageListLoader>
-    <XBarSpace />
-  </FlexCol>
+  <web-view :src="src" />
 </template>
 
 <script setup lang="ts">
-import { ref, watch } from 'vue';
-import { useSimplePageListLoader } from '@/components/composeabe/loader/SimplePageListLoader';
-import { navTo } from '@/components/utils/PageAction';
-import AssessmentContentApi, { type InheritorCheckListRow } from '@/api/collect/AssessmentContent';
-import SimpleDropDownPicker, { type SimpleDropDownPickerItem } from '@/common/components/SimpleDropDownPicker.vue';
-import FlexCol from '@/components/layout/FlexCol.vue';
-import FlexRow from '@/components/layout/FlexRow.vue';
-import XBarSpace from '@/components/layout/space/XBarSpace.vue';
-import Text from '@/components/basic/Text.vue';
-import Icon from '@/components/basic/Icon.vue';
-import SearchBar from '@/components/form/SearchBar.vue';
-import Touchable from '@/components/feedback/Touchable.vue';
-import SimplePageListLoader from '@/components/loader/SimplePageListLoader.vue';
-import Button from '@/components/basic/Button.vue';
-import { confirm, toast } from '@/components/utils/DialogAction';
+import { useWebPageUrl } from './composeabe/WebPageUrl';
 
-const search = ref('');
-/** 与接口一致:-100=全部,其余为 progress 精确筛选 */
-const progressFilter = ref(-100);
-
-const progressOptions: SimpleDropDownPickerItem[] = [
-  { id: -100, name: '全部状态' },
-  { id: -1, name: '未提交' },
-  { id: 0, name: '草稿' },
-  { id: 1, name: '已提交审核' },
-  { id: 2, name: '项目保护单位审核完成' },
-  { id: 3, name: '县(区)文旅部门审核完成' },
-  { id: 4, name: '设区市/省非遗中心审核完成' },
-  { id: 5, name: '省文化和旅游厅审核完成' },
-];
-
-const progressLabels: Record<number, string> = {
-  [-1]: '未提交',
-  0: '草稿',
-  1: '已提交审核',
-  2: '项目保护单位审核完成',
-  3: '县(区)文旅部门审核完成',
-  4: '设区市/省非遗中心审核完成',
-  5: '省文化和旅游厅审核完成',
-};
-
-function progressLabel(p: number | null | undefined) {
-  if (p === null || p === undefined)
-    return '未填写';
-  return progressLabels[p] ?? `未填写`;
-}
-
-function subLine(item: InheritorCheckListRow) {
-  return [item.mobile, item.unit, item.ichTitle].filter(Boolean).join(' · ') || '—';
-}
-
-function canReview(item: InheritorCheckListRow) {
-  return Boolean(item.checkId && item.userId != null && item.progress != null && item.progress >= 1 && item.progress < 5);
-}
-
-function openEdit(item: InheritorCheckListRow) {
-  const cid = item.checkId ?? item.id;
-  const uid = item.userId ?? 0;
-  navTo('./evaluation-form', { id: cid, userId: uid });
-}
-
-function openReview(item: InheritorCheckListRow) {
-  const cid = item.checkId;
-  const uid = item.userId;
-  confirm({
-    title: '提示',
-    content: '管理员请登录电脑版,审核浏览更方便, 地址 https://zycj.wenlvti.net/',
-    confirmText: '电脑版',
-    cancelText: '手机版',
-  }).then((res) => {
-    if (res) {
-      uni.setClipboardData({
-        data: 'https://zycj.wenlvti.net',
-        toast: false,
-        success: () => {
-          toast('已复制网址到剪贴板,请在电脑上打开!');
-        },
-      })
-      return;
-    } else {
-      navTo('./evaluation-form-review', {
-        id: cid,
-        userId: uid,
-        progress: item.progress ?? '',
-      });
-    }
-  })
-}
-
-const loader = useSimplePageListLoader(20, async (page, pageSize) => {
-  const pv = progressFilter.value;
-  const progress = pv > -50 ? pv : undefined;
-  const list = await AssessmentContentApi.getInheritorList({
-    year: new Date().getFullYear(),
-    page,
-    pageSize,
-    keywords: search.value?.trim() || undefined,
-    progress,
-  });
-  return {
-    list: list.data,
-    total: list.total,
-  };
-});
-
-watch(progressFilter, () => {
-  loader.reload();
-});
+const { src } = useWebPageUrl('/admin?tab=8')
 </script>