diff --git a/pc4mobx/hrmSalary/pages/salaryItem/columns.js b/pc4mobx/hrmSalary/pages/salaryItem/columns.js index e5942fb2..4cc0d47a 100644 --- a/pc4mobx/hrmSalary/pages/salaryItem/columns.js +++ b/pc4mobx/hrmSalary/pages/salaryItem/columns.js @@ -145,13 +145,14 @@ export const salaryItemConditions = [ viewAttr: 3 }, { - conditionType: "INPUT", + conditionType: "INPUTNUMBER", domkey: ["defaultValue"], fieldcol: 14, label: "默认值", lanId: 111, labelcol: 8, value: "", + otherParams: { precision: 2 }, viewAttr: 2 }, { @@ -162,7 +163,19 @@ export const salaryItemConditions = [ lanId: 111, labelcol: 8, value: "", - viewAttr: 1 + viewAttr: 3, + hide: true + }, + { + conditionType: "INPUT", + domkey: ["formulaId"], + fieldcol: 14, + label: "公式", + lanId: 111, + labelcol: 8, + value: "", + viewAttr: 3, + hide: true }, { conditionType: "INPUTNUMBER", @@ -194,6 +207,31 @@ export const salaryItemConditions = [ value: "", viewAttr: 2, otherParams: { minRows: 3 } + }, + { + conditionType: "SWITCH", + domkey: ["useInEmployeeSalary"], + fieldcol: 14, + label: "薪资档案引用", + lanId: 111, + labelcol: 8, + value: "0", + viewAttr: 2, + tipLanId: 111, + tip: "提示:开启后,该薪资项目不可删除或设为无效,取值方式会默认置为输入", + hide: true + }, + { + + conditionType: "SWITCH", + domkey: ["systemType"], + fieldcol: 14, + label: "是否系统默认", + lanId: 111, + labelcol: 8, + value: "0", + viewAttr: 2, + hide: true } ], title: "", diff --git a/pc4mobx/hrmSalary/pages/salaryItem/customSalaryItemSlide.js b/pc4mobx/hrmSalary/pages/salaryItem/customSalaryItemSlide.js index 37248849..4021c714 100644 --- a/pc4mobx/hrmSalary/pages/salaryItem/customSalaryItemSlide.js +++ b/pc4mobx/hrmSalary/pages/salaryItem/customSalaryItemSlide.js @@ -2,12 +2,12 @@ import React from "react"; import { inject, observer } from "mobx-react"; import { WeaFormItem, WeaHelpfulTip, WeaLocaleProvider, WeaSearchGroup, WeaSlideModal, WeaTools } from "ecCom"; import { WeaSwitch } from "comsMobx"; +import FormalFormModal from "./formalFormModal"; import { salaryItemConditions } from "./columns"; import { commonEnumList } from "../../apis/archive"; import { postFetch } from "../../util/request"; import { getItemForm } from "../../apis/item"; -// import FormalFormModal from "./formalFormModal"; // import SalaryItemForm from "./salaryItemForm"; const getLabel = WeaLocaleProvider.getLabel; @@ -19,11 +19,7 @@ export default class CustomSalaryItemSlide extends React.Component { constructor(props) { super(props); this.state = { - conditions: [], - - showForm: false, - formalModalVisible: false, - salaryItemName: "" + conditions: [], visible: false }; } @@ -37,20 +33,16 @@ export default class CustomSalaryItemSlide extends React.Component { } } - handleChange = (params) => { - this.props.onChange({ ...this.props.request, ...params }); + handleChange = (data) => { + const { salaryItemStore: { itemsForm: form } } = this.props; + form.updateFields({ formulaContent: { value: data["formula"] }, formulaId: { value: data["id"] } }); }; - - handleShowFormal = (salaryItemName) => { - this.setState({ - formalModalVisible: true, - salaryItemName - }); - }; - initForm = async (props) => { const { data: salaryItemForm } = props.id ? - await getItemForm({ id: props.id }) : { data: { sharedType: "0", useDefault: "0", hideDefault: "0" } }; + await getItemForm({ id: props.id }) : + { + data: { sharedType: "0", useDefault: "0", hideDefault: "0", pattern: 2, dataType: "number", valueType: "1" } + }; const [{ data: sharedTypeList }, { data: taxAgentList }] = await Promise.all([ commonEnumList({ enumClass: "com.engine.salary.enums.sicategory.SharedTypeEnum" }), postFetch("/api/bs/hrmsalary/taxAgent/listAuth", { filterType: "ADMIN_DATA" }) @@ -71,16 +63,41 @@ export default class CustomSalaryItemSlide extends React.Component { break; case "taxAgentIds": fields = { - ...fields, options: _.map(taxAgentList, o => ({ key: String(o.id), showname: o.name })) + ...fields, options: _.map(taxAgentList, o => ({ key: String(o.id), showname: o.name })), + hide: String(salaryItemForm["sharedType"]) === "0" || !_.isNil(salaryItemForm["sharedType"]) }; break; case "dataType": case "valueType": - case "roundingMode": fields = { ...fields, options: _.map(fields.options, o => ({ ...o, showname: getLabel(o.lanId, o.showname) })) }; break; + case "roundingMode": + fields = { + ...fields, options: _.map(fields.options, o => ({ ...o, showname: getLabel(o.lanId, o.showname) })), + hide: String(salaryItemForm["dataType"]) === "string" + }; + break; + case "pattern": + fields = { + ...fields, hide: String(salaryItemForm["dataType"]) === "string" + }; + break; + case "defaultValue": + const otherParams = String(salaryItemForm["dataType"]) === "number" ? { precision: Number(salaryItemForm["pattern"]) } : {}; + fields = { + ...fields, otherParams, + conditionType: String(salaryItemForm["dataType"]) === "string" ? "INPUT" : "INPUTNUMBER", + hide: String(salaryItemForm["valueType"]) !== "1" + }; + break; + case "formulaContent": + fields = { + ...fields, hide: String(salaryItemForm["valueType"]) === "1", + label: String(salaryItemForm["valueType"]) === "2" ? getLabel(111, "公式") : getLabel(111, "SQL") + }; + break; default: break; } @@ -93,20 +110,38 @@ export default class CustomSalaryItemSlide extends React.Component { }); }; handleChangeFormItem = (res) => { + const { salaryItemStore: { itemsForm: form } } = this.props; const { conditions } = this.state, [key] = _.keys(res), value = res[key].value; this.setState({ conditions: _.map(conditions, c => { return { ...c, items: _.map(c.items, fields => { if (key === "sharedType" && getKey(fields) === "taxAgentIds") { + fields = { ...fields, viewAttr: value === "0" ? 2 : 3, hide: value === "0" }; + } else if (key === "dataType" && (getKey(fields) === "roundingMode" || getKey(fields) === "pattern")) { + fields = { ...fields, hide: value === "string" }; + } else if ((key === "dataType" || key === "pattern") && getKey(fields) === "defaultValue") { + const otherParams = form.getFormParams().dataType === "number" ? { precision: Number(form.getFormParams().pattern) } : {}; fields = { - ...fields, viewAttr: value === "0" ? 2 : 3, hide: value === "0" + ...fields, otherParams, conditionType: value === "string" ? "INPUT" : "INPUTNUMBER", + hide: form.getFormParams().valueType !== "1" + }; + } else if (key === "valueType" && (getKey(fields) === "formulaContent" || getKey(fields) === "defaultValue")) { + fields = { + ...fields, + label: getKey(fields) === "defaultValue" ? fields.label : form.getFormDatas().valueType.valueSpan, + hide: (getKey(fields) === "formulaContent" && value === "1") || (getKey(fields) === "defaultValue" && value !== "1") }; } return fields; }) }; }) + }, () => { + form.getFormParams().valueType === "1" && + form.updateFields({ formulaContent: { value: "" }, formulaId: { value: "" } }); + (form.getFormParams().valueType === "2" || form.getFormParams().valueType === "3") && + form.updateFields({ defaultValue: { value: "" } }); }); }; renderForm = () => { @@ -121,6 +156,10 @@ export default class CustomSalaryItemSlide extends React.Component { + { + getKey(fields) === "formulaContent" && form.getFormParams().valueType !== "1" && +
this.setState({ visible: true })}/> + } { fields.tip && onClose()} - content={
{this.renderForm()}
}/> + content={
+ {this.renderForm()} + {visible && + this.setState({ visible: false })} + /> + } +
}/> //
// - // {formalModalVisible && - // { - // this.handleSaveFormal(data); - // }} - // onCancel={() => - // this.setState({ - // formalModalVisible: false, - // salaryItemName: "" - // })} - // />} //
); } diff --git a/pc4mobx/hrmSalary/pages/salaryItem/index.js b/pc4mobx/hrmSalary/pages/salaryItem/index.js index 3fa15372..24aaaaea 100644 --- a/pc4mobx/hrmSalary/pages/salaryItem/index.js +++ b/pc4mobx/hrmSalary/pages/salaryItem/index.js @@ -1,6 +1,6 @@ import React from "react"; import { inject, observer } from "mobx-react"; -import { Button, Dropdown, Menu, message, Modal, Switch } from "antd"; +import { Button, Dropdown, Menu, message, Modal } from "antd"; import { WeaInputSearch, WeaLocaleProvider, WeaTop } from "ecCom"; import * as API from "../../apis/item"; import SalaryItemsTable from "./salaryItemsTable"; @@ -69,9 +69,10 @@ export default class SalaryItem extends React.Component { }); }; - handleDeleteItem = () => { + handleDeleteItem = (recordId) => { const { selectedRowKeys, isQuery } = this.state; - if (_.isEmpty(selectedRowKeys)) { + const params = recordId ? [recordId] : selectedRowKeys; + if (_.isEmpty(params)) { message.warning(getLabel(111, "请勾选数据!")); return; } @@ -79,7 +80,7 @@ export default class SalaryItem extends React.Component { title: getLabel(131329, "信息确认"), content: getLabel(111, "确认删除吗?"), onOk: () => { - API.deleteItem(selectedRowKeys).then(({ status, errormsg }) => { + API.deleteItem(params).then(({ status, errormsg }) => { if (status) { message.success(getLabel(111, "操作成功!")); this.setState({ isQuery: !isQuery }); @@ -87,118 +88,56 @@ export default class SalaryItem extends React.Component { message.error(errormsg); } }); - }, - onCancel: () => { } }); }; - getColumns = () => { - const { salaryItemStore, taxAgentStore: { showSalaryItemBtn, showOperateBtn } } = 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]; - switch (newColumn.dataIndex) { - case "name": - return { - this.onEditItem(record, false); - }}>{text}; - case "useDefault": - case "hideDefault": - case "useInEmployeeSalary": - return ; - default: - return
; - } - }; - return newColumn; + handleValidateForm = () => { + return new Promise((resolve) => { + const { salaryItemStore: { itemsForm: form } } = this.props; + const { formulaId, valueType, sharedType, taxAgentIds } = form.getFormParams(); + let taxAgentValidate = true, formulaValidate = true; + if (sharedType === "1" && !taxAgentIds) taxAgentValidate = false; + if (valueType !== "1" && !formulaId) formulaValidate = false; + resolve({ taxAgentValidate, formulaValidate }); }); - columns.push({ - key: "operate", - title: "操作", - width: 185, - render: (text, record) => { - return ( - - this.onEditItem(record, true)}>{(showSalaryItemBtn || showOperateBtn) ? "编辑" : "查看"} - { - (record.canDelete && (showSalaryItemBtn || showOperateBtn)) && - this.handleDeleteItem(record)} - >{getLabel(535052, "删除")} - } - - - this.onDropMenuClick("log", record.id)}>{getLabel(545781, "操作日志")} - - - }> - - - - ); - } - }); - return [ - // { - // title: "序号", - // dataIndex: "index", - // align: "left", - // width: 60, - // render: (text, record, index) => { - // const { current, pageSize } = this.state.searchParams; - // return (current - 1) * pageSize + index + 1; - // } - // }, - ...columns]; }; - - handleSearch(value) { - const { salaryItemStore: { getTableDatas } } = this.props; - getTableDatas({ ...this.state.searchParams, current: 1, name: value }).then(res => { - this.setState({ - searchParams: { - ...this.state.searchParams, - current: 1, - total: res.total - } - }); - }); - } - - handlePageChange(value) { - const { salaryItemStore: { getTableDatas } } = this.props; - getTableDatas({ ...this.state.searchParams, name: this.state.searchValue, current: value }).then(res => { - this.setState({ - searchParams: { - ...this.state.searchParams, - current: value, - total: res.total - } - }); - }); - } - - handleShowSizeChange(searchParams) { - const { salaryItemStore: { getTableDatas } } = this.props; - getTableDatas({ ...searchParams }); - } - handleSalaryItem = (type) => { + const { customItemDialog: { id }, isQuery } = this.state; const { salaryItemStore: { itemsForm: form } } = this.props; - form.validateForm().then(f => { - if (f.isValid) { - console.log(form.getFormParams()); - } else { - f.showErrors(); - } - }); + Promise.all([form.validateForm(), this.handleValidateForm()]) + .then(([f1, f2]) => { + if (f1.isValid && f2.taxAgentValidate && f2.formulaValidate) { + const { formulaContent, valueType, dataType, defaultValue, pattern, ...formData } = form.getFormParams(); + const key = valueType === "2" ? "originFormulaContent" : valueType === "3" ? "originSqlContent" : "formulaContent"; + this.setState({ loading: true }); + API.saveItem({ + ...formData, valueType, dataType, pattern, [key]: formulaContent, id, + defaultValue: dataType === "number" ? toDecimal_n(defaultValue, parseInt(pattern)) : defaultValue + }).then(({ status, errormsg }) => { + this.setState({ loading: false }); + if (status) { + this.setState({ isQuery: !isQuery }, () => { + message.success(getLabel(111, "操作成功")); + type === "SAVECREATE" && form.updateFields({ + name: { value: "" }, formulaContent: { value: "" }, formulaId: { value: "" } + }); + type !== "SAVECREATE" && this.setState({ + customItemDialog: { ...this.state.customItemDialog, visible: false, id: "" } + }); + }); + + } else { + message.error(errormsg); + } + }); + } else { + !f1.isValid && f1.showErrors(); + !f2.taxAgentValidate && f1.showError("taxAgentIds", getLabel(111, "\"可见性范围\"未填写")); + !f2.formulaValidate && f1.showError("formulaId", getLabel(111, `\"${form.getFormDatas().valueType.valueSpan}\"未填写`)); + this.forceUpdate(); + } + }); }; onDropMenuClick = (key, targetid = "") => { switch (key) { @@ -229,6 +168,9 @@ export default class SalaryItem extends React.Component { } }); break; + case "delete": + this.handleDeleteItem(targetid); + break; case "sysAdd": break; default: @@ -274,7 +216,7 @@ export default class SalaryItem extends React.Component { let buttons = [ this.onDropMenuClick("customAdd")}>{getLabel(111, "新增自定义薪资项")}, - , + , this.setState({ name: val })} placeholder={getLabel(111, "请输入名称")} onSearch={() => this.setState({ isQuery: !isQuery })}/> ]; @@ -390,7 +332,7 @@ export default class SalaryItem extends React.Component { {/*新增编辑自定义薪资项目*/} this.setState({ isQuery: !isQuery })} onClose={callback => this.setState({ - customItemDialog: { ...customItemDialog, visible: false } + customItemDialog: { ...customItemDialog, visible: false, id: "" } }, () => callback && callback())}/> {/*{*/} {/* editSlideVisible &&*/} diff --git a/pc4mobx/hrmSalary/pages/salaryItem/index.less b/pc4mobx/hrmSalary/pages/salaryItem/index.less index 9fcd0e95..40b4e186 100644 --- a/pc4mobx/hrmSalary/pages/salaryItem/index.less +++ b/pc4mobx/hrmSalary/pages/salaryItem/index.less @@ -28,6 +28,16 @@ .wea-form-item-wrapper { display: block !important; + + .formula_input_div { + cursor: pointer; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 2; + } } } diff --git a/pc4mobx/hrmSalary/pages/salaryItem/salaryItemsTable.js b/pc4mobx/hrmSalary/pages/salaryItem/salaryItemsTable.js index 83445529..7d1525be 100644 --- a/pc4mobx/hrmSalary/pages/salaryItem/salaryItemsTable.js +++ b/pc4mobx/hrmSalary/pages/salaryItem/salaryItemsTable.js @@ -9,7 +9,7 @@ */ import React, { Component } from "react"; import { WeaCheckbox, WeaLocaleProvider, WeaTable } from "ecCom"; -import { Dropdown, Menu, message, Modal } from "antd"; +import { Dropdown, Menu } from "antd"; import * as API from "../../apis/item"; const getLabel = WeaLocaleProvider.getLabel; @@ -54,24 +54,6 @@ class SalaryItemsTable extends Component { } }); }; - handleDeleteItem = (record) => { - Modal.confirm({ - title: getLabel(131329, "信息确认"), - content: getLabel(111, "确认删除吗?"), - onOk: () => { - API.deleteItem(selectedRowKeys).then(({ status, errormsg }) => { - if (status) { - message.success(getLabel(111, "操作成功!")); - this.getItemList(this.props); - } else { - message.error(errormsg); - } - }); - }, - onCancel: () => { - } - }); - }; render() { const { dataSource, columns, pageInfo, loading } = this.state; @@ -111,7 +93,7 @@ class SalaryItemsTable extends Component { { (showOperateBtn || showSalaryItemBtn) && record.canDelete && this.handleDeleteItem(record)}>{getLabel(111, "删除")} + onClick={() => onDropMenuClick("delete", record.id)}>{getLabel(111, "删除")} }