diff --git a/src/api/lb-buy-account.js b/src/api/lb-buy-account.js index be80002..635ab43 100644 --- a/src/api/lb-buy-account.js +++ b/src/api/lb-buy-account.js @@ -40,3 +40,13 @@ export function rushBuyLbBuyAccount(data) { timeout: 120000 }) } + +/** 模拟指定租户所有用户抢单 */ +export function rushBuyAllLbBuyAccount(params) { + return request({ + url: '/lbBuyAccount/simulate-rush-buy_all', + method: 'post', + params, + timeout: 120000 + }) +} diff --git a/src/api/lb-purchase-apply.js b/src/api/lb-purchase-apply.js index 359e3a4..4deb5f5 100644 --- a/src/api/lb-purchase-apply.js +++ b/src/api/lb-purchase-apply.js @@ -118,3 +118,25 @@ export function updateHxrAdminUserVipByUserIds(data) { skipResponseNormalize: true }) } + +/** 按用户 ID 列表批量修改「是否可寄卖 / 用户状态」(逐条调用第三方管理端,可能较慢) */ +export function updateHxrAdminUserResellStatusByUserIds(data) { + return request({ + url: '/lbPurchaseApply/updateHxrAdminUserResellStatusByUserIds', + method: 'post', + data, + timeout: 120000, + skipResponseNormalize: true + }) +} + +/** 按 member_info 全部用户批量修改「是否可寄卖 / 用户状态」(不接收 id 列表,逐条调用第三方管理端,可能较慢) */ +export function updateHxrAdminUserResellStatusForAllMembers(data) { + return request({ + url: '/lbPurchaseApply/updateHxrAdminUserResellStatusForAllMembers', + method: 'post', + data, + timeout: 120000, + skipResponseNormalize: true + }) +} diff --git a/src/api/member-info.js b/src/api/member-info.js new file mode 100644 index 0000000..7f0c161 --- /dev/null +++ b/src/api/member-info.js @@ -0,0 +1,36 @@ +import request from '@/utils/request' + +/** 会员信息分页查询(member_info) */ +export function getMemberInfoList(params) { + return request({ + url: '/memberInfo/list', + method: 'get', + params + }) +} + +/** 新增会员信息 */ +export function addMemberInfo(data) { + return request({ + url: '/memberInfo/add', + method: 'post', + data + }) +} + +/** 编辑会员信息(须含 id) */ +export function updateMemberInfo(data) { + return request({ + url: '/memberInfo/update', + method: 'put', + data + }) +} + +/** 删除会员信息 */ +export function deleteMemberInfo(id) { + return request({ + url: `/memberInfo/delete/${id}`, + method: 'delete' + }) +} diff --git a/src/views/lb-business/department-user/index.vue b/src/views/lb-business/department-user/index.vue index fa53946..131675f 100644 --- a/src/views/lb-business/department-user/index.vue +++ b/src/views/lb-business/department-user/index.vue @@ -168,6 +168,31 @@ > 取消勾选 + + 选中所有的子 + + + 修改状态 + + + 全部修正状态 + 已选 {{ urgeTreeCheckedUserIds.length }} 人 @@ -455,6 +480,94 @@ 确定 + + + + + + + + + 开启后批量修改「是否可以寄卖」 + + + + + + + + + + 开启后批量修改「用户状态」 + + + + + + + + + + + + + + + + + + + + 开启后批量修改「是否可以寄卖」 + + + + + + + + + + 开启后批量修改「用户状态」 + + + + + + + + + + + + + @@ -471,6 +584,7 @@ import { syncLbDepartmentUserFromLbUser, updateLbDepartmentUser } from '@/api/lb-department-user' +import { updateHxrAdminUserResellStatusByUserIds, updateHxrAdminUserResellStatusForAllMembers } from '@/api/lb-purchase-apply' import { getBusinessHeaders } from '@/utils/business-headers' function getDefaultUrgeTreeQueryParams() { @@ -496,6 +610,25 @@ export default { urgeTreeFilterText: '', urgeTreeCheckedUserIds: [], urgeTreeSyncingChecks: false, + urgeTreeStatusDialogVisible: false, + urgeTreeStatusSubmitLoading: false, + urgeTreeStatusSelectedUserIds: [], + urgeTreeStatusTenantIdDisplay: '', + urgeTreeStatusForm: { + isResellEnabled: false, + isResell: 1, + statusEnabled: false, + status: 1 + }, + urgeTreeAllStatusDialogVisible: false, + urgeTreeAllStatusSubmitLoading: false, + urgeTreeAllStatusTenantIdDisplay: '', + urgeTreeAllStatusForm: { + isResellEnabled: false, + isResell: 1, + statusEnabled: false, + status: 1 + }, urgeTreeQueryParams: getDefaultUrgeTreeQueryParams(), urgeTreeProps: { children: 'children', @@ -842,6 +975,60 @@ export default { this.urgeTreeSyncingChecks = false }) }, + buildUrgeTreeNodeIndex(nodes, map = {}) { + if (!nodes || !nodes.length) return map + nodes.forEach((node) => { + if (node.userId != null && node.userId !== '') { + map[this.normalizeUrgeTreeUserId(node.userId)] = node + } + if (node.children && node.children.length) { + this.buildUrgeTreeNodeIndex(node.children, map) + } + }) + return map + }, + collectUrgeTreeDescendantUserIds(node, result = []) { + const children = node && node.children + if (!children || !children.length) return result + children.forEach((child) => { + if (child.userId != null && child.userId !== '') { + result.push(child.userId) + } + this.collectUrgeTreeDescendantUserIds(child, result) + }) + return result + }, + handleUrgeTreeSelectChildren() { + const tree = this.$refs.urgeTree + if (!tree) return + this.syncUrgeTreeCheckedFromTree() + const checkedKeys = tree.getCheckedKeys() + if (!checkedKeys.length) { + this.$message.warning('请先勾选节点') + return + } + const nodeIndex = this.buildUrgeTreeNodeIndex(this.urgeTreeData) + const descendantIds = [] + checkedKeys.forEach((key) => { + const node = nodeIndex[this.normalizeUrgeTreeUserId(key)] + if (node) { + this.collectUrgeTreeDescendantUserIds(node, descendantIds) + } + }) + const mergedKeys = [...new Set([...checkedKeys, ...descendantIds])] + this.urgeTreeSyncingChecks = true + tree.setCheckedKeys(mergedKeys) + this.syncUrgeTreeCheckedFromTree() + this.$nextTick(() => { + this.urgeTreeSyncingChecks = false + }) + const addedCount = mergedKeys.length - checkedKeys.length + if (addedCount > 0) { + this.$message.success(`已选中全部下级,新增 ${addedCount} 人,共 ${mergedKeys.length} 人`) + } else { + this.$message.info('所选节点没有可追加的下级节点') + } + }, handleUrgeTreeExport() { const tenantId = this.getTenantIdFromBusinessHeaders() if (!tenantId) { @@ -877,6 +1064,165 @@ export default { this.urgeTreeExportLoading = false }) }, + getDefaultUrgeTreeStatusForm() { + return { + isResellEnabled: false, + isResell: 1, + statusEnabled: false, + status: 1 + } + }, + openUrgeTreeStatusDialog() { + this.syncUrgeTreeCheckedFromTree() + const userIds = [...new Set( + this.urgeTreeCheckedUserIds.filter((id) => id !== '' && id != null) + )] + if (!userIds.length) { + this.$message.warning('请先勾选要修改状态的用户') + return + } + this.urgeTreeStatusSelectedUserIds = userIds + this.urgeTreeStatusTenantIdDisplay = this.getTenantIdFromBusinessHeaders() + this.urgeTreeStatusForm = this.getDefaultUrgeTreeStatusForm() + this.urgeTreeStatusDialogVisible = true + }, + resetUrgeTreeStatusDialog() { + this.urgeTreeStatusSubmitLoading = false + this.urgeTreeStatusSelectedUserIds = [] + this.urgeTreeStatusTenantIdDisplay = '' + this.urgeTreeStatusForm = this.getDefaultUrgeTreeStatusForm() + }, + handleConfirmUrgeTreeStatus() { + const tenantId = this.getTenantIdFromBusinessHeaders() + if (!tenantId) { + this.$message.error('未获取到租户ID,请先登录或配置业务请求头中的租户') + return + } + const userIds = (this.urgeTreeStatusSelectedUserIds || []) + .map((id) => Number(id)) + .filter((id) => !Number.isNaN(id)) + if (!userIds.length) { + this.$message.warning('未选择有效用户,请关闭后重新勾选') + return + } + const { isResellEnabled, isResell, statusEnabled, status } = this.urgeTreeStatusForm + if (!isResellEnabled && !statusEnabled) { + this.$message.warning('请至少开启一项要修改的状态(寄卖状态或用户状态)') + return + } + if (isResellEnabled && isResell !== 0 && isResell !== 1) { + this.$message.warning('请选择「是否可以寄卖」的值') + return + } + if (statusEnabled && status !== 0 && status !== 1) { + this.$message.warning('请选择「用户状态」的值') + return + } + const payload = { + tenantId, + userIds, + isResellEnabled: !!isResellEnabled, + statusEnabled: !!statusEnabled + } + if (isResellEnabled) { + payload.isResell = Number(isResell) + } + if (statusEnabled) { + payload.status = Number(status) + } + this.urgeTreeStatusSubmitLoading = true + updateHxrAdminUserResellStatusByUserIds(payload) + .then((res) => { + const ok = res && (res.success === true || res.code === 200 || res.code === 20000) + if (ok) { + this.$message.success((res && res.message) || '修改状态成功') + this.urgeTreeStatusDialogVisible = false + } else { + this.$message.error((res && (res.message || res.msg)) || '修改状态失败') + } + }) + .catch(() => { + // 错误提示由 @/utils/request 响应拦截器统一展示 + }) + .finally(() => { + this.urgeTreeStatusSubmitLoading = false + }) + }, + openUrgeTreeAllStatusDialog() { + this.urgeTreeAllStatusTenantIdDisplay = this.getTenantIdFromBusinessHeaders() + this.urgeTreeAllStatusForm = { + isResellEnabled: false, + isResell: 1, + statusEnabled: false, + status: 1 + } + this.urgeTreeAllStatusDialogVisible = true + }, + resetUrgeTreeAllStatusDialog() { + this.urgeTreeAllStatusSubmitLoading = false + this.urgeTreeAllStatusTenantIdDisplay = '' + this.urgeTreeAllStatusForm = { + isResellEnabled: false, + isResell: 1, + statusEnabled: false, + status: 1 + } + }, + handleConfirmUrgeTreeAllStatus() { + const tenantId = this.getTenantIdFromBusinessHeaders() + if (!tenantId) { + this.$message.error('未获取到租户ID,请先登录或配置业务请求头中的租户') + return + } + const { isResellEnabled, isResell, statusEnabled, status } = this.urgeTreeAllStatusForm + if (!isResellEnabled && !statusEnabled) { + this.$message.warning('请至少开启一项要修改的状态(寄卖状态或用户状态)') + return + } + if (isResellEnabled && isResell !== 0 && isResell !== 1) { + this.$message.warning('请选择「是否可以寄卖」的值') + return + } + if (statusEnabled && status !== 0 && status !== 1) { + this.$message.warning('请选择「用户状态」的值') + return + } + const payload = { + tenantId, + isResellEnabled: !!isResellEnabled, + statusEnabled: !!statusEnabled + } + if (isResellEnabled) { + payload.isResell = Number(isResell) + } + if (statusEnabled) { + payload.status = Number(status) + } + this.$confirm( + '确认对 member_info 全部会员批量修正状态吗?该操作可能耗时较长。', + '提示', + { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' } + ) + .then(() => { + this.urgeTreeAllStatusSubmitLoading = true + return updateHxrAdminUserResellStatusForAllMembers(payload) + }) + .then((res) => { + const ok = res && (res.success === true || res.code === 200 || res.code === 20000) + if (ok) { + this.$message.success((res && res.message) || '全部修正状态成功') + this.urgeTreeAllStatusDialogVisible = false + } else { + this.$message.error((res && (res.message || res.msg)) || '全部修正状态失败') + } + }) + .catch(() => { + // 错误提示由 @/utils/request 响应拦截器统一展示 + }) + .finally(() => { + this.urgeTreeAllStatusSubmitLoading = false + }) + }, buildSumTotalMoneyParams() { const tenantId = this.getTenantIdFromBusinessHeaders() const params = { tenantId } @@ -1222,6 +1568,12 @@ export default { color: #606266; font-size: 14px; } + + .urge-tree-status-tip { + margin-left: 12px; + color: #909399; + font-size: 13px; + } } .filter-container { diff --git a/src/views/lb-business/rush-order-account/index.vue b/src/views/lb-business/rush-order-account/index.vue index 151cca8..77dca80 100644 --- a/src/views/lb-business/rush-order-account/index.vue +++ b/src/views/lb-business/rush-order-account/index.vue @@ -52,6 +52,14 @@ 查询 + + 全部抢单 + @@ -145,7 +153,7 @@ /> - + @@ -314,6 +322,7 @@ import { addLbBuyAccount, deleteLbBuyAccount, getLbBuyAccountList, + rushBuyAllLbBuyAccount, rushBuyLbBuyAccount, updateLbBuyAccount } from '@/api/lb-buy-account' @@ -354,6 +363,8 @@ export default { submitLoading: false, syncLoading: false, rushBuyLoading: false, + rushBuyAllLoading: false, + rushBuyMode: 'selected', tenantLoading: false, rushBuyTimeDialogVisible: false, rushBuyTime: '', @@ -502,6 +513,17 @@ export default { this.$message.warning('所选账号缺少有效 ID') return } + this.rushBuyMode = 'selected' + this.rushBuyTime = this.getYesterdayStart() + this.rushBuyTimeDialogVisible = true + }, + handleRushBuyAll() { + const tenantId = (this.queryParams.tenantId || '').trim() || this.getTenantIdFromBusinessHeaders() + if (!tenantId) { + this.$message.error('未获取到租户ID,请先选择租户或配置业务请求头中的租户') + return + } + this.rushBuyMode = 'all' this.rushBuyTime = this.getYesterdayStart() this.rushBuyTimeDialogVisible = true }, @@ -510,6 +532,13 @@ export default { this.$message.warning('请选择货物包时间') return } + if (this.rushBuyMode === 'all') { + this.confirmRushBuyAll() + return + } + this.confirmRushBuySelected() + }, + confirmRushBuySelected() { const ids = this.multipleSelection.map((row) => row.id).filter(Boolean) const accountLabels = this.multipleSelection .map((row) => row.loginAccount || row.nickname || row.id) @@ -538,6 +567,34 @@ export default { this.rushBuyLoading = false }) }, + confirmRushBuyAll() { + const tenantId = (this.queryParams.tenantId || '').trim() || this.getTenantIdFromBusinessHeaders() + this.$confirm( + `确定对该租户所有用户发起全部抢单吗?\n租户ID:${tenantId}\n货物包开始时间:${this.rushBuyTime}`, + '全部抢单', + { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning' + } + ).then(() => { + this.rushBuyAllLoading = true + const params = { tenantId } + if (this.rushBuyTime) params.goodsBeginTime = this.rushBuyTime + return rushBuyAllLbBuyAccount(params) + }).then((res) => { + const isSuccess = res && (res.success === true || res.code === 200 || res.code === 20000) + if (!isSuccess) { + this.$message.error((res && res.message) || '全部抢单失败') + return + } + this.$message.success((res && res.message) || '全部抢单完成') + this.rushBuyTimeDialogVisible = false + this.fetchList() + }).catch(() => {}).finally(() => { + this.rushBuyAllLoading = false + }) + }, handleTenantChange(tenantId) { const option = this.tenantOptions.find((item) => item.value === tenantId) if (option && option.tenantName) { diff --git a/src/views/lb-business/user-manage/index.vue b/src/views/lb-business/user-manage/index.vue index ca68a53..52df812 100644 --- a/src/views/lb-business/user-manage/index.vue +++ b/src/views/lb-business/user-manage/index.vue @@ -1,419 +1,658 @@ @@ -427,6 +666,8 @@ import { updateLbUserCoupon } from '@/api/lb-user' import { getAllTenantList } from '@/api/tenant' +import { getMemberInfoList, updateMemberInfo } from '@/api/member-info' +import { updateHxrAdminUserResellStatusForAllMembers } from '@/api/lb-purchase-apply' import { getBusinessHeaders } from '@/utils/business-headers' function emptyForm() { @@ -480,6 +721,29 @@ function parseOptionalInt(value) { return Number.isFinite(n) ? n : undefined } +function emptyFixStatusForm() { + return { + id: '', + phone: '', + nickname: '', + status: undefined, + auditStatus: undefined, + canConsign: undefined, + isPriorityBuy: undefined, + availableOrderCount: undefined, + availableGoodsCount: undefined + } +} + +function emptyFixStatusAllForm() { + return { + isResellEnabled: false, + isResell: 1, + statusEnabled: false, + status: 1 + } +} + export default { name: 'LbUserManage', data() { @@ -535,7 +799,35 @@ export default { tenantId: [{ required: true, message: '请选择租户', trigger: 'change' }] }, tenantLoading: false, - tenantOptions: [] + tenantOptions: [], + activeTab: 'list', + fixStatusLoading: false, + fixStatusSubmitLoading: false, + fixStatusList: [], + fixStatusTotal: 0, + fixStatusSelectedRows: [], + fixStatusQueryParams: { + current: 1, + size: 10, + phone: '', + nickname: '', + inviteCode: '', + parentId: '', + userLevel: '', + status: undefined, + auditStatus: undefined, + canConsign: undefined + }, + fixStatusDialogVisible: false, + fixStatusForm: emptyFixStatusForm(), + fixStatusFormRules: { + status: [{ required: true, message: '请选择状态', trigger: 'change' }], + auditStatus: [{ required: true, message: '请选择审核状态', trigger: 'change' }] + }, + fixStatusAllDialogVisible: false, + fixStatusAllSubmitLoading: false, + fixStatusAllTenantIdDisplay: '', + fixStatusAllForm: emptyFixStatusAllForm() } }, created() { @@ -885,6 +1177,236 @@ export default { const minutes = String(date.getMinutes()).padStart(2, '0') const seconds = String(date.getSeconds()).padStart(2, '0') return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}` + }, + fetchFixStatusList() { + this.fixStatusLoading = true + getMemberInfoList(this.buildFixStatusListParams()) + .then((res) => { + if (res && (res.code === 20000 || res.code === 200 || res.success === true)) { + this.fixStatusList = Array.isArray(res.data) ? res.data : [] + this.fixStatusTotal = typeof res.total === 'number' + ? res.total + : (res.page && typeof res.page.total === 'number' ? res.page.total : this.fixStatusList.length) + } else { + this.fixStatusList = [] + this.fixStatusTotal = 0 + if (res && res.message) { + this.$message.error(res.message) + } + } + }) + .catch(() => { + this.fixStatusList = [] + this.fixStatusTotal = 0 + }) + .finally(() => { + this.fixStatusLoading = false + }) + }, + buildFixStatusListParams() { + const { + current, size, phone, nickname, inviteCode, parentId, userLevel, status, auditStatus, canConsign + } = this.fixStatusQueryParams + const params = { + current, + size, + phone: phone || undefined, + nickname: nickname || undefined, + inviteCode: inviteCode || undefined, + parentId: parentId || undefined, + userLevel: userLevel || undefined, + status: status === 0 || status === 1 ? status : undefined, + auditStatus: auditStatus === 0 || auditStatus === 1 ? auditStatus : undefined, + canConsign: canConsign === 0 || canConsign === 1 ? canConsign : undefined + } + Object.keys(params).forEach((key) => { + if (params[key] === undefined || params[key] === '') delete params[key] + }) + return params + }, + handleFixStatusQuery() { + this.fixStatusQueryParams.current = 1 + this.fetchFixStatusList() + }, + resetFixStatusQuery() { + this.fixStatusQueryParams = { + current: 1, + size: 10, + phone: '', + nickname: '', + inviteCode: '', + parentId: '', + userLevel: '', + status: undefined, + auditStatus: undefined, + canConsign: undefined + } + this.fetchFixStatusList() + }, + handleFixStatusSizeChange(size) { + this.fixStatusQueryParams.size = size + this.fetchFixStatusList() + }, + handleFixStatusCurrentChange(current) { + this.fixStatusQueryParams.current = current + this.fetchFixStatusList() + }, + openFixStatusEditDialog(row) { + this.fixStatusForm = { + id: row.id, + phone: row.phone || '', + nickname: row.nickname || '', + status: row.status !== undefined && row.status !== null ? Number(row.status) : undefined, + auditStatus: row.auditStatus !== undefined && row.auditStatus !== null + ? Number(row.auditStatus) + : undefined, + canConsign: row.canConsign !== undefined && row.canConsign !== null + ? Number(row.canConsign) + : undefined, + isPriorityBuy: row.isPriorityBuy !== undefined && row.isPriorityBuy !== null + ? Number(row.isPriorityBuy) + : undefined, + availableOrderCount: row.availableOrderCount !== undefined && row.availableOrderCount !== null + ? Number(row.availableOrderCount) + : undefined, + availableGoodsCount: row.availableGoodsCount !== undefined && row.availableGoodsCount !== null + ? Number(row.availableGoodsCount) + : undefined + } + this.fixStatusDialogVisible = true + this.$nextTick(() => { + this.$refs.fixStatusFormRef && this.$refs.fixStatusFormRef.clearValidate() + }) + }, + resetFixStatusForm() { + this.$refs.fixStatusFormRef && this.$refs.fixStatusFormRef.resetFields() + this.fixStatusForm = emptyFixStatusForm() + }, + submitFixStatus() { + this.$refs.fixStatusFormRef.validate((valid) => { + if (!valid) return + const payload = { + id: this.fixStatusForm.id + } + if (this.fixStatusForm.status === 0 || this.fixStatusForm.status === 1) { + payload.status = this.fixStatusForm.status + } + if (this.fixStatusForm.auditStatus === 0 || this.fixStatusForm.auditStatus === 1) { + payload.auditStatus = this.fixStatusForm.auditStatus + } + if (this.fixStatusForm.canConsign === 0 || this.fixStatusForm.canConsign === 1) { + payload.canConsign = this.fixStatusForm.canConsign + } + if (this.fixStatusForm.isPriorityBuy === 0 || this.fixStatusForm.isPriorityBuy === 1) { + payload.isPriorityBuy = this.fixStatusForm.isPriorityBuy + } + if (this.fixStatusForm.availableOrderCount !== undefined && this.fixStatusForm.availableOrderCount !== '') { + payload.availableOrderCount = Number(this.fixStatusForm.availableOrderCount) + } + if (this.fixStatusForm.availableGoodsCount !== undefined && this.fixStatusForm.availableGoodsCount !== '') { + payload.availableGoodsCount = Number(this.fixStatusForm.availableGoodsCount) + } + this.fixStatusSubmitLoading = true + updateMemberInfo(payload) + .then((res) => { + const isSuccess = res && (res.success === true || res.code === 200 || res.code === 20000) + if (!isSuccess) { + this.$message.error((res && res.message) || '修正状态失败') + return + } + this.$message.success((res && res.message) || '修正状态成功') + this.fixStatusDialogVisible = false + this.fetchFixStatusList() + }) + .finally(() => { + this.fixStatusSubmitLoading = false + }) + }) + }, + formatMemberStatus(status) { + if (status === 1) return '正常' + if (status === 0) return '禁用' + return status !== undefined && status !== null ? status : '-' + }, + formatAuditStatus(auditStatus) { + if (auditStatus === 1) return '已审核' + if (auditStatus === 0) return '未审核' + return auditStatus !== undefined && auditStatus !== null ? auditStatus : '-' + }, + formatMemberLevel(level) { + const map = { + normal: '普通用户', + referral: '推荐人', + shopkeeper: '店长', + second_shopkeeper: '二代店长' + } + return map[level] || level || '-' + }, + openFixStatusAllDialog() { + this.fixStatusAllTenantIdDisplay = this.getTenantIdFromBusinessHeaders() + this.fixStatusAllForm = emptyFixStatusAllForm() + this.fixStatusAllDialogVisible = true + }, + resetFixStatusAllForm() { + this.fixStatusAllSubmitLoading = false + this.fixStatusAllTenantIdDisplay = '' + this.fixStatusAllForm = emptyFixStatusAllForm() + }, + submitFixStatusAll() { + const tenantId = this.getTenantIdFromBusinessHeaders() + if (!tenantId) { + this.$message.error('未获取到租户ID,请先登录或配置业务请求头中的租户') + return + } + const { isResellEnabled, isResell, statusEnabled, status } = this.fixStatusAllForm + if (!isResellEnabled && !statusEnabled) { + this.$message.warning('请至少开启一项要修改的状态(寄卖状态或用户状态)') + return + } + if (isResellEnabled && isResell !== 0 && isResell !== 1) { + this.$message.warning('请选择「是否可以寄卖」的值') + return + } + if (statusEnabled && status !== 0 && status !== 1) { + this.$message.warning('请选择「用户状态」的值') + return + } + const payload = { + tenantId, + isResellEnabled: !!isResellEnabled, + statusEnabled: !!statusEnabled + } + if (isResellEnabled) { + payload.isResell = Number(isResell) + } + if (statusEnabled) { + payload.status = Number(status) + } + this.$confirm( + `确认对 member_info 全部会员批量修正状态吗?该操作可能耗时较长。`, + '提示', + { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' } + ) + .then(() => { + this.fixStatusAllSubmitLoading = true + return updateHxrAdminUserResellStatusForAllMembers(payload) + }) + .then((res) => { + const ok = res && (res.success === true || res.code === 200 || res.code === 20000) + if (ok) { + this.$message.success((res && res.message) || '修正状态成功') + this.fixStatusAllDialogVisible = false + this.fetchFixStatusList() + } else { + this.$message.error((res && (res.message || res.msg)) || '修正状态失败') + } + }) + .catch(() => { + // 错误提示由 @/utils/request 响应拦截器统一展示 + }) + .finally(() => { + this.fixStatusAllSubmitLoading = false + }) } } } @@ -898,6 +1420,18 @@ export default { .action-container { margin-bottom: 20px; + + .action-tip { + margin-left: 12px; + color: #909399; + font-size: 13px; + } + } + + .fix-status-all-tip { + margin-left: 12px; + color: #909399; + font-size: 13px; } .table-container {