Commit baf50caf2dab3545524df19d4eee1f8ff04e99a6
1 parent
a0bd68bc
pref: 根据antd5 做迭代处理;以及 lodash 全局处理为按需引用
Showing
49 changed files
with
248 additions
and
283 deletions
1 | -import { DownOutlined, SearchOutlined } from '@ant-design/icons'; | |
1 | +import { DownOutlined } from '@ant-design/icons'; | |
2 | 2 | import { |
3 | 3 | Input, |
4 | 4 | Menu, |
... | ... | @@ -10,7 +10,7 @@ import { |
10 | 10 | // TreeSelect, |
11 | 11 | Typography, |
12 | 12 | } from 'antd'; |
13 | -import _ from 'lodash'; | |
13 | +import { cloneDeep } from 'lodash-es'; | |
14 | 14 | import React, { useEffect, useMemo, useState } from 'react'; |
15 | 15 | import { |
16 | 16 | getAggreList, |
... | ... | @@ -20,6 +20,7 @@ import { |
20 | 20 | } from './service'; |
21 | 21 | // import { FRWidgetProps } from '@/packages/qx-form-generator/src'; |
22 | 22 | import type { ModalProps } from 'antd'; |
23 | +import {QxBaseIcon} from '@qx/common'; | |
23 | 24 | |
24 | 25 | import './styles.less'; |
25 | 26 | |
... | ... | @@ -80,6 +81,9 @@ export const QxAppSelector: React.FC<QxAppSelectProps> = ({ |
80 | 81 | const _item = props.item || {}; |
81 | 82 | let targetItem: any = {}; |
82 | 83 | getAppList(request, { from: props.from }).then((res: any) => { |
84 | + if (!res?.length) { | |
85 | + return; | |
86 | + } | |
83 | 87 | // eslint-disable-next-line array-callback-return |
84 | 88 | res.map((item: any) => { |
85 | 89 | if (item.code === _item['currentId']) { |
... | ... | @@ -192,6 +196,9 @@ export const QxAppSelector: React.FC<QxAppSelectProps> = ({ |
192 | 196 | } else { |
193 | 197 | if (e.target.value === 'join' && !aggreList.length) { |
194 | 198 | getAggreList(request).then((res: any) => { |
199 | + if (!res?.length) { | |
200 | + return; | |
201 | + } | |
195 | 202 | // eslint-disable-next-line array-callback-return |
196 | 203 | res.map((item: any) => { |
197 | 204 | item.label = item.name; |
... | ... | @@ -240,7 +247,7 @@ export const QxAppSelector: React.FC<QxAppSelectProps> = ({ |
240 | 247 | |
241 | 248 | const filter = (word: string) => { |
242 | 249 | if (list) { |
243 | - const _data = _.cloneDeep(list); | |
250 | + const _data = cloneDeep(list); | |
244 | 251 | _data.forEach((it: Item) => { |
245 | 252 | it.deleted = !(it.name.indexOf(word) > -1); |
246 | 253 | }); |
... | ... | @@ -264,7 +271,7 @@ export const QxAppSelector: React.FC<QxAppSelectProps> = ({ |
264 | 271 | className={'qx-selector-sub-search'} |
265 | 272 | placeholder={'输入名称,回车搜索'} |
266 | 273 | allowClear |
267 | - prefix={<SearchOutlined />} | |
274 | + prefix={<QxBaseIcon type={'icon-app-search-line'} />} | |
268 | 275 | onChange={(e) => { |
269 | 276 | handleChange(e.target.value); |
270 | 277 | }} | ... | ... |
1 | +@import '~@qx/ui/src/style/variable.less'; | |
2 | + | |
1 | 3 | .qx-formula-cm { |
2 | 4 | .CodeMirror { |
3 | 5 | height: auto; |
... | ... | @@ -6,8 +8,8 @@ |
6 | 8 | } |
7 | 9 | |
8 | 10 | .cm-bg .CodeMirror { |
9 | - background-color: #f9f9f9 !important; | |
10 | - border: 1px solid #e7e6e6; | |
11 | + background-color: @N2 !important; | |
12 | + border: 1px solid @N4; | |
11 | 13 | } |
12 | 14 | |
13 | 15 | .qx-copy-send-cm { |
... | ... | @@ -22,6 +24,6 @@ |
22 | 24 | position: absolute; |
23 | 25 | right: 8px; |
24 | 26 | bottom: 8px; |
25 | - color: #bcb9b9; | |
27 | + color: @N4; | |
26 | 28 | font-size: 14px; |
27 | 29 | } | ... | ... |
1 | 1 | import React, { useEffect, useState } from 'react'; |
2 | 2 | import { UnControlled as CodeMirror } from 'react-codemirror2'; |
3 | -import _ from 'lodash'; | |
3 | +import { cloneDeep, flatten, sortBy, size, isEqual, forEach, debounce } from 'lodash-es'; | |
4 | 4 | import type { VariableMappingProps } from '../qx-field-setter'; |
5 | 5 | import funObjects from './functions'; |
6 | 6 | import 'codemirror/lib/codemirror.css'; |
... | ... | @@ -36,7 +36,7 @@ export type VariableProps = { |
36 | 36 | * @param code |
37 | 37 | */ |
38 | 38 | export const getAllVariable = (code: string) => { |
39 | - let codeLocal: string = _.clone(code); | |
39 | + let codeLocal: string = cloneDeep(code); | |
40 | 40 | if (!codeLocal) { |
41 | 41 | return []; |
42 | 42 | } |
... | ... | @@ -126,11 +126,11 @@ const CodeEditor: React.FC<CodeHighLightProps> = ({ |
126 | 126 | const [isInitDone, setIsInitDone] = useState<boolean>(false); |
127 | 127 | const [focusFun, setFocusFun] = useState<string>(); |
128 | 128 | |
129 | - const funObjs = _.flatten(funObjects.map((item: any) => item.children)); | |
129 | + const funObjs = flatten(funObjects.map((item: any) => item.children)); | |
130 | 130 | const funObjSimple = {}; |
131 | 131 | funObjs.map((item) => Object.assign(funObjSimple, { [item.title]: item.title })); |
132 | 132 | // 以变量字符长度排序,确保`DATAIF`比`IF`优先匹配 |
133 | - const funObjsSort = _.sortBy(funObjs, function (o) { | |
133 | + const funObjsSort = sortBy(funObjs, function (o) { | |
134 | 134 | return 0 - o.title.length; |
135 | 135 | }); |
136 | 136 | |
... | ... | @@ -141,7 +141,7 @@ const CodeEditor: React.FC<CodeHighLightProps> = ({ |
141 | 141 | setValueLocal(value); |
142 | 142 | } |
143 | 143 | |
144 | - if (_.size(variableObj) > 0) { | |
144 | + if (size(variableObj) > 0) { | |
145 | 145 | setVariableObjLocal(variableObj); |
146 | 146 | } |
147 | 147 | } |
... | ... | @@ -180,7 +180,7 @@ const CodeEditor: React.FC<CodeHighLightProps> = ({ |
180 | 180 | return; |
181 | 181 | } |
182 | 182 | |
183 | - const code = _.cloneDeep(editor.getValue()); | |
183 | + const code = cloneDeep(editor.getValue()); | |
184 | 184 | // 换行分隔 |
185 | 185 | const codeArr = code.split('\n'); |
186 | 186 | const variReplace = (cm: any, line: number) => { |
... | ... | @@ -276,7 +276,7 @@ const CodeEditor: React.FC<CodeHighLightProps> = ({ |
276 | 276 | cmUtils.variableRender(editor); |
277 | 277 | |
278 | 278 | // TODO 默认值bug修复 暂时注释 |
279 | - // const isSame = _.isEqual(valueLocal, val); | |
279 | + // const isSame = isEqual(valueLocal, val); | |
280 | 280 | // if (isSame) { |
281 | 281 | // return; |
282 | 282 | // } |
... | ... | @@ -310,7 +310,7 @@ const CodeEditor: React.FC<CodeHighLightProps> = ({ |
310 | 310 | let flag: boolean = false; |
311 | 311 | let funName: string = ''; |
312 | 312 | |
313 | - _.forEach(funObjsSort, (v) => { | |
313 | + forEach(funObjsSort, (v) => { | |
314 | 314 | if (flag) { |
315 | 315 | return; |
316 | 316 | } |
... | ... | @@ -351,7 +351,7 @@ const CodeEditor: React.FC<CodeHighLightProps> = ({ |
351 | 351 | // 滚动(false,默认)或自动换行 |
352 | 352 | lineWrapping: true, |
353 | 353 | }} |
354 | - onChange={_.debounce(onValueChange, 300)} | |
354 | + onChange={debounce(onValueChange, 300)} | |
355 | 355 | onCursor={(editor) => { |
356 | 356 | const funName = findFocusFun(editor); |
357 | 357 | setFocusFun(funName); | ... | ... |
... | ... | @@ -31,7 +31,7 @@ |
31 | 31 | cursor: pointer; |
32 | 32 | |
33 | 33 | &:hover { |
34 | - background-color: @item-hover-bg; | |
34 | + background-color: @N3; | |
35 | 35 | } |
36 | 36 | } |
37 | 37 | } |
... | ... | @@ -44,7 +44,7 @@ |
44 | 44 | &.ant-menu-inline > .ant-menu-submenu > .ant-menu-submenu-title { |
45 | 45 | margin-top: 0; |
46 | 46 | margin-bottom: 1px; |
47 | - background-color: #fafafa; | |
47 | + background-color: @N2; | |
48 | 48 | } |
49 | 49 | |
50 | 50 | .ant-menu-sub.ant-menu-inline { |
... | ... | @@ -59,7 +59,7 @@ |
59 | 59 | |
60 | 60 | &:hover { |
61 | 61 | color: inherit; |
62 | - background-color: @item-hover-bg; | |
62 | + background-color: @N3; | |
63 | 63 | } |
64 | 64 | } |
65 | 65 | |
... | ... | @@ -74,5 +74,5 @@ |
74 | 74 | padding-top: 5px; |
75 | 75 | padding-bottom: 5px; |
76 | 76 | padding-left: 24px; |
77 | - border-top: 1px solid #f0f0f0; | |
77 | + border-top: 1px solid @N4; | |
78 | 78 | } | ... | ... |
... | ... | @@ -5,7 +5,7 @@ import type { ReactElement } from 'react'; |
5 | 5 | import { useEffect, useState } from 'react'; |
6 | 6 | import QxFieldItem from '../qx-field/src/item'; |
7 | 7 | import { useDebounceFn } from 'ahooks'; |
8 | -import _ from 'lodash'; | |
8 | +import { isEmpty } from 'lodash-es'; | |
9 | 9 | import { QxBaseIcon } from '../qx-base-icon'; |
10 | 10 | import './index.less'; |
11 | 11 | |
... | ... | @@ -100,7 +100,7 @@ export const QxFieldPopover: React.FC<QxFieldPopoverProp> = (props) => { |
100 | 100 | }); |
101 | 101 | }; |
102 | 102 | useEffect(() => { |
103 | - if (!_.isEmpty(props.data)) { | |
103 | + if (!isEmpty(props.data)) { | |
104 | 104 | const _fields = excludeFields(props.data); |
105 | 105 | setFields(_fields); |
106 | 106 | setFilterFields(_fields); |
... | ... | @@ -316,10 +316,9 @@ export const QxFieldPopover: React.FC<QxFieldPopoverProp> = (props) => { |
316 | 316 | // getPopupContainer={(triggerNode) => triggerNode} |
317 | 317 | content={fieldsPopContent()} |
318 | 318 | placement={'bottomRight'} |
319 | - // TODO 默认hover改成click 因为个别电脑输入法 输入会触发气泡的失焦事件 弹框消失 | |
320 | - trigger={props.disabled ? '' : props.trigger || 'click'} | |
321 | - visible={visible} | |
322 | - onVisibleChange={(v) => { | |
319 | + trigger={props.disabled ? undefined : props.trigger || 'click'} | |
320 | + open={visible} | |
321 | + onOpenChange={(v) => { | |
323 | 322 | if (!v) { |
324 | 323 | setTimeout(() => { |
325 | 324 | setKeyword(''); | ... | ... |
... | ... | @@ -194,10 +194,10 @@ export const OrgSetter: React.FC<OrgSetterProps> = ({ |
194 | 194 | overlayClassName={'qx-pop-select'} |
195 | 195 | getPopupContainer={(triggerNode) => triggerNode} |
196 | 196 | arrowContent={false} |
197 | - visible={popVisible} | |
198 | - onVisibleChange={handlePopVisibleChange} | |
197 | + open={popVisible} | |
198 | + onOpenChange={handlePopVisibleChange} | |
199 | 199 | placement="bottom" |
200 | - trigger={disabled ? '' : 'click'} | |
200 | + trigger={disabled ? undefined : 'click'} | |
201 | 201 | > |
202 | 202 | <div |
203 | 203 | style={style || {}} | ... | ... |
1 | 1 | import React, { useEffect, useState, useMemo, useRef } from 'react'; |
2 | 2 | import { Input, Cascader } from 'antd'; |
3 | 3 | import { getDictDetail } from '../service'; |
4 | -import _ from 'lodash'; | |
4 | +import { cloneDeep, isEqual, isEmpty } from 'lodash-es'; | |
5 | 5 | |
6 | 6 | export interface FRWidgetProps { |
7 | 7 | title?: string; |
... | ... | @@ -96,7 +96,7 @@ const QxAddress: React.FC<FRWidgetProps> = (props) => { |
96 | 96 | // eslint-disable-next-line @typescript-eslint/no-shadow |
97 | 97 | const options: any = []; |
98 | 98 | Object.keys(opArr).forEach((key) => { |
99 | - let num = _.cloneDeep(level); | |
99 | + let num = cloneDeep(level); | |
100 | 100 | const option: any = { |
101 | 101 | value: opArr[key].value, |
102 | 102 | label: opArr[key].label, |
... | ... | @@ -142,10 +142,10 @@ const QxAddress: React.FC<FRWidgetProps> = (props) => { |
142 | 142 | _localCasValue = []; |
143 | 143 | _localTextValue = ''; |
144 | 144 | } |
145 | - if (!_.isEqual(_localCasValue, localCasValue)) { | |
145 | + if (!isEqual(_localCasValue, localCasValue)) { | |
146 | 146 | setLocalCasValue(_localCasValue); |
147 | 147 | } |
148 | - if (!_.isEqual(_localTextValue, localTextValue)) { | |
148 | + if (!isEqual(_localTextValue, localTextValue)) { | |
149 | 149 | setLocalTextValue(_localTextValue); |
150 | 150 | } |
151 | 151 | }, [props.value]); |
... | ... | @@ -191,10 +191,10 @@ const QxAddress: React.FC<FRWidgetProps> = (props) => { |
191 | 191 | |
192 | 192 | const handleChange = (changeObj: any) => { |
193 | 193 | const newObj = { localCasValue, localTextValue, ...changeObj }; |
194 | - if (!_.isEqual(localCasValue, newObj.localCasValue)) { | |
194 | + if (!isEqual(localCasValue, newObj.localCasValue)) { | |
195 | 195 | setLocalCasValue(newObj.localCasValue); |
196 | 196 | } |
197 | - if (!_.isEqual(localTextValue, newObj.localTextValue)) { | |
197 | + if (!isEqual(localTextValue, newObj.localTextValue)) { | |
198 | 198 | setLocalTextValue(newObj.localTextValue); |
199 | 199 | } |
200 | 200 | |
... | ... | @@ -248,7 +248,7 @@ const QxAddress: React.FC<FRWidgetProps> = (props) => { |
248 | 248 | /> |
249 | 249 | {detail ? ( |
250 | 250 | <Input |
251 | - disabled={props.disabled || _.isEmpty(localCasValue) || isDisabled} | |
251 | + disabled={props.disabled || isEmpty(localCasValue) || isDisabled} | |
252 | 252 | // defaultValue={finalProps.textDefaultValue} |
253 | 253 | value={localTextValue} |
254 | 254 | style={{ marginTop: '10px' }} | ... | ... |
1 | 1 | import React, { useEffect, useState } from 'react'; |
2 | 2 | import { Empty, Input, List, Modal, Tag } from 'antd'; |
3 | -import { CheckOutlined, CloseOutlined, SearchOutlined } from '@ant-design/icons'; | |
3 | +import { CheckOutlined, CloseOutlined } from '@ant-design/icons'; | |
4 | 4 | import { getPreviewSelect, getSelect } from '../service'; |
5 | 5 | import VirtualList from 'rc-virtual-list'; |
6 | 6 | import { ParamValueType } from '../../qx-filter-condition/filter'; |
... | ... | @@ -14,6 +14,7 @@ interface UserSelectProps { |
14 | 14 | getName: (str: string[]) => string; |
15 | 15 | modalClassName?: string | undefined; // 弹框类名自定义 用于自定义以及覆盖样式 |
16 | 16 | } |
17 | +import {QxBaseIcon} from '@qx/common'; | |
17 | 18 | |
18 | 19 | const CONTAINER_HEIGHT = 300; |
19 | 20 | |
... | ... | @@ -273,8 +274,8 @@ export const RelSetter: React.FC<UserSelectProps> = ({ |
273 | 274 | title="选择" |
274 | 275 | width={'640px'} |
275 | 276 | className={'qx-table-selector'} |
276 | - visible={visible} | |
277 | - destroyOnClose={true} | |
277 | + open={visible} | |
278 | + destroyOnClose | |
278 | 279 | onOk={handleOk} |
279 | 280 | onCancel={handleCancel} |
280 | 281 | wrapClassName={props?.modalClassName || ''} |
... | ... | @@ -285,7 +286,7 @@ export const RelSetter: React.FC<UserSelectProps> = ({ |
285 | 286 | className={'qx-selector-sub-search'} |
286 | 287 | placeholder={'输入关键字,回车搜索'} |
287 | 288 | allowClear |
288 | - prefix={<SearchOutlined />} | |
289 | + prefix={<QxBaseIcon type={'icon-app-search-line'} />} | |
289 | 290 | onChange={handleChange} |
290 | 291 | onPressEnter={(e) => { |
291 | 292 | handleSearch(e); | ... | ... |
1 | 1 | import React, { useCallback, useEffect, useState } from 'react'; |
2 | 2 | import { Empty, Input, Modal, Spin, Tag, Tree } from 'antd'; |
3 | -import { CloseOutlined, SearchOutlined } from '@ant-design/icons'; | |
3 | +import { CloseOutlined } from '@ant-design/icons'; | |
4 | 4 | import { getPreviewSelect, getSelect } from '../service'; |
5 | 5 | import { ParamValueType } from '../../qx-filter-condition/filter'; |
6 | +import {QxBaseIcon} from '@qx/common'; | |
6 | 7 | |
7 | 8 | interface UserSelectProps { |
8 | 9 | value?: string[]; |
... | ... | @@ -295,8 +296,8 @@ export const RelTreeSetter: React.FC<UserSelectProps> = ({ |
295 | 296 | title="选择" |
296 | 297 | width={'640px'} |
297 | 298 | className={'qx-table-selector'} |
298 | - visible={visible} | |
299 | - destroyOnClose={true} | |
299 | + open={visible} | |
300 | + destroyOnClose | |
300 | 301 | onOk={handleOk} |
301 | 302 | onCancel={handleCancel} |
302 | 303 | wrapClassName={props?.modalClassName || ''} |
... | ... | @@ -307,7 +308,7 @@ export const RelTreeSetter: React.FC<UserSelectProps> = ({ |
307 | 308 | style={{ borderBottom: '1px solid #f0f0f0' }} |
308 | 309 | placeholder={'请输入关键字,按回车键搜索'} |
309 | 310 | allowClear |
310 | - prefix={<SearchOutlined />} | |
311 | + prefix={<QxBaseIcon type={'icon-app-search-line'} />} | |
311 | 312 | onChange={(e) => { |
312 | 313 | handleChange(e); |
313 | 314 | }} | ... | ... |
... | ... | @@ -196,10 +196,10 @@ export const UserSetter: React.FC<UserSelectProps> = ({ |
196 | 196 | overlayClassName={'qx-pop-select'} |
197 | 197 | getPopupContainer={(triggerNode) => triggerNode} |
198 | 198 | arrowContent={false} |
199 | - visible={popVisible} | |
200 | - onVisibleChange={handlePopVisibleChange} | |
199 | + open={popVisible} | |
200 | + onOpenChange={handlePopVisibleChange} | |
201 | 201 | placement="bottom" |
202 | - trigger={disabled ? '' : 'click'} | |
202 | + trigger={disabled ? undefined : 'click'} | |
203 | 203 | > |
204 | 204 | <div |
205 | 205 | style={style || {}} | ... | ... |
... | ... | @@ -14,7 +14,7 @@ import moment from 'dayjs'; |
14 | 14 | import type { MappingValueProps } from '../qx-filter-condition/filter'; |
15 | 15 | import CodeEditor, { getAllVariable, VariableProps } from '../qx-code-editor'; |
16 | 16 | import { CloseOutlined, ControlOutlined, RightOutlined } from '@ant-design/icons'; |
17 | -import _ from 'lodash'; | |
17 | +import { cloneDeep, isEqual, isEmpty, findIndex, size } from 'lodash-es'; | |
18 | 18 | import { RelTreeSetter } from './components/rel-tree-setter'; |
19 | 19 | import { AddressSetter } from './components/address-setter'; |
20 | 20 | import {QxFieldPopover} from '../qx-field-popover'; |
... | ... | @@ -185,11 +185,11 @@ export const FieldSetter: React.FC<paramColSelectProps> = ({ |
185 | 185 | const currentElem = useRef<any>(); |
186 | 186 | const [valueLocal, setValueLocal] = useState<MappingValueProps[]>(); |
187 | 187 | useEffect(() => { |
188 | - setValueLocal(_.cloneDeep(value)); | |
188 | + setValueLocal(cloneDeep(value)); | |
189 | 189 | }, [JSON.stringify(value)]); |
190 | 190 | |
191 | 191 | useEffect(() => { |
192 | - const isSame = _.isEqual(value, valueLocal); | |
192 | + const isSame = isEqual(value, valueLocal); | |
193 | 193 | if (!valueLocal || isSame) { |
194 | 194 | if (props.formula === 'MOD' && (valueLocal || []).length > 2) { |
195 | 195 | onChange((valueLocal || []).slice(0, 2)); |
... | ... | @@ -290,7 +290,7 @@ export const FieldSetter: React.FC<paramColSelectProps> = ({ |
290 | 290 | index?: number, |
291 | 291 | isReplace?: boolean, |
292 | 292 | ) => { |
293 | - const valCp: string[] = _.cloneDeep(val); | |
293 | + const valCp: string[] = cloneDeep(val); | |
294 | 294 | let valueFin: string[] = valCp; |
295 | 295 | if (isMultiTag) { |
296 | 296 | if (Boolean(isReplace)) { |
... | ... | @@ -313,14 +313,14 @@ export const FieldSetter: React.FC<paramColSelectProps> = ({ |
313 | 313 | } |
314 | 314 | |
315 | 315 | if (isRange) { |
316 | - const oldVal = _.cloneDeep(valueLocal || []).map((v) => v.value) || []; | |
317 | - oldVal[index || 0] = _.cloneDeep(valueFin)[0]; | |
316 | + const oldVal = cloneDeep(valueLocal || []).map((v) => v.value) || []; | |
317 | + oldVal[index || 0] = cloneDeep(valueFin)[0]; | |
318 | 318 | valueFin = oldVal; |
319 | 319 | } |
320 | 320 | const mappingValuesNew: MappingValueProps[] = []; |
321 | 321 | (valueFin || []).map((v: string) => { |
322 | 322 | if (isMultiTag) { |
323 | - const i = _.findIndex(mappingValuesNew, (o: any) => { | |
323 | + const i = findIndex(mappingValuesNew, (o: any) => { | |
324 | 324 | return o.type === valueType && o.value === v; |
325 | 325 | }); |
326 | 326 | if (i > -1) { |
... | ... | @@ -342,7 +342,7 @@ export const FieldSetter: React.FC<paramColSelectProps> = ({ |
342 | 342 | |
343 | 343 | const onFilterExtValueChange = (val: any) => { |
344 | 344 | setValueLocal((prevState) => { |
345 | - const valCp = _.cloneDeep(prevState); | |
345 | + const valCp = cloneDeep(prevState); | |
346 | 346 | if (valCp && valCp?.length > 0) { |
347 | 347 | valCp[0].extVal = val || ''; |
348 | 348 | } |
... | ... | @@ -580,7 +580,7 @@ export const FieldSetter: React.FC<paramColSelectProps> = ({ |
580 | 580 | * @param type |
581 | 581 | */ |
582 | 582 | function getMappingValues(mValues: MappingValueProps[], type?: ParamValueType) { |
583 | - if (!mValues || _.size(mValues) === 0) { | |
583 | + if (!mValues || size(mValues) === 0) { | |
584 | 584 | return []; |
585 | 585 | } |
586 | 586 | if (type) { |
... | ... | @@ -592,7 +592,7 @@ export const FieldSetter: React.FC<paramColSelectProps> = ({ |
592 | 592 | } |
593 | 593 | |
594 | 594 | function getMappingExtValue(mValues: MappingValueProps[], type?: ParamValueType) { |
595 | - if (!mValues || _.size(mValues) === 0) { | |
595 | + if (!mValues || size(mValues) === 0) { | |
596 | 596 | return []; |
597 | 597 | } |
598 | 598 | if (type) { |
... | ... | @@ -767,7 +767,7 @@ export const FieldSetter: React.FC<paramColSelectProps> = ({ |
767 | 767 | ); |
768 | 768 | |
769 | 769 | // "值选项集"按查询参数对应类型过滤 |
770 | - const colsTreeCurr = _.cloneDeep(colsTree); | |
770 | + const colsTreeCurr = cloneDeep(colsTree); | |
771 | 771 | // 是人员、组织、日期类型时,按类型过滤数据 |
772 | 772 | let colsTreeProps = colsTreeCurr || []; |
773 | 773 | // 类型匹配处理,当前为只列出类型相同的属性 todo |
... | ... | @@ -776,7 +776,7 @@ export const FieldSetter: React.FC<paramColSelectProps> = ({ |
776 | 776 | } |
777 | 777 | |
778 | 778 | // 禁用选项 |
779 | - if (excludeKeys && _.size(excludeKeys) > 0) { | |
779 | + if (excludeKeys && size(excludeKeys) > 0) { | |
780 | 780 | colsTreeProps = colsTreeProps?.filter((co: ColsTreeProps) => excludeKeys.includes(co.key)); |
781 | 781 | colsTreeProps.map((col) => { |
782 | 782 | col.children = col?.children?.filter((co: ColsTreeProps) => excludeKeys.includes(co.key)); |
... | ... | @@ -1326,7 +1326,7 @@ export const FieldSetter: React.FC<paramColSelectProps> = ({ |
1326 | 1326 | // 原值类型 |
1327 | 1327 | let valueType: any; |
1328 | 1328 | // 查询原值(如果存在于`valueLocal`下)类型 |
1329 | - const i = _.findIndex(valueLocal, (it) => { | |
1329 | + const i = findIndex(valueLocal, (it) => { | |
1330 | 1330 | return it?.value === val[0]; |
1331 | 1331 | }); |
1332 | 1332 | |
... | ... | @@ -1519,7 +1519,7 @@ export const FieldSetter: React.FC<paramColSelectProps> = ({ |
1519 | 1519 | } |
1520 | 1520 | placeholder="请输入日期(时间)" |
1521 | 1521 | defaultValue={ |
1522 | - !_.isEmpty(getMappingExtValue(valueLocal || [], ParamValueType.MANUAL)) | |
1522 | + !isEmpty(getMappingExtValue(valueLocal || [], ParamValueType.MANUAL)) | |
1523 | 1523 | ? moment( |
1524 | 1524 | getMappingExtValue(valueLocal || [], ParamValueType.MANUAL), |
1525 | 1525 | formatEnum[ |
... | ... | @@ -1533,7 +1533,7 @@ export const FieldSetter: React.FC<paramColSelectProps> = ({ |
1533 | 1533 | : undefined |
1534 | 1534 | } |
1535 | 1535 | value={ |
1536 | - !_.isEmpty(getMappingExtValue(valueLocal || [], ParamValueType.MANUAL)) | |
1536 | + !isEmpty(getMappingExtValue(valueLocal || [], ParamValueType.MANUAL)) | |
1537 | 1537 | ? moment( |
1538 | 1538 | getMappingExtValue(valueLocal || [], ParamValueType.MANUAL), |
1539 | 1539 | formatEnum[ |
... | ... | @@ -1555,7 +1555,7 @@ export const FieldSetter: React.FC<paramColSelectProps> = ({ |
1555 | 1555 | style={{ width: '100%', marginTop: '6px' }} |
1556 | 1556 | placeholder="请输入时间" |
1557 | 1557 | defaultValue={ |
1558 | - !_.isEmpty(getMappingExtValue(valueLocal || [], ParamValueType.MANUAL)) | |
1558 | + !isEmpty(getMappingExtValue(valueLocal || [], ParamValueType.MANUAL)) | |
1559 | 1559 | ? moment( |
1560 | 1560 | getMappingExtValue(valueLocal || [], ParamValueType.MANUAL), |
1561 | 1561 | formatEnum[ |
... | ... | @@ -1569,7 +1569,7 @@ export const FieldSetter: React.FC<paramColSelectProps> = ({ |
1569 | 1569 | : undefined |
1570 | 1570 | } |
1571 | 1571 | value={ |
1572 | - !_.isEmpty(getMappingExtValue(valueLocal || [], ParamValueType.MANUAL)) | |
1572 | + !isEmpty(getMappingExtValue(valueLocal || [], ParamValueType.MANUAL)) | |
1573 | 1573 | ? moment( |
1574 | 1574 | getMappingExtValue(valueLocal || [], ParamValueType.MANUAL), |
1575 | 1575 | formatEnum[ |
... | ... | @@ -1594,7 +1594,7 @@ export const FieldSetter: React.FC<paramColSelectProps> = ({ |
1594 | 1594 | } |
1595 | 1595 | onChange={(date, dateString) => { |
1596 | 1596 | setValueLocal((prevState) => { |
1597 | - let valCp: any = _.cloneDeep(prevState); | |
1597 | + let valCp: any = cloneDeep(prevState); | |
1598 | 1598 | if (valCp && valCp?.length > 0) { |
1599 | 1599 | valCp[0].value = '__action_time'; |
1600 | 1600 | valCp[0].extVal = dateString || ''; | ... | ... |
... | ... | @@ -5,9 +5,9 @@ import { FC, ReactElement, useEffect, useState } from 'react'; |
5 | 5 | import type { OptionField } from '../type'; |
6 | 6 | import { getUsefulFieldProp } from '../util'; |
7 | 7 | import QxFieldItem from '../item'; |
8 | -import { SearchOutlined } from '@ant-design/icons'; | |
9 | 8 | import './style.less'; |
10 | 9 | import Checkbox from 'antd/es/checkbox/Checkbox'; |
10 | +import {QxBaseIcon} from '@qx/common'; | |
11 | 11 | |
12 | 12 | interface QxFieldPopoverProp { |
13 | 13 | data: OptionField[]; |
... | ... | @@ -42,7 +42,7 @@ const FieldsCheckboxGroup: FC<FieldsCheckboxGroupProps> = (props) => { |
42 | 42 | className={'qx-selector-sub-search'} |
43 | 43 | placeholder={'请输入字段名'} |
44 | 44 | allowClear |
45 | - prefix={<SearchOutlined />} | |
45 | + prefix={<QxBaseIcon type={'icon-app-search-line'} />} | |
46 | 46 | onChange={(e) => { |
47 | 47 | setKey(e.target.value.trim()); |
48 | 48 | }} |
... | ... | @@ -90,6 +90,7 @@ interface QxCheckboxFieldPopoverProp extends QxFieldPopoverProp { |
90 | 90 | isChecked: boolean, |
91 | 91 | ) => void; |
92 | 92 | values?: string[]; |
93 | + children?: any; | |
93 | 94 | } |
94 | 95 | |
95 | 96 | const QxCheckboxFieldPopover: React.FC<QxCheckboxFieldPopoverProp> = (props) => { |
... | ... | @@ -131,13 +132,13 @@ const QxCheckboxFieldPopover: React.FC<QxCheckboxFieldPopoverProp> = (props) => |
131 | 132 | <FieldsCheckboxGroup fields={fields} onChange={props.onChange} values={props.values} /> |
132 | 133 | } |
133 | 134 | placement={'bottomRight'} |
134 | - trigger={props.disabled ? '' : props.trigger || 'hover'} | |
135 | - visible={visible} | |
136 | - onVisibleChange={(v) => { | |
135 | + trigger={props.disabled ? undefined : props.trigger || 'hover'} | |
136 | + open={visible} | |
137 | + onOpenChange={(v) => { | |
137 | 138 | setVisible(v); |
138 | 139 | }} |
139 | 140 | > |
140 | - {props.children} | |
141 | + {props?.children} | |
141 | 142 | </Popover> |
142 | 143 | ); |
143 | 144 | }; | ... | ... |
... | ... | @@ -7,11 +7,10 @@ import type { OptionField } from '../type'; |
7 | 7 | import { getUsefulFieldProp } from '../util'; |
8 | 8 | // import {flatFields, getUsefulFieldProp} from '../util'; |
9 | 9 | import QxFieldItem from '../item'; |
10 | -// import classNames from "classnames"; | |
11 | -import { SearchOutlined } from '@ant-design/icons'; | |
10 | +import {QxBaseIcon} from '@qx/common'; | |
12 | 11 | import './style.less'; |
13 | 12 | import { useDebounceFn } from 'ahooks'; |
14 | -import _ from 'lodash'; | |
13 | +import { isEmpty } from 'lodash-es'; | |
15 | 14 | |
16 | 15 | interface QxFieldPopoverProp { |
17 | 16 | data: OptionField[]; |
... | ... | @@ -55,7 +54,7 @@ const QxFieldPopover: React.FC<QxFieldPopoverProp> = (props) => { |
55 | 54 | }); |
56 | 55 | }; |
57 | 56 | useEffect(() => { |
58 | - if (!_.isEmpty(props.data)) { | |
57 | + if (!isEmpty(props.data)) { | |
59 | 58 | const _fields = excludeFields(props.data); |
60 | 59 | setFields(_fields); |
61 | 60 | setFilterFields(_fields); |
... | ... | @@ -132,7 +131,7 @@ const QxFieldPopover: React.FC<QxFieldPopoverProp> = (props) => { |
132 | 131 | className={'qx-selector-sub-search'} |
133 | 132 | placeholder={'搜索'} |
134 | 133 | allowClear |
135 | - prefix={<SearchOutlined />} | |
134 | + prefix={<QxBaseIcon type={'icon-app-search-line'} />} | |
136 | 135 | style={{ paddingTop: '6px' }} |
137 | 136 | onChange={(e) => { |
138 | 137 | handleChange(e.target.value); |
... | ... | @@ -242,13 +241,13 @@ const QxFieldPopover: React.FC<QxFieldPopoverProp> = (props) => { |
242 | 241 | // getPopupContainer={(triggerNode) => triggerNode} |
243 | 242 | content={fieldsPopContent()} |
244 | 243 | placement={'bottomRight'} |
245 | - trigger={props.disabled ? '' : props.trigger || 'hover'} | |
246 | - visible={visible} | |
247 | - onVisibleChange={(v) => { | |
244 | + trigger={props.disabled ? undefined : props.trigger || 'hover'} | |
245 | + open={visible} | |
246 | + onOpenChange={(v) => { | |
248 | 247 | setVisible(v); |
249 | 248 | }} |
250 | 249 | > |
251 | - {props.children} | |
250 | + {props?.children} | |
252 | 251 | </Popover> |
253 | 252 | ); |
254 | 253 | }; | ... | ... |
1 | +@import '~@qx/ui/src/style/variable.less'; | |
2 | + | |
1 | 3 | .qx-fields-popover { |
2 | 4 | padding-top: 0; |
3 | 5 | |
... | ... | @@ -22,7 +24,7 @@ |
22 | 24 | cursor: pointer; |
23 | 25 | |
24 | 26 | &:hover { |
25 | - background-color: @item-hover-bg; | |
27 | + background-color: @N3; | |
26 | 28 | } |
27 | 29 | } |
28 | 30 | } |
... | ... | @@ -35,7 +37,7 @@ |
35 | 37 | &.ant-menu-inline > .ant-menu-submenu > .ant-menu-submenu-title { |
36 | 38 | margin-top: 0; |
37 | 39 | margin-bottom: 1px; |
38 | - background-color: #fafafa; | |
40 | + background-color: @N2; | |
39 | 41 | } |
40 | 42 | |
41 | 43 | .ant-menu-sub.ant-menu-inline { |
... | ... | @@ -50,7 +52,7 @@ |
50 | 52 | |
51 | 53 | &:hover { |
52 | 54 | color: inherit; |
53 | - background-color: @item-hover-bg; | |
55 | + background-color: @N3; | |
54 | 56 | } |
55 | 57 | } |
56 | 58 | } |
... | ... | @@ -58,5 +60,5 @@ |
58 | 60 | padding-top: 5px; |
59 | 61 | padding-bottom: 5px; |
60 | 62 | padding-left: 24px; |
61 | - border-top: 1px solid #f0f0f0; | |
63 | + border-top: 1px solid @N4; | |
62 | 64 | } | ... | ... |
... | ... | @@ -2,7 +2,7 @@ import { Input, Popover, Tree } from 'antd'; |
2 | 2 | import React from 'react'; |
3 | 3 | import { FC, ReactElement, useEffect, useState } from 'react'; |
4 | 4 | import type { OptionField } from '../type'; |
5 | -import { SearchOutlined } from '@ant-design/icons'; | |
5 | +import {QxBaseIcon} from '@qx/common'; | |
6 | 6 | import './style.less'; |
7 | 7 | |
8 | 8 | interface QxFieldPopoverProp { |
... | ... | @@ -29,8 +29,8 @@ const ParametersTreeGroup: FC<FieldsCheckboxGroupProps> = (props) => { |
29 | 29 | const [keyword, setKey] = useState(''); |
30 | 30 | |
31 | 31 | const [autoExpandParent, setAutoExpandParent] = useState<boolean>(true); |
32 | - const [expandedKeys, setExpandedKeys] = useState<React.Key[]>([]); | |
33 | - const [checkedKeys, setCheckedKeys] = useState<React.Key[]>([]); | |
32 | + const [expandedKeys, setExpandedKeys] = useState<any>([]); | |
33 | + const [checkedKeys, setCheckedKeys] = useState<any>([]); | |
34 | 34 | |
35 | 35 | const [treeData, setTreeData] = useState<any[]>([]); |
36 | 36 | |
... | ... | @@ -67,7 +67,7 @@ const ParametersTreeGroup: FC<FieldsCheckboxGroupProps> = (props) => { |
67 | 67 | setAutoExpandParent(false); |
68 | 68 | }; |
69 | 69 | |
70 | - const onCheck = (checkedKeysValue: React.Key[], Item: any) => { | |
70 | + const onCheck = (checkedKeysValue: any, Item: any) => { | |
71 | 71 | console.log('onCheck', checkedKeysValue, Item, checkedKeysValue?.checked); |
72 | 72 | setCheckedKeys(checkedKeysValue); |
73 | 73 | const chooseId = Item?.node?.id; |
... | ... | @@ -83,7 +83,7 @@ const ParametersTreeGroup: FC<FieldsCheckboxGroupProps> = (props) => { |
83 | 83 | |
84 | 84 | const KeysArr: any[] = []; |
85 | 85 | const loop = (data: any): any => |
86 | - data.map((item) => { | |
86 | + data.map((item: any) => { | |
87 | 87 | const strTitle = item.title as string; |
88 | 88 | const index = strTitle.indexOf(keyword); |
89 | 89 | const beforeStr = strTitle.substring(0, index); |
... | ... | @@ -123,7 +123,7 @@ const ParametersTreeGroup: FC<FieldsCheckboxGroupProps> = (props) => { |
123 | 123 | className={'qx-selector-sub-search'} |
124 | 124 | placeholder={'请输入参数名称搜索'} |
125 | 125 | allowClear |
126 | - prefix={<SearchOutlined />} | |
126 | + prefix={<QxBaseIcon type={'icon-app-search-line'} />} | |
127 | 127 | onChange={(e) => { |
128 | 128 | setKey(e.target.value.trim()); |
129 | 129 | }} |
... | ... | @@ -152,6 +152,7 @@ const ParametersTreeGroup: FC<FieldsCheckboxGroupProps> = (props) => { |
152 | 152 | interface QxTreeParameterPopoverProp extends QxFieldPopoverProp { |
153 | 153 | onChange: (selectedKey: string, selectedItem: OptionField, isChecked: boolean) => void; |
154 | 154 | values?: string[]; |
155 | + children?: any; | |
155 | 156 | } |
156 | 157 | |
157 | 158 | const QxTreeParameterPopover: React.FC<QxTreeParameterPopoverProp> = (props) => { |
... | ... | @@ -172,7 +173,7 @@ const QxTreeParameterPopover: React.FC<QxTreeParameterPopoverProp> = (props) => |
172 | 173 | // console.log(props.data); |
173 | 174 | if (props.data) { |
174 | 175 | const _fields = excludeFields(props?.data); |
175 | - setFields(_fields); | |
176 | + setFields(_fields || []); | |
176 | 177 | } |
177 | 178 | }, [props.data]); |
178 | 179 | |
... | ... | @@ -183,13 +184,13 @@ const QxTreeParameterPopover: React.FC<QxTreeParameterPopoverProp> = (props) => |
183 | 184 | <ParametersTreeGroup fields={fields} onChange={props.onChange} values={props.values} /> |
184 | 185 | } |
185 | 186 | placement={'bottomRight'} |
186 | - trigger={props.disabled ? '' : props.trigger || 'hover'} | |
187 | - visible={visible} | |
188 | - onVisibleChange={(v) => { | |
187 | + trigger={props.disabled ? undefined : props.trigger || 'hover'} | |
188 | + open={visible} | |
189 | + onOpenChange={(v) => { | |
189 | 190 | setVisible(v); |
190 | 191 | }} |
191 | 192 | > |
192 | - {props.children} | |
193 | + {props?.children} | |
193 | 194 | </Popover> |
194 | 195 | ); |
195 | 196 | }; | ... | ... |
... | ... | @@ -87,7 +87,7 @@ const QxFieldSelect: React.FC = (props: any) => { |
87 | 87 | useEffect(() => { |
88 | 88 | if (schemaProps && !schemaProps.data && schemaProps.params && fields.length === 0) { |
89 | 89 | const { ...otherParams } = schemaProps.params; |
90 | - getFieldOptions(appCode, funCode, otherParams).then((res) => { | |
90 | + getFieldOptions(appCode, funCode, otherParams).then((res: any) => { | |
91 | 91 | setFields(includeFields(res)); |
92 | 92 | }); |
93 | 93 | } else if (schemaProps && schemaProps.data) { |
... | ... | @@ -126,7 +126,7 @@ const QxFieldSelect: React.FC = (props: any) => { |
126 | 126 | // @ts-ignore |
127 | 127 | return ( |
128 | 128 | ((fields || []) as any) |
129 | - .filter((field) => field.code === option.key)[0] | |
129 | + .filter((field: { code: string }) => field.code === option.key)[0] | |
130 | 130 | .name?.indexOf(input) > -1 |
131 | 131 | ); |
132 | 132 | } | ... | ... |
1 | +@import '~@qx/ui/src/style/variable.less'; | |
2 | + | |
1 | 3 | .select_mask { |
2 | 4 | position: absolute; |
3 | 5 | z-index: 9; |
4 | 6 | width: 100%; |
5 | 7 | height: 100%; |
6 | 8 | text-align: center; |
7 | - background-color: @red-1; | |
8 | - border: 1px solid @btn-danger-border; | |
9 | - border-radius: @btn-border-radius-base; | |
9 | + background-color: @E1; | |
10 | + border: 1px solid @E2; | |
11 | + border-radius: 4px; | |
10 | 12 | pointer-events: none; |
11 | 13 | } |
12 | 14 | |
13 | 15 | .select_mask_text { |
14 | 16 | z-index: 13; |
15 | - color: @error-color; | |
17 | + color: @E3; | |
16 | 18 | font-size: 14px; |
17 | 19 | line-height: 30px; |
18 | 20 | text-align: center; | ... | ... |
... | ... | @@ -29,7 +29,7 @@ export const getUsefulFieldProp = (field: any) => { |
29 | 29 | * @param excludeWidgets |
30 | 30 | */ |
31 | 31 | export const flatFields = (fields: WidgetField[] | OptionField[], excludeWidgets?: string[]) => { |
32 | - const fieldFlatten = {}; | |
32 | + const fieldFlatten: any = {}; | |
33 | 33 | fields.forEach((field: any) => { |
34 | 34 | const { code, widget } = getUsefulFieldProp(field); |
35 | 35 | if (excludeWidgets && excludeWidgets.indexOf(widget) > -1) { | ... | ... |
1 | +import React, { useCallback, useRef } from 'react'; | |
1 | 2 | import { BlockOutlined } from '@ant-design/icons'; |
2 | 3 | import { useSetState } from 'ahooks'; |
3 | 4 | import { Button } from 'antd'; |
4 | 5 | import cls from 'classnames'; |
5 | -import React, { useCallback, useRef } from 'react'; | |
6 | 6 | import { QxAppSelector } from '../qx-app-selector'; |
7 | 7 | import type { InputSelectProps } from '../qx-input-select'; |
8 | 8 | import { QxInputSelect } from '../qx-input-select'; | ... | ... |
1 | +@import '~@qx/ui/src/style/variable.less'; | |
2 | + | |
1 | 3 | @prefix: ~'qx-datasource-select'; |
2 | 4 | |
3 | 5 | .@{prefix} { |
... | ... | @@ -8,6 +10,6 @@ |
8 | 10 | height: 50px !important; |
9 | 11 | text-align: left !important; |
10 | 12 | background-color: #fff !important; |
11 | - border-top: 1px solid #e6eaf2 !important; | |
13 | + border-top: 1px solid @N4 !important; | |
12 | 14 | } |
13 | 15 | } | ... | ... |
... | ... | @@ -2,9 +2,9 @@ import * as React from 'react'; |
2 | 2 | import { useCallback, useEffect, useImperativeHandle, useState } from 'react'; |
3 | 3 | import { Checkbox, Empty, Input, Spin } from 'antd'; |
4 | 4 | import Menu from 'antd/es/menu'; |
5 | -import { SearchOutlined } from '@ant-design/icons'; | |
5 | +import {QxBaseIcon} from '@qx/common'; | |
6 | 6 | import { getGroups } from './service'; |
7 | -import _ from 'lodash'; | |
7 | +import { cloneDeep } from 'lodash-es'; | |
8 | 8 | |
9 | 9 | type GroupCoreProps = { |
10 | 10 | appId?: string; |
... | ... | @@ -144,7 +144,7 @@ const GroupSelCore: React.FC<GroupCoreProps> = ({ |
144 | 144 | }; |
145 | 145 | |
146 | 146 | if (data) { |
147 | - const _data = _.cloneDeep(data); | |
147 | + const _data = cloneDeep(data); | |
148 | 148 | _data.forEach((item) => { |
149 | 149 | traverse(item); |
150 | 150 | }); |
... | ... | @@ -189,7 +189,7 @@ const GroupSelCore: React.FC<GroupCoreProps> = ({ |
189 | 189 | className={'qx-selector-sub-search'} |
190 | 190 | placeholder={placeholder || '请输入群组名称,按回车键搜索'} |
191 | 191 | allowClear |
192 | - prefix={<SearchOutlined />} | |
192 | + prefix={<QxBaseIcon type={'icon-app-search-line'} />} | |
193 | 193 | onChange={(e) => { |
194 | 194 | handleChange(e); |
195 | 195 | }} | ... | ... |
1 | -import { SearchOutlined } from '@ant-design/icons'; | |
2 | -import { useScroll } from 'ahooks'; | |
3 | -import { Empty, Input, Menu, Spin } from 'antd'; | |
4 | -import cls from 'classnames'; | |
5 | -import { debounce } from 'lodash'; | |
6 | 1 | import React, { |
7 | 2 | memo, |
8 | 3 | useCallback, |
... | ... | @@ -11,6 +6,11 @@ import React, { |
11 | 6 | useRef, |
12 | 7 | useState, |
13 | 8 | } from 'react'; |
9 | +import {QxBaseIcon} from '@qx/common'; | |
10 | +import { useScroll } from 'ahooks'; | |
11 | +import { Empty, Input, Menu, Spin } from 'antd'; | |
12 | +import cls from 'classnames'; | |
13 | +import { debounce } from 'lodash-es'; | |
14 | 14 | import './styles.less'; |
15 | 15 | const prefix = 'qx-input-select-dropdown'; |
16 | 16 | |
... | ... | @@ -115,7 +115,7 @@ const DropdownContent = React.forwardRef<any, DropdownContentProps>( |
115 | 115 | {showSearch ? ( |
116 | 116 | <Input |
117 | 117 | placeholder={placeholder || '输入名称搜索'} |
118 | - prefix={<SearchOutlined />} | |
118 | + prefix={<QxBaseIcon type={'icon-app-search-line'} />} | |
119 | 119 | className={`${prefix}__input`} |
120 | 120 | onChange={onSearch} |
121 | 121 | /> | ... | ... |
... | ... | @@ -62,11 +62,11 @@ export const QxInputSelect = React.forwardRef<any, InputSelectProps>( |
62 | 62 | return ( |
63 | 63 | <div className={cls(prefix, className)}> |
64 | 64 | <Dropdown |
65 | - visible={state.visible} | |
65 | + open={state.visible} | |
66 | 66 | destroyPopupOnHide |
67 | 67 | trigger={['click']} |
68 | 68 | className={`${prefix}__dropdown`} |
69 | - overlay={() => ( | |
69 | + dropdownRender={() => ( | |
70 | 70 | <DropdownContent |
71 | 71 | options={options} |
72 | 72 | onChange={handleChange} |
... | ... | @@ -74,7 +74,7 @@ export const QxInputSelect = React.forwardRef<any, InputSelectProps>( |
74 | 74 | /> |
75 | 75 | )} |
76 | 76 | getPopupContainer={(triggerNode) => triggerNode} |
77 | - onVisibleChange={onVisibleChange} | |
77 | + onOpenChange={onVisibleChange} | |
78 | 78 | disabled={disabled} |
79 | 79 | > |
80 | 80 | <Input | ... | ... |
... | ... | @@ -31,7 +31,7 @@ |
31 | 31 | margin-bottom: 0; |
32 | 32 | |
33 | 33 | &:hover { |
34 | - background-color: #f5f5f5; | |
34 | + background-color: @N3; | |
35 | 35 | } |
36 | 36 | } |
37 | 37 | } |
... | ... | @@ -54,7 +54,7 @@ |
54 | 54 | padding-bottom: 5px !important; |
55 | 55 | padding-left: 0 !important; |
56 | 56 | border: none !important; |
57 | - border-bottom: 1px solid #e6eaf2 !important; | |
57 | + border-bottom: 1px solid @N4 !important; | |
58 | 58 | outline: none !important; |
59 | 59 | box-shadow: none !important; |
60 | 60 | ... | ... |
1 | +@import '~@qx/ui/src/style/variable.less'; | |
2 | + | |
1 | 3 | .qx-search-tree__wrap { |
2 | 4 | height: 100%; |
3 | 5 | overflow: auto; |
... | ... | @@ -8,8 +10,8 @@ |
8 | 10 | |
9 | 11 | .ant-tree .ant-tree-node-content-wrapper.ant-tree-node-selected { |
10 | 12 | // TODO 主题色更改 颜色暂时写死 |
11 | - color: #1764ff; | |
12 | - background-color: #e6f7ff; | |
13 | + color: @B8; | |
14 | + background-color: @B3; | |
13 | 15 | } |
14 | 16 | } |
15 | 17 | ... | ... |
... | ... | @@ -3,8 +3,9 @@ import { useCallback, useEffect, useImperativeHandle, useState } from 'react'; |
3 | 3 | import { Empty, Input, Spin, Tooltip, Tree } from 'antd'; |
4 | 4 | import './core.less'; |
5 | 5 | import { getOrgTree } from './service'; |
6 | -import _ from 'lodash'; | |
7 | -import { PartitionOutlined, SearchOutlined } from '@ant-design/icons'; | |
6 | +import { cloneDeep } from 'lodash-es'; | |
7 | +import { PartitionOutlined } from '@ant-design/icons'; | |
8 | +import {QxBaseIcon} from '@qx/common'; | |
8 | 9 | |
9 | 10 | type OrgCoreProps = { |
10 | 11 | cRef?: any; |
... | ... | @@ -243,7 +244,7 @@ const OrgCore: React.FC<OrgCoreProps> = (props) => { |
243 | 244 | }; |
244 | 245 | |
245 | 246 | if (data) { |
246 | - const _data = _.cloneDeep(data); | |
247 | + const _data = cloneDeep(data); | |
247 | 248 | if (word != '') { |
248 | 249 | traverse(_data); |
249 | 250 | } |
... | ... | @@ -301,7 +302,7 @@ const OrgCore: React.FC<OrgCoreProps> = (props) => { |
301 | 302 | className={'qx-selector-sub-search'} |
302 | 303 | placeholder={props.placeholder || '请输入部门名称,按回车键搜索'} |
303 | 304 | allowClear |
304 | - prefix={<SearchOutlined />} | |
305 | + prefix={<QxBaseIcon type={'icon-app-search-line'} />} | |
305 | 306 | onChange={(e) => { |
306 | 307 | handleChange(e); |
307 | 308 | }} | ... | ... |
1 | -import * as React from 'react'; | |
2 | -import { useEffect, useRef, useState } from 'react'; | |
1 | +import React, { useEffect, useRef, useState } from 'react'; | |
3 | 2 | import { Modal, Tag } from 'antd'; |
4 | 3 | import OrgCore from './core'; |
5 | 4 | |
... | ... | @@ -56,7 +55,7 @@ const OrgSelectorDialog: React.FC<OrgSelectorDialogProps> = (props) => { |
56 | 55 | <Modal |
57 | 56 | title={props.title || '选择部门'} |
58 | 57 | width={560} |
59 | - visible={props.visible} | |
58 | + open={props.visible} | |
60 | 59 | className={'qx-org-selector__dialog'} |
61 | 60 | onOk={handleOk} |
62 | 61 | onCancel={handleCancel} | ... | ... |
... | ... | @@ -103,7 +103,7 @@ const QxOrgSelector: React.FC<QxOrgSelectorProps> = (props) => { |
103 | 103 | }, [JSON.stringify(props.defaultData)]); |
104 | 104 | |
105 | 105 | // getUserList() |
106 | - const handleOk = (keys: [], data: []) => { | |
106 | + const handleOk = (keys: any[], data: any[]) => { | |
107 | 107 | let _value: [] | string = keys; |
108 | 108 | if (!props.multiple && keys && keys.length > 0) { |
109 | 109 | // @ts-ignore | ... | ... |
1 | +@import '~@qx/ui/src/style/variable.less'; | |
2 | + | |
1 | 3 | .qx-org-selector { |
2 | 4 | padding-left: 8px; |
3 | 5 | line-height: 0; |
... | ... | @@ -55,7 +57,7 @@ |
55 | 57 | |
56 | 58 | .qx-selector-sub-search.ant-input-affix-wrapper { |
57 | 59 | margin-bottom: 8px; |
58 | - border-bottom: 1px solid #f0f0f0; | |
60 | + border-bottom: 1px solid @N4; | |
59 | 61 | } |
60 | 62 | } |
61 | 63 | |
... | ... | @@ -68,7 +70,7 @@ |
68 | 70 | height: 60px; |
69 | 71 | padding: 5px; |
70 | 72 | overflow: auto; |
71 | - border-bottom: 1px solid #f0f0f0; | |
73 | + border-bottom: 1px solid @N4; | |
72 | 74 | |
73 | 75 | .ant-tag { |
74 | 76 | margin: 1px 2px; |
... | ... | @@ -82,14 +84,14 @@ |
82 | 84 | |
83 | 85 | .qx-org-tree__include { |
84 | 86 | margin-left: 10px; |
85 | - color: #999; | |
87 | + color: @N7; | |
86 | 88 | font-size: 16px; |
87 | 89 | |
88 | 90 | &:hover { |
89 | - color: #333; | |
91 | + color: @N9; | |
90 | 92 | } |
91 | 93 | |
92 | 94 | .active { |
93 | - color: #1890ff; | |
95 | + color: @B8; | |
94 | 96 | } |
95 | 97 | } | ... | ... |
... | ... | @@ -3,7 +3,6 @@ |
3 | 3 | import { |
4 | 4 | DeleteOutlined, |
5 | 5 | PlusOutlined, |
6 | - SearchOutlined, | |
7 | 6 | SisternodeOutlined, |
8 | 7 | SnippetsOutlined, |
9 | 8 | } from '@ant-design/icons'; |
... | ... | @@ -40,8 +39,10 @@ import { formatEnum } from './constant'; |
40 | 39 | // typeTranslateItemtype, |
41 | 40 | // } from './constant'; |
42 | 41 | // import { Controlled as CodeMirror } from 'react-codemirror2' |
43 | -import _ from 'lodash'; | |
42 | +import { cloneDeep } from 'lodash-es'; | |
44 | 43 | import moment from 'dayjs'; |
44 | +import {QxBaseIcon} from '@qx/common'; | |
45 | + | |
45 | 46 | const valueOptions = [ |
46 | 47 | { key: 'STRING', title: '文本' }, |
47 | 48 | { key: 'NUMBER', title: '数字' }, |
... | ... | @@ -125,7 +126,7 @@ const ParameterModal: React.FC<ParameterSettingProps> = (props) => { |
125 | 126 | |
126 | 127 | //判断数组是否只有一个子节点 |
127 | 128 | const checkShowAdd = (_data: any) => { |
128 | - const _newTreeData = _.cloneDeep(treeData); | |
129 | + const _newTreeData = cloneDeep(treeData); | |
129 | 130 | if (!!_data.pid) { |
130 | 131 | const pidIndex = _newTreeData.findIndex( |
131 | 132 | (item: any) => item.id === _data.pid, |
... | ... | @@ -870,7 +871,7 @@ const ParameterModal: React.FC<ParameterSettingProps> = (props) => { |
870 | 871 | const dropId = |
871 | 872 | dropCol.getAttribute('data-row-key') || |
872 | 873 | dropCol.getAttribute('id')?.slice(4); |
873 | - const _newTreeData = _.cloneDeep(treeData); | |
874 | + const _newTreeData = cloneDeep(treeData); | |
874 | 875 | const dragIndex = _newTreeData.findIndex( |
875 | 876 | (item: any) => item.id === dragId, |
876 | 877 | ); //要drop的index |
... | ... | @@ -947,7 +948,7 @@ const ParameterModal: React.FC<ParameterSettingProps> = (props) => { |
947 | 948 | <> |
948 | 949 | <Modal |
949 | 950 | title="高级参数设计器" |
950 | - visible={visible} | |
951 | + open={visible} | |
951 | 952 | destroyOnClose |
952 | 953 | footer={null} |
953 | 954 | // onOk={handleCancel} |
... | ... | @@ -986,7 +987,7 @@ const ParameterModal: React.FC<ParameterSettingProps> = (props) => { |
986 | 987 | <Input |
987 | 988 | className={'qx-parameter-setting--search'} |
988 | 989 | placeholder="按名称搜索" |
989 | - prefix={<SearchOutlined />} | |
990 | + prefix={<QxBaseIcon type={'icon-app-search-line'} />} | |
990 | 991 | onChange={onChange} |
991 | 992 | style={{ width: 219 }} |
992 | 993 | /> |
... | ... | @@ -1019,11 +1020,12 @@ const ParameterModal: React.FC<ParameterSettingProps> = (props) => { |
1019 | 1020 | // <Form form={form}> |
1020 | 1021 | <Table |
1021 | 1022 | components={components} |
1022 | - defaultExpandAllRows | |
1023 | + expandable={{ | |
1024 | + defaultExpandAllRows: true, | |
1025 | + childrenColumnName: 'child' | |
1026 | + }} | |
1023 | 1027 | onRow={() => onRow()} |
1024 | 1028 | scroll={{ x: 1600 }} |
1025 | - childrenColumnName={'child'} | |
1026 | - // className={'param-setting-table'} | |
1027 | 1029 | rowClassName={() => 'editable-row'} |
1028 | 1030 | bordered |
1029 | 1031 | pagination={false} | ... | ... |
... | ... | @@ -5,7 +5,6 @@ import React, { useCallback, useEffect, useState } from 'react'; |
5 | 5 | import { |
6 | 6 | DeleteOutlined, |
7 | 7 | PlusOutlined, |
8 | - SearchOutlined, | |
9 | 8 | SettingOutlined, |
10 | 9 | } from '@ant-design/icons'; |
11 | 10 | import { |
... | ... | @@ -30,10 +29,12 @@ import { formatEnum } from './constant'; |
30 | 29 | // typeTranslateItemtype, |
31 | 30 | // } from './constant'; |
32 | 31 | |
33 | -import _ from 'lodash'; | |
32 | +import { cloneDeep } from 'lodash-es'; | |
34 | 33 | import moment from 'dayjs'; |
35 | 34 | import type { ParamDesignModel } from './constant'; |
36 | 35 | import { uidGen } from './stringUtil'; |
36 | +import {QxBaseIcon} from '@qx/common'; | |
37 | + | |
37 | 38 | import './style.less'; |
38 | 39 | |
39 | 40 | const valueOptions = [ |
... | ... | @@ -106,7 +107,7 @@ export const QxParameterSetting: React.FC<ParameterSettingProps> = (props) => { |
106 | 107 | |
107 | 108 | useEffect(() => { |
108 | 109 | if (props?.value?.length > 0) { |
109 | - const value = _.cloneDeep(props?.value); | |
110 | + const value = cloneDeep(props?.value); | |
110 | 111 | const expandedArray: any = []; |
111 | 112 | (value || []).map((_item: ParamDesignModel) => { |
112 | 113 | expandedArray.push(_item.id); |
... | ... | @@ -115,7 +116,7 @@ export const QxParameterSetting: React.FC<ParameterSettingProps> = (props) => { |
115 | 116 | setTreeData(value); |
116 | 117 | // const newData = generateTreeData(value, '') |
117 | 118 | const Treelist = generateList(value); |
118 | - const newList = _.cloneDeep(Treelist); | |
119 | + const newList = cloneDeep(Treelist); | |
119 | 120 | newList.map((_item) => { |
120 | 121 | delete _item.child; |
121 | 122 | }); |
... | ... | @@ -153,7 +154,7 @@ export const QxParameterSetting: React.FC<ParameterSettingProps> = (props) => { |
153 | 154 | data: ParamDesignModel, |
154 | 155 | // newType: string, |
155 | 156 | ) => { |
156 | - let treeList = _.cloneDeep(list); | |
157 | + let treeList = cloneDeep(list); | |
157 | 158 | // todo 编辑重名bug 貌似有点问题 待修改 |
158 | 159 | treeList = (treeList || []).filter((item) => item.id != data.id); |
159 | 160 | if (!treeList || treeList.length == 0) { |
... | ... | @@ -217,7 +218,7 @@ export const QxParameterSetting: React.FC<ParameterSettingProps> = (props) => { |
217 | 218 | |
218 | 219 | const isProps = code.indexOf('qxProps'); |
219 | 220 | const _newCode = isProps > -1 ? code.slice(8) : ''; |
220 | - const _newData = _.cloneDeep(treeData); | |
221 | + const _newData = cloneDeep(treeData); | |
221 | 222 | if (code == 'code') { |
222 | 223 | data.code = value; |
223 | 224 | const codeValid = validateCode(data); |
... | ... | @@ -290,7 +291,7 @@ export const QxParameterSetting: React.FC<ParameterSettingProps> = (props) => { |
290 | 291 | okText: '确认', |
291 | 292 | okType: 'danger', |
292 | 293 | onOk: () => { |
293 | - const listData = _.cloneDeep(treeData); | |
294 | + const listData = cloneDeep(treeData); | |
294 | 295 | // const newData = generateTreeData(listData, ''); |
295 | 296 | const loopDeleteTree = (treeList: ParamDesignModel[]) => { |
296 | 297 | for (let i = 0; i < treeList.length; i++) { |
... | ... | @@ -334,7 +335,7 @@ export const QxParameterSetting: React.FC<ParameterSettingProps> = (props) => { |
334 | 335 | } |
335 | 336 | }; |
336 | 337 | |
337 | - let data = _.cloneDeep(treeData); | |
338 | + let data = cloneDeep(treeData); | |
338 | 339 | // Find dragObject |
339 | 340 | let dragObj: ParamDesignModel; |
340 | 341 | loop(data, dragKey, (item, index, arr) => { |
... | ... | @@ -525,8 +526,8 @@ export const QxParameterSetting: React.FC<ParameterSettingProps> = (props) => { |
525 | 526 | // return undefined; |
526 | 527 | // }; |
527 | 528 | |
528 | - const changeField = (val: string, data: amy) => { | |
529 | - const _newData = _.cloneDeep(treeData); | |
529 | + const changeField = (val: any, data: any) => { | |
530 | + const _newData = cloneDeep(treeData); | |
530 | 531 | const _qxProps = {}; |
531 | 532 | |
532 | 533 | const loopChangeTree = (treeList: ParamDesignModel[]) => { |
... | ... | @@ -543,8 +544,8 @@ export const QxParameterSetting: React.FC<ParameterSettingProps> = (props) => { |
543 | 544 | treeList[i].mappingValues = [val[0].value]; |
544 | 545 | } |
545 | 546 | return; |
546 | - } else if (treeList[i].child) { | |
547 | - loopChangeTree(treeList[i].child); | |
547 | + } else if (!!treeList[i]?.child?.length) { | |
548 | + loopChangeTree(treeList[i].child || []); | |
548 | 549 | } |
549 | 550 | } |
550 | 551 | }; |
... | ... | @@ -663,13 +664,11 @@ export const QxParameterSetting: React.FC<ParameterSettingProps> = (props) => { |
663 | 664 | <Dropdown |
664 | 665 | trigger={['click']} |
665 | 666 | className={'hidden-select'} |
666 | - overlay={ | |
667 | - <Menu | |
668 | - items={valueOptions} | |
669 | - className={'dropdown'} | |
670 | - onClick={onSelect} | |
671 | - /> | |
672 | - } | |
667 | + menu={{ | |
668 | + items: valueOptions, | |
669 | + className: 'dropdown', | |
670 | + onClick: onSelect | |
671 | + }} | |
673 | 672 | > |
674 | 673 | <Button type={'link'}> |
675 | 674 | <PlusOutlined /> |
... | ... | @@ -690,7 +689,7 @@ export const QxParameterSetting: React.FC<ParameterSettingProps> = (props) => { |
690 | 689 | <Input |
691 | 690 | className={'qx-parameter-setting--search'} |
692 | 691 | placeholder="按名称搜索" |
693 | - prefix={<SearchOutlined />} | |
692 | + prefix={<QxBaseIcon type={'icon-app-search-line'} />} | |
694 | 693 | onChange={onChange} |
695 | 694 | /> |
696 | 695 | )} | ... | ... |
1 | +@import '~@qx/ui/src/style/variable.less'; | |
2 | + | |
1 | 3 | /* stylelint-disable declaration-block-no-redundant-longhand-properties */ |
2 | 4 | .border-none .ant-select:not(.ant-select-customize-input) .ant-select-selector { |
3 | 5 | border: none; |
... | ... | @@ -10,22 +12,6 @@ |
10 | 12 | flex-direction: row-reverse; |
11 | 13 | flex-wrap: nowrap; |
12 | 14 | justify-content: space-between; |
13 | - // flex-shrink:0; | |
14 | - // min-height: 32px; | |
15 | - // padding: 1px; | |
16 | - // position: 'relative', display: 'flex', flexWrap: 'wrap' | |
17 | - | |
18 | - // > .ant-tag { | |
19 | - // margin: 3px; | |
20 | - | |
21 | - // &:first-child { | |
22 | - // margin-left: 10px; | |
23 | - // } | |
24 | - | |
25 | - // ~ .qx-tags-input__box { | |
26 | - // padding-left: 5px; | |
27 | - // } | |
28 | - // } | |
29 | 15 | } |
30 | 16 | |
31 | 17 | .tree-wrapper { |
... | ... | @@ -36,7 +22,7 @@ |
36 | 22 | border-radius: 4px; |
37 | 23 | |
38 | 24 | &:hover { |
39 | - background-color: #f4f4f5; | |
25 | + background-color: @N3; | |
40 | 26 | } |
41 | 27 | } |
42 | 28 | |
... | ... | @@ -49,24 +35,6 @@ |
49 | 35 | } |
50 | 36 | } |
51 | 37 | |
52 | -// .ant-tree-node-selected:hover ~ .ant-tree-treenode:hover{ | |
53 | -// background-color: #bae7ff !important; | |
54 | -// } | |
55 | - | |
56 | -// .ant-tree-node-content-wrapper :hover ~ .ant-tree-treenode{ | |
57 | -// // background-color: #F4F4F5; | |
58 | -// // padding-top: 4px; | |
59 | -// } | |
60 | - | |
61 | -// .tree-list :hover{ | |
62 | -// background-color: #ff72; | |
63 | -// } | |
64 | - | |
65 | -// .ant-tree .ant-tree-treenode :hover{ | |
66 | -// background-color: #00f; | |
67 | -// border-radius:4px; | |
68 | -// } | |
69 | - | |
70 | 38 | .border-none |
71 | 39 | .ant-select-focused:not(.ant-select-disabled).ant-select:not( |
72 | 40 | .ant-select-customize-input |
... | ... | @@ -98,7 +66,7 @@ |
98 | 66 | color: #666; |
99 | 67 | |
100 | 68 | &:hover { |
101 | - color: red; | |
69 | + color: @E3; | |
102 | 70 | opacity: 1; |
103 | 71 | } |
104 | 72 | } |
... | ... | @@ -131,7 +99,7 @@ |
131 | 99 | // min-width: 100px; |
132 | 100 | margin-bottom: 2px; |
133 | 101 | overflow: hidden; |
134 | - text-overflow: ellipsi; | |
102 | + text-overflow: ellipsis; | |
135 | 103 | } |
136 | 104 | |
137 | 105 | .opt-left-down { |
... | ... | @@ -145,7 +113,7 @@ |
145 | 113 | margin-top: 2px; |
146 | 114 | margin-bottom: 2px; |
147 | 115 | overflow: hidden; |
148 | - text-overflow: ellipsi; | |
116 | + text-overflow: ellipsis; | |
149 | 117 | } |
150 | 118 | |
151 | 119 | // .ant-tree-node-content-wrapper :hover .select-tree { |
... | ... | @@ -237,13 +205,13 @@ |
237 | 205 | |
238 | 206 | .btn-high-del { |
239 | 207 | &:hover { |
240 | - color: red !important; | |
208 | + color: @E3 !important; | |
241 | 209 | } |
242 | 210 | } |
243 | 211 | |
244 | 212 | .editable-row:hover .editable-cell-value-wrap { |
245 | 213 | padding: 4px 11px; |
246 | - border: 1px solid #d9d9d9; | |
214 | + border: 1px solid @N4; | |
247 | 215 | border-radius: 2px; |
248 | 216 | } |
249 | 217 | |
... | ... | @@ -306,41 +274,6 @@ |
306 | 274 | text-align: center !important; |
307 | 275 | } |
308 | 276 | |
309 | -//TODO 写法不行 | |
310 | -// #root .hidden-select { | |
311 | -// .ant-select-tree | |
312 | -// .ant-select-tree-node-content-wrapper.ant-select-tree-node-selected { | |
313 | -// // background-color: #bae7ff; | |
314 | -// background-color: @primary-2; | |
315 | -// } | |
316 | -// } | |
317 | -// .ant-form-item | |
318 | -// .qx-parameter-setting__tree-list { | |
319 | -// .ant-tree-draggable-icon { | |
320 | -// line-height: 32px; | |
321 | -// } | |
322 | - | |
323 | -// &.ant-tree | |
324 | -// .ant-tree-treenode:not(.ant-tree-treenode-disabled) | |
325 | -// .ant-tree-node-content-wrapper { | |
326 | -// border-radius: 4px; | |
327 | - | |
328 | -// &.ant-tree-node-selected { | |
329 | -// background-color: transparent; | |
330 | -// } | |
331 | - | |
332 | -// &:hover, | |
333 | -// &.ant-tree-node-selected:hover { | |
334 | -// background-color: @N3; | |
335 | -// // opacity: 1 !important; | |
336 | -// // background-color: #91d5ff; | |
337 | -// } | |
338 | -// } | |
339 | -// } | |
340 | - | |
341 | -// .ant-form-item{ | |
342 | -// margin-bottom: 0; | |
343 | -// } | |
344 | 277 | |
345 | 278 | .json-editor { |
346 | 279 | width: 90%; | ... | ... |
... | ... | @@ -2,8 +2,8 @@ import * as React from 'react'; |
2 | 2 | import { useCallback, useEffect, useImperativeHandle, useState } from 'react'; |
3 | 3 | import { Checkbox, Empty, Input, Spin } from 'antd'; |
4 | 4 | import { getPositions } from './service'; |
5 | -import _ from 'lodash'; | |
6 | -import { SearchOutlined } from '@ant-design/icons'; | |
5 | +import { cloneDeep } from 'lodash-es'; | |
6 | +import {QxBaseIcon} from '@qx/common'; | |
7 | 7 | import Menu from 'antd/es/menu'; |
8 | 8 | |
9 | 9 | type PosCoreProps = { |
... | ... | @@ -143,7 +143,7 @@ const PosCore: React.FC<PosCoreProps> = (props) => { |
143 | 143 | }; |
144 | 144 | |
145 | 145 | if (data) { |
146 | - const _data = _.cloneDeep(data); | |
146 | + const _data = cloneDeep(data); | |
147 | 147 | _data.forEach((item) => { |
148 | 148 | traverse(item); |
149 | 149 | }); |
... | ... | @@ -186,7 +186,7 @@ const PosCore: React.FC<PosCoreProps> = (props) => { |
186 | 186 | className={'qx-selector-sub-search'} |
187 | 187 | placeholder={props.placeholder || '请输入岗位名称,按回车键搜索'} |
188 | 188 | allowClear |
189 | - prefix={<SearchOutlined />} | |
189 | + prefix={<QxBaseIcon type={'icon-app-search-line'} />} | |
190 | 190 | onChange={(e) => { |
191 | 191 | handleChange(e); |
192 | 192 | }} | ... | ... |
... | ... | @@ -52,7 +52,7 @@ const PosSelectorDialog: React.FC<PosSelectorDialogProps> = (props) => { |
52 | 52 | <Modal |
53 | 53 | title={props.title || '选择岗位'} |
54 | 54 | width={560} |
55 | - visible={props.visible} | |
55 | + open={props.visible} | |
56 | 56 | className={'qx-pos-selector__dialog'} |
57 | 57 | onOk={handleOk} |
58 | 58 | onCancel={handleCancel} | ... | ... |
... | ... | @@ -32,7 +32,7 @@ const QxPosSelector: React.FC<QxPosSelectorProps> = (props) => { |
32 | 32 | }, []); |
33 | 33 | |
34 | 34 | // getUserList() |
35 | - const handleOk = (keys: [], data: []) => { | |
35 | + const handleOk = (keys: [], data: any[]) => { | |
36 | 36 | let _value: [] | string = keys; |
37 | 37 | if (!props.multiple && keys && keys.length > 0) { |
38 | 38 | // @ts-ignore | ... | ... |
1 | +@import '~@qx/ui/src/style/variable.less'; | |
2 | + | |
1 | 3 | .qx-pos-selector__dialog { |
2 | 4 | //.ant-popover-arrow { |
3 | 5 | // display: none; |
... | ... | @@ -27,7 +29,7 @@ |
27 | 29 | height: 60px; |
28 | 30 | padding: 5px; |
29 | 31 | overflow: auto; |
30 | - border-bottom: 1px solid #f0f0f0; | |
32 | + border-bottom: 1px solid @N4; | |
31 | 33 | |
32 | 34 | .ant-tag { |
33 | 35 | margin: 1px 2px; | ... | ... |
... | ... | @@ -85,7 +85,7 @@ const QxPagination: React.FC<QxPaginationProps> = (props) => { |
85 | 85 | <Popover |
86 | 86 | overlayClassName={'qx-pagination__overlay'} |
87 | 87 | content={pageContent} |
88 | - trigger={total === 0 ? '' : 'click'} | |
88 | + trigger={total === 0 ? undefined : 'click'} | |
89 | 89 | placement={'bottom'} |
90 | 90 | > |
91 | 91 | <li className={'ant-pagination-simple-pager'}> | ... | ... |
... | ... | @@ -2,9 +2,7 @@ import * as React from 'react'; |
2 | 2 | import { useCallback, useEffect, useState } from 'react'; |
3 | 3 | import { Empty, Input, Spin} from 'antd'; |
4 | 4 | import { getAllRole } from '../service'; |
5 | -import { | |
6 | - SearchOutlined, | |
7 | -} from '@ant-design/icons'; | |
5 | +import {QxBaseIcon} from '@qx/common'; | |
8 | 6 | import Menu from 'antd/es/menu'; |
9 | 7 | |
10 | 8 | type RoleProps = { |
... | ... | @@ -188,7 +186,7 @@ const Role: React.FC<RoleProps> = (props) => { |
188 | 186 | className={'qx-selector-sub-search'} |
189 | 187 | placeholder={props.placeholder || '请输入角色名称,按回车键搜索'} |
190 | 188 | allowClear |
191 | - prefix={<SearchOutlined />} | |
189 | + prefix={<QxBaseIcon type={'icon-app-search-line'} />} | |
192 | 190 | onChange={(e) => { |
193 | 191 | handleChange(e); |
194 | 192 | }} | ... | ... |
... | ... | @@ -6,7 +6,7 @@ import { Checkbox, Empty, Input, Spin } from 'antd'; |
6 | 6 | // import { InputRef } from 'antd/es/input'; |
7 | 7 | import QxPagination from './qx-pagination'; |
8 | 8 | import type { CheckboxChangeEvent } from 'antd/es/checkbox'; |
9 | -import { SearchOutlined } from '@ant-design/icons'; | |
9 | +import {QxBaseIcon} from '@qx/common'; | |
10 | 10 | // import type { InputRef } from 'antd/lib/input'; |
11 | 11 | |
12 | 12 | type UserItem = { id: string; name: string; code: string; relName?: string }; |
... | ... | @@ -202,7 +202,7 @@ const UserList: React.FC<UserListProps> = (props) => { |
202 | 202 | }} |
203 | 203 | onChange={(e) => handleChange(e)} |
204 | 204 | allowClear |
205 | - prefix={<SearchOutlined style={{ color: 'rgba(0,0,0,.45)' }} />} | |
205 | + prefix={<QxBaseIcon style={{ color: 'rgba(0,0,0,.45)' }} type={'icon-app-search-line'} />} | |
206 | 206 | /> |
207 | 207 | </div> |
208 | 208 | <QxPagination | ... | ... |
... | ... | @@ -222,7 +222,7 @@ const UserSelectorDialog: React.FC<UserSelectorDialogProps> = (props) => { |
222 | 222 | <Modal |
223 | 223 | title={dialogTitle} |
224 | 224 | width={700} |
225 | - visible={props.visible} | |
225 | + open={props.visible} | |
226 | 226 | className={'qx-user-selector__dialog'} |
227 | 227 | onOk={handleOk} |
228 | 228 | onCancel={handleCancel} | ... | ... |
... | ... | @@ -6,7 +6,7 @@ import './style.less'; |
6 | 6 | import type { UserItem } from './dialog'; |
7 | 7 | import UserSelectorDialog from './dialog'; |
8 | 8 | import { searchUserByAllType, SearchUserAllData } from './service'; |
9 | -import _ from 'lodash'; | |
9 | +import { debounce } from 'lodash-es'; | |
10 | 10 | |
11 | 11 | export type QxUserSelectorProps = { |
12 | 12 | cRef?: any; |
... | ... | @@ -266,7 +266,7 @@ const QxUserSelector: React.FC<QxUserSelectorProps> = (props) => { |
266 | 266 | } |
267 | 267 | }, [popVisible]); |
268 | 268 | |
269 | - const handleSearch = _.debounce((_keywords: string | undefined) => { | |
269 | + const handleSearch = debounce((_keywords: string | undefined) => { | |
270 | 270 | if (!_keywords) { |
271 | 271 | setUserList(null); |
272 | 272 | return; |
... | ... | @@ -384,12 +384,12 @@ const QxUserSelector: React.FC<QxUserSelectorProps> = (props) => { |
384 | 384 | <Popover |
385 | 385 | content={userDropContent} |
386 | 386 | placement={'bottom'} |
387 | - visible={ | |
387 | + open={ | |
388 | 388 | ((props?.params?.range || !userId) && !userList) || props.readOnly ? false : popVisible |
389 | 389 | } |
390 | 390 | trigger={'click'} |
391 | 391 | overlayClassName={'qx-user-selector--input__pop'} |
392 | - onVisibleChange={(v: boolean) => setPopVisible(v)} | |
392 | + onOpenChange={(v: boolean) => setPopVisible(v)} | |
393 | 393 | > |
394 | 394 | <div |
395 | 395 | className={ | ... | ... |
1 | +@import '~@qx/ui/src/style/variable.less'; | |
2 | + | |
1 | 3 | .qx-user-input__box { |
2 | 4 | padding-left: 0; |
3 | 5 | background-color: transparent; |
... | ... | @@ -100,7 +102,7 @@ |
100 | 102 | color: #999; |
101 | 103 | font-weight: normal; |
102 | 104 | font-size: 14px; |
103 | - border-bottom: 1px solid #efefef; | |
105 | + border-bottom: 1px solid @N4; | |
104 | 106 | &:first-child { |
105 | 107 | margin-top: 0; |
106 | 108 | } |
... | ... | @@ -114,41 +116,41 @@ |
114 | 116 | cursor: pointer; |
115 | 117 | &.qx-user-selector-more { |
116 | 118 | margin-top: 5px; |
117 | - color: #4ba9ff; | |
119 | + color: @B8; | |
118 | 120 | &:hover { |
119 | - color: #4ba9ff; | |
121 | + color: @B7; | |
120 | 122 | } |
121 | 123 | } |
122 | 124 | &.disabled { |
123 | - color: #ccc; | |
125 | + color: @N5; | |
124 | 126 | cursor: default; |
125 | 127 | &:hover { |
126 | - color: #ccc; | |
128 | + color: @N5; | |
127 | 129 | } |
128 | 130 | .qx-user-selector-code { |
129 | - color: #ccc; | |
131 | + color: @N5; | |
130 | 132 | } |
131 | 133 | } |
132 | 134 | |
133 | 135 | &:hover { |
134 | - color: #000; | |
135 | - background-color: #fafafa; | |
136 | + color: @N9; | |
137 | + background-color: @N2; | |
136 | 138 | } |
137 | 139 | &.qx-user-selector-pop-empty { |
138 | 140 | padding: 10px; |
139 | - color: #aaa; | |
141 | + color: @N5; | |
140 | 142 | text-align: center; |
141 | - background-color: #fbfbfb; | |
143 | + background-color: @N2; | |
142 | 144 | cursor: default; |
143 | 145 | &:hover { |
144 | - color: #aaa; | |
146 | + color: @N5; | |
145 | 147 | } |
146 | 148 | } |
147 | 149 | } |
148 | 150 | } |
149 | 151 | |
150 | 152 | .qx-user-selector-code { |
151 | - color: rgb(102, 102, 102); | |
153 | + color: @N7; | |
152 | 154 | } |
153 | 155 | .qx-user-selector__dialog { |
154 | 156 | .ant-modal-body { |
... | ... | @@ -183,7 +185,7 @@ |
183 | 185 | height: 60px; |
184 | 186 | padding: 5px; |
185 | 187 | overflow: auto; |
186 | - border-bottom: 1px solid #f0f0f0; | |
188 | + border-bottom: 1px solid @N4; | |
187 | 189 | |
188 | 190 | .ant-tag { |
189 | 191 | margin: 1px 2px; |
... | ... | @@ -198,7 +200,7 @@ |
198 | 200 | .qx-user-selector__left { |
199 | 201 | height: @contentHeight; |
200 | 202 | overflow: hidden; |
201 | - border-right: 1px solid #f0f0f0; | |
203 | + border-right: 1px solid @N4; | |
202 | 204 | |
203 | 205 | .qx-user-selector__collapse { |
204 | 206 | border: none; |
... | ... | @@ -211,11 +213,11 @@ |
211 | 213 | } |
212 | 214 | |
213 | 215 | .ant-collapse-content { |
214 | - border-color: #f0f0f0; | |
216 | + border-color: @N4; | |
215 | 217 | } |
216 | 218 | |
217 | 219 | .ant-collapse > .ant-collapse-item { |
218 | - border-color: #f0f0f0; | |
220 | + border-color: @N4; | |
219 | 221 | } |
220 | 222 | } |
221 | 223 | |
... | ... | @@ -223,7 +225,7 @@ |
223 | 225 | display: flex; |
224 | 226 | flex-direction: column; |
225 | 227 | height: @contentHeight; |
226 | - border-left: 1px solid #f0f0f0; | |
228 | + border-left: 1px solid @N4; | |
227 | 229 | border-left: none; |
228 | 230 | |
229 | 231 | &__header { |
... | ... | @@ -232,7 +234,7 @@ |
232 | 234 | justify-content: space-between; |
233 | 235 | height: 40px; |
234 | 236 | padding: 0 10px; |
235 | - border-bottom: 1px solid #f0f0f0; | |
237 | + border-bottom: 1px solid @N4; | |
236 | 238 | |
237 | 239 | .ant-checkbox-wrapper { |
238 | 240 | white-space: nowrap; |
... | ... | @@ -260,13 +262,13 @@ |
260 | 262 | .ant-table-pagination.ant-pagination { |
261 | 263 | margin: 0; |
262 | 264 | padding: 11px; |
263 | - border-top: 1px solid #f0f0f0; | |
265 | + border-top: 1px solid @N4; | |
264 | 266 | } |
265 | 267 | } |
266 | 268 | |
267 | 269 | .qx-user-selector__user-search { |
268 | 270 | padding: 7px 10px; |
269 | - border-bottom: 1px solid #f0f0f0; | |
271 | + border-bottom: 1px solid @N4; | |
270 | 272 | } |
271 | 273 | |
272 | 274 | .qx-selector-tab { |
... | ... | @@ -339,7 +341,7 @@ |
339 | 341 | cursor: pointer; |
340 | 342 | |
341 | 343 | &:hover { |
342 | - background-color: #fafafa; | |
344 | + background-color: @N2; | |
343 | 345 | } |
344 | 346 | |
345 | 347 | .ant-checkbox-wrapper, | ... | ... |