提交 471529d4 authored 作者: 龙菲's avatar 龙菲

完善在线抠图单个删除、修复已有的bug

上级 8e501b21
......@@ -33,7 +33,6 @@
<el-button round v-if="!hasToken">
<i class="el-icon-user"></i>
<span>登录</span>
<!-- <i class="el-icon-arrow-down el-icon--right"></i> -->
</el-button>
<el-dropdown trigger="click" v-else>
<el-button round>
......@@ -41,7 +40,6 @@
<span>{{
hasToken ? userInfo.nickName || userInfo.username : "登录"
}}</span>
<!-- <i class="el-icon-arrow-down el-icon--right"></i> -->
</el-button>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item v-if="!hasToken" class="operation-item"
......
......@@ -13,8 +13,9 @@
v-for="(item, index) in imgList"
:key="index"
>
<!-- {{ $getFullUrl(item[imgKey]) }} -->
<img :src="$getFullUrl(item[imgKey])" alt="" />
<div class="enlarge" @click="handelPreviewImages(imgList,index)">
<div class="enlarge" @click="handelPreviewImages(imgList, index)">
<img src="@/assets/imgs/enlarge-s.png" alt="" />
</div>
</swiper-slide>
......@@ -52,8 +53,8 @@
/>
</div>
</template>
<script>
<script>
import { swiper, swiperSlide } from "vue-awesome-swiper";
import "swiper/dist/css/swiper.css";
export default {
......@@ -95,7 +96,7 @@ export default {
slideToClickedSlide: true,
},
imgViewerVisible: false,
initialIndex:0
initialIndex: 0,
};
},
......@@ -108,10 +109,10 @@ export default {
});
},
methods: {
handelPreviewImages(items,i) {
handelPreviewImages(items, i) {
this.imgViewerVisible = true;
this.previewList = items.map((item) => this.$getFullUrl(item.url));
this.initialIndex = i
this.initialIndex = i;
},
closeImgViewer() {
this.imgViewerVisible = false;
......@@ -119,8 +120,8 @@ export default {
},
};
</script>
<style scoped lang="scss">
<style scoped lang="scss">
.firstDiv {
/* width: 1920px; */
/* height: 1080px; */
......@@ -181,7 +182,6 @@ export default {
}
}
.gallery-top {
height: 80%;
width: 100%;
......@@ -200,7 +200,3 @@ export default {
opacity: 1;
}
</style>
\ No newline at end of file
......@@ -12,26 +12,17 @@
:key="index"
>
<img :src="item.pressUrl" alt="" />
<!-- <div class="enlarge" @click="handelPreviewImages(imgList)">
<img src="@/assets/imgs/enlarge-s.png" alt="" />
</div> -->
</swiper-slide>
<div
class="swiper-button-next swiper-button-white"
slot="button-next"
></div>
<div
class="swiper-button-prev swiper-button-white"
slot="button-prev"
></div>
class="swiper-button-next swiper-button-white"
slot="button-next"
></div>
<div
class="swiper-button-prev swiper-button-white"
slot="button-prev"
></div>
</swiper>
</div>
<!-- <el-image-viewer
v-if="imgViewerVisible"
:on-close="closeImgViewer"
:url-list="previewList"
/> -->
</div>
</template>
......
......@@ -12,7 +12,6 @@
:key="index"
@click="handleClickItem(item)"
>
<!-- <img :src="item.pressUrl || item.faceImagePressUrl" alt="" /> -->
<div
class="img-container"
@click="handelPreviewImages(imgList, index)"
......@@ -20,14 +19,6 @@
<slot name="img" :item="item"></slot>
</div>
<slot name="info" :item="item" />
<!-- <div
class="enlarge"
@click="handelPreviewImages(imgList)"
v-if="needEnlarge"
>
<img src="@/assets/imgs/enlarge-s.png" alt="" />
<span>查看大图</span>
</div> -->
</swiper-slide>
<!--分页器。如果放置在swiper外面,需要自定义样式。-->
......@@ -106,7 +97,6 @@ export default {
this.imgViewerVisible = false;
},
handleClickItem(item) {
debugger;
this.$emit("handleClickItem", item);
},
},
......
......@@ -100,7 +100,7 @@ export default {
};
</script>
<style lang='scss'>
<style lang="scss">
// 富文本编辑器汉化
.editor {
line-height: normal !important;
......@@ -114,8 +114,10 @@ export default {
content: "保存";
padding-right: 0px;
}
.ql-editor{
.ql-editor {
min-height: 120px;
max-height: 150px;
overflow: auto;
}
.ql-snow .ql-tooltip[data-mode="video"]::before {
......@@ -182,4 +184,4 @@ export default {
.ql-snow .ql-picker.ql-font .ql-picker-item[data-value="monospace"]::before {
content: "等宽字体";
}
</style>
\ No newline at end of file
</style>
......@@ -45,7 +45,8 @@ router.beforeEach(async (to, from, next) => {
next()
} else {
// other pages that do not have permission to access are redirected to the login page.
next(`/login?redirect=${to.path}`)
// next(`/login?redirect=${to.path}`)
next('/login')
NProgress.done()
}
}
......
......@@ -173,9 +173,6 @@ export default {
],
};
},
mounted() {
this.loadData();
},
methods: {
async search(form) {
var params = {
......
......@@ -5,16 +5,11 @@
<!-- 展览基本信息 -->
<div class="content-item display-detail_basic_info">
<div class="info-container">
<div
v-if="displayDetail.imagesVo && displayDetail.imagesVo.length > 0"
class="info-container-left"
>
<div v-if="hasImages" class="info-container-left">
<SlideImage
:imgList="displayDetail.imagesVo"
:imgKey="'middleUrl'"
v-if="
displayDetail.imagesVo && displayDetail.imagesVo.length > 0
"
v-if="hasImages"
/>
<SlideImage
:imgList="[{ middleUrl: displayDetail.faceImagePressUrl }]"
......@@ -35,28 +30,19 @@
<el-col :span="24" class="left">
<div class="basic-info">
<div class="body-item">
<span class="label">
<!-- <svg-icon icon-class="keyword"></svg-icon> -->
关键词:
</span>
<span class="label"> 关键词: </span>
<span class="value">{{
displayDetail.keyword || "暂无"
}}</span>
</div>
<div class="body-item" v-if="dicts.displayType">
<span class="label">
<!-- <svg-icon icon-class="zllx"></svg-icon> -->
展览类型:
</span>
<span class="label"> 展览类型: </span>
<span class="value">{{
dicts.displayType[displayDetail.type] || "暂无"
}}</span>
</div>
<div class="body-item" v-if="dicts.displayCharacter">
<span class="label">
<!-- <svg-icon icon-class="zlxz"></svg-icon> -->
展览性质:
</span>
<span class="label"> 展览性质: </span>
<span class="value">{{
dicts.displayCharacter[
displayDetail.displayCharacter
......@@ -64,19 +50,13 @@
}}</span>
</div>
<div class="body-item">
<span class="label">
<!-- <svg-icon icon-class="zldw"></svg-icon> -->
展览单位:
</span>
<span class="label"> 展览单位: </span>
<span class="value">{{
displayDetail.deptName || "暂无"
}}</span>
</div>
<div class="body-item">
<span class="label">
<!-- <svg-icon icon-class="zldq"></svg-icon> -->
展览地区:
</span>
<span class="label"> 展览地区: </span>
<span class="value">{{
displayDetail.regionName || "暂无"
}}</span>
......@@ -113,7 +93,6 @@
:style="{ animationPlayState: audioPlaying ? 'running' : 'paused' }"
v-if="displayDetail.audiosVo && displayDetail.audiosVo.length > 0"
>
<!-- <img src="@/assets/imgs/display/normal/music.png" alt="" /> -->
<svg-icon icon-class="music"></svg-icon>
<AudioPlayer
style="display: none"
......@@ -144,11 +123,7 @@
</div>
<!-- 展览简介 -->
<div class="content-item display-detail_intro" id="intro">
<div class="intro-title">
<!-- <svg-icon icon-class="jianjie"></svg-icon> -->
<!-- <i class="el-icon-tickets"></i> -->
<span>展览简介</span>
</div>
<div class="intro-title">展览简介</div>
<div class="intro-content">
<div class="left-box">简介</div>
<div
......@@ -189,18 +164,9 @@
class="content-item videos"
v-if="displayDetail.videosVo && displayDetail.videosVo.length > 0"
>
<div class="video-title">
<!-- <i class="el-icon-video-camera"></i> -->
展览视频
</div>
<div class="video-title">展览视频</div>
<div class="video-content">
<div class="player">
<!-- <video-player
v-if="currentVideo && currentVideo.url"
:src="$getFullUrl(currentVideo.url)"
class="video-player"
>
</video-player> -->
<Video
:url="$getFullUrl(currentVideo.url)"
class="video-player"
......@@ -327,7 +293,6 @@ import { swiper, swiperSlide } from "vue-awesome-swiper";
import "swiper/dist/css/swiper.css";
import { isElementInViewport2 } from "@/utils/index";
import NormalStyleUnit from "./NormalStyleUnit.vue";
// import videoPlayer from "@/components/VideoPlayer";
import Video from "@/components/Video";
export default {
......@@ -354,6 +319,16 @@ export default {
default: () => ({}),
},
},
computed: {
hasImages() {
if (!this.displayDetail) {
return;
}
return (
this.displayDetail.imagesVo && this.displayDetail.imagesVo.length > 0
);
},
},
data() {
let vm = this;
return {
......@@ -461,16 +436,16 @@ export default {
}
}
}
this.$nextTick(() => {
// this.replaceFaceImage();
if (
this.displayDetail.audiosVo &&
this.displayDetail.audiosVo.length > 0
) {
this.$message.info("正在播放当前文物讲解音频,点击旋转按钮可关闭");
this.$refs.AudioPlayer.play();
}
});
// this.$nextTick(() => {
// // this.replaceFaceImage();
// if (
// this.displayDetail.audiosVo &&
// this.displayDetail.audiosVo.length > 0
// ) {
// this.$message.info("正在播放当前文物讲解音频,点击旋转按钮可关闭");
// this.$refs.AudioPlayer.play();
// }
// });
},
// 点击音频
......
......@@ -41,6 +41,9 @@
</el-tab-pane>
</el-tabs>
</div>
<el-card v-if="prviewType == 'approval'" class="approval-form">
<ApprovalForm :flowId="detail.id" />
</el-card>
</el-dialog>
</template>
......@@ -51,6 +54,7 @@ import DisplayBaseInfo from "@/components/DisplayBaseInfo";
import CulturalRelicTable from "./culturalRelic/CulturalRelicTable.vue";
import ApprovalInfo from "./approval/ApprovalInfo.vue";
import DisplayRender from "./display/DisplayRender.vue";
import ApprovalForm from "./approval/ApprovalForm.vue";
export default {
name: "PreviewDialog",
components: {
......@@ -59,6 +63,7 @@ export default {
ApprovalInfo,
DisplayBaseInfo,
DisplayRender,
ApprovalForm,
},
props: {
// 预览类型,view or approval
......@@ -169,9 +174,18 @@ export default {
::v-deep .el-tabs__content {
max-height: 64vh;
overflow: auto;
padding-bottom: 80px;
}
::v-deep .el-table__body-wrapper {
overflow-x: hidden;
}
.approval-form {
padding: 20px;
position: absolute;
bottom: 0;
left: 0;
right: 0;
z-index: 99;
}
</style>
<template>
<div class="approval-form">
<!-- 审批表单 -->
<el-form
<el-button
size="mini"
:model="dialogForm"
prop="remark"
:rules="rules"
ref="form"
style="margin: 0 10px 0; width: calc((100% - 20px) / 2)"
type="primary"
icon="el-icon-check"
@click.native="handleCheck(AGREE)"
>同意</el-button
>
<el-form-item label="审批意见:">
<el-radio-group
v-model="checkStatus"
size="mini"
style="margin-bottom: 20px"
>
<el-radio :label="1" border>同意</el-radio>
<el-radio :label="-2" border>驳回</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="驳回意见:" prop="remark" v-if="checkStatus == -2">
<el-input
type="textarea"
placeholder="驳回意见"
v-model="dialogForm.remark"
size="mini"
:rows="4"
>
</el-input>
</el-form-item>
<el-form-item>
<el-button
size="mini"
style="margin: 0 10px 0; width: calc((100% - 20px) / 2)"
type="primary"
icon="el-icon-check"
@click.native="handleCheck"
>确定</el-button
>
<el-button
size="mini"
style="margin: 0; width: calc((100% - 20px) / 2)"
type="primary"
icon="el-icon-close"
@click.native="handleCancel"
plain
>取消</el-button
>
</el-form-item>
</el-form>
<el-popover placement="top" width="400" trigger="click" ref="popover">
<el-form :model="dialogForm" size="mini" ref="form" :rules="rules">
<el-form-item prop="remark">
<el-input
type="textarea"
placeholder="驳回意见"
v-model="dialogForm.remark"
size="mini"
:rows="2"
>
</el-input
></el-form-item>
<el-form-item>
<el-button @click.native="handleCancel" plain>取消</el-button>
<el-button type="primary" @click.native="handleCheck(DISAGREE)"
>确定</el-button
>
</el-form-item>
</el-form>
<el-button
slot="reference"
size="mini"
style="margin: 0; width: calc((100% - 20px) / 2)"
type="primary"
icon="el-icon-close"
plain
@click.native="() => (popoverVisible = true)"
>驳回</el-button
>
</el-popover>
</div>
</template>
......@@ -64,6 +54,8 @@ export default {
inject: ["handleClosePreviewDialog", "loadData"],
data() {
return {
AGREE: 1,
DISAGREE: -2,
checkStatus: 1, //1同意 -2驳回
dialogForm: {
remark: "", //驳回意见
......@@ -77,12 +69,12 @@ export default {
},
],
},
popoverVisible: false,
};
},
methods: {
handleCheck() {
const { checkStatus } = this;
if (checkStatus == -2) {
handleCheck(checkStatus) {
if (checkStatus == this.DISAGREE) {
this.$refs.form.validate(async (valid) => {
if (valid) {
const { remark } = this.dialogForm;
......@@ -93,6 +85,11 @@ export default {
this.submit(checkStatus);
}
},
handleCancel() {
this.$refs.popover.doClose();
this.handleClosePreviewDialog();
this.$refs.form.resetFields();
},
async submit(checkStatus, remark) {
const params = {
......@@ -112,6 +109,9 @@ export default {
this.loadData();
// 重置数据
this.$refs.form.resetFields();
if (this.$refs.popover) {
this.$refs.popover.doClose();
}
}
},
},
......
......@@ -48,10 +48,6 @@
</el-steps>
<span v-else></span>
</el-card>
<el-card v-if="isShowApprovalForm">
<h3>请审批</h3>
<ApprovalForm :flowId="flowId" />
</el-card>
</div>
</template>
......
......@@ -293,16 +293,17 @@ export const approvleTableTitle = [
label: "创建人",
columnAlign: 'center',
},
// {
// prop: "createTime",
// label: "创建时间",
// columnAlign: 'center',
// },
{
prop: "updateTime",
label: "更新时间",
prop: "createTime",
label: "创建时间",
columnAlign: 'center',
sortable: true
},
// {
// prop: "updateTime",
// label: "更新时间",
// columnAlign: 'center',
// },
{
prop: "remark",
label: "备注",
......
......@@ -55,7 +55,7 @@
:flowId="currentFlowId"
/>
<DisplayInfoEditDialog
ref="displayInfo"
ref="DisplayInfo"
:form="resubmitDisplayInfo"
@refresh="loadData"
:flowId="currentFlowId"
......@@ -263,6 +263,7 @@ export default {
case "文物":
if (isManual) {
const data = await this.getSourceDetail(id);
console.log(data);
this.resubmitCrInfo = data;
this.$appCommon.openDialog(this, "CrInfo");
} else {
......
......@@ -65,15 +65,18 @@
</div>
<div class="more" @click.prevent="toggleItemCheckbox(item)">
<el-button
style="margin-right: 8px"
title="下载"
style="margin-right: 12px"
type="text"
icon="el-icon-download"
@click="handleDownload(item)"
@click="handleDownloadRow(item)"
></el-button>
<el-dropdown>
<i class="el-icon-more" style="color: #409eff"></i>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item>删除</el-dropdown-item>
<el-dropdown-item @click.native="handleDeleteRow(item)"
>删除</el-dropdown-item
>
</el-dropdown-menu>
</el-dropdown>
</div>
......@@ -87,34 +90,6 @@
<div class="name">{{ item.name }}</div>
</div>
</div>
<!-- <el-row class="container" :gutter="10">
<el-col
:span="getColSpan"
v-for="(item, index) in mattingImagesPage.records"
:key="index"
class="img-item"
>
<div
:class="['modal', item.checked ? 'active' : '']"
v-if="isShowCheckbox"
@click.prevent="toggleItemCheckbox(item)"
>
<el-checkbox
class="checkbox"
v-if="isShowCheckbox"
v-model="item.checked"
></el-checkbox>
</div>
<el-image
style="width: 200px; height: 150px; padding: 10px"
:src="item.pressUrl"
fit="contain"
:preview-src-list="srcList"
></el-image>
<div class="name">{{ item.name }}</div>
</el-col>
</el-row>-->
<el-pagination
v-if="mattingImagesPage.records.length > 0"
background
......@@ -147,7 +122,11 @@
<script>
import { tableTitle } from "../configs/list";
import { downFileByFileIds, getMattingImagesPage } from "@/api/matting";
import {
downFileByFileIds,
getMattingImagesPage,
deleteMattingImage,
} from "@/api/matting";
import { Debounce } from "@/utils/index";
export default {
name: "PreviewDialog",
......@@ -261,13 +240,13 @@ export default {
(item) => item.checked
);
},
// 卡片右上角的下载
handleDownloadRow: Debounce(function (row) {
const { fileId } = row;
const ids = [fileId];
this.download(ids);
}, 600),
// 底部下载按钮
handleDownload: Debounce(function () {
let ids = [];
if (this.isShowCheckbox) {
......@@ -285,6 +264,24 @@ export default {
}
this.download(ids);
}, 600),
// 卡片右上角的删除
handleDeleteRow: Debounce(function (row) {
const { fileId } = row;
const ids = [fileId];
this.deleteByIds(ids);
}, 600),
//
async deleteByIds(ids) {
const params = ids;
const res = await deleteMattingImage(params);
if (res.code == 0) {
this.$message.success("删除成功!");
}
this.loadImgs();
},
// 公共的删除方法
async download(ids) {
const params = ids;
......
......@@ -192,7 +192,7 @@ export default {
};
break;
case "edit":
this.edit();
this.edit(row);
break;
case "delete":
let deleteRes = await deleteRole(row.id);
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论