wupengfei
2025-02-24 dd7d743197d2cbb2aa0626a55d3a8cc20cce4295
Merge branch 'master' of http://120.26.58.240:8888/r/LifePaymentFront
16个文件已修改
6个文件已添加
6 文件已重命名
368 ■■■■■ 已修改文件
apps/taro/package.json 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/taro/src/app.ts 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/taro/src/subpackages/login/loginByForm/verificationCodeLoginForm.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/taro/src/subpackages/recharge/phoneBillRecharge/InnerPage.vue 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/taro/src/utils/blLifeRecharge.ts 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/taro/tsconfig.json 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/components/package.json 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/components/src/hooks/index.ts 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/components/src/utils/index.ts 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/components/src/views/Order/components/PhoneOrder.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/components/src/views/PhoneBillRecharge/PhoneBillRecharge.vue 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/components/src/views/SelectPayTypeView/SelectPayTypeView.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/components/src/views/electricBillRecharge/electricBillRecharge.vue 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/components/tsconfig.json 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/core-vue/package.json 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/core-vue/src/index.ts 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/core-vue/src/plugin.ts 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/core-vue/tsconfig.json 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/core/package.json 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/core/src/index.ts 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/core/src/lifeRecharge.ts 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/core/src/lifeRechargeAccountModel.ts 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/core/src/lifeRechargeConstants.ts 补丁 | 查看 | 原始文档 | blame | 历史
packages/core/src/lifeRechargeServices.ts 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/core/src/types.ts 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/core/tsconfig.json 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/services/api/typings.d.ts 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pnpm-lock.yaml 159 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/taro/package.json
@@ -43,6 +43,7 @@
    "@babel/runtime": "^7.7.7",
    "@life-payment/components": "workspace:^",
    "@life-payment/constants": "workspace:^",
    "@life-payment/core-vue": "workspace:^",
    "@life-payment/services": "workspace:^",
    "@life-payment/utils": "workspace:^",
    "@nutui/icons-vue-taro": "^0.0.9",
