提交 6187ea81 authored 作者: 龙菲's avatar 龙菲

对接待审核文物列表接口、优化文物上传和修改的逻辑处理

上级 7a27ee63
import request from '@/utils/request'
// 带权限查询审核分页数据
export function getFlowListPagePer(data) {
return request({
url: '/bizFlow/listByPagePer',
method: 'post',
data
})
}
// 通过流程id查询流程详情
export function getFlowDetailById(params) {
return request({
url: '/bizFlow/detailById',
method: 'get',
params
})
}
// 查询流程关联的文物详情(手动添加的文物详情)
export function getFlowCulturalRelicDetail(params) {
return request({
url: '/bizFlow/flowCulturalRelicDetail',
method: 'get',
params
})
}
// 查询流程关联的展览详情(手动添加的展览详情)
export function getFlowExhibitionDetail(params) {
return request({
url: '/bizFlow/flowExhibitionDetail',
method: 'get',
params
})
}
// 带权限分页查询流程关联的文物信息
export function getListFlowCulturalRelicByPage(data) {
return request({
url: '/bizFlow/listFlowCulturalRelicByPage',
method: 'post',
data
})
}
// 带权限查询审核分页数据
export function getListByPagePer(data) {
return request({
url: '/bizFlow/delete',
method: 'post',
data
})
}
\ No newline at end of file
// 目前文物存在2张表,一张临时表和中间表,只有审核通过的在最终表,未审核和审核驳回等在临时表
// 新增和修改也只是存在临时表
// 最终表的数据不能修改
import request from '@/utils/request'
export function getCulturalRelicList(data) {
......@@ -8,6 +12,7 @@ export function getCulturalRelicList(data) {
})
}
// 获取带权限的文物列表分页(最终表)
export function getCulturalRelicListPer(data) {
return request({
url: '/bizCulturalRelic/listByPagePer',
......@@ -16,7 +21,27 @@ export function getCulturalRelicListPer(data) {
})
}
// 获取带权限的文物列表分页(临时表)
export function getCulturalRelicListPerTemp(data) {
return request({
url: '/bizCulturalRelicTemp/listByPagePer',
method: 'post',
data
})
}
// 文物新增和修改(临时表)
export function addOrUpdateCulturalRelic(data) {
return request({
url: '/bizCulturalRelicTemp/addOrUpdate',
method: 'post',
data
})
}
// 新增文物(最终表),因为多了临时表暂时废弃
export function addCulturalRelic(data) {
return request({
url: '/bizCulturalRelic/add',
......@@ -25,6 +50,7 @@ export function addCulturalRelic(data) {
})
}
// 修改文物(最终表),因为多了临时表暂时废弃
export function editCulturalRelic(data) {
return request({
url: '/bizCulturalRelic/update',
......@@ -33,7 +59,7 @@ export function editCulturalRelic(data) {
})
}
// 根据文物id查询详情
// 根据文物id查询详情(最终表)
export function getRCDetailById(params) {
return request({
url: '/bizCulturalRelic/listById',
......@@ -42,6 +68,17 @@ export function getRCDetailById(params) {
})
}
// 根据文物id查询详情(临时表)
export function getRCDetailByIdTemp(params) {
return request({
url: '/bizCulturalRelicTemp/detailById',
method: 'get',
params
})
}
// 删除文物(最终表)
export function deleteCultralRelic(data) {
return request({
url: '/bizCulturalRelic/delete',
......@@ -50,6 +87,15 @@ export function deleteCultralRelic(data) {
})
}
// 删除文物(临时表)
export function deleteCultralRelicTemp(data) {
return request({
url: '/bizCulturalRelicTemp/delete',
method: 'delete',
data
})
}
// 获取文物数量统计
export function getCulturalRelicStatistic(params) {
return request({
......
// 目前展览存在2张表,一张临时表和中间表,只有审核通过的在最终表,未审核和审核驳回等在临时表
// 新增和修改也只是存在临时表
// 最终表的数据不能修改
import request from '@/utils/request'
// 获取布展列表
......@@ -9,7 +13,7 @@ export function getList(data) {
})
}
// 获取布展列表
// 获取布展列表(最终表)
export function getListPer(data) {
return request({
url: '/bizExhibition/listByPagePer',
......@@ -18,7 +22,27 @@ export function getListPer(data) {
})
}
// 新增
// 获取布展列表(临时表)
export function getListPerTemp(data) {
return request({
url: '/bizExhibitionTemp/listByPagePer',
method: 'post',
data
})
}
// 新增修改(临时表)
export function addOrUpdateDisplayTemp(data) {
return request({
url: '/bizExhibitionTemp/addOrUpdate',
method: 'post',
data
})
}
// 新增(最终表),因为最终表不允许修改所以废弃
export function addDisplay(data) {
return request({
url: '/bizExhibition/add',
......@@ -26,6 +50,7 @@ export function addDisplay(data) {
data
})
}
// 修改(最终表),因为最终表不允许修改所以废弃
export function editDisplay(data) {
return request({
url: '/bizExhibition/update',
......@@ -34,6 +59,7 @@ export function editDisplay(data) {
})
}
// 修改展览(最终表)
export function getDisplayById(params) {
return request({
url: '/bizExhibition/listById',
......@@ -42,6 +68,16 @@ export function getDisplayById(params) {
})
}
// 修改展览(临时表)
export function getDisplayByIdTemp(params) {
return request({
url: '/bizExhibitionTemp/detailById',
method: 'get',
params
})
}
// 删除展览(最终表)
export function deleteDisplay(data) {
return request({
url: '/bizExhibition/delete',
......@@ -49,6 +85,15 @@ export function deleteDisplay(data) {
data
})
}
// 删除展览(临时表)
export function deleteDisplayTemp(data) {
return request({
url: '/bizExhibitionTemp/delete',
method: 'delete',
data
})
}
// 获取展览数量统计
export function getExhibitionStatistic(params) {
......@@ -59,14 +104,6 @@ export function getExhibitionStatistic(params) {
})
}
// 获取展览审核列表
// export function getDisplayChecklist(data) {
// return request({
// url: '/bizExhibition/checklistByPagePer',
// method: 'post',
// data
// })
// }
// 查询审批结果
export function getDisplayCheckById(params) {
......
......@@ -8,6 +8,7 @@
<script>
import { mapGetters } from "vuex";
export default {
name: "DictText",
props: {
// 字典名称,必填
name: {
......
### 全局组件注册操作说明
注册在全局的组件无需引入即可直接使用
1.在 index.js 中引入需要导入的组件
2.并在数组中添加该组件
#### 注意事项
必须保证组件的 name 和组件本身名称一致,否则无法注册成功
......@@ -5,6 +5,7 @@
<script>
export default {
name: "RichTextShow",
props: {
richText: {
type: String,
......
......@@ -7,14 +7,14 @@
>
<el-input
v-if="item.type == 'input'"
v-model="searchData[item.prop]"
v-model="searchForm[item.prop]"
:placeholder="`请输入${item.placeholder || item.label}`"
@keyup.enter.native="handleSearch"
clearable
></el-input>
<el-select
v-if="item.type == 'select'"
v-model="searchData[item.prop]"
v-model="searchForm[item.prop]"
:placeholder="`请选择${item.placeholder || item.label}`"
clearable
filterable
......@@ -25,12 +25,11 @@
:value="option.value"
v-for="option in item.selectOptions"
:key="option.value"
></el-option>
</el-select>
<el-date-picker
v-if="item.type == 'dateTimeRange'"
v-model="searchData[item.prop]"
v-model="searchForm[item.prop]"
type="datetimerange"
align="right"
start-placeholder="开始日期"
......@@ -40,9 +39,12 @@
:value-format="'yyyy-MM-dd HH:mm:ss'"
>
</el-date-picker>
<el-checkbox v-if="item.type=='checkbox'" v-model="searchData[item.prop]"></el-checkbox>
<el-checkbox
v-if="item.type == 'checkbox'"
v-model="searchForm[item.prop]"
></el-checkbox>
</el-form-item>
<el-form-item style="margin-left:26px">
<el-form-item style="margin-left: 26px">
<el-button
type="primary"
icon="el-icon-search"
......@@ -73,49 +75,12 @@ export default {
type: Array,
default: () => [],
},
/**
*
* form:{
name:'',
status:''
}
config: [
{
prop: "name",
type: "input",
label: "展览名称",
},
{
prop: "status",
type: "select",
label: "状态",
selectOptions: [
{
label: "在线",
value: "true",
},
{
label: "离线",
value: "false",
},
],
},
],
*
*
*/
},
watch: {
config: {
handler: function (value) {
if (value) {
var obj = {};
this.config.map((item) => {
obj[item.prop] = "";
});
this.searchData = JSON.parse(JSON.stringify(obj));
this.searchForm = this.getSearchFormInitialValue(value);
}
},
immediate: true,
......@@ -124,7 +89,7 @@ export default {
},
data() {
return {
searchData: {},
searchForm: {},
pickerOptions: {
shortcuts: [
{
......@@ -159,11 +124,23 @@ export default {
};
},
methods: {
// 获取searchForm初始值
getSearchFormInitialValue(config) {
let form = {};
config.map((item) => {
if (item.type == "checkbox") {
form[item.prop] = false;
} else {
form[item.prop] = "";
}
});
return JSON.parse(JSON.stringify(form));
},
handleSearch() {
this.$emit("search", this.searchData);
this.$emit("search", this.searchForm);
},
handleReset() {
this.searchData = {};
this.searchForm = this.getSearchFormInitialValue(this.config);
this.$emit("reset");
},
handleSelectChange() {
......@@ -177,8 +154,7 @@ export default {
</script>
<style lang="scss" scoped>
::v-deep .el-form-item{
::v-deep .el-form-item {
margin-bottom: 0;
}
</style>
\ No newline at end of file
</style>
......@@ -42,7 +42,7 @@
<script>
export default {
name: "TableComponent",
name: "TableOperation",
props: {
operations: {
type: Array,
......
<template>
<div class="images-list">
<!-- <el-upload :disabled="onlyRead" action="#" :on-remove="handleRemove" :on-exceed="handleExceed" :on-change="handleChange"
:file-list="fileList" :multiple="fileLimit > 1" :limit="fileLimit" :list-type="listType" :accept="fileAccept"
:auto-upload="false" ref="ManualUploader" :class="{ disabled: uploadDisabled || onlyRead }">
<i v-if="listType === 'picture-card'" class="el-icon-plus" slot="trigger" ></i>
<el-button size="small" type="primary" v-else-if="!onlyRead">点击上传</el-button>
<div v-if="(showTip && !onlyRead)" slot="tip" class="el-upload__tip">
<div v-if="advice" style="color: #f56c6c">建议:{{ advice }}</div>
提示:只能上传{{ fileTypeName || "jpg/png" }}文件,且不超过
{{ fileSize }}MB,最多上传{{ fileLimit }}个文件
</div>
</el-upload> -->
<el-upload
action="#"
:on-remove="handleRemove"
......
import DictText from './DictText/index.vue'//字典文字显示
import TextShow from './TextShow/index.vue'//富文本文字显示
import RichTextShow from './RichTextShow/index.vue'//富文本文字显示
import SearchBar from './SearchBar/index.vue'//富文本文字显示
import TablePage from "./Table/TablePage.vue";//分页
import TableOperation from "./Table/TableOperation.vue";//分页操作
import ManualUploader from "./Uploader/ManualUploader.vue";//上传文件组件
import VueQuillEditor from "@/components/VueQuillEditor";//富文本编辑器
import ElImageViewer from "element-ui/packages/image/src/image-viewer"
export default {
const components = [DictText, RichTextShow, SearchBar, TablePage, TableOperation, ElImageViewer, ManualUploader, VueQuillEditor]
const plugins = {
install(Vue) {
//注册全局组件
Vue.component('DictText', DictText)
Vue.component('TextShow', TextShow)
components.forEach((component) => {
Vue.component(component.name, component)
})
}
}
\ No newline at end of file
}
export default plugins
\ No newline at end of file
......@@ -12,17 +12,14 @@ import '@/permission' // permission control
import VideoPlayer from 'vue-video-player'
import 'video.js/dist/video-js.css'
import 'vue-video-player/src/custom-theme.css'
import {
getFullUrl
} from '@/utils/index'
import { file } from '@/utils/file'
import * as echarts from 'echarts';
import Components from '@/components'
Vue.use(Components)
Vue.prototype.$getFullUrl = getFullUrl
Vue.prototype.$echarts = echarts
Vue.prototype.$file = file
// 导入批量注册的组件
import plugins from './components'
import '@/utils/globalFunctions'
// 注册导入的插件
Vue.use(plugins)
Vue.use(ElementUI)
Vue.use(VideoPlayer)
Vue.config.productionTip = false
......
// 本文件放置一些全局使用的方法,统一管理方便修改
import Vue from 'vue'
import {
getFullUrl
} from '@/utils/index'
import { file } from '@/utils/file'
import * as echarts from 'echarts';
Vue.prototype.$getFullUrl = getFullUrl //获取文件的完整链接
Vue.prototype.$echarts = echarts //Echarts
Vue.prototype.$file = file //文件操作
\ No newline at end of file
......@@ -61,30 +61,24 @@
</el-pagination>
</div>
<div class="dialog-footer">
<el-button type="primary" size="mini" @click.native="handleClose">关闭</el-button>
<el-button type="primary" size="mini" @click.native="handleClose"
>关闭</el-button
>
</div>
</el-dialog>
</template>
<script>
import TablePage from "@/components/Table/TablePage.vue";
import TableOperation from "@/components/Table/TableOperation.vue";
import {
importRecordsTitle,
importOperates,
importOperations,
} from "../config";
import { parseTime, getYestoday ,renderSize} from "@/utils/index";
} from "../configs/import";
import { parseTime, getYestoday, renderSize } from "@/utils/index";
import { getImportListPage, deleteByBatchNum } from "@/api/file";
import SearchBar from "@/components/SearchBar";
export default {
name: "ImportRecordDialog",
components: {
TablePage,
TableOperation,
SearchBar,
},
props: {
visible: {
type: Boolean,
......@@ -100,7 +94,7 @@ export default {
handler: function (value) {
this.dialogVisible = value;
if (value) {
this.loadData()
this.loadData();
}
},
deep: true,
......@@ -121,9 +115,9 @@ export default {
// return (fileSize) => {
// return (Number(fileSize) / 1024 / 1024).toFixed(2) + "M";
// };
return (fileSize)=>{
return renderSize(Number(fileSize))
}
return (fileSize) => {
return renderSize(Number(fileSize));
};
},
isToday(time) {
......@@ -187,7 +181,7 @@ export default {
var params = {
page: this.list.current,
limit: this.list.size,
type:"biz_cultural_relic",
type: "biz_cultural_relic",
...form,
};
let res = await getImportListPage(params);
......@@ -205,7 +199,7 @@ export default {
var params = {
page: this.list.current,
limit: this.list.size,
type:'biz_cultural_relic'
type: "biz_cultural_relic",
};
let res = await getImportListPage(params);
if (res.code == 0) {
......@@ -245,7 +239,7 @@ export default {
};
</script>
<style lang='scss' scoped>
<style lang="scss" scoped>
.title {
display: flex;
.divider {
......@@ -282,4 +276,4 @@ export default {
.pagination {
margin: 16px;
}
</style>
\ No newline at end of file
</style>
const fileUploadFuctions = {
name: '123',
/**
* 判断文件是否上传过
* @param {File | Object} file 文件对象,可能是File可能就是普通对象
* @returns {Boolean} 文件是否上传过
*/
isFileRaw(file) {
let isFileRaw = false;
isFileRaw = file.status && file.status == "ready";
return isFileRaw;
},
/**
* 判断formData中是否有数据
* @param {FormData} formData 文件对象,可能是File可能就是普通对象
* @returns {Boolean} formData中是否有数据
*/
isFormDataHasData(formData) {
const formDataArr = Array.from(formData.entries(), ([key, prop]) => ({
[key]: {
ContentLength: typeof prop === "string" ? prop.length : prop.size,
},
}));
return formDataArr.length > 0;
},
/**
* 获取对应媒体下的文件
* @param {string} mediaKey 媒体key
* @returns {Array} 媒体对应的文件
*/
getMediaFile($el, mediaKey) {
return $el.$refs[mediaKey].getFiles();
},
/**
* 获取需要上传的FormData
* @param {Array} mediaKeys 媒体keys数组
* @returns {FormData} formData 需要上传的formdata
*/
getNeedUploadFormData($el, mediaKeys) {
const formData = new FormData();
const self = this; // 保存正确的 this
mediaKeys.map((mediaKey) => {
const currentFileList = self.getMediaFile($el, mediaKey);
currentFileList.map((file) => {
if (self.isFileRaw(file)) {
formData.append(mediaKey, file.raw);
}
});
});
return formData;
},
/**
* 获取需要已经存在(数据库已存储的)文件ID对象
* @param {Array} mediaKeys 媒体keys数组
* @returns {Object} 已经存在(数据库已存储的)文件ID对象
*/
getOldIdsObj(mediaKeys, dialogForm) {
let oldFileIdsObj = {};
mediaKeys.forEach((key) => {
if (dialogForm[key]) {
oldFileIdsObj[key] = dialogForm[key];
} else {
oldFileIdsObj[key] = "";
}
});
return oldFileIdsObj;
},
/**
* 获取返回结果中的文件id对象
* @param {Array} mediaKeys 媒体keys数组
* @param {Object} requestRes 上传返回的数据对象
* @returns {Object} 新上传的文件id对象
*/
getNewIdsObj(mediaKeys, requestRes) {
let newUploadedFileIdsObj = {};
mediaKeys.forEach((key) => {
newUploadedFileIdsObj[key] = this.getResIdStrByMedia(key, requestRes);
});
return newUploadedFileIdsObj;
},
/**
* 获取上传返回结果中的id字符串
* @param {Array} mediaKeys 媒体keys数组
* @param {Object} requestRes 上传返回的数据对象
* @returns {string} 新上传的文件id字符串
*/
getResIdStrByMedia(mediaKey, requestRes) {
const arr = [];
requestRes.data.forEach((item) => {
if (item.fileKey == mediaKey) {
arr.push(item.fileId);
}
});
const str = arr.length > 0 ? arr.join(",") : "";
return str;
},
/**
* 获取新旧合并的文件id对象
* @param {Array} mediaKeys 媒体keys数组
* @param {Object} oldObj 已经存在的
* @param {Object} newObj 新上传的
* @returns {string} 新上传的文件id字符串
*/
getMergedIdsObj(oldObj, newObj, mediaKeys) {
const obj = {};
mediaKeys.forEach((key) => {
newArr = newObj[key].split(",");
oldArr = oldObj[key].split(",");
let fullArr = new Set([...newArr, ...oldArr]);
let fullStr = fullArr.join(",");
obj[key] = fullStr;
});
return obj;
},
/**
* 获取需要被删除的文件ID合集
* @param {Array} mediaKeys 媒体keys数组
* @param {Object} dialogForm 表单对象
* @param {Object} newUploadedFileIdsObj 最新上传之后的
* @returns {Object} 新上传的文件id对象
*/
getDeleteFileArr(oldObj, newObj, mediaKeys) {
const arr = [];
mediaKeys.forEach((key) => {
newArr = newObj[key].split(",");
oldArr = oldObj[key].split(",");
let fullArr = new Set([...newArr, ...oldArr]);
oldArr.forEach((oldId) => {
if (!fullArr.includes(oldId)) {
arr.push(oldId);
}
});
});
return arr;
}
}
export default fileUploadFuctions
\ No newline at end of file
// 文物导入的配置文件
export const importRecordsTitle = [{
prop: "createTime",
label: "导入时间",
columnAlign: "left",
needTimeTag: true,
},
{
prop: "batchNum",
label: "导入批次",
columnAlign: "center",
},
{
prop: "fileName",
label: "文件名称",
columnAlign: "center",
width: 300
},
{
prop: "fileSize",
label: "文件大小",
columnAlign: "center",
},
{
prop: "remark",
label: "备注",
columnAlign: "center",
width: "60px",
},
]
export const importOperates = {
operate: true,
label: "操作",
width: "220px",
minwidth: "220px",
titleAlign: "center",
columnAlign: "center",
}
export const importOperations = [{
type: 'delete',
title: '删除记录及文物'
},]
\ No newline at end of file
// 文物分页的配置
export const passedTitle = [{
prop: "name",
label: "名称",
......@@ -254,14 +255,11 @@ export const operates = {
label: "操作",
titleAlign: "center",
columnAlign: "center",
width: "280px",
width: "180px",
}
export const operations = [
{
type: 'view3D',
title: '查看3D文物'
},
// 操作(临时表)
export const operationsTemp = [
{
type: 'edit',
title: '编辑'
......@@ -270,50 +268,44 @@ export const operations = [
type: 'delete',
title: '删除'
},
]
export const importRecordsTitle = [{
prop: "createTime",
label: "导入时间",
columnAlign: "left",
needTimeTag: true,
},
{
prop: "batchNum",
label: "导入批次",
columnAlign: "center",
},
{
prop: "fileName",
label: "文件名称",
columnAlign: "center",
width: 300
},
{
prop: "fileSize",
label: "文件大小",
columnAlign: "center",
},
{
prop: "remark",
label: "备注",
columnAlign: "center",
width: "60px",
},
// 操作(最终表)
export const operations = [
{
type: 'delete',
title: '删除'
},
]
export const importOperates = {
operate: true,
label: "操作",
width: "220px",
minwidth: "220px",
titleAlign: "center",
columnAlign: "center",
}
// 搜索配置
export const searchConfig = [
{
prop: "name",
type: "input",
label: "文物名称",
},
{
prop: "status",
type: "select",
label: "状态",
selectOptions: [
{
label: "已上架",
value: "1",
},
{
label: "已下架",
value: "0",
},
],
},
// 是否只看3D
{
prop: "upload3dFlag",
type: "checkbox",
label: "只看3D",
},
]
export const importOperations = [{
type: 'delete',
title: '删除记录及文物'
},]
\ No newline at end of file
......@@ -53,7 +53,7 @@
<el-tab-pane label="已审核通过" name="passed"></el-tab-pane>
</el-tabs>
<TablePage
:data="list.records"
:data="getCurrentList().records"
:tableTitle="passedTitle"
:operates="operates"
>
......@@ -87,7 +87,7 @@
</template>
<template v-slot:operates="scope">
<TableOperation
:operations="operations"
:operations="getOperations"
:rawData="scope.scope.row"
@handleOperation="handleOperation"
></TableOperation>
......@@ -97,11 +97,11 @@
background
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="Number(list.current)"
:current-page="Number(getCurrentList().current)"
:page-sizes="[10, 20, 40, 50]"
:page-size="Number(list.size)"
:page-size="Number(getCurrentList().size)"
layout="total, sizes, prev, pager, next, jumper"
:total="Number(list.total)"
:total="Number(getCurrentList().total)"
class="pagination"
>
</el-pagination>
......@@ -113,7 +113,7 @@
@handleClose="handleEditClose"
@refresh="loadData"
/>
<UploadDialog ref="UploadDialog" @update="loadData"/>
<UploadDialog ref="UploadDialog" @update="loadData" />
<ImportRecordDialog
:visible="importRecordVisible"
......@@ -136,12 +136,18 @@
</template>
<script>
import TablePage from "@/components/Table/TablePage.vue";
import TableOperation from "@/components/Table/TableOperation.vue";
import SearchBar from "@/components/SearchBar";
import { passedTitle, unPassedTitle, operates, operations } from "./config";
import {
passedTitle,
unPassedTitle,
operates,
operations,
operationsTemp,
searchConfig,
} from "./configs/list";
import {
getCulturalRelicListPerTemp,
getCulturalRelicListPer,
getRCDetailByIdTemp,
getRCDetailById,
deleteCultralRelic,
editCulturalRelic,
......@@ -153,58 +159,30 @@ import View3dDialog from "./components/View3dDialog";
export default {
components: {
TablePage,
TableOperation,
InfoEditDialog,
SearchBar,
ImportRecordDialog,
UploadDialog,
View3dDialog,
"el-image-viewer": () =>
import("element-ui/packages/image/src/image-viewer"),
},
data() {
return {
// (存放两份数据的目的是为了防止切换的时候分页被重置)
//最终表
list: {
records: [],
size: 10,
current: 1,
total: 0,
},
searchForm: {
name: "",
status: "",
// 临时表
listTemp: {
records: [],
size: 10,
current: 1,
total: 0,
},
searchConfig: [
{
prop: "name",
type: "input",
label: "文物名称",
},
{
prop: "status",
type: "select",
label: "状态",
selectOptions: [
{
label: "已上架",
value: "1",
},
{
label: "已下架",
value: "0",
},
],
},
// 是否只看3D
{
prop: "onlyShow3d",
type: "checkbox",
label: "只看3D",
},
],
searchConfig,
editVisible: false, //编辑
isAdd: true,
form: {
name: "", //名称
type: "", //类别(字典值)
......@@ -233,39 +211,20 @@ export default {
imgViewerVisible: false,
importRecordVisible: false, //上传记录
imgList: [],
isUpLoading: false,
view3dDialogVisible: false, //3D文件在线浏览弹窗可见性
passedTitle,
unPassedTitle,
operates,
operations,
operationsTemp,
tabActive: "unPassed",
};
},
//watch部分
watch: {
// //监听弹窗变化
// multiUploadVisible(val) {
// //弹窗关闭记得清空,开启执行批量上传
// if (val) {
// for (let i = 0; i < this.filesList.length; i++) {
// this.uploadSelf(this.filesList[i].file, i); //弹窗显示的时候,就根据文件队列的数量调用上传接口
// }
// } else {
// //弹窗关闭,还原数据到初始位置
// this.filesList = [];
// this.uploadCount = 0;
// this.cancelUploadArr = [];
// }
// },
// 监听Tab值不同调取不同的接口
tabActive(value) {
if (value == "passed") {
console.log("passed to do");
} else {
console.log("unPassed to do");
}
this.resetPage();
this.loadData();
},
},
computed: {
......@@ -278,15 +237,31 @@ export default {
}
};
},
getOperations() {
return this.tabActive == "passed" ? this.operations : this.operationsTemp;
},
},
async created() {
this.loadData();
},
methods: {
async search(form) {
this.resetPage();
this.loadData(form);
},
// 清除分页到初始状态
resetPage() {
this.getCurrentList().current = 1;
},
reset() {
this.loadData();
},
// 加载表格数据
async loadData(form) {
const { current, size } = this.getCurrentList();
var params = {
page: 1,
limit: this.list.size,
page: current,
limit: size,
...form,
};
if (!params.level) {
......@@ -295,30 +270,37 @@ export default {
if (params.status == "") {
delete params.status;
}
let res = await getCulturalRelicListPer(params);
const currentRequest = this.getCurrentRequest();
const res = await currentRequest(params);
if (res.code == 0) {
this.list = res.data;
this.setList(res.data);
}
},
reset() {
this.loadData();
// 获取当前请求方法
getCurrentRequest() {
const currentRequest =
this.tabActive == "passed"
? getCulturalRelicListPer
: getCulturalRelicListPerTemp;
return currentRequest;
},
// 加载表格数据
async loadData() {
var params = {
page: this.list.current,
limit: this.list.size,
};
let res = await getCulturalRelicListPer(params);
if (res.code == 0) {
// debugger
this.list = res.data;
// 设置两张表的数据
setList(data) {
if (this.tabActive === "passed") {
this.list = data;
} else {
this.listTemp = data;
}
},
// 获取当前加载的list
getCurrentList() {
const currentList =
this.tabActive == "passed" ? this.list : this.listTemp;
return currentList;
},
async handleOperation(value, row) {
console.log(value, row);
switch (value.type) {
case "add":
this.editVisible = true;
......@@ -328,7 +310,7 @@ export default {
this.$refs.View3dDialog.visible = true;
break;
case "edit":
let detailRes = await getRCDetailById({ crId: row.crId });
let detailRes = await getRCDetailByIdTemp({ crId: row.crId });
if (detailRes.code == 0) {
this.form = detailRes.data;
this.editVisible = true;
......@@ -342,9 +324,7 @@ export default {
}
break;
case "multiAdd":
// debugger
this.$refs.UploadDialog.visible = true;
// console.log("this.multiUploadVisible", this.multiUploadVisible);
break;
case "downloadTemplate":
......@@ -399,13 +379,13 @@ export default {
// 改变页容量
handleSizeChange(value) {
this.list.size = value;
this.getCurrentList().size = value;
this.loadData();
},
// 改变当前显示页
handleCurrentChange(value) {
this.list.current = value;
this.getCurrentList().current = value;
this.loadData();
},
// 关闭Dialog
......
......@@ -67,10 +67,10 @@
</div>
<span v-else>暂无文献</span>
</div>
<TextShow
<RichTextShow
v-else-if="item.prop === 'intro'"
:richText="info['intro']"
></TextShow>
></RichTextShow>
<div v-else-if="item.prop === 'type'">
<DictText name="displayType" :dictValue="info['type']" />
</div>
......
<template>
<el-dialog :visible="dialogVisible" width="40%" :before-close="handleClose" top="5vh" lock-scroll v-loading="loading" element-loading-background="rgba(0, 0, 0, 0.5)">
<el-dialog
:visible="dialogVisible"
width="40%"
:before-close="handleClose"
top="5vh"
lock-scroll
v-loading="loading"
element-loading-background="rgba(0, 0, 0, 0.5)"
>
<div class="title" slot="title">
<div class="divider"></div>
<div class="label">{{ title }}</div>
</div>
<div class="el-dialog-div">
<div class="dialog-content">
<el-form :model="dialogForm" class="basic-info" ref="form" :rules="rules" size="mini">
<el-form
:model="dialogForm"
class="basic-info"
ref="form"
:rules="rules"
size="mini"
>
<el-form-item label="名称" :label-width="formLabelWidth" prop="name">
<el-input v-model="dialogForm.name" autocomplete="off" placeholder="请输入文献名称"></el-input>
<el-input
v-model="dialogForm.name"
autocomplete="off"
placeholder="请输入文献名称"
></el-input>
</el-form-item>
<el-form-item label="作者" :label-width="formLabelWidth">
<el-input v-model="dialogForm.authors" autocomplete="off" placeholder="请输入作者"></el-input>
<el-input
v-model="dialogForm.authors"
autocomplete="off"
placeholder="请输入作者"
></el-input>
</el-form-item>
<el-form-item label="文献来源" :label-width="formLabelWidth">
<el-input v-model="dialogForm.source" autocomplete="off" placeholder="请输入文献来源"></el-input>
<el-input
v-model="dialogForm.source"
autocomplete="off"
placeholder="请输入文献来源"
></el-input>
</el-form-item>
<el-form-item label="出版/发布日期" :label-width="formLabelWidth">
<el-date-picker style="width: 100%" v-model="dialogForm.date" type="date" placeholder="请选择出版/发布日期"
value-format="yyyy-MM-dd">
<el-date-picker
style="width: 100%"
v-model="dialogForm.date"
type="date"
placeholder="请选择出版/发布日期"
value-format="yyyy-MM-dd"
>
</el-date-picker>
</el-form-item>
......@@ -26,19 +57,32 @@
<el-switch v-model="status"> </el-switch>
</el-form-item>
<el-form-item label="文件" :label-width="formLabelWidth">
<ManualUploader :files="files" :fileLimit="1" :fileSize="50" listType="text" :fileType="['pdf']"
ref="pdf" />
<ManualUploader
:files="files"
:fileLimit="1"
:fileSize="50"
listType="text"
:fileType="['pdf']"
ref="pdf"
/>
</el-form-item>
<el-form-item label="备注" :label-width="formLabelWidth">
<el-input type="textarea" placeholder="请输入备注" v-model="dialogForm.remark" maxlength="600" show-word-limit>
<el-input
type="textarea"
placeholder="请输入备注"
v-model="dialogForm.remark"
maxlength="600"
show-word-limit
>
</el-input>
</el-form-item>
</el-form>
</div>
<div class="dialog-footer">
<el-button size="mini" @click="cancelForm">取 消</el-button>
<el-button size="mini" type="primary" @click="handleSubmit">确定<i class="el-icon-circle-check"
style="margin-left: 5px"></i></el-button>
<el-button size="mini" type="primary" @click="handleSubmit"
>确定<i class="el-icon-circle-check" style="margin-left: 5px"></i
></el-button>
</div>
</div>
</el-dialog>
......@@ -46,14 +90,10 @@
<script>
import { addLiterature, editLiterature } from "@/api/literature";
import ManualUploader from "@/components/Uploader/ManualUploader.vue";
import { mapGetters } from "vuex";
import { uploadFile } from "@/utils/file";
export default {
name: "InfoEditDialog",
components: {
ManualUploader,
},
props: {
visible: {
type: Boolean,
......@@ -117,7 +157,7 @@ export default {
},
],
},
loading: false
loading: false,
};
},
methods: {
......@@ -140,7 +180,7 @@ export default {
},
handleSubmit() {
let that = this;
this.loading = true
this.loading = true;
this.$refs.form.validate(async (valid) => {
if (valid) {
let params = JSON.parse(JSON.stringify(that.dialogForm));
......@@ -172,7 +212,7 @@ export default {
that.reloadParent();
that.resetChildData();
}
this.loading = false
this.loading = false;
} else {
let res = await addLiterature(params);
if (res.code == 0) {
......@@ -180,8 +220,7 @@ export default {
that.reloadParent();
that.resetChildData();
}
this.loading = false
this.loading = false;
}
}
});
......@@ -194,13 +233,13 @@ export default {
this.reloadParent();
this.resetChildData();
})
.catch((_) => { });
.catch((_) => {});
},
},
};
</script>
<style lang='scss' scoped>
<style lang="scss" scoped>
.title {
display: flex;
margin-bottom: 16px;
......@@ -240,4 +279,4 @@ export default {
justify-content: flex-end;
padding: 20px 40px;
}
</style>
\ No newline at end of file
</style>
......@@ -98,18 +98,12 @@
<script>
import { addMuseum, editMuseum } from "@/api/org";
import ManualUploader from "@/components/Uploader/ManualUploader.vue";
import { mapGetters } from "vuex";
import { uploadV1 } from "@/utils/file";
import { deleteFiles } from "@/api/file";
import VueQuillEditor from "@/components/VueQuillEditor";
export default {
name: "InfoEditDialog",
components: {
ManualUploader,
VueQuillEditor,
},
props: {
visible: {
type: Boolean,
......
......@@ -73,8 +73,8 @@
</el-form>
</div>
<div class="dialog-footer">
<el-button size="mini" @click="cancelForm">取 消</el-button>
<el-button size="mini" type="primary" @click="handleSubmit"
<el-button size="mini" @click="cancelForm">取 消</el-button>
<el-button size="mini" type="primary" @click="handleSubmit"
>确定<i class="el-icon-circle-check" style="margin-left: 5px"></i
></el-button>
</div>
......@@ -84,17 +84,12 @@
<script>
import { addCcProduct, updateCcProduct } from "@/api/literature";
import ManualUploader from "@/components/Uploader/ManualUploader.vue";
import { mapGetters } from "vuex";
import { uploadV1 } from "@/utils/file";
import VueQuillEditor from "@/components/VueQuillEditor";
import { deleteFiles } from "@/api/file";
export default {
name: "InfoEditDialog",
components: {
ManualUploader,
VueQuillEditor,
},
components: {},
props: {
visible: {
type: Boolean,
......@@ -334,7 +329,7 @@ export default {
};
</script>
<style lang='scss' scoped>
<style lang="scss" scoped>
.title {
display: flex;
margin-bottom: 16px;
......@@ -363,13 +358,12 @@ export default {
.relate {
flex: 1;
}
}
.dialog-footer {
display: flex;
justify-content: flex-end;
margin: 20px;
}
display: flex;
justify-content: flex-end;
margin: 20px;
}
.upload-box {
background-color: #fbfdff;
border: 1px dashed #c0ccda;
......@@ -387,4 +381,4 @@ export default {
color: #8c939d;
}
}
</style>
\ No newline at end of file
</style>
......@@ -14,7 +14,13 @@
<div class="label">{{ title }}</div>
</div>
<div class="dialog-content">
<el-form :model="dialogForm" class="basic-info" :rules="rules" ref="form" size="mini">
<el-form
:model="dialogForm"
class="basic-info"
:rules="rules"
ref="form"
size="mini"
>
<el-form-item
label="账号"
:label-width="formLabelWidth"
......@@ -113,14 +119,10 @@
<script>
import { addUser, upadateUser } from "@/api/user";
import ManualUploader from "@/components/Uploader/ManualUploader.vue";
import { mapGetters } from "vuex";
import md5 from "js-md5";
export default {
name: "InfoEditDialog",
components: {
ManualUploader,
},
props: {
visible: {
type: Boolean,
......
<template>
<el-dialog :visible.sync="dialogVisible" width="40%" style="height: 98%" :before-close="handleClose" top="5vh"
lock-scroll v-loading="loading" element-loading-background="rgba(0, 0, 0, 0.5)">
<el-dialog
:visible.sync="dialogVisible"
width="40%"
style="height: 98%"
:before-close="handleClose"
top="5vh"
lock-scroll
v-loading="loading"
element-loading-background="rgba(0, 0, 0, 0.5)"
>
<div class="title" slot="title">
<div class="divider"></div>
<div class="label">{{ title }}</div>
</div>
<div class="dialog-content">
<el-form :model="dialogForm" class="basic-info" ref="form" :rules="rules" size="mini">
<el-form
:model="dialogForm"
class="basic-info"
ref="form"
:rules="rules"
size="mini"
>
<el-form-item label="名称" :label-width="formLabelWidth" prop="name">
<el-input v-model="dialogForm.name" autocomplete="off" placeholder="请输入名称"></el-input>
<el-input
v-model="dialogForm.name"
autocomplete="off"
placeholder="请输入名称"
></el-input>
</el-form-item>
<el-form-item label="所属博物馆" :label-width="formLabelWidth">
<el-cascader style="width: 100%" v-model="dialogForm.deptId" :options="orgTreeData" :props="optionProps"
placeholder="请选择所属博物馆" :key="pidModalKey" filterable>
<el-cascader
style="width: 100%"
v-model="dialogForm.deptId"
:options="orgTreeData"
:props="optionProps"
placeholder="请选择所属博物馆"
:key="pidModalKey"
filterable
>
</el-cascader>
</el-form-item>
<el-form-item label="所属地" :label-width="formLabelWidth">
<el-cascader style="width: 100%" v-model="dialogForm.regionCode" :options="regionTree"
:props="regionOptionProps" placeholder="请选择所属地" :key="regionCodeModalKey" filterable>
<el-cascader
style="width: 100%"
v-model="dialogForm.regionCode"
:options="regionTree"
:props="regionOptionProps"
placeholder="请选择所属地"
:key="regionCodeModalKey"
filterable
>
</el-cascader>
</el-form-item>
<el-form-item label="简介" :label-width="formLabelWidth">
<el-input type="textarea" placeholder="请输入展厅简介" v-model="dialogForm.intro" maxlength="600" show-word-limit>
<el-input
type="textarea"
placeholder="请输入展厅简介"
v-model="dialogForm.intro"
maxlength="600"
show-word-limit
>
</el-input>
</el-form-item>
<el-form-item label="状态" :label-width="formLabelWidth">
......@@ -30,33 +68,40 @@
<el-form-item label="链接" :label-width="formLabelWidth" prop="url">
<!-- <el-switch v-model="dialogForm.url"> </el-switch> -->
<el-input v-model="dialogForm.url" autocomplete="off" placeholder="请输入链接"></el-input>
<el-input
v-model="dialogForm.url"
autocomplete="off"
placeholder="请输入链接"
></el-input>
</el-form-item>
<el-form-item label="展览封面" :label-width="formLabelWidth">
<ManualUploader :files="faceImage" :fileLimit="1" :fileSize="50" listType="picture-card"
:fileType="['png', 'jpeg', 'jpg']" ref="faceImage" />
<ManualUploader
:files="faceImage"
:fileLimit="1"
:fileSize="50"
listType="picture-card"
:fileType="['png', 'jpeg', 'jpg']"
ref="faceImage"
/>
</el-form-item>
</el-form>
</div>
<div class="dialog-footer">
<el-button size="mini" @click="cancelForm">取 消</el-button>
<el-button size="mini" type="primary" @click="handleSubmit">确定<i class="el-icon-circle-check"
style="margin-left: 5px"></i></el-button>
<el-button size="mini" type="primary" @click="handleSubmit"
>确定<i class="el-icon-circle-check" style="margin-left: 5px"></i
></el-button>
</div>
</el-dialog>
</template>
<script>
import { addVirtual, editVirtual } from "@/api/vitual";
import ManualUploader from "@/components/Uploader/ManualUploader.vue";
import { mapGetters } from "vuex";
import { uploadV1 } from "@/utils/file";
export default {
name: "InfoEditDialog",
components: {
ManualUploader,
},
props: {
visible: {
type: Boolean,
......@@ -77,7 +122,7 @@ export default {
get: function () {
return this.visible;
},
set: function () { },
set: function () {},
},
title() {
if (this.dialogForm.bvId) {
......@@ -170,7 +215,7 @@ export default {
name: [{ required: true, message: "请输入名称", trigger: "blur" }],
url: [{ required: true, message: "请输入链接", trigger: "blur" }],
},
loading: false
loading: false,
};
},
methods: {
......@@ -206,9 +251,8 @@ export default {
},
handleSubmit() {
this.$refs.form.validate(async (valid) => {
this.loading = true
this.loading = true;
if (valid) {
let params = { ...this.dialogForm };
// // 回填图片
// if (this.faceImage.length > 0) {
......@@ -256,7 +300,7 @@ export default {
this.$message.success("修改成功!");
this.reload();
}
this.loading = false
this.loading = false;
} else {
// let params = { ...this.dialogForm };
// // // 回填图片
......@@ -275,7 +319,7 @@ export default {
this.$message.success("添加成功!");
this.reload();
}
this.loading = false
this.loading = false;
}
}
});
......@@ -292,13 +336,13 @@ export default {
this.$emit("handleClose");
this.faceImage = [];
})
.catch((_) => { });
.catch((_) => {});
},
},
};
</script>
<style lang='scss' scoped>
<style lang="scss" scoped>
.title {
display: flex;
margin-bottom: 16px;
......@@ -355,4 +399,4 @@ export default {
.video-lists {
display: flex;
}
</style>
\ No newline at end of file
</style>
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论