@kmkf-fe-packages/kmkf-work-order-service-component 2.2.5 → 2.4.0-rc.0

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.
Files changed (35) hide show
  1. package/dist/esm/CustomerServiceToDoList/index.d.ts +3 -0
  2. package/dist/esm/CustomerServiceToDoList/index.js +155 -0
  3. package/dist/esm/CustomerServiceToDoList/index.module.less +134 -0
  4. package/dist/esm/FlowTemplateDetailV2/common.js +1 -0
  5. package/dist/esm/FlowTemplateDetailV2/components/FormRender/component-dependency-finder.d.ts +75 -0
  6. package/dist/esm/FlowTemplateDetailV2/components/FormRender/component-dependency-finder.js +328 -0
  7. package/dist/esm/FlowTemplateDetailV2/components/FormRender/index.js +84 -36
  8. package/dist/esm/FlowTemplateDetailV2/components/FormRender/types.d.ts +41 -0
  9. package/dist/esm/FlowTemplateDetailV2/components/FormRender/types.js +1 -0
  10. package/dist/esm/FlowTemplateDetailV2/components/FormRender/value-mapping-finder.d.ts +61 -0
  11. package/dist/esm/FlowTemplateDetailV2/components/FormRender/value-mapping-finder.js +292 -0
  12. package/dist/esm/FlowTemplateDetailV2/components/FormRender/value-mapping-types.d.ts +65 -0
  13. package/dist/esm/FlowTemplateDetailV2/components/FormRender/value-mapping-types.js +1 -0
  14. package/dist/esm/FlowTemplateDetailV2/index.js +12 -4
  15. package/dist/esm/WorkOrder/components/CustomerServiceToDoCard/index.d.ts +3 -0
  16. package/dist/esm/WorkOrder/components/CustomerServiceToDoCard/index.js +76 -0
  17. package/dist/esm/WorkOrder/components/CustomerServiceToDoCard/index.module.less +20 -0
  18. package/dist/esm/WorkOrder/components/WorkOrderList/components/CustomizeWorkOrderCard/index.js +6 -0
  19. package/dist/esm/WorkOrder/components/WorkOrderList/index.js +7 -2
  20. package/dist/esm/WorkOrder/components/WorkOrderList/index.less +4 -3
  21. package/dist/esm/WorkOrder/index.js +21 -1
  22. package/dist/esm/common/constant.d.ts +5 -0
  23. package/dist/esm/common/constant.js +3 -2
  24. package/dist/esm/common/imgs/ai.png +0 -0
  25. package/dist/esm/common/imgs/notification.png +0 -0
  26. package/dist/esm/common/utils/xzSDK.d.ts +2 -0
  27. package/dist/esm/common/utils/xzSDK.js +45 -1
  28. package/dist/esm/index.d.ts +1 -0
  29. package/dist/esm/index.js +1 -0
  30. package/dist/esm/model/customizeWorkOrder/index.d.ts +1 -1
  31. package/dist/esm/model/customizeWorkOrder/index.js +17 -3
  32. package/dist/esm/model/customizeWorkOrder/types.d.ts +2 -0
  33. package/dist/esm/model/servers/api.d.ts +1 -0
  34. package/dist/esm/model/servers/api.js +9 -0
  35. package/package.json +5 -5
