Commit 5b56a66e authored by ztf's avatar ztf

添加自定义组件

parent c82ed5da
...@@ -90,6 +90,10 @@ export default { ...@@ -90,6 +90,10 @@ export default {
type: [String, Number], type: [String, Number],
default: () => '' default: () => ''
}, },
versionControl: { // 是否受版本控制
type: Boolean,
default: true
},
latestOptions: { // 版本选择 latestOptions: { // 版本选择
type: Array, type: Array,
default: () => [ default: () => [
...@@ -806,6 +810,7 @@ export default { ...@@ -806,6 +810,7 @@ export default {
params.searchItems.items[findIndex].fieldName = 'resourceNo' params.searchItems.items[findIndex].fieldName = 'resourceNo'
} }
} }
this.$api.searchApi(modelName, params, this.defaultData.modelName.versionControl !== false).then(res => { this.$api.searchApi(modelName, params, this.defaultData.modelName.versionControl !== false).then(res => {
// this.$api.searchApi(this.defaultData.modelName.name, params, this.defaultData.modelName.versionControl).then(res => { // this.$api.searchApi(this.defaultData.modelName.name, params, this.defaultData.modelName.versionControl).then(res => {
this.tableData = this.filterData(res.items ? res.items.content : []) this.tableData = this.filterData(res.items ? res.items.content : [])
......
import {
get,
downloadFile
// del
} from '../utils/http'
// 文件下载
export function downPdf(params) {
return get('/dfs/fileManager/downloadCipher', params)
}
export function downFileByFileCode(fileCode) {
return downloadFile(`/dfs/fileManager/downloadio/fileCode?fileCode=${fileCode}`)
}
export function downFileByFileId(fileId) {
return downloadFile(`/dfs/fileManager/downloadio?fileId=${fileId}`)
}
<template>
<div v-dee-loading="loading" class="dee-model">
<dee-table
:selection-row="[]"
:columns="columns"
:data="tableData"
@selection-change="selectionChange"
>
<dee-tools
slot="header"
:permissions="permissions"
:perm-enable="true"
:tools="BtnTools"
/>
</dee-table>
<dee-add-model-case-dialog
:show-sub-type="true"
width="60%"
title="添加"
:show-dialog="addDialog"
model-name="DxDocument"
search-attr="number,name"
:default-data="{latest:'LATEST',modelName: 'DxDocument',state:'published'}"
@close="addDialog= false"
@selection="addLinks"
/>
</div>
</template>
<script>
import { post } from '@/utils/http'
import _set from 'lodash.set'
export default {
name: 'ApplyDoc2ReplyLink',
componentName: '相关跟进数据',
modelRelationObjs: ['DxDocument'],
props: {
basicData: {
type: Object,
default: () => null
},
permissions: {
type: [Array, Object],
default: () => null
}
},
data() {
return {
linksName: 'ApplyDoc',
replayLinksName: 'ReplyDoc',
loading: false,
tableData: [],
selection: [],
stateOption: [],
addType: 'addLink',
addDialog: false,
BtnTools: [
{
name: '新增申请',
icon: '/icons/c-add.png',
key: 'ApplyDoc-add',
handler: {
click: () => {
this.addType = 'addLink'
this.addDialog = true
}
}
},
{
name: '移除申请',
icon: '/icons/c-delete.png',
key: 'ApplyDoc-remove',
handler: {
click: () => {
this.removeLinks()
}
}
},
{
name: '添加答复',
icon: '/icons/c-creatapply.png',
key: 'ApplyDoc-replayAdd',
handler: {
click: () => {
this.addRelay()
}
}
},
{
name: '移除答复',
icon: '/icons/c-delete.png',
key: 'ApplyDoc-replayRemove',
handler: {
click: () => {
this.removeRelay()
}
}
}
]
}
},
computed: {
columns() {
return [{ title: '申请数据', 'align': 'center', children: [{ title: '状态',
'key': 'target.displayState' }, {
title: '编号',
key: 'target.number',
fixed: true,
'formatterKey': 'component',
'component': {
'name': 'jumpDetailsPage',
'show': true,
'props': '{}'
}
}, {
title: '名称',
key: 'target.name'
}, {
title: '类型',
key: 'target.subTypeDisplayName'
}, {
title: '版本',
key: 'target.displayVersion'
}] }, { title: '答复数据', 'align': 'center', children: [{
title: '状态',
'key': 'replay.displayState' }, {
title: '编号',
key: 'replay.number',
'formatterKey': 'component',
'component': {
'name': 'jumpDetailsPage',
'show': true,
'props': '{}'
}
}, {
title: '名称',
key: 'replay.name' }, {
title: '类型',
key: 'replay.subTypeDisplayName'
}, {
title: '版本',
key: 'replay.displayVersion'
}] }]
},
tableKey() {
return 'ApplyDocLink'
},
linkType() {
return 'target'
}
},
watch: {},
// 生命周期 - 创建完成(访问当前this实例)
created() {},
// 生命周期 - 挂载完成(访问DOM元素)
mounted() {
this.getStateList()
},
methods: {
getStateList() {
this.$utils.getDicListByCode('ObjStatus').then((res) => {
this.stateOption = res
this.search()
})
},
search() {
if (!this.linkType) {
return
}
this.loading = true
const params = {
'pageFrom': 1,
'pageSize': 999,
'openProps': [{ 'name': 'target' }],
'searchItems': {
'children': [],
'items': [{
'fieldName': 'sourceId',
'operator': 'EQ',
'value': this.basicData.masterId
}],
'operator': 'AND'
}
}
post(`/${this.linksName}/find/recursion`, params).then(res => {
if (res.items && res.items.content) {
this.getReplyDoc(res.items.content, params)
}
}).catch(() => {
this.loading = false
})
},
getReplyDoc(items) {
const data = items.map(r => {
r.show = true
_set(r, 'target.displayState', this.getStateDisplay(r.target && r.target.state))
return r
})
const replayLinkIds = data.map(r => r.replyLinkId).filter(r => r)
if (!replayLinkIds || !replayLinkIds.length) {
this.tableData = data
this.loading = false
return
}
const params = {
'pageFrom': 1,
'pageSize': 999,
'openProps': [{ 'name': 'target' }],
'searchItems': {
'children': [],
'items': [{
'fieldName': 'id',
'operator': 'IN',
'value': replayLinkIds
}],
'operator': 'AND'
}
}
post(`/${this.replayLinksName}/find/recursion`, params).then(res => {
if (res.items && res.items.content) {
res.items.content.forEach(row => {
const link = data.find(r => r.replyLinkId === row.id)
if (link) {
link.replay = row.target
_set(link, 'replay.displayState', this.getStateDisplay(row.target && row.target.state))
}
})
console.log(data)
this.tableData = data
}
}).finally(() => {
this.loading = false
})
},
getStateDisplay(code) {
if (!code) {
return ''
}
const item = this.stateOption.find(r => r.value === code)
return item ? item.label : code
},
addLinks(rows) {
if (this.addType === 'addLink') {
const links = rows.map(row => {
return {
sourceId: this.basicData.masterId,
sourceIdType: 'DxDocument',
target: row,
operator: 'ADD'
}
})
this.updateLinks(links, () => {
this.addDialog = false
this.search()
})
return
}
if (rows.length > 1) {
this.$utils.showMessageWarning('一条申请数据只能有一个答复数据!')
return
}
this.addRelayLinks(rows)
},
addRelay() {
if (!this.selection || !this.selection.length) {
this.$utils.showMessageWarning('请先选择申请数据!')
return
}
if (this.selection.length !== 1) {
this.$utils.showMessageWarning('只能选择一条申请数据答复!')
return
}
this.addType = 'replayLink'
this.addDialog = true
},
addRelayLinks(rows) {
const replayLinks = rows.map(r => {
return {
sourceId: this.basicData.masterId,
sourceIdType: 'DxDocument',
target: r,
operator: 'ADD'
}
})
this.updateReplayLinks(replayLinks, (res) => { // 生成答复链接
const params = this.selection.map(r => {
return {
id: r.id,
operator: 'MODIFY'
}
})
params[0].replyLinkId = res.items[0].id
// 将答复链接id 写入 申请链接
this.updateLinks(params, () => {
this.addDialog = false
this.search()
})
})
},
selectionChange(rows) {
this.selection = rows
},
removeLinks() {
const links = this.selection.map(r => {
const link = {
id: r.id,
operator: 'REMOVE'
}
return link
})
if (links.length === 0) {
this.$utils.showMessageWarning('请选择要删除的项')
return
}
const replayLinks = this.selection.filter(r => r.replyLinkId).map(r => {
return {
id: r.replyLinkId,
operator: 'REMOVE'
}
})
this.updateReplayLinks(replayLinks, () => {
this.updateLinks(links, () => {
this.search()
})
})
},
removeRelay() {
if (this.selection.length === 0) {
this.$utils.showMessageWarning('请选择要删除的项')
return
}
const replayLinks = this.selection.map(r => {
return {
id: r.replyLinkId,
operator: 'REMOVE'
}
})
const links = this.selection.map(r => {
return {
id: r.id,
operator: 'MODIFY',
replyLinkId: ''
}
})
this.updateReplayLinks(replayLinks, () => {
this.updateLinks(links, () => {
this.search()
})
})
},
updateLinks(rows, cb) {
return this.update(rows, this.linksName, cb)
},
updateReplayLinks(rows, cb) {
return this.update(rows, this.replayLinksName, cb)
},
update(rows, type, cb) {
post(`/${type}/recursions`, rows).then(res => {
cb && cb(res)
}).catch(() => {
this.loading = false
})
}
}
}
</script>
<style lang="scss">
/* @import url(); 引入css类 */
</style>
<template>
<div v-dee-loading="loading" class="dee-model">
<dee-table
:columns="columns"
:data="tableData"
/>
</div>
</template>
<script>
import { post } from '@/utils/http'
export default {
name: 'ClosedLoopMattersRelatedLink',
componentName: '相关闭环跟进事项',
props: {
basicData: {
type: Object,
default: () => null
},
permissions: {
type: [Array, Object],
default: () => null
}
},
data() {
return {
applyDocLoading: false,
replyDocLoding: false,
applyDocList: [],
replayDocList: [],
columns: [{
'title': '编号',
'key': 'source.number',
'level': 1,
'show': true,
'defaultItem': true,
'formatterKey': 'component',
'component': {
'name': 'jumpDetailsPage',
'show': true,
'props': '{}'
}
},
{
'title': '名称',
'key': 'source.name',
'level': 1,
'show': true,
'defaultItem': true
},
{
'title': '版本',
'key': 'source.displayVersion',
'level': 1,
'show': true,
'defaultItem': true
},
{
'title': '状态',
'key': 'source.state',
'fildProp': {
'id': 31,
'refId': null,
'type': 'DictDataVO',
'rule': {
'typeName': 'DictDataVO',
'dictTypeCode': 'ObjStatus'
},
'attrType': 'BASE'
},
'show': true,
'defaultItem': true
}, {
'title': '关联者',
'key': 'creator.userName',
'parentKey': 'creator',
'level': 1,
'show': true,
'defaultItem': true
},
{
'title': '关联时间',
'key': 'createTime',
'defaultItem': true
},
{
'title': '关联描述',
'key': 'linkDescript',
'defaultItem': true
}]
}
},
computed: {
tableData() {
return [...this.applyDocList, ...this.replayDocList]
},
loading() {
return this.replyDocLoding && this.applyDocLoading
}
},
watch: {
basicData: {
immediate: true,
deep: true,
handler: function(val) {
if (Object.keys(val).length > 0) {
this.getTableData()
}
}
}
},
// 生命周期 - 创建完成(访问当前this实例)
created() {},
// 生命周期 - 挂载完成(访问DOM元素)
mounted() {},
methods: {
getTableData() {
this.applyDocList = []
this.replayDocList = []
this.getApplyDoc()
this.getReplayDoc()
},
getApplyDoc() {
this.applyDocLoading = true
const params = {
'pageFrom': 1,
'pageSize': 999,
'openProps': [{ 'name': 'source' }],
'searchItems': {
'children': [],
'items': [{
'fieldName': 'targetId',
'operator': 'EQ',
'value': this.basicData.versionId
}],
'operator': 'AND'
}
}
post(`/ApplyDoc/find/recursion`, params).then(res => {
if (res.items && res.items.content) {
this.applyDocList = res.items.content
}
}).finally(() => {
this.applyDocLoading = false
})
},
getReplayDoc() {
this.replyDocLoding = true
const params = {
'pageFrom': 1,
'pageSize': 999,
'openProps': [{ 'name': 'source' }],
'searchItems': {
'children': [],
'items': [{
'fieldName': 'targetId',
'operator': 'EQ',
'value': this.basicData.versionId
}],
'operator': 'AND'
}
}
post(`/ReplyDoc/find/recursion`, params).then(res => {
if (res.items && res.items.content) {
this.replayDocList = res.items.content
}
}).finally(() => {
this.replyDocLoding = false
})
}
}
}
</script>
<style lang="scss">
/* @import url(); 引入css类 */
</style>
<!-- 相关接口单添加
<template>
<dee-add-model-case-dialog
:show-sub-type="true"
width="60%"
title="添加"
:show-dialog="addDialog"
model-name="DxDocument"
search-attr="number,name"
:default-data="{latest:'LATEST',modelName: 'DxDocument',state:'published'}"
@close="addDialog= false"
@selection="addLinks"
/>
</template>
<script>
export default {
name: 'ExtRelatedInterfaceLinkAdd',
componentName: '相关接口单-添加',
components: {},
props: {
dialogShow: {
type: Boolean,
default: false
},
obj: {
type: Object,
default: () => {}
},
pageData: {
type: Object,
default: () => {}
}
},
data() {
return {
// defaultData: {
// latest: '',
// modelName: 'DxDocument'
// },
// latestOptions: [
// { value: '', label: '全部' },
// { value: 'LATEST', label: '最新' },
// { value: 'VERSION_NEWEST', label: '修订' }
// ]
}
},
computed: {},
watch: {},
created() {},
mounted() {},
methods: {
selection(rows) {
this.$emit('add', rows)
this.$emit('close')
},
cancel() {
this.$emit('close')
}
}
}
</script>
<style lang='scss' scoped>
</style> -->
<template>
<!-- <dee-add-model-case-dialog
:show-sub-type="true"
width="70%"
title="添加对象"
:show-dialog="dialogShow"
:latest-options="latestOptions"
:default-data="defaultData"
@close="$emit('close')"
@selection="selection"
/> -->
<!-- width="70%"
title="添加"
:show-dialog="addDialog" -->
<div>相关接口单添加
<dee-add-model-case-dialog
:show-sub-type="true"
model-name="DxDocument"
search-attr="number,name"
:default-data="defaultData"
@close="$emit('close')"
@selection="selection"
/>
</div>
</template>
<script>
export default {
name: 'ExtRelatedInterfaceLinkAdd',
componentName: '相关接口单-添加',
components: {},
props: {
addDialog: {
type: Boolean,
default: false
},
obj: {
type: Object,
default: () => {}
},
pageData: {
type: Object,
default: () => {}
}
},
data() {
return {
defaultData: {
latest: '',
modelName: 'DxDocument'
}
}
},
computed: {},
watch: {},
created() {},
mounted() {},
methods: {
selection(rows) {
this.$emit('add', rows)
this.$emit('close')
},
cancel() {
this.$emit('close')
}
}
}
</script>
<style lang="scss"></style>
<template>
<div class="dee-model foreign-unit-mode">
<div v-show="editState||value"><span>{{ value }}</span>
<el-button type="text" @click="showDialogFlag=true">{{ editState?'设置':'查看' }}</el-button>
</div>
<dee-dialog
:dialog-visible="showDialogFlag"
:title="editState?'外单位选择':'外单位查看'"
width="800px"
class="foreign-unit-dialog"
:dialog-bttons="editState?dialogBttons:[]"
@on-submit="submit"
@on-cancel="showDialogFlag=false"
@handleClose="showDialogFlag=false"
>
<div v-for="(units,index) in unitLists" :key="index" class="rows">
<div class="sub-title">
{{ units.title }}
</div>
<div class="checkbox">
<el-checkbox
v-for="(unit) in units.children"
:key="unit.key"
:checked="unit.checked"
:disabled="unit.disabled"
@change="(val)=>{unit.checked = val}"
>{{ unit.title }}</el-checkbox>
</div>
</div>
</dee-dialog>
</div>
</template>
<script>
export default {
name: 'InternalUnit',
componentName: '外单位选择或查看',
props: {
disabled: {
type: Boolean,
default: false
},
readOnly: {
type: Boolean,
default: false
},
value: {
type: [String, Object],
default: () => ''
}
},
data() {
return {
dictOptions: [],
dialogBttons: [{
type: 'submit',
text: '提交',
component: {
type: 'primary'
}
}, {
type: 'cancel',
text: '取消',
component: {}
}],
showDialogFlag: false,
checkedValue: []
}
},
computed: {
editState() {
return !this.disabled && !this.readOnly
},
serviceApi() {
return this.$getService('DictData', { versionControl: false }).baseQuery().orderByDesc('modifyTime')
},
unitLists() {
if (!this.dictOptions || this.dictOptions.length === 0) { return [] }
return this.setChecked(this.dictOptions, this.value)
}
},
watch: {},
// 生命周期 - 创建完成(访问当前this实例)
created() {},
// 生命周期 - 挂载完成(访问DOM元素)
mounted() {
this.init()
},
methods: {
init() {
this.serviceApi
.page(1, 1000)
.search({
data: {
items: [{
fieldName: 'dictCode',
operator: 'EQ',
value: 'ExternalParties'
}, {
fieldName: 'dictState',
operator: 'EQ',
value: 'ENABLE'
}],
operator: 'AND'
}
}).then(res => {
this.dictOptions = res.content
})
},
submit() {
const checked = []
this.unitLists.forEach(items => {
if (items.children && items.children.length) {
items.children.forEach(unit => {
if (unit.checked) {
checked.push(unit.title)
}
})
}
})
this.$emit('input', checked.join())
this.showDialogFlag = false
},
setChecked(options, checkedStr) {
const checked = checkedStr ? checkedStr.split(',') : []
// 数据洗澡
const list = options.map(r => {
return {
title: r.dictValue,
key: r.dictKey,
parentKey: r.parentKey,
disabled: !this.editState,
checked: checked.includes(r.dictKey)
}
})
// 分类
const parent = list.filter(r => !r.parentKey)
parent.forEach(item => {
item.children = list.filter(r => r.parentKey === item.key)
})
return parent
}
}
}
</script>
<style lang="scss">
/* @import url(); 引入css类 */
.foreign-unit-dialog{
.rows{
margin-bottom: 20px;
}
.title-bar{
margin-bottom: 6px;
font-weight: 700;
&:before{
content: "";
width: 4px;
height: 13px;
-ms-flex-item-align: center;
align-self: center;
margin-right: 12px;
}
}
}
</style>
/*
* 提出方 可以选外单位和 内部设计维度
*/
<template>
<div class="dee-model foreign-unit-mode">
<div v-show="editState||cloneValue">{{ cloneValue }} <el-button type="text" @click="showDialogFlag=true">{{ editState?'设置':'查看' }}</el-button></div>
<dee-dialog
:dialog-visible="showDialogFlag"
:title="editState?'选择':'查看'"
width="800px"
class="foreign-unit-dialog"
:dialog-bttons="editState?dialogBttons:[]"
@on-submit="submit"
@on-cancel="showDialogFlag=false"
@handleClose="showDialogFlag=false"
>
<div :key="formKey">
<div class="unit-type">
<label>外单位</label>
<el-button type="text" @click="()=>{setAll('ext');clear('int')}">全选</el-button>
<el-button type="text" @click="clear('ext')">全清</el-button>
</div>
<div v-for="(units,index) in unitLists" :key="index" class="rows">
<div class="sub-title">
{{ units.title }}
</div>
<div class="checkbox">
<el-checkbox
v-for="unit in units.children"
:key="unit.key"
:checked="unit.checked"
:disabled="unit.disabled"
@change="(val)=>{unit.checked = val;clear('int')}"
>{{ unit.title }}</el-checkbox>
</div>
</div>
<div class="unit-type">
<label>内部单位</label>
<el-button type="text" @click="()=>{setAll('int');clear('ext')}">全选</el-button>
<el-button type="text" @click="clear('int')">全清</el-button>
</div>
<div class="checkbox">
<el-checkbox
v-for="unit in internalUnit"
:key="unit.key"
:checked="unit.checked"
:disabled="unit.disabled"
@change="(val)=>{unit.checked = val;clear('ext')}"
>{{ unit.title }}</el-checkbox>
</div>
</div>
</dee-dialog>
</div>
</template>
<script>
import _get from 'lodash.get'
import { post } from '@/utils/http'
export default {
name: 'ProposerUnit',
componentName: '提出方',
props: {
scope: {
type: Object,
default: null
},
disabled: {
type: Boolean,
default: false
},
readOnly: {
type: Boolean,
default: false
},
value: {
type: [String, Object],
default: () => ''
}
},
data() {
return {
formKey: 0,
dictOptions: [],
dialogBttons: [{
type: 'submit',
text: '提交',
component: {
type: 'primary'
}
}, {
type: 'cancel',
text: '取消',
component: {}
}],
internalUnit: [],
showDialogFlag: false
}
},
computed: {
editState() {
return !this.disabled && !this.readOnly && !this.scope
},
serviceApi() {
return this.$getService('DictData', { versionControl: false }).baseQuery().orderByDesc('modifyTime')
},
unitLists() {
if (!this.dictOptions || this.dictOptions.length === 0) { return [] }
return this.setChecked(this.dictOptions, this.cloneValue)
},
rowValue() {
if (!this.scope || !this.scope.column || !this.scope.row) {
return null
}
return _get(this.scope.row, this.scope.column.property)
},
cloneValue() {
return this.rowValue || this.value
}
},
watch: {},
// 生命周期 - 创建完成(访问当前this实例)
created() {},
// 生命周期 - 挂载完成(访问DOM元素)
mounted() {
this.init()
},
methods: {
init() {
this.serviceApi
.page(1, 1000)
.search({
data: {
items: [{
fieldName: 'dictCode',
operator: 'EQ',
value: 'ExternalParties'
}, {
fieldName: 'dictState',
operator: 'EQ',
value: 'ENABLE'
}],
operator: 'AND'
}
}).then(res => {
this.dictOptions = res.content
})
// this.getInternalUnit()
},
getInternalUnit() {
const params = { 'items': [], 'operator': 'AND', 'sortAsc': true, 'sortProperties': ['orgSort'] }
post('/Organization/nodes', params).then(res => {
if (res && res.items) {
const orgs = res.items.find(r => r.orgCode === '001')
if (orgs && orgs.children) {
this.internalUnit = orgs.children.map(r => {
return {
key: r.orgCode,
title: r.orgName,
disabled: !this.editState,
checked: this.cloneValue.indexOf(r.orgCode) > -1
}
})
}
}
})
},
submit() {
const checked = []
this.unitLists.forEach(items => {
if (items.children && items.children.length) {
items.children.forEach(unit => {
console.log('unit', unit)
if (unit.checked) {
checked.push(unit.title)
}
})
}
})
this.internalUnit.forEach(item => {
console.log('item', item)
if (item.checked) {
checked.push(item.title)
}
})
console.log('checked', checked)
this.$emit('input', checked.join())
this.showDialogFlag = false
},
setChecked(options, checkedStr) {
const checked = checkedStr ? checkedStr.split(',') : []
// 数据洗澡
const list = options.map(r => {
return {
title: r.dictValue,
key: r.dictKey,
parentKey: r.parentKey,
disabled: !this.editState,
checked: checked.includes(r.dictKey)
}
})
// 分类
const parent = list.filter(r => !r.parentKey)
parent.forEach(item => {
item.children = list.filter(r => r.parentKey === item.key)
})
return parent
},
clear(type) {
if (!this.editState) {
return
}
if (type === 'ext') {
this.unitLists.forEach((r) => {
r.children && r.children.forEach(m => {
m.checked = false
})
})
}
if (type === 'int') {
this.internalUnit.forEach((r) => { r.checked = false })
}
this.refresh()
},
setAll(type) {
if (!this.editState) {
return
}
if (type === 'ext') {
this.unitLists.forEach((r) => {
r.children && r.children.forEach(m => {
m.checked = true
})
})
}
if (type === 'int') {
this.internalUnit.forEach((r) => { r.checked = true })
}
this.refresh()
},
refresh() {
this.formKey++
}
}
}
</script>
<style lang="scss">
/* @import url(); 引入css类 */
.foreign-unit-dialog{
.rows{
margin-bottom: 20px;
}
.unit-type{
label{
font: size 18px;
font-weight: 900;
}
}
.title-bar{
margin-bottom: 6px;
font-weight: 700;
&:before{
content: "";
width: 4px;
height: 13px;
-ms-flex-item-align: center;
align-self: center;
margin-right: 12px;
}
}
}
</style>
<!--
* @Author: zhangtianfeng 3232807530@qq.com
* @Date: 2024-08-06 15:50:13
* @LastEditors: zhangtianfeng 3232807530@qq.com
* @LastEditTime: 2024-08-06 15:54:30
-->
<template>
<div class="RelatedIncomeContractAddList">
<dee-as-com
class="FeatureTypicalcom"
:lay-config="{
typeName: 'ExtIncomeContract',
layKey: 'relatedIncomeContract-AddList'
}"
@selectionChange="selectionChange"
/>
<div class="btns">
<el-button type="primary" class="submitBTN" :disabled="!isDisable" @click="tosubmit">确定</el-button>
<el-button type="primary" @click="$emit('cancel')">取消</el-button>
</div>
</div>
</template>
<script>
import { post } from '@/utils/http'
export default {
name: 'RelatedSpendingContractAddList',
componentName: '相关收入合同-添加',
props: {
basicData: {
type: Object,
default: () => {}
}
},
data() {
return {
selections: []
}
},
computed: {
isDisable() {
return Boolean(this.selections.length)
}
},
mounted() {
},
methods: {
selectionChange(data) {
this.selections = data
},
tosubmit() {
const source = this.$parent.$parent.$parent.$parent.basicData
const params = this.selections.map(r => {
return {
source: source,
operator: 'ADD',
target: r
}
})
post('ExtContractLink/recursions', params).then(res => {
this.$emit('completeEven')
})
}
}
}
</script>
<style lang='scss' scoped>
.RelatedIncomeContractAddList{
height: 80%;
.FeatureTypicalcom{
height: calc(100% - 50px);
}
.btns{
margin-top: 20px;
display: flex;
justify-content: center;
.submitBTN{
margin-right: 25px;
}
}
}
</style>
<!--
* @Author: zhangtianfeng 3232807530@qq.com
* @Date: 2024-08-06 13:54:44
* @LastEditors: zhangtianfeng 3232807530@qq.com
* @LastEditTime: 2024-08-06 14:10:31
-->
<template>
<div class="RelatedSpendingContractAddList">
<dee-as-com
class="FeatureTypicalcom"
:lay-config="{
typeName: 'ExtSpendingContract',
layKey: 'relatedSpendingContract-AddList'
}"
@selectionChange="selectionChange"
/>
<div class="btns">
<el-button type="primary" class="submitBTN" :disabled="!isDisable" @click="tosubmit">确定</el-button>
<el-button type="primary" @click="$emit('cancel')">取消</el-button>
</div>
</div>
</template>
<script>
import { post } from '@/utils/http'
export default {
name: 'RelatedSpendingContractAddList',
componentName: '相关支出合同-添加',
props: {
basicData: {
type: Object,
default: () => {}
}
},
data() {
return {
selections: []
}
},
computed: {
isDisable() {
return Boolean(this.selections.length)
}
},
mounted() {
},
methods: {
selectionChange(data) {
this.selections = data
},
tosubmit() {
const source = this.$parent.$parent.$parent.$parent.basicData
const params = this.selections.map(r => {
return {
source: source,
operator: 'ADD',
target: r
}
})
post('ExtContractLink/recursions', params).then(res => {
this.$emit('completeEven')
})
}
}
}
</script>
<style lang='scss' scoped>
.RelatedSpendingContractAddList{
height: 80%;
.FeatureTypicalcom{
height: calc(100% - 50px);
}
.btns{
margin-top: 20px;
display: flex;
justify-content: center;
.submitBTN{
margin-right: 25px;
}
}
}
</style>
<template>
<div>
<!-- 下拉框 -->
<el-select v-model="value" placeholder="请选择" @change="handleChange">
<el-option
v-for="item in org"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select></div>
</template>
<script >
export default {
name: 'SelectInterfaceInfo',
componentName: '提资记录-新建-选择提资方',
data() {
return {
value: null,
org: [
// { value: '哈哈',
// label: '哈哈'
// }
]
}
},
mounted() {
// this.initOrg()
},
methods: {
initOrg() {
const org = localStorage.getItem('org')
console.log('org', org)
if (!org) {
return
}
this.org = JSON.parse(org)
if (!this.org) {
this.org = []
return
}
this.org = this.org.filter(r => r.orgCode.indexOf('001') === 0) // 001 开头标识 设计维度部门
this.org = this.org.map(r => {
return {
label: r.orgName,
value: r.orgName
}
})
},
handleChange(val) {
this.$emit('input', this.value)
}
}
}
</script>
<style lang="scss" scoped>
</style>
<!--
* @Author: zhangtianfeng 3232807530@qq.com
* @Date: 2024-07-31 15:11:47
* @LastEditors: zhangtianfeng 3232807530@qq.com
* @LastEditTime: 2024-07-31 15:13:41
-->
<template>
<dee-form
v-dee-loading="loading"
:form="form"
:form-data="propFormData"
:rules="rules"
:form-buttons="formButtons"
form-btn-position="center"
@on-submit="submit"
@on-cancel="close"
/>
</template>
<script>
export default {
name: 'EditECR',
componentName: '详情按钮-编辑ECR',
props: {
dialogShow: {
type: Boolean,
default: () => false
},
node: {
type: Object,
default: () => {}
},
editObj: {
type: Object,
default: () => {}
}
},
data() {
return {
loading: false,
propFormData: [{
split: 3,
data: [
{
key: 'changeReason', title: '更改原因', width: 3,
'component': {
'name': 'el-select',
'dicType': '0',
'optionsdic': 'UpgradeReason'
}
},
{
key: 'causeDescript', title: '原因说明', width: 3,
'component': {
'name': 'el-input',
type: 'textarea',
row: 2
}
}]
}],
formButtons: [
{
'text': '确定',
'type': 'submit',
'component': {
'type': 'primary'
}
},
{
'text': '取消',
'type': 'cancel',
'component': {
}
}
],
rules: {
changeReason: [
{ required: true, message: '请填写更改原因', trigger: 'input' }
],
causeDescript: [
{ required: true, message: '请填写原因说明', trigger: 'input' }
]
},
form: {}
}
},
computed: {
ecrLinkApi() {
return this.$getService('ExtUpgradeObjLink').baseQuery().orderByDesc('modifyTime')
.page(1, 1)
.setBaseSearchItems({ data: { items: [] }})
},
ecrApi() {
return this.$getService('ECR')
}
},
watch: {
dialogShow: {
immediate: true,
handler: function(flag) {
if (flag) {
this.init()
} else {
this.clear()
}
}
}
},
// 生命周期 - 创建完成(访问当前this实例)
created() {},
// 生命周期 - 挂载完成(访问DOM元素)
mounted() {},
methods: {
submit() {
if (this.loading) {
return
}
this.loading = true
this.ecrApi.save(this.form).then(res => {
this.$emit('close')
}).filnally(() => {
this.loading = false
})
},
close() {
this.$emit('close')
},
init() {
if (this.node && this.node.versionId) {
this.getData()
}
},
getData() {
this.loading = true
const customSearchItems = { data: { items: [{
fieldName: 'targetId',
operator: 'EQ',
value: this.node.versionId
}] }}
this.ecrLinkApi
.openProp(['source'])
.recursion(customSearchItems).then(res => {
if (res.content && res.content[0] && res.content[0].source) {
this.form = {
id: res.content[0].source.id,
causeDescript: res.content[0].source.causeDescript,
changeReason: res.content[0].source.changeReason
}
} else {
this.$utils.showMessageWarning('未找到相关ECR!')
this.close()
}
this.loading = false
}).catch(() => {
this.loading = false
})
},
clear() {
this.form = {}
}
}
}
</script>
<style lang="scss" scoped>
</style>
<template>
<dee-form
v-dee-loading="loading"
:form="form"
:form-data="propFormData"
:rules="rules"
:form-buttons="formButtons"
form-btn-position="center"
@on-submit="submit"
@on-cancel="close"
/>
</template>
<script>
import { get } from '@/utils/http'
export default {
name: 'ModifyNumber',
componentName: '改编号',
props: {
dialogShow: {
type: Boolean,
default: () => false
},
node: {
type: Object,
default: () => {}
},
businessTab: {
type: Object,
default: () => null
}
},
data() {
return {
loading: false,
propFormData: [{
split: 3,
data: [
{
key: 'number',
width: 3,
component: {
name: 'el-input',
type: 'textarea',
rows: '2',
placeholder: '请输入新编号'
}
}
]
}],
formButtons: [
{
'text': '确定',
'type': 'submit',
'component': {
'type': 'primary'
}
},
{
'text': '取消',
'type': 'cancel',
'component': {
}
}
],
rules: {
},
form: {}
}
},
watch: {
dialogShow: {
immediate: true,
handler: function(flag) {
if (flag) {
this.init()
} else {
this.clear()
}
}
}
},
// 生命周期 - 创建完成(访问当前this实例)
created() {},
// 生命周期 - 挂载完成(访问DOM元素)
mounted() {},
methods: {
submit() {
if (this.loading) {
return
}
this.loading = true
get(`/${this.modelName}/version/reNameNumber/${this.form.id}`, { name: this.form.name, number: this.form.number }).then(res => {
this.$emit('close')
this.refresh(res.items)
}).filnally(() => {
this.loading = false
})
},
refresh(items) {
if (!this.businessTab || !items) {
return
}
const id = items.id
const subTypeName = items.subTypeName
const modelName = this.$utils.getModelName4dxClassName(items)
const newlink = {
path: `/generalDetail/${id}/${subTypeName}/${modelName}`
}
this.businessTab.reload({ type: 'updateVersion', id: items.id }, newlink)
},
close() {
this.$emit('close')
},
init() {
if (this.node && this.node.id) {
this.form.id = this.node.id
this.form.phaseState = this.node.phaseState || ''
}
},
clear() {
this.form = {}
}
}
}
</script>
<style lang="scss">
</style>
<!--
* @Author: zhangtianfeng 3232807530@qq.com
* @Date: 2024-07-31 14:50:38
* @LastEditors: zhangtianfeng 3232807530@qq.com
* @LastEditTime: 2024-07-31 15:06:17
-->
<template>
<dee-form
v-dee-loading="loading"
:form="form"
:form-data="propFormData"
:rules="rules"
:form-buttons="formButtons"
form-btn-position="center"
@on-submit="submit"
@on-cancel="close"
/>
</template>
<script>
import { post } from '@/utils/http'
export default {
name: 'UpdateVersion',
// import引入的组件需要注入到对象中才能使用
components: {},
componentName: '详情按钮-升版',
props: {
dialogShow: {
type: Boolean,
default: () => false
},
node: {
type: Object,
default: () => {}
},
businessTab: {
type: Object,
default: () => null
}
},
data() {
return {
loading: false,
propFormData: [{
split: 3,
data: [
{
key: 'id',
component: {
name: 'el-input',
'obscure': 'true'
}
},
{
key: 'phaseState', title: '阶段选择', width: 3,
'component': {
'name': 'el-select',
'dicType': '0',
'optionsdic': 'PhaseState',
'hasParams': false
}
},
{
key: 'changeReason', title: '升版原因', width: 3,
'component': {
'name': 'el-select',
'dicType': '0',
'optionsdic': 'UpgradeReason',
'hasParams': false
}
},
{
key: 'causeDescript', title: '原因说明', width: 3,
'component': {
'name': 'el-input',
type: 'textarea',
row: 2
}
}]
}],
formButtons: [
{
'text': '确定',
'type': 'submit',
'component': {
'type': 'primary'
}
},
{
'text': '取消',
'type': 'cancel',
'component': {
}
}
],
rules: {
deleteType: [
{ required: true, message: '请选择阶段', trigger: 'change' }
],
changeReason: [
{ required: true, message: '请选择升版原因', trigger: 'change' }
]
},
form: {}
}
},
computed: {
},
watch: {
dialogShow: {
immediate: true,
handler: function(flag) {
if (flag) {
this.init()
} else {
this.clear()
}
}
}
},
// 生命周期 - 创建完成(访问当前this实例)
created() {},
// 生命周期 - 挂载完成(访问DOM元素)
mounted() {},
methods: {
submit() {
if (this.loading) {
return
}
this.loading = true
post(`/DxDocument/ext/version/${this.form.id}/revise`, this.form).then(res => {
this.$emit('close')
this.refresh(res.items)
}).filnally(() => {
this.loading = false
})
},
refresh(items) {
if (!this.businessTab || !items) {
return
}
const id = items.id
const subTypeName = items.subTypeName
const modelName = this.$utils.getModelName4dxClassName(items)
const newlink = {
path: `/generalDetail/${id}/${subTypeName}/${modelName}`
}
this.businessTab.reload({ type: 'updateVersion', id: items.id }, newlink)
},
close() {
this.$emit('close')
},
init() {
if (this.node && this.node.id) {
this.form.id = this.node.id
this.form.phaseState = this.node.phaseState || ''
}
},
clear() {
this.form = {}
}
}
}
</script>
<style lang="scss">
</style>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment