cellsysArt/components/chooseArtwork.vue
2025-01-03 09:52:13 +08:00

339 lines
7.5 KiB
Vue
Raw Permalink 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>
<div class="portal-panel">
<div class="body-container panel-shadow">
<div class="search" style="text-align: center; margin-top: 10px">
<el-input
@change="changeSearch"
@keyup.enter.native="changeSearch"
v-model="input"
clearable
class="search-input"
placeholder="请输入检索内容"
>
<template #prepend>
<el-select
v-model="selectdata"
slot="prepend"
placeholder="检索条件"
style="width: 140px"
>
<el-option label="艺术品编号" value="record_number"></el-option>
<el-option
label="登录号"
value="original_registration_number"
></el-option>
<el-option label="作者" value="author"></el-option>
<el-option label="国家" value="country_id"></el-option>
<el-option label="原名" value="old_name"></el-option>
</el-select>
</template>
<template #append>
<el-button
slot="append"
icon="Search"
@click="handleClick"
></el-button>
</template>
</el-input>
</div>
<div class="art-wrap" v-if="archivesDatas.length > 0">
<el-card
@click="handleChecked(art)"
:class="GLOBAL.isMobile ? 'isMobileArtCard' : 'artCard'"
v-for="(art, index) in archivesDatas"
>
<div class="art-image-wrap">
<el-image
class="artwork-image"
:src="art.coverImageUrl"
fit="cover"
>
<template #error>暂无图片</template>
</el-image>
</div>
<div class="art-info">
<span class="art-name">{{ art.oldNameFormat }}</span>
<p class="art-other">艺术家:{{ art.author || "未知" }}</p>
<p class="art-other">状态:{{ art.statusMsg }}</p>
</div>
</el-card>
</div>
<el-empty style="margin: 10%" v-else description="空空如也"></el-empty>
</div>
<div class="footer-container horizontal-shadow">
<Pagination
v-show="listQuery.total > 0"
:total="listQuery.total"
:page.sync="listQuery.currPage"
:limit.sync="listQuery.pageSize"
@pageChange="handlePageChange"
></Pagination>
</div>
</div>
</template>
<script>
import ArtSystem from "../artSystem.js";
import { ElMessage } from "element-plus";
import Pagination from "./Pagination/index.vue";
export default {
name: "chooseArtwork",
emits: ["checked"],
props: {
type: String,
},
data() {
return {
listQuery: {
filters: [],
total: 0,
currPage: 1,
pageSize: 10,
listLoading: false,
},
form: {},
input: "",
selectdata: "record_number",
archivesDatas: [],
};
},
components: { Pagination },
mounted() {
this.queryTableData();
},
methods: {
handlePageChange() {},
queryTableData() {
this.listQuery.listLoading = true;
//加载表格数据
let pageInfo = {
currPage: this.listQuery.currPage,
pageSize: this.listQuery.pageSize,
};
ArtSystem.queryArtworks({ pageInfo, filter: this.listQuery.filters })
.then((res) => {
this.archivesDatas = res.data;
this.listQuery.total = res.totalCount;
})
.catch((error) => {
console.error(error);
ElMessage({
message: error,
type: "error",
});
})
.finally(() => {
this.listQuery.listLoading = false;
});
},
removeSearch() {
this.queryTableData();
},
changeSearch() {
console.log(this.input, this.selectdata);
if (this.input) {
let operator;
if (this.selectdata !== "record_number") {
operator = "like";
} else {
operator = "=";
}
this.listQuery.filters = [
{
name: this.selectdata,
operator: operator,
value: this.input,
},
];
} else {
this.listQuery.filters = [];
}
this.queryTableData();
},
handleClick() {
this.changeSearch();
},
handleChecked(art) {
if (this.type === "inStorage") {
if (art.status === 2) {
ElMessage({
message: "该艺术品已经处于入库状态",
type: "error",
});
return;
}
} else if (this.type === "outStorage") {
if (art.status !== 2) {
ElMessage({
message: "该艺术品目前不在仓库中无法进行出库",
type: "error",
});
return;
}
} else if (this.type === "repairFile") {
if (art.status === 2) {
ElMessage({
message: "该艺术品目前处于入库保存状态请先出库",
type: "error",
});
return;
}
if (art.status === 4) {
ElMessage({
message: "该艺术品目前已经处于修复中状态",
type: "error",
});
return;
}
}
this.$emit("checked", art);
},
},
};
</script>
<style scoped>
.portal-panel {
position: relative;
height: 100%;
overflow: hidden;
}
.footer-container {
width: 100%;
position: absolute;
bottom: 0;
justify-content: center;
display: flex;
}
.art-wrap {
display: flex;
flex-flow: row wrap;
margin: 2.1rem;
}
.search-input {
margin: 0 auto;
width: 80%;
}
.isMobileArtCard {
position: relative;
box-sizing: border-box;
border-radius: 2px;
width: 80%;
margin-bottom: 16px;
margin-left: 15px;
margin-right: 15px;
&:hover {
cursor: pointer;
box-shadow: 0 2px 12px 0 rgb(0 0 0 / 20%);
}
& .art-image-wrap {
width: 100%;
height: 200px;
margin: 0 auto;
display: flex;
justify-content: center;
}
& .artwork-image {
width: 100%;
height: 100%;
}
& .art-info {
padding: 10px 0;
text-align: center;
}
& .art-name {
font-size: 16px;
text-align: center;
}
& .art-other {
font-size: 14px;
color: #999999;
margin-top: 10px;
}
}
.artCard {
position: relative;
box-sizing: border-box;
border-radius: 2px;
width: calc(20% - 30px);
margin-bottom: 16px;
margin-left: 15px;
margin-right: 15px;
&:hover {
cursor: pointer;
box-shadow: 0 2px 12px 0 rgb(0 0 0 / 20%);
}
& .art-image-wrap {
width: 100%;
height: 200px;
margin: 0 auto;
display: flex;
justify-content: center;
}
& .artwork-image {
width: 100%;
height: 100%;
}
& .art-info {
padding: 10px 0;
}
& .art-name {
font-size: 16px;
text-align: center;
}
& .art-other {
font-size: 12px;
color: #999999;
margin-top: 10px;
}
}
:deep(.el-card__body) {
display: flex;
flex-direction: column;
align-items: center;
}
@media screen and (max-width: 750px) {
.art-wrap {
display: flex;
overflow-y: scroll;
flex-flow: row wrap;
margin-top: 20px;
justify-content: center;
}
:deep(.el-select) {
width: 7rem !important;
}
.search-input {
width: 100%;
}
.art-wrap::-webkit-scrollbar {
display: none; /* 对于基于Webkit的浏览器如Chrome和Safari */
}
.art-wrap {
-ms-overflow-style: none; /* 对于IE和Edge */
scrollbar-width: none; /* 对于Firefox */
}
}
</style>