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" >
2025-04-23 17:30:42 +08:00
< 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 >
2025-04-23 17:30:42 +08:00
< 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"
2025-04-23 17:30:42 +08:00
@ 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 time : 19 min < / span >
< / div > -- >
2025-04-23 17:30:42 +08:00
< 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" >
2025-04-23 17:30:42 +08:00
<!-- < div class = "admin_search_item" @click ="cancelDsign" >
2025-04-16 15:08:59 +08:00
Close
2025-04-23 17:30:42 +08:00
< / 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
} )
}
2025-04-23 17:30:42 +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 ,
2025-04-23 17:30:42 +08:00
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 : 2 rem ;
align - items : center ;
flex - wrap : nowrap ;
width : 100 % ;
. content _item _imgBox _itemImg {
display : flex ;
margin - right : 1 rem ;
position : relative ;
height : 20 rem ;
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 : 1 rem 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 2 rem ;
> . selectImgList {
width : 100 % ;
display : flex ;
overflow - x : auto ;
align - items : center ;
flex - wrap : nowrap ;
height : 20 rem ;
margin : 2 rem 0 ;
> . item {
height : 100 % ;
margin - right : 1 rem ;
& : 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.5 rem ;
font - weight : 600 ;
}
: deep ( > . ant - select > . ant - select - selector ) {
border - radius : 1.6 rem ;
}
> input {
border - radius : 1.6 rem ;
}
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.6 rem ;
width : 5 rem ;
padding : 4 px 11 px 4 px ;
margin - left : 1 rem ;
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 >