Browse Source

api-元数据管理

master
xuhuajiao 2 years ago
parent
commit
d6afa37842
  1. 29
      src/api/system/metaData.js
  2. 50
      src/views/system/metadata/baseInfo/index.vue
  3. 272
      src/views/system/metadata/dataList/index.vue
  4. 53
      src/views/system/metadata/form.vue
  5. 55
      src/views/system/metadata/index.vue

29
src/api/system/metaData.js

@ -26,15 +26,6 @@ export function del(data) {
})
}
// 删除档案元数据
export function FetchDelMetadataInfos(data) {
return request({
url: 'api/metadata/delMetadataInfos',
method: 'post',
data
})
}
export function edit(data) {
return request({
url: 'api/metadata/editMetadata',
@ -51,4 +42,22 @@ export function FetchGetMetaInfo(params) {
})
}
export default { add, edit, del, FetchGetMetaInfo, FetchDelMetadataInfos, FetchBuildMetadata }
// 删除档案元数据
export function FetchDelMetadataInfos(data) {
return request({
url: 'api/metadata/delMetadataInfos',
method: 'post',
data
})
}
// 编辑档案元数据
export function FetchEditMetadataInfo(data) {
return request({
url: 'api/metadata/editMetadataInfo',
method: 'post',
data
})
}
export default { add, edit, del, FetchBuildMetadata, FetchGetMetaInfo, FetchDelMetadataInfos, FetchEditMetadataInfo }

50
src/views/system/metadata/baseInfo/index.vue

@ -1,25 +1,31 @@
<template>
<div class="system-base-info" style="display:flex; justify-content: flex-start;">
<div class="base-info-left">
<div v-loading="loading" class="system-base-info" style="display:flex; justify-content: flex-start;">
<div v-if="selectedTreeItem.parentsId === null" class="base-info-left">
<div class="info-item">
<span>名称</span>
<p>{{ selectedTreeItem.label }}</p>
<p>{{ selectedTreeItem.metadataName }}</p>
</div>
</div>
<div v-else class="base-info-left">
<div class="info-item">
<span>名称</span>
<p>{{ infoData.metadataName }}</p>
</div>
<div class="info-item">
<span>参照标准号</span>
<p>GB/T39362-2020</p>
<p>{{ infoData.metadataStandardNumber }}</p>
</div>
<div class="info-item">
<span>参照标准名</span>
<p>党政机关电子公文归档规范</p>
<p>{{ infoData.metadataStandardName }}</p>
</div>
<div class="info-item">
<span>参照标准类型</span>
<p>党政机关电子公文归档规范</p>
<p>{{ infoData.metadataType }}</p>
</div>
<div class="info-item">
<span>标准范围说明</span>
<p>本标准适用于各级党政机关电子公文系统产生的电子 公文的归档和处理其他机关和企业事业单位的电子 公文的归档和处理可参照执行</p>
<p>{{ infoData.metadataStandardRange }}</p>
</div>
<div class="info-item">
<span>默认方案</span>
@ -30,23 +36,22 @@
</template>
<script>
// import { getNoFormatField } from '@/api/category/fileNoFormat'
import { FetchGetMetaInfo } from '@/api/system/metaData'
export default {
name: 'BaseInfo',
props: {
selectedTreeItem: {
type: Object,
default: function() {
return {
label: '',
isType: ''
}
return {}
}
}
},
data() {
return {
defaultSetting: false
infoData: {},
defaultSetting: false,
loading: false
}
},
watch: {
@ -57,19 +62,24 @@ export default {
}
},
created() {
console.log(this.selectedTreeItem)
if (this.selectedTreeItem && this.selectedTreeItem.id) {
this.initData()
}
},
methods: {
initData() {
// getNoFormatField({ categoryId: this.selectedCategory.id }).then((res) => {
// this.fileNoFormatStr = ''
// res.forEach((item) => {
// this.fileNoFormatStr += item.fieldCnName + item.connector
// })
// })
this.loading = true
FetchGetMetaInfo({ metadataId: this.selectedTreeItem.id }).then((res) => {
if (res) {
this.infoData = res.metadata
this.defaultSetting = res.metadata.isDefault
} else {
this.infoData = {}
}
setTimeout(() => {
this.loading = false
}, 300)
})
}
}
}

272
src/views/system/metadata/dataList/index.vue

@ -1,28 +1,28 @@
<template>
<div>
<div class="head-container">
<el-button size="mini" @click="crud.toAdd">
<i class="iconfont icon-xinzeng" :disabled="crud.selections.length === 0" />
<el-button size="mini" @click="toAdd">
<i class="iconfont icon-xinzeng" :disabled="selections.length === 0" />
新增
</el-button>
<el-button size="mini" :disabled="crud.selections.length !== 1" @click="crud.toEdit(crud.selections)">
<el-button size="mini" :disabled="selections.length !== 1" @click="toEdit(selections)">
<i class="iconfont icon-bianji" />
编辑
</el-button>
<el-button slot="reference" size="mini" :loading="crud.delAllLoading" :disabled="crud.selections.length === 0" @click="toDelete(crud.selections)">
<el-button slot="reference" size="mini" :loading="delAllLoading" :disabled="selections.length === 0" @click="toDelete(selections)">
<i class="iconfont icon-shanchu" />
删除
</el-button>
</div>
<!--表单组件-->
<el-dialog append-to-body :close-on-click-modal="false" :before-close="crud.cancelCU" :visible="crud.status.cu > 0" :title="crud.status.title">
<el-dialog append-to-body :close-on-click-modal="false" :before-close="handleClose" :visible="metadataVisible" :title="metadataTitle">
<div class="setting-dialog">
<el-form ref="form" inline :model="form" :rules="rules" size="small" label-width="100px">
<el-form-item label="编号" prop="number">
<el-input v-model="form.number" />
<el-form-item label="编号" prop="infoCode">
<el-input v-model="form.infoCode" />
</el-form-item>
<el-form-item label="元数据元素" prop="meteItem">
<el-input v-model="form.metaItem" />
<el-form-item label="元数据元素" prop="infoName">
<el-input v-model="form.infoName" />
</el-form-item>
<el-form-item label="顶级元数据" prop="isTop">
<el-radio-group v-model="form.isTop">
@ -30,93 +30,154 @@
<el-radio label="0"></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item v-if="form.isTop === '0'" label="父级" prop="parent">
<el-select v-model="form.parent" style="width: 225px;">
<el-option v-for="item in selectOptions" :key="item.value" :label="item.label" :value="item.label" />
<el-form-item v-if="form.isTop === '0'" label="父级" prop="parentInfoId">
<el-select v-model="form.parentInfoId" style="width: 225px;">
<el-option v-for="item in selectOptions" :key="item.id" :label="item.label" :value="item.id" />
</el-select>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="text" @click="crud.cancelCU">取消</el-button>
<el-button :loading="crud.status.cu === 2" type="primary" @click="crud.submitCU">确定</el-button>
<el-button type="text" @click="handleClose">取消</el-button>
<el-button type="primary" @click="handleComfire">确定</el-button>
</div>
</div>
</el-dialog>
<div>
<el-table
ref="table"
v-loading="crud.loading"
:data="crud.data"
highlight-current-row
row-key="id"
@select="crud.selectChange"
@select-all="crud.selectAllChange"
@selection-change="crud.selectionChangeHandler"
>
<el-table-column type="selection" width="55" />
<el-table-column type="index" label="序号" />
<el-table-column prop="number" label="编号" />
<el-table-column :show-overflow-tooltip="true" prop="metaItem" label="元数据元素" />
</el-table>
<!--分页组件-->
<pagination />
</div>
<el-table
ref="table"
v-loading="loading"
:data="tableData"
highlight-current-row
row-key="id"
@select-all="selectAll"
@select="selectTr"
@selection-change="selectionChangeHandler"
@row-click="clickRowHandler"
>
<el-table-column type="selection" align="center" width="55" />
<el-table-column type="index" label="序号" />
<el-table-column prop="infoCode" label="编号" />
<el-table-column :show-overflow-tooltip="true" prop="infoName" label="元数据元素" />
</el-table>
</div>
</template>
<script>
import CRUD, { presenter, header, form } from '@crud/crud'
import pagination from '@crud/Pagination'
const defaultForm = { id: null, number: null, meteItem: null, isTop: null, parent: null }
import { FetchGetMetaInfo, FetchDelMetadataInfos, FetchEditMetadataInfo } from '@/api/system/metaData'
export default {
name: 'MetaDataList',
components: { pagination },
cruds() {
return CRUD({ title: '元数据', url: 'api/users' })
props: {
selectedTreeItem: {
type: Object,
default: function() {
return {}
}
}
},
mixins: [
presenter(),
header(),
form(function() {
return Object.assign({ dicPid: this.dicPid }, defaultForm)
})
],
data() {
return {
selectOptions: [
{
id: 1,
value: 'M1 公文标识',
label: 'M1 公文标识'
},
{
id: 2,
value: 'M2 文种',
label: 'M2 文种'
}
],
loading: false,
delAllLoading: false,
tableData: [],
selections: [],
isAllSelect: false,
metadataTitle: '新增元数据',
metadataVisible: false,
selectOptions: [],
form: { id: null, infoCode: null, infoName: null, isTop: '1', parentInfoId: null },
rules: {
number: [
infoCode: [
{ required: true, message: '编号不可为空', trigger: 'blur' }
],
meteItem: [
infoName: [
{ required: true, message: '元数据元素不可为空', trigger: 'blur' }
],
isTop: [
{ required: true, message: '请选择是否为顶级节点', trigger: 'change' }
],
parent: [
parentInfoId: [
{ required: true, message: '请选择父级元数据', trigger: 'change' }
]
}
}
},
watch: {
selectedTreeItem: function(newValue, oldValue) {
// if (newValue && newValue.id) { }
}
},
created() {
if (this.selectedTreeItem && this.selectedTreeItem.id) {
this.getList()
}
},
methods: {
[CRUD.HOOK.beforeRefresh]() {
getList() {
this.loading = true
this.selectOptions = []
FetchGetMetaInfo({ metadataId: this.selectedTreeItem.id }).then((res) => {
if (res.infos) {
const resData = JSON.parse(res.infos)
this.tableData = resData
resData.map((item, index) => {
const json = {}
json.id = item.id
json.label = item.infoCode + ' ' + item.infoName
json.value = item.infoCode + ' ' + item.infoName
this.selectOptions.push(json)
})
} else {
this.tableData = []
}
this.loading = false
})
},
toAdd() {
this.metadataVisible = true
this.metadataTitle = '新增元数据'
},
[CRUD.HOOK.afterRefresh]() {
toEdit(data) {
const editData = data[0]
this.metadataVisible = true
this.metadataTitle = '编辑元数据'
this.form = {
id: editData.id,
infoCode: editData.infoCode,
infoName: editData.infoName
}
if (editData.infoParentId) {
this.form.isTop = '0'
this.form.parentInfoId = editData.infoParentId
} else {
this.form.isTop = '1'
this.form.parentInfoId = null
}
},
handleComfire() {
this.$refs['form'].validate((valid) => {
if (valid) {
const params = {
'metadataId': this.selectedTreeItem.id,
'info': [{
'metadataInfoId': this.form.id,
'parentInfoId': this.form.parentInfoId,
'infoCode': this.form.infoCode,
'infoName': this.form.infoName
}]
}
delete this.form.isTop
console.log(params)
FetchEditMetadataInfo(params).then((res) => {
if (res) {
this.metadataVisible = false
this.getList()
this.clearForm()
}
})
} else {
console.log('error submit!!')
return false
}
})
},
toDelete(datas) {
this.$confirm('此操作将删除当前所选元数据' + '<span>你是否还要继续?</span>', '提示', {
@ -125,10 +186,87 @@ export default {
type: 'warning',
dangerouslyUseHTMLString: true
}).then(() => {
this.crud.delAllLoading = true
this.crud.doDelete(datas)
this.delAllLoading = true
const ids = []
datas.forEach(val => {
ids.push(val.id)
})
FetchDelMetadataInfos(ids).then(() => {
this.$message({
message: '删除成功',
type: 'success'
})
this.delAllLoading = false
this.getList()
}).catch(err => {
this.delAllLoading = false
console.log(err)
})
}).catch(() => {
})
},
clearForm() {
if (this.$refs['form']) {
this.$refs['form'].clearValidate()
this.form = {}
}
},
handleClose() {
this.clearForm()
this.metadataVisible = false
},
selectAll() {
this.isAllSelect = !this.isAllSelect
const data = this.tableData
this.toggleSelect(data, this.isAllSelect, 'all')
},
//
selectTr(selection, row) {
this.$set(row, 'isChecked', !row.isChecked)
this.$nextTick(() => {
this.isAllSelect = row.isChecked
this.toggleSelect(row, row.isChecked, 'tr')
})
},
//
toggleSelect(data, flag, type) {
if (type === 'all') {
if (data.length > 0) {
data.forEach((item) => {
this.toggleSelection(item, flag)
if (item.children && item.children.length > 0) {
this.toggleSelect(item.children, flag, type)
}
})
}
} else {
if (data.children && data.children.length > 0) {
data.children.forEach((item) => {
item.isChecked = flag
this.$refs.table.toggleRowSelection(item, flag)
this.toggleSelect(item, flag, type)
})
}
}
},
//
toggleSelection(row, flag) {
this.$set(row, 'isChecked', flag)
this.$nextTick(() => {
if (flag) {
this.$refs.table.toggleRowSelection(row, flag)
} else {
this.$refs.table.clearSelection()
}
})
},
// table - row
clickRowHandler(row) {
this.$refs.table.clearSelection()
this.$refs.table.toggleRowSelection(row)
},
selectionChangeHandler(val) {
this.selections = val
}
}
}

53
src/views/system/metadata/form.vue

@ -3,28 +3,28 @@
<el-dialog append-to-body :close-on-click-modal="false" :before-close="crud.cancelCU" :visible="crud.status.cu > 0" :title="crud.status.title">
<div class="setting-dialog">
<el-form ref="form" inline :model="form" :rules="rules" size="small" label-width="100px">
<el-form-item label="名称" prop="name">
<el-input v-model="selectedTreeItem.name" />
<el-form-item label="名称" prop="metadataName">
<el-input v-model="form.metadataName" />
</el-form-item>
<el-form-item label="参照标准类型" prop="frameworkType">
<el-select v-model="form.frameworkType" style="width: 225px;">
<el-form-item label="参照标准类型" prop="metadataType">
<el-select v-model="form.metadataType" style="width: 225px;">
<el-option v-for="item in selectOptions" :key="item.value" :label="item.label" :value="item.label" />
</el-select>
</el-form-item>
<el-form-item label="参照标准号" prop="frameworkNum">
<el-input v-model="form.frameworkNum" />
<el-form-item label="参照标准号" prop="metadataStandardNumber">
<el-input v-model="form.metadataStandardNumber" />
</el-form-item>
<el-form-item label="参照标准名" prop="frameworkName">
<el-input v-model="form.frameworkName" />
<el-form-item label="参照标准名" prop="metadataStandardName">
<el-input v-model="form.metadataStandardName" />
</el-form-item>
<el-form-item label="标准范围说明" prop="remark">
<el-input v-model="form.remark" rows="5" type="textarea" style="width: 594px;" />
<el-form-item label="标准范围说明" prop="metadataStandardRange">
<el-input v-model="form.metadataStandardRange" rows="5" type="textarea" style="width: 594px;" />
</el-form-item>
<el-row>
<el-form-item label="默认方案" prop="defaultPlan">
<el-radio-group v-model="form.defaultPlan">
<el-radio label="1"></el-radio>
<el-radio label="0"></el-radio>
<el-form-item label="默认方案" prop="isDefault">
<el-radio-group v-model="form.isDefault">
<el-radio :label="true"></el-radio>
<el-radio :label="false"></el-radio>
</el-radio-group>
</el-form-item>
</el-row>
@ -38,15 +38,14 @@
</template>
<script>
// import { getCategoryTree } from '@/api/category/category'
import { form } from '@crud/crud'
import CRUD from '@crud/crud'
const defaultForm = { id: null, name: null, frameworkType: null, frameworkNum: null, frameworkName: null, remark: null, defaultPlan: null }
const defaultForm = { id: null, metadataName: null, metadataType: null, metadataStandardNumber: null, metadataStandardName: null, metadataStandardRange: null, isDefault: null }
export default {
mixins: [
form(function() {
return Object.assign({ pid: this.pid }, defaultForm)
return Object.assign({ }, defaultForm)
})
],
props: {
@ -62,24 +61,24 @@ export default {
pid: null,
isAdd: false,
rules: {
name: [
metadataName: [
{ required: true, message: '名称不可为空', trigger: 'blur' }
],
defaultPlan: [
isDefault: [
{ required: true, message: '请选择是否为默认方案', trigger: 'change' }
]
},
selectOptions: [
{
value: '1',
value: '国家标准',
label: '国家标准'
},
{
value: '2',
value: '行业标准',
label: '行业标准'
},
{
value: '3',
value: '其他',
label: '其他'
}
],
@ -90,7 +89,15 @@ export default {
console.log(this.selectedTreeItem)
},
methods: {
[CRUD.HOOK.beforeSubmit]() {
//
[CRUD.HOOK.afterToCU](crud, form) {
// if (form.isDefault) {
// form.isDefault = form.isDefault ? '1' : '0'
// }
},
//
[CRUD.HOOK.beforeToEdit](crud, form) {
// crud.form.id = form.deptsId
}
}
}

55
src/views/system/metadata/index.vue

@ -6,17 +6,17 @@
<div class="head-container">
<crudOperation :permission="permission">
<template v-slot:left>
<el-button v-permission="permission.add" size="mini" :disabled="selectedTreeItem.isType === 2 " @click="crud.toAdd">
<el-button v-permission="permission.add" size="mini" :disabled="selectedTreeItem.parentsId !== null " @click="crud.toAdd">
<i class="iconfont icon-xinzeng" />
新增
</el-button>
<el-button v-permission="permission.edit" size="mini" :disabled="selectedTreeItem.isType === 1" @click="crud.toEdit(selectedTreeItem)">
<el-button v-permission="permission.edit" size="mini" :disabled="selectedTreeItem.parentsId === null" @click="crud.toEdit(selectedTreeItem)">
<i class="iconfont icon-bianji" />
编辑
</el-button>
</template>
<template v-slot:right>
<el-button v-permission="permission.del" size="mini" :loading="crud.delAllLoading" :disabled="selectedTreeItem.isType === 1" @click="toDelete(selectedTreeItem)">
<el-button v-permission="permission.del" size="mini" :loading="crud.delAllLoading" :disabled="selectedTreeItem.parentsId === null" @click="toDelete(selectedTreeItem)">
<i class="iconfont icon-shanchu" />
删除
</el-button>
@ -48,27 +48,14 @@
<span class="left-bottom-line" />
<ul class="tab-nav">
<li :class="{'active-tab-nav': activeIndex == 0}" @click="changeActiveTab(0)">基本信息<i /></li>
<li v-if="selectedTreeItem.isType && selectedTreeItem.isType === 2" :class="{'active-tab-nav': activeIndex == 1}" @click="changeActiveTab(1)">档案元数据<i /></li>
<li v-if="selectedTreeItem.parentsId !== null" :class="{'active-tab-nav': activeIndex == 1}" @click="changeActiveTab(1)">档案元数据<i /></li>
<!-- 最右侧装饰img -->
<span class="tab-right-img" />
</ul>
<!-- :selected-category="selectedTreeItem" -->
<component :is="comName" :selected-tree-item="selectedTreeItem" />
</div>
</div>
<eform ref="eform" :selected-tree-item="selectedTreeItem" />
<el-dialog class="tip-dialog" title="提示" :visible.sync="deleteVisible" :before-close="handleClose">
<div class="setting-dialog">
<div class="tip-content">
<p class="tipMsg">此操作将删除当前所选方案</p>
<span>你是否还要继续?</span>
</div>
<div slot="footer" class="dialog-footer">
<el-button type="text" @click="deleteVisible = false">取消</el-button>
<el-button type="primary" @click.native="handleConfirm">确定</el-button>
</div>
</div>
</el-dialog>
</div>
</div>
</template>
@ -139,7 +126,10 @@ export default {
this.expandParents(node.parent)
}
},
[CRUD.HOOK.beforeToAdd](crud, form, btn) {
//
[CRUD.HOOK.afterValidateCU](crud) {
crud.form.parentsId = 1
return true
},
[CRUD.HOOK.afterRefresh]() {
let currentKey
@ -162,8 +152,9 @@ export default {
},
//
handleNodeClick(val) {
console.log(val)
if (val) {
if (val.isType === 1) {
if (val.parentsId === null) {
this.addBtnShow = true
}
this.selectedTreeItem = val
@ -171,15 +162,23 @@ export default {
}
},
toDelete(data) {
this.deleteData = data
this.deleteVisible = true
},
handleConfirm() {
this.deleteVisible = false
},
handleClose(done) {
this.deleteData = {}
done()
this.$confirm('此操作将删除当前所选' + this.crud.title + '<span>你是否还要继续?</span>', '提示', {
confirmButtonText: '继续',
cancelButtonText: '取消',
type: 'warning',
dangerouslyUseHTMLString: true
}).then(() => {
this.crud.delAllLoading = true
crudMetaData.del(data.id).then(() => {
this.crud.notify('删除成功', CRUD.NOTIFICATION_TYPE.SUCCESS)
this.crud.delAllLoading = false
this.crud.refresh()
}).catch(err => {
this.crud.delAllLoading = false
console.log(err)
})
}).catch(() => {
})
},
changeActiveTab(data) {
this.activeIndex = data

Loading…
Cancel
Save