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