diff --git a/pc4mobx/organization/components/branchNumSetting/components/numberComposition.js b/pc4mobx/organization/components/branchNumSetting/components/numberComposition.js new file mode 100644 index 0000000..9a6479a --- /dev/null +++ b/pc4mobx/organization/components/branchNumSetting/components/numberComposition.js @@ -0,0 +1,348 @@ +/* + * Author: 黎永顺 + * Description: + * Date: 2022-05-17 16:02:56 + * LastEditTime: 2022-05-18 13:46:29 + */ +import React, { Component, Fragment } from "react"; +import { Button, Modal } from "antd"; +import { + WeaTableEdit, + WeaDialog, + WeaMoreButton, + WeaFormItem, + WeaSelect, + WeaInput, +} from "ecCom"; +import Preview from "./preview"; +import { i18n } from "../../../public/i18n"; +import _ from "lodash"; + +const dataSource = [ + { + value: "", + numFieldName: "字符串", + numField: "string", + }, + { value: "3", numFieldName: "流水号位数", numField: "number" }, +]; + +const options = [ + { + key: "string", + showname: "字符串", + }, + { + key: "year", + showname: "当前年份", + }, + { + key: "month", + showname: "当前月份", + }, + { + key: "day", + showname: "当前日期", + }, +]; +class NumberComposition extends Component { + constructor() { + super(); + this.state = { + visible: false, + numField: "string", + numFieldName: "字符串", + dataSource, + }; + } + + /** + * name:复选框禁用 + * param undefined + * return {*} + */ + getRowSelection = (rowSelection) => { + const { dataSource } = this.state; + const hasMonthNum = dataSource.some((item) => item.numField === "month"); + const hasDayNum = dataSource.some((item) => item.numField === "day"); + const sel = { ...rowSelection }; + sel.getCheckboxProps = (record) => { + return { + disabled: + record.numField === "number" || + (hasMonthNum && record.numField === "year") || + (hasDayNum && record.numField === "month"), + }; + }; + return sel; + }; + /** + * name: 字段保存 + * return {*} + */ + handleSave = () => { + const { numField, numFieldName, dataSource } = this.state; + const objWrite = { + value: "", + numFieldName, + numField, + }; + const objView = { + com: { + value: [{ key: numField, label: "", type: "TEXT" }], + }, + [numField]: "", + numFieldName, + numField, + }; + if (numField === "year" || numField === "month" || numField === "day") { + const hasYearOrMonthOrDay = _.some( + dataSource, + (it) => it.numField === numField + ); + const hasYearNum = dataSource.some((item) => item.numField === "year"); + const hasMonthNum = dataSource.some((item) => item.numField === "month"); + if (!hasYearOrMonthOrDay) { + if (numField === "month" && !hasYearNum) { + Modal.warning({ + title: "信息确认", + content: `添加【${numFieldName}】时,请先添加【当前年份】!`, + onOk() {}, + okText: "确认", + }); + return; + } + if (numField === "day" && (!hasYearNum || !hasMonthNum)) { + Modal.warning({ + title: "信息确认", + content: `添加【${numFieldName}】时,请先添加【当前年份】和【当前月份】!`, + onOk() {}, + okText: "确认", + }); + return; + } + this.setState({ + visible: false, + numField: "string", + numFieldName: "字符串", + dataSource: [...dataSource, objView], + }); + } else { + this.showConfirm(); + } + } else { + this.setState({ + visible: false, + numField: "string", + numFieldName: "字符串", + dataSource: [...dataSource, objWrite], + }); + } + }; + /** + * name:年月日字段重复提示 + * return {*} + */ + showConfirm = () => { + const { numFieldName } = this.state; + Modal.warning({ + title: "信息确认", + content: `已经添加过一个${numFieldName},请选择其他编号字段!`, + footer: [], + onOk() {}, + okText: "确认", + }); + }; + /** + * name: 编号字段删除 + * return {*} + */ + handleDeleteTable = (keys, datas) => { + const { dataSource } = this.state; + const stringRow = _.filter(dataSource, (it) => it.numField === "string"); + const yearRow = _.filter(dataSource, (it) => it.numField === "year"); + const monthRow = _.filter(dataSource, (it) => it.numField === "month"); + const dayRow = _.filter(dataSource, (it) => it.numField === "day"); + const disableRow = _.filter(dataSource, (it) => it.numField === "number"); + const tmpV = [ + ...stringRow, + ...yearRow, + ...monthRow, + ...dayRow, + ...disableRow, + ]; + this.setState({ + dataSource: _.filter(tmpV, (it, idx) => !keys.includes(idx)), + }); + }; + + handleChangeInput = (value, index) => { + const { dataSource } = this.state; + const stringRow = _.filter(dataSource, (it) => it.numField === "string"); + const yearRow = _.filter(dataSource, (it) => it.numField === "year"); + const monthRow = _.filter(dataSource, (it) => it.numField === "month"); + const dayRow = _.filter(dataSource, (it) => it.numField === "day"); + const disableRow = _.filter(dataSource, (it) => it.numField === "number"); + const tmpV = _.map( + [...stringRow, ...yearRow, ...monthRow, ...dayRow, ...disableRow], + (it, idx) => ({ ...it, key: idx }) + ); + this.setState({ + dataSource: _.map(tmpV, (it) => { + if (it.key === index) { + return { + ...it, + value, + }; + } + return { ...it }; + }), + }); + }; + + render() { + const { visible, numField, dataSource } = this.state; + const columns = [ + { + title: "", + dataIndex: "numFieldName", + key: "numFieldName", + colSpan: 1, + com: [{ label: "", type: "TEXT" }], + width: "20%", + }, + { + title: "", + useRecord: true, + dataIndex: "custom", + key: "custom", + com: [ + { + type: "custom", + key: "custom", + render: (text, record, index) => { + const { numField } = record; + if ( + numField === "year" || + numField === "month" || + numField === "day" + ) { + return ; + } + return ( + + this.handleChangeInput(value, index, record) + } + /> + ); + }, + }, + ], + // dataIndex: "value", + // key: "value", + // com: [{ label: "", type: "INPUT", viewAttr: 2, key: "value" }], + colSpan: 1, + width: "70%", + }, + ]; + const buttons = [ + , + , + ]; + const stringRow = _.map( + _.filter(dataSource, (it) => it.numField === "string"), + (item, index) => { + return { + ...item, + numFieldName: `${item.numFieldName}${index + 1}`, + }; + } + ); + const yearRow = _.filter(dataSource, (it) => it.numField === "year"); + const monthRow = _.filter(dataSource, (it) => it.numField === "month"); + const dayRow = _.filter(dataSource, (it) => it.numField === "day"); + const disableRow = _.filter(dataSource, (it) => it.numField === "number"); + + return ( + + + this.setState({ + visible: true, + }) + } + onDelete={this.handleDeleteTable} + /> + {/* 预览 */} + + {/* 新增弹框 */} + + this.setState({ + visible: false, + }) + } + icon="icon-coms-hrm" + iconBgcolor="#217346" + title={i18n.label.addNumberField()} + visible={visible} + hasScroll + maxHeight={150} + buttons={buttons}> + + { + this.setState({ numField, numFieldName }); + }} + /> + + + + ); + } +} + +export default NumberComposition; diff --git a/pc4mobx/organization/components/branchNumSetting/components/preview.js b/pc4mobx/organization/components/branchNumSetting/components/preview.js new file mode 100644 index 0000000..506eaf0 --- /dev/null +++ b/pc4mobx/organization/components/branchNumSetting/components/preview.js @@ -0,0 +1,47 @@ +/* + * Author: 黎永顺 + * Description: 编号设置预览 + * Date: 2022-05-18 10:21:09 + * LastEditTime: 2022-05-18 13:26:11 + */ +import React, { Component } from "react"; + +class Preview extends Component { + render() { + const { dataSource } = this.props; + return ( +
+ 预览 +
+ {_.map( + _.map(dataSource, (item) => { + const { numField, numFieldName } = item; + if ( + numField === "year" || + numField === "month" || + numField === "day" + ) { + return { + ...item, + value: numFieldName, + }; + } + return { ...item }; + }), + (it, idx) => { + const { numFieldName, value } = it; + return ( +
+
{numFieldName}
+
{value}
+
+ ); + } + )} +
+
+ ); + } +} + +export default Preview; diff --git a/pc4mobx/organization/components/branchNumSetting/components/startReservedNumberSet.js b/pc4mobx/organization/components/branchNumSetting/components/startReservedNumberSet.js new file mode 100644 index 0000000..b5cd812 --- /dev/null +++ b/pc4mobx/organization/components/branchNumSetting/components/startReservedNumberSet.js @@ -0,0 +1,31 @@ +/* + * Author: 黎永顺 + * Description: 起始编号及预留编号设置 + * Date: 2022-05-17 15:51:41 + * LastEditTime: 2022-05-17 16:01:33 + */ +import React, { Component, Fragment } from "react"; +import { WeaFormItem } from "ecCom"; + +class StartReservedNumberSet extends Component { + render() { + return ( + + + + + + + + + ); + } +} + +export default StartReservedNumberSet; diff --git a/pc4mobx/organization/components/branchNumSetting/index.js b/pc4mobx/organization/components/branchNumSetting/index.js new file mode 100644 index 0000000..6f3aa56 --- /dev/null +++ b/pc4mobx/organization/components/branchNumSetting/index.js @@ -0,0 +1,94 @@ +/* + * Author: 黎永顺 + * Description: 分部编号设置 + * Date: 2022-05-17 14:30:57 + * LastEditTime: 2022-05-17 17:18:36 + */ +import React, { Component } from "react"; +import { Button } from "antd"; +import { WeaTop, WeaFormItem, WeaCheckbox, WeaSearchGroup } from "ecCom"; +import StartReservedNumberSet from "./components/startReservedNumberSet"; +import NumberComposition from "./components/numberComposition"; +import { i18n } from "../../public/i18n"; +import "./index.less"; + +const btns = []; +const dropMenuDatas = [ + { + key: "save", + disabled: false, + icon: , + content: "保存", + onClick: (key) => alert(`点击了搜索 key = ${key}`), + }, +]; +export default class BranchNumSetting extends Component { + constructor() { + super(); + this.state = { + checkVal: "0", + }; + } + + componentDidMount() {} + + /** + * name:提示文本 + * return {*} + */ + helpContent = () => { + return ( +
+

开启后,可根据设置的分部编号规则自动生成分部编号,涉及场景如下:

+

1.手动新建和手动编辑分部时可选择重新生成编号和选择预留分部编号;

+

2.组织结构导入-添加新分部且分部编号列为空时,会自动生成分部编号;

+

3.导入人员-添加时,新创建的分部可自动生成分部编号;

+

【注意】开启前请先确认分部编号字段已启用!

+
+ ); + }; + + render() { + const { checkVal } = this.state; + return ( +
+ } + iconBgcolor="#217346" + buttons={btns} + showDropIcon={true} + dropMenuDatas={dropMenuDatas} + /> +
+
+ + this.setState({ checkVal })} + /> + +
+ {/* 内容区 */} +
+ + + +
+
+ + + +
+
+
+ ); + } +} diff --git a/pc4mobx/organization/components/branchNumSetting/index.less b/pc4mobx/organization/components/branchNumSetting/index.less new file mode 100644 index 0000000..7ae8a45 --- /dev/null +++ b/pc4mobx/organization/components/branchNumSetting/index.less @@ -0,0 +1,69 @@ +.branch-wapper { + height: 100%; + display: flex; + flex-direction: column; + + .branch-content { + flex: 1; + overflow: hidden auto; + + .switch-wrapper { + width: 100%; + padding: 20px 20% 40px 30%; + } + + .numberComposition .ant-table-thead { + background: #f7fbfe; + } + + .numberComposition { + .preview { + margin-top: 20px; + padding-left: 5%; + overflow-x: auto; + width: 100%; + white-space: nowrap; + display: flex; + align-items: center; + + .content { + vertical-align: middle; + margin-left: 30px; + white-space: nowrap; + + .item { + display: inline-block; + text-align: center; + + &>div { + border: 1px solid #0070c0; + margin-left: -1px; + min-width: 100px; + max-width: 200px; + line-height: 30px; + height: 30px; + white-space: nowrap; + overflow: hidden; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; + color: #0070c0; + } + + &>div:last-child { + margin-top: -1px; + color: #c63; + } + } + } + } + } + + .startReservedNumberSet { + .icon-coms-Flow-setting { + font-size: 16px; + cursor: pointer; + line-height: 30px; + } + } + } +} \ No newline at end of file diff --git a/pc4mobx/organization/index.js b/pc4mobx/organization/index.js index a89f3ba..64319ae 100644 --- a/pc4mobx/organization/index.js +++ b/pc4mobx/organization/index.js @@ -10,6 +10,7 @@ import Sequence from "./components/sequence/Sequence"; import Group from "./components/group/Group"; import OfficeManage from "./components/office/officeManage"; import CompanyExtend from "./components/company/CompanyExtend" +import BranchNumSetting from "./components/branchNumSetting" import stores from "./stores"; import "./style/index"; @@ -41,6 +42,7 @@ const Routes = ( + ); diff --git a/pc4mobx/organization/public/i18n.js b/pc4mobx/organization/public/i18n.js index 44a3246..8b8dcc0 100644 --- a/pc4mobx/organization/public/i18n.js +++ b/pc4mobx/organization/public/i18n.js @@ -128,6 +128,7 @@ export const i18n = { newOfficeName: () => getLabel(386246, '新建职务信息'), editOfficeName: () => getLabel(386247, '编辑职务信息'), newOfficeClassifyName: () => getLabel(386246, '新建职务分类信息'), + branchNumSetting: () => getLabel(386246, '分部编号设置'),