1
This commit is contained in:
@@ -84,4 +84,22 @@ export function getProperties(params) {
|
||||
method: 'get',
|
||||
params
|
||||
})
|
||||
}
|
||||
|
||||
// 开礼金
|
||||
export function createGiftCoupon(data) {
|
||||
return request({
|
||||
url: '/jarvis/jdorder/createGiftCoupon',
|
||||
method: 'post',
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
// 转链(支持礼金)
|
||||
export function transferWithGift(data) {
|
||||
return request({
|
||||
url: '/jarvis/jdorder/transfer',
|
||||
method: 'post',
|
||||
data
|
||||
})
|
||||
}
|
||||
@@ -198,6 +198,7 @@
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button @click="childDetailVisible = false">关 闭</el-button>
|
||||
<el-button type="primary" @click="openQuickLink(currentChild)" v-if="currentChild.jsonQueryResult">一键转链</el-button>
|
||||
<el-button type="warning" @click="openGiftDialog(currentChild)" v-if="currentChild.jsonQueryResult">开礼金</el-button>
|
||||
<el-button type="success" @click="addToFavorites(currentChild)" v-if="currentChild.jsonQueryResult">添加到常用</el-button>
|
||||
<el-button type="warning" @click="quickLinkAndAddToFavorites(currentChild)" v-if="currentChild.jsonQueryResult">转链并入常用</el-button>
|
||||
</div>
|
||||
@@ -317,6 +318,21 @@
|
||||
|
||||
<!-- 公共发品对话框组件复用 -->
|
||||
<PublishDialog :visible.sync="publishDialogVisible" :initial-data="publishInitialData" @success="onPublishDialogSuccess" />
|
||||
<!-- 礼金设置弹窗 -->
|
||||
<el-dialog title="开礼金" :visible.sync="giftDialogVisible" width="420px" append-to-body>
|
||||
<el-form :model="giftForm" label-width="100px" ref="giftForm">
|
||||
<el-form-item label="金额(元)">
|
||||
<el-input v-model.number="giftForm.amount" type="number" min="1" max="50" step="0.01" placeholder="1-50" />
|
||||
</el-form-item>
|
||||
<el-form-item label="数量">
|
||||
<el-input v-model.number="giftForm.quantity" type="number" min="1" max="100" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button @click="giftDialogVisible = false">取 消</el-button>
|
||||
<el-button type="primary" :loading="giftLoading" @click="submitGift">确 定</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -324,7 +340,7 @@
|
||||
import { listXbmessage, delXbmessage, getGroupNameOptions } from "@/api/system/xbmessage";
|
||||
import { parseTime } from "@/utils/ruoyi";
|
||||
import PublishDialog from '@/components/PublishDialog.vue'
|
||||
import { generatePromotionContent, createProductByPromotion, getProvinces, getCities, getAreas, getCategories, getUsernames, getERPAccounts, getProperties } from "@/api/system/jdorder";
|
||||
import { generatePromotionContent, createProductByPromotion, getProvinces, getCities, getAreas, getCategories, getUsernames, getERPAccounts, getProperties, createGiftCoupon, transferWithGift } from "@/api/system/jdorder";
|
||||
import { addToFavorites, getBySkuid } from "@/api/system/favoriteProduct";
|
||||
|
||||
export default {
|
||||
@@ -372,6 +388,10 @@ export default {
|
||||
activeQuickLinkTab: 0,
|
||||
activeQuickLinkWenanTab: {},
|
||||
quickLinkLoading: false,
|
||||
giftDialogVisible: false,
|
||||
giftForm: { amount: null, quantity: 10 },
|
||||
giftLoading: false,
|
||||
giftContext: { materialUrl: '', owner: 'g', skuName: '' },
|
||||
// 发品相关
|
||||
quickLinkPublishDialog: {
|
||||
visible: false,
|
||||
@@ -490,7 +510,7 @@ export default {
|
||||
methods: {
|
||||
openPublishFromXb(child) {
|
||||
const parsedQuery = this.safeJsonParse(child.jsonQueryResult);
|
||||
const images = (parsedQuery && parsedQuery.images && Array.isArray(parsedQuery.images)) ? parsedQuery.images : [];
|
||||
const images = this.extractImageUrlsFromQuery(parsedQuery, child);
|
||||
// 记录当前线报项,便于发品成功后加入常用
|
||||
this.currentXbMessageItem = child;
|
||||
|
||||
@@ -531,15 +551,18 @@ export default {
|
||||
} catch (e) { arr = []; }
|
||||
|
||||
let wenanOptions = [];
|
||||
let detailImages = [];
|
||||
if (Array.isArray(arr) && arr.length > 0) {
|
||||
const first = arr[0] || {};
|
||||
const wenanArr = Array.isArray(first.wenan) ? first.wenan : [];
|
||||
wenanOptions = wenanArr.map((w, i) => ({ label: w.type || `版本${i+1}`, content: w.content || '' }));
|
||||
detailImages = this.extractImageUrlsFromGenerateResult(first);
|
||||
}
|
||||
|
||||
this.publishInitialData = Object.assign({}, baseInitialData, {
|
||||
content: (wenanOptions[0] && wenanOptions[0].content) || '',
|
||||
wenanOptions
|
||||
wenanOptions,
|
||||
images: (detailImages && detailImages.length) ? detailImages : baseInitialData.images
|
||||
});
|
||||
}).catch(() => {
|
||||
// 忽略错误,仍然打开弹窗(无文案)
|
||||
@@ -549,6 +572,68 @@ export default {
|
||||
this.publishDialogVisible = true;
|
||||
});
|
||||
},
|
||||
// 兼容多种结构提取图片URL(线报查询结果/行数据)
|
||||
extractImageUrlsFromQuery(queryObj, rowFallback) {
|
||||
try {
|
||||
const urls = [];
|
||||
const pushIfUrl = (v) => {
|
||||
if (!v) return;
|
||||
const s = String(v).trim();
|
||||
if (/^https?:\/\//.test(s)) urls.push(s);
|
||||
};
|
||||
|
||||
if (queryObj && Array.isArray(queryObj.images)) {
|
||||
queryObj.images.forEach(it => {
|
||||
if (typeof it === 'string') pushIfUrl(it);
|
||||
else if (it && (it.url || it.imageUrl || it.imgUrl)) pushIfUrl(it.url || it.imageUrl || it.imgUrl);
|
||||
});
|
||||
}
|
||||
if (queryObj && queryObj.imageInfo) {
|
||||
const ii = queryObj.imageInfo;
|
||||
pushIfUrl(ii.mainImage);
|
||||
if (Array.isArray(ii.imageList)) {
|
||||
ii.imageList.forEach(it => {
|
||||
if (typeof it === 'string') pushIfUrl(it);
|
||||
else if (it && (it.url || it.imageUrl || it.imgUrl)) pushIfUrl(it.url || it.imageUrl || it.imgUrl);
|
||||
});
|
||||
} else if (typeof ii.imageList === 'string') {
|
||||
ii.imageList.split(/[\s,]+/).forEach(pushIfUrl);
|
||||
}
|
||||
}
|
||||
// 兜底:从行数据尝试
|
||||
if (urls.length === 0 && rowFallback) {
|
||||
if (Array.isArray(rowFallback.images)) {
|
||||
rowFallback.images.forEach(it => { if (typeof it === 'string') pushIfUrl(it); else if (it && it.url) pushIfUrl(it.url); });
|
||||
}
|
||||
pushIfUrl(rowFallback.productImage);
|
||||
pushIfUrl(rowFallback.imageUrl);
|
||||
pushIfUrl(rowFallback.image);
|
||||
}
|
||||
return Array.from(new Set(urls));
|
||||
} catch (e) { return []; }
|
||||
},
|
||||
// 兼容 generatePromotionContent 返回结构提取图片
|
||||
extractImageUrlsFromGenerateResult(obj) {
|
||||
try {
|
||||
const urls = [];
|
||||
const pushIfUrl = (v) => {
|
||||
if (!v) return;
|
||||
const s = String(v).trim();
|
||||
if (/^https?:\/\//.test(s)) urls.push(s);
|
||||
};
|
||||
if (Array.isArray(obj.images)) {
|
||||
obj.images.forEach(it => {
|
||||
if (typeof it === 'string') pushIfUrl(it);
|
||||
else if (it && (it.url || it.imageUrl || it.imgUrl)) pushIfUrl(it.url || it.imageUrl || it.imgUrl);
|
||||
});
|
||||
}
|
||||
if (obj.mainImage) pushIfUrl(obj.mainImage);
|
||||
if (Array.isArray(obj.imageList)) obj.imageList.forEach(pushIfUrl);
|
||||
if (Array.isArray(obj.pics)) obj.pics.forEach(pushIfUrl);
|
||||
if (Array.isArray(obj.imgUrls)) obj.imgUrls.forEach(pushIfUrl);
|
||||
return Array.from(new Set(urls));
|
||||
} catch (e) { return []; }
|
||||
},
|
||||
/** 查询消息列表 */
|
||||
getList() {
|
||||
this.loading = true;
|
||||
@@ -1218,6 +1303,43 @@ export default {
|
||||
this.activeQuickLinkWenanTab = {};
|
||||
this.quickLinkVisible = true;
|
||||
},
|
||||
openGiftDialog(child) {
|
||||
const materialUrl = this.getJsonValue(child.jsonQueryResult, 'materialUrl') || this.getJsonValue(child.jsonQueryResult, 'url');
|
||||
const owner = this.getJsonValue(child.jsonQueryResult, 'owner') || 'g';
|
||||
const skuName = child.skuName || '';
|
||||
if (!materialUrl) { this.$modal.msgError('无法获取商品链接'); return; }
|
||||
this.giftContext = { materialUrl, owner, skuName };
|
||||
this.giftForm = { amount: null, quantity: 10 };
|
||||
this.giftDialogVisible = true;
|
||||
},
|
||||
async submitGift() {
|
||||
if (!this.giftContext.materialUrl || !this.giftForm.amount || !this.giftForm.quantity) {
|
||||
this.$modal.msgError('请完善礼金金额与数量'); return;
|
||||
}
|
||||
this.giftLoading = true;
|
||||
try {
|
||||
const cg = await createGiftCoupon({ materialUrl: this.giftContext.materialUrl, amount: this.giftForm.amount, quantity: this.giftForm.quantity, owner: this.giftContext.owner, skuName: this.giftContext.skuName });
|
||||
if (!cg || cg.code !== 200) { this.$modal.msgError((cg && cg.msg) || '开礼金失败'); this.giftLoading = false; return; }
|
||||
const giftKey = (cg.data && (cg.data.giftCouponKey || cg.data.giftKey)) || (typeof cg.data === 'string' ? cg.data : null);
|
||||
const tf = await transferWithGift({ materialUrl: this.giftContext.materialUrl, giftCouponKey: giftKey });
|
||||
let shortUrl = '';
|
||||
if (tf && tf.code === 200) {
|
||||
const d = tf.data; if (typeof d === 'string') shortUrl = d; else if (d && d.shortURL) shortUrl = d.shortURL;
|
||||
}
|
||||
if (shortUrl) {
|
||||
if (this.publishInitialData && this.publishDialogVisible) {
|
||||
this.publishInitialData = Object.assign({}, this.publishInitialData, { content: (this.publishInitialData.content ? (this.publishInitialData.content + '\n' + shortUrl) : shortUrl) });
|
||||
}
|
||||
this.$modal.msgSuccess('礼金短链已生成');
|
||||
} else {
|
||||
this.$modal.msgSuccess('礼金创建成功');
|
||||
}
|
||||
this.giftDialogVisible = false;
|
||||
} catch (e) {
|
||||
this.$modal.msgError('礼金处理失败');
|
||||
}
|
||||
this.giftLoading = false;
|
||||
},
|
||||
|
||||
/** 生成转链内容 */
|
||||
generateQuickLink() {
|
||||
|
||||
Reference in New Issue
Block a user