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, | ... | ... |