@@ -158,6 +184,7 @@ export default {
total: 0,
loading: false,
exportLoading: false,
+ switchingExpertId: '',
fieldDetailVisible: false,
fieldDetailExpert: null,
fieldDetailRows: []
@@ -223,8 +250,12 @@ export default {
this.list = rawList.map((item) => {
const fieldArray = item.fields || [];
const fieldNames = fieldArray.map((f) => f.field).join(', ');
+ const unsubscribed = this.normalizeUnsubscribeValue(item);
return {
...item,
+ // 以 unsubscribed 作为页面主判断字段
+ unsubscribed,
+ unsubscribe: unsubscribed,
fieldDisplay: fieldNames
};
});
@@ -240,6 +271,57 @@ export default {
this.loading = false;
}
},
+ getExpertId(row) {
+ if (!row) return '';
+ return String(row.expert_id || row.id || row.user_id || row.uid || '').trim();
+ },
+ normalizeUnsubscribeValue(row) {
+ const raw =
+ row && row.unsubscribed != null
+ ? row.unsubscribed
+ : row && row.unsubscribe != null
+ ? row.unsubscribe
+ : row && row.is_unsubscribe != null
+ ? row.is_unsubscribe
+ : 0;
+ return Number(raw) === 1 ? 1 : 0;
+ },
+ getUnsubscribeValue(row) {
+ return this.normalizeUnsubscribeValue(row);
+ },
+ async handleUnsubscribeSwitch(row, checked) {
+ const expertId = this.getExpertId(row);
+ if (!expertId) {
+ this.$message.warning(this.$t('expertDatabase.unsubscribeMissingId'));
+ return;
+ }
+ const oldValue = this.getUnsubscribeValue(row);
+ // switch: ON(checked)=正常(0), OFF=退订(1)
+ const nextValue = checked ? 0 : 1;
+ if (oldValue === nextValue) return;
+ row.unsubscribed = nextValue;
+ row.unsubscribe = nextValue;
+ this.switchingExpertId = expertId;
+ try {
+ const apiUrl = nextValue === 1 ? 'api/expert_manage/unsubscribe' : 'api/expert_manage/resubscribe';
+ const res = await this.$api.post(apiUrl, {
+ expert_ids: String(expertId)
+ });
+ if (res && Number(res.code) === 0) {
+ this.$message.success(this.$t('expertDatabase.unsubscribeUpdateSuccess'));
+ } else {
+ row.unsubscribed = oldValue;
+ row.unsubscribe = oldValue;
+ this.$message.error((res && res.msg) || this.$t('expertDatabase.unsubscribeUpdateFailed'));
+ }
+ } catch (e) {
+ row.unsubscribed = oldValue;
+ row.unsubscribe = oldValue;
+ this.$message.error(this.$t('expertDatabase.unsubscribeUpdateFailed'));
+ } finally {
+ this.switchingExpertId = '';
+ }
+ },
handleSearch() {
this.query.pageIndex = 1;
this.fetchList();
@@ -390,5 +472,24 @@ export default {
color: #909399;
font-size: 13px;
}
+.unsubscribe-cell {
+ width: 100%;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ gap: 10px;
+ padding: 0 4px;
+}
+.unsubscribe-tag {
+ min-width: 56px;
+ height: 22px;
+ line-height: 20px;
+ text-align: center;
+ border-radius: 12px;
+ font-size: 12px;
+}
+.unsubscribe-switch {
+ flex-shrink: 0;
+}