1
This commit is contained in:
@@ -27,3 +27,12 @@ export function generateComplete(data) {
|
||||
})
|
||||
}
|
||||
|
||||
// 闲鱼文案(手动):根据标题+可选型号生成代下单、教你下单文案
|
||||
export function generateXianyuWenan(data) {
|
||||
return request({
|
||||
url: '/jarvis/social-media/xianyu-wenan/generate',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
217
src/views/system/social-media/xianyu-wenan.vue
Normal file
217
src/views/system/social-media/xianyu-wenan.vue
Normal file
@@ -0,0 +1,217 @@
|
||||
<template>
|
||||
<div class="xianyu-wenan-container">
|
||||
<el-card class="box-card">
|
||||
<div slot="header" class="clearfix">
|
||||
<span class="card-title">
|
||||
<i class="el-icon-edit-outline"></i>
|
||||
闲鱼文案(手动)
|
||||
</span>
|
||||
<el-button
|
||||
style="float: right; padding: 3px 0"
|
||||
type="text"
|
||||
@click="showHelp = !showHelp">
|
||||
{{ showHelp ? '隐藏帮助' : '显示帮助' }}
|
||||
</el-button>
|
||||
</div>
|
||||
|
||||
<el-collapse-transition>
|
||||
<div v-show="showHelp" class="help-section">
|
||||
<el-alert
|
||||
title="使用说明"
|
||||
type="info"
|
||||
:closable="false"
|
||||
show-icon>
|
||||
<div slot="default">
|
||||
<p><strong>功能说明:</strong></p>
|
||||
<ul>
|
||||
<li>不依赖 JD 接口,手动输入标题即可生成闲鱼文案,用于接口限流时的应急</li>
|
||||
<li>一键生成「代下单」和「教你下单」两种文案</li>
|
||||
<li>标题和型号会自动清洗敏感词(以旧、政府、换新等)</li>
|
||||
<li>支持可选备注(型号),会拼在标题后参与生成</li>
|
||||
</ul>
|
||||
</div>
|
||||
</el-alert>
|
||||
</div>
|
||||
</el-collapse-transition>
|
||||
|
||||
<div class="input-section">
|
||||
<el-form :model="form" label-width="100px" class="main-form">
|
||||
<el-form-item label="商品标题" required>
|
||||
<el-input
|
||||
v-model="form.title"
|
||||
type="textarea"
|
||||
:rows="2"
|
||||
placeholder="请输入商品标题(必填)"
|
||||
clearable />
|
||||
</el-form-item>
|
||||
<el-form-item label="型号/备注">
|
||||
<el-input
|
||||
v-model="form.remark"
|
||||
placeholder="选填,如型号、规格等,会拼在标题后"
|
||||
clearable />
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button
|
||||
type="primary"
|
||||
:loading="generating"
|
||||
@click="handleGenerate">
|
||||
生成闲鱼文案
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</div>
|
||||
|
||||
<div v-if="result.daixiadan || result.jiaonixiadan" class="result-section">
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-card shadow="hover" class="result-card">
|
||||
<div slot="header" class="clearfix">
|
||||
<span>代下单(一键代下)</span>
|
||||
<el-button
|
||||
type="text"
|
||||
style="float: right; padding: 0"
|
||||
@click="copyResult('daixiadan')">
|
||||
<i class="el-icon-document-copy"></i> 复制
|
||||
</el-button>
|
||||
</div>
|
||||
<div class="result-content">{{ result.daixiadan }}</div>
|
||||
</el-card>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-card shadow="hover" class="result-card">
|
||||
<div slot="header" class="clearfix">
|
||||
<span>教你下单</span>
|
||||
<el-button
|
||||
type="text"
|
||||
style="float: right; padding: 0"
|
||||
@click="copyResult('jiaonixiadan')">
|
||||
<i class="el-icon-document-copy"></i> 复制
|
||||
</el-button>
|
||||
</div>
|
||||
<div class="result-content">{{ result.jiaonixiadan }}</div>
|
||||
</el-card>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
</el-card>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { generateXianyuWenan } from '@/api/jarvis/socialMedia'
|
||||
|
||||
export default {
|
||||
name: 'XianyuWenan',
|
||||
data() {
|
||||
return {
|
||||
showHelp: false,
|
||||
form: {
|
||||
title: '',
|
||||
remark: ''
|
||||
},
|
||||
result: {
|
||||
daixiadan: '',
|
||||
jiaonixiadan: ''
|
||||
},
|
||||
generating: false
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
async handleGenerate() {
|
||||
const title = (this.form.title || '').trim()
|
||||
if (!title) {
|
||||
this.$message.warning('请输入商品标题')
|
||||
return
|
||||
}
|
||||
this.generating = true
|
||||
try {
|
||||
const res = await generateXianyuWenan({
|
||||
title: title,
|
||||
remark: (this.form.remark || '').trim() || undefined
|
||||
})
|
||||
if (res.code === 200 && res.data) {
|
||||
const data = res.data
|
||||
if (data.success) {
|
||||
this.result.daixiadan = data.daixiadan || ''
|
||||
this.result.jiaonixiadan = data.jiaonixiadan || ''
|
||||
this.$message.success('生成成功')
|
||||
} else {
|
||||
this.$message.error(data.error || '生成失败')
|
||||
}
|
||||
} else {
|
||||
this.$message.error(res.msg || '生成失败')
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('生成失败', error)
|
||||
this.$message.error('生成失败:' + (error.message || '未知错误'))
|
||||
} finally {
|
||||
this.generating = false
|
||||
}
|
||||
},
|
||||
copyResult(type) {
|
||||
const text = this.result[type]
|
||||
if (!text) {
|
||||
this.$message.warning('暂无内容可复制')
|
||||
return
|
||||
}
|
||||
if (navigator.clipboard && navigator.clipboard.writeText) {
|
||||
navigator.clipboard.writeText(text).then(() => {
|
||||
this.$message.success('已复制到剪贴板')
|
||||
}).catch(() => {
|
||||
this.fallbackCopy(text)
|
||||
})
|
||||
} else {
|
||||
this.fallbackCopy(text)
|
||||
}
|
||||
},
|
||||
fallbackCopy(text) {
|
||||
const ta = document.createElement('textarea')
|
||||
ta.value = text
|
||||
ta.style.position = 'fixed'
|
||||
ta.style.left = '-9999px'
|
||||
document.body.appendChild(ta)
|
||||
ta.select()
|
||||
try {
|
||||
document.execCommand('copy')
|
||||
this.$message.success('已复制到剪贴板')
|
||||
} catch (e) {
|
||||
this.$message.error('复制失败,请手动选择复制')
|
||||
}
|
||||
document.body.removeChild(ta)
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.xianyu-wenan-container {
|
||||
padding: 10px;
|
||||
}
|
||||
.box-card {
|
||||
max-width: 1200px;
|
||||
}
|
||||
.card-title {
|
||||
font-size: 16px;
|
||||
font-weight: 500;
|
||||
}
|
||||
.help-section {
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
.input-section {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
.result-section {
|
||||
margin-top: 20px;
|
||||
}
|
||||
.result-card {
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
.result-content {
|
||||
white-space: pre-wrap;
|
||||
word-break: break-all;
|
||||
font-size: 13px;
|
||||
line-height: 1.6;
|
||||
max-height: 400px;
|
||||
overflow-y: auto;
|
||||
}
|
||||
</style>
|
||||
Reference in New Issue
Block a user