fix: formate code and test money
All checks were successful
构建并部署前端到测试环境 / build-and-deploy (push) Successful in 5m8s

This commit is contained in:
luo
2026-08-18 10:54:01 +08:00
parent 857d565f33
commit 93f67967c5
32 changed files with 183 additions and 112 deletions

View File

@@ -2,8 +2,7 @@
### Requirement: 旧资产操作审计日志入口
**Reason**: 旧资产操作审计日志交互已由当前审计调查能力替代,页面不再提供重复入口。
**Migration**: 需要审计调查的用户通过当前审计中心和资源审计时间线访问记录。
**Reason**: 旧资产操作审计日志交互已由当前审计调查能力替代,页面不再提供重复入口。 **Migration**: 需要审计调查的用户通过当前审计中心和资源审计时间线访问记录。
#### Scenario: 查看 IoT 卡、设备或资产信息

View File

@@ -32,11 +32,11 @@
- Decision: 业务列表创建导出任务按钮继续使用来源业务权限,默认建议如下。
- Rationale: 创建导出任务属于来源业务列表能力,不应因为拥有某个导出任务管理页面权限就获得业务列表导出入口。
| 入口 | 创建导出任务权限 | scene |
| --- | --- | --- |
| 设备管理 | `devices:export` | `device` |
| 入口 | 创建导出任务权限 | scene |
| ---------- | ----------------- | ---------- |
| 设备管理 | `devices:export` | `device` |
| IOT 卡管理 | `iot_card:export` | `iot_card` |
| 订单列表 | `orders:export` | `order` |
| 订单列表 | `orders:export` | `order` |
- Decision: 详情页可继续复用同一组件,但必须根据任务场景或来源页面使用对应场景的详情、下载、取消权限。
- Rationale: 详情页面本身也包含下载和取消按钮,若继续使用通用权限会绕过三个列表页面的按钮隔离要求。

View File

@@ -27,7 +27,7 @@ test('agent recharge rejection posts the rejection reason to the order rejection
code: 0,
data: {
methods: ['wechat', 'alipay'],
min_amount: 10000,
min_amount: 10,
max_amount: 100000000
}
})

View File

@@ -279,8 +279,8 @@
}
.package-config-field-label {
color: var(--el-text-color-secondary);
font-size: 13px;
color: var(--el-text-color-secondary);
white-space: nowrap;
}

View File

