ttk-app-core
Version:
@ttk/recat enterprise develop framework
324 lines (285 loc) • 11.3 kB
JavaScript
import React from 'react'
import { action as MetaAction, AppLoader } from '@ttk/meta-engine';
import config from './config'
import { fromJS } from 'immutable'
import moment from 'moment'
import { getInitState } from './data'
import { Menu, Checkbox, DataGrid, Tree } from '@ttk/component'
class action {
constructor(option) {
this.metaAction = option.metaAction
this.config = config.current
this.webapi = this.config.webapi
}
onInit = ({ component, injections }) => {
this.component = component
this.injections = injections
this.injections.reduce('init')
this.load()
}
load = async (id) => {
let tree = await this.webapi.query.queryVoucher()
let data = this.handleTreeData(tree)
this.injections.reduce('load', data)
let fields = await this.webapi.query.queryTableFields()
this.injections.reduce('fields', fields)
if(!id) {
this.metaAction.sf('data.selectedKeys', tree[0].id + 'head')
this.metaAction.sf('data.expandedKeys',[String(tree[0].id)])
this.metaAction.sf('data.voucherId',String(tree[0].id))
this.loadDetailData('thead', tree[0].id)
}else if(id) {
let type =
this.metaAction.sf('data.selectedKeys', id + 'head')
let expandedKeys = this.metaAction.gf('data.expandedKeys')
expandedKeys.push(String(id))
this.metaAction.sf('data.expandedKeys', expandedKeys)
this.metaAction.sf('data.voucherId',id)
this.loadDetailData('thead', id)
}
}
loadDetailData = async (type, voucherId, tableId) => {
let response
if(type == 'thead') {
response = await this.webapi.query.queryTableHeadData({voucherId: voucherId})
}else if(type == 'tbody') {
response = await this.webapi.query.queryTableBodyData({voucherId: voucherId, voucherTableId: tableId})
}else if(type == 'tbodys') {
response = await this.webapi.query.queryTablesData({voucherId: voucherId})
}
this.metaAction.sf('data.other.type', type)
this.injections.reduce('list', response)
}
handleTreeData = (tree) => {
let data = []
for(let i = 0 ; i < tree.length; i++) {
let node = {}
node.name = tree[i].name
node.id = tree[i].id
node.voucherId = tree[i].id
node.type = 'root'
node.children = []
node.children.push({name: tree[i].header.name, id: tree[i].id + 'head', selectable: true, voucherId: tree[i].id, type: 'thead'})
let tables = []
for(let j = 0 ; j < tree[i].body.tables.length; j++) {
tables.push({name: tree[i].body.tables[j].caption, id: tree[i].body.tables[j].id, voucherId: tree[i].id,selectable: true, type: 'tbody'})
}
node.children.push({name: tree[i].body.name, id: tree[i].id + 'body', children: tables, voucherId: tree[i].id, type: 'tbodys'})
data.push(node)
}
return data
}
loopTreeChildren = (data, id) => {
if (!data) return null
return data.map((item) => {
if (item.children && item.children.length) {
return <Tree.TreeNode key={item.id} title={item.name} voucherId={item.voucherId} type={item.type}>{this.loopTreeChildren(item.children)}</Tree.TreeNode>
}
return <Tree.TreeNode key={item.id} title={item.name} voucherId={item.voucherId} type={item.type}/>
})
}
selectType = (selectedKeys, info) => {
let key = info.node.props.eventKey
this.metaAction.sf('data.selectedKeys', key)
let type = info.node.props.type
let voucherId = info.node.props.voucherId
this.metaAction.sf('data.voucherId',voucherId)
let tableId
if(type == 'thead') {
tableId = null
this.loadDetailData(type, voucherId, tableId)
}else if(type == 'tbody'){
tableId = key
this.loadDetailData(type, voucherId, tableId)
}else {
let keys = this.metaAction.gf('data.expandedKeys')
if(keys.indexOf(key) != -1){
keys.splice(keys.indexOf(key), 1)
}else {
keys.push(key)
}
this.metaAction.sf('data.other.ts', new Date().getTime())
this.metaAction.sf('data.expandedKeys',keys)
if(type == 'tbodys') {
this.loadDetailData(type, voucherId)
}
}
}
updateExpandedKeys = (keys) => {
this.metaAction.sf('data.expandedKeys',keys)
}
getListRowsCount = () => {
return this.metaAction.gf('data.list').size
}
getListColumns = () => {
const list = this.metaAction.gf('data.list').toJS()
const fields = this.metaAction.gf('data.fields').toJS()
const type = this.metaAction.gf('data.other.type')
let cols = []
let { Column, Cell } = DataGrid
let headerKeys
if(!fields || !list || !type) return cols
if(type == 'thead') {
headerKeys = fields.header
}else if(type == 'tbody'){
headerKeys = fields.body
}else if(type == 'tbodys') {
headerKeys = fields.table || {voucherId: "单据ID", id:"单据表体id", name: "字段名称", caption: "字段标题", isVisible: "是否显示", colIndex: "显示顺序", createTime: '创建时间', }
}
Object.keys(headerKeys).forEach(op => {
let col = <Column flexGrow={1} width={50}
header={<Cell name='header'>{headerKeys[op]}</Cell>}
cell={(ps) => {
if (op == 'isSystem' || op == 'isMustSelect' || op == 'isVisible') {
return <Cell><a>{list[ps.rowIndex][op] == 0 ? '否' : '是'}</a></Cell>
}
return <Cell><a>{list[ps.rowIndex][op]}</a></Cell>
}}
/>
cols.push(col)
})
return cols
}
isSelectAll = () => {
const list = this.metaAction.gf('data.list')
if (!list || list.size == 0)
return false
let data = list.every(o => o.get('selected'))
return data
}
selectAll = () => (e) => {
this.injections.reduce('selectAll', e.target.checked)
}
selectRow = (rowIndex) => (e) => {
this.injections.reduce('selectRow', rowIndex, e.target.checked)
}
pageChanged = (currentPage, pageSize) => {
const filter = this.metaAction.gf('data.filter').toJS()
this.load({ currentPage, pageSize }, filter)
}
addVoucher = async () => {
const ret = await this.metaAction.modal('show', {
title: '新增',
children: this.metaAction.loadApp('ttk-edf-app-voucher-setting', {
store: this.component.props.store,
actionType: 'add'
})
})
if(ret) {
this.load(ret.id)
}
}
modifyVoucher = async () => {
const id = this.metaAction.gf('data.voucherId')
if(!id) return
let tree = this.metaAction.gf('data.other.tree').toJS()
let data = tree.find(o => o.id == id)
const ret = await this.metaAction.modal('show', {
title: '新增',
children: this.metaAction.loadApp('ttk-edf-app-voucher-setting', {
store: this.component.props.store,
actionType: 'modify',
data
})
})
if (ret) {
console.log(ret)
}
}
delType = async () => {
const parentId = this.metaAction.gf('data.filter.parentId')
if (!parentId) {
this.metaAction.toast('error', '请选中删除项')
return
}
const ret = await this.metaAction.modal('confirm', {
title: '删除',
content: '确认删除?'
})
if (ret) {
const id = this.metaAction.gf('data.filter.parentId')
const response = await this.webapi.menu.deleteBatch([{ id }])
this.metaAction.toast('success', '删除成功')
const pagination = this.metaAction.gf('data.pagination').toJS()
this.load(pagination)
}
}
addDetail = async () => {
const id = this.metaAction.gf('data.voucherId')
const type = this.metaAction.gf('data.other.type')
let voucherTableId = null
if(type == 'tbody') {
voucherTableId = this.metaAction.gf('data.selectedKeys')
}
const ret = await this.metaAction.modal('show', {
title: '新增',
width:500,
children: this.metaAction.loadApp('ttk-edf-app-voucher-detail-setting', {
store: this.component.props.store,
actionType: 'add',
voucherId: id,
target: type,
voucherTableId
})
})
if (ret) {
if(type == 'tbodys') {
let tree = await this.webapi.query.queryVoucher()
let data = this.handleTreeData(tree)
this.injections.reduce('load', data)
this.loadDetailData(type, id, voucherTableId)
}else {
this.loadDetailData(type, id, voucherTableId)
}
}
}
modifyDetail = (id) => async () => {
const ret = await this.metaAction.modal('show', {
title: '修改',
children: this.metaAction.loadApp('ttk-edf-app-portal-menu-detail', {
store: this.component.props.store,
id
})
})
if (ret) {
this.reload()
}
}
batchDelDetail = async () => {
const lst = this.metaAction.gf('data.list')
if (!lst || lst.size == 0)
this.metaAction.toast('error', '请选中删除项')
const selectRows = lst.filter(o => o.get('selected'))
if (!selectRows || selectRows.size == 0)
this.metaAction.toast('error', '请选中删除项')
const ret = await this.metaAction.modal('confirm', {
title: '删除',
content: '确认删除?'
})
if (!ret)
return
const ids = selectRows.map(o => ({ id: o.get('id') })).toJS()
await this.webapi.menu.deleteBatch(ids)
this.metaAction.toast('success', '删除成功')
this.reload()
}
columnSetting = async () => {
const ret = await this.metaAction.modal('show', {
title: '栏目设置',
children: this.metaAction.loadApp('ttk-edf-app-column-setting', {
store: this.component.props.store,
columnCode: "menuList"
})
})
if (ret) {
this.reload()
}
}
}
export default function creator(option) {
const metaAction = new MetaAction(option),
o = new action({ ...option, metaAction }),
ret = { ...metaAction, ...o }
metaAction.config({ metaHandlers: ret })
return ret
}