From 6b3f35374c12fb8abb4e65b16e41f87bd4991897 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=8E=E6=B0=B8=E9=A1=BA?= <971387674@qq.com> Date: Thu, 10 Nov 2022 16:10:21 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A0=8F=E7=9B=AE=E6=9D=83=E9=99=90=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E8=87=AA=E5=AE=9A=E4=B9=89=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pc4mobx/organization/apis/columnPermission.js | 7 + .../columnPermission/components/customItem.js | 31 ++ .../components/permissionItem.js | 5 +- .../components/columnPermission/index.js | 28 +- .../components/featureDefine/index.js | 54 -- pc4mobx/organization/index.js | 2 - pc4mobx/organization/public/i18n.js | 1 + .../organization/stores/columnPermission.js | 473 +++++++++++++++++- 8 files changed, 516 insertions(+), 85 deletions(-) create mode 100644 pc4mobx/organization/components/columnPermission/components/customItem.js delete mode 100644 pc4mobx/organization/components/featureDefine/index.js diff --git a/pc4mobx/organization/apis/columnPermission.js b/pc4mobx/organization/apis/columnPermission.js index 6cde520..be9b5dd 100644 --- a/pc4mobx/organization/apis/columnPermission.js +++ b/pc4mobx/organization/apis/columnPermission.js @@ -15,3 +15,10 @@ export const getTable = (params) => { export const cardAccessSave = (params) => { return WeaTools.callApi('/api/bs/hrmorganization/cardAccess/save', 'POST', params); } +export const getFieldDefinedInfo = (params) => { + return WeaTools.callApi('/api/hrm/subcompanyfielddefined/getFieldDefinedInfo', 'GET', {is_multilang_set: true,groupId:6}); +} +export const saveFieldDefinedInfo = (params) => { + return WeaTools.callApi('', 'POST', params); +} + diff --git a/pc4mobx/organization/components/columnPermission/components/customItem.js b/pc4mobx/organization/components/columnPermission/components/customItem.js new file mode 100644 index 0000000..a89510a --- /dev/null +++ b/pc4mobx/organization/components/columnPermission/components/customItem.js @@ -0,0 +1,31 @@ +import React, { Component } from "react"; +import { WeaTableEdit } from "ecCom"; +import { inject, observer } from "mobx-react"; + +@inject("columnPermission") +@observer +class CustomItem extends Component { + componentDidMount() { + this.init(); + } + + init = () => { + const { columnPermission } = this.props; + columnPermission.loadTabThreeRelatedData(); + }; + + render() { + const { columnPermission } = this.props, { tableEditConfig, refreshMainTabComponent } = columnPermission; + return ( +
+ +
+ ); + } +} + +export default CustomItem; diff --git a/pc4mobx/organization/components/columnPermission/components/permissionItem.js b/pc4mobx/organization/components/columnPermission/components/permissionItem.js index 2aa62ab..a2d3687 100644 --- a/pc4mobx/organization/components/columnPermission/components/permissionItem.js +++ b/pc4mobx/organization/components/columnPermission/components/permissionItem.js @@ -47,14 +47,17 @@ class PermissionItem extends Component { }; } else if (c.dataIndex === "custom") { c.render = (text, record) => { + const custom = record[c.dataIndex].split(","); + const customspan = record[`${c.dataIndex}span`].split(","); + const replaceDatas = _.map(custom, (item, index) => ({ id: custom[index], name: customspan[index] })); return ( { this.changeSaveParams(record, value, c.dataIndex); }} diff --git a/pc4mobx/organization/components/columnPermission/index.js b/pc4mobx/organization/components/columnPermission/index.js index 6646008..a11e828 100644 --- a/pc4mobx/organization/components/columnPermission/index.js +++ b/pc4mobx/organization/components/columnPermission/index.js @@ -4,6 +4,7 @@ import { inject, observer } from "mobx-react"; import { Button } from "antd"; import PermissionItem from "./components/permissionItem"; import DefineShowItems from "./components/defineShowItems"; +import CustomItem from "./components/customItem"; import { i18n } from "../../public/i18n"; import { renderNoright } from "../../util"; @@ -36,16 +37,22 @@ class ColumnPermission extends Component { getTabName = () => { return [{ key: "0", - title: i18n.label.permissionManagement() + title: i18n.label.defineShowItems() }, { key: "1", - title: i18n.label.defineShowItems() + title: i18n.label.permissionManagement() + }, { + key: "2", + title: i18n.label.custom() }]; }; save = () => { const { columnPermission } = this.props; const { selectedKey } = columnPermission; - selectedKey === "0" ? columnPermission.columnPermissionSave() : columnPermission.userDefineCardItemSave(); + selectedKey === "0" ? + columnPermission.userDefineCardItemSave() : + selectedKey === "1" ? + columnPermission.columnPermissionSave() : columnPermission.saveCustomFiled(); }; render() { @@ -58,8 +65,12 @@ class ColumnPermission extends Component {
console.log(key)} + datas={[{ + key: "save", + icon: , + content: "保存" + }]} + onClick={key => (key && this[key]())} > { selectedKey === "0" ? - : - + : + selectedKey === "1" ? + : + }
diff --git a/pc4mobx/organization/components/featureDefine/index.js b/pc4mobx/organization/components/featureDefine/index.js deleted file mode 100644 index ac0ce02..0000000 --- a/pc4mobx/organization/components/featureDefine/index.js +++ /dev/null @@ -1,54 +0,0 @@ -import React, { Component } from "react"; -import { WeaRightMenu, WeaTop } from "ecCom"; -import { Button } from "antd"; -import { i18n } from "../../public/i18n"; - -class FeatureDefine extends Component { - getTopMenuBtns = () => { - return [ - , - - ]; - }; - getDropMenuDatas = () => { - return [ - { - key: "add", - icon: , - content: "新建" - }, - { - key: "edit", - icon: , - content: "修改", - onClick: key => alert(`点击了搜索 key = ${key}`) - } - ]; - }; - - render() { - return ( -
- console.log(key)} - > - } - iconBgcolor="#217346" - loading={true} - buttons={this.getTopMenuBtns()} - showDropIcon={true} - dropMenuDatas={this.getDropMenuDatas()} - onDropMenuClick={(e) => console.log(e)} - /> - -
- ); - } -} - -export default FeatureDefine; diff --git a/pc4mobx/organization/index.js b/pc4mobx/organization/index.js index 61dc0d7..31074d1 100644 --- a/pc4mobx/organization/index.js +++ b/pc4mobx/organization/index.js @@ -34,7 +34,6 @@ import ResourceBasicInfo from "./components/resource/ResourceBasicInfo"; import ResourceCard from "./components/resource/ResourceCard"; import ManagerDetach from "./components/detach/ManagerDetach"; import ColumnPermission from "./components/columnPermission"; -import FeatureDefine from "./components/featureDefine"; import stores from "./stores"; import "./style/index"; @@ -101,7 +100,6 @@ const Routes = ( - ); diff --git a/pc4mobx/organization/public/i18n.js b/pc4mobx/organization/public/i18n.js index d919584..c2affda 100644 --- a/pc4mobx/organization/public/i18n.js +++ b/pc4mobx/organization/public/i18n.js @@ -566,6 +566,7 @@ export const i18n = { sysShowItems: () => getLabel(32980, '系统显示栏目'), permissionManagement: () => getLabel(32980, '权限管理'), defineShowItems: () => getLabel(32744, '自定义显示栏目'), + custom: () => getLabel(32743, '自定义'), childItems: () => getLabel(32749, '子栏目'), sysadminRemind: () => getLabel(386231, '管理员提醒'), staffRemind: () => getLabel(386232, '员工提醒'), diff --git a/pc4mobx/organization/stores/columnPermission.js b/pc4mobx/organization/stores/columnPermission.js index d5b52c4..59c8fed 100644 --- a/pc4mobx/organization/stores/columnPermission.js +++ b/pc4mobx/organization/stores/columnPermission.js @@ -1,17 +1,182 @@ import * as mobx from "mobx"; import { action, computed, extendObservable, observable } from "mobx"; +import HrmBaseStore from "./baseStore"; import { WeaTableNew } from "comsMobx"; import { message } from "antd"; -import { WeaHelpfulTip } from "ecCom"; -import { isEmpty } from "lodash"; +import { WeaHelpfulTip, WeaInputLocale } from "ecCom"; +import { cloneDeep, has, indexOf, isEmpty, remove, uniq } from "lodash"; import { i18n } from "../public/i18n"; import * as Api from "../apis/columnPermission"; +import { validDBKeys } from "../util"; +const getCurrentLabel = WeaInputLocale.getCurrentLabel; const { TableStore } = WeaTableNew; const toJS = mobx.toJS; -export class ColumnPermission { +export class ColumnPermission extends HrmBaseStore { + isDBKeyValid = true; + getColumns = () => { + return cloneDeep(this.fieldDefColumns()); + }; + fieldDefColumns = () => { + const columns = [{ + title: i18n.label.fieldLabel(), //列名 + dataIndex: "fieldlabel", //列的id 对应数据 + key: "fieldlabel", //前端渲染key值 + useRecord: true, + colSpan: 1, + width: "15%", + com: [{ + label: "", + type: "INPUT", + key: "fieldlabel", + viewAttr: "3", + otherParams: { + ...window.inputType + } + }] + }, { + title: i18n.label.fieldName(), + dataIndex: "fieldname", + key: "fieldname", + useRecord: true, + colSpan: 1, + width: "15%", + com: [{ + label: "", + type: "INPUT", + key: "fieldname", + viewAttr: "1", + otherParams: { + length: 25, + regExp: /^[a-zA-Z][a-zA-Z0-9]*$/, + filter: (val) => { + const { + isValid, + value + } = validDBKeys(val); + this.isDBKeyValid = isValid; + return value; + } + } + }] + }, { + title: i18n.label.fieldType(), + dataIndex: "fieldType", + key: "fieldType", + useRecord: true, + colSpan: 1, + width: "45%", + com: [{ + label: "", + type: "CUSTOMFIELD", + key: "fieldType", + viewAttr: "3", + options: ["peculiar"], + otherParams: { + customProps: { + "input.text": { + viewAttr: 3 + }, + "textarea": { + parent: { + type: "div", + style: { + display: "none" + } + }, + style: { + display: "none" + } + }, + "textarea.*": { + parent: { + type: "div", + style: { + display: "none" + } + }, + style: { + display: "none" + } + }, + "textarea.*.*": { + style: { + display: "none" + } + }, + "select": { + options: [{ + key: "select", + selected: true, + showname: i18n.label.selectComponent() + }] + }, + "upload": { + options: [{ + key: "file", + selected: true, + showname: i18n.label.uploadFile() + }] + } + } + } + }] + }, { + title: i18n.label.enable(), + dataIndex: "enable", + key: "enable", + checkType: "checkbox", + colSpan: 1, + width: "7%" + }, { + title: i18n.label.required(), + dataIndex: "required", + key: "required", + checkType: "checkbox", + colSpan: 1, + width: "8%" + }]; + + //人员卡片字段定义-添加【允许个人修改】列 + if (this.moduleName === "resourcefielddefined") { + columns.push({ + title: getLabel(510359, "允许个人修改"), + dataIndex: "isModify", + key: "isModify", + checkType: "checkbox", + colSpan: 1, + width: "11%" + }); + } + // this.encryptEnable && columns.push({ + // title: getLabel('526997', '加密设置'), + // dataIndex: 'canEncrypt', + // key: 'canEncrypt', + // com: [ + // { + // type: 'custom', + // key: 'custom', + // render: (text, record, index, onEdit) => { + // const { canEncrypt } = record; + // if (canEncrypt == '1') + // return ( + // this.onEncryptHandle(record)}>{getLabel('526997', '加密设置')} + // ) + // return null; + // } + // } + // ], + // colSpan: 1, + // width: '8%' + // }); + return columns; + }; + @observable refreshMainTabComponent = new Date().getTime(); + @observable refreshFeildDef = new Date().getTime(); //当需要刷新主页面tab时,变更此值 + @observable refreshForm = new Date().getTime(); + @observable refreshEditGroupTabComponent = new Date().getTime(); //当需要刷新权限组编辑tab时,变更此值 @observable tableStore = new TableStore(); @observable columnsPermissionData = []; @observable selectedKey = "0"; @@ -58,6 +223,175 @@ export class ColumnPermission { }); } + @action + onFieldDefChange = (datas) => { + let selectedData = { + enable: [], + required: [] + }; + if (this.moduleName === "resourcefielddefined") { + Object.assign(selectedData, { + isModify: [] + }); + } + datas.map((data, index) => { + if (data["enable"] === "1") + selectedData.enable.push(index); + if (data["required"] === "1") + selectedData.required.push(index); + if (data["isModify"] && data["isModify"] === "1" && this.moduleName === "resourcefielddefined") { + selectedData.isModify.push(index); + } + }); + this.tableEditConfig.fieldDef.datas = datas; + this.tableEditConfig.fieldDef.selectedData = selectedData; + this._feildDefSaveable = datas.length === 0; + if (datas.length === 0) { + // this.initData(); + } else + this.refreshFeildDef = new Date().getTime(); + }; + @action + onFieldDefRowSelect = (sRowKeys, rows, dataIndex, selectedDatas) => { + if (dataIndex == null) { + this.feildDefTableSelectedRows = sRowKeys; + this.tableEditConfig.fieldDef.selectedRowKeys = sRowKeys; + } else { + if (selectedDatas != null && selectedDatas.hasOwnProperty(dataIndex)) { + const arr = selectedDatas[dataIndex]; + this.tableEditConfig.fieldDef.datas.map((data, index) => { + if (dataIndex === "enable") { + data[dataIndex] = indexOf(arr, index) >= 0 ? "1" : "0"; + if (data[dataIndex] === "0") { + data["required"] = "0"; + remove(selectedDatas["required"], v => v === index); + data["isModify"] = "0"; + remove(selectedDatas["isModify"], v => v === index); + } + } else if (dataIndex === "required") { + data[dataIndex] = indexOf(arr, index) >= 0 ? "1" : "0"; + if (data[dataIndex] === "1") { + data["enable"] = "1"; + if (selectedDatas["enable"].indexOf(index) < 0) + selectedDatas["enable"].push(index); + } + } else if (dataIndex === "isModify") { + data[dataIndex] = indexOf(arr, index) >= 0 ? "1" : "0"; + if (data[dataIndex] === "1") { + data["enable"] = "1"; + if (selectedDatas["enable"].indexOf(index) < 0) + selectedDatas["enable"].push(index); + } + + } else + data[dataIndex] = indexOf(arr, index) >= 0 ? "1" : "0"; + }); + + this.tableEditConfig.fieldDef.selectedData = selectedDatas; + } + } + this.processLinkage(selectedDatas); + this.refreshFeildDef = new Date().getTime(); + }; + processLinkage = (selectedDatas) => { + const { datas } = this.tableEditConfig.fieldDef; + + const target = datas.find(data => data.fieldname === "accounttype"); + + if (!target) return; + + const accounttype = target.isModify; + + const belongto = datas.find(data => data.fieldname === "belongto").isModify; + + if (belongto !== accounttype) { + datas.find(data => data.fieldname === "belongto").isModify = accounttype; + + const belongtoIndex = datas.findIndex(data => data.fieldname === "belongto"); + + if (accounttype === "1") { + selectedDatas["isModify"].push(belongtoIndex); + } else { + remove(selectedDatas["isModify"], v => v === belongtoIndex); + } + } + + }; + @action + onFieldDefRowSelection = (rowSelection) => { + let sel = { + ...rowSelection + }; + sel.getCheckboxProps = (record) => { + let disabled = false; + switch (this.dropdownSelectedKey) { + case "2": + disabled = false;//复制时,checkbox全部启用 + break; + case "3": + disabled = record.id == null || record.checkProps.enable.viewAttr === 1;//移动到组时,checkbox根据id是否为空或是否引用启用按钮状态赋值 + break; + default: + disabled = record.viewAttr === 1;//删除时,checkbox根据record.viewAttr赋值 + break; + } + return { + disabled + }; + }; + return sel; + }; + @action + onFieldDefDeleteOpr = (ks, ds) => { + let ids = []; + ds.map(d => { + if (has(d, "id")) + ids.push(d.id); + }); + let params = { + id: ids.join(",") + }; + if (this.selectedTreeNodeInfo != null) + params.groupType = this.selectedTreeNodeInfo.key; + params.groupId = this.activeTabInfo.tabInfo.groupid; + if (ids.length > 0) { + api.removeFieldDefinedInfo(this.moduleName, params).then(data => { + if (data.status === "1") { + // this.initData(); + this.tableEditConfig.fieldDef.selectedRowKeys.length = 0; + message.success(i18n.message.deleteSuccess()); + } else + message.error(data.message); + }, error => { + + }); + } else { + this.tableEditConfig.fieldDef.selectedRowKeys.length = 0; + } + + this.feildDefTableSelectedRows.length = 0; + }; + tableEditConfig = { + fieldDef: { + showTitle: true, + draggable: true, + deleteConfirm: true, + showAdd: true, + showDelete: true, + showCopy: true, + columns: this.getColumns(), + copyFilterProps: ["id", "fieldlabel", "fieldname", "com.fieldname", "com.fieldlabel"], + datas: [], + selectedData: {}, + onChange: this.onFieldDefChange, + onRowSelect: this.onFieldDefRowSelect, + getRowSelection: this.onFieldDefRowSelection + // onDelete: this.onFieldDefDeleteOpr + // onEdit: this.onEdit, + // onAdd: this.onAdd + } + }; + loadTabOneRelatedData() { this.tabOneRelatedData.loading = true; Promise.all( @@ -144,26 +478,34 @@ export class ColumnPermission { }); } + loadTabThreeRelatedData() { + Promise.all( + [ + Api.getFieldDefinedInfo() + ] + ).then(([{ data, status, message }]) => { + if (status === "1") { + const { datas, selectedData } = this.convertData(data, "fieldDef"); + this.tableEditConfig.fieldDef.datas = datas; + this.tableEditConfig.fieldDef.columns = this.getColumns(); + this.tableEditConfig.fieldDef.selectedData = selectedData; + this.refreshMainTabComponent = new Date().getTime(); + } else + message.error(message); + }); + } + columnPermissionSave() { let params = { ...toJS(this.checkedItems) }; - Api.cardAccessSave(params).then(res => { - console.log(res); - // let { - // api_status, - // sign - // } = res; - // - // if (api_status) { - // if (sign == "1") { - // res.message && message.success(res.message); - // } else { - // res.message && message.warning(res.message); - // } - // } else { - // message.error(res.message); - // } + Api.cardAccessSave(params).then(({ code, msg }) => { + if (code === 200) { + this.loadTabOneRelatedData(); + message.success(msg || "操作成功"); + } else { + message.error(msg || "操作失败"); + } }).catch(error => { message.error(error); }); @@ -193,9 +535,76 @@ export class ColumnPermission { }); } + saveCustomFiled = () => { + let data = cloneDeep(this.tableEditConfig.fieldDef.datas), + labelArr = [], + nameArr = []; + if (!this.isDBKeyValid) return; + const invalidEmpty = data.some((d, index) => { + d.key = index; + delete d.com; + delete d.checkProps; + delete d.viewAttr; + if (has(d, "fieldTypeObj")) { + if (Array.isArray(d.fieldTypeObj) && d.fieldTypeObj.length > 0 && d.fieldTypeObj[0] != "select") + d.fieldType = d.fieldTypeObj; + delete d.fieldTypeObj; + } + if (!Array.isArray(d.fieldType)) + delete d.fieldType; + + if (!has(d, "enable")) + d.enable = "0"; + if (!has(d, "required")) + d.required = "0"; + + let fieldlabel = d.fieldlabel || "", + fieldname = d.fieldname || ""; + if (fieldlabel === "" || (this.moduleName != "resourcefielddefined" && fieldname === "")) { + return true; + } + labelArr.push(getCurrentLabel(d.fieldlabel)); + nameArr.push(d.fieldname); + return false; + }); + let checkSame = false; + if (this.moduleName.indexOf("resource") >= 0) + checkSame = uniq(labelArr).length === data.length; + else + checkSame = uniq(labelArr).length === data.length && uniq(nameArr).length === data.length; + if (invalidEmpty) { + + } else if (checkSame) { + let dataObj = { + groupId: this.activeTabInfo.tabInfo.groupid, + records: data + }; + if (this.selectedTreeNodeInfo != null) + dataObj.groupType = this.selectedTreeNodeInfo.key; + let params = { + data: JSON.stringify(dataObj) + }; + if (this.selectedTreeNodeInfo != null) + params.groupType = this.selectedTreeNodeInfo.key; + + console.log('params',params); + Api.saveFieldDefinedInfo(params).then(data => { + if (data.status === "1") { + + } else { + message.error(data.message); + } + }, error => { + }); + } else { + message.error(i18n.confirm.displayOrDBFieldExist()); + this.spinning = false; + } + }; + arrColumnsToJson(arr, rows) { let jsonColumn = { - rownum:arr.length + rownum: arr.length }; arr.map((item, index) => { for (let key in item) { @@ -205,6 +614,30 @@ export class ColumnPermission { return jsonColumn; } + setTableEditDatas(e) { + e.map(item => { + for (let key in item) { + if (key == "undefined") { + delete item[key]; + } + if (!item["isused"]) { + item["isused"] = ""; + } + } + }); + extendObservable(this.tabTwoRelatedData, { + datas: e + }); + } + + setEnableRows(e) { + extendObservable(this.tabTwoRelatedData, { + selectedData: { + isused: e + } + }); + } + arrToJson(arr, rows) { let json = {};