@@ -0,0 +1,3 @@
1
+ import React from 'react';
2
+ declare const CustomerServiceToDoList: React.FC;
3
+ export default CustomerServiceToDoList;
@@ -0,0 +1,155 @@
1
+ import { Button, Card, Tag, Badge, Spin, Empty } from 'antd';
2
+ import React, { useRef, useEffect } from 'react';
3
+ import { useInfiniteScroll } from 'ahooks';
4
+ import { CloseOutlined } from '@ant-design/icons';
5
+ import { useAppDispatch, useAppSelector } from "../model/hooks";
6
+ import { nodeWorkOrderPending } from "../model/servers/api";
7
+ import moment from 'moment';
8
+ import { setWorkOrderProcessStatus } from "../model/customizeWorkOrder";
9
+ import { WORK_ORDER_STATUS_AI_BUILD } from "../common/constant";
10
+ import styles from "./index.module.less";
11
+ var getTableData = function getTableData(params) {
12
+ return nodeWorkOrderPending(params).then(function (res) {
13
+ var _res$data, _res$data2;
14
+ // console.log('API response:', res?.data);
15
+ return {
16
+ list: (res === null || res === void 0 ? void 0 : (_res$data = res.data) === null || _res$data === void 0 ? void 0 : _res$data.list) || [],
17
+ total: (res === null || res === void 0 ? void 0 : (_res$data2 = res.data) === null || _res$data2 === void 0 ? void 0 : _res$data2.total) || 0
18
+ };
19
+ }).catch(function (error) {
20
+ console.error('API error:', error);
21
+ return {
22
+ list: [],
23
+ total: 0
24
+ };
25
+ });
26
+ };
27
+ var CustomerServiceToDoList = function CustomerServiceToDoList(props) {
28
+ var _ref, _data$list;
29
+ var shopUniqueKey = props.shopUniqueKey;
30
+ var dispatch = useAppDispatch();
31
+ var workOrderProcessStatus = useAppSelector(function (state) {
32
+ var _state$customizeWorkO;
33
+ return (_state$customizeWorkO = state.customizeWorkOrder) === null || _state$customizeWorkO === void 0 ? void 0 : _state$customizeWorkO.workOrderProcessStatus;
34
+ });
35
+ var containerRef = useRef(null);
36
+ var _useInfiniteScroll = useInfiniteScroll(function (d) {
37
+ var page = d ? Math.ceil(d.list.length / 10) + 1 : 1;
38
+ return getTableData({
39
+ pageNo: page,
40
+ pageSize: 10,
41
+ onlyWaitForMe: true,
42
+ onlyCount: false,
43
+ onlyStartNode: true,
44
+ flowTags: ['AI_BUILD'],
45
+ shopUniqueKeyList: [shopUniqueKey]
46
+ });
47
+ }, {
48
+ target: containerRef,
49
+ reloadDeps: [],
50
+ // 添加空的 reloadDeps 避免不必要的重新加载
51
+ isNoMore: function isNoMore(d) {
52
+ var _d$list;
53
+ return (d === null || d === void 0 ? void 0 : d.total) <= (d === null || d === void 0 ? void 0 : (_d$list = d.list) === null || _d$list === void 0 ? void 0 : _d$list.length);
54
+ }
55
+ }),
56
+ data = _useInfiniteScroll.data,
57
+ loading = _useInfiniteScroll.loading,
58
+ reload = _useInfiniteScroll.reload,
59
+ noMore = _useInfiniteScroll.noMore;
60
+ var handleProcess = function handleProcess(item) {
61
+ dispatch({
62
+ type: 'customizeWorkOrder/setCurrentCustomizeRecord',
63
+ payload: {
64
+ flowTemplateName: item === null || item === void 0 ? void 0 : item.flowTemplateName
65
+ }
66
+ });
67
+ dispatch({
68
+ type: 'customizeWorkOrder/setLogicFlowId',
69
+ payload: item.flowTemplateKey
70
+ });
71
+ dispatch({
72
+ type: 'customizeWorkOrder/setFlowWorkOrderId',
73
+ payload: item.flowWorkOrderId
74
+ });
75
+ dispatch({
76
+ type: 'customizeWorkOrder/setFormModalVisible',
77
+ payload: true
78
+ });
79
+ };
80
+ var onCancel = function onCancel() {
81
+ dispatch({
82
+ type: 'customizeWorkOrder/setCustomerServiceToDoListOpen',
83
+ payload: false
84
+ });
85
+ };
86
+ useEffect(function () {
87
+ reload();
88
+ }, []);
89
+ useEffect(function () {
90
+ if (['submit'].includes(workOrderProcessStatus)) {
91
+ reload();
92
+ dispatch(setWorkOrderProcessStatus(''));
93
+ }
94
+ }, [workOrderProcessStatus, dispatch]);
95
+ return /*#__PURE__*/React.createElement("div", {
96
+ className: styles.container,
97
+ onClick: onCancel
98
+ }, /*#__PURE__*/React.createElement("div", {
99
+ className: styles.todoSection,
100
+ onClick: function onClick(e) {
101
+ return e.stopPropagation();
102
+ }
103
+ }, /*#__PURE__*/React.createElement("div", {
104
+ className: styles.todoTabs
105
+ }, /*#__PURE__*/React.createElement(Badge, {
106
+ count: data === null || data === void 0 ? void 0 : data.total
107
+ }, /*#__PURE__*/React.createElement("div", {
108
+ className: styles.todoTab
109
+ }, "\u5BA2\u670D\u5F85\u529E")), /*#__PURE__*/React.createElement(CloseOutlined, {
110
+ onClick: onCancel
111
+ })), /*#__PURE__*/React.createElement("main", {
112
+ className: styles.todoList,
113
+ ref: containerRef
114
+ }, ((data === null || data === void 0 ? void 0 : data.list) || []).length > 0 ? /*#__PURE__*/React.createElement(Spin, {
115
+ spinning: loading
116
+ }, (_ref = (data === null || data === void 0 ? void 0 : data.list) || []) === null || _ref === void 0 ? void 0 : _ref.map(function (item) {
117
+ var _item$jsonMap;
118
+ return /*#__PURE__*/React.createElement(Card, {
119
+ key: item.id,
120
+ className: "".concat(styles.todoItem),
121
+ bodyStyle: {
122
+ padding: '12px 16px'
123
+ }
124
+ }, /*#__PURE__*/React.createElement("div", {
125
+ className: styles.todoContent
126
+ }, /*#__PURE__*/React.createElement("div", {
127
+ className: styles.todoMain
128
+ }, /*#__PURE__*/React.createElement("div", {
129
+ className: styles.todoDescription
130
+ }, item.buyerNick ? "".concat(item.buyerNick, "\u6709\u4E00\u6761") : '', item === null || item === void 0 ? void 0 : (_item$jsonMap = item.jsonMap) === null || _item$jsonMap === void 0 ? void 0 : _item$jsonMap.scene, " \u5DE5\u5355\u9700\u8981\u5904\u7406\uFF0C\u8BF7\u53CA\u65F6\u5904\u7406"), /*#__PURE__*/React.createElement("div", {
131
+ className: styles.todoMeta
132
+ }, /*#__PURE__*/React.createElement("span", {
133
+ className: styles.timestamp
134
+ }, moment(item.created).format('YYYY-MM-DD HH:mm:ss')))), /*#__PURE__*/React.createElement("div", {
135
+ className: styles.todoAction
136
+ }, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(Tag, {
137
+ color: "blue",
138
+ className: styles.aiAction
139
+ }, "AI\u81EA\u52A8\u5EFA\u5355-".concat(WORK_ORDER_STATUS_AI_BUILD[item.flowStatus]))), /*#__PURE__*/React.createElement(Button, {
140
+ type: "primary",
141
+ size: "small",
142
+ ghost: true,
143
+ onClick: function onClick() {
144
+ return handleProcess(item);
145
+ }
146
+ }, "\u53BB\u5904\u7406"))));
147
+ })) : /*#__PURE__*/React.createElement("div", {
148
+ className: styles.todoEmpty
149
+ }, /*#__PURE__*/React.createElement(Empty, {
150
+ description: "\u6682\u65E0\u6570\u636E"
151
+ })), noMore && data !== null && data !== void 0 && (_data$list = data.list) !== null && _data$list !== void 0 && _data$list.length ? /*#__PURE__*/React.createElement("p", {
152
+ className: styles.todoNoMore
153
+ }, "\u6CA1\u6709\u66F4\u591A\u6570\u636E\u4E86") : null)));
154
+ };
155
+ export default CustomerServiceToDoList;
@@ -0,0 +1,134 @@
1
+ .container {
2
+ position: fixed;
3
+ top: 0;
4
+ left: 0;
5
+ width: 100%;
6
+ height: 100%;
7
+ background: rgba(0, 0, 0, 0.5);
8
+ z-index: 90;
9
+ }
10
+ .todoTabs {
11
+ display: flex;
12
+ justify-content: space-between;
13
+ align-items: center;
14
+ padding: 0 16px;
15
+ height: 45px;
16
+ .todoTab {
17
+ display: flex;
18
+ align-items: center;
19
+ justify-content: center;
20
+ width: 90px;
21
+ height: 45px;
22
+ font-size: 16px;
23
+ font-weight: 500;
24
+ color: #1890ff;
25
+ border-bottom: 2px solid #1890ff;
26
+ }
27
+ }
28
+ .todoSection {
29
+ position: absolute;
30
+ bottom: 0;
31
+ left: 0;
32
+ right: 0;
33
+ width: 100%;
34
+ height: 80%;
35
+ background: #fff;
36
+
37
+ .todoList {
38
+ height: calc(100% - 50px);
39
+ overflow-y: auto;
40
+ background: #f0f0f0;
41
+ padding-top: 8px;
42
+ .todoItem {
43
+ margin-bottom: 8px;
44
+ border-radius: 6px;
45
+ transition: all 0.3s;
46
+
47
+ &:hover {
48
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
49
+ }
50
+
51
+ &.highlighted {
52
+ border: 2px dashed #ff4d4f;
53
+ background: #fff2f0;
54
+ }
55
+
56
+ .todoContent {
57
+ height: 90px;
58
+
59
+ .todoMain {
60
+ flex: 1;
61
+
62
+ .todoDescription {
63
+ display: -webkit-box;
64
+ -webkit-box-orient: vertical;
65
+ -webkit-line-clamp: 2;
66
+ overflow: hidden;
67
+ text-overflow: ellipsis;
68
+ white-space: normal;
69
+ height: 48px;
70
+ font-size: 14px;
71
+ font-weight: 500;
72
+ }
73
+
74
+ .todoMeta {
75
+ display: flex;
76
+ align-items: center;
77
+ gap: 12px;
78
+ flex-wrap: wrap;
79
+
80
+ .timestamp {
81
+ font-size: 12px;
82
+ color: #999;
83
+ }
84
+
85
+ .source {
86
+ font-size: 12px;
87
+ color: #666;
88
+ background: #f5f5f5;
89
+ padding: 2px 6px;
90
+ border-radius: 3px;
91
+ }
92
+
93
+ .aiAction {
94
+ font-size: 11px;
95
+ margin: 0;
96
+ }
97
+ }
98
+ }
99
+ }
100
+ }
101
+ .todoEmpty {
102
+ display: flex;
103
+ justify-content: center;
104
+ align-items: center;
105
+ height: 100%;
106
+ }
107
+ .todoNoMore {
108
+ display: flex;
109
+ justify-content: center;
110
+ align-items: center;
111
+ height: 32px;
112
+ color: #999;
113
+ font-size: 14px;
114
+ }
115
+ }
116
+ }
117
+
118
+ // 响应式设计
119
+ @media (max-width: 768px) {
120
+ .filterOptions {
121
+ gap: 8px;
122
+ }
123
+
124
+ .todoContent {
125
+ flex-direction: column;
126
+ gap: 12px;
127
+
128
+ .todoAction {
129
+ width: 100%;
130
+ display: flex;
131
+ justify-content: space-between;
132
+ }
133
+ }
134
+ }
@@ -24,6 +24,7 @@ export var getFlowOperate = {
24
24
  MODIFY_WORK_ORDER: '修改',
25
25
  WITHDRAW: '撤回',
26
26
  REMINDER: '催单',
27
+ AI_BUILD: 'AI自动建单',
27
28
  CANCEL_REMINDER: '取消催单',
28
29
  AUTO_TASK_RETRY: '自动任务重试'
29
30
  };