apps/taro/src/app.ts
@@ -10,7 +10,7 @@
import Taro from '@tarojs/taro';
import { VueQueryPlugin, VueQueryPluginOptions } from '@tanstack/vue-query';
import { myClient } from '@/constants/query';
import { VueLifeRechargePlugin } from '@life-payment/components';
import { VueLifeRechargePlugin } from '@life-payment/core-vue';
import { blLifeRecharge } from '@/utils/blLifeRecharge';
import { isWeChat } from '@/utils/env';
apps/taro/src/subpackages/login/loginByForm/verificationCodeLoginForm.vue
@@ -40,7 +40,7 @@
import { useLoginedJump } from '@/hooks';
import { useUserStore } from '@/stores/modules/user';
import Taro from '@tarojs/taro';
import { useLifeRechargeContext } from '@life-payment/components';
import { useLifeRechargeContext } from '@life-payment/core-vue';
defineOptions({
  name: 'verificationCodeLoginForm',
apps/taro/src/subpackages/recharge/phoneBillRecharge/InnerPage.vue
@@ -1,17 +1,20 @@
<template>
  <ContentScrollView :paddingH="false">
    <PhoneBillRecharge @goPay="goPay" />
    <PhoneBillRecharge @goPay="goPay" :isDev="isDev" />
  </ContentScrollView>
</template>
<script setup lang="ts">
import { PhoneBillRecharge, BlLifeRecharge } from '@life-payment/components';
import { PhoneBillRecharge } from '@life-payment/components';
import { BlLifeRecharge } from '@life-payment/core-vue';
import Taro from '@tarojs/taro';
defineOptions({
  name: 'InnerPage',
});
const isDev = process.env.NODE_ENV === 'development';
function goPay(orderNo: string) {
  Taro.navigateTo({
    url: `${RouterPath.selectPayType}?orderNo=${orderNo}&lifePayOrderType=${BlLifeRecharge.constants.LifePayOrderTypeEnum.话费订单}`,
apps/taro/src/utils/blLifeRecharge.ts
@@ -1,4 +1,4 @@
import { BlLifeRecharge } from '@life-payment/components';
import { BlLifeRecharge } from '@life-payment/core-vue';
import { request } from './request';
import { getStorageVirtualUserId } from './storage';
apps/taro/tsconfig.json
@@ -27,6 +27,7 @@
  "references": [
    { "path": "../../packages/components" },
    { "path": "../../packages/constants" },
    { "path": "../../packages/core-vue" },
    { "path": "../../packages/utils" }
  ]
}
packages/components/package.json
@@ -15,12 +15,13 @@
    "./*": "./*"
  },
  "devDependencies": {
    "@life-payment/core-vue": "workspace:^",
    "@nutui/icons-vue-taro": "0.0.9",
    "@nutui/nutui-taro": "4.3.13",
    "vue": "3.5.12"
  },
  "peerDependencies": {
    "@nutui/icons-vue-taro": "0.0.9",
    "@life-payment/core-vue": "*",
    "@nutui/nutui-taro": "4.3.13",
    "vue": "3.5.12"
  }
packages/components/src/hooks/index.ts
@@ -5,7 +5,8 @@
  PhoneParValueResponse,
  QueryLifePayOrderListInput,
  LifeRechargeConstants,
} from '../utils';
  ElectricParValueResponse,
} from '@life-payment/core-vue';
import { useQuery } from '@tanstack/vue-query';
import { computed, MaybeRef, reactive, unref } from 'vue';
import { useInfiniteLoading } from './infiniteLoading';
@@ -62,6 +63,25 @@
  };
}
export function useGetElectricParValue() {
  const { blLifeRecharge } = useLifeRechargeContext();
  const { data: electricParValueList, isLoading } = useQuery({
    queryKey: ['blLifeRecharge/getElectricParValue'],
    queryFn: async () => {
      return await blLifeRecharge.services.getElectricParValue({ showLoading: false });
    },
    select(data) {
      return data.electricParValue ?? [];
    },
    placeholderData: () => ({} as ElectricParValueResponse),
  });
  return {
    electricParValueList,
  };
}
export type UseGetUserLifePayOrderPageOptions = {
  lifePayOrderType?: MaybeRef<LifeRechargeConstants.LifePayOrderTypeEnum>;
};
packages/components/src/utils/index.ts
@@ -1,6 +1 @@
export * from './lifeRecharge';
export * from './plugin';
export * from './lifeRechargeServices';
export * from './types';
export * from './validator';
export * from './lifeRechargeConstants';
packages/components/src/views/Order/components/PhoneOrder.vue
@@ -28,8 +28,8 @@
import OrderCard from '../../../components/Card/OrderCard.vue';
import OrderCardItem from '../../../components/Card/OrderCardItem.vue';
import { useGetUserLifePayOrderPage } from '../../../hooks';
import { BlLifeRecharge } from '../../../utils';
import dayjs from 'dayjs';
import { BlLifeRecharge } from '@life-payment/core-vue';
defineOptions({
  name: 'PhoneOrder',
packages/components/src/views/PhoneBillRecharge/PhoneBillRecharge.vue
@@ -7,7 +7,7 @@
    class="order-bill-recharge phone"
  >
    <FormItem label="选择运营商:" class="bole-form-item" prop="ispCode" required>
      <RadioGroup v-model="form.ispCode" direction="horizontal">
      <RadioGroup v-model="form.ispCode" direction="horizontal" @change="changeIspCode">
        <BlRadio
          :label="key"
          v-for="(val, key) in BlLifeRecharge.constants.IspCodeText"
@@ -41,7 +41,7 @@
    <FormItem label="选择充值金额" class="bole-form-item" prop="parValue" required>
      <RadioGroup v-model="form.parValue" direction="horizontal" class="parValue-radio-group">
        <Radio
          :label="item"
          :label="Number(item)"
          :key="item"
          shape="button"
          v-for="item in parValueList"
@@ -88,12 +88,13 @@
import { FormRules } from '@nutui/nutui-taro/dist/types/__VUE/form/types';
import { reactive, ref, computed } from 'vue';
import BlRadio from '../../components/Radio/Radio.vue';
import { FormValidator } from '../../utils';
import {
  useLifeRechargeContext,
  BlLifeRecharge,
  LifePhoneDataCreateLifePayOrderInput,
  FormValidator,
} from '../../utils';
  LifeRechargeConstants,
} from '@life-payment/core-vue';
import RechargeTipsView from '../../components/RechargeTipsView/RechargeTipsView.vue';
import ConfirmDialog from '../../components/Dialog/ConfirmDialog.vue';
import ConfirmDialogInfoItem from '../../components/Dialog/ConfirmDialogInfoItem.vue';
@@ -101,6 +102,14 @@
defineOptions({
  name: 'PhoneBillRecharge',
});
type Props = {
  isDev?: boolean;
};
const props = withDefaults(defineProps<Props>(), {
  isDev: false,
});
const form = reactive({
@@ -111,22 +120,22 @@
});
const emit = defineEmits<{
  (
    e: 'goPay',
    // form: {
    //   ispCode: typeof BlLifeRecharge.constants.IspCode;
    //   phone: string;
    //   parValue: number;
    //   name: string;
    // }
    orderNo: string
  ): void;
  (e: 'goPay', orderNo: string): void;
}>();
const { lifePayPhoneRate } = useGetRate();
const { phoneParValueList } = useGetPhoneParValue();
const parValueList = [50, 100, 200];
const parValueList = computed(
  () => phoneParValueList.value.find((x) => x.ispCode === form.ispCode)?.parValue ?? []
);
function changeIspCode(val: LifeRechargeConstants.IspCode) {
  const phoneParValueItem = phoneParValueList.value.find((x) => x.ispCode === val);
  if (phoneParValueItem.parValue.every((x) => Number(x) !== form.parValue)) {
    form.parValue = 0;
  }
}
const realParValue = computed(() =>
  blLifeRecharge.getRechargeParValue(form.parValue, lifePayPhoneRate.value)
@@ -179,7 +188,7 @@
      userId: blLifeRecharge.accountModel.userId,
      productData: {
        ispCode: form.ispCode,
        parValue: 0.1,
        parValue: props.isDev ? 0.1 : form.parValue,
        phone: form.phone,
        name: form.ispCode === BlLifeRecharge.constants.IspCode.dianxin ? form.name : '',
      },
packages/components/src/views/SelectPayTypeView/SelectPayTypeView.vue
@@ -18,7 +18,7 @@
  useLifeRechargeContext,
  SetLifePayOrderPayTypeInput,
  LifeRechargeConstants,
} from '../../utils';
} from '@life-payment/core-vue';
import { useQuery } from '@tanstack/vue-query';
defineOptions({
packages/components/src/views/electricBillRecharge/electricBillRecharge.vue
@@ -65,9 +65,11 @@
            </div>
            <div class="price-wrapper">
              <div class="price-text">折后</div>
              <div class="price">{{ blLifeRecharge.getRechargeParValue(item, rate) }}元</div>
              <div class="price">
                {{ blLifeRecharge.getRechargeParValue(item, lifePayElectricRate) }}元
            </div>
            <div class="discountTag">{{ rate * 100 }}折</div>
            </div>
            <div class="discountTag">{{ lifePayElectricRate * 100 }}折</div>
          </div>
        </Radio>
      </RadioGroup>
@@ -88,8 +90,8 @@
      <template #info>
        <ConfirmDialogInfoItem label="电网类型" content="国家电网" />
        <ConfirmDialogInfoItem label="电费类型" content="住宅" />
        <ConfirmDialogInfoItem label="充值金额" :content="`¥${form.parValue}`" danger />
        <ConfirmDialogInfoItem label="优惠金额" :content="`¥${discountParValue}`" />
        <ConfirmDialogInfoItem label="充值金额" :content="`¥${form.parValue.toFixed(2)}`" danger />
        <ConfirmDialogInfoItem label="优惠金额" :content="`¥${discountParValue.toFixed(2)}`" />
        <ConfirmDialogInfoItem label="实付金额" :content="`¥${realParValue}`" danger />
      </template>
      <template #warning>
@@ -103,13 +105,13 @@
import { Form, FormItem, RadioGroup, Radio, Input, Button as NutButton } from '@nutui/nutui-taro';
import { FormRules } from '@nutui/nutui-taro/dist/types/__VUE/form/types';
import { reactive, ref, computed } from 'vue';
import BlRadio from '../../components/Radio/Radio.vue';
import { IspCodeText, IspCode } from '../../constants';
import { useLifeRechargeContext } from '../../utils';
import { useLifeRechargeContext } from '@life-payment/core-vue';
import RechargeTipsView from '../../components/RechargeTipsView/RechargeTipsView.vue';
import ConfirmDialog from '../../components/Dialog/ConfirmDialog.vue';
import ConfirmDialogInfoItem from '../../components/Dialog/ConfirmDialogInfoItem.vue';
import ChooseInputWithPicker from '../../components/Input/ChooseInputWithPicker.vue';
import { useGetRate, useGetElectricParValue } from '../../hooks';
defineOptions({
  name: 'electricBillRecharge',
@@ -129,11 +131,14 @@
  sixID: '',
});
const rate = 0.96;
const { lifePayElectricRate } = useGetRate();
const { electricParValueList } = useGetElectricParValue();
const parValueList = [100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1500, 2000, 3000];
const realParValue = computed(() => blLifeRecharge.getRechargeParValue(form.parValue, rate));
const realParValue = computed(() =>
  blLifeRecharge.getRechargeParValue(form.parValue, lifePayElectricRate.value)
);
const discountParValue = computed(() => form.parValue - Number(realParValue.value));
const { blLifeRecharge } = useLifeRechargeContext();
packages/components/tsconfig.json
@@ -15,6 +15,6 @@
      "../../types/api.d.ts"
    ]
  },
  "include": ["./src/**/*", "./types", "./assets"],
  "include": ["./src/**/*", "./types", "./assets", "../core-vue"],
  "references": [{ "path": "../services" }]
}
packages/core-vue/package.json
New file
@@ -0,0 +1,15 @@
{
  "name": "@life-payment/core-vue",
  "private": true,
  "main": "src/index.ts",
  "module": "./src/index.ts",
  "version": "0.0.1",
  "devDependencies": {
    "@life-payment/core": "workspace:^",
    "vue": "3.5.12"
  },
  "peerDependencies": {
    "@life-payment/core": "*",
    "vue": "3.5.12"
  }
}
packages/core-vue/src/index.ts
New file
@@ -0,0 +1,2 @@
export * from '@life-payment/core';
export * from './plugin';
packages/core-vue/src/plugin.ts
File was renamed from packages/components/src/utils/plugin.ts
@@ -1,4 +1,4 @@
import { BlLifeRecharge } from './lifeRecharge';
import { BlLifeRecharge } from '@life-payment/core';
import { inject, shallowReactive } from 'vue';
import type { InjectionKey, UnwrapNestedRefs, Ref } from 'vue';
packages/core-vue/tsconfig.json
New file
@@ -0,0 +1,14 @@
{
  "extends": "../../tsconfig.base.json",
  "compilerOptions": {
    "baseUrl": ".",
    "ignoreDeprecations": "5.0",
    "paths": {
      "@life-payment/*": ["../../packages/*"]
    },
    "composite": true,
    "types": ["node"]
  },
  "include": ["./src/**/*"],
  "references": [{ "path": "../core" }]
}
packages/core/package.json
New file
@@ -0,0 +1,13 @@
{
  "name": "@life-payment/core",
  "private": true,
  "main": "src/index.ts",
  "module": "./src/index.ts",
  "version": "0.0.1",
  "devDependencies": {
    "axios": "1.4.0"
  },
  "peerDependencies": {
    "axios": "*"
  }
}
packages/core/src/index.ts
New file
@@ -0,0 +1,4 @@
export * from './lifeRecharge';
export * from './lifeRechargeServices';
export * from './types';
export * from './lifeRechargeConstants';
packages/core/src/lifeRecharge.ts
File was renamed from packages/components/src/utils/lifeRecharge.ts
@@ -38,7 +38,7 @@
    return !!this.accountModel.userId;
  }
  getRechargeParValue(amount: number, rate: number) {
    return (amount * rate).toFixed(2);
  getRechargeParValue(amount: number | string, rate: number) {
    return (Number(amount) * rate).toFixed(2);
  }
}
packages/core/src/lifeRechargeAccountModel.ts
File was renamed from packages/components/src/utils/lifeRechargeAccountModel.ts
@@ -5,7 +5,7 @@
  phoneNumber = '';
  constructor(options: BlLifeRechargeAccountModelOptions = {}) {
    const { userId, phoneNumber } = options;
    const { userId = '', phoneNumber = '' } = options;
    this.setUserId(userId);
    this.setPhoneNumber(phoneNumber);
  }
