chore:增加名片删除按钮

This commit is contained in:
2026-10-19 16:58:04 +08:00
parent 8635f9795f
commit a2bf8d6c25
2 changed files with 73 additions and 0 deletions

View File

@@ -35,6 +35,7 @@ export const CARD_API_URL = {
CARD_RECOGNIZE: '/card/api/card/recognize',
CARD_RETRY: '/card/api/card/retry',
CARD_RECOGNIZE_BATCH: '/card/api/card/recognizeBatch',
CARD_DELETE: '/card/api/card/delete', // 删除自己的名片(软删, 2.11.91)
// === 跟进完成态 2.11.3 /card/api/card/* ===
CARD_FOLLOW_DONE: '/card/api/card/followDone',
@@ -208,6 +209,18 @@ const CardApi = {
Http.sendJson(Object.assign({ url: CARD_API_URL.CARD_FAVORITE }, p || {}));
},
/**
* 删除自己的名片(软删, 2.11.91)
* 文档: CARD_DELETE_API.md(POST /card/api/card/delete,token 自动带,不传 site_id)
* 通道: 与 cardClaim/cardFollowDone 同款 sendRequest(表单编码);只需 card_id 一个字段
* 交互: 调用前页面必须已做二次确认;成功后 toast「已删除」并刷新列表(接口不再返回该卡)
* 口径: 「卡片不存在」是故意模糊(他人/已删/不存在同一文案),前端统一按 message toast,不特殊处理
* @param {Object} p { data: { card_id }, success, fail }
*/
cardDelete(p) {
Http.sendRequest(Object.assign({ url: CARD_API_URL.CARD_DELETE }, p || {}));
},
/**
* 识别建卡
* @param {Object} p { media_path, media_type?, source_type?, success, fail }

View File

@@ -53,6 +53,7 @@
@tap.stop="toggleFavorite">{{ item.is_favorite == 1 ? '★' : '☆' }}</text>
<view v-if="followTab === 'due' && item.follow_up_done != 1" class="card-done-btn"
:data-index="index" @tap.stop="markDone">完成</view>
<view class="card-del-btn" :data-index="index" @tap.stop="deleteCard">删除</view>
<view class="card-arrow">›</view>
</view>
@@ -310,6 +311,50 @@ export default {
}
});
},
/**
* 删除名片(软删, 2.11.91, 与 CARD_DELETE_API.md 同步)
* 行级归属: 只能删自己名下卡; 删他人/已删/不存在统一后端报「卡片不存在」。
* 流程: 二次确认(danger 样式) → cardDelete → 成功 toast「已删除」并刷新列表
* (列表接口立即不再返回该卡, 刷新即移除, 无需手动 splice)。
* 失败口径同收口规范第 3 条: 统一 toast(message), 不刷新。
*/
deleteCard(payload) {
const item = this.resolveItem(payload);
if (!item) return;
const cardId = this.cardIdOf(item);
if (!cardId) {
uni.showToast({ title: '该名片缺少编号,无法删除', icon: 'none' });
return;
}
const name = item.name || '未命名名片';
uni.showModal({
title: '删除名片',
content: '删除后名片将立即失效,分享链接也会不可访问。确定删除「' + name + '」?',
confirmText: '删除',
confirmColor: '#e54d42',
success: m => {
if (!m.confirm) return;
uni.showLoading({ title: '删除中…' });
this.$cardApi.cardDelete({
data: { card_id: cardId },
success: res => {
uni.hideLoading();
if (res.code == 0) {
uni.showToast({ title: '已删除', icon: 'success' });
this.refresh();
} else {
// 「卡片不存在」模糊口径: 统一按 message 提示, 不特殊处理
this.handleApiError(res);
}
},
fail: () => {
uni.hideLoading();
uni.showToast({ title: '网络异常,请稍后重试', icon: 'none' });
}
});
}
});
},
// 空态: 查询我的建卡申请状态(2.11.15)
loadApplyStatus() {
this.$cardApi.applyStatus({
@@ -801,6 +846,21 @@ export default {
border-radius: 24rpx;
}
/* 删除名片按钮(2.11.91): danger 红, 与完成按钮同构的小药丸 */
.card-del-btn {
flex-shrink: 0;
margin-left: 16rpx;
padding: 8rpx 20rpx;
background-color: #fdeceb;
color: #e54d42;
font-size: 24rpx;
border-radius: 24rpx;
&:active {
background-color: #f9d6d3;
}
}
/* 首屏加载占位(替代"先闪空态") */
.first-loading {
text-align: center;