提交 e041a8c4 authored 作者: 王鹏飞's avatar 王鹏飞

chore: update

上级 2634baa1
...@@ -27,7 +27,7 @@ ...@@ -27,7 +27,7 @@
"dayjs": "^1.11.10", "dayjs": "^1.11.10",
"echarts": "^5.5.0", "echarts": "^5.5.0",
"echarts-wordcloud": "^2.1.0", "echarts-wordcloud": "^2.1.0",
"element-plus": "^2.8.7", "element-plus": "^2.11.8",
"eventsource-parser": "^3.0.2", "eventsource-parser": "^3.0.2",
"file-saver": "^2.0.5", "file-saver": "^2.0.5",
"file-type": "^21.1.0", "file-type": "^21.1.0",
...@@ -192,9 +192,10 @@ ...@@ -192,9 +192,10 @@
} }
}, },
"node_modules/@element-plus/icons-vue": { "node_modules/@element-plus/icons-vue": {
"version": "2.3.1", "version": "2.3.2",
"resolved": "https://registry.npmjs.org/@element-plus/icons-vue/-/icons-vue-2.3.1.tgz", "resolved": "https://registry.npmjs.org/@element-plus/icons-vue/-/icons-vue-2.3.2.tgz",
"integrity": "sha512-XxVUZv48RZAd87ucGS48jPf6pKu0yV5UCg9f4FFwtrYxXOwWuVJo6wOvSLKEoMQKjv8GsX/mhP6UsC1lRwbUWg==", "integrity": "sha512-OzIuTaIfC8QXEPmJvB4Y4kw34rSXdCJzxcD1kFStBvr8bK6X1zQAYDo0CNMjojnfTqRQCJ0I7prlErcoRiET2A==",
"license": "MIT",
"peerDependencies": { "peerDependencies": {
"vue": "^3.2.0" "vue": "^3.2.0"
} }
...@@ -1671,14 +1672,16 @@ ...@@ -1671,14 +1672,16 @@
"integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA=="
}, },
"node_modules/@types/lodash": { "node_modules/@types/lodash": {
"version": "4.14.191", "version": "4.17.21",
"resolved": "https://registry.npmmirror.com/@types/lodash/-/lodash-4.14.191.tgz", "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.21.tgz",
"integrity": "sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ==" "integrity": "sha512-FOvQ0YPD5NOfPgMzJihoT+Za5pdkDJWcbpuj1DjaKZIr/gxodQjY/uWEFlTNqW2ugXHUiL8lRQgw63dzKHZdeQ==",
"license": "MIT"
}, },
"node_modules/@types/lodash-es": { "node_modules/@types/lodash-es": {
"version": "4.17.6", "version": "4.17.12",
"resolved": "https://registry.npmmirror.com/@types/lodash-es/-/lodash-es-4.17.6.tgz", "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.12.tgz",
"integrity": "sha512-R+zTeVUKDdfoRxpAryaQNRKk3105Rrgx2CFRClIgRGaqDTdjsm8h6IYA8ir584W3ePzkZfst5xIgDwYrlh9HLg==", "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==",
"license": "MIT",
"peer": true, "peer": true,
"dependencies": { "dependencies": {
"@types/lodash": "*" "@types/lodash": "*"
...@@ -3776,9 +3779,10 @@ ...@@ -3776,9 +3779,10 @@
} }
}, },
"node_modules/dayjs": { "node_modules/dayjs": {
"version": "1.11.10", "version": "1.11.19",
"resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz", "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.19.tgz",
"integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==" "integrity": "sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw==",
"license": "MIT"
}, },
"node_modules/de-indent": { "node_modules/de-indent": {
"version": "1.0.2", "version": "1.0.2",
...@@ -4005,24 +4009,23 @@ ...@@ -4005,24 +4009,23 @@
"license": "MIT" "license": "MIT"
}, },
"node_modules/element-plus": { "node_modules/element-plus": {
"version": "2.8.7", "version": "2.11.8",
"resolved": "https://registry.npmjs.org/element-plus/-/element-plus-2.8.7.tgz", "resolved": "https://registry.npmjs.org/element-plus/-/element-plus-2.11.8.tgz",
"integrity": "sha512-oGQyFRufFOgjd872tZc+T4xQAYLlX4hj6d3ixeY13L4fFNUuc1N49JHAqJGPda0tdx3qCnjceZoh1kqqj2+tXQ==", "integrity": "sha512-2wzSj2uubFU1f0t/gHkkE1d09mUgV18fSZX5excw3Ar6hyWcxph4E57U8dgYLDt7HwkKYv1BiqPyBdy0WqWlOA==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@ctrl/tinycolor": "^3.4.1", "@ctrl/tinycolor": "^3.4.1",
"@element-plus/icons-vue": "^2.3.1", "@element-plus/icons-vue": "^2.3.2",
"@floating-ui/dom": "^1.0.1", "@floating-ui/dom": "^1.0.1",
"@popperjs/core": "npm:@sxzz/popperjs-es@^2.11.7", "@popperjs/core": "npm:@sxzz/popperjs-es@^2.11.7",
"@types/lodash": "^4.14.182", "@types/lodash": "^4.17.20",
"@types/lodash-es": "^4.17.6", "@types/lodash-es": "^4.17.12",
"@vueuse/core": "^9.1.0", "@vueuse/core": "^9.1.0",
"async-validator": "^4.2.5", "async-validator": "^4.2.5",
"dayjs": "^1.11.3", "dayjs": "^1.11.18",
"escape-html": "^1.0.3",
"lodash": "^4.17.21", "lodash": "^4.17.21",
"lodash-es": "^4.17.21", "lodash-es": "^4.17.21",
"lodash-unified": "^1.0.2", "lodash-unified": "^1.0.3",
"memoize-one": "^6.0.0", "memoize-one": "^6.0.0",
"normalize-wheel-es": "^1.2.0" "normalize-wheel-es": "^1.2.0"
}, },
......
...@@ -34,7 +34,7 @@ ...@@ -34,7 +34,7 @@
"dayjs": "^1.11.10", "dayjs": "^1.11.10",
"echarts": "^5.5.0", "echarts": "^5.5.0",
"echarts-wordcloud": "^2.1.0", "echarts-wordcloud": "^2.1.0",
"element-plus": "^2.8.7", "element-plus": "^2.11.8",
"eventsource-parser": "^3.0.2", "eventsource-parser": "^3.0.2",
"file-saver": "^2.0.5", "file-saver": "^2.0.5",
"file-type": "^21.1.0", "file-type": "^21.1.0",
......
...@@ -17,5 +17,13 @@ watchEffect(() => { ...@@ -17,5 +17,13 @@ watchEffect(() => {
placeholder="请选择" placeholder="请选择"
style="width: 100%" style="width: 100%"
:options="options" :options="options"
:props="{ label: 'name', value: 'id', emitPath: false, checkStrictly: true }" /> :props="{
label: 'name',
value: 'id',
emitPath: false,
expandTrigger: 'hover',
checkStrictly: true,
checkOnClickNode: true,
showPrefix: false,
}" />
</template> </template>
...@@ -64,7 +64,15 @@ const handleSelect = (item) => { ...@@ -64,7 +64,15 @@ const handleSelect = (item) => {
placeholder="请输入关键词搜索商品分类" placeholder="请输入关键词搜索商品分类"
size="large" size="large"
:options="options" :options="options"
:props="{ label: 'name', value: 'id', emitPath: false }" :props="{
label: 'name',
value: 'id',
emitPath: false,
expandTrigger: 'hover',
checkStrictly: true,
checkOnClickNode: true,
showPrefix: false,
}"
style="width: 100%" /> style="width: 100%" />
</el-form-item> </el-form-item>
</div> </div>
......
...@@ -11,7 +11,7 @@ const form = inject('form') ...@@ -11,7 +11,7 @@ const form = inject('form')
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="售后政策" prop="info.after_sales_policy" :rules="[{ required: true, message: '请选择' }]"> <el-form-item label="售后政策" prop="info.after_sales_policy" :rules="[{ required: true, message: '请选择' }]">
<el-select v-model="form.info.after_sales_policy" style="width: 300px"> <el-select v-model="form.info.after_sales_policy" style="width: 300px" multiple>
<el-option v-for="item in afterSalesPolicy" :key="item.value" v-bind="item"></el-option> <el-option v-for="item in afterSalesPolicy" :key="item.value" v-bind="item"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
......
<script setup> <script setup>
import { Plus, UploadFilled, Picture, MagicStick } from '@element-plus/icons-vue' import { Plus, UploadFilled, Picture, MagicStick, CircleClose } from '@element-plus/icons-vue'
import { useFileDialog } from '@vueuse/core' import { useFileDialog } from '@vueuse/core'
import { upload } from '@/utils/upload' import { upload } from '@/utils/upload'
import dayjs from 'dayjs' import dayjs from 'dayjs'
...@@ -77,6 +77,16 @@ const handleChatSave = (url) => { ...@@ -77,6 +77,16 @@ const handleChatSave = (url) => {
updatedValue[index.value] = result updatedValue[index.value] = result
emit('update:modelValue', updatedValue) emit('update:modelValue', updatedValue)
} }
const handleRemove = (i) => {
if (Array.isArray(props.modelValue)) {
const updatedValue = [...props.modelValue]
updatedValue.splice(i, 1)
emit('update:modelValue', updatedValue)
} else {
emit('update:modelValue', '')
}
}
</script> </script>
<template> <template>
<div class="upload-wrapper"> <div class="upload-wrapper">
...@@ -100,6 +110,7 @@ const handleChatSave = (url) => { ...@@ -100,6 +110,7 @@ const handleChatSave = (url) => {
<a :href="props.modelValue[i]?.url" target="_blank"> <a :href="props.modelValue[i]?.url" target="_blank">
<img :src="props.modelValue[i]?.url" /> <img :src="props.modelValue[i]?.url" />
</a> </a>
<i class="el-icon delete-icon" @click.stop="handleRemove(i)"><CircleClose /></i>
</template> </template>
<template v-else> <template v-else>
<div class="upload-item-uploader" @click="handleOpen(i)"> <div class="upload-item-uploader" @click="handleOpen(i)">
...@@ -134,6 +145,7 @@ const handleChatSave = (url) => { ...@@ -134,6 +145,7 @@ const handleChatSave = (url) => {
<video :src="props.modelValue" v-if="isVideo"></video> <video :src="props.modelValue" v-if="isVideo"></video>
<img :src="props.modelValue" v-else /> <img :src="props.modelValue" v-else />
</a> </a>
<i class="el-icon delete-icon" @click.stop="handleRemove()"><CircleClose /></i>
</template> </template>
<template v-else> <template v-else>
<div class="upload-item-uploader" @click="handleOpen"> <div class="upload-item-uploader" @click="handleOpen">
...@@ -213,4 +225,24 @@ const handleChatSave = (url) => { ...@@ -213,4 +225,24 @@ const handleChatSave = (url) => {
align-items: center; align-items: center;
} }
} }
.delete-icon {
position: absolute;
top: 5px;
right: 5px;
color: #f56c6c;
font-size: 18px;
cursor: pointer;
z-index: 10;
background: #fff;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
box-shadow: 0 0 4px rgba(0, 0, 0, 0.2);
&:hover {
color: #ff0000;
transform: scale(1.1);
}
}
</style> </style>
...@@ -33,7 +33,7 @@ const form = reactive({ ...@@ -33,7 +33,7 @@ const form = reactive({
reference_price: '', // 参考价格 reference_price: '', // 参考价格
order_stock_count: '1', order_stock_count: '1',
shipping_template: '', // 运费模板 shipping_template: '', // 运费模板
after_sales_policy: '', // 售后政策 after_sales_policy: [], // 售后政策
specs: [], // 规格列表 specs: [], // 规格列表
sku: [], // SKU列表(通过规格笛卡尔积生成) sku: [], // SKU列表(通过规格笛卡尔积生成)
}, },
......
...@@ -84,9 +84,9 @@ function handleSuccess(file) { ...@@ -84,9 +84,9 @@ function handleSuccess(file) {
<el-form-item label="关联直播" prop="live_practice_id"> <el-form-item label="关联直播" prop="live_practice_id">
<el-select v-model="form.live_practice_id" style="width: 100%" placeholder="请选择" filterable> <el-select v-model="form.live_practice_id" style="width: 100%" placeholder="请选择" filterable>
<el-option <el-option
v-for="item in options" v-for="(item, index) in options"
:key="item.id" :key="item.id"
:label="item.live_commodity_title" :label="`${index + 1} - ${item.live_commodity_title}`"
:value="item.id"></el-option> :value="item.id"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
......
...@@ -23,58 +23,59 @@ const form = reactive({ ...@@ -23,58 +23,59 @@ const form = reactive({
selling_point: '', selling_point: '',
marketing_campaign: '', marketing_campaign: '',
duration: liveTalkDuration[0]?.value || '10', duration: liveTalkDuration[0]?.value || '10',
content: ` <p> content: '',
<span // content: ` <p>
style=" // <span
padding: 0 5px; // style="
display: inline-block; // padding: 0 5px;
background-color: rgba(25, 102, 255, 0.08); // display: inline-block;
color: rgb(25, 102, 255); // background-color: rgba(25, 102, 255, 0.08);
" // color: rgb(25, 102, 255);
>1.开场欢迎:</span> // "
</p> // >1.开场欢迎:</span>
<p> // </p>
"大家好,欢迎来到我的直播间!我是[你的名字],今天我们将一起分享/探讨/体验[直播主题]。如果你喜欢我们今天的内容,别忘了点赞和关注哦!" // <p>
</p> // "大家好,欢迎来到我的直播间!我是[你的名字],今天我们将一起分享/探讨/体验[直播主题]。如果你喜欢我们今天的内容,别忘了点赞和关注哦!"
<p> // </p>
<span // <p>
style=" // <span
padding: 0 5px; // style="
display: inline-block; // padding: 0 5px;
background-color: rgba(25, 102, 255, 0.08); // display: inline-block;
color: rgb(25, 102, 255); // background-color: rgba(25, 102, 255, 0.08);
" // color: rgb(25, 102, 255);
>2.互动提问:</span> // "
</p> // >2.互动提问:</span>
<p> // </p>
"我看到评论区有很多小伙伴在问我关于[话题]的问题,我现在就来一一为大家解答。如果你也有问题,可以在评论区留言,我会尽快回复大家!" // <p>
</p> // "我看到评论区有很多小伙伴在问我关于[话题]的问题,我现在就来一一为大家解答。如果你也有问题,可以在评论区留言,我会尽快回复大家!"
<p> // </p>
<span // <p>
style=" // <span
padding: 0 5px; // style="
display: inline-block; // padding: 0 5px;
background-color: rgba(25, 102, 255, 0.08); // display: inline-block;
color: rgb(25, 102, 255); // background-color: rgba(25, 102, 255, 0.08);
" // color: rgb(25, 102, 255);
>3.产品介绍:</span> // "
</p> // >3.产品介绍:</span>
<p> // </p>
"接下来我要给大家介绍的这款产品,它的特点是[特点],使用起来非常[方便/舒适/有效]。我自己也是它的忠实粉丝,今天就来给大家详细展示一下它的使用方法和效果。" // <p>
</p> // "接下来我要给大家介绍的这款产品,它的特点是[特点],使用起来非常[方便/舒适/有效]。我自己也是它的忠实粉丝,今天就来给大家详细展示一下它的使用方法和效果。"
<p> // </p>
<span // <p>
style=" // <span
padding: 0 5px; // style="
display: inline-block; // padding: 0 5px;
background-color: rgba(25, 102, 255, 0.08); // display: inline-block;
color: rgb(25, 102, 255); // background-color: rgba(25, 102, 255, 0.08);
" // color: rgb(25, 102, 255);
>4.引导互动:</span> // "
</p> // >4.引导互动:</span>
<p> // </p>
"我知道大家都很聪明,那么我来出一个小问题考考大家,第一个答对的小伙伴将获得我们的小礼物一份,准备好了吗?问题是……" // <p>
</p>`, // "我知道大家都很聪明,那么我来出一个小问题考考大家,第一个答对的小伙伴将获得我们的小礼物一份,准备好了吗?问题是……"
// </p>`,
}) })
watchEffect(() => { watchEffect(() => {
if (props.data) Object.assign(form, props.data) if (props.data) Object.assign(form, props.data)
......
...@@ -121,14 +121,17 @@ useIntervalFn(() => { ...@@ -121,14 +121,17 @@ useIntervalFn(() => {
>直播视频回放 >直播视频回放
</router-link> </router-link>
</el-button> </el-button>
<template v-if="row.ai_status == '已完成'">
<br /> <br />
<el-button text type="primary" v-if="row.ai_status == '已完成'"> <el-button text type="primary">
<router-link :to="{ path: 'test/view', query: { ...$route.query, id: data.id, record_id: row.id } }" <router-link :to="{ path: 'test/view', query: { ...$route.query, id: data.id, record_id: row.id } }"
>查看AI评价</router-link >查看AI评价</router-link
> >
</el-button> </el-button>
</template>
<br /> <br />
<ImprovementPlan :id="row.id" :content="row.improvement_plan" v-if="row.id" /> <ImprovementPlan :id="row.id" :content="row.improvement_plan" v-if="row.id" />
<template v-if="row.upload_way == '2'">
<br /> <br />
<el-button <el-button
type="primary" type="primary"
...@@ -139,6 +142,7 @@ useIntervalFn(() => { ...@@ -139,6 +142,7 @@ useIntervalFn(() => {
>上传直播视频</el-button >上传直播视频</el-button
> >
</template> </template>
</template>
</AppList> </AppList>
</el-dialog> </el-dialog>
</template> </template>
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论