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

chore: update

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