packages/core/src/lifeRechargeConstants.ts
packages/core/src/lifeRechargeServices.ts
File was renamed from packages/components/src/utils/lifeRechargeServices.ts
@@ -149,14 +149,14 @@
}
export interface PhoneParValueResponse {
  success?: string;
  success?: boolean;
  requestNo?: string;
  partnerId?: string;
  service?: string;
  version?: string;
  protocol?: string;
  context?: string;
  ext?: string;
  ext?: any;
  code?: string;
  message?: string;
  detail?: string;
@@ -166,7 +166,7 @@
export interface PhoneParValueOutput {
  ispCode?: string;
  ispName?: string;
  parValue?: string;
  parValue?: string[];
  rate?: number;
  phoneSection?: string;
  comments?: string;
packages/core/src/types.ts
File was renamed from packages/components/src/utils/types.ts
@@ -1,4 +1,4 @@
import { AxiosInstance, AxiosRequestConfig, AxiosResponse } from 'axios';
import { AxiosRequestConfig } from 'axios';
export interface IRequestOptions extends AxiosRequestConfig {}
packages/core/tsconfig.json
New file
@@ -0,0 +1,20 @@
{
  "extends": "../../tsconfig.base.json",
  "compilerOptions": {
    "baseUrl": ".",
    "ignoreDeprecations": "5.0",
    "paths": {
      "@life-payment/*": ["../../packages/*"]
    },
    "composite": true,
    "types": [
      "node",
      "../services/api/typings.d.ts",
      "../services/types.d.ts",
      "../services/globalType.d.ts",
      "../../types/api.d.ts"
    ]
  },
  "include": ["./src/**/*"],
  "references": [{ "path": "../services" }]
}
packages/services/api/typings.d.ts
@@ -5468,20 +5468,20 @@
  interface ElectricParValueOutput {
    electricType?: string;
    areaName?: string;
    parValue?: string;
    parValue?: string[];
    rate?: number;
    comments?: string;
  }
  interface ElectricParValueResponse {
    success?: string;
    success?: boolean;
    requestNo?: string;
    partnerId?: string;
    service?: string;
    version?: string;
    protocol?: string;
    context?: string;
    ext?: string;
    ext?: any;
    code?: string;
    message?: string;
    detail?: string;
@@ -14917,21 +14917,21 @@
  interface PhoneParValueOutput {
    ispCode?: string;
    ispName?: string;
    parValue?: string;
    parValue?: string[];
    rate?: number;
    phoneSection?: string;
    comments?: string;
  }
  interface PhoneParValueResponse {
    success?: string;
    success?: boolean;
    requestNo?: string;
    partnerId?: string;
    service?: string;
    version?: string;
    protocol?: string;
    context?: string;
    ext?: string;
    ext?: any;
    code?: string;
    message?: string;
    detail?: string;
pnpm-lock.yaml
@@ -1,9 +1,5 @@
lockfileVersion: '6.0'
settings:
  autoInstallPeers: true
  excludeLinksFromLockfile: false
overrides:
  vue: 3.5.12
@@ -121,7 +117,7 @@
    dependencies:
      '@bole-12333/chat-kit':
        specifier: latest
        version: 1.0.1(@tencentcloud/chat-uikit-engine@2.4.0)(lodash@4.17.21)(vue@3.5.12)
        version: 1.0.1(@tencentcloud/chat-uikit-engine@2.4.2)(lodash@4.17.21)(vue@3.5.12)
      '@bole-12333/customer-chat':
        specifier: latest
        version: 1.0.3(@bole-12333/chat-kit@1.0.1)(@tiptap/core@2.11.5)(@tiptap/extension-document@2.11.5)(@tiptap/extension-image@2.11.5)(@tiptap/extension-mention@2.11.5)(@tiptap/extension-paragraph@2.11.5)(@tiptap/extension-placeholder@2.11.5)(@tiptap/extension-text@2.11.5)(@tiptap/pm@2.11.5)(@tiptap/suggestion@2.11.5)(dayjs@1.11.6)(vue@3.5.12)
@@ -498,6 +494,9 @@
      '@life-payment/constants':
        specifier: workspace:^
        version: link:../../packages/constants
      '@life-payment/core-vue':
        specifier: workspace:^
        version: link:../../packages/core-vue
      '@life-payment/services':
        specifier: workspace:^
        version: link:../../packages/services
@@ -736,6 +735,9 @@
  packages/components:
    devDependencies:
      '@life-payment/core-vue':
        specifier: workspace:^
        version: link:../core-vue
      '@nutui/icons-vue-taro':
        specifier: 0.0.9
        version: 0.0.9
@@ -747,6 +749,21 @@
        version: 3.5.12(typescript@5.2.2)
  packages/constants: {}
  packages/core:
    devDependencies:
      axios:
        specifier: 1.4.0
        version: 1.4.0
  packages/core-vue:
    devDependencies:
      '@life-payment/core':
        specifier: workspace:^
        version: link:../core
      vue:
        specifier: 3.5.12
        version: 3.5.12(typescript@5.2.2)
  packages/services: {}
@@ -4837,14 +4854,14 @@
      '@babel/helper-validator-identifier': 7.24.7
      to-fast-properties: 2.0.0
  /@bole-12333/chat-kit@1.0.1(@tencentcloud/chat-uikit-engine@2.4.0)(lodash@4.17.21)(vue@3.5.12):
  /@bole-12333/chat-kit@1.0.1(@tencentcloud/chat-uikit-engine@2.4.2)(lodash@4.17.21)(vue@3.5.12):
    resolution: {integrity: sha512-yeSh4XLagaM+uNZRdcG49mhDJO3UbYEpIYZS4Lk303ROnTwxuZyuh5jkoflnCFwWN3Ib3AolfQy999oOqF012A==}
    peerDependencies:
      '@tencentcloud/chat-uikit-engine': '*'
      lodash: '*'
      vue: 3.5.12
      vue: '*'
    dependencies:
      '@tencentcloud/chat-uikit-engine': 2.4.0(react-native@0.78.0)(react@19.0.0)
      '@tencentcloud/chat-uikit-engine': 2.4.2(react-native@0.78.0)(react@19.0.0)
      lodash: 4.17.21
      vue: 3.5.12(typescript@4.6.4)
    dev: false
@@ -4863,9 +4880,9 @@
      '@tiptap/pm': ^2.0.0-beta.220
      '@tiptap/suggestion': ^2.0.0-beta.220
      dayjs: '*'
      vue: 3.5.12
      vue: '*'
    dependencies:
      '@bole-12333/chat-kit': 1.0.1(@tencentcloud/chat-uikit-engine@2.4.0)(lodash@4.17.21)(vue@3.5.12)
      '@bole-12333/chat-kit': 1.0.1(@tencentcloud/chat-uikit-engine@2.4.2)(lodash@4.17.21)(vue@3.5.12)
      '@tiptap/core': 2.11.5(@tiptap/pm@2.11.5)
      '@tiptap/extension-document': 2.11.5(@tiptap/core@2.11.5)
      '@tiptap/extension-image': 2.11.5(@tiptap/core@2.11.5)
@@ -4896,7 +4913,7 @@
      senin-help: '*'
      senin-vue: '*'
      video.js: '*'
      vue: 3.5.12
      vue: '*'
      vue-component-type-helpers: ^2.1.6
    dependencies:
      '@bole-core/core': 1.0.2(@ywwlmm/openapi@0.0.4)(ali-oss@6.21.0)(axios@1.7.7)(dayjs@1.11.6)(element-plus@2.8.4)(file-saver@2.0.5)(jszip@3.10.1)(lodash@4.17.21)(senior-request@1.0.3)(vue-router@4.4.5)(vue@3.5.12)(xlsx-style@0.8.13)(xlsx@0.18.5)
@@ -4929,7 +4946,7 @@
      jszip: '*'
      lodash: '*'
      senior-request: '*'
      vue: 3.5.12
      vue: '*'
      vue-router: '*'
      xlsx: '*'
      xlsx-style: '*'
@@ -4962,7 +4979,7 @@
      path-browserify: '*'
      path-to-regexp: '*'
      pinia: '*'
      vue: 3.5.12
      vue: '*'
      vue-router: '*'
    dependencies:
      '@bole-core/core': 1.0.2(@ywwlmm/openapi@0.0.4)(ali-oss@6.21.0)(axios@1.7.7)(dayjs@1.11.6)(element-plus@2.8.4)(file-saver@2.0.5)(jszip@3.10.1)(lodash@4.17.21)(senior-request@1.0.3)(vue-router@4.4.5)(vue@3.5.12)(xlsx-style@0.8.13)(xlsx@0.18.5)
@@ -5180,7 +5197,7 @@
    resolution: {integrity: sha512-33Cfr0zjbc3Dd8d5b1IgzXRAgXH0c2Gv19VI4snS25V/x9Z41eg769tC+Us1x+vqgQQhgD5YUjLnkpkrQfeMSw==}
    peerDependencies:
      qrcode: ^1.5.0
      vue: 3.5.12
      vue: ^3.0.0
    dependencies:
      qrcode: 1.5.4
      vue: 3.5.12(typescript@4.6.4)
@@ -5856,7 +5873,7 @@
  /@element-plus/icons-vue@2.3.1(vue@3.5.12):
    resolution: {integrity: sha512-XxVUZv48RZAd87ucGS48jPf6pKu0yV5UCg9f4FFwtrYxXOwWuVJo6wOvSLKEoMQKjv8GsX/mhP6UsC1lRwbUWg==}
    peerDependencies:
      vue: 3.5.12
      vue: ^3.2.0
    dependencies:
      vue: 3.5.12(typescript@4.6.4)
    dev: false
@@ -6480,7 +6497,7 @@
  /@iconify/vue@4.0.0(vue@3.5.12):
    resolution: {integrity: sha512-73z81Yf2HISfehu3qvN9GqL1OnUO7wEMKkiFwVGJ2pqAdGCR8FrVylhRhka+6U+gFLlng0ynnT20svk3jJYwow==}
    peerDependencies:
      vue: 3.5.12
      vue: '>=3'
    dependencies:
      '@iconify/types': 2.0.0
      vue: 3.5.12(typescript@4.6.4)
@@ -7485,7 +7502,7 @@
    resolution: {integrity: sha512-+n8vVZAu92MUX6VEf6gO73Iz3JThjksdb6aSarvciCSydlWWdlQqZwYIGMTG4zOwDfCoQ3HfLa36zVaIJLSn3g==}
    peerDependencies:
      unplugin-vue-components: '>=0.25.1'
      vue: 3.5.12
      vue: ^3.0.0
    peerDependenciesMeta:
      unplugin-vue-components:
        optional: true
@@ -8300,7 +8317,7 @@
    resolution: {integrity: sha512-QzCQ94g2oZQcEfI4nfqa6Qr3aFXtXiEH17Jho+QFl73c7epqsWNcyP3ovF1fgJz5jEOE5OYtwgkoaRKIRaSigg==}
    peerDependencies:
      '@vue/composition-api': ^1.1.2
      vue: 3.5.12
      vue: ^2.5.0 || ^3.0.0
    peerDependenciesMeta:
      '@vue/composition-api':
        optional: true
@@ -8626,7 +8643,7 @@
  /@tarojs/plugin-framework-vue3@3.6.20(postcss@8.4.19)(vue@3.5.12):
    resolution: {integrity: sha512-F3Cw3BIP/4rv0Whr6oYEiSzJKl2Xvx321FiSDFk/E+IOu2h4Q1mqBJSpQe3ZVdJjvBu/KLUyVm27mAz8hxftNw==}
    peerDependencies:
      vue: 3.5.12
      vue: ^3.0.0
    dependencies:
      '@tarojs/helper': 3.6.20
      '@tarojs/runner-utils': 3.6.20
@@ -9268,8 +9285,8 @@
      - react-native
    dev: false
  /@tencentcloud/chat-uikit-engine@2.4.0(react-native@0.78.0)(react@19.0.0):
    resolution: {integrity: sha512-zE+bygEROaqgeMXXO+X2+2x8JH55mnb9c1sYQVQ507FlFT0maHxEQPOq8/EZBWowUDDlYoWbHh1EBAXEAI3dgA==}
  /@tencentcloud/chat-uikit-engine@2.4.2(react-native@0.78.0)(react@19.0.0):
    resolution: {integrity: sha512-L5rr1mO98S1Uz5IndJ2QdGv++5zbSUTnGSz4x3rKx5lWXlcJzSo1RY9DxYcWTKQKos9bG2d4JIIeg4DlfGb+Pg==}
    dependencies:
      '@tencentcloud/chat': 3.5.2(react-native@0.78.0)(react@19.0.0)
      tim-profanity-filter-plugin: 1.1.0
@@ -9295,7 +9312,7 @@
      '@tencentcloud/call-uikit-vue': 4.0.2(react-native@0.78.0)(react@19.0.0)
      '@tencentcloud/call-uikit-vue2': 4.0.2(react-native@0.78.0)(react@19.0.0)
      '@tencentcloud/call-uikit-vue2.6': 4.0.2(react-native@0.78.0)(react@19.0.0)(vue@3.5.12)
      '@tencentcloud/chat-uikit-engine': 2.4.0(react-native@0.78.0)(react@19.0.0)
      '@tencentcloud/chat-uikit-engine': 2.4.2(react-native@0.78.0)(react@19.0.0)
      '@tencentcloud/tui-core': 2.4.0(react-native@0.78.0)(react@19.0.0)
      '@tencentcloud/tui-customer-service-plugin': 2.2.6(@tencentcloud/tui-core@2.4.0)(vue@3.5.12)
      '@tiptap/core': 2.11.5(@tiptap/pm@2.11.5)
@@ -9365,7 +9382,7 @@
    peerDependencies:
      '@tencentcloud/tui-core': latest
      '@vue/composition-api': ^1.0.0-rc.1
      vue: 3.5.12
      vue: ^2.0.0 || >=3.0.0
    peerDependenciesMeta:
      '@vue/composition-api':
        optional: true
@@ -10627,7 +10644,7 @@
  /@vant/use@1.6.0(vue@3.5.12):
    resolution: {integrity: sha512-PHHxeAASgiOpSmMjceweIrv2AxDZIkWXyaczksMoWvKV2YAYEhoizRuk/xFnKF+emUIi46TsQ+rvlm/t2BBCfA==}
    peerDependencies:
      vue: 3.5.12
      vue: ^3.0.0
    dependencies:
      vue: 3.5.12(typescript@4.6.4)
    dev: false
@@ -10641,7 +10658,7 @@
    peerDependencies:
      '@types/video.js': 7.x
      video.js: 7.x
      vue: 3.5.12
      vue: 3.x
    dependencies:
      '@types/video.js': 7.3.47
      video.js: 7.20.3
@@ -10707,7 +10724,7 @@
    engines: {node: ^18.0.0 || >=20.0.0}
    peerDependencies:
      vite: ^5.0.0
      vue: 3.5.12
      vue: ^3.0.0
    dependencies:
      '@babel/core': 7.25.2
      '@babel/plugin-transform-typescript': 7.25.2(@babel/core@7.25.2)
@@ -10723,7 +10740,7 @@
    engines: {node: ^18.0.0 || >=20.0.0}
    peerDependencies:
      vite: ^5.0.0
      vue: 3.5.12
      vue: ^3.2.25
    dependencies:
      vite: 5.4.8(@types/node@18.7.18)(sass@1.79.1)(terser@5.34.1)
      vue: 3.5.12(typescript@4.6.4)
@@ -10919,7 +10936,7 @@
  /@vue/composition-api@1.7.2(vue@3.5.12):
    resolution: {integrity: sha512-M8jm9J/laYrYT02665HkZ5l2fWTK4dcVg3BsDHm/pfz+MjDYwX+9FUaZyGwEyXEDonQYRCo0H7aLgdklcIELjw==}
    peerDependencies:
      vue: 3.5.12
      vue: '>= 2.5 < 2.7'
    dependencies:
      vue: 3.5.12(typescript@4.6.4)
    dev: false
@@ -11090,7 +11107,7 @@
    resolution: {integrity: sha512-B/Mdj9TK1peFyWaPof+Zf/mP9XuGAngaJZBwPaXBvU3aCTZlx3ltlrFFFyMV4iGBwsjSCeUCgZrtkEj9dS2Y3Q==}
    peerDependencies:
      '@vue/composition-api': ^1.1.0
      vue: 3.5.12
      vue: ^2.6.0 || ^3.2.0
    peerDependenciesMeta:
      '@vue/composition-api':
        optional: true
@@ -11131,7 +11148,7 @@
    resolution: {integrity: sha512-cAZqXexLX6xo+H1N1Mv+wBSSqG4wB+BdjIuHQ50jwlelXCDxSi8gj0K/9nDS+aUZtWh6YMwS6UGCKg58jMVglA==}
    peerDependencies:
      '@vue/composition-api': ^1.4.1
      vue: 3.5.12
      vue: ^2.0.0 || >=3.0.0-rc.0
    peerDependenciesMeta:
      '@vue/composition-api':
        optional: true
@@ -11165,7 +11182,7 @@
    resolution: {integrity: sha512-wt+T30c4K6dGRMVqPddexEVLa28YwxW5OFIPmzUHICjphfAuBFTTdDoyqREZNDOFJZ44ARH1WWQNCUK8koJ+Ag==}
    peerDependencies:
      '@vue/composition-api': ^1.1.0
      vue: 3.5.12
      vue: ^2.6.0 || ^3.2.0
    peerDependenciesMeta:
      '@vue/composition-api':
        optional: true
@@ -11263,7 +11280,7 @@
    resolution: {integrity: sha512-Xkrdo590AhLHvzyR+U246t6T89nIWHz1weAgMuo8jEA2HS5RiUnsA4U6+iUGaQ2E5c8mYQaeNqzHQXUp9Okbiw==}
    peerDependencies:
      '@wangeditor-next/editor': '>=5.1.0'
      vue: 3.5.12
      vue: ^3.0.5
    dependencies:
      '@wangeditor-next/editor': 5.3.14
      vue: 3.5.12(typescript@4.6.4)
@@ -12215,6 +12232,16 @@
    resolution: {integrity: sha512-RE3mdQ7P3FRSe7eqCWoeQ/Z9QXrtniSjp1wUjt5nRC3WIpz5rSCve6o3fsZ2aCpJtrZjSZgjwXAoTO5k4tEI0w==}
    engines: {node: '>=4'}
    dev: false
  /axios@1.4.0:
    resolution: {integrity: sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==}
    dependencies:
      follow-redirects: 1.15.9
      form-data: 4.0.0
      proxy-from-env: 1.1.0
    transitivePeerDependencies:
      - debug
    dev: true
  /axios@1.7.7:
    resolution: {integrity: sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==}
@@ -15909,6 +15936,7 @@
      domelementtype: 2.3.0
      domhandler: 5.0.3
      entities: 4.5.0
    dev: true
  /dom-walk@0.1.2:
    resolution: {integrity: sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==}
@@ -15949,6 +15977,7 @@
    engines: {node: '>= 4'}
    dependencies:
      domelementtype: 2.3.0
    dev: true
  /domutils@1.7.0:
    resolution: {integrity: sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==}
@@ -15970,6 +15999,7 @@
      dom-serializer: 2.0.0
      domelementtype: 2.3.0
      domhandler: 5.0.3
    dev: true
  /dot-case@3.0.4:
    resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==}
@@ -16099,7 +16129,7 @@
  /element-plus@2.8.4(vue@3.5.12):
    resolution: {integrity: sha512-ZlVAdUOoJliv4kW3ntWnnSHMT+u/Os7mXJjk2xzOlqNeHaI2/ozlF+R58ZCEak8ZnDi6+5A2viWEYRsq64IuiA==}
    peerDependencies:
      vue: 3.5.12
      vue: ^3.2.0
    dependencies:
      '@ctrl/tinycolor': 3.4.1
      '@element-plus/icons-vue': 2.3.1(vue@3.5.12)
@@ -19157,6 +19187,7 @@
      domhandler: 5.0.3
      domutils: 3.1.0
      entities: 4.5.0
    dev: true
  /http-cache-semantics@3.8.1:
    resolution: {integrity: sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==}
@@ -20479,6 +20510,7 @@
  /js-tokens@8.0.3:
    resolution: {integrity: sha512-UfJMcSJc+SEXEl9lH/VLHSZbThQyLpw1vLO1Lb+j4RWDvG3N2f7yj3PVQA3cmkTBNldJ9eFnM+xEXxHIXrYiJw==}
    dev: true
  /js-tokens@9.0.0:
    resolution: {integrity: sha512-WriZw1luRMlmV3LGJaR6QOJjWwgLUTf89OwT2lUOyjX2dJGBwgmIkbcz+7WFZjrZM635JOIR517++e/67CP9dQ==}
@@ -23776,7 +23808,7 @@
    peerDependencies:
      '@vue/composition-api': ^1.4.0
      typescript: '>=4.4.4'
      vue: 3.5.12
      vue: ^2.6.14 || ^3.3.0
    peerDependenciesMeta:
      '@vue/composition-api':
        optional: true
@@ -23794,7 +23826,7 @@
    peerDependencies:
      '@vue/composition-api': ^1.4.0
      typescript: '>=4.4.4'
      vue: 3.5.12
      vue: ^2.6.14 || ^3.3.0
    peerDependenciesMeta:
      '@vue/composition-api':
        optional: true
@@ -24176,6 +24208,7 @@
      js-tokens: 8.0.3
      postcss: 8.4.47
      postcss-safe-parser: 6.0.0(postcss@8.4.47)
    dev: true
  /postcss-image-set-function@7.0.0(postcss@8.4.19):
    resolution: {integrity: sha512-QL7W7QNlZuzOwBTeXEmbVckNt1FSmhQtbMRvGGqqU4Nf4xk6KUEQhAoWuMzwbSv5jxiRiSZ5Tv7eiDB9U87znA==}
@@ -24220,7 +24253,7 @@
    dependencies:
      '@babel/core': 7.25.2
      postcss: 7.0.39
      postcss-syntax: 0.36.2(postcss-html@1.5.0)(postcss-scss@4.0.6)(postcss@8.4.19)
      postcss-syntax: 0.36.2(postcss-html@0.36.0)(postcss-jsx@0.36.4)(postcss-less@3.1.4)(postcss-markdown@0.36.0)(postcss-scss@2.1.1)(postcss@7.0.39)
    transitivePeerDependencies:
      - supports-color
    dev: false
@@ -24279,7 +24312,7 @@
      postcss-syntax: '>=0.36.0'
    dependencies:
      postcss: 7.0.39
      postcss-syntax: 0.36.2(postcss-html@1.5.0)(postcss-scss@4.0.6)(postcss@8.4.19)
      postcss-syntax: 0.36.2(postcss-html@0.36.0)(postcss-jsx@0.36.4)(postcss-less@3.1.4)(postcss-markdown@0.36.0)(postcss-scss@2.1.1)(postcss@7.0.39)
      remark: 10.0.1
      unist-util-find-all-after: 1.0.5
    dev: false
@@ -24714,6 +24747,7 @@
      postcss: ^8.3.3
    dependencies:
      postcss: 8.4.47
    dev: true
  /postcss-sass@0.3.5:
    resolution: {integrity: sha512-B5z2Kob4xBxFjcufFnhQ2HqJQ2y/Zs/ic5EZbCywCkxKd756Q40cIQ/veRDwSrw1BF6+4wUgmpm0sBASqVi65A==}
@@ -24743,6 +24777,7 @@
      postcss: ^8.4.19
    dependencies:
      postcss: 8.4.19
    dev: true
  /postcss-scss@4.0.6(postcss@8.4.47):
    resolution: {integrity: sha512-rLDPhJY4z/i4nVFZ27j9GqLxj1pwxE80eAzUNRMXtcpipFYIeowerzBgG3yJhMtObGEXidtIgbUpQ3eLDsf5OQ==}
@@ -24849,32 +24884,6 @@
      postcss-less: 3.1.4
      postcss-markdown: 0.36.0(postcss-syntax@0.36.2)(postcss@7.0.39)
      postcss-scss: 2.1.1
    dev: false
  /postcss-syntax@0.36.2(postcss-html@1.5.0)(postcss-scss@4.0.6)(postcss@8.4.19):
    resolution: {integrity: sha512-nBRg/i7E3SOHWxF3PpF5WnJM/jQ1YpY9000OaVXlAQj6Zp/kIqJxEDWIZ67tAd7NLuk7zqN4yqe9nc0oNAOs1w==}
    peerDependencies:
      postcss: '>=5.0.0'
      postcss-html: '*'
      postcss-jsx: '*'
      postcss-less: '*'
      postcss-markdown: '*'
      postcss-scss: '*'
    peerDependenciesMeta:
      postcss-html:
        optional: true
      postcss-jsx:
        optional: true
      postcss-less:
        optional: true
      postcss-markdown:
        optional: true
      postcss-scss:
        optional: true
    dependencies:
      postcss: 8.4.19
      postcss-html: 1.5.0
      postcss-scss: 4.0.6(postcss@8.4.19)
    dev: false
  /postcss-unique-selectors@5.1.1(postcss@8.4.47):
@@ -26728,7 +26737,7 @@
      file-saver: '*'
      lodash: '*'
      semver: '*'
      vue: 3.5.12
      vue: '*'
      xlsx: '*'
      xlsx-style: '*'
    dependencies:
@@ -26755,7 +26764,7 @@
      axios: '*'
      dayjs: '*'
      lodash: '*'
      vue: 3.5.12
      vue: '*'
    dependencies:
      '@nutui/icons-vue-taro': 0.0.9
      '@nutui/nutui-taro': 4.3.13(patch_hash=lbmiuhnkw3qnhgejnhbuepf6iq)(unplugin-vue-components@0.27.4)(vue@3.5.12)
@@ -26780,7 +26789,7 @@
      mitt: '*'
      semver: '*'
      senin-help: '*'
      vue: 3.5.12
      vue: '*'
    dependencies:
      '@tanstack/vue-query': 4.37.1(vue@3.5.12)
      axios: 1.7.7
@@ -28214,7 +28223,7 @@
      postcss-sass: 0.3.5
      postcss-scss: 2.1.1
      postcss-selector-parser: 3.1.2
      postcss-syntax: 0.36.2(postcss-html@1.5.0)(postcss-scss@4.0.6)(postcss@8.4.19)
      postcss-syntax: 0.36.2(postcss-html@0.36.0)(postcss-jsx@0.36.4)(postcss-less@3.1.4)(postcss-markdown@0.36.0)(postcss-scss@2.1.1)(postcss@7.0.39)
      postcss-value-parser: 3.3.1
      resolve-from: 4.0.0
      signal-exit: 3.0.7
@@ -29439,7 +29448,7 @@
    peerDependencies:
      '@babel/parser': ^7.15.8
      '@nuxt/kit': ^3.2.2
      vue: 3.5.12
      vue: 2 || 3
    peerDependenciesMeta:
      '@babel/parser':
        optional: true
@@ -29715,7 +29724,7 @@
  /vant@4.9.10(vue@3.5.12):
    resolution: {integrity: sha512-N+QwOuhDxrH2f6+kN05ot6DHBvaM0e1lcoXVvf12rad2KnlybPQ9gjm0d+R+Nz/zydZbe3Fz6bwTssHItri0sw==}
    peerDependencies:
      vue: 3.5.12
      vue: ^3.0.0
    dependencies:
      '@vant/popperjs': 1.3.0
      '@vant/use': 1.6.0(vue@3.5.12)
@@ -30065,7 +30074,7 @@
    requiresBuild: true
    peerDependencies:
      '@vue/composition-api': ^1.0.0-rc.1
      vue: 3.5.12
      vue: ^3.0.0-0 || ^2.6.0
    peerDependenciesMeta:
      '@vue/composition-api':
        optional: true
@@ -30080,7 +30089,7 @@
    requiresBuild: true
    peerDependencies:
      '@vue/composition-api': ^1.0.0-rc.1
      vue: 3.5.12
      vue: ^3.0.0-0 || ^2.6.0
    peerDependenciesMeta:
      '@vue/composition-api':
        optional: true
@@ -30226,7 +30235,7 @@
  /vue-router@4.4.5(vue@3.5.12):
    resolution: {integrity: sha512-4fKZygS8cH1yCyuabAXGUAsyi1b2/o/OKgu/RUb+znIYOxPRxdkytJEx+0wGcpBE1pX6vUgh5jwWOKRGvuA/7Q==}
    peerDependencies:
      vue: 3.5.12
      vue: ^3.2.0
    dependencies:
      '@vue/devtools-api': 6.6.4
      vue: 3.5.12(typescript@4.6.4)
@@ -30259,7 +30268,7 @@
    resolution: {integrity: sha512-3Wy6QcZl0VusCCHX3vYrWSILFlrOB2EQDoySnuYmASM5cUp1FivJGfkS5lp1CutDgyRb41g32r/1QCmiBj5i1Q==}
    engines: {node: '>=14.0.0'}
    peerDependencies:
      vue: 3.5.12
      vue: ^2.0.0 || ^3.0.0
    peerDependenciesMeta:
      vue:
        optional: true
@@ -31055,3 +31064,7 @@
  /zwitch@1.0.5:
    resolution: {integrity: sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==}
    dev: false
settings:
  autoInstallPeers: true
  excludeLinksFromLockfile: false