crm-uniapp/pages/components/pages/contract/add.vue

1042 lines
29 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<uv-navbar :fixed="false" :title="title" left-arrow @leftClick="$onClickLeft" />
<view style="overflow:hidden">
<view class="set-box bg-white">
<uv-alert type="warning" v-if="form.checkStatus == 1" description="合同正在审核中,不可以修改!"></uv-alert>
<uv-alert type="warning" v-else-if="form.checkStatus == 2" description="合同已经审核通过,不可以修改!"></uv-alert>
<uv-form :model="form" ref="uForm" :errorType="errorType" labelWidth="98">
<uv-form-item required label="合同名称" prop="contractName">
<uv-input v-model="form.contractName" :disabled="isCheck" placeholder="请输入合同名称" />
</uv-form-item>
<uv-form-item label="选择商机" @click="type !== 'detail' ? selectShow4() : ''" required>
<uv-input disabledColor="#ffffff" disabled v-model="form.businessName" placeholder="选择商机">
<template v-slot:suffix>
<uv-icon name="arrow-right"></uv-icon>
</template>
</uv-input>
</uv-form-item>
<uv-form-item label="合同金额" prop="contractMoney" required>
<uv-input type="number" v-model="form.contractMoney" :disabled="isCheck" placeholder="请输入合同金额" />
</uv-form-item>
<uv-form-item label="签约日期" @click="type !== 'detail' ? createTimeShow() : ''" required>
<uv-input v-model="form.signingDate" placeholder="选择签约时间 " disabled disabledColor="#ffffff">
<template v-slot:suffix>
<uv-icon name="arrow-right"></uv-icon>
</template>
</uv-input>
</uv-form-item>
<uv-form-item label="合同开始时间" @click="type !== 'detail' ? createTimeShow2() : ''" required>
<uv-input v-model="form.startDate" placeholder="选择开始时间 " disabled disabledColor="#ffffff">
<template v-slot:suffix>
<uv-icon name="arrow-right"></uv-icon>
</template>
</uv-input>
</uv-form-item>
<uv-form-item label="合同结束时间" @click="type !== 'detail' ? createTimeShow3() : ''" required>
<uv-input v-model="form.endDate" placeholder="选择结束时间 " disabled disabledColor="#ffffff">
<template v-slot:suffix>
<uv-icon name="arrow-right"></uv-icon>
</template>
</uv-input>
</uv-form-item>
<uv-form-item label="签约公司" @click="type !== 'detail' ? selectShow6() : ''" required>
<uv-input disabledColor="#ffffff" disabled v-model="form.companyName" placeholder="选择签约公司">
<template v-slot:suffix>
<uv-icon name="arrow-right"></uv-icon>
</template>
</uv-input>
</uv-form-item>
<uv-form-item label="公司签约人" @click="type !== 'detail' ? selectShow3() : ''" required>
<uv-input disabledColor="#ffffff" disabled v-model="form.signatoryName" placeholder="选择签约人">
<template v-slot:suffix>
<uv-icon name="arrow-right"></uv-icon>
</template>
</uv-input>
</uv-form-item>
<uv-form-item label="客户签约人" @click="type !== 'detail' ? selectShow2() : ''">
<uv-input disabledColor="#ffffff" disabled v-model="form.contactsName" placeholder="选择签约人">
<template v-slot:suffix>
<uv-icon name="arrow-right"></uv-icon>
</template>
</uv-input>
</uv-form-item>
</uv-form>
<!-- 产品 -->
<view class="flex cif-title" @click="type !== 'detail' ? selectProduct() : ''">
<view class="flex-1 text">产品关联</view>
<view class="flex align-center" style="color:#2979ff">
选择产品<uv-icon name="arrow-right" color="#909399" size="20"></uv-icon>
</view>
</view>
<view class="list">
<block v-if="selectList.length > 0">
<view class="item" v-for="(item,index) in selectList" :key="index">
<view class="number flex">
<view class="flex-1">序号: {{index+1}}</view>
<uni-number-box :min="1" v-model="item.nums" @change="valChange" :disabled="isCheck" />
</view>
<view class="content flex align-center">
<view class="flex-1 storeName">{{item.storeName ? item.storeName : item.name}}({{item.sku}})</view>
<view class="price flex align-center">
<view class="pr-1" style="font-weight: 600;">¥</view>
<uv-input :disabled="true" type="number" :clearable="false" placeholder="请输入价格" v-model="item.price" />
</view>
</view>
<view class="brief flex align-center">
<view style="margin-right: 14rpx;">备注:</view>
<uv-input v-model="item.remarks" :disabled="isCheck" />
</view>
<!-- 删除按钮 -->
<view class="close" @click="type !== 'detail' ? remove(index) : ''">
<uv-icon name="close" color="#909399" size="20"></uv-icon>
</view>
</view>
</block>
<uv-empty text="暂未选择产品" v-else margin-top="50" mode="list"></uv-empty>
</view>
<view class="flex mb-1 mt-1 align-center">
<view class="mr-1" style="width:150rpx">优惠金额</view>
<view class="flex-1">
<uni-easyinput type="number" :disabled="isCheck" placeholder="请填写优惠金额" @blur="inputChang"
v-model="form.discountRate"></uni-easyinput>
</view>
</view>
<view class="flex mb-1 mt-3 align-center">
<view class="mr-1" style="width: 150rpx">总额</view>
<view class="flex-1"><uv-input type="number" v-model="form.totalPrice" :disabled="true" /></view>
</view>
<view class="container-item" style="flex-direction: column;align-items: flex-start;border-bottom: none;">
<view class="container-item-upload">
<view class="container-item-label">图片</view>
</view>
<view class="item-photo-list">
<view class="item-photo-list-item" style="font-size: 0; position: relative;margin-bottom: 60rpx;"
:style="{marginRight:(index+1)%3==0?'0rpx':'20rpx'}" v-for="(item, index) in imgFiles" :key="item"
@click="replaceImage(item, index)">
<image v-if="!isCheck" src="https://sys.znkjfw.com/imgs/crmimages/close.png" mode="aspectFit"
class="item-photo-list-item-close" @click.stop="deleteItem(item, index)"></image>
<image v-if="!isCheck" :src="item.url" mode="" style="width: 100%; height: 100%"></image>
</view>
<image src="http://sys.znkjfw.com/imgs/process/uploadzp.png" mode="aspectFill" class="item-photo-list-item"
v-if="imgFiles.length<9 && !isCheck" @click="chooseImage"></image>
</view>
</view>
<view class="container-item" style="flex-direction: column;align-items: flex-start;border-bottom: none;">
<view class="container-item-upload">
<view class="container-item-label">附件 pdf</view>
</view>
<view class="item-photo-list">
<view class="item-photo-list-item" style="font-size: 0; position: relative;margin-bottom: 60rpx;"
:style="{marginRight:(index+1)%3==0?'0rpx':'20rpx'}" v-for="(item, index) in pdfList" :key="item">
<image v-if="!isCheck" src="https://sys.znkjfw.com/imgs/crmimages/close.png" mode="aspectFit"
class="item-photo-list-item-close" @click.stop="deleteFiles(item, index)"></image>
<image v-if="!isCheck" src="http://sys.znkjfw.com/imgs/process/pdfIcon.png" mode=""
style="width: 100%; height: 100%">
</image>
<view class="item-photo-list-item-name">
{{item.name || ''}}
</view>
</view>
<image v-if="!isCheck" src="http://sys.znkjfw.com/imgs/process/uploadzp.png" mode="aspectFill"
class="item-photo-list-item" @click="chooseFiles"></image>
</view>
</view>
<view class="mt-4" style="text-align: center;">
<uv-button color="#09b4f1" @click="submit" :disabled="isCheck || submitBtn" :ripple="true">确定提交</uv-button>
</view>
</view>
<uv-popup mode="bottom" round="38" ref="selectShowRef2">
<view class="popup-content">
<view class="popup-title">
<view class="" style="width: 45px;">
</view>
<text class="">选择客户签约人</text>
<view class="" @click="selectShowClose2" style="width: 45px;">
<uv-icon name="close" color="#909399" size="24"></uv-icon>
</view>
</view>
<scroll-view scroll-y style="height: 760rpx;width: 100%;">
<view class="list">
<block v-if="customerContacts.length > 0">
<view class="mb-4">
<view class="item flex" v-for="(item,index) in customerContacts" :key="index"
@click="onItem2(item,index)">
<view class="title">{{item.customerName}}</view>
<view class="check-icon">
<uv-icon v-if="item.checked" name="checkmark" color="#09b4f1" size="28"></uv-icon>
</view>
</view>
</view>
</block>
<uv-empty text="暂无数据" v-else mode="list"></uv-empty>
</view>
</scroll-view>
</view>
</uv-popup>
<uv-popup mode="bottom" round="38" ref="selectShowRef4">
<view class="popup-content">
<view class="popup-title">
<view class="" style="width: 45px;">
</view>
<text class="">选择商机</text>
<view class="" @click="selectShowClose4" style="width: 45px;">
<uv-icon name="close" color="#909399" size="24"></uv-icon>
</view>
</view>
<view style="margin-top: -20rpx;margin-bottom: 20rpx;">
<uv-tabs ref="uvTabsRef" :current="tabCurrent" :list="tabList" @click="tabListClick"></uv-tabs>
</view>
<scroll-view scroll-y style="height: 760rpx;width: 100%;">
<view class="list">
<block v-if="businessList.length > 0">
<view class="mb-4">
<view class="item flex" v-for="(item,index) in businessList" :key="index" @click="onItem4(item,index)">
<view class="title">{{item.name}}</view>
<view class="check-icon">
<uv-icon v-if="item.checked" name="checkmark" color="#09b4f1" size="28"></uv-icon>
</view>
</view>
</view>
</block>
<uv-empty text="暂无数据" v-else mode="list"></uv-empty>
</view>
</scroll-view>
</view>
</uv-popup>
<!-- 签约公司 -->
<uv-popup mode="bottom" round="38" ref="selectShowRef6">
<view class="popup-content">
<view class="popup-title">
<view class="" style="width: 45px;">
</view>
<text class="">选择签约公司</text>
<view class="" @click="selectShowClose6" style="width: 45px;">
<uv-icon name="close" color="#909399" size="24"></uv-icon>
</view>
</view>
<scroll-view scroll-y style="height: 760rpx;width: 100%;">
<view class="list">
<block v-if="companyList.length > 0">
<view class="mb-4">
<view class="item flex" v-for="(item,index) in companyList" :key="index" @click="onItem6(item,index)">
<view class="title">{{item.name}}</view>
<view class="check-icon">
<uv-icon v-if="item.checked" name="checkmark" color="#09b4f1" size="28"></uv-icon>
</view>
</view>
</view>
</block>
<uv-empty text="暂无数据" v-else mode="list"></uv-empty>
</view>
</scroll-view>
</view>
</uv-popup>
<uv-datetime-picker ref="datetimePicker" v-model="signingDateValue" mode="date"
@confirm="createTimeChange"></uv-datetime-picker>
<uv-datetime-picker ref="datetimePicker2" v-model="startDateValue" mode="date"
@confirm="createTimeChange2"></uv-datetime-picker>
<uv-datetime-picker ref="datetimePicker3" v-model="endDateValue" mode="date"
@confirm="createTimeChange3"></uv-datetime-picker>
<ba-tree-picker ref="treePickerRef" :multiple="false" @select-change="userSelectChange" title="选择员工"
:localdata="userTreeList" valueKey="userId" textKey="nickname" childrenKey="items" confirmColor="#09b4f1" />
</view>
</template>
<script setup>
import {
ref,
unref,
computed,
reactive,
nextTick
} from 'vue'
import {
onLoad,
onShow
} from '@dcloudio/uni-app'
import {
getContactsPage,
getUserTreeList
} from '@/api/customer'
import {
getBusinessProductListByBusinessId,
getBusinessPage
} from '@/api/business'
import {
getContractNo,
createContract,
getContract,
getContractProductListByContractId,
updateContract,
check,
getCompanyDept,
createOAContract,
getOAContract
} from '@/api/contract'
import {
getSimpleUserList,
getFlowUsers,
getSimpleUserList2,
getAllUserList,
uploadFile,
deleteBpmFile
} from '@/api/user'
import AddressSelect from '@/components/AddressSelect/index.vue'
import {
timestampToDate,
prePage,
getFileType
} from '@/utils/util'
import {
useMainStore
} from '@/store/store'
import {
storeToRefs
} from 'pinia'
import {
deepClone
} from '../../../../uni_modules/uv-ui-tools/libs/function'
const main = useMainStore()
const {
selectProductList
} = storeToRefs(main)
const title = ref('添加合同')
const keyword = ref('')
const listStatus = ref('loadmore')
const page = ref(1)
const page3 = ref(1)
const selectList = ref([])
const type = ref('add')
const contractId = ref(0)
const customerId = ref(0)
const content = ref('')
const customerName = ref('')
const form = ref({
fileItems: [], //附件
contractType: 1, // 合同类型
contractNo: '', //合同编号
contractName: '', //合同名称
customerId: '', //客户ID
customerName: '', //客户名称
startDate: timestampToDate(new Date()), //开始时间
signingDate: timestampToDate(new Date()), //签约日期
endDate: timestampToDate(new Date()), //结束时间
remark: '', //备注
discountRate: 0, //整单折扣
totalPrice: 0, //产品总金额
contactsName: '', //客户签约人
contactsId: '', //签约人id
companyId: '', //签约公司编号
companyName: '', //签约公司名称
businessId: '', //商机ID
invoiceMoney: '', // 已开票金额
contractMoney: '', // 合同金额
signatoryId: '', // 签约人编号
signatoryName: '', // 签约人名称
})
const errorType = ref('message')
const customerContacts = ref([])
const userList = ref([])
const isCheck = ref(false)
onLoad((e) => {
type.value = e.type
if (type.value == 'detail') {
isCheck.value = true
title.value = '合同详情'
contractId.value = e.id
getContractInfo()
}
getUserList() //获取签约人
getCompanyList() //获取公司列表
getBusinessList() //商机
})
onShow(() => {
selectList.value = selectProductList.value || []
count_price()
})
//获取商机
const tabCurrent = ref(0)
const tabList = ref([{
name: '我的商机',
value: 'my'
}, {
name: '下属商机',
value: 'sub'
}])
const businessList = ref([])
const businessParams = reactive({
relation: 'my',
pageNo: 1
})
const getBusinessList = () => {
getBusinessPage(businessParams).then(res => {
businessList.value = res.list
})
}
const tabListClick = (e) => {
tabCurrent.value = e.index
businessParams.relation = e.value
getBusinessList()
}
// 附件上传相关
const imgFiles = ref([]) //图片列表
const pdfList = ref([]) //pdf列表
//删除文件
const deleteFiles = (val, i) => {
deleteBpmFile({
url: val.url
}).then(res => {
pdfList.value.splice(i, 1)
})
}
//上传
const uploadFileApi = (url) => {
return new Promise((reslove, reject) => {
uploadFile(url, true)
.then((res) => {
console.log(res, 'success')
reslove(res);
})
.catch((err) => {
console.log(err, 'err')
reject(err);
});
});
}
//获取文件后缀名
const getExtension = (fileName) => {
let arr = fileName.split('.');
return arr[arr.length - 1];
}
//选择图片
const chooseImage = () => {
uni.chooseImage({
count: 9 - imgFiles.value.length, //默认9
sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
sourceType: ['album', 'camera'], //从相册选择
success: (res) => {
let promise = Promise.resolve();
let arr = [];
uni.showLoading({
title: '上传中'
})
res.tempFilePaths.forEach((item) => {
promise = promise.then(() => uploadFileApi(item));
promise
.then((ress) => {
arr.push(1)
imgFiles.value.push({
name: ress.name,
url: ress.url
})
if (arr.length >= res.tempFilePaths.length) {
uni.hideLoading()
}
})
.catch((err) => {
uni.hideLoading()
});
});
}
});
}
//上传文件 pdf
const chooseFiles = () => {
wx.chooseMessageFile({
count: 9 - pdfList.value.length, //默认100
extension: ['pdf', '.pdf'],
success: (res) => {
let isUploadFile = true
res.tempFiles.forEach(item => {
if (getExtension(item.name) != 'pdf') {
isUploadFile = false
}
})
if (!isUploadFile) {
uni.showToast({
title: '请您上传pdf格式文件',
});
return
}
let promise = Promise.resolve();
let arr = [];
uni.showLoading({
title: '上传中'
})
res.tempFiles.forEach((item) => {
promise = promise.then(() => uploadFileApi(item.path));
promise
.then((ress) => {
arr.push(1)
pdfList.value.push({
name: ress.name,
url: ress.url
})
if (arr.length >= res.tempFilePaths.length) {
uni.hideLoading()
}
})
.catch((err) => {
uni.hideLoading()
});
});
}
});
}
//获取公司列表
const companyList = ref([])
const getCompanyList = async () => {
companyList.value = await getCompanyDept()
if (form.value.companyId) {
companyList.value.forEach((item, index) => {
if (form.value.companyId == item.id) {
item.checked = true
} else {
item.checked = false
}
})
}
}
const selectShowRef = ref()
const selectShow = () => {
unref(selectShowRef).open()
}
const selectShowClose = () => {
unref(selectShowRef).close()
}
const datetimePicker = ref()
const createTimeShow = () => {
unref(datetimePicker).open()
}
// 选择时间
const signingDateValue = ref(timestampToDate(new Date()))
const createTimeChange = (e) => {
form.value.signingDate = timestampToDate(e.value)
}
const datetimePicker2 = ref()
const createTimeShow2 = () => {
unref(datetimePicker2).open()
}
// 选择时间
const startDateValue = ref(timestampToDate(new Date()))
const createTimeChange2 = (e) => {
form.value.startDate = timestampToDate(e.value)
if (form.value.endDate) {
//比较开始时间和结束时间大小
let startDate = new Date(form.value.startDate);
let endDate = new Date(form.value.endDate);
if (startDate > endDate) {
form.value.endDate = ''
uni.showToast({
icon: 'none',
title: '结束时间不能大于开始时间'
})
}
}
}
const datetimePicker3 = ref()
const createTimeShow3 = () => {
unref(datetimePicker3).open()
}
// 选择时间
const endDateValue = ref(timestampToDate(new Date()))
const createTimeChange3 = (e) => {
form.value.endDate = timestampToDate(e.value)
if (form.value.startDate) {
//比较开始时间和结束时间大小
let startDate = new Date(form.value.startDate);
let endDate = new Date(form.value.endDate);
if (endDate < startDate) {
form.value.endDate = ''
uni.showToast({
icon: 'none',
title: '结束时间不能大于开始时间'
})
}
}
}
// 获取商机数据详情
const getContractInfo = async () => {
form.value = await getOAContract({
id: contractId.value
})
if (form.value.fileItems.length) {
form.value.fileItems.forEach(item => {
if (getFileType(item.name) == 'image') {
imgFiles.value.push(item)
}
if (getFileType(item.name) == 'pdf') {
pdfList.value.push(item)
}
})
}
selectList.value = await getContractProductListByContractId({
contractId: contractId.value
})
}
// 去选择产品
const selectProduct = () => {
uni.navigateTo({
url: '/pages/components/pages/business/selectProduct'
});
}
const selectShowRef2 = ref()
const selectShow2 = () => {
unref(selectShowRef2).open()
}
const selectShowClose2 = () => {
unref(selectShowRef2).close()
}
const onItem2 = async (val, i) => {
customerContacts.value.forEach((item, index) => {
if (val.id == item.id) {
item.checked = true
val.name = val.name ? val.name : item.name;
} else {
item.checked = false
}
})
form.value.contactsId = val.id
form.value.contactsName = val.name ? val.name : ''
selectShowClose2()
}
//员工选择
const selectShow3 = async () => {
treePickerRef.value._show()
}
// 树形选人员
const userTreeList = ref([])
const getUserList = () => {
getUserTreeList().then(res => {
userTreeList.value = res
})
}
const treePickerRef = ref()
const userSelectChange = async (userId, name) => {
form.value.signatoryId = userId[0]
form.value.signatoryName = name
}
//商机
const selectShowRef4 = ref()
const uvTabsRef = ref()
const selectShow4 = async () => {
unref(selectShowRef4).open()
nextTick(() => {
uvTabsRef.value.init()
})
}
const selectShowClose4 = () => {
unref(selectShowRef4).close()
}
const onItem4 = async (val, i) => {
businessList.value.forEach((item, index) => {
if (val.id == item.id) {
item.checked = true
} else {
item.checked = false
}
})
//客户信息
form.value.customerId = val.customerId
form.value.customerName = val.customerName
//商机信息
form.value.businessId = val.id
form.value.businessName = val.name
//产品
selectList.value = await getBusinessProductListByBusinessId({
businessId: val.id
})
//客户联系人
getContactsPageList(val.customerId)
//关闭弹窗
setTimeout(() => {
selectShowClose4()
}, 300)
}
//获取联系人 选完商机 客户联系人
const getContactsPageList = async (customerId) => {
let data = await getContactsPage({
customerId
})
customerContacts.value = data.list
}
//公司
const selectShowRef6 = ref()
const selectShow6 = async () => {
unref(selectShowRef6).open()
}
const selectShowClose6 = () => {
unref(selectShowRef6).close()
}
const onItem6 = (val, i) => {
companyList.value.forEach((item, index) => {
if (val.id == item.id) {
item.checked = true
} else {
item.checked = false
}
})
form.value.companyId = val.id
form.value.companyName = val.name
userList.value = []
page3.value = 1
getUserList()
selectShowClose6()
}
// 产品数量增加
const valChange = (e) => {
count_price()
}
// 优惠率改变
const inputChang = (e) => {
if (e.detail.value > form.value.totalPrice) {
form.value.discountRate = 0
uni.showToast({
icon: 'none',
title: '折扣金额不能大于总金额'
})
}
if (e.detail.value < 0) {
form.value.discountRate = 0
uni.showToast({
icon: 'none',
title: '折扣金额不能小于0'
})
}
count_price()
}
// 移除已选产品
const remove = (i) => {
selectList.value.splice(i, 1)
count_price()
}
// 计算价格
const count_price = () => {
let list = deepClone(selectList.value)
if (list.length > 0) {
let total = 0;
for (let i = 0; i < list.length; i++) {
total = total + (list[i].nums * list[i].price)
}
total = total - Number(form.value.discountRate || 0)
form.value.totalPrice = total.toFixed(2)
} else {
form.value.totalPrice = 0
}
}
// 提交跟进
const uForm = ref()
const submit = () => {
if (form.value.contractName == '') {
uni.showToast({
icon: 'error',
title: '请填写合同名称'
})
return
}
if (form.value.businessName == '') {
uni.showToast({
icon: 'error',
title: '请选择商机'
})
return
}
if (form.value.contractMoney == '') {
uni.showToast({
icon: 'error',
title: '请填写合同金额'
})
return
}
if (form.value.signingDate == '') {
uni.showToast({
icon: 'error',
title: '请填写签约日期'
})
return
}
if (form.value.startDate == '') {
uni.showToast({
icon: 'error',
title: '请填写合同开始时间'
})
return
}
if (form.value.endDate == '') {
uni.showToast({
icon: 'error',
title: '请填写合同结束时间'
})
return
}
if (form.value.companyName == '') {
uni.showToast({
icon: 'error',
title: '请选择签约公司'
})
return
}
if (form.value.signatoryId == '') {
uni.showToast({
icon: 'error',
title: '请选择公司签约人'
})
return
}
if (selectList.value.length <= 0) {
uni.showToast({
icon: 'error',
title: '请选择产品'
})
return
}
onSubmit()
}
// 修确认提交
const submitBtn = ref(false)
const onSubmit = () => {
let newArr = []
submitBtn.value = true
uni.showLoading({
title: '提交中'
});
selectList.value.forEach((item, index) => {
let obj = {}
obj.name = item.storeName ? item.storeName : item.name
obj.nums = item.nums
obj.price = item.price
obj.productAttrUnique = item.productAttrUnique
obj.productId = item.productId ? item.productId : item.id
obj.sku = item.sku
obj.remarks = item.remarks
obj.subtotal = item.nums * item.price
newArr[index] = obj
})
form.value.contractProducts = newArr
form.value.fileItems = [...imgFiles.value, ...pdfList.value]
createOAContract(form.value).then(res => {
submitBtn.value = false
uni.hideLoading();
uni.showToast({
title: '添加成功',
icon: 'success',
duration: 2000
})
prePage().$vm.isRefresh = true
setTimeout(() => {
uni.navigateBack();
}, 1000);
}).catch(err => {
submitBtn.value = false
uni.hideLoading();
})
}
</script>
<style lang="scss" scoped>
.set-box {
padding: 0rpx 22rpx 30rpx 34rpx;
margin-bottom: 80rpx;
.cif-title {
padding: 22rpx 0;
.text {
font-size: 30rpx;
font-weight: 700;
}
}
.list {
margin: 40rpx 15rpx 60rpx;
.item {
position: relative;
border-radius: 15rpx;
box-shadow: 1px 0px 5px rgba(50, 50, 50, 0.3);
padding: 25rpx 35rpx;
margin-bottom: 45rpx;
.number {
margin-bottom: 20rpx;
}
.content {
margin-bottom: 20rpx;
.price {
width: 245rpx;
font-size: 28rpx;
color: #fa3534;
}
}
.brief {
margin: 10rpx 0;
font-size: 28rpx;
color: $uv-tips-color;
}
.close {
position: absolute;
right: -8px;
top: -30rpx;
background-color: #fff;
border-radius: 50%;
height: 60rpx;
width: 60rpx;
display: flex;
align-items: center;
justify-content: center;
box-shadow: 1px 0px 5px rgba(50, 50, 50, 0.3);
}
}
}
}
.popup-content {
.popup-title {
display: flex;
align-items: center;
justify-content: space-between;
position: relative;
font-size: 35rpx;
font-weight: 600;
text-align: center;
height: 64px;
padding-right: 25rpx;
}
.list {
margin-bottom: 45rpx;
.item {
padding: 0 20rpx 30rpx 30rpx;
justify-content: space-between;
.title {
flex: 1;
font-size: 29rpx;
}
.check-icon {
text-align: center;
// width: 100rpx;
}
}
}
.bottom_btn {
display: flex;
justify-content: flex-end;
padding: 28rpx 10rpx 45rpx;
}
}
.storeName {
font-size: 30rpx;
}
.container-item {
width: 100%;
padding: 25rpx 0;
border-bottom: 1rpx solid #e8e8e8;
display: flex;
align-items: center;
justify-content: space-between;
}
.container-item-label {
flex-shrink: 0;
color: #020202;
font-weight: 400;
font-face: PingFang SC;
font-size: 30rpx;
margin-right: 15rpx;
}
.item-photo-list {
display: flex;
flex-wrap: wrap;
padding: 0 30rpx;
margin-top: 20rpx;
}
.item-photo-list-item-name {
position: absolute;
width: 100%;
left: 0;
bottom: -40rpx;
font-size: 22rpx;
text-align: center;
overflow: hidden;
/* 确保超出容器的文本被裁剪 */
white-space: nowrap;
/* 确保文本在一行内显示 */
text-overflow: ellipsis;
/* 超出部分显示为省略号 */
}
.item-photo-list-item-close {
width: 40rpx;
height: 40rpx;
position: absolute;
right: -20rpx;
top: -20rpx;
}
.item-photo-list-item {
width: 180rpx;
height: 180rpx;
flex-shrink: 0;
border: 2rpx solid #e5e5e5;
border-radius: 10rpx;
margin-bottom: 20rpx;
/* margin-right: 20rpx; */
}
.container-item-upload {
display: flex;
align-items: center;
justify-content: space-between;
width: 100%;
}
</style>