hy-shop-admin/src/views/product/productExamine/info.vue

1168 lines
34 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>
<el-dialog
v-if="dialogVisible"
title="商品审核"
v-el-drag-dialog
:visible.sync="dialogVisible"
:append-to-body="isAppend"
width="1260px"
top="60px"
:before-close="handleClose"
class="projectInfo"
>
<div class="acea-row mt10" v-if="isShow">
<span class="sp"
>店铺名称:{{
projectData.merchant && projectData.merchant.mer_name
}}</span
>
<span class="sp"
>入驻企业名称:{{
projectData.merchant &&
projectData.merchant.ext.com &&
projectData.merchant.ext.com.name
}}</span
>
<span class="sp"
>店铺联系人:
{{ projectData.merchant && projectData.merchant.real_name }}</span
>
<span class="sp" v-if="projectData.merchant">
营业执照:
<div class="demo-image__preview">
<el-image
style="width: 60px; height: 60px"
:src="projectData.merchant.mer_cert"
:preview-src-list="[projectData.merchant.mer_cert]"
/>
</div>
</span>
<span class="sp"
>联系人电话:{{
projectData.merchant && projectData.merchant.service_phone
}}</span
>
<span class="sp" v-if="projectData.refusal"
>上传拒绝原因:{{ projectData.refusal }}</span
>
</div>
<div class="acea-row" v-if="isShow">
<span class="sp">商品id{{ projectData.product_id }}</span>
<span class="sp">商品名称:{{ projectData.store_name }}</span>
<span class="sp"
>平台分类:{{
projectData.storeCategory ? projectData.storeCategory.cate_name : ""
}}</span
>
<!-- <span class="sp">品牌:{{ projectData.brand?projectData.brand.brand_name:'其他' }}</span> -->
<span class="sp">商品关键字:{{ projectData.keyword }}</span>
<span class="sp">商品单位:{{ projectData.unit_name }}</span>
<span class="sp">
商品分类:
<template v-if="projectData.merCateId">
<span
v-for="(item, index) in projectData.merCateId"
:key="index"
class="mr10"
>{{ item.category ? item.category.cate_name : "" }}</span
>
</template>
<span v-else>-</span>
</span>
<span class="sp">商品简介:{{ projectData.store_info }}</span>
<span class="sp">商品备注:{{ projectData.remark }}</span>
<!-- <span class="sp"
>是否惠美乡村:{{ projectData.is_huimei ? "是" : "否" }}</span
> -->
<span class="sp100">
商品封面图:
<div class="demo-image__preview">
<el-image
style="width: 60px; height: 60px"
:src="projectData.image"
:preview-src-list="[projectData.image]"
/>
</div>
</span>
</div>
<el-tabs
v-if="projectData && isShow"
v-model="activeNames"
v-loading="loading"
>
<el-tab-pane label="商品信息" name="first">
<div class="acea-row">
<span class="sp" v-if="projectData.temp && projectData.temp.name"
>运费模板:{{ projectData.temp ? projectData.temp.name : "" }}</span
>
<span class="sp100" v-if="projectData.temp && projectData.temp.info"
>运费说明:{{ projectData.temp ? projectData.temp.info : "" }}</span
>
<span v-if="projectData.video_link" class="sp100">
主图视频:
<video
style="width: 40%; height: 180px; border-radius: 10px"
:src="projectData.video_link"
controls="controls"
>
您的浏览器不支持 video 标签。
</video>
</span>
<span class="sp100"
>商品轮播图:
<div
v-for="(item, index) in projectData.slider_image"
:key="index"
class="pictrue"
>
<el-image
style="width: 60px; height: 60px"
:src="item"
:preview-src-list="[item]"
/>
</div>
</span>
</div>
</el-tab-pane>
<el-tab-pane label="资质信息" name="aptitude">
<span class="sp"
>商品名称:
<el-radio-group v-model="qualification.commodity_type">
<el-radio
:label="0"
class="radio"
:disabled="qualification.commodity_type == 1"
>国产</el-radio
>
<el-radio :label="1" :disabled="qualification.commodity_type == 0"
>进口</el-radio
>
</el-radio-group>
</span>
<div v-if="qualification.commodity_type == 0">
<span class="sp"
>生产企业名称:{{ qualification.production_name }}</span
>
<span class="upload">
<div class="upload_left">生产营业执照:</div>
<div class="upload_right">
<div
v-for="(item, index) in qualification.businessList"
:key="index"
>
<a
class="txt"
v-if="getType(item)"
:href="item.url"
target="downloadFile"
download
>{{ item.name }}</a
>
<div class="pictrue" v-else>
<el-image
style="width: 60px; height: 60px"
:src="item.url"
:preview-src-list="[item.url]"
/>
</div>
</div>
</div>
</span>
<span class="upload">
<div class="upload_left">生产许可证:</div>
<div class="upload_right">
<div
v-for="(item, index) in qualification.licenceList"
:key="index"
>
<a
class="txt"
v-if="getType(item)"
:href="item.url"
target="downloadFile"
download
>{{ item.name }}</a
>
<div class="pictrue" v-else>
<el-image
style="width: 60px; height: 60px"
:src="item.url"
:preview-src-list="[item.url]"
/>
</div>
</div>
</div>
</span>
<span class="upload">
<div class="upload_left">商标注册证:</div>
<div class="upload_right">
<div
v-for="(item, index) in qualification.trademarkList"
:key="index"
>
<a
class="txt"
v-if="getType(item)"
:href="item.url"
target="downloadFile"
download
>{{ item.name }}</a
>
<div class="pictrue" v-else>
<el-image
style="width: 60px; height: 60px"
:src="item.url"
:preview-src-list="[item.url]"
/>
</div>
</div>
</div>
</span>
<span class="upload">
<div class="upload_left">销售授权及品牌方营业执照:</div>
<div class="upload_right">
<div
v-for="(item, index) in qualification.authorizedList"
:key="index"
>
<a
class="txt"
v-if="getType(item)"
:href="item.url"
target="downloadFile"
download
>{{ item.name }}</a
>
<div class="pictrue" v-else>
<el-image
style="width: 60px; height: 60px"
:src="item.url"
:preview-src-list="[item.url]"
/>
</div>
</div>
</div>
</span>
<span class="upload">
<div class="upload_left">商品检测报告及备案:</div>
<div class="upload_right">
<div
v-for="(item, index) in qualification.commodityList"
:key="index"
>
<a
class="txt"
v-if="getType(item)"
:href="item.url"
target="downloadFile"
download
>{{ item.name }}</a
>
<div class="pictrue" v-else>
<el-image
style="width: 60px; height: 60px"
:src="item.url"
:preview-src-list="[item.url]"
/>
</div>
</div>
</div>
</span>
<span class="upload">
<div class="upload_left">其他资质:</div>
<div class="upload_right">
<div
v-for="(item, index) in qualification.otherList"
:key="index"
>
<a
class="txt"
v-if="getType(item)"
:href="item.url"
target="downloadFile"
download
>{{ item.name }}</a
>
<div class="pictrue" v-else>
<el-image
style="width: 60px; height: 60px"
:src="item.url"
:preview-src-list="[item.url]"
/>
</div>
</div>
</div>
</span>
</div>
<div v-if="qualification.commodity_type == 1">
<span class="sp"
>进口/企业境内总代企业名称: {{ qualification.import_name }}</span
>
<span class="upload">
<div class="upload_left">生产营业执照:</div>
<div class="upload_right">
<div
v-for="(item, index) in qualification.importBusinessList"
:key="index"
>
<a
class="txt"
v-if="getType(item)"
:href="item.url"
target="downloadFile"
download
>{{ item.name }}</a
>
<div class="pictrue" v-else>
<el-image
style="width: 60px; height: 60px"
:src="item.url"
:preview-src-list="[item.url]"
/>
</div>
</div>
</div>
</span>
<span class="upload">
<div class="upload_left">销售授权及其他:</div>
<div class="upload_right">
<div
v-for="(item, index) in qualification.importAuthorizedList"
:key="index"
>
<a
class="txt"
v-if="getType(item)"
:href="item.url"
target="downloadFile"
download
>{{ item.name }}</a
>
<div class="pictrue" v-else>
<el-image
style="width: 60px; height: 60px"
:src="item.url"
:preview-src-list="[item.url]"
/>
</div>
</div>
</div>
</span>
<span class="upload">
<div class="upload_left">海关检验检疫证书及报关单:</div>
<div class="upload_right">
<div
v-for="(item, index) in qualification.customsList"
:key="index"
>
<a
class="txt"
v-if="getType(item)"
:href="item.url"
target="downloadFile"
download
>{{ item.name }}</a
>
<div class="pictrue" v-else>
<el-image
style="width: 60px; height: 60px"
:src="item.url"
:preview-src-list="[item.url]"
/>
</div>
</div>
</div>
</span>
<span class="upload">
<div class="upload_left">产品外包装实物图:</div>
<div class="upload_right">
<div
v-for="(item, index) in qualification.packingList"
:key="index"
>
<a
class="txt"
v-if="getType(item)"
:href="item.url"
target="downloadFile"
download
>{{ item.name }}</a
>
<div class="pictrue" v-else>
<el-image
style="width: 60px; height: 60px"
:src="item.url"
:preview-src-list="[item.url]"
/>
</div>
</div>
</div>
</span>
<span class="upload">
<div class="upload_left">其他资质:</div>
<div class="upload_right">
<div
v-for="(item, index) in qualification.importOtherList"
:key="index"
>
<a
class="txt"
v-if="getType(item)"
:href="item.url"
target="downloadFile"
download
>{{ item.name }}</a
>
<div class="pictrue" v-else>
<el-image
style="width: 60px; height: 60px"
:src="item.url"
:preview-src-list="[item.url]"
/>
</div>
</div>
</div>
</span>
</div>
</el-tab-pane>
<el-tab-pane label="商品详情" name="second">
<span class="sp100">商品详情:</span>
<div class="contentPic" v-html="projectData.content" />
</el-tab-pane>
<el-tab-pane label="其他设置" name="third">
<span class="sp100">商品排序:{{ projectData.sort }}</span>
<span class="third mb20">
<span>商品推荐:</span>
<el-checkbox-group v-model="checkboxGroup" size="small">
<el-checkbox
v-for="(item, index) in recommend"
:key="index"
disabled
:label="item.value"
>{{ item.name }}</el-checkbox
>
</el-checkbox-group>
</span>
<span
v-if="
projectData.guarantee && projectData.guarantee.templateValue.length
"
class="third mb20"
>
<span>服务保障:</span>
<span
v-for="(item, index) in projectData.guarantee.templateValue"
:key="index"
>
<span v-if="item.value"
>{{ index + 1 }}. {{ item.value.guarantee_name }}</span
>
</span>
</span>
</el-tab-pane>
<el-tab-pane label="商品规格" name="fourth">
<span class="sp"
>商品规格:{{
projectData.spec_type === 0 ? "单规格" : "多规格"
}}</span
>
<span class="sp"
>佣金设置:{{
projectData.extension_type === 0 ? "默认设置" : "单独设置"
}}</span
>
<span class="sp100">
<span class="mb15" style="display: block">商品规格:</span>
<template v-if="projectData.spec_type === 0">
<el-table :data="OneattrValue" border size="small">
<el-table-column align="center" label="图片" min-width="80">
<template slot-scope="scope">
<div class="demo-image__preview">
<el-image
style="width: 60px; height: 60px"
:src="scope.row.image"
:preview-src-list="[scope.row.image]"
/>
</div>
</template>
</el-table-column>
<el-table-column
v-for="(item, iii) in attrValue"
:key="iii"
:label="formThead[iii].title"
align="center"
min-width="80"
>
<template slot-scope="scope">
<a
v-if="formThead[iii].title == '依据链接'"
:href="scope.row[iii]"
target="_blank"
>{{ scope.row[iii] }}</a
>
<span v-else class="priceBox" v-text="scope.row[iii]" />
</template>
</el-table-column>
<template v-if="projectData.extension_type === 1">
<el-table-column
align="center"
label="一级返佣(元)"
min-width="120"
>
<template slot-scope="scope">
<span class="priceBox" v-text="scope.row.extension_one" />
</template>
</el-table-column>
<el-table-column
align="center"
label="二级返佣(元)"
min-width="120"
>
<template slot-scope="scope">
<span class="priceBox" v-text="scope.row.extension_two" />
</template>
</el-table-column>
</template>
</el-table>
</template>
<template v-if="projectData.spec_type === 1">
<el-table :data="ManyAttrValue" border size="small">
<template v-if="manyTabDate">
<el-table-column
v-for="(item, iii) in manyTabDate"
:key="iii"
align="center"
:label="manyTabTit[iii].title"
min-width="80"
>
<template slot-scope="scope">
<span class="priceBox" v-text="scope.row[iii]" />
</template>
</el-table-column>
</template>
<el-table-column align="center" label="图片" min-width="80">
<template slot-scope="scope">
<div class="upLoadPicBox">
<div class="pictrue tabPic">
<el-image
style="width: 60px; height: 60px"
:src="scope.row.image"
:preview-src-list="[scope.row.image]"
/>
</div>
</div>
</template>
</el-table-column>
<el-table-column
v-for="(item, iii) in attrValue"
:key="iii"
:label="formThead[iii].title"
align="center"
min-width="80"
>
<template slot-scope="scope">
<a
v-if="formThead[iii].title == '依据链接'"
:href="scope.row[iii]"
target="_blank"
>{{ scope.row[iii] }}</a
>
<span v-else class="priceBox" v-text="scope.row[iii]" />
</template>
</el-table-column>
<template v-if="projectData.extension_type === 1">
<el-table-column
align="center"
label="一级返佣(元)"
min-width="120"
>
<template slot-scope="scope">
<span class="priceBox">{{ scope.row.extension_one }}</span>
</template>
</el-table-column>
<el-table-column
align="center"
label="二级返佣(元)"
min-width="120"
>
<template slot-scope="scope">
<span class="priceBox">{{ scope.row.extension_two }}</span>
</template>
</el-table-column>
</template>
</el-table>
</template>
</span>
</el-tab-pane>
</el-tabs>
<el-form
ref="ruleForm"
:model="ruleForm"
:rules="rules"
label-width="80px"
class="demo-ruleForm"
>
<el-form-item
:label="projectData.status == 15 ? '解锁状态' : '审核状态'"
prop="status"
>
<el-radio-group v-model="ruleForm.status">
<el-radio :label="1">通过</el-radio>
<el-radio :label="-1">拒绝</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="佐证图片" prop="status_img" label-width="80px">
<div class="acea-row">
<div
v-for="(item, index) in ruleForm.status_img"
:key="index"
class="pictrue"
draggable="false"
@dragstart="handleDragStart($event, item)"
@dragover.prevent="handleDragOver($event, item)"
@dragenter="handleDragEnter($event, item)"
@dragend="handleDragEnd($event, item)"
>
<!-- <img :src="item"> -->
<el-image
style="width: 60px; height: 60px"
:src="item"
:preview-src-list="[item]"
/>
<i class="el-icon-error btndel" @click="handleRemove(index)" />
</div>
<div
v-if="ruleForm.status_img.length < 10"
class="uploadCont"
title="750*750px"
>
<!-- <div class="upLoadPicBox" @paste="handlePaste" @click="modalPicTap('2')">
<div class="upLoad">
<i class="el-icon-camera cameraIconfont" />
</div>
</div> -->
<el-upload
:action="fileUrl"
:show-file-list="false"
list-type="picture-card"
multiple
:headers="myHeaders"
:on-success="setQualificationsList"
:before-upload="beforeUploadQualification"
>
<i class="el-icon-plus" />
</el-upload>
</div>
</div>
</el-form-item>
<el-form-item
v-if="ruleForm.status === -1 || ruleForm.status === 15"
:label="projectData.status != 0 ? '锁定原因' : '拒绝原因'"
prop="refusal"
>
<el-input
v-model="ruleForm.refusal"
type="textarea"
placeholder="请输入原因"
/>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button size="small" @click="dialogVisible = false">取 消</el-button>
<el-button size="small" type="primary" @click="onSubmit">确 定</el-button>
</div>
</el-dialog>
</template>
<script>
import SettingMer from "@/libs/settingMer";
import { getToken } from "@/utils/auth";
import elDragDialog from "@/directive/el-drag-dialog";
import {
productStatusUnlockApi,
productDetailApi,
productStatusApi,
productStatusFirstApi,
productStatusFirstTwoApi,
productStatusSecondApi,
} from "@/api/product";
import log from "@/libs/util.log";
const defaultObj = {
image: "",
slider_image: [],
store_name: "",
store_info: "",
keyword: "",
brand_id: "", // 品牌id
cate_id: "", // 平台分类id
mer_cate_id: [], // 商户分类id
unit_name: "",
sort: 0,
is_show: 0,
is_benefit: 0,
is_new: 0,
is_good: 0,
temp_id: "",
attrValue: [
{
image: "",
price: null,
svip_price: null,
cost: null,
ot_price: null,
proportion: 0.6,
coupon:'',
stock: 0,
growth: 0,
bar_code: "",
weight: null,
volume: null,
gist_url: null,
},
],
attr: [],
selectRule: "",
extension_type: 0,
content: "",
spec_type: 0,
};
const objTitle = {
price: {
title: "售价",
},
svip_price: {
title: "付费会员价",
},
cost: {
title: "成本价",
},
ot_price: {
title: "市场价",
},
proportion: {
title: "占比",
},
coupon:{
title:'抵扣券'
},
stock: {
title: "库存",
},
growth: {
title: "成长值",
},
bar_code: {
title: "商品编号",
},
weight: {
title: "重量KG",
},
volume: {
title: "体积(m³)",
},
gist_url: {
title: "依据链接",
},
};
const proOptions = [
{ name: "是否热卖", value: "is_hot" },
{ name: "优品推荐", value: "is_good" },
{ name: "特惠专区", value: "is_benefit" },
{ name: "是否精品", value: "is_best" },
{ name: "是否新品", value: "is_new" },
];
export default {
name: "Info",
props: {
isShow: {
type: Boolean,
default: true,
},
ids: {
type: Array,
default: () => [],
},
},
directives: {
elDragDialog,
},
data() {
return {
rules: {
status: [
{ required: true, message: "请选择审核状态", trigger: "change" },
],
refusal: [
{ required: true, message: "请填写拒绝原因", trigger: "blur" },
],
// status_img: [
// {type: 'array', required: true, message: '请上传佐证图片', trigger: 'blur' }
// ]
},
myHeaders: { "X-Token": getToken() },
isAppend: true,
proId: 0,
aptitude: 0,
qualification: {
production_name: "",
businessList: [],
licenceList: [],
trademarkList: [],
authorizedList: [],
commodityList: [],
otherList: [],
importBusinessList: [],
importAuthorizedList: [],
customsList: [],
packingList: [],
importOtherList: [],
commodity_type: 0,
brands_name: "",
import_name: "",
},
ruleForm: {
refusal: "",
status: 1,
id: "",
status_img: [],
},
formThead: Object.assign({}, objTitle),
manyTabDate: {},
manyTabTit: {},
loading: false,
dialogVisible: false,
activeNames: "first",
projectData: {
merchant: {
ext: {
com: {},
},
},
},
recommend: proOptions,
checkboxGroup: [],
svip_type: 0,
OneattrValue: [Object.assign({}, defaultObj.attrValue[0])], // 单规格
ManyAttrValue: [Object.assign({}, defaultObj.attrValue[0])], // 多规格
};
},
computed: {
fileUrl() {
return SettingMer.https + `/upload/image/0/file`;
},
attrValue() {
const obj = Object.assign({}, defaultObj.attrValue[0]);
if (this.svip_type == 0) delete obj.svip_price;
delete obj.image;
return obj;
},
oneFormBatch() {
const obj = [Object.assign({}, defaultObj.attrValue[0])];
delete obj[0].bar_code;
return obj;
},
},
methods: {
handlePaste(event) {
console.log("粘贴");
const items = (event.clipboardData || event.originalEvent.clipboardData)
.items;
let pasteFiles = [];
console.log(event);
},
// 上传文件之前的钩子函数
beforeUploadQualification() {
if (this.ruleForm.status_img.length >= 10) {
this.$message.error("上传文件最大数量为10张, 上传失败!");
return false;
} else {
return true;
}
},
// 上传成功
setQualificationsList(response) {
if (response.status === 200) {
this.ruleForm.status_img.push(response.data.src);
console.log(this.ruleForm.status_img);
} else {
this.$message.error(response.message);
}
},
handleRemove(i) {
this.ruleForm.status_img.splice(i, 1);
},
handleDragEnd(e, item) {
this.dragging = null;
},
handleDragEnter(e, item) {
e.dataTransfer.effectAllowed = "move";
if (item === this.dragging) {
return;
}
const newItems = [...this.ruleForm.status_img];
const src = newItems.indexOf(this.dragging);
const dst = newItems.indexOf(item);
newItems.splice(dst, 0, ...newItems.splice(src, 1));
this.ruleForm.status_img = newItems;
},
handleDragOver(e) {
e.dataTransfer.dropEffect = "move";
},
// 移动
handleDragStart(e, item) {
this.dragging = item;
},
getType(val) {
var regex = /(?:\.([^.]+))?$/;
let suffix = regex.exec(val.url)[1];
return suffix == "pdf";
},
// 点击商品图
modalPicTap(tit, num, i) {
const _this = this;
const attr = [];
this.$modalUpload(function (img) {
console.log(_this.ruleForm);
if (tit === "1" && !num) {
_this.ruleForm.status_img = img[0];
}
if (tit === "2" && !num) {
img.map((item) => {
attr.push(item.attachment_src);
_this.ruleForm.status_img.push(item);
if (_this.ruleForm.status_img.length > 10) {
_this.ruleForm.status_img.length = 10;
}
});
}
}, tit);
},
onSubmit() {
console.log(this.projectData);
let mode = {
0: {
api: productStatusFirstApi,
status: 9,
},
10: {
api: productStatusSecondApi,
status: 11,
},
9: {
api: productStatusFirstTwoApi,
status: 10,
},
11: {
api: productStatusApi,
status: 1,
},
15: {
api: productStatusUnlockApi,
status: 10,
},
};
this.$refs.ruleForm.validate((valid) => {
if (valid) {
let params = {};
if(this.isShow){
params = {
...this.ruleForm,
id:this.proId,
status:this.ruleForm.status == -1? -1: mode[this.projectData.status].status,
};
}else{
params = {
...this.ruleForm,
id:this.ids,
status:this.ruleForm.status == -1? -1:1
};
}
mode[this.isShow?this.projectData.status:11]
.api(params)
.then((res) => {
this.$message.success(res.message);
this.dialogVisible = false;
this.activeNames = "first";
this.$emit("subSuccess");
})
.catch((res) => {
this.listLoading = false;
this.$message.error(res.message);
});
}
});
},
handleClose() {
this.dialogVisible = false;
this.activeNames = "first";
},
getInfo(id) {
this.proId = id;
this.loading = true;
this.ruleForm.status_img = [];
this.ruleForm.status = 1;
this.ruleForm.refusal = "";
productDetailApi(id)
.then((res) => {
(this.projectData = res.data),
(this.ruleForm.status_img = res.data.status_img);
let qualification = {
production_name: "",
businessList: [],
licenceList: [],
trademarkList: [],
authorizedList: [],
commodityList: [],
otherList: [],
importBusinessList: [],
importAuthorizedList: [],
customsList: [],
packingList: [],
importOtherList: [],
commodity_type: 0,
brands_name: "",
import_name: "",
};
this.qualification = res.data.qualification || qualification;
this.qualification.commodityList = this.qualification.commodityList.slice(0,20)
this.svip_type = res.data.svip_price_type;
if (this.projectData.spec_type === 0) {
this.OneattrValue = res.data.attrValue;
} else {
this.ManyAttrValue = res.data.attrValue;
}
const tmp = {};
const tmpTab = {};
this.projectData.attr.forEach((o, i) => {
tmp["value" + i] = { title: o.value };
tmpTab["value" + i] = "";
});
this.manyTabDate = tmpTab;
this.manyTabTit = tmp;
this.checkboxGroup = [];
this.formThead = Object.assign({}, this.formThead, tmp);
if (this.projectData.is_hot === 1) this.checkboxGroup.push("is_hot");
if (this.projectData.is_good === 1)
this.checkboxGroup.push("is_good");
if (this.projectData.is_benefit === 1)
this.checkboxGroup.push("is_benefit");
if (this.projectData.is_best === 1)
this.checkboxGroup.push("is_best");
if (this.projectData.is_new === 1) this.checkboxGroup.push("is_new");
this.loading = false;
})
.catch((res) => {
this.$message.error(res.message);
this.loading = false;
});
},
},
};
</script>
<style scoped lang="scss">
.projectInfo ::v-deep .el-dialog__body {
padding-top: 0 !important;
}
.pictrue {
width: 60px;
height: 60px;
border: 1px dotted rgba(0, 0, 0, 0.1);
margin-right: 10px;
position: relative;
cursor: pointer;
img {
width: 100%;
height: 100%;
}
}
::v-deep .el-upload--picture-card {
width: 58px;
height: 58px;
line-height: 70px;
}
.btndel {
position: absolute;
z-index: 1;
width: 20px !important;
height: 20px !important;
left: 46px;
top: -4px;
}
.upload {
display: flex;
flex-direction: row;
align-content: center;
height: 60px;
// line-height: 60px;
margin-bottom: 10px;
&_right {
display: flex;
height: 60px;
}
&_left {
width: 115px;
}
.txt {
width: 60px;
height: 60px;
line-height: 60px;
overflow: hidden;
display: inline-block;
text-overflow: ellipsis;
white-space: nowrap;
border: 1px solid #dcdfe6;
border-radius: 4px;
margin-right: 10px;
color: blue;
}
}
.projectInfo ::v-deep .el-tabs__content {
padding-left: 10px !important;
}
.tabPic {
width: 40px !important;
height: 40px !important;
img {
width: 100%;
height: 100%;
}
}
.sp {
display: block;
width: 33%;
margin-bottom: 20px;
}
.sp100 {
width: 100%;
margin-bottom: 15px;
display: inline-block;
}
.third {
width: 100%;
display: flex;
}
.pictrue {
width: 60px;
height: 60px;
border: 1px dotted rgba(0, 0, 0, 0.1);
margin-right: 10px;
position: relative;
cursor: pointer;
display: inline-block;
vertical-align: middle;
img {
width: 100%;
height: 100%;
}
}
.demo-image__preview {
display: inline-block;
vertical-align: middle;
}
</style>