This commit is contained in:
MustangDeng 2022-04-18 11:42:45 +08:00
parent 78dda90119
commit 082cbe1955
8 changed files with 187 additions and 39 deletions

View File

@ -108,3 +108,43 @@ export const saveSysItem = params => {
export const getItemTypeOption = params => {
return WeaTools.callApi('/api/bs/hrmsalary/salaryitem/listSalaryItemTypeOption', 'GET', params);
}
// *** 公式 start ***
// 获取公式变量类型
export const formualSearchGroup = params => {
return fetch('/api/bs/hrmsalary/formula/search/group', {
method: 'POST',
mode: 'cors',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(params)
}).then(res => res.json())
}
//获取公式变量字段
export const formualSearchField = params => {
return fetch('/api/bs/hrmsalary/formula/search/field', {
method: 'POST',
mode: 'cors',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(params)
}).then(res => res.json())
}
// /api/bs/hrmsalary/formula/save
// 保存公式
export const saveFormual = parmas => {
return fetch('/api/bs/hrmsalary/formula/save', {
method: 'POST',
mode: 'cors',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(params)
}).then(res => res.json())
}
// *** 公式 end ***

View File

@ -2,7 +2,7 @@ import React from 'react';
import { inject, observer } from 'mobx-react';
import { toJS } from 'mobx';
import { Button, Table, DatePicker, Switch } from 'antd';
import { Button, Table, DatePicker, Switch, Modal } from 'antd';
import { WeaTop, WeaTab, WeaRightMenu, WeaRangePicker, WeaInputSearch, WeaSlideModal } from 'ecCom';
import { WeaTableNew } from "comsMobx"

View File

@ -4,25 +4,35 @@ import { WeaHelpfulTip, WeaSelect, WeaTextarea, WeaInput } from 'ecCom'
import "./index.less"
import { roundingModeOptions, patternOptions, dataTypeOptions } from "./options"
import RequiredLabelTip from '../../components/requiredLabelTip'
import FormalFormModal from './formalFormModal'
export default class CustomSalaryItemSlide extends React.Component {
constructor(props) {
super(props)
this.state = {
showForm: false
showForm: false,
formalModalVisible: false
}
}
handleChange(params) {
let request = {...this.props.request, ...params}
this.setState({request})
this.setState({
request,
showForm: e.target.value == 2 ? true: false
})
this.props.onChange(request)
}
handleShowFormal() {
this.setState({
formalModalVisible: true
})
}
render() {
const { request, editable } = this.props;
const { name, useDefault, useInEmployeeSalary, roundingMode, pattern, valueType, description, dataType } = request;
const { formalModalVisible } = this.state;
return (
<div className="customSalaryItemSlide">
<div>
@ -74,7 +84,6 @@ export default class CustomSalaryItemSlide extends React.Component {
<Row>
<Col span={8}>舍入规则<RequiredLabelTip /></Col>
<Col span={16}>
<WeaSelect options={roundingModeOptions} style={{width: "200px"}} value={roundingMode} onChange={(value) => {this.handleChange({roundingMode: value})}}/>
</Col>
</Row>
@ -94,10 +103,8 @@ export default class CustomSalaryItemSlide extends React.Component {
<Col span={4}>取值方式<RequiredLabelTip /></Col>
<Col span={20}>
<Radio.Group disabled={editable? false: true} value={valueType} onChange={(e) => {
this.setState({
showForm: e.target.value == 2 ? true: false
})
this.handleChange({valueType: e.target.value})
this.handleChange({valueType: e.target.value}, e.target.value)
}}>
<Radio value={1}>输入</Radio>
<Radio value={2}>公式</Radio>
@ -110,7 +117,9 @@ export default class CustomSalaryItemSlide extends React.Component {
<Row className="formItem">
<Col span={4}>公式</Col>
<Col span={20}>
<WeaTextarea viewAttr={editable ? 2 : 1}/>
<div style={{width: "100%", height: "40px", border: "1px solid #eee"}}
onClick={this.handleShowFormal()}
></div>
</Col>
</Row>
}
@ -124,6 +133,15 @@ export default class CustomSalaryItemSlide extends React.Component {
</Row>
</div>
{
formalModalVisible &&
<FormalFormModal
visible={formalModalVisible}
onCancel={this.setState({
formalModalVisible: false
})}
/>
}
</div>
)
}

View File

@ -0,0 +1,58 @@
import React from 'react'
import {Modal} from 'antd'
import { WeaTextarea } from 'ecCom'
import { inject, observer } from 'mobx-react';
@inject('salaryItemStore')
@observer
export default class FormalFormModal extends React.Component {
constructor(props) {
super(props)
this.state = {
value: ''
}
}
componentWillMount() {
const { salaryItemStore } = this.props;
const { salaryAcctImportTemplateParam } = salaryItemStore;
salaryAcctImportTemplateParam();
}
// 多行文本编辑
handleChange(value) {
this.setState({
value
})
}
render() {
const {salaryItemStore} = this.props;
const { searchGroup } = salaryItemStore
const { value } = this.state;
return (
<Modal title="函数公式" visible={this.props.visible} width={800} height={900} onCancel={() => {this.props.onCancel()}}>
<div>
<WeaTextarea style={{width: "100%", height: "300px"}} value={value} onChange={this.handleChange} />
</div>
<div style={{display: "flex", height: "500px"}}>
<div style={{flex: 1, height: "100%", overflowY: "scroll"}} >
<div>
<div>变量</div>
<div>
{
searchGroup.map(item => {
return <div key={item.key}>
{item.value}
</div>
})
}
</div>
</div>
</div>
<div style={{flex: 1, height: "100%"}}>
</div>
</div>
</Modal>
)
}
}

View File

@ -3,9 +3,9 @@ import { inject, observer } from 'mobx-react';
import { toJS } from 'mobx';
import { Button, Table, DatePicker, Switch, Menu, Dropdown } from 'antd';
import { WeaTableNew } from "comsMobx"
// import { WeaTableNew } from "comsMobx"
import { WeaSlideModal, WeaTop, WeaTab, WeaRightMenu, WeaRangePicker, WeaInputSearch } from 'ecCom';
import { WeaTable, WeaSlideModal, WeaTop, WeaTab, WeaRightMenu, WeaRangePicker, WeaInputSearch } from 'ecCom';
import { renderNoright, getSearchs } from '../../util'; // 渲染form数据的方法因为多个页面都会使用所以抽的公共方法在util中
import CustomTab from '../../components/customTab';
@ -15,11 +15,10 @@ import { columns, dataSource } from './columns';
import SlideModalTitle from "../../components/slideModalTitle"
import CustomSalaryItemSlide from './customSalaryItemSlide'
import DeleteSalaryItemModal from './deleteSalaryItemModal';
import FormalFormModal from './formalFormModal';
const { MonthPicker } = DatePicker;
const WeaTable = WeaTableNew.WeaTable;
@inject('salaryItemStore')
@observer
export default class SalaryItem extends React.Component {
@ -30,7 +29,8 @@ export default class SalaryItem extends React.Component {
selectedKey: "0",
editable: false,
isAdd: false,
searchValue: ""
searchValue: "",
formalModalVisible: false
}
columns.map(item => {
if(item.dataIndex == "refere") {
@ -66,9 +66,10 @@ export default class SalaryItem extends React.Component {
}
// 增加编辑功能重写columns绑定事件
getColumns = (columns) => {
let newColumns = '';
newColumns = columns.map(column => {
getColumns = () => {
const { salaryItemStore } = this.props;
const { tableColumns} = salaryItemStore
let columns = tableColumns.map(column => {
let newColumn = column;
newColumn.render = (text, record, index) => { //前端元素转义
let valueSpan = record[newColumn.dataIndex + "span"] !== undefined ? record[newColumn.dataIndex + "span"] : record[newColumn.dataIndex];
@ -85,7 +86,16 @@ export default class SalaryItem extends React.Component {
}
return newColumn;
});
return newColumns;
columns.push({
key: "operate",
title: "操作",
render: (text, record) => {
return (
<a onClick={() => {this.onEditItem(record, false)}}>编辑</a>
)
}
})
return columns
}
@ -111,7 +121,8 @@ export default class SalaryItem extends React.Component {
render() {
const { salaryItemStore } = this.props;
const { loading, hasRight, form, condition, tableStore, showSearchAd, getTableDatas, doSearch, setShowSearchAd } = salaryItemStore;
const { systemItemVisible, setSystemItemVisible, deleteItemVisible, setDeleteItemVisible, deleteItemList, editSlideVisible, setEditSlideVisible, request } = salaryItemStore
const { tableDataSource, tableColumns, systemItemVisible, setSystemItemVisible, deleteItemVisible, setDeleteItemVisible, deleteItemList, editSlideVisible, setEditSlideVisible, request } = salaryItemStore
const { formalModalVisible} = this.state;
if (!hasRight && !loading) { // 无权限处理
return renderNoright();
}
@ -230,13 +241,19 @@ export default class SalaryItem extends React.Component {
}
/>
<WeaTable // table内部做了loading加载处理页面就不需要再加了
{/* <WeaTable // table内部做了loading加载处理页面就不需要再加了
comsWeaTableStore={tableStore} // table store
hasOrder={true} // 是否启用排序
needScroll={true} // 是否启用table内部列表滚动将自适应到父级高度
getColumns={this.getColumns}
onOperatesClick={this.onOperatesClick.bind(this)}
/> */}
<WeaTable
dataSource={tableDataSource}
columns={this.getColumns(tableColumns)}
/>
</WeaTop>
</WeaRightMenu>
@ -275,6 +292,7 @@ export default class SalaryItem extends React.Component {
closeMaskOnClick={() => setEditSlideVisible(false)} />
}
</div>
)
}

View File

@ -588,7 +588,9 @@ export class LedgerStore {
if(res.status) {
let basicForm = res.data.basicForm
Object.keys(basicForm).map(key => {
basicForm[key] = basicForm[key].toString();
if(basicForm[key]) {
basicForm[key] = basicForm[key].toString();
}
})
this.baseInfoRequest = basicForm
} else {

View File

@ -31,6 +31,10 @@ export class SalaryItemStore {
description: ""
}
@observable tableDataSource = []; // 主列表
@observable tableColumns = []; // 主列表列
@observable searchGroup = []
@action
initRequest = () => this.request = {
@ -60,35 +64,25 @@ export class SalaryItemStore {
// 初始化操作
@action
doInit = () => {
// this.getCondition();
this.getTableDatas({});
}
// 获得高级搜索表单数据
@action
getCondition = () => {
API.getCondition().then(action(res => {
if (res.api_status) { // 接口请求成功/失败处理
this.condition = res.condition;
this.form.initFormFields(res.condition); // 渲染高级搜索form表单
} else {
message.error(res.errormsg || '接口调用失败!')
}
}));
}
// 渲染table数据
@action
getTableDatas = (params) => {
this.loading = true;
API.getItemList(params).then(action(res => {
if (res.status) { // 接口请求成功/失败处理
this.tableStore.getDatas(res.data.datas); // table 请求数据
this.tableDataSource = res.data.list
this.tableColumns = res.data.columns
// this.tableStore.getDatas(res.data.datas); // table 请求数据
} else {
message.error(res.errormsg || '接口调用失败!')
}
this.loading = false;
}));
}
@action
@ -136,7 +130,13 @@ export class SalaryItemStore {
getItemForm = (id) => {
API.getItemForm(id).then(res => {
if(res.status) {
this.request = res.data.map(item => item.toString())
let data = res.data;
Object.keys(data).map(key => {
if(data[key]) {
data[key] = data[key].toString()
}
})
this.request = data;
} else {
message.error(res.errormsg || '获取失败')
}
@ -236,4 +236,16 @@ export class SalaryItemStore {
}
})
}
// 获取公式变量类型
@action
salaryAcctImportTemplateParam = (params = {}) => {
API.formualSearchGroup(params).then(res => {
if(res.status) {
this.searchGroup = res.data
} else {
message.error(res.errormsg || "获取失败")
}
})
}
}

View File

@ -6,4 +6,4 @@
"node_modules/**/*.ts"
]
}
}
}