@hw-component/table 1.2.5 → 1.2.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,126 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var _Object$keys = require('@babel/runtime-corejs3/core-js/object/keys');
6
+ var _Object$getOwnPropertySymbols = require('@babel/runtime-corejs3/core-js/object/get-own-property-symbols');
7
+ var _filterInstanceProperty = require('@babel/runtime-corejs3/core-js/instance/filter');
8
+ var _Object$getOwnPropertyDescriptor = require('@babel/runtime-corejs3/core-js/object/get-own-property-descriptor');
9
+ var _forEachInstanceProperty = require('@babel/runtime-corejs3/core-js/instance/for-each');
10
+ var _Object$getOwnPropertyDescriptors = require('@babel/runtime-corejs3/core-js/object/get-own-property-descriptors');
11
+ var _Object$defineProperties = require('@babel/runtime-corejs3/core-js/object/define-properties');
12
+ var _Object$defineProperty = require('@babel/runtime-corejs3/core-js/object/define-property');
13
+ var _Symbol$toPrimitive = require('@babel/runtime-corejs3/core-js/symbol/to-primitive');
14
+ var _typeof = require('@babel/runtime-corejs3/helpers/typeof');
15
+ var _objectWithoutProperties = require('@babel/runtime-corejs3/helpers/objectWithoutProperties');
16
+ var _defineProperty = require('@babel/runtime-corejs3/helpers/defineProperty');
17
+ require('core-js/modules/es.number.constructor.js');
18
+ require('core-js/modules/es.object.to-string.js');
19
+ require('core-js/modules/es.regexp.to-string.js');
20
+ var _sliceInstanceProperty = require('@babel/runtime-corejs3/core-js/instance/slice');
21
+ var _mapInstanceProperty = require('@babel/runtime-corejs3/core-js/instance/map');
22
+ var jsxRuntime = require('react/jsx-runtime');
23
+ var antd = require('antd');
24
+ var React = require('react');
25
+
26
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
27
+ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[_Symbol$toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
28
+ function ownKeys(e, r) { var t = _Object$keys(e); if (_Object$getOwnPropertySymbols) { var o = _Object$getOwnPropertySymbols(e); r && (o = _filterInstanceProperty(o).call(o, function (r) { return _Object$getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
29
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var _context2, _context3; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? _forEachInstanceProperty(_context2 = ownKeys(Object(t), !0)).call(_context2, function (r) { _defineProperty(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(e, _Object$getOwnPropertyDescriptors(t)) : _forEachInstanceProperty(_context3 = ownKeys(Object(t))).call(_context3, function (r) { _Object$defineProperty(e, r, _Object$getOwnPropertyDescriptor(t, r)); }); } return e; }
30
+ var getTooltipProps = function getTooltipProps(title, tooltip) {
31
+ if (!tooltip) {
32
+ return {
33
+ title: null
34
+ };
35
+ }
36
+ if (tooltip === true) {
37
+ return {
38
+ title: title
39
+ };
40
+ }
41
+ return _objectSpread(_objectSpread({}, tooltip), {}, {
42
+ title: title
43
+ });
44
+ };
45
+ var TagsComponent = function TagsComponent(props) {
46
+ var data = props.data,
47
+ closable = props.closable,
48
+ _onClose = props.onClose,
49
+ color = props.color,
50
+ icon = props.icon,
51
+ _props$fieldNames = props.fieldNames,
52
+ fieldNames = _props$fieldNames === void 0 ? {} : _props$fieldNames,
53
+ tooltip = props.tooltip,
54
+ tableInstance = props.tableInstance,
55
+ maxLen = props.maxLen;
56
+ var _fieldNames$label = fieldNames.label,
57
+ label = _fieldNames$label === void 0 ? "label" : _fieldNames$label,
58
+ _fieldNames$value = fieldNames.value,
59
+ value = _fieldNames$value === void 0 ? "value" : _fieldNames$value;
60
+ var _useMemo = React.useMemo(function () {
61
+ if (!maxLen || !data) {
62
+ return {
63
+ tagData: data
64
+ };
65
+ }
66
+ var tagData = _sliceInstanceProperty(data).call(data, 0, maxLen);
67
+ var moreTag = _sliceInstanceProperty(data).call(data, maxLen);
68
+ return {
69
+ tagData: tagData,
70
+ moreTag: moreTag
71
+ };
72
+ }, [data, maxLen]),
73
+ tagData = _useMemo.tagData,
74
+ moreTag = _useMemo.moreTag;
75
+ var moreLen = moreTag === null || moreTag === void 0 ? void 0 : moreTag.length;
76
+ return jsxRuntime.jsxs(antd.Row, {
77
+ gutter: [8, 8],
78
+ children: [tagData === null || tagData === void 0 ? void 0 : _mapInstanceProperty(tagData).call(tagData, function (tagItem, index) {
79
+ var _context;
80
+ var tagProps = {
81
+ closable: closable,
82
+ onClose: _onClose,
83
+ color: color,
84
+ icon: icon
85
+ };
86
+ var indexKey = index.toString();
87
+ if (typeof tagItem === "string") {
88
+ var _tooltipProps = getTooltipProps(tagItem, tooltip);
89
+ return jsxRuntime.jsx(antd.Tooltip, _objectSpread(_objectSpread({}, _tooltipProps), {}, {
90
+ children: jsxRuntime.jsx(antd.Tag, _objectSpread(_objectSpread({}, tagProps), {}, {
91
+ onClose: function onClose(e) {
92
+ e.preventDefault();
93
+ _onClose === null || _onClose === void 0 || _onClose(indexKey, tableInstance);
94
+ },
95
+ children: tagItem
96
+ }), indexKey)
97
+ }));
98
+ }
99
+ var tagLabel = tagItem[label],
100
+ tagValue = tagItem[value],
101
+ props = _objectWithoutProperties(tagItem, _mapInstanceProperty(_context = [label, value]).call(_context, _toPropertyKey));
102
+ var tooltipProps = getTooltipProps(tagLabel, tooltip);
103
+ var cuTagProps = _objectSpread(_objectSpread({}, tagProps), props);
104
+ var cuKey = tagValue || indexKey;
105
+ return jsxRuntime.jsx(antd.Tooltip, _objectSpread(_objectSpread({}, tooltipProps), {}, {
106
+ children: jsxRuntime.jsx(antd.Tag, _objectSpread(_objectSpread({}, cuTagProps), {}, {
107
+ onClose: function onClose(e) {
108
+ e.preventDefault();
109
+ cuTagProps === null || cuTagProps === void 0 || cuTagProps.onClose(cuKey, tableInstance);
110
+ },
111
+ children: tagLabel
112
+ }), cuKey)
113
+ }));
114
+ }), !moreLen ? null : jsxRuntime.jsx(antd.Popover, {
115
+ content: jsxRuntime.jsx(TagsComponent, _objectSpread(_objectSpread({}, props), {}, {
116
+ maxLen: null
117
+ })),
118
+ children: jsxRuntime.jsxs(antd.Tag, {
119
+ children: ["...\u7B49", data.length, "\u4E2A"]
120
+ })
121
+ })]
122
+ });
123
+ };
124
+
125
+ exports.default = TagsComponent;
126
+ // powered by h
@@ -0,0 +1,9 @@
1
+ import { ConfigItemModal, HTableInstance } from "@/components/modal";
2
+ declare const _default: {
3
+ date: (config: ConfigItemModal, itemData: any) => string;
4
+ tags: (config: ConfigItemModal, itemData: any, index: number, tableInstance: HTableInstance) => "-" | JSX.Element;
5
+ copy: (config: ConfigItemModal, itemData: any) => "-" | JSX.Element;
6
+ link: (config: ConfigItemModal, itemData: any) => JSX.Element;
7
+ text: (config: ConfigItemModal, itemData: any) => JSX.Element;
8
+ };
9
+ export default _default;
@@ -0,0 +1,120 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var _Object$keys = require('@babel/runtime-corejs3/core-js/object/keys');
6
+ var _Object$getOwnPropertySymbols = require('@babel/runtime-corejs3/core-js/object/get-own-property-symbols');
7
+ var _filterInstanceProperty = require('@babel/runtime-corejs3/core-js/instance/filter');
8
+ var _Object$getOwnPropertyDescriptor = require('@babel/runtime-corejs3/core-js/object/get-own-property-descriptor');
9
+ var _forEachInstanceProperty = require('@babel/runtime-corejs3/core-js/instance/for-each');
10
+ var _Object$getOwnPropertyDescriptors = require('@babel/runtime-corejs3/core-js/object/get-own-property-descriptors');
11
+ var _Object$defineProperties = require('@babel/runtime-corejs3/core-js/object/define-properties');
12
+ var _Object$defineProperty = require('@babel/runtime-corejs3/core-js/object/define-property');
13
+ var _defineProperty = require('@babel/runtime-corejs3/helpers/defineProperty');
14
+ var jsxRuntime = require('react/jsx-runtime');
15
+ var moment = require('moment');
16
+ var TagsComponent = require('./TagsComponent.js');
17
+ var copy = require('copy-to-clipboard');
18
+ var antd = require('antd');
19
+
20
+ function ownKeys(e, r) { var t = _Object$keys(e); if (_Object$getOwnPropertySymbols) { var o = _Object$getOwnPropertySymbols(e); r && (o = _filterInstanceProperty(o).call(o, function (r) { return _Object$getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
21
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var _context, _context2; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? _forEachInstanceProperty(_context = ownKeys(Object(t), !0)).call(_context, function (r) { _defineProperty(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(e, _Object$getOwnPropertyDescriptors(t)) : _forEachInstanceProperty(_context2 = ownKeys(Object(t))).call(_context2, function (r) { _Object$defineProperty(e, r, _Object$getOwnPropertyDescriptor(t, r)); }); } return e; }
22
+ var Link = antd.Typography.Link,
23
+ Paragraph = antd.Typography.Paragraph;
24
+ var getTableVal = function getTableVal(config, itemData) {
25
+ var dataIndex = config.dataIndex;
26
+ var tableDataIndex = dataIndex;
27
+ return itemData[tableDataIndex];
28
+ };
29
+ var dateRender = function dateRender(config, itemData) {
30
+ var _config$valueTypeProp = config.valueTypeProps,
31
+ valueTypeProps = _config$valueTypeProp === void 0 ? {} : _config$valueTypeProp;
32
+ var tableVal = getTableVal(config, itemData);
33
+ var _valueTypeProps$forma = valueTypeProps.format,
34
+ format = _valueTypeProps$forma === void 0 ? "YYYY-MM-DD HH:mm:ss" : _valueTypeProps$forma,
35
+ _valueTypeProps$timeS = valueTypeProps.timeStampType,
36
+ timeStampType = _valueTypeProps$timeS === void 0 ? "X" : _valueTypeProps$timeS;
37
+ if (!tableVal) {
38
+ return "-";
39
+ }
40
+ var time = moment(tableVal, timeStampType);
41
+ return time.format(format);
42
+ };
43
+ var tagsRender = function tagsRender(config, itemData, index, tableInstance) {
44
+ var _config$valueTypeProp2 = config.valueTypeProps,
45
+ valueTypeProps = _config$valueTypeProp2 === void 0 ? {} : _config$valueTypeProp2;
46
+ var tableVal = getTableVal(config, itemData);
47
+ if (!tableVal) {
48
+ return "-";
49
+ }
50
+ return jsxRuntime.jsx(TagsComponent.default, _objectSpread(_objectSpread({
51
+ data: tableVal
52
+ }, valueTypeProps), {}, {
53
+ tableInstance: tableInstance
54
+ }));
55
+ };
56
+ var copyRender = function copyRender(config, itemData) {
57
+ var _config$valueTypeProp3 = config.valueTypeProps,
58
+ valueTypeProps = _config$valueTypeProp3 === void 0 ? {} : _config$valueTypeProp3,
59
+ title = config.title,
60
+ titleStr = config.titleStr;
61
+ var successMsg = valueTypeProps.successMsg,
62
+ text = valueTypeProps.text;
63
+ var msg = successMsg || "\u590D\u5236".concat(title || titleStr, "\u6210\u529F!");
64
+ var tableVal = getTableVal(config, itemData);
65
+ if (!tableVal) {
66
+ return "-";
67
+ }
68
+ var cpText = text;
69
+ if (typeof text === "function") {
70
+ cpText = text(itemData);
71
+ }
72
+ return jsxRuntime.jsx(Link, {
73
+ onClick: function onClick() {
74
+ copy(cpText || tableVal);
75
+ antd.message.success(msg);
76
+ },
77
+ children: tableVal
78
+ });
79
+ };
80
+ var linkRender = function linkRender(config, itemData) {
81
+ var _config$valueTypeProp4 = config.valueTypeProps,
82
+ valueTypeProps = _config$valueTypeProp4 === void 0 ? {} : _config$valueTypeProp4;
83
+ var href = valueTypeProps.href,
84
+ _valueTypeProps$targe = valueTypeProps.target,
85
+ target = _valueTypeProps$targe === void 0 ? "_blank" : _valueTypeProps$targe;
86
+ var tableVal = getTableVal(config, itemData);
87
+ var hrefUrl = href;
88
+ if (typeof href === "function") {
89
+ hrefUrl = href(itemData);
90
+ }
91
+ return jsxRuntime.jsx(Link, {
92
+ href: hrefUrl || tableVal,
93
+ target: target,
94
+ children: tableVal
95
+ });
96
+ };
97
+ var textRender = function textRender(config, itemData) {
98
+ var _config$valueTypeProp5 = config.valueTypeProps,
99
+ valueTypeProps = _config$valueTypeProp5 === void 0 ? {} : _config$valueTypeProp5;
100
+ var addonBefore = valueTypeProps.addonBefore,
101
+ addonAfter = valueTypeProps.addonAfter,
102
+ type = valueTypeProps.type,
103
+ ellipsis = valueTypeProps.ellipsis;
104
+ var tableVal = getTableVal(config, itemData);
105
+ return jsxRuntime.jsxs(Paragraph, {
106
+ type: type,
107
+ ellipsis: ellipsis,
108
+ children: [addonBefore, tableVal, addonAfter]
109
+ });
110
+ };
111
+ var config = {
112
+ date: dateRender,
113
+ tags: tagsRender,
114
+ copy: copyRender,
115
+ link: linkRender,
116
+ text: textRender
117
+ };
118
+
119
+ exports.default = config;
120
+ // powered by h
@@ -0,0 +1,5 @@
1
+ import { ConfigItemModal, HTableInstance } from "@/components/modal";
2
+ import React from "react";
3
+ import { ValueTypeConfigModal } from '../modal';
4
+ declare const _default: (item: ConfigItemModal, tableInstance: HTableInstance, valueTypeConfig: ValueTypeConfigModal) => (dom: React.ReactNode, itemData: any, index: number) => any;
5
+ export default _default;
@@ -0,0 +1,27 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var config = require('./config.js');
6
+
7
+ var configRender = (function (item, tableInstance, valueTypeConfig) {
8
+ var render = item.render,
9
+ _item$valueType = item.valueType,
10
+ valueType = _item$valueType === void 0 ? "" : _item$valueType;
11
+ return function (dom, itemData, index) {
12
+ var valType = valueType;
13
+ if (render) {
14
+ return render(dom, itemData, index, tableInstance);
15
+ }
16
+ if (valueTypeConfig[valType]) {
17
+ return valueTypeConfig[valType](item, itemData, index, tableInstance);
18
+ }
19
+ if (config.default[valType]) {
20
+ return config.default[valType](item, itemData, index, tableInstance);
21
+ }
22
+ return dom;
23
+ };
24
+ });
25
+
26
+ exports.default = configRender;
27
+ // powered by h
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hw-component/table",
3
- "version": "1.2.5",
3
+ "version": "1.2.7",
4
4
  "description": "基于antd二次开发table组件",
5
5
  "keywords": [
6
6
  "table"
@@ -31,9 +31,10 @@
31
31
  "dependencies": {
32
32
  "@ant-design/icons": "4.6.2",
33
33
  "@ant-design/pro-table": "2.70.0",
34
- "@hw-component/form": "1.5.0",
34
+ "@hw-component/form": "1.5.2",
35
35
  "ahooks": "2.10.9",
36
36
  "antd": "4.20.7",
37
+ "copy-to-clipboard": "3.3.1",
37
38
  "core-js": "3",
38
39
  "react": "17.0.0",
39
40
  "react-dom": "17.0.2",
@@ -12,6 +12,8 @@ import type { SizeType } from "antd/lib/config-provider/SizeContext";
12
12
  import type { ColumnsStateType } from "@ant-design/pro-table/es/typing";
13
13
  import type { ColumnsState } from "@ant-design/pro-table/es/container";
14
14
  import { mkChangeValue, outColSetting } from "./utils";
15
+ import configRender from "../render";
16
+ import {useHTableConfigContext} from "@/components/TableConfig";
15
17
  const rowSelectionCol = (rowSelection?: HRowSelection) => {
16
18
  const { allPageCheck, onChange, getCheckboxProps } = rowSelection || {};
17
19
  return {
@@ -39,6 +41,7 @@ const rowSelectionCol = (rowSelection?: HRowSelection) => {
39
41
  };
40
42
  export const useCols = ({ configData, rowSelection, table }: HTableProps) => {
41
43
  const [cols, setCols] = useState<ConfigDataModal>([]);
44
+ const {valueTypeConfig}=useHTableConfigContext({});
42
45
  const changeConfigData = (data: ConfigDataModal) => {
43
46
  const colsArray = data.filter((item) => {
44
47
  return !item.hideInTable;
@@ -47,15 +50,9 @@ export const useCols = ({ configData, rowSelection, table }: HTableProps) => {
47
50
  colsArray.splice(0, 0, rowSelectionCol(rowSelection) as any);
48
51
  }
49
52
  return colsArray.map((item) => {
50
- const { render } = item;
51
53
  return {
52
54
  ...item,
53
- render: (dom: React.ReactNode, itemData: any, index: number) => {
54
- if (!render) {
55
- return dom;
56
- }
57
- return render(dom, itemData, index, table as HTableInstance);
58
- },
55
+ render:configRender(item,(table as HTableInstance),valueTypeConfig)
59
56
  };
60
57
  });
61
58
  };
@@ -8,7 +8,7 @@ import type { HTableProps } from "./modal";
8
8
  import useReq from "./hooks/useReq";
9
9
  import useDispatch from "./hooks/useDispatch";
10
10
  import { useState } from "react";
11
- import {useClassName} from "@/components/hooks";
11
+ import {useClassName} from "./hooks";
12
12
  export default ({
13
13
  request,
14
14
  configData,
@@ -1,5 +1,5 @@
1
1
  import React, { useContext } from "react";
2
- import type { HTableInstance } from "src/components/modal";
2
+ import type { HTableInstance ,ValueTypeConfigModal} from "./modal";
3
3
 
4
4
  interface HTableConfigContextModal {
5
5
  emptyRender?: (table: HTableInstance) => React.ReactNode;
@@ -7,6 +7,7 @@ interface HTableConfigContextModal {
7
7
  headerStyle?:React.CSSProperties;
8
8
  tableStyle?:React.CSSProperties;
9
9
  paginationStyle?:React.CSSProperties;
10
+ valueTypeConfig?:ValueTypeConfigModal;
10
11
  }
11
12
  export const HTableConfigContext =
12
13
  React.createContext<HTableConfigContextModal | null>(null);
@@ -16,10 +17,10 @@ export const useHTableConfigContext = ({
16
17
  emptyRender,
17
18
  errorRender,
18
19
  headerStyle,
19
- tableStyle,
20
+ tableStyle,
20
21
  paginationStyle
21
22
  }: HTableConfigContextModal) => {
22
- const { errorRender: configErrorRender, emptyRender: configEmptyRender,headerStyle:configHeaderStyle,tableStyle:configTableStyle,paginationStyle:configPaginationStyle } =
23
+ const { errorRender: configErrorRender, emptyRender: configEmptyRender,headerStyle:configHeaderStyle,tableStyle:configTableStyle,paginationStyle:configPaginationStyle,valueTypeConfig={} } =
23
24
  useContext(HTableConfigContext) || {};
24
25
 
25
26
  return {
@@ -27,7 +28,8 @@ export const useHTableConfigContext = ({
27
28
  emptyRender: emptyRender || configEmptyRender,
28
29
  headerStyle:headerStyle||configHeaderStyle,
29
30
  tableStyle:tableStyle||configTableStyle,
30
- paginationStyle:paginationStyle||configPaginationStyle
31
+ paginationStyle:paginationStyle||configPaginationStyle,
32
+ valueTypeConfig
31
33
  };
32
34
  };
33
35
  const Index: React.FC<HTableConfigContextModal> = ({ children, ...props }) => {
@@ -10,6 +10,7 @@ import type { ModalProps } from "antd";
10
10
  import type { TableProps } from "antd/lib/table";
11
11
  import type { AffixProps } from "antd/lib/affix";
12
12
  import type { OptionModal } from "./HTableBody";
13
+ import {GetRowKey} from "rc-table/lib/interface";
13
14
 
14
15
  export interface RowObj {
15
16
  keys?: React.Key[];
@@ -43,6 +44,7 @@ interface HColumns extends Omit<ProColumns, "render" | "title"> {
43
44
  ) => React.ReactNode;
44
45
  rowSelectionTitle?: boolean;
45
46
  title?: string | React.ReactNode;
47
+ valueTypeProps?:Record<string, any>
46
48
  }
47
49
  interface BcItemModal {
48
50
  childrenDataIndex?: ConfigItemModal[] | string[];
@@ -66,7 +68,6 @@ export type actionFn = (...arg) => void;
66
68
  export interface RowSelectionOuter {
67
69
  allPageCheck?: boolean;
68
70
  }
69
- type RowKeyFn=(data:any,index:number)=>string;
70
71
  export type HRowSelection = RowSelectionOuter &
71
72
  (TableProps<any>["rowSelection"] & {
72
73
  alwaysShowAlert?: boolean;
@@ -74,7 +75,7 @@ export type HRowSelection = RowSelectionOuter &
74
75
  export interface HTableProps
75
76
  extends Omit<
76
77
  ProTableProps<any, any>,
77
- "request" | "dataSource" | "rowKey" | "rowSelection"
78
+ "request" | "dataSource"| "rowSelection"
78
79
  > {
79
80
  request?: (params: ParamsModal) => Promise<ResultModal>;
80
81
  configData: ConfigDataModal;
@@ -97,7 +98,6 @@ export interface HTableProps
97
98
  manual?: boolean;
98
99
  dataSource?: ResultModal;
99
100
  paginationStyle?: React.CSSProperties;
100
- rowKey?: string|RowKeyFn;
101
101
  allPageCheck?: boolean;
102
102
  rowSelection?: HRowSelection | false;
103
103
  affixProps?: AffixProps | false;
@@ -153,3 +153,6 @@ export interface ModalTableProps extends ModalProps {
153
153
  configData?: HTableProps["configData"];
154
154
  request?: HTableProps["request"];
155
155
  }
156
+
157
+ export type ValueTypeConfigRenderFn=(config:ConfigItemModal,itemData:any,index:number,tableInstance:HTableInstance)=>React.ReactNode;
158
+ export type ValueTypeConfigModal=Record<string, ValueTypeConfigRenderFn>;
@@ -0,0 +1,91 @@
1
+ import {Row, Tag,Tooltip,Popover} from "antd";
2
+ import React, {useMemo} from "react";
3
+ import {TooltipProps} from "antd/lib/tooltip";
4
+ import {HTableInstance} from "@/components/modal";
5
+ type CloseFn=(key:string,tableInstance?:HTableInstance)=>void;
6
+ interface IProps {
7
+ data:any[];
8
+ closable?:boolean;
9
+ onClose?:CloseFn;
10
+ color?:string;
11
+ icon?:React.ReactNode;
12
+ tooltip?:boolean|TooltipProps;
13
+ fieldNames?:{label?:string,value?:string};
14
+ tableInstance?:HTableInstance;
15
+ maxLen?:number|null;
16
+ }
17
+ const getTooltipProps=(title:string,tooltip?:boolean|TooltipProps):TooltipProps=>{
18
+ if (!tooltip){
19
+ return {
20
+ title:null
21
+ };
22
+ }
23
+ if (tooltip===true){
24
+ return {
25
+ title
26
+ }
27
+ }
28
+ return {
29
+ ...tooltip,
30
+ title,
31
+ }
32
+ }
33
+ const TagsComponent=(props:IProps)=>{
34
+ const {data,closable,onClose,color,icon,fieldNames={},tooltip,tableInstance,maxLen}=props;
35
+ const {label="label",value="value"}=fieldNames;
36
+ const {tagData,moreTag}=useMemo(()=>{
37
+ if (!maxLen||!data){
38
+ return {
39
+ tagData:data
40
+ };
41
+ }
42
+ const tagData=data.slice(0,maxLen);
43
+ const moreTag=data.slice(maxLen);
44
+ return {
45
+ tagData,
46
+ moreTag
47
+ }
48
+ },[data,maxLen]);
49
+ const moreLen=moreTag?.length;
50
+
51
+ return <Row gutter={[8,8]}>
52
+ {tagData?.map((tagItem, index)=>{
53
+ const tagProps={
54
+ closable,
55
+ onClose,
56
+ color,
57
+ icon
58
+ }
59
+ const indexKey=index.toString();
60
+ if (typeof tagItem==="string"){
61
+ const tooltipProps=getTooltipProps(tagItem,tooltip);
62
+ return <Tooltip {...tooltipProps}>
63
+ <Tag key={indexKey} {...tagProps} onClose={(e)=>{
64
+ e.preventDefault();
65
+ onClose?.(indexKey,tableInstance);
66
+ }}>{tagItem}</Tag>
67
+ </Tooltip>
68
+ }
69
+ const {[label]:tagLabel,[value]:tagValue,...props}=tagItem;
70
+ const tooltipProps=getTooltipProps(tagLabel,tooltip);
71
+ const cuTagProps={
72
+ ...tagProps,
73
+ ...props
74
+ }
75
+ const cuKey=tagValue||indexKey;
76
+ return <Tooltip {...tooltipProps}>
77
+ <Tag key={cuKey} {...cuTagProps} onClose={(e)=>{
78
+ e.preventDefault();
79
+ cuTagProps?.onClose(cuKey,tableInstance);
80
+ }}>{tagLabel}</Tag>
81
+ </Tooltip>
82
+ })}
83
+ {!moreLen?null:
84
+ <Popover content={<TagsComponent {...props} maxLen={null} />}>
85
+ <Tag>...等{data.length}个</Tag>
86
+ </Popover>
87
+ }
88
+ </Row>
89
+ }
90
+
91
+ export default TagsComponent;
@@ -0,0 +1,75 @@
1
+ import moment from 'moment'
2
+ import {ConfigItemModal, HTableInstance} from "@/components/modal";
3
+ import TagsComponent from "./TagsComponent";
4
+ import copy from 'copy-to-clipboard';
5
+ import {message, Space, Typography} from 'antd';
6
+ const {Link,Paragraph}=Typography;
7
+ const getTableVal=(config:ConfigItemModal,itemData:any)=>{
8
+ const {dataIndex} = config;
9
+ const tableDataIndex=(dataIndex as string);
10
+ return itemData[tableDataIndex];
11
+ }
12
+ const dateRender=(config:ConfigItemModal,itemData:any)=>{
13
+ const {valueTypeProps={}}=config;
14
+ const tableVal=getTableVal(config,itemData);
15
+ const {format="YYYY-MM-DD HH:mm:ss",timeStampType="X"}=valueTypeProps;
16
+ if (!tableVal){
17
+ return "-"
18
+ }
19
+ const time=moment(tableVal,timeStampType);
20
+ return time.format(format);
21
+ }
22
+ const tagsRender=(config:ConfigItemModal,itemData:any,index:number,tableInstance:HTableInstance)=>{
23
+ const {valueTypeProps={}}=config;
24
+ const tableVal=getTableVal(config,itemData);
25
+ if (!tableVal){
26
+ return "-"
27
+ }
28
+ return <TagsComponent data={tableVal} {...valueTypeProps} tableInstance={tableInstance}/>
29
+ }
30
+ const copyRender=(config:ConfigItemModal,itemData:any)=>{
31
+ const {valueTypeProps={},title,titleStr}=config;
32
+ const {successMsg,text}=valueTypeProps;
33
+ const msg=successMsg||`复制${title||titleStr}成功!`;
34
+ const tableVal=getTableVal(config,itemData);
35
+ if (!tableVal){
36
+ return "-"
37
+ }
38
+ let cpText=text;
39
+ if (typeof text==="function"){
40
+ cpText=text(itemData);
41
+ }
42
+ return <Link onClick={()=>{
43
+ copy(cpText||tableVal);
44
+ message.success(msg);
45
+ }}>
46
+ {tableVal}
47
+ </Link>
48
+ }
49
+ const linkRender=(config:ConfigItemModal,itemData:any)=>{
50
+ const {valueTypeProps={},}=config;
51
+ const {href,target="_blank"}=valueTypeProps;
52
+ const tableVal=getTableVal(config,itemData);
53
+ let hrefUrl=href;
54
+ if (typeof href==="function"){
55
+ hrefUrl=href(itemData);
56
+ }
57
+ return <Link href={hrefUrl||tableVal} target={target}>
58
+ {tableVal}
59
+ </Link>
60
+ }
61
+ const textRender=(config:ConfigItemModal,itemData:any)=>{
62
+ const {valueTypeProps={},}=config;
63
+ const {addonBefore,addonAfter,type,ellipsis}=valueTypeProps;
64
+ const tableVal=getTableVal(config,itemData);
65
+ return <Paragraph type={type} ellipsis={ellipsis}>
66
+ {addonBefore}{tableVal}{addonAfter}
67
+ </Paragraph>
68
+ }
69
+ export default {
70
+ date:dateRender,
71
+ tags:tagsRender,
72
+ copy:copyRender,
73
+ link:linkRender,
74
+ text:textRender
75
+ }
@@ -0,0 +1,20 @@
1
+ import { ConfigItemModal, HTableInstance} from "@/components/modal";
2
+ import React from "react";
3
+ import config from './config';
4
+ import {ValueTypeConfigModal} from '../modal'
5
+ export default (item:ConfigItemModal,tableInstance:HTableInstance,valueTypeConfig:ValueTypeConfigModal)=>{
6
+ const { render ,valueType=""} = item;
7
+ return (dom: React.ReactNode, itemData: any, index: number)=>{
8
+ const valType=(valueType as string);
9
+ if (render){
10
+ return render(dom, itemData, index, tableInstance);
11
+ }
12
+ if (valueTypeConfig[valType]){
13
+ return valueTypeConfig[valType](item,itemData,index,tableInstance);
14
+ }
15
+ if (config[valType]){
16
+ return config[valType](item,itemData,index,tableInstance);
17
+ }
18
+ return dom;
19
+ }
20
+ }