This commit is contained in:
aaron 2025-03-26 23:19:33 +08:00
parent 9ab24be577
commit 59b3386ff4

View File

@ -49,16 +49,6 @@
<template v-if="['product_price', 'sale_price', 'settlement_amount'].includes(column.key)"> <template v-if="['product_price', 'sale_price', 'settlement_amount'].includes(column.key)">
¥{{ text }} ¥{{ text }}
</template> </template>
<!-- 标签列 -->
<template v-if="column.key === 'tags'">
<a-tag
v-for="tag in text?.split(',')"
:key="tag"
color="blue"
>
{{ tag }}
</a-tag>
</template>
<!-- 状态列 --> <!-- 状态列 -->
<template v-if="column.key === 'status'"> <template v-if="column.key === 'status'">
<a-tag :color="getStatusColor(record.status)"> <a-tag :color="getStatusColor(record.status)">
@ -151,7 +141,7 @@
<a-form-item label="商品名称" name="name" required> <a-form-item label="商品名称" name="name" required>
<a-input v-model:value="formState.name" placeholder="请输入商品名称" /> <a-input v-model:value="formState.name" placeholder="请输入商品名称" />
</a-form-item> </a-form-item>
<a-form-item label="商品原价" name="product_price" required> <a-form-item label="商品原价" name="product_price" required>
<a-input-number <a-input-number
@ -226,35 +216,6 @@
<div class="form-item-help">消费金额的百分比例如10表示赠送10%作为积分</div> <div class="form-item-help">消费金额的百分比例如10表示赠送10%作为积分</div>
</a-form-item> </a-form-item>
<a-form-item
label="促销文本"
name="promotion_text"
>
<a-input
v-model:value="formState.promotion_text"
placeholder="例如:新人三折"
:maxLength="5"
show-count
/>
<div class="form-item-help">显示在商品下方的促销文本限5个字以内</div>
</a-form-item>
<a-form-item label="标签" name="tags">
<a-input v-model:value="formState.tags" placeholder="多个标签用逗号分隔" />
</a-form-item>
<a-form-item label="限购次数" name="purchase_limit">
<a-input-number
v-model:value="formState.purchase_limit"
:min="0"
style="width: 100%"
placeholder="0表示不限购"
>
<template #addonAfter></template>
</a-input-number>
<div class="form-item-help">0 次表示不限购</div>
</a-form-item>
<!-- 配送时间类型 --> <!-- 配送时间类型 -->
<a-form-item label="配送时间类型" name="delivery_time_type" required> <a-form-item label="配送时间类型" name="delivery_time_type" required>
<a-radio-group <a-radio-group
@ -289,11 +250,11 @@
<a-form-item <a-form-item
label="自提日期" label="自提日期"
name="pickup_date" name="delivery_date"
required required
> >
<a-date-picker <a-date-picker
v-model:value="formState.pickup_date" v-model:value="formState.delivery_date"
:disabled-date="disabledDate" :disabled-date="disabledDate"
format="YYYY-MM-DD" format="YYYY-MM-DD"
valueFormat="YYYY-MM-DD" valueFormat="YYYY-MM-DD"
@ -313,7 +274,7 @@
> >
<a-time-picker <a-time-picker
v-model:value="pickupTimeFrom" v-model:value="pickupTimeFrom"
format="HH:mm" format="HH:mm:ss"
placeholder="开始时间" placeholder="开始时间"
style="width: 100%" style="width: 100%"
@change="updatePickupTimeFrom" @change="updatePickupTimeFrom"
@ -327,7 +288,7 @@
> >
<a-time-picker <a-time-picker
v-model:value="pickupTimeTo" v-model:value="pickupTimeTo"
format="HH:mm" format="HH:mm:ss"
placeholder="结束时间" placeholder="结束时间"
style="width: 100%" style="width: 100%"
@change="updatePickupTimeTo" @change="updatePickupTimeTo"
@ -418,7 +379,7 @@
<a-form-item label="商品名称" name="name" required> <a-form-item label="商品名称" name="name" required>
<a-input v-model:value="editFormState.name" placeholder="请输入商品名称" /> <a-input v-model:value="editFormState.name" placeholder="请输入商品名称" />
</a-form-item> </a-form-item>
<a-form-item label="商品原价" name="product_price" required> <a-form-item label="商品原价" name="product_price" required>
<a-input-number <a-input-number
@ -493,35 +454,6 @@
<div class="form-item-help">消费金额的百分比例如10表示赠送10%作为积分</div> <div class="form-item-help">消费金额的百分比例如10表示赠送10%作为积分</div>
</a-form-item> </a-form-item>
<a-form-item
label="促销文本"
name="promotion_text"
>
<a-input
v-model:value="editFormState.promotion_text"
placeholder="例如:新人三折"
:maxLength="5"
show-count
/>
<div class="form-item-help">显示在商品下方的促销文本限5个字以内</div>
</a-form-item>
<a-form-item label="标签" name="tags">
<a-input v-model:value="editFormState.tags" placeholder="多个标签用逗号分隔" />
</a-form-item>
<a-form-item label="限购次数" name="purchase_limit">
<a-input-number
v-model:value="editFormState.purchase_limit"
:min="0"
style="width: 100%"
placeholder="0表示不限购"
>
<template #addonAfter></template>
</a-input-number>
<div class="form-item-help">0 次表示不限购</div>
</a-form-item>
<!-- 配送时间类型 --> <!-- 配送时间类型 -->
<a-form-item label="配送时间类型" name="delivery_time_type" required> <a-form-item label="配送时间类型" name="delivery_time_type" required>
<a-radio-group <a-radio-group
@ -556,11 +488,11 @@
<a-form-item <a-form-item
label="自提日期" label="自提日期"
name="pickup_date" name="delivery_date"
required required
> >
<a-date-picker <a-date-picker
v-model:value="editFormState.pickup_date" v-model:value="editFormState.delivery_date"
:disabled-date="disabledDate" :disabled-date="disabledDate"
format="YYYY-MM-DD" format="YYYY-MM-DD"
valueFormat="YYYY-MM-DD" valueFormat="YYYY-MM-DD"
@ -580,7 +512,7 @@
> >
<a-time-picker <a-time-picker
v-model:value="editPickupTimeFrom" v-model:value="editPickupTimeFrom"
format="HH:mm" format="HH:mm:ss"
placeholder="开始时间" placeholder="开始时间"
style="width: 100%" style="width: 100%"
@change="updateEditPickupTimeFrom" @change="updateEditPickupTimeFrom"
@ -594,7 +526,7 @@
> >
<a-time-picker <a-time-picker
v-model:value="editPickupTimeTo" v-model:value="editPickupTimeTo"
format="HH:mm" format="HH:mm:ss"
placeholder="结束时间" placeholder="结束时间"
style="width: 100%" style="width: 100%"
@change="updateEditPickupTimeTo" @change="updateEditPickupTimeTo"
@ -717,18 +649,14 @@ export default defineComponent({
product_price: null, product_price: null,
sale_price: null, sale_price: null,
settlement_amount: null, settlement_amount: null,
purchase_limit: 0,
tags: '',
gift_points_rate: 0, gift_points_rate: 0,
promotion_text: '',
qty: 0, qty: 0,
delivery_type: 'DELIVERY', // delivery_type: 'DELIVERY', //
pickup_place: '', pickup_place: '',
pickup_time_from: '', pickup_time_from: '',
pickup_time_to: '', pickup_time_to: '',
pickup_date: null, // delivery_date: null, //
delivery_time_type: 'IMMEDIATE', // delivery_time_type: 'IMMEDIATE', //
delivery_date: dayjs().format('YYYY-MM-DD'), //
product_detail: '<h1>商品详情</h1><p>这里是商品的详细描述,支持<strong>富文本</strong>格式。</p><ul><li>特点一</li><li>特点二</li><li>特点三</li></ul>', product_detail: '<h1>商品详情</h1><p>这里是商品的详细描述,支持<strong>富文本</strong>格式。</p><ul><li>特点一</li><li>特点二</li><li>特点三</li></ul>',
purchase_note: '' purchase_note: ''
}) })
@ -741,18 +669,14 @@ export default defineComponent({
product_price: null, product_price: null,
sale_price: null, sale_price: null,
settlement_amount: null, settlement_amount: null,
purchase_limit: 0,
tags: '',
gift_points_rate: 0, gift_points_rate: 0,
promotion_text: '',
qty: 0, qty: 0,
delivery_type: 'DELIVERY', // delivery_type: 'DELIVERY', //
pickup_place: '', pickup_place: '',
pickup_time_from: '', pickup_time_from: '',
pickup_time_to: '', pickup_time_to: '',
pickup_date: null, // delivery_date: null, //
delivery_time_type: 'IMMEDIATE', // delivery_time_type: 'IMMEDIATE', //
delivery_date: dayjs().format('YYYY-MM-DD'), //
product_detail: '<h1>商品详情</h1><p>这里是商品的详细描述,支持<strong>富文本</strong>格式。</p><ul><li>特点一</li><li>特点二</li><li>特点三</li></ul>', product_detail: '<h1>商品详情</h1><p>这里是商品的详细描述,支持<strong>富文本</strong>格式。</p><ul><li>特点一</li><li>特点二</li><li>特点三</li></ul>',
purchase_note: '' purchase_note: ''
}) })
@ -776,21 +700,21 @@ export default defineComponent({
title: '所属商家', title: '所属商家',
dataIndex: 'merchant_name', dataIndex: 'merchant_name',
key: 'merchant_name', key: 'merchant_name',
width: '15%', width: '12%',
ellipsis: true ellipsis: true
}, },
{ {
title: '商品名称', title: '商品名称',
dataIndex: 'name', dataIndex: 'name',
key: 'name', key: 'name',
width: '25%', width: '15%',
ellipsis: true ellipsis: true
}, },
{ {
title: '销售价格', title: '销售价格',
dataIndex: 'sale_price', dataIndex: 'sale_price',
key: 'sale_price', key: 'sale_price',
width: '10%', width: '8%',
align: 'right' align: 'right'
}, },
{ {
@ -814,32 +738,57 @@ export default defineComponent({
} }
}, },
{ {
title: '限购', title: '自提信息',
dataIndex: 'purchase_limit', key: 'pickup_info',
key: 'purchase_limit', dataIndex: 'delivery_time_type',
width: '10%', width: '15%',
align: 'center', align: 'center',
customRender: ({ text }) => { customRender: ({ text, record }) => {
return h( // ""
'span', if (text === 'IMMEDIATE') {
{ return h('span', { style: { color: '#999' } }, '无需自提');
class: `purchase-limit-tag ${text === 0 ? 'default' : 'highlight'}` }
},
text === 0 ? '不限购' : `${text}` //
) let infoText = '';
//
if (record.delivery_date) {
infoText += `日期: ${record.delivery_date}`;
}
//
if (record.pickup_time_from && record.pickup_time_to) {
infoText += infoText ? '\n' : '';
infoText += `时间: ${record.pickup_time_from.substring(0, 5)}-${record.pickup_time_to.substring(0, 5)}`;
}
//
if (record.pickup_place) {
infoText += infoText ? '\n' : '';
infoText += `地点: ${record.pickup_place}`;
}
return h('span', {
style: {
whiteSpace: 'pre-line',
lineHeight: '1.5',
fontSize: '12px'
}
}, infoText || '暂无自提信息');
} }
}, },
{ {
title: '状态', title: '状态',
dataIndex: 'status', dataIndex: 'status',
key: 'status', key: 'status',
width: '10%', width: '8%',
align: 'center' align: 'center'
}, },
{ {
title: '操作', title: '操作',
key: 'action', key: 'action',
width: '15%', width: '12%',
align: 'center' align: 'center'
} }
] ]
@ -1071,6 +1020,13 @@ export default defineComponent({
markdownToHtml(record.product_detail) : markdownToHtml(record.product_detail) :
'<h1>商品详情</h1><p>这里是商品的详细描述,支持<strong>富文本</strong>格式。</p><ul><li>特点一</li><li>特点二</li><li>特点三</li></ul>'; '<h1>商品详情</h1><p>这里是商品的详细描述,支持<strong>富文本</strong>格式。</p><ul><li>特点一</li><li>特点二</li><li>特点三</li></ul>';
// dayjs
console.log('原始自提时间数据:', record.pickup_time_from, record.pickup_time_to, record.delivery_time_type);
//
editPickupTimeFrom.value = null;
editPickupTimeTo.value = null;
editFormState.value = { editFormState.value = {
operation_type: record.operation_type || 'MERCHANT', operation_type: record.operation_type || 'MERCHANT',
name: record.name, name: record.name,
@ -1078,24 +1034,38 @@ export default defineComponent({
product_price: record.product_price, product_price: record.product_price,
sale_price: record.sale_price, sale_price: record.sale_price,
settlement_amount: record.settlement_amount, settlement_amount: record.settlement_amount,
purchase_limit: record.purchase_limit,
tags: record.tags,
gift_points_rate: record.gift_points_rate, gift_points_rate: record.gift_points_rate,
promotion_text: record.promotion_text,
qty: record.qty || 0, qty: record.qty || 0,
delivery_time_type: record.delivery_time_type || 'IMMEDIATE', delivery_time_type: record.delivery_time_type || 'IMMEDIATE',
delivery_date: record.delivery_date || null, delivery_date: record.delivery_date ? dayjs(record.delivery_date) : null,
product_detail: productDetailHtml, product_detail: productDetailHtml,
purchase_note: record.purchase_note || '' purchase_note: record.purchase_note || '',
//
pickup_place: record.pickup_place || '',
pickup_time_from: record.pickup_time_from || '',
pickup_time_to: record.pickup_time_to || ''
} }
// //
editEditorContent.value = productDetailHtml; editEditorContent.value = productDetailHtml;
editModalVisible.value = true editModalVisible.value = true
//
// 使 nextTick
nextTick(() => { nextTick(() => {
//
editActiveTabKey.value = 'basic' editActiveTabKey.value = 'basic'
//
if (record.pickup_time_from) {
editPickupTimeFrom.value = dayjs(record.pickup_time_from, 'HH:mm:ss');
console.log('设置自提开始时间:', editPickupTimeFrom.value);
}
if (record.pickup_time_to) {
editPickupTimeTo.value = dayjs(record.pickup_time_to, 'HH:mm:ss');
console.log('设置自提结束时间:', editPickupTimeTo.value);
}
}) })
} }
@ -1190,7 +1160,7 @@ export default defineComponent({
// //
const updatePickupTimeFrom = () => { const updatePickupTimeFrom = () => {
if (pickupTimeFrom.value) { if (pickupTimeFrom.value) {
formState.value.pickup_time_from = dayjs(pickupTimeFrom.value).format('HH:mm'); formState.value.pickup_time_from = dayjs(pickupTimeFrom.value).format('HH:mm:ss');
} else { } else {
formState.value.pickup_time_from = ''; formState.value.pickup_time_from = '';
} }
@ -1199,7 +1169,7 @@ export default defineComponent({
// //
const updatePickupTimeTo = () => { const updatePickupTimeTo = () => {
if (pickupTimeTo.value) { if (pickupTimeTo.value) {
formState.value.pickup_time_to = dayjs(pickupTimeTo.value).format('HH:mm'); formState.value.pickup_time_to = dayjs(pickupTimeTo.value).format('HH:mm:ss');
} else { } else {
formState.value.pickup_time_to = ''; formState.value.pickup_time_to = '';
} }
@ -1208,7 +1178,7 @@ export default defineComponent({
// //
const updateEditPickupTimeFrom = () => { const updateEditPickupTimeFrom = () => {
if (editPickupTimeFrom.value) { if (editPickupTimeFrom.value) {
editFormState.value.pickup_time_from = dayjs(editPickupTimeFrom.value).format('HH:mm'); editFormState.value.pickup_time_from = dayjs(editPickupTimeFrom.value).format('HH:mm:ss');
} else { } else {
editFormState.value.pickup_time_from = ''; editFormState.value.pickup_time_from = '';
} }
@ -1217,7 +1187,7 @@ export default defineComponent({
// //
const updateEditPickupTimeTo = () => { const updateEditPickupTimeTo = () => {
if (editPickupTimeTo.value) { if (editPickupTimeTo.value) {
editFormState.value.pickup_time_to = dayjs(editPickupTimeTo.value).format('HH:mm'); editFormState.value.pickup_time_to = dayjs(editPickupTimeTo.value).format('HH:mm:ss');
} else { } else {
editFormState.value.pickup_time_to = ''; editFormState.value.pickup_time_to = '';
} }
@ -1272,7 +1242,7 @@ export default defineComponent({
return Promise.resolve(); return Promise.resolve();
} }
}], }],
pickup_date: [{ delivery_date: [{
required: true, required: true,
message: '请选择自提日期', message: '请选择自提日期',
trigger: 'change', trigger: 'change',
@ -1323,26 +1293,26 @@ export default defineComponent({
// //
formData.delivery_type = 'DELIVERY' formData.delivery_type = 'DELIVERY'
formData.delivery_date = dayjs().format('YYYY-MM-DD') formData.delivery_date = dayjs().format('YYYY-MM-DD')
formData.pickup_place = ''
formData.pickup_time_from = '' //
formData.pickup_time_to = '' delete formData.pickup_place
formData.pickup_date = null delete formData.pickup_time_from
delete formData.pickup_time_to
} else if (formData.delivery_time_type === 'SCHEDULED') { } else if (formData.delivery_time_type === 'SCHEDULED') {
// //
formData.delivery_type = 'PICKUP' formData.delivery_type = 'PICKUP'
formData.delivery_date = null
// //
if (formData.pickup_date) { if (formData.delivery_date) {
formData.pickup_date = dayjs(formData.pickup_date).format('YYYY-MM-DD') formData.delivery_date = dayjs(formData.delivery_date).format('YYYY-MM-DD')
} }
// //
if (pickupTimeFrom.value) { if (pickupTimeFrom.value) {
formData.pickup_time_from = dayjs(pickupTimeFrom.value).format('HH:mm') formData.pickup_time_from = dayjs(pickupTimeFrom.value).format('HH:mm:ss')
} }
if (pickupTimeTo.value) { if (pickupTimeTo.value) {
formData.pickup_time_to = dayjs(pickupTimeTo.value).format('HH:mm') formData.pickup_time_to = dayjs(pickupTimeTo.value).format('HH:mm:ss')
} }
} }
@ -1379,19 +1349,15 @@ export default defineComponent({
product_price: null, product_price: null,
sale_price: null, sale_price: null,
settlement_amount: null, settlement_amount: null,
purchase_limit: 0,
tags: '',
gift_points_rate: 0, gift_points_rate: 0,
promotion_text: '',
qty: 0, qty: 0,
delivery_type: 'DELIVERY', delivery_type: 'DELIVERY',
pickup_place: '', pickup_place: '',
pickup_time_from: '', pickup_time_from: '',
pickup_time_to: '', pickup_time_to: '',
pickup_date: null, delivery_date: null,
delivery_time_type: 'IMMEDIATE', delivery_time_type: 'IMMEDIATE',
delivery_date: dayjs().format('YYYY-MM-DD'), product_detail: '',
product_detail: '<h1>商品详情</h1><p>这里是商品的详细描述,支持<strong>富文本</strong>格式。</p><ul><li>特点一</li><li>特点二</li><li>特点三</li></ul>',
purchase_note: '' purchase_note: ''
} }
// //
@ -1527,26 +1493,26 @@ export default defineComponent({
// //
formData.delivery_type = 'DELIVERY' formData.delivery_type = 'DELIVERY'
formData.delivery_date = dayjs().format('YYYY-MM-DD') formData.delivery_date = dayjs().format('YYYY-MM-DD')
formData.pickup_place = ''
formData.pickup_time_from = '' //
formData.pickup_time_to = '' delete formData.pickup_place
formData.pickup_date = null delete formData.pickup_time_from
delete formData.pickup_time_to
} else if (formData.delivery_time_type === 'SCHEDULED') { } else if (formData.delivery_time_type === 'SCHEDULED') {
// //
formData.delivery_type = 'PICKUP' formData.delivery_type = 'PICKUP'
formData.delivery_date = null
// //
if (formData.pickup_date) { if (formData.delivery_date) {
formData.pickup_date = dayjs(formData.pickup_date).format('YYYY-MM-DD') formData.delivery_date = dayjs(formData.delivery_date).format('YYYY-MM-DD')
} }
// //
if (editPickupTimeFrom.value) { if (editPickupTimeFrom.value) {
formData.pickup_time_from = dayjs(editPickupTimeFrom.value).format('HH:mm') formData.pickup_time_from = dayjs(editPickupTimeFrom.value).format('HH:mm:ss')
} }
if (editPickupTimeTo.value) { if (editPickupTimeTo.value) {
formData.pickup_time_to = dayjs(editPickupTimeTo.value).format('HH:mm') formData.pickup_time_to = dayjs(editPickupTimeTo.value).format('HH:mm:ss')
} }
} }
@ -1582,19 +1548,15 @@ export default defineComponent({
product_price: null, product_price: null,
sale_price: null, sale_price: null,
settlement_amount: null, settlement_amount: null,
purchase_limit: 0,
tags: '',
gift_points_rate: 0, gift_points_rate: 0,
promotion_text: '',
qty: 0, qty: 0,
delivery_type: 'DELIVERY', delivery_type: 'DELIVERY',
pickup_place: '', pickup_place: '',
pickup_time_from: '', pickup_time_from: '',
pickup_time_to: '', pickup_time_to: '',
pickup_date: null, delivery_date: null,
delivery_time_type: 'IMMEDIATE', delivery_time_type: 'IMMEDIATE',
delivery_date: dayjs().format('YYYY-MM-DD'), product_detail: '',
product_detail: '<h1>商品详情</h1><p>这里是商品的详细描述,支持<strong>富文本</strong>格式。</p><ul><li>特点一</li><li>特点二</li><li>特点三</li></ul>',
purchase_note: '' purchase_note: ''
} }
// //
@ -1615,11 +1577,9 @@ export default defineComponent({
formState.value.pickup_place = '' formState.value.pickup_place = ''
formState.value.pickup_time_from = '' formState.value.pickup_time_from = ''
formState.value.pickup_time_to = '' formState.value.pickup_time_to = ''
formState.value.pickup_date = null formState.value.delivery_date = dayjs().format('YYYY-MM-DD')
pickupTimeFrom.value = null pickupTimeFrom.value = null
pickupTimeTo.value = null pickupTimeTo.value = null
//
formState.value.delivery_date = dayjs().format('YYYY-MM-DD')
} else if (e.target.value === 'SCHEDULED') { } else if (e.target.value === 'SCHEDULED') {
// - // -
formState.value.delivery_type = 'PICKUP' formState.value.delivery_type = 'PICKUP'
@ -1635,15 +1595,14 @@ export default defineComponent({
editFormState.value.pickup_place = '' editFormState.value.pickup_place = ''
editFormState.value.pickup_time_from = '' editFormState.value.pickup_time_from = ''
editFormState.value.pickup_time_to = '' editFormState.value.pickup_time_to = ''
editFormState.value.pickup_date = null editFormState.value.delivery_date = dayjs().format('YYYY-MM-DD')
editPickupTimeFrom.value = null editPickupTimeFrom.value = null
editPickupTimeTo.value = null editPickupTimeTo.value = null
//
editFormState.value.delivery_date = dayjs().format('YYYY-MM-DD')
} else if (e.target.value === 'SCHEDULED') { } else if (e.target.value === 'SCHEDULED') {
// - // -
editFormState.value.delivery_type = 'PICKUP' editFormState.value.delivery_type = 'PICKUP'
editFormState.value.delivery_date = null // delivery_date
// pickup_time_from pickup_time_to
} }
} }
@ -1704,7 +1663,9 @@ export default defineComponent({
initEditEditor, initEditEditor,
htmlToMarkdown, htmlToMarkdown,
markdownToHtml, markdownToHtml,
mode mode,
handleDeliveryTimeTypeChange,
handleEditDeliveryTimeTypeChange
} }
} }
}) })