fix: resolve admin acceptance defects

This commit is contained in:
richjohnrambo
2026-10-16 10:14:41 +08:00
parent c6ec45cccf
commit 2b3d855bcc
39 changed files with 1079 additions and 204 deletions
@@ -26,6 +26,10 @@
<n-spin :show="loading">
<n-descriptions v-if="detail.id" bordered :column="2">
<n-descriptions-item label="任务">{{ detail.taskTitle }}</n-descriptions-item>
<n-descriptions-item label="订单">
{{ detail.tradeOrderNo || `#${detail.tradeOrderId || '-'}` }}
</n-descriptions-item>
<n-descriptions-item label="商品">{{ detail.productName || '-' }}</n-descriptions-item>
<n-descriptions-item label="会员">
{{ detail.username }} / {{ detail.mobile }}
</n-descriptions-item>
@@ -35,6 +35,7 @@ export const columns = [
{ title: '用户名', key: 'username', width: 130 },
{ title: '手机号', key: 'mobile', width: 130 },
{ title: '任务标题', key: 'taskTitle', width: 180 },
{ title: '订单号', key: 'tradeOrderNo', width: 180, render: (r) => r.tradeOrderNo || `#${r.tradeOrderId || '-'}` },
{ title: '等级', key: 'levelName', width: 110 },
{
title: '佣金',
+23 -2
View File
@@ -13,6 +13,13 @@
><n-select
v-model:value="form.hallId"
:options="dict.getOptionUnRef('taskHallOption')" /></n-form-item-gi
><n-form-item-gi label="关联商品" path="productId"
><n-select
v-model:value="form.productId"
filterable
:loading="productLoading"
:options="productOptions"
placeholder="请选择关联商品" /></n-form-item-gi
><n-form-item-gi label="会员等级" :span="2" path="levelIds"
><n-select
v-model:value="form.levelIds"
@@ -61,7 +68,7 @@
import Editor from '@/components/Editor/editor.vue';
import UploadImage from '@/components/Upload/uploadImage.vue';
import { useDictStore } from '@/store/modules/dict';
import { TaskEdit, TaskView } from '@/api/productTask';
import { ProductList, TaskEdit, TaskView } from '@/api/productTask';
const emit = defineEmits(['reload']),
message = useMessage(),
dict = useDictStore(),
@@ -70,7 +77,9 @@
saving = ref(false),
formRef = ref(),
dateRange = ref<any>(),
commissionPercent = ref(0);
commissionPercent = ref(0),
productLoading = ref(false),
productOptions = ref<any[]>([]);
const init = () => ({
id: 0,
version: 0,
@@ -80,6 +89,7 @@
coverAttachmentId: 0,
coverUrl: '',
hallId: null,
productId: null,
levelIds: [],
commission: '0.00',
dailyLimit: 0,
@@ -93,6 +103,7 @@
description: { required: true, message: '请输入任务描述' },
coverUrl: { required: true, message: '请上传任务封面' },
hallId: { required: true, type: 'number', message: '请选择任务大厅' },
productId: { required: true, type: 'number', message: '请选择关联商品' },
levelIds: { required: true, type: 'array', min: 1, message: '请选择会员等级' },
commission: { required: true, message: '请输入固定佣金' },
};
@@ -101,6 +112,16 @@
commissionPercent.value = 0;
dateRange.value = null;
show.value = true;
productLoading.value = true;
try {
const result: any = await ProductList({ page: 1, perPage: 500 });
productOptions.value = (result.list || []).map((item) => ({
label: `${item.name}(${item.productNo})`,
value: item.id,
}));
} finally {
productLoading.value = false;
}
if (row) {
loading.value = true;
try {
+27 -1
View File
@@ -1 +1,27 @@
import{computed,h,ref}from'vue';import{NImage,NTag}from'naive-ui';import{FormSchema}from'@/components/Form';import{useDictStore}from'@/store/modules/dict';const dict=useDictStore();export const schemas=ref<FormSchema[]>([{field:'title',component:'NInput',label:'任务标题',componentProps:{clearable:true}},{field:'levelId',component:'NSelect',label:'会员类型',componentProps:{options:computed(()=>dict.getOptionUnRef('memberLevelOption')),clearable:true}},{field:'hallId',component:'NSelect',label:'任务大厅',componentProps:{options:computed(()=>dict.getOptionUnRef('taskHallOption')),clearable:true}},{field:'publishStatus',component:'NSelect',label:'状态',componentProps:{options:computed(()=>dict.getOptionUnRef('bizPublishStatus')),clearable:true}}]);const tag=(k,v)=>h(NTag,{type:dict.getType(k,v),bordered:false},()=>dict.getLabel(k,v)||'-');export const columns=[{title:'任务编号',key:'taskNo',width:180},{title:'封面',key:'coverUrl',width:100,render:r=>h(NImage,{src:r.coverUrl,width:64,height:64,objectFit:'cover'})},{title:'标题',key:'title',width:180},{title:'描述',key:'description',width:220,ellipsis:{tooltip:true}},{title:'任务大厅',key:'hallName',width:130},{title:'会员等级',key:'levelNames',width:180,render:r=>(r.levelNames||[]).join('、')},{title:'固定佣金',key:'commissionAmount',width:100,render:r=>`¥${((r.commissionAmount||0)/100).toFixed(2)}`},{title:'比例佣金',key:'commissionRate',width:100,render:r=>`${((r.commissionRate||0)/100).toFixed(2)}%`},{title:'状态',key:'publishStatus',width:100,render:r=>tag('bizPublishStatus',r.publishStatus)},{title:'创建时间',key:'createdAt',width:180}];export const loadOptions=()=>dict.loadOptions(['memberLevelOption','taskHallOption','bizPublishStatus']);
import { computed, h, ref } from 'vue';
import { NImage, NTag } from 'naive-ui';
import { FormSchema } from '@/components/Form';
import { useDictStore } from '@/store/modules/dict';
const dict = useDictStore();
export const schemas = ref<FormSchema[]>([
{ field: 'title', component: 'NInput', label: '任务标题', componentProps: { clearable: true } },
{ field: 'levelId', component: 'NSelect', label: '会员类型', componentProps: { options: computed(() => dict.getOptionUnRef('memberLevelOption')), clearable: true } },
{ field: 'hallId', component: 'NSelect', label: '任务大厅', componentProps: { options: computed(() => dict.getOptionUnRef('taskHallOption')), clearable: true } },
{ field: 'publishStatus', component: 'NSelect', label: '状态', componentProps: { options: computed(() => dict.getOptionUnRef('bizPublishStatus')), clearable: true } },
]);
const tag = (key, value) => h(NTag, { type: dict.getType(key, value), bordered: false }, () => dict.getLabel(key, value) || '-');
export const columns = [
{ title: '任务编号', key: 'taskNo', width: 180 },
{ title: '封面', key: 'coverUrl', width: 100, render: (row) => h(NImage, { src: row.coverUrl, width: 64, height: 64, objectFit: 'cover' }) },
{ title: '标题', key: 'title', width: 180 },
{ title: '关联商品', key: 'productName', width: 180, render: (row) => row.productName || '待补录' },
{ title: '描述', key: 'description', width: 220, ellipsis: { tooltip: true } },
{ title: '任务大厅', key: 'hallName', width: 130 },
{ title: '会员等级', key: 'levelNames', width: 180, render: (row) => (row.levelNames || []).join('、') },
{ title: '固定佣金', key: 'commissionAmount', width: 100, render: (row) => `¥${((row.commissionAmount || 0) / 100).toFixed(2)}` },
{ title: '比例佣金', key: 'commissionRate', width: 100, render: (row) => `${((row.commissionRate || 0) / 100).toFixed(2)}%` },
{ title: '状态', key: 'publishStatus', width: 100, render: (row) => tag('bizPublishStatus', row.publishStatus) },
{ title: '创建时间', key: 'createdAt', width: 180 },
];
export const loadOptions = () => dict.loadOptions(['memberLevelOption', 'taskHallOption', 'bizPublishStatus']);