diff --git a/pc4mobx/hrmSalary/pages/fieldManagement/components/fieldSlide.js b/pc4mobx/hrmSalary/pages/fieldManagement/components/fieldSlide.js index db00dab5..4296e718 100644 --- a/pc4mobx/hrmSalary/pages/fieldManagement/components/fieldSlide.js +++ b/pc4mobx/hrmSalary/pages/fieldManagement/components/fieldSlide.js @@ -209,9 +209,8 @@ class FieldSlide extends Component { } content={
- + this.handleChangeFields("name", value)}/> @@ -225,66 +224,60 @@ class FieldSlide extends Component { placement="topLeft" /> - + this.handleChangeFields("useDefault", value)} /> - - + this.handleChangeFields("sharedType", value)} - style={{ width: 200 }} /> { sharedType === "1" && - + this.handleChangeFields("taxAgentIds", value)} /> } - + this.handleChangeFields("dataType", value)} - style={{ width: 200 }} /> - + this.handleChangeFields("roundingMode", value)} /> - + this.handleChangeFields("pattern", value)} /> - + this.handleChangeFields("description", value)} /> diff --git a/pc4mobx/hrmSalary/pages/fieldManagement/index.less b/pc4mobx/hrmSalary/pages/fieldManagement/index.less index 33e962a8..4053721e 100644 --- a/pc4mobx/hrmSalary/pages/fieldManagement/index.less +++ b/pc4mobx/hrmSalary/pages/fieldManagement/index.less @@ -4,10 +4,10 @@ border: 1px solid #e5e5e5; border-bottom: none; - & > div { - border-bottom: 1px solid #e5e5e5; + .wea-form-item { + padding: 4px 16px; margin-bottom: 0; - padding: 5px 16px + border-bottom: 1px solid #e5e5e5; } } diff --git a/pc4mobx/hrmSalary/pages/salaryItem/columns.js b/pc4mobx/hrmSalary/pages/salaryItem/columns.js index 18538a8c..a23f2db3 100644 --- a/pc4mobx/hrmSalary/pages/salaryItem/columns.js +++ b/pc4mobx/hrmSalary/pages/salaryItem/columns.js @@ -1,95 +1,144 @@ +import { dataTypeOptions, patternOptions, roundingModeOptions } from "./options"; + export const columns = [ - { - title: "名称", - dataIndex: 'title', - key: 'title', - }, - { - title: "属性", - dataIndex: 'title', - key: 'title', - }, - { - title: "类型", - dataIndex: 'title', - key: 'title', - }, - { - title: "薪资档案引用", - dataIndex: 'refere', - key: 'refere', - }, - { - title: "默认使用", - dataIndex: 'refere', - key: 'refere', - }, - { - title: "进位规则", - dataIndex: 'title', - key: 'title', - }, - { - title: "保留小数位", - dataIndex: 'title', - key: 'title', - }, - { - title: "取值方式", - dataIndex: 'title', - key: 'title', - }, - { - title: "备注", - dataIndex: 'title', - key: 'title', - }, - { - title: "操作", - dataIndex: 'cz', - key: 'cz', - } -] - -export const systemItemColumns = [ - { - title: "薪资项目", - dataIndex: 'title', - key: 'title' - }, - { - title: "属性", - dataIndex: 'title', - key: 'title' - }, - { - title: "类型", - dataIndex: 'title', - key: 'title' - }, - { - title: "舍入规则", - dataIndex: 'title', - key: 'title' - }, - { - title: "保留小数位", - dataIndex: 'title', - key: 'title' - }, - { - title: "取值方式", - dataIndex: 'title', - key: 'title' - } -] - -export const dataSource = [ - { - title: "测试" - } + { + title: "名称", + dataIndex: "title", + key: "title" + }, + { + title: "属性", + dataIndex: "title", + key: "title" + }, + { + title: "类型", + dataIndex: "title", + key: "title" + }, + { + title: "薪资档案引用", + dataIndex: "refere", + key: "refere" + }, + { + title: "默认使用", + dataIndex: "refere", + key: "refere" + }, + { + title: "进位规则", + dataIndex: "title", + key: "title" + }, + { + title: "保留小数位", + dataIndex: "title", + key: "title" + }, + { + title: "取值方式", + dataIndex: "title", + key: "title" + }, + { + title: "备注", + dataIndex: "title", + key: "title" + }, + { + title: "操作", + dataIndex: "cz", + key: "cz" + } ]; - +export const salaryItemFields = [ + { + key: 'name', + label: '名称', + type: 'INPUT', + viewAttr: 3, + tip: '' + }, + { + key: 'useInEmployeeSalary', + label: '薪资档案引用', + type: 'SWITCH', + viewAttr: 2, + tip: '提示:开启后,该薪资项目不可删除或设为无效,取值方式会默认置为输入' + }, + { + key: 'useDefault', + label: '默认使用', + type: 'SWITCH', + viewAttr: 2, + tip: '提示:开启后,每个薪资方案都有该薪资项目,可在具体薪资方案中删除' + }, + { + key: 'sharedType', + label: '可见性', + type: 'SELECT', + viewAttr: 2, + tip: '' + }, + { + key: 'taxAgentIds', + label: '可见性范围', + type: 'SELECT', + viewAttr: 3, + tip: '' + }, + { + key: 'dataType', + label: '字段类型', + type: 'SELECT', + viewAttr: 3, + options: dataTypeOptions, + tip: '' + }, + { + key: 'roundingMode', + label: '舍入规则', + type: 'SELECT', + viewAttr: 2, + options: roundingModeOptions, + tip: '' + }, + { + key: 'pattern', + label: '保留小数位', + type: 'SELECT', + viewAttr: 2, + options: patternOptions, + tip: '' + }, + { + key: 'valueType', + label: '取值方式', + type: 'RADIO', + viewAttr: 2, + tip: '' + }, + { + key: 'formulaContent', + label: '公式', + type: 'INPUT', + viewAttr: 2, + tip: '' + }, + { + key: 'description', + label: '备注', + type: 'TEXTAREA', + viewAttr: 2, + tip: '' + }, +]; +export const valTakeOptions=[ + {key: "1", showname: '输入'}, + {key: "2", showname: '公式'}, + {key: "3", showname: 'SQL'}, +] diff --git a/pc4mobx/hrmSalary/pages/salaryItem/customSalaryItemSlide.js b/pc4mobx/hrmSalary/pages/salaryItem/customSalaryItemSlide.js index aa355a5a..0b553866 100644 --- a/pc4mobx/hrmSalary/pages/salaryItem/customSalaryItemSlide.js +++ b/pc4mobx/hrmSalary/pages/salaryItem/customSalaryItemSlide.js @@ -1,8 +1,6 @@ import React from "react"; -import { Col, Row, Switch } from "antd"; -import { WeaHelpfulTip, WeaInput, WeaSelect, WeaTextarea } from "ecCom"; -import { dataTypeOptions, patternOptions, roundingModeOptions } from "./options"; import FormalFormModal from "./formalFormModal"; +import SalaryItemForm from "./salaryItemForm"; import "./index.less"; export default class CustomSalaryItemSlide extends React.Component { @@ -14,266 +12,29 @@ export default class CustomSalaryItemSlide extends React.Component { }; } - handleChange(params) { + handleChange = (params) => { let request = { ...this.props.request, ...params }; this.props.onChange(request); - } + }; - handleShowFormal() { + handleShowFormal = () => { this.setState({ formalModalVisible: true }); - } + }; // 保存公式成功回调 - handleSaveFormal(data) { + handleSaveFormal = (data) => { this.handleChange({ formulaId: data.id, formulaContent: data.formula }); - } + }; render() { - const { editable, request, isAdd, userStatusList, taxAgentAdminOption } = this.props; - const { - name, - systemType, - useDefault, - useInEmployeeSalary, - roundingMode, - pattern, - valueType, - description, - dataType, - formulaContent, - formulaId, - sharedType, - taxAgentIds - } = request; + const { request } = this.props; + const { valueType, dataType, formulaId } = request; const { formalModalVisible } = this.state; return (
-
- - 名称 - - { - this.handleChange({ name: value }); - }} - /> - - - { - !isAdd && - - 薪资档案引用 - - { - this.handleChange({ useInEmployeeSalary: value ? 1 : 0 }); - }} - /> - - - - } - - 默认使用 - - { - this.handleChange({ useDefault: value ? 1 : 0 }); - }} - /> - - - - - { - (systemType == 0 || isAdd) && - - - - 可见性 - - { - let payload = {}; - (value === "0" || value === "") && (payload.taxAgentIds = ""); - payload.sharedType = value; - this.handleChange(payload); - }} - style={{ width: "200px" }} - /> - - - - - } - { - sharedType === "1" && - - - - 可见性范围 - - { - this.handleChange({ taxAgentIds: value }); - }} - /> - - - - - } - - - - 字段类型 - - { - this.handleChange({ dataType: value }); - }} - style={{ width: "200px" }} - /> - - - - - - - - 舍入规则 - - { - this.handleChange({ roundingMode: value }); - }} - /> - - - - - - 保留小数位 - - { - this.handleChange({ pattern: value }); - }} - value={pattern} - style={{ width: "200px" }} - /> - - - - - - - 取值方式 - - { - this.handleChange({ - valueType: value, - formulaId: null, - formulaContent: "" - }); - }}/> - - - {(valueType == 2 || valueType == 3) && - - - {valueType == 2 ? "公式" : "SQL"} - - -
{ - if (this.props.record.canEdit || isAdd) { - editable && this.handleShowFormal(); - } - }}> - {formulaContent} -
- -
} - - - 备注 - - { - this.handleChange({ description: value }); - }} - /> - - -
+ {formalModalVisible && { - const { salaryItemStore: { deleteItem } } = this.props; - deleteItem(this.state.selectedRowKeys); - }; - - return ( - { - this.props.onCancel(); - }} - buttons={[ - - ]} - style={{ width: "80vw" }} - > -
- { - this.handleSearchChange(value); - }} onSearch={(value) => { - this.handleSearch(value); - }}/> -
-
- { - this.handleDataPageChange(value); - }, - total: canDeleteList.total, - showTotal: (total) => `共 ${total} 条`, - current: canDeleteList.pageNum - }} - /> -
-
- ); - } -} diff --git a/pc4mobx/hrmSalary/pages/salaryItem/index.js b/pc4mobx/hrmSalary/pages/salaryItem/index.js index 7aeabf71..ed2c9722 100644 --- a/pc4mobx/hrmSalary/pages/salaryItem/index.js +++ b/pc4mobx/hrmSalary/pages/salaryItem/index.js @@ -8,7 +8,6 @@ import SystemSalaryItemModal from "./systemSalaryItemModal"; import { columns } from "./columns"; import SlideModalTitle from "../../components/slideModalTitle"; import CustomSalaryItemSlide from "./customSalaryItemSlide"; -import DeleteSalaryItemModal from "./deleteSalaryItemModal"; import CustomPaginationTable from "../../components/customPaginationTable"; import "../socialSecurityBenefits/programme/index.less"; @@ -66,13 +65,14 @@ export default class SalaryItem extends React.Component { }); } - onEditItem(record, isedit) { + onEditItem = (record, isedit) => { this.record = record; const { salaryItemStore: { getItemForm, setEditSlideVisible } } = this.props; this.setState({ editable: isedit, isAdd: false }); - getItemForm(record.id); - setEditSlideVisible(true); - } + getItemForm(record.id).then(() => { + setEditSlideVisible(true); + }); + }; // 删除列表项 handleDeleteItem(record) { @@ -210,20 +210,12 @@ export default class SalaryItem extends React.Component { } = this.props; const { userStatusList } = salaryFileStore; const { selectedRowKeys } = this.state; - const { - loading, - form, - doSearch, - setShowSearchAd, - deleteItemRequest, getTableDatas - } = salaryItemStore; + const { loading, deleteItemRequest, getTableDatas, initRequest } = salaryItemStore; const { tableDataSource, tableColumns, systemItemVisible, setSystemItemVisible, - deleteItemVisible, - setDeleteItemVisible, editSlideVisible, setEditSlideVisible, request @@ -231,43 +223,13 @@ export default class SalaryItem extends React.Component { if (this.getColumns().length === 2) { // 无权限处理 return renderLoading(); } - const batchDelete = () => { - setDeleteItemVisible(true); - }; - - const rightMenu = [// 右键菜单 - // { - // key: "BTN_COLUMN", - // icon: , - // content: "显示列定制", - // onClick: this.showColumn - // }, - // { - // key: "BTN_DEL", - // icon: , - // content: "批量删除", - // onClick: batchDelete - // } - ]; - const collectParams = { // 收藏功能配置 - favname: "薪资项目管理", - favouritetype: 1, - objid: 0, - link: "wui/index.html#/ns_demo03/index", - importantlevel: 1 - }; - const adBtn = [ // 高级搜索内部按钮 - , - , - - ]; const handleMenuClick = (e) => { const { salaryItemStore: { getSysItemList, setEditSlideVisible, initRequest } } = this.props; - if (e.key == "1") { + if (e.key === "1") { getSysItemList({}); setSystemItemVisible(true); - } else if (e.key == "2") { + } else if (e.key === "2") { this.setState({ editable: true, isAdd: true }); initRequest(); setEditSlideVisible(true); @@ -330,6 +292,14 @@ export default class SalaryItem extends React.Component { // 新建和修改保存的回调 const handleSlideSave = (continueFlag) => { const { salaryItemStore: { saveItem, request, getTableDatas } } = this.props; + const { name, sharedType, taxAgentIds } = request; + if (!name || (sharedType === "1" && !taxAgentIds)) { + Modal.warning({ + title: "信息确认", + content: "必要信息不完整,红色*为必填项!" + }); + return; + } saveItem(request, continueFlag).then(() => { getTableDatas({ ...this.state.searchParams }).then(res => { this.setState({ @@ -381,8 +351,6 @@ export default class SalaryItem extends React.Component { icon={} // 左侧图标 iconBgcolor="#F14A2D" // 左侧图标背景色 showDropIcon={false} // 是否显示下拉按钮 - dropMenuDatas={rightMenu} // 下拉菜单(和页面的右键菜单相同) - dropMenuProps={{ collectParams }} // 收藏功能: 配置之后显示 收藏、帮助、显示页面地址 这3个功能 > } - - { - deleteItemVisible && { - setDeleteItemVisible(false); - }}/> - } - { editSlideVisible && } onClose={() => setEditSlideVisible(false)} - showMask={true} - closeMaskOnClick={() => setEditSlideVisible(false)}/> + /> }
); diff --git a/pc4mobx/hrmSalary/pages/salaryItem/index.less b/pc4mobx/hrmSalary/pages/salaryItem/index.less index 68dda2c1..7a2515e1 100644 --- a/pc4mobx/hrmSalary/pages/salaryItem/index.less +++ b/pc4mobx/hrmSalary/pages/salaryItem/index.less @@ -1,8 +1,19 @@ .customSalaryItemSlide { - padding: 20px; + padding: 16px; - .formItem { - margin-bottom: 20px; + .wea-search-group { + padding: 0; + border: 1px solid #e5e5e5; + border-bottom: none; + + .wea-content { + padding: 0; + + .wea-form-item { + padding: 4px 16px; + border-bottom: 1px solid #e5e5e5; + } + } } } @@ -82,7 +93,7 @@ .wea-textarea-normal { border: 1px solid #e5e5e5 !important; padding: 4px 8px !important; - min-height: 70px!important; + min-height: 70px !important; } } } diff --git a/pc4mobx/hrmSalary/pages/salaryItem/salaryItemForm.js b/pc4mobx/hrmSalary/pages/salaryItem/salaryItemForm.js new file mode 100644 index 00000000..97411b6a --- /dev/null +++ b/pc4mobx/hrmSalary/pages/salaryItem/salaryItemForm.js @@ -0,0 +1,140 @@ +/* + * Author: 黎永顺 + * name: 薪资项目管理-新增自定义项表单 + * Description: + * Date: 2023/2/9 + */ +import React, { Component } from "react"; +import { WeaCheckbox, WeaFormItem, WeaInput, WeaSearchGroup, WeaSelect, WeaTextarea } from "ecCom"; +import { salaryItemFields, valTakeOptions } from "./columns"; + +class SalaryItemForm extends Component { + constructor(props) { + super(props); + this.state = { + salaryItemFieldsList: salaryItemFields + }; + } + + componentDidMount() { + const { salaryItemFieldsList } = this.state; + const { request, editable, record, isAdd, taxAgentAdminOption } = this.props; + const { systemType, sharedType, valueType } = request; + this.setState({ + salaryItemFieldsList: _.map(salaryItemFieldsList, item => { + const { key } = item; + switch (key) { + case "useInEmployeeSalary": + return { + ...item, + viewAttr: (editable && record.canEdit) || isAdd ? 2 : 1, + display: !isAdd + }; + case "sharedType": + return { + ...item, + viewAttr: (editable && record.canEdit) || isAdd ? 2 : 1, + display: systemType.toString() === "0" || isAdd + }; + case "taxAgentIds": + return { + ...item, + multiple: true, + viewAttr: (editable && record.canEdit) || isAdd ? 3 : 1, + display: (!_.isNil(sharedType) && sharedType.toString() === "1") && (!_.isNil(systemType) && systemType.toString() === "0"), + options: taxAgentAdminOption + }; + case "valueType": + return { + ...item, + viewAttr: isAdd ? 2 : 1 + }; + case "formulaContent": + return { + ...item, + display: valueType === "2" || valueType === "3", + viewAttr: (editable && record.canEdit) || isAdd ? 2 : 1 + }; + default: + break; + } + return { + ...item, + viewAttr: (key === "name" && ((editable && record.canEdit) || isAdd)) ? 3 : (key !== "name" && ((editable && record.canEdit) || isAdd)) ? 2 : 1 + }; + }) + }); + } + + handleChangeSalaryFiledItems = (key, v) => { + const { onChangeFieldsItem } = this.props; + const { salaryItemFieldsList } = this.state; + this.setState({ + salaryItemFieldsList: _.map(salaryItemFieldsList, item => { + if (key === "sharedType" && item.key === "taxAgentIds") { + return { ...item, display: v === "1", viewAttr: 3 }; + } else if (key === "valueType" && item.key === "formulaContent") { + return { + ...item, + label: v === "2" ? "公式" : v === "3" ? "SQL" : "", + display: v === "2" || v === "3" + }; + } + return { ...item }; + }) + }, () => { + if (key === "valueType") { + onChangeFieldsItem({ formulaContent: "", formulaId: 0, valueType: v }); + } else { + onChangeFieldsItem({ [key]: (key === "useDefault" || key === "useInEmployeeSalary") ? Number(v) : v }); + } + }); + }; + + render() { + const { userStatusList, request, onShowFormal } = this.props; + const { salaryItemFieldsList } = this.state; + return ( + + { + _.map(salaryItemFieldsList, item => { + const { key, label, type, viewAttr, tip, options, display = true, multiple = false } = item; + const value = !_.isNil(request[key]) ? request[key].toString() : ""; + return + { + (type === "INPUT" && display) ? + + key === "formulaContent" && onShowFormal()} + onChange={v => this.handleChangeSalaryFiledItems(key, v)}/> : + (type === "SWITCH" && display) ? + + this.handleChangeSalaryFiledItems(key, v)}/> + : + (type === "SELECT" && display) ? + + this.handleChangeSalaryFiledItems(key, v)}/> + : + (type === "RADIO" && display) ? + + this.handleChangeSalaryFiledItems(key, v)}/> + : + (type === "TEXTAREA" && display) ? + + this.handleChangeSalaryFiledItems(key, v)}/> + : null + } + ; + }) + } + + ); + } +} + +export default SalaryItemForm; diff --git a/pc4mobx/hrmSalary/stores/salaryFile.js b/pc4mobx/hrmSalary/stores/salaryFile.js index 641eb9ab..a0e213c7 100644 --- a/pc4mobx/hrmSalary/stores/salaryFile.js +++ b/pc4mobx/hrmSalary/stores/salaryFile.js @@ -90,10 +90,7 @@ export class salaryFileStore { type === "archive" ? this.archiveStatusList = [{ key: "", showname: "" - }, ...data] : this.userStatusList = [{ - key: "", - showname: "" - }, ...data]; + }, ...data] : this.userStatusList = [...data]; } else { message.error(res.errormsg || "获取失败"); } diff --git a/pc4mobx/hrmSalary/stores/salaryItem.js b/pc4mobx/hrmSalary/stores/salaryItem.js index b5436279..27266845 100644 --- a/pc4mobx/hrmSalary/stores/salaryItem.js +++ b/pc4mobx/hrmSalary/stores/salaryItem.js @@ -30,7 +30,7 @@ export class SalaryItemStore { valueType: 1, dataType: "number", description: "", - sharedType: "", + sharedType: "0", taxAgentIds: "" }; @@ -70,7 +70,7 @@ export class SalaryItemStore { valueType: "1", dataType: "number", description: "", - sharedType: "", + sharedType: "0", taxAgentIds: "" }; @@ -163,18 +163,22 @@ export class SalaryItemStore { //薪资项目-薪资项目详情 @action getItemForm = (id) => { - API.getItemForm({ id }).then(res => { - if (res.status) { - 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 || "获取失败"); - } + return new Promise((resolve, reject) => { + API.getItemForm({ id }).then(res => { + if (res.status) { + let data = res.data; + Object.keys(data).map(key => { + if (!_.isNil(data[key])) { + data[key] = data[key].toString(); + } + }); + this.setRequest(data); + resolve(); + } else { + message.error(res.errormsg || "获取失败"); + reject(); + } + }); }); };