Files
aida_front/src/component/home/batchGeneration/createCloud.vue

748 lines
21 KiB
Vue
Raw Normal View History

2025-04-16 10:43:54 +08:00
<template>
2025-04-16 15:08:59 +08:00
<div class="createCloud" ref="createCloud"></div>
<a-modal
class="createCloud_modal generalModel"
v-model:visible="operationsModal"
:footer="null"
:get-container="() => $refs.createCloud"
width="50%"
:height="'77rem'"
:maskClosable="false"
:centered="true"
:closable="false"
:mask="true"
wrapClassName="#app"
:keyboard="false"
>
<div class="generalModel_btn">
<div class="generalModel_closeIcon" @click.stop="cancelDsign()">
<svg width="46" height="46" viewBox="0 0 46 46" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="23" cy="23" r="23" fill="white" fill-opacity="0.3"/>
2025-04-23 09:39:24 +08:00
<rect x="32.5063" y="12" width="3" height="29" rx="1.5" transform="rotate(45 32.5063 12)" fill="#000"/>
<rect x="34.6274" y="32.5059" width="3" height="29" rx="1.5" transform="rotate(135 34.6274 32.5059)" fill="#000"/>
2025-04-16 15:08:59 +08:00
</svg>
</div>
</div>
<div class="modal_title_text">
2025-06-18 11:05:23 +08:00
<div>Create Batch Generation Tasks</div>
2025-04-16 15:08:59 +08:00
</div>
<div class="allUserPoeration_center admin_page">
<div class="admin_state_item">
<span>Task type <span>*</span></span>
2025-04-16 15:08:59 +08:00
<a-select
v-model:value="buildType"
allowClear
2025-04-23 09:39:24 +08:00
style="width: 200px"
2025-04-16 15:08:59 +08:00
placeholder="Please select"
:options="cloudList"
2025-04-23 09:39:24 +08:00
@change="changeBuildType"
2025-04-16 15:08:59 +08:00
></a-select>
</div>
2025-06-09 10:25:54 +08:00
<div class="admin_state_item">
<span>Project <span v-show="buildType == 'SERIES_DESIGN' || buildType == 'SINGLE_DESIGN'">*</span></span>
<a-select
v-model:value="projectData"
show-search
allowClear
:show-arrow="false"
:default-active-first-option="false"
:not-found-content="null"
:filter-option="false"
style="width: 16rem"
placeholder="Please select"
:options="objectList"
@search="getHistoryProjectList"
2025-06-18 11:05:23 +08:00
@change="changeProject"
2025-06-09 10:25:54 +08:00
>
<template #option="{ value: val, label, icon,updateTime }">
<span :title="updateTime.replace('T', ' ')">{{ label }}</span>
</template>
</a-select>
</div>
2025-06-18 11:05:23 +08:00
<div class="admin_state_item">
<span>Name <span>*</span></span>
<input
v-model="porjectName"
:placeholder="placeholder"
@focus="focus"
@blur="blur"
type="text"
style="width: 200px"
/>
</div>
<div class="admin_state_item" v-show="buildType">
<span>Quantity <span>*</span></span>
2025-04-16 15:08:59 +08:00
<input
2025-04-23 09:39:24 +08:00
v-model="numberOfImages"
placeholder="Please enter number"
2025-04-16 15:08:59 +08:00
type="text"
2025-04-23 09:39:24 +08:00
style="width: 200px"
@input="changeNumberOfImages"
2025-04-16 15:08:59 +08:00
/>
</div>
2025-04-23 09:39:24 +08:00
<!-- toProductimg -->
2025-06-09 10:25:54 +08:00
<div v-show="buildType == 'TO_PRODUCT_IMAGE'" class="admin_state_item ">
2025-04-23 09:39:24 +08:00
<span>{{$t('ProductImg.Similarity')}}</span>
<div class="sliderAndImput" style="width: 200px">
2025-06-18 11:05:23 +08:00
<!-- <a-slider class="system_silder"
2025-04-23 09:39:24 +08:00
v-model:value="similarity"
2025-06-09 10:25:54 +08:00
range
2025-04-23 09:39:24 +08:00
:step="5"
>
2025-06-18 11:05:23 +08:00
</a-slider> -->
<div style="display: flex;">
<input type="number" readonly v-model="similarity[0]">
<div style="margin: 0 1rem;">-</div>
<input type="number" readonly v-model="similarity[1]">
</div>
2025-04-23 09:39:24 +08:00
</div>
</div>
2025-06-09 10:25:54 +08:00
<div v-show="buildType == 'RELIGHT'" class="admin_state_item ">
2025-04-23 09:39:24 +08:00
<span>{{$t('ProductImg.RelightDirection')}}</span>
<a-select style="width: 200px" v-model:value="relightDirection" :options="relightDirectionList"></a-select>
</div>
2025-06-09 10:25:54 +08:00
<div v-show="buildType == 'RELIGHT'" class="admin_state_item ">
2025-04-23 09:39:24 +08:00
<span>{{$t('ProductImg.Highlight')}}</span>
<div class="sliderAndImput" style="width: 200px">
<a-slider class="system_silder"
v-model:value="brightenValue"
:tooltipVisible="false"
:max="3"
:min="1"
:step="0.1"
>
</a-slider>
<input type="number" readonly v-model="brightenValue">
</div>
</div>
2025-06-09 10:25:54 +08:00
<div v-show="buildType == 'TO_PRODUCT_IMAGE' || buildType == 'relight'" class="admin_state_item">
2025-04-23 09:39:24 +08:00
<span>Keyword</span>
2025-04-16 15:08:59 +08:00
<input
2025-04-23 09:39:24 +08:00
v-model="generateText"
:placeholder="$t('Generate.inputContent1')"
2025-04-16 15:08:59 +08:00
type="text"
2025-04-23 09:39:24 +08:00
style="width: 200px"
2025-04-16 15:08:59 +08:00
/>
</div>
2025-04-23 09:39:24 +08:00
2025-06-09 10:25:54 +08:00
<!-- <div class="selectImgList generalScroll" v-mousewheel v-show="exhibitionImgList.length>0">
2025-04-23 09:39:24 +08:00
<div v-for="item in exhibitionImgList" class="item">
<img :src="item.designOutfitUrl||item.url" alt="">
</div>
2025-06-09 10:25:54 +08:00
</div> -->
<div class="productImg_content_item_imgBox generalScroll upload_item" v-if="buildType && buildType != 'SERIES_DESIGN' && buildType != 'SINGLE_DESIGN'" v-mousewheel>
2025-06-18 11:05:23 +08:00
<div class="content_item_imgBox_itemImg" v-for="item in uploadElement" :key="item">
<div
class="imgBox"
@click="()=>item.isChecked = !item.isChecked"
>
<img :class="[item?.isChecked?'active':'']" :src="item?.url" class="upload_img"/>
<a-checkbox v-model:checked="item.isChecked"></a-checkbox>
</div>
</div>
2025-06-09 10:25:54 +08:00
<div class="content_item_imgBox_itemImg" v-for="(file, index) in fileList" :key="file">
2025-06-18 11:05:23 +08:00
<div class="upload_file_item_content" v-show="file?.status === 'uploading'" style="display: flex;align-items: center;">
<a-spin size="large" />
2025-06-09 10:25:54 +08:00
</div>
<div
class="imgBox"
v-show="file?.status === 'done'"
@click="()=>file.isChecked = !file.isChecked"
>
<img :class="[file?.isChecked?'active':'']" :src="file?.imgUrl" class="upload_img"/>
<a-checkbox v-model:checked="file.isChecked"></a-checkbox>
</div>
</div>
<div class="upload_file_item upload_component">
<!-- :action="uploadUrl + '/api/history/toProductImageElementUpload'" -->
<a-upload
:action="getUploadUrl() + '/api/history/toProductImageElementUpload'"
list-type="picture-card"
:capture="null"
:headers="{ Authorization: getCookie('token') }"
:before-upload="beforeUpload"
:data="{
projectId:2061,
}"
v-model:file-list="fileList"
:multiple="true"
:maxCount="8"
accept=".jpg,.png,.jpeg,.bmp"
@change="(file) => fileUploadChange(file)"
>
<div
class="upload_tip_block"
>
<i class="fi fi-br-upload"></i>
<!-- <img class="upload_img_icon" src="@/assets/images/homePage/add_file.png"> -->
</div>
</a-upload>
</div>
2025-04-23 09:39:24 +08:00
2025-06-09 10:25:54 +08:00
</div>
2025-04-23 09:39:24 +08:00
<!-- <div class="admin_state_item" style="width: 100%;">
<span style="margin: 0;">Generation time19min</span>
</div> -->
<div v-show="buildType" class="admin_state_item" style="width: 100%;">
2025-04-23 09:39:24 +08:00
<span style="margin: 0;">Cost credit{{credits * numberOfImages}}</span>
2025-04-16 15:08:59 +08:00
</div>
</div>
<div class="allUserPoeration_btn admin_page">
<!-- <div class="admin_search_item" @click="cancelDsign">
2025-04-16 15:08:59 +08:00
Close
</div> -->
2025-04-16 15:08:59 +08:00
<div class="admin_search_item" @click="setOk">
OK
</div>
2025-04-16 10:43:54 +08:00
2025-04-16 15:08:59 +08:00
</div>
</a-modal>
<div class="mark_loading" v-show="loadingShow">
<a-spin size="large" />
2025-04-16 10:43:54 +08:00
</div>
</template>
2025-04-16 15:08:59 +08:00
<script>
2025-06-09 10:25:54 +08:00
import { defineComponent, computed, reactive, watch, onMounted, h, nextTick, toRefs } from "vue";
import { LoadingOutlined } from "@ant-design/icons-vue";
2025-04-16 10:43:54 +08:00
import { Https } from "@/tool/https";
2025-04-16 15:08:59 +08:00
import { Modal, message } from "ant-design-vue";
2025-06-09 10:25:54 +08:00
import { getCookie,setCookie } from "@/tool/cookie";
2025-04-16 15:08:59 +08:00
import { ExclamationCircleOutlined } from "@ant-design/icons-vue";
2025-06-09 10:25:54 +08:00
import { getUploadUrl,isMoible } from "@/tool/util";
2025-04-16 15:08:59 +08:00
import dayjs, { Dayjs } from 'dayjs';
2025-04-23 09:39:24 +08:00
import { useStore } from "vuex";
import { useI18n } from "vue-i18n";
import {getMinioUrl} from '@/tool/util'
2025-04-16 15:08:59 +08:00
const md5 = require("md5");
2025-04-16 10:43:54 +08:00
export default defineComponent({
2025-04-16 15:08:59 +08:00
components: {
},
2025-04-16 10:43:54 +08:00
props:{
2025-04-16 15:08:59 +08:00
cloudList:{
type:Array,
default:[]
}
2025-04-16 10:43:54 +08:00
},
2025-04-23 09:39:24 +08:00
emits: ['getContentList'],
2025-04-16 15:08:59 +08:00
setup(props,{emit}) {
2025-04-23 09:39:24 +08:00
const store = useStore();
2025-04-16 15:08:59 +08:00
let operations = reactive({
operationsModal:false,
loadingShow:false,
2025-04-16 10:43:54 +08:00
})
2025-04-16 15:08:59 +08:00
let operationsData = reactive({
buildType:'',
numberOfImages:'',
2025-04-23 09:39:24 +08:00
credits:0,
exhibitionImgList:[],//选择的图片
2025-06-09 10:25:54 +08:00
projectData:null,//批量id
objectList:[],
2025-06-18 11:05:23 +08:00
porjectName:'',//任务名字
2025-04-23 09:39:24 +08:00
//toProduct
generateText:'',//输入的内容
2025-06-18 11:05:23 +08:00
similarity:[20,40],
2025-04-23 09:39:24 +08:00
brightenValue:1,//亮度
relightDirection:'Right Light',//打光方向
relightDirectionList:[
{
value:'Right Light',
label:useI18n().t('ProductImg.RightLight')
},{
value:'Left Light',
label:useI18n().t('ProductImg.LeftLight')
},{
value:'Top Light',
label:useI18n().t('ProductImg.TopLight')
},{
value:'Bottom Light',
label:useI18n().t('ProductImg.BottomLight')
}
2025-06-09 10:25:54 +08:00
],
fileList:[],
2025-06-18 11:05:23 +08:00
uploadElement:[],
placeholder:'',
2025-04-16 10:43:54 +08:00
})
2025-06-18 11:05:23 +08:00
const getUploadElement = ()=>{
operations.loadingShow = true
let value = {
id:operationsData.projectData,
moduleList:['uploadElement']
}
operationsData.placeholder = 'Batch_' + setPlaceholder()
Https.axiosPost(Https.httpUrls.getModuleContent,value).then(async (rv)=>{
operationsData.uploadElement = rv.uploadElement
operations.loadingShow = false
}).catch((err)=>{
operations.loadingShow = false
})
}
2025-06-09 10:25:54 +08:00
let init = (projectData,buildType)=>{
2025-04-16 15:08:59 +08:00
operations.operationsModal = true
2025-06-18 11:05:23 +08:00
clearData()
if(projectData?.id){
operationsData.projectData = {label:projectData.name,value:projectData.id}
getUploadElement()
}
2025-06-09 10:25:54 +08:00
if(buildType.value)operationsData.buildType = buildType
2025-04-16 10:43:54 +08:00
}
2025-06-18 11:05:23 +08:00
const clearData = ()=>{
operationsData.porjectName = ''
operationsData.generateText = ''
operationsData.similarity = [20,40]
operationsData.brightenValue = 1
operationsData.fileList = []
operationsData.uploadElement = []
}
const changeProject = ()=>{
getUploadElement()
}
2025-04-23 09:39:24 +08:00
const changeBuildType = ()=>{
2025-06-09 10:25:54 +08:00
// operationsData.exhibitionImgList = []
operationsData.projectData = null
2025-04-23 09:39:24 +08:00
props.cloudList.forEach((item)=>{
if(item.value == operationsData.buildType){
operationsData.credits = item.consumption
}
})
2025-06-09 10:25:54 +08:00
getHistoryProjectList()
}
2025-06-18 11:05:23 +08:00
const getGenerateCloudImgList = (type)=>{
2025-06-09 10:25:54 +08:00
let list = []
2025-06-18 11:05:23 +08:00
if(type == 'SINGLE_DESIGN'|| type == 'SERIES_DESIGN')return list
let selectList = []
let fileList = operationsData.fileList.filter((item)=>item.isChecked)
let uploadElement = operationsData.uploadElement.filter((item)=>item.isChecked)
if(fileList)selectList.push(...fileList)
if(uploadElement)selectList.push(...uploadElement)
2025-06-09 10:25:54 +08:00
selectList.forEach((item)=>{
let obj = {
}
2025-06-18 11:05:23 +08:00
if(type == 'POSE_TRANSFER'){
2025-06-09 10:25:54 +08:00
obj = {
poseId:1,
productImage:getMinioUrl(item.imgUrl)
}
}else{
obj = {
elementId:item.id,
2025-06-18 11:05:23 +08:00
elementType:item.type||'ProductElement'
2025-06-09 10:25:54 +08:00
}
}
list.push(obj)
})
return list
2025-04-23 09:39:24 +08:00
}
let getPorductImg = ()=>{
let modularData = store.state.UploadFilesModule.modularData
let list = []
if(operationsData.buildType == 'toProductImage' || operationsData.buildType == 'relight'){
let productOrRelight = []
if(operationsData.buildType == 'toProductImage')productOrRelight = modularData.design.likeData
if(operationsData.buildType == 'relight')productOrRelight = modularData.toProduct
productOrRelight.forEach((item)=>{
if(!item.id)return
let obj = {
"createTime": "",
"elementId": 0,
"elementType": "",
"id": 0,
"isLike": 0,
"taskId": "",
"toProductImageRecordId": 0,
"url": "",
}
obj.elementId = item.designOutfitId
obj.elementType = 'DesignOutfit'
if(operationsData.buildType == 'relight'){
obj.elementId = item.id
obj.elementType = 'ToProductImage'
}
list.push(obj)
})
}
return list
}
2025-06-09 10:25:54 +08:00
const getImageStrength = (num) => {
let imageStrength = num == 100? 95 :num
2025-04-23 09:39:24 +08:00
return imageStrength;
};
const getPoseTransformData = ()=>{
let list = []
let toProduct = store.state.UploadFilesModule.modularData.toProduct
toProduct.forEach((item)=>{
let obj = {
poseId:1,
productImage:getMinioUrl(item.url)
}
list.push(obj)
})
return list
}
2025-04-16 15:08:59 +08:00
let setAddData = ()=>{
2025-06-09 10:25:54 +08:00
let buildTypeCorresponding = {
SINGLE_DESIGN:"design",
SERIES_DESIGN:"design",
TO_PRODUCT_IMAGE:"toProductImage",
RELIGHT:"relight",
2025-06-11 15:08:17 +08:00
POSE_TRANSFER:"poseTransfer"
2025-06-09 10:25:54 +08:00
}
2025-04-16 15:08:59 +08:00
return {
2025-06-09 10:25:54 +08:00
"buildType": buildTypeCorresponding[operationsData.buildType],
2025-04-23 09:39:24 +08:00
nums: operationsData.numberOfImages,
2025-06-09 10:25:54 +08:00
projectId: operationsData.projectData,
2025-06-18 11:05:23 +08:00
name:operationsData.porjectName || operationsData.projectData,
2025-04-23 09:39:24 +08:00
//productimg
toProductImage:{
prompt:operationsData.generateText,//输入的内容
2025-06-18 11:05:23 +08:00
toProductImageVOList:getGenerateCloudImgList(operationsData.buildType),//选择的图片
2025-06-09 10:25:54 +08:00
// toProductImageVOList:getPorductImg(),//选择的图片
projectId: operationsData.projectData,
2025-04-23 09:39:24 +08:00
direction:operationsData.relightDirection,//打光方向
brightenValue:operationsData.brightenValue,
imageStrength:(100 - getImageStrength())/100,
2025-06-09 10:25:54 +08:00
imageStrengthMin:(100 - getImageStrength(operationsData.similarity[1]))/100,
imageStrengthMax:(100 - getImageStrength(operationsData.similarity[0]))/100,
2025-04-23 09:39:24 +08:00
},
//poseTransform
2025-06-09 10:25:54 +08:00
// poseTransform:getPoseTransformData(),
2025-06-18 11:05:23 +08:00
poseTransform:operationsData.buildType == 'POSE_TRANSFER'?getGenerateCloudImgList('POSE_TRANSFER'):[],
2025-06-09 10:25:54 +08:00
private: operationsData.projectData,
ToProductImageDTO: operationsData.projectData,
2025-04-16 15:08:59 +08:00
}
2025-04-16 10:43:54 +08:00
}
2025-04-16 15:08:59 +08:00
let cancelDsign = ()=>{
2025-04-23 09:39:24 +08:00
operationsData.buildType=''
operationsData.numberOfImages=''
2025-04-16 15:08:59 +08:00
operations.operationsModal = false
}
let setOk = ()=>{
let data
data = setAddData()
2025-06-09 10:25:54 +08:00
if(operationsData.buildType == 'TO_PRODUCT_IMAGE'){
if(data.toProductImage.toProductImageVOList.length == 0)return message.warning("Please upload the picture first.")
// if(data.toProductImage.toProductImageVOList.length == 0)return message.warning("You need to go to the Design module and generate a design result first before you can use the 'To Product Image' cloud generation feature.")
}else if(operationsData.buildType == 'RELIGHT'){
if(data.toProductImage.toProductImageVOList.length == 0)return message.warning("Please upload the picture first.")
// if(data.toProductImage.toProductImageVOList.length == 0)return message.warning("You need to go to the 'To Product Image' module and generate a result first before you can use the 'Relight' cloud generation feature.")
}else if(operationsData.buildType == 'POSE_TRANSFER'){
if(data.poseTransform.length == 0)return message.warning("Please upload the picture first.")
// if(data.poseTransform.length == 0)return message.warning("You must first generate results in the 'To Product Image' module before you can use the 'Transfer Pose' cloud generation feature.")
2025-04-23 09:39:24 +08:00
}
2025-06-09 10:25:54 +08:00
if(operationsData.buildType == 'DESIGN' && !operationsData.projectData)return message.warning('Please select a project')
2025-06-18 11:05:23 +08:00
if(!data.buildType || !data.nums || !data.name || (operationsData.buildType == 'DESIGN' && !operationsData.projectData))return message.warning('Please check the input box marked with *')
2025-04-23 09:39:24 +08:00
operations.loadingShow = true
Https.axiosPost(Https.httpUrls.designCloud, data).then(
2025-04-16 15:08:59 +08:00
(rv) => {
if (rv) {
2025-04-23 09:39:24 +08:00
operations.loadingShow = false
2025-04-16 15:08:59 +08:00
cancelDsign()
2025-06-11 15:08:17 +08:00
let porjectData = operationsData.objectList.find(item => item.id === operationsData.projectData)
let project = {
value:porjectData?.id,
label:porjectData?.name,
}
emit('getContentList',project)
2025-04-16 15:08:59 +08:00
}
2025-04-23 09:39:24 +08:00
}).catch((error) => {
operations.loadingShow = false
2025-04-16 15:08:59 +08:00
})
}
const changeNumberOfImages = ()=>{
if(operationsData.buildType =='relight' || operationsData.buildType == 'poseTransfer'){
if(operationsData.exhibitionImgList.length < Number(operationsData.numberOfImages)){
operationsData.numberOfImages = operationsData.exhibitionImgList.length
}
}
}
2025-06-09 10:25:54 +08:00
let getHistoryTime = null
const getHistoryProjectList = (event)=>{
clearTimeout(getHistoryTime)
if(!event && !operationsData.buildType){
operationsData.objectList = []
return
}
getHistoryTime = setTimeout(()=>{
let value = {
projectName:event,
page:1,
size:9999,
asc:0,
process:operationsData.buildType,
}
Https.axiosPost(Https.httpUrls.historyProject,value).then((rv)=>{
rv.content.forEach((item)=>{
item.value = item.id
item.label = item.name
})
operationsData.objectList = rv.content
})
},1000)
}
let beforeUpload = async (file)=>{
const isJpgOrPng =
file.type === "image/jpeg" ||
file.type === "image/png" ||
file.type === "image/jpg" ||
file.type === "image/bmp";
if (!isJpgOrPng) {
message.info(useI18n().t('MoodboardUpload.jsContent3'));
}
const isLt2M = file.size / 1024 / 1024 < 5;
if (!isLt2M) {
message.info(useI18n().t('MoodboardUpload.jsContent4'));
}
return (isJpgOrPng && isLt2M) || Upload.LIST_IGNORE;
}
let fileUploadChange = (data)=> {
let file = data.file;
let bor = true
if (file.status === "done") {
let res = JSON.parse(file.xhr.response);
if(res.errCode == 0){
file.imgUrl = res.data.url;
file.id = res.data.id
file.isChecked = true
file.type = 'ProductElement'
operationsData.fileList.filter((v) => v.status === "done");
}else{
bor = false
}
// this.showFileList = productImgData.fileList
} else if (file.status === "error") {
bor = false
}
}
2025-06-18 11:05:23 +08:00
const setPlaceholder = ()=>{
if(!operationsData.projectData)return ''
let index = operationsData.objectList.findIndex(item => item.id === operationsData.projectData)
return operationsData.objectList[index].name
}
const focus = ()=>{
if(operationsData.porjectName)return
operationsData.porjectName = operationsData.placeholder
}
const blur = ()=>{
if(operationsData.porjectName != operationsData.placeholder)return
operationsData.porjectName = ''
}
2025-04-16 15:08:59 +08:00
return {
...toRefs(operations),
...toRefs(operationsData),
cancelDsign,
init,
2025-06-18 11:05:23 +08:00
changeProject,
2025-04-16 15:08:59 +08:00
focus,
blur,
setOk,
2025-04-23 09:39:24 +08:00
changeBuildType,
changeNumberOfImages,
2025-06-09 10:25:54 +08:00
getHistoryProjectList,
beforeUpload,
fileUploadChange,
getUploadUrl,
getCookie,
2025-04-16 15:08:59 +08:00
};
},
data() {
return {
2025-06-09 10:25:54 +08:00
indicator: h(LoadingOutlined, {
style: {
fontSize: "2.4rem",
},
spin: true,
}),
2025-04-16 15:08:59 +08:00
};
},
mounted() {},
methods: {
},
2025-04-23 09:39:24 +08:00
directives:{
mousewheel:{
mounted (el) {
el.addEventListener('mouseenter', (e)=> {
if(el.scrollWidth > el.clientWidth){
el.parentElement.style.overflowY = 'hidden';
}
});
// 鼠标移出事件
el.addEventListener('mouseleave', ()=> {
el.parentElement.style.overflowY = 'auto';
});
el.addEventListener('wheel',(e)=>{
let num = 0
if(e.deltaY > 0){
num = 25
}else{
num = -25
}
el.scrollBy(num, 0);
},{ passive: true })
}
},
},
2025-04-16 15:08:59 +08:00
});
2025-04-16 10:43:54 +08:00
</script>
<style lang="less" scoped>
2025-04-23 09:39:24 +08:00
:deep(.ant-modal-mask){
background: rgba(0, 0, 0, 0.2);
}
2025-04-16 15:08:59 +08:00
:deep(.createCloud_modal){
2025-04-23 09:39:24 +08:00
2025-04-16 15:08:59 +08:00
.ant-modal-body{
display: flex;
flex-direction: column;
}
}
</style>
<style lang="less" scoped>
.createCloud_modal {
.closeIcon {
z-index: 2;
}
2025-06-09 10:25:54 +08:00
.productImg_content_item_imgBox{
display: flex;
overflow-x: auto;
width: auto;
margin-bottom: 2rem;
align-items: center;
flex-wrap: nowrap;
width: 100%;
.content_item_imgBox_itemImg{
display: flex;
margin-right: 1rem;
position: relative;
height: 20rem;
max-height: 100%;
position: relative;
flex-shrink: 0;
img{
height: 100%;
width: 100%;
cursor: pointer;
object-fit: contain;
opacity: .5;
&.active{
opacity: 1;
}
}
.ant-checkbox-wrapper{
position: absolute;
right: 0;
top: 0;
}
&.content_item_imgBox_itemImg:hover{
.content_item_imgBox_itemImg_delete{
display: block;
cursor: pointer;
}
}
.content_item_imgBox_itemImg_delete{
display: none;
width: 100%;
height: 100%;
background: rgba(0,0,0,.2);
position: absolute;
i{
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%,-50%);
color: #fff;
}
}
}
:deep(.upload_file_item){
flex-shrink: 0;
}
.content_item_imgBox_itemImg:last-child{
margin-right: 0;
}
}
2025-04-16 15:08:59 +08:00
.allUserPoeration_btn{
display: flex;
flex-direction: row;
height: auto;
justify-content: flex-end;
padding: 1rem 0;
.admin_search_item{
margin-bottom: 0;
}
}
.allUserPoeration_center{
flex: 1;
overflow-y: auto;
flex-direction: row;
flex-wrap: wrap;
align-content: flex-start;
2025-04-23 09:39:24 +08:00
padding: 0 2rem;
> .selectImgList{
width: 100%;
display: flex;
overflow-x: auto;
align-items: center;
flex-wrap: nowrap;
height: 20rem;
margin: 2rem 0;
> .item{
height: 100%;
margin-right: 1rem;
&:last-child{
margin-right: 0;
}
> img{
height: 100%;
}
}
//
}
2025-04-16 15:08:59 +08:00
> .admin_state_item{
width: auto;
// width: 100%;
display: flex;
flex-direction: column;
align-items: flex-start;
> span{
text-align: left;
margin: 0;
margin-bottom: 1.5rem;
font-weight: 600;
}
:deep(> .ant-select > .ant-select-selector){
border-radius: 1.6rem;
}
> input{
border-radius: 1.6rem;
}
2025-04-23 09:39:24 +08:00
>.sliderAndImput{
display: flex;
align-items: center;
flex: 1;
:deep(> .ant-slider){
// border-radius: 1.6rem;
flex: 1;
}
2025-06-18 11:05:23 +08:00
>div{
input{
border-radius: 1.6rem;
width: 5rem;
padding: 4px 11px 4px;
margin-left: 1rem;
height: 100%;
text-align: center;
}
2025-04-23 09:39:24 +08:00
}
2025-06-18 11:05:23 +08:00
2025-04-23 09:39:24 +08:00
}
2025-04-16 15:08:59 +08:00
}
2025-04-16 10:43:54 +08:00
}
2025-04-16 15:08:59 +08:00
}
2025-04-16 10:43:54 +08:00
</style>