@@ -57,8 +57,8 @@
import { Close, Document, UploadFilled } from '@element-plus/icons-vue'
import type { UploadFile, UploadInstance, UploadRawFile } from 'element-plus'
import { StorageService } from '@/api/modules'
import type { RefundAttachment } from '@/types/api/refund'
import type { FilePurpose } from '@/api/modules/storage'
import type { RefundAttachment } from '@/types/api/refund'
import type { FilePurpose } from '@/api/modules/storage'
interface Props {
modelValue?: string[] | string
@@ -202,7 +202,10 @@
if (props.singleColumnCsv) {
const content = await file.text()
const rows = content.replace(/^\uFEFF/, '').split(/\r?\n/).filter(Boolean)
const rows = content
.replace(/^\uFEFF/, '')
.split(/\r?\n/)
.filter(Boolean)
if (props.maxCsvRows > 0 && Math.max(rows.length - 1, 0) > props.maxCsvRows) {
ElMessage.warning(`CSV 数据行不能超过 ${props.maxCsvRows}`)
removeUploadFile(uploadFile)
@@ -250,7 +253,7 @@
const uploadUrlRes = await StorageService.getUploadUrl({
file_name: file.name,
content_type: contentType,
purpose: props.purpose
purpose: props.purpose
})
if (uploadUrlRes.code !== 0) {

View File

@@ -928,8 +928,8 @@
.integration-hero__result {
display: grid;
justify-items: end;
gap: 5px;
justify-items: end;
text-align: right;
}
@@ -1008,8 +1008,8 @@
}
.integration-hero {
align-items: flex-start;
flex-direction: column;
align-items: flex-start;
}
.integration-hero__result {

View File

@@ -65,10 +65,7 @@
</div>
</div>
<!-- 通知 -->
<div
class="btn-box notice-btn"
@click.stop="showNotice = !showNotice"
>
<div class="btn-box notice-btn" @click.stop="showNotice = !showNotice">
<div class="btn notice-button">
<i class="iconfont-sys">&#xe6c2;</i>
<span v-if="unreadCount > 0" class="notice-count">{{ formattedUnreadCount }}</span>

View File

@@ -8,8 +8,8 @@ export {}
declare global {
const EffectScope: typeof import('vue')['EffectScope']
const ElButton: (typeof import('element-plus/es'))['ElButton']
const ElMessage: typeof import('element-plus/es')['ElMessage']
const ElMessageBox: typeof import('element-plus/es')['ElMessageBox']
const ElMessage: (typeof import('element-plus/es'))['ElMessage']
const ElMessageBox: (typeof import('element-plus/es'))['ElMessageBox']
const acceptHMRUpdate: typeof import('pinia')['acceptHMRUpdate']
const asyncComputed: typeof import('@vueuse/core')['asyncComputed']
const autoResetRef: typeof import('@vueuse/core')['autoResetRef']

View File

@@ -1,6 +1,13 @@
import axios from 'axios'
export type ApiErrorKind = 'auth' | 'forbidden' | 'validation' | 'conflict' | 'timeout' | 'server' | 'unknown'
export type ApiErrorKind =
| 'auth'
| 'forbidden'
| 'validation'
| 'conflict'
| 'timeout'
| 'server'
| 'unknown'
export interface NormalizedApiError {
kind: ApiErrorKind
@@ -20,12 +27,59 @@ export const normalizeApiError = (error: unknown): NormalizedApiError => {
const timeout = axios.isAxiosError(error) && error.code === 'ECONNABORTED'
if (timeout) {
return { kind: 'timeout', status, code, message: '请求超时,结果可能未知,请刷新确认', unknownResult: true }
return {
kind: 'timeout',
status,
code,
message: '请求超时,结果可能未知,请刷新确认',
unknownResult: true
}
}
if (status === 401 || code === 401)
return {
kind: 'auth',
status,
code,
message: '登录状态已失效,请重新登录',
unknownResult: false
}
if (status === 403)
return {
kind: 'forbidden',
status,
code,
message: '没有执行此操作的权限',
unknownResult: false
}
if (status === 400)
return {
kind: 'validation',
status,
code,
message: backendMessage || '请求参数或业务条件不符合要求',
unknownResult: false
}
if (status === 409)
return {
kind: 'conflict',
status,
code,
message: backendMessage || '数据已发生变化,请刷新后重试',
unknownResult: false
}
if (status && status >= 500)
return {
kind: 'server',
status,
code,
message: '服务器处理失败,请稍后重试',
unknownResult: false
}
return {
kind: 'unknown',
status,
code,
message: backendMessage || '操作失败,请稍后重试',
unknownResult: false
}
if (status === 401 || code === 401) return { kind: 'auth', status, code, message: '登录状态已失效,请重新登录', unknownResult: false }
if (status === 403) return { kind: 'forbidden', status, code, message: '没有执行此操作的权限', unknownResult: false }
if (status === 400) return { kind: 'validation', status, code, message: backendMessage || '请求参数或业务条件不符合要求', unknownResult: false }
if (status === 409) return { kind: 'conflict', status, code, message: backendMessage || '数据已发生变化,请刷新后重试', unknownResult: false }
if (status && status >= 500) return { kind: 'server', status, code, message: '服务器处理失败,请稍后重试', unknownResult: false }
return { kind: 'unknown', status, code, message: backendMessage || '操作失败,请稍后重试', unknownResult: false }
}

View File

@@ -17,7 +17,9 @@ export const getApprovalStatusText = (summary: ApprovalSummary): string => {
summary.approval_provider === 'wecom' ||
summary.approval_instance_id
) {
return summary.approval_status_name || approvalStatusNames[Number(summary.approval_status)] || '-'
return (
summary.approval_status_name || approvalStatusNames[Number(summary.approval_status)] || '-'
)
}
return '-'
}
@@ -27,7 +29,8 @@ export const getCurrentApproverSummaryText = (summary: ApprovalSummary): string
summary.approval_source !== 'wecom' &&
summary.approval_provider !== 'wecom' &&
!summary.approval_instance_id
) return '-'
)
return '-'
return summary.current_approver_summary || '-'
}

View File

@@ -25,7 +25,10 @@ export const getPaymentMerchantId = (
}
export const getPaymentNotifyUrl = (
config: Pick<PaymentSettings, 'provider_type' | 'wx_notify_url' | 'fy_notify_url' | 'ali_notify_url'>
config: Pick<
PaymentSettings,
'provider_type' | 'wx_notify_url' | 'fy_notify_url' | 'ali_notify_url'
>
): string => {
if (config.provider_type === 'wechat' || config.provider_type === 'wechat_v2') {
return config.wx_notify_url || '-'

View File

@@ -1,3 +1,4 @@
<!--suppress ALL -->
<template>
<ArtTableFullScreen>
<div class="account-page" id="table-full-screen">

View File

@@ -18,6 +18,7 @@
@refresh="handleRefresh"
>
<template #left>
<!--suppress VueUnrecognizedDirective -->
<ElButton @click="showDialog('add')" v-permission="'enterprise_customer:add'"
>新增企业客户</ElButton
>
@@ -807,7 +808,7 @@
dialogVisible.value = false
formEl.resetFields()
getTableData()
await getTableData()
} catch (error) {
console.error(error)
} finally {

View File

@@ -515,6 +515,7 @@
</ElButton>
<!--<ElButton type="danger" v-permission="'iot_info:handler_stop'" @click="handleManualDeactivate"> 手动停用 </ElButton>-->
<!-- 手动停用暂时不开放 -->
<!--suppress VueUnrecognizedDirective -->
<ElButton
v-if="canShowRealnamePolicy"
v-permission="'asset:card_realname_policy'"

View File

@@ -84,7 +84,7 @@
<div v-else v-loading="loading" class="wallet-table-wrapper">
<ElTable v-if="hasTransactions" :data="transactionList" class="wallet-table" border>
<ElTableColumn prop="reference_no" label="业务编号" show-overflow-tooltip>
<ElTableColumn prop="reference_no" label="业务编号" show-overflow-tooltip>
<template #default="scope">
<span v-if="scope.row.reference_no" class="reference-no-link">
{{ scope.row.reference_no }}
@@ -444,7 +444,6 @@
}
.wallet-table {
:deep(.el-table__header) {
th {
font-weight: 600;

View File

@@ -1828,9 +1828,9 @@
.exchange-field-error {
width: 100%;
margin-top: 4px;
color: var(--el-color-danger);
font-size: 12px;
line-height: 1.2;
color: var(--el-color-danger);
}
}
</style>

View File

@@ -310,8 +310,8 @@
max-width: 100%;
overflow: hidden;
text-overflow: ellipsis;
vertical-align: bottom;
white-space: nowrap;
vertical-align: bottom;
}
.task-error {

View File

@@ -623,9 +623,9 @@
.bulk-purchase-page {
.task-list-header {
display: flex;
gap: 12px;
align-items: center;
justify-content: space-between;
gap: 12px;
}
.task-list-toolbar {
@@ -670,10 +670,10 @@
margin-top: 16px;
}
@media (max-width: 768px) {
@media (width <= 768px) {
.task-list-header {
align-items: flex-start;
flex-direction: column;
align-items: flex-start;
}
.task-list-toolbar {

View File

@@ -546,16 +546,16 @@
.device-batch-allocation-page {
.task-list-header {
display: flex;
gap: 16px;
align-items: center;
justify-content: space-between;
gap: 16px;
}
.task-list-toolbar {
display: flex;
flex-wrap: wrap;
justify-content: flex-end;
gap: 10px;
justify-content: flex-end;
}
.pagination-wrapper {
@@ -566,14 +566,14 @@
.drawer-footer {
display: flex;
justify-content: flex-end;
gap: 12px;
justify-content: flex-end;
}
@media (max-width: 900px) {
@media (width <= 900px) {
.task-list-header {
align-items: flex-start;
flex-direction: column;
align-items: flex-start;
}
.task-list-toolbar {

View File

@@ -620,8 +620,8 @@
.device-task-page {
.task-polling-error {
display: flex;
align-items: center;
gap: 12px;
align-items: center;
margin-bottom: 12px;
}

View File

@@ -452,7 +452,7 @@
<style scoped>
.drawer-footer {
display: flex;
justify-content: flex-end;
gap: 12px;
justify-content: flex-end;
}
</style>

View File

@@ -355,8 +355,8 @@
.task-detail-page {
.detail-header {
display: flex;
align-items: center;
gap: 16px;
align-items: center;
padding-bottom: 16px;
.detail-title {

View File

@@ -329,8 +329,8 @@
.resource-snapshot-diff {
display: grid;
grid-column: 1 / -1;
grid-template-columns: repeat(2, minmax(0, 1fr));
grid-column: 1 / -1;
gap: 16px;
}

View File

@@ -979,15 +979,15 @@
<style scoped lang="scss">
.commission-summary {
display: inline-flex;
align-items: center;
flex-wrap: wrap;
gap: 8px 14px;
align-items: center;
margin-left: 12px;
.commission-summary-item {
display: inline-flex;
align-items: center;
gap: 4px;
align-items: center;
padding: 5px 10px;
white-space: nowrap;
background: var(--el-color-primary-light-9);

View File

@@ -46,7 +46,6 @@
<!-- <TransactionList />-->
<!-- </el-col>-->
<!--</el-row>-->
</div>
</template>

View File

@@ -385,9 +385,11 @@
const qrContent = ref('')
const onlineRequestId = ref<string | null>(null)
const paymentStatusTimer = ref<ReturnType<typeof setInterval> | null>(null)
const ONLINE_MIN_RECHARGE_AMOUNT_FEN = 10
const ONLINE_MAX_RECHARGE_AMOUNT_FEN = 100000000
const paymentMethodsBounds = reactive({
min_amount: 10000,
max_amount: 100000000
min_amount: ONLINE_MIN_RECHARGE_AMOUNT_FEN,
max_amount: ONLINE_MAX_RECHARGE_AMOUNT_FEN
})
const paymentVoucherFileKeys = ref<string[]>([])
@@ -1013,8 +1015,9 @@
const res = await AgentRechargeService.getPaymentMethods()
if (res.code === 0) {
onlinePaymentMethods.value = Array.isArray(res.data?.methods) ? res.data.methods : []
paymentMethodsBounds.min_amount = Number(res.data?.min_amount) || 10000
paymentMethodsBounds.max_amount = Number(res.data?.max_amount) || 100000000
paymentMethodsBounds.min_amount = ONLINE_MIN_RECHARGE_AMOUNT_FEN
paymentMethodsBounds.max_amount =
Number(res.data?.max_amount) || ONLINE_MAX_RECHARGE_AMOUNT_FEN
createForm.amount = minimumAmountYuan.value
} else {
ElMessage.warning(res.msg || '当前暂无可用在线支付方式')
@@ -1366,16 +1369,16 @@
.online-recharge-empty-hint {
margin-top: 8px;
color: var(--el-color-danger);
font-size: 12px;
line-height: 1.5;
color: var(--el-color-danger);
}
.online-recharge-qr-dialog {
display: flex;
flex-direction: column;
align-items: center;
gap: 16px;
align-items: center;
&__code-surface {
display: flex;
@@ -1391,11 +1394,11 @@
&__summary {
display: flex;
flex-direction: column;
align-items: center;
gap: 8px;
align-items: center;
width: 100%;
color: var(--el-text-color-regular);
font-size: 14px;
color: var(--el-text-color-regular);
text-align: center;
}
@@ -1404,8 +1407,8 @@
}
&__loading {
color: var(--el-color-primary);
font-size: 12px;
color: var(--el-color-primary);
}
}
</style>

View File

@@ -2011,20 +2011,20 @@
}
.package-name {
grid-column: 1 / 3;
grid-row: 1;
grid-column: 1 / 3;
min-width: 0;
padding-bottom: 8px;
border-bottom: 1px solid var(--el-border-color-lighter);
font-size: 14px;
color: var(--el-text-color-regular);
border-bottom: 1px solid var(--el-border-color-lighter);
}
.cost-price-input-wrapper {
grid-column: 1;
grid-row: 2;
display: flex;
flex-direction: column;
grid-row: 2;
grid-column: 1;
gap: 6px;
align-items: flex-start;
width: 100%;
@@ -2041,20 +2041,20 @@
.min-cost-hint {
font-size: 12px;
color: var(--el-text-color-secondary);
line-height: 1.4;
color: var(--el-text-color-secondary);
}
}
.expiry-base-input-wrapper {
grid-column: 2;
grid-row: 2;
display: flex;
flex-direction: column;
grid-row: 2;
grid-column: 2;
gap: 8px;
min-width: 0;
width: 100%;
align-self: start;
width: 100%;
min-width: 0;
.expiry-base-label {
font-size: 13px;
@@ -2069,10 +2069,9 @@
}
:deep(.el-button) {
grid-column: 3;
grid-row: 1;
align-self: start;
justify-self: end;
grid-column: 3;
place-self: start end;
width: 56px;
padding-right: 8px;
padding-left: 8px;
@@ -2090,18 +2089,18 @@
grid-template-columns: 1fr;
.expiry-base-input-wrapper {
grid-column: 1 / -1;
grid-row: 3;
grid-column: 1 / -1;
}
.cost-price-input-wrapper {
grid-column: 1 / -1;
grid-row: 2;
grid-column: 1 / -1;
}
:deep(.el-button) {
grid-column: 3;
grid-row: 1;
grid-column: 3;
justify-self: start;
}
}

View File

@@ -207,8 +207,8 @@
<style scoped lang="scss">
.dialog-description {
margin-bottom: 20px;
color: var(--el-text-color-secondary);
font-size: 13px;
color: var(--el-text-color-secondary);
}
.application-form {
@@ -221,7 +221,7 @@
.dialog-footer {
display: flex;
justify-content: flex-end;
gap: 12px;
justify-content: flex-end;
}
</style>

View File

@@ -267,8 +267,8 @@
:deep(> .el-card__body) {
box-sizing: border-box;
min-height: 0;
overflow-y: auto;
padding-bottom: 24px;
overflow-y: auto;
}
}
@@ -303,10 +303,10 @@
:deep(.el-card__body) {
display: flex;
height: auto;
flex-direction: column;
justify-content: space-between;
gap: 10px;
justify-content: space-between;
height: auto;
overflow: visible;
}
}
@@ -318,41 +318,41 @@
}
.member-card__header {
justify-content: space-between;
gap: 12px;
justify-content: space-between;
}
.member-card__identity {
display: flex;
min-width: 0;
flex: 1;
align-items: center;
gap: 10px;
align-items: center;
min-width: 0;
}
.member-card__avatar {
flex-shrink: 0;
font-weight: 600;
color: var(--el-color-primary);
background: var(--el-color-primary-light-9);
font-weight: 600;
}
.member-card__name {
min-width: 0;
flex: 1;
min-width: 0;
overflow: hidden;
color: var(--el-text-color-primary);
font-size: 16px;
font-weight: 600;
color: var(--el-text-color-primary);
text-overflow: ellipsis;
white-space: nowrap;
}
.member-card__info {
justify-content: space-between;
gap: 16px;
color: var(--el-text-color-regular);
justify-content: space-between;
font-size: 13px;
color: var(--el-text-color-regular);
span:last-child {
min-width: 0;
@@ -381,19 +381,19 @@
margin-top: 20px;
}
@media (max-width: 1400px) {
@media (width <= 1400px) {
.member-grid {
grid-template-columns: repeat(3, minmax(0, 1fr));
}
}
@media (max-width: 1024px) {
@media (width <= 1024px) {
.member-grid {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
}
@media (max-width: 640px) {
@media (width <= 640px) {
.member-grid {
grid-template-columns: 1fr;
}

View File

@@ -502,9 +502,9 @@
.dialog-section {
padding: 18px 20px;
background: var(--el-fill-color-blank);
border: 1px solid var(--el-border-color-lighter);
border-radius: 8px;
background: var(--el-fill-color-blank);
}
.dialog-section + .dialog-section {
@@ -513,22 +513,22 @@
.dialog-section__header {
display: flex;
gap: 16px;
align-items: flex-start;
justify-content: space-between;
gap: 16px;
margin-bottom: 16px;
}
.dialog-section__title {
color: var(--el-text-color-primary);
font-size: 15px;
font-weight: 600;
color: var(--el-text-color-primary);
}
.dialog-section__description {
margin-top: 4px;
color: var(--el-text-color-secondary);
font-size: 12px;
color: var(--el-text-color-secondary);
}
.mapping-tip {
@@ -540,8 +540,8 @@
.template-name {
margin-top: 6px;
overflow: hidden;
color: var(--el-text-color-secondary);
font-size: 12px;
color: var(--el-text-color-secondary);
text-overflow: ellipsis;
white-space: nowrap;
}
@@ -556,19 +556,19 @@
.mapping-list {
display: flex;
max-height: 420px;
flex-direction: column;
gap: 12px;
overflow-y: auto;
max-height: 420px;
padding: 0 4px 4px;
overflow-y: auto;
}
.mapping-row {
padding: 14px;
border: 1px solid var(--el-border-color-lighter);
border-radius: 6px;
margin-top: 6px;
background: var(--el-fill-color-blank);
border: 1px solid var(--el-border-color-lighter);
border-radius: 6px;
}
.mapping-row__grid {
@@ -579,31 +579,31 @@
.mapping-field {
display: flex;
min-width: 0;
flex-direction: column;
gap: 6px;
min-width: 0;
}
.mapping-field__label {
color: var(--el-text-color-secondary);
font-size: 12px;
color: var(--el-text-color-secondary);
}
.dialog-footer {
display: flex;
justify-content: flex-end;
gap: 12px;
justify-content: flex-end;
}
@media (max-width: 768px) {
@media (width <= 768px) {
.dialog-section {
padding: 14px;
}
.dialog-section__header {
align-items: stretch;
flex-direction: column;
gap: 8px;
align-items: stretch;
}
.mapping-tip {
@@ -617,13 +617,13 @@
}
}
@media (max-width: 1200px) {
@media (width <= 1200px) {
.mapping-row__grid {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
}
@media (max-width: 768px) {
@media (width <= 768px) {
:deep(.wecom-scene-dialog) {
width: calc(100vw - 32px) !important;
}

View File

@@ -16,20 +16,30 @@
<ElDescriptionsItem label="店铺名称">{{ shop.shop_name || '-' }}</ElDescriptionsItem>
<ElDescriptionsItem label="店铺编号">{{ shop.shop_code || '-' }}</ElDescriptionsItem>
<ElDescriptionsItem label="店铺层级">{{ shop.level }}</ElDescriptionsItem>
<ElDescriptionsItem label="上级店铺">{{ shop.parent_shop_name || '-' }}</ElDescriptionsItem>
<ElDescriptionsItem label="上级店铺">{{
shop.parent_shop_name || '-'
}}</ElDescriptionsItem>
<ElDescriptionsItem label="联系人">{{ shop.contact_name || '-' }}</ElDescriptionsItem>
<ElDescriptionsItem label="联系电话">{{ shop.contact_phone || '-' }}</ElDescriptionsItem>
<ElDescriptionsItem label="平台业务员">
{{ formatBusinessOwner(shop) }}
</ElDescriptionsItem>
<ElDescriptionsItem label="业务员通知状态">
{{ shop.business_owner_account_id ? (shop.business_owner_available ? '可用' : '已停用') : '-' }}
{{
shop.business_owner_account_id
? shop.business_owner_available
? '可用'
: '已停用'
: '-'
}}
</ElDescriptionsItem>
<ElDescriptionsItem label="省份">{{ shop.province || '-' }}</ElDescriptionsItem>
<ElDescriptionsItem label="城市">{{ shop.city || '-' }}</ElDescriptionsItem>
<ElDescriptionsItem label="区县">{{ shop.district || '-' }}</ElDescriptionsItem>
<ElDescriptionsItem label="详细地址">{{ shop.address || '-' }}</ElDescriptionsItem>
<ElDescriptionsItem label="状态">{{ shop.status_name || shop.status }}</ElDescriptionsItem>
<ElDescriptionsItem label="状态">{{
shop.status_name || shop.status
}}</ElDescriptionsItem>
<ElDescriptionsItem label="创建时间">{{ shop.created_at || '-' }}</ElDescriptionsItem>
<ElDescriptionsItem label="更新时间">{{ shop.updated_at || '-' }}</ElDescriptionsItem>
</ElDescriptions>

View File

@@ -88,7 +88,6 @@
/>
</ElFormItem>
<ElFormItem label="默认信用额度">
<div class="credit-form-unit">单位</div>
<ElInputNumber
v-model="form.credit_limit_yuan"
:disabled="!form.credit_enabled"
@@ -101,7 +100,7 @@
:formatter="formatCreditInput"
:parser="parseCreditInput"
/>
<div class="credit-form-tip">修改后不会影响已有店铺</div>
<div class="credit-form-tip">单位修改后不会影响已有店铺</div>
</ElFormItem>
</template>
</ElForm>