阅行客电子档案
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

375 lines
13 KiB

<template>
<!--批量修改-->
<el-dialog class="fileUpload-dialog" title="批量修改" :close-on-click-modal="false" :modal-append-to-body="false" append-to-body :visible.sync="bulkEditingVisible" :before-close="handleCloseDialog">
<div class="setting-dialog">
<div class="bulk-editing-container">
<el-form ref="editForm" :model="editForm" :rules="editRules" label-width="100px">
<el-form-item label="修改字段" prop="updateField">
<el-select v-model="editForm.updateField" value-key="id" placeholder="请选择" style="width: 360px;" @change="selectField">
<el-option
v-for="item in fieldItemOptions"
:key="item.id"
:label="item.fieldCnName"
:value="item"
/>
</el-select>
</el-form-item>
<el-form-item label="修改方式" prop="updateType">
<el-select v-model="editForm.updateType" placeholder="请选择" style="width: 360px;">
<el-option
v-for="item in editTypeOptions"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item v-if="editForm.updateType === 2" label="查询内容" prop="oldContext">
<el-input v-model="editForm.oldContext" style="width: 360px;" />
</el-form-item>
<el-form-item label="更新内容" prop="updateContext">
<!-- <el-select v-if="editForm.updateField.mateData === 3" v-model="editForm.updateContext" placeholder="请选择" style="width: 360px;">
<el-option
v-for="item in dictionaryOptions"
:key="item.dictionaryId"
:label="item.dictionaryName"
:value="item.dictionaryName"
/>
</el-select> -->
<treeselect
v-if="editForm.updateField.mateData === 3"
v-model="editForm.updateContext"
:options="dictionaryOptions"
style="width: 360px;"
flat
:multiple="false"
:normalizer="normalizerProject"
placeholder="请选择"
><div slot="value-label" slot-scope="{ node }">{{ getAutoNameUnknown(node.label) }}</div></treeselect>
<el-select v-else-if="editForm.updateField.mateData === 1" v-model="editForm.updateContext" placeholder="请选择" style="width: 360px;">
<el-option
v-for="item in fondsOptions"
:key="item.fondsNo"
:label="item.fondsName"
:value="item.fondsNo"
/>
</el-select>
<treeselect
v-else-if="editForm.updateField.mateData === 2"
v-model="editForm.updateContext"
:options="classifyOptions"
style="width: 360px;"
flat
:multiple="false"
:normalizer="normalizer"
placeholder="请选择"
><div slot="value-label" slot-scope="{ node }">{{ getAutoNameUnknown(node.label) }}</div></treeselect>
<el-date-picker
v-else-if="editForm.updateField.isInputClass === 'date'"
v-model="editForm.updateContext"
type="date"
placeholder="选择日期"
style="width: 360px;"
/>
<el-input-number
v-else-if="editForm.updateField.isInputClass === 'number'"
v-model.number="editForm.initialValue"
:min="0"
:max="999"
controls-position="right"
style="width: 360px;"
/>
<el-input v-else v-model="editForm.updateContext" style="width: 360px;" />
</el-form-item>
</el-form>
</div>
<div slot="footer" class="dialog-footer">
<el-button type="text" @click="handleCloseDialog">取消</el-button>
<el-button type="primary" @click.native="onSubmitBlukEditing('editForm')">确定</el-button>
</div>
</div>
</el-dialog>
</template>
<script>
import { FetchInitCategoryInputFieldByPid } from '@/api/system/category/category'
import { FetchSonDictionaryList, FetchDictionaryTree } from '@/api/system/dict'
import { FetchFondsAll } from '@/api/system/fonds'
import { FetchArchivesClassTree } from '@/api/system/archivesClass'
import { FetchBatchUpdate } from '@/api/collect/collect'
import Treeselect from '@riophae/vue-treeselect'
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
export default {
name: 'BlukEditing',
components: { Treeselect },
mixins: [],
props: {
selectedCategory: {
type: Object,
default: function() {
return {}
}
},
collectLevel: {
type: Number,
default: function() {
return null
}
},
selections: {
type: Array,
default: () => []
}
},
data() {
return {
// 批量修改
bulkEditingVisible: false,
editForm: {
updateField: '',
updateType: 1,
oldContext: '',
updateContext: ''
},
fieldItemOptions: [],
editTypeOptions: [{
value: 1,
label: '填充'
}],
dictionaryOptions: [],
fondsOptions: [],
classifyOptions: []
}
},
computed: {
editRules() {
const validateRule = {
updateField: [
{ required: true, message: '请选择修改字段', trigger: 'change' }
],
updateType: [
{ required: true, message: '请选择修改方式', trigger: 'change' }
],
oldContext: [
{ required: true, message: '请输入查询的内容', trigger: 'blur' }
],
updateContext: [
{ required: true }
]
}
if (this.editForm.updateField.mateData !== null) {
this.$set(validateRule, 'updateContext', [
{ required: true, message: '请选择更新内容', trigger: 'change' }
])
} else if (this.editForm.updateField.isInputClass === 'date') {
this.$set(validateRule, 'updateContext', [
{ type: 'date', required: true, message: '请选择日期', trigger: 'change' }
])
} else {
this.$set(validateRule, 'updateContext', [
{ required: true, message: '请输入更新内容', trigger: 'blur' }
])
}
return validateRule
}
},
watch: {
'editForm.updateField'(newVal) {
this.$nextTick(() => {
this.$refs.editForm.clearValidate()
this.editForm.updateContext = ''
this.editForm.updateType = 1
if (newVal.mateData !== null || newVal.isInputClass === 'date') {
this.editTypeOptions = [{
value: 1,
label: '填充'
}]
} else if (newVal.isInputClass === 'number') {
this.editTypeOptions = [{
value: 1,
label: '填充'
},
{
value: 2,
label: '替换'
},
{
value: 3,
label: '增加'
},
{
value: 4,
label: '减少'
}]
} else {
this.editTypeOptions = [{
value: 1,
label: '填充'
},
{
value: 2,
label: '替换'
}]
}
})
}
},
mounted() {
this.$nextTick(() => {
this.getInitCategoryInputFieldByPid()
})
},
methods: {
// 处理vue-treeSelect回显出现unknown问题
getAutoNameUnknown(name) {
if (name.lastIndexOf('unknown') > -1) {
// 当treeselect翻译不了值时,name中有id,截取id,去调接口或者字典查询出名字
return name.split('(')[0]
} else {
return name
}
},
getInitCategoryInputFieldByPid() {
const params = {
'categoryId': this.selectedCategory.id,
'categoryLevel': this.collectLevel
}
console.log(params)
FetchInitCategoryInputFieldByPid(params).then(data => {
this.fieldItemOptions = data
})
},
selectField(val) {
console.log(val)
if (val.mateData === 3) {
if (this.selectedCategory.arrangeType === 3 && val.fieldName === 'project_class') {
this.getDictsList()
} else {
this.getSonDictionaryList(val.dictionaryId.id)
}
} else if (val.mateData === 1) {
this.getFondsDatas()
} else {
this.getInitArchivesClass()
}
},
getSonDictionaryList(dictionaryId) {
FetchSonDictionaryList({ 'pid': dictionaryId }).then(res => {
this.dictionaryOptions = res
})
},
// 项目级别 - 阶段分类
getDictsList() {
FetchDictionaryTree().then((res) => {
const filterCodes = ['project_class']
let filteredItems = JSON.parse(JSON.stringify(res)).filter(item => filterCodes.includes(item.dictionaryCode))
filteredItems = this.addLevelToDictionaryList(filteredItems, 1)
if (this.selectedCategory.arrangeType === 3 && this.collectLevel !== 1) {
this.dictionaryOptions = filteredItems
} else {
this.dictionaryOptions = this.filterData(filteredItems, filteredItems[0].id)
}
}).catch(err => {
console.log(err)
})
},
// 显示第一级和第二级
filterData(data, targetId) {
return data.filter(item => {
if (item.id === targetId || item.dictionaryParents === targetId) {
if (item.childDictionarys && item.childDictionarys.length > 0) {
item.childDictionarys = this.filterData(item.childDictionarys, targetId)
}
return true
}
return false
})
},
// 给筛选出来的数据加level 方便后面是否可点击
addLevelToDictionaryList(dictionaryList, level) {
dictionaryList.forEach(dictionary => {
dictionary.level = level
if (dictionary.childDictionarys) {
dictionary.childDictionarys = this.addLevelToDictionaryList(dictionary.childDictionarys, level + 1)
}
})
return dictionaryList
},
normalizerProject(node) {
if ((node.childDictionarys && !node.childDictionarys.length) || node.childDictionarys === null) {
delete node.childDictionarys
}
return {
id: node.dictionaryName,
label: node.dictionaryName,
children: node.childDictionarys,
isDisabled: (this.collectLevel !== 1 && node.level && node.level !== 3) || (this.collectLevel === 1 && node.level === 1)
}
},
getFondsDatas() {
FetchFondsAll().then(res => {
this.fondsOptions = res
})
},
getInitArchivesClass() {
this.classifyOptions = []
const params = {
'categoryId': this.selectedCategory.id
}
FetchArchivesClassTree(params).then((res) => {
this.classifyOptions = JSON.parse(JSON.stringify(res))
}).catch(err => {
console.log(err)
})
},
normalizer(node) {
if (node.childArchivesClass === null) {
delete node.childArchivesClass
}
return {
id: node.code,
label: node.name,
children: node.childArchivesClass
}
},
onSubmitBlukEditing(formName) {
this.$refs[formName].validate((valid) => {
if (valid) {
const archivesIds = this.selections.map(item => item.id)
console.log(this.editForm)
const params = {
'archivesIds': archivesIds,
'categoryId': this.selectedCategory.id,
'categoryLevel': this.collectLevel,
'updateField': this.editForm.updateField.fieldName,
'oldContext': this.editForm.oldContext,
'updateContext': this.editForm.updateContext,
'updateType': this.editForm.updateType
}
console.log(params)
FetchBatchUpdate(params).then(res => {
this.$emit('close-dialog')
this.handleCloseDialog()
})
} else {
console.log('error submit!!')
return false
}
})
},
handleCloseDialog(done) {
// 重置表单数据
this.$refs.editForm.resetFields()
this.bulkEditingVisible = false
// 关闭弹框
// done()
}
}
}
</script>
<style lang='scss' scoped>
</style>