@@ -0,0 +1,75 @@
1
+ /**
2
+ * 组件显隐依赖关系查找器 - TypeScript ES Module版本
3
+ * 根据配置文件递归查找组件的所有依赖关系
4
+ */
5
+ import type { Config, DependencyGraph, CircularDependency, DependencyLevels, ComponentStat, DependencyOptions, DependencyAnalysis } from './types.js';
6
+ /**
7
+ * 查找组件的所有依赖关系(递归)
8
+ * @param componentKey - 要查找依赖的组件key
9
+ * @param config - 显隐配置对象
10
+ * @param visited - 已访问的组件集合,用于避免循环依赖
11
+ * @param dependencies - 依赖组件集合
12
+ * @param options - 查找选项
13
+ * @returns 所有依赖组件的key数组
14
+ */
15
+ export declare function findAllDependencies(componentKey: string, config: Config, visited?: Set<string>, dependencies?: Set<string>, options?: DependencyOptions): string[];
16
+ /**
17
+ * 获取组件的直接依赖
18
+ * @param componentKey - 组件key
19
+ * @param config - 显隐配置对象
20
+ * @returns 直接依赖的组件key数组
21
+ */
22
+ export declare function getDirectDependencies(componentKey: string, config: Config): string[];
23
+ /**
24
+ * 构建整个依赖关系图
25
+ * @param config - 显隐配置对象
26
+ * @returns 依赖关系图,格式:{ componentKey: [依赖的组件数组] }
27
+ */
28
+ export declare function buildDependencyGraph(config: Config): DependencyGraph;
29
+ /**
30
+ * 检测循环依赖
31
+ * @param config - 显隐配置对象
32
+ * @returns 包含循环依赖的组件组
33
+ */
34
+ export declare function detectCircularDependencies(config: Config): CircularDependency[];
35
+ /**
36
+ * 打印依赖关系树
37
+ * @param componentKey - 组件key
38
+ * @param config - 显隐配置对象
39
+ * @param level - 缩进级别
40
+ * @param visited - 已访问的组件集合
41
+ */
42
+ export declare function printDependencyTree(componentKey: string, config: Config, level?: number, visited?: Set<string>): void;
43
+ /**
44
+ * 获取组件的依赖层级
45
+ * @param componentKey - 组件key
46
+ * @param config - 显隐配置对象
47
+ * @returns 依赖层级对象
48
+ */
49
+ export declare function getDependencyLevels(componentKey: string, config: Config): DependencyLevels;
50
+ /**
51
+ * 分析组件的完整依赖信息
52
+ * @param componentKey - 组件key
53
+ * @param config - 显隐配置对象
54
+ * @returns 完整的依赖分析结果
55
+ */
56
+ export declare function analyzeDependency(componentKey: string, config: Config): DependencyAnalysis;
57
+ /**
58
+ * 获取依赖统计信息
59
+ * @param config - 显隐配置对象
60
+ * @param topN - 返回前N个结果
61
+ * @returns 组件统计信息数组
62
+ */
63
+ export declare function getDependencyStats(config: Config, topN?: number): {
64
+ mostDependencies: ComponentStat[];
65
+ mostDependedOn: ComponentStat[];
66
+ };
67
+ /**
68
+ * 验证配置文件格式
69
+ * @param config - 要验证的配置对象
70
+ * @returns 验证结果和错误信息
71
+ */
72
+ export declare function validateConfig(config: unknown): {
73
+ isValid: boolean;
74
+ errors: string[];
75
+ };