/** * @description 行按钮设置 */ import { PopModal, Table, StateManage, ColorPicker, Input, Select, Row, Col, PopMessage, Utils } from "../../../../" import React from "react" import { RiDragMove2Fill } from "react-icons/ri" export const RowButtonSetting = function (params: { onOk, config: { rowButton, align?, width?} }) { const { onOk, config: { rowButton = [], align = "left", width = "140px" } } = params const addButton = ({ text }) => { const dataSource = StateManage.get(state, "dataSource") dataSource.push({ text, $$rowKey: Utils.uuid(), color: "#1890ff" }) StateManage.set(state, { dataSource }) } const updateRecordAttr = ({ record, key, value }) => { const dataSource = StateManage.get(state, "dataSource") dataSource.forEach(item => { if (item["$$rowKey"] === record["$$rowKey"]) { item[key] = value } }) StateManage.set(state, { dataSource }) } const tableProps = { bordered: false, rowKey: "$$rowKey", dataSource: rowButton.map(item => { return { ...item, $$rowKey: Utils.uuid() } }), columns: [ { title: "排序", width: "56px", align: "center", render: (text, record, index) => { return { ev.dataTransfer.setData("sort_table_rowButton", JSON.stringify(record)) }} onDragOver={(ev) => ev.preventDefault()} onDrop={ev => { let data = ev.dataTransfer.getData("sort_table_rowButton") data = JSON.parse(data) let { dataSource } = StateManage.get(state) const dragIndex = dataSource.findIndex(item => item["$$rowKey"] === data["$$rowKey"]) dataSource = dataSource.filter(item => item["$$rowKey"] !== data["$$rowKey"]) dataSource.splice(dragIndex >= index ? index + 1 : index, 0, data) StateManage.set(state, { dataSource }) }} style={{ cursor: "move", padding: "0px 8px" }} > } }, { title: "按钮文字", dataIndex: "text", render: (text, record) => { return { updateRecordAttr({ record, key: "text", value }) }} /> } }, { title: "按钮颜色", show: false, dataIndex: "color", render: (text, record) => { return { updateRecordAttr({ record, key: "color", value }) }} /> } }, { title: "按钮事件", dataIndex: "{{onClick}}", render: (text, record) => { if (record.btnCode === "ROW_DELETE_BUTTON") return null return { }} /> } }, { title: "按钮图标", show: false, dataIndex: "icon" }, { title: "关联显示", dataIndex: "isRender", render: (text, record) => { return { }} /> } } ], header: { show: true, title: { span: 14, content: " " }, headerButton: { span: 10, button: [ { text: "修改", onClick: () => addButton({ text: "修改" }) }, { text: "详情", onClick: () => addButton({ text: "详情" }) }, { text: "删除", onClick: () => addButton({ text: "删除" }) }, { text: "自定义", onClick: () => addButton({ text: "自定义" }) } ] } }, buttonConfig: { width: "80px", rowButton: [ { text: "删除", btnCode: "ROW_DELETE_BUTTON", onClick: ({ record }) => { let dataSource = StateManage.get(state, "dataSource") dataSource = dataSource.filter(data => data["$$rowKey"] != record["$$rowKey"]) StateManage.set(state, { dataSource }) } } ] } } const [state, Tpl] = Table(tableProps as any, false) const [widthState, WidthTpl] = Input({ label: "列宽度", layout: { labelCol: { span: 6 } }, placeholder: "如: 140px", value: width }, false) const [alignState, AlignTpl] = Select({ label: "对齐方式", value: align, layout: { labelCol: { span: 6 } }, dataSource: [ { key: "left", label: "左对齐" }, { key: "right", label: "右对齐" }, { key: "center", label: "居中" }, ] }, false) PopModal({ title: "设置表格行按钮", allowFullScreen: false, width: "800px", top: "20px", height: "400px", content:
, onOk: ({ }, modalState) => { const { dataSource } = StateManage.get(state) const rowButton = dataSource.map(item => { const newItem = {} Object.keys(item).forEach(key => { if (key !== "$$rowKey") { newItem[key] = item[key] } }) return newItem }) onOk && onOk({ config: { rowButton, align: StateManage.get(alignState, "value"), width: StateManage.get(widthState, "value") } }) StateManage.set(modalState, { visible: false }) } }) }