bill 2 роки тому
батько
коміт
9fcbbd0043

+ 2 - 2
src/api/instance.ts

@@ -1,6 +1,6 @@
 import { axiosFactory } from './setup'
 import { message } from 'antd'
-import { LOGIN, ResCodeDesc } from 'constant'
+import { LOGIN, ResCode, ResCodeDesc } from 'constant'
 import { showLoading, hideLoading } from 'components/loading'
 import { baseURI } from 'env'
 
@@ -30,7 +30,7 @@ addResErrorHandler(
   (response, data) => {
     if (response.status !== 200) {
       message.error(response.statusText)
-    } else if (data) {
+    } else if (data && data.code !== ResCode.TOKEN_INVALID) {
       const msg = data.code && ResCodeDesc[data.code] ? ResCodeDesc[data.code] : data?.message
       message.error(msg)
     }

+ 1 - 1
src/components/table/index.tsx

@@ -20,7 +20,6 @@ export const Table = <T extends object>({
   rowKey = 'id', 
   ...bind 
 }: TableProps<T>) => {
-  
   return data.length 
     ? (
         <ATable
@@ -32,6 +31,7 @@ export const Table = <T extends object>({
             showSizeChanger: false,
             pageSize: paging.pageSize,
             total: paging.total,
+            current: paging.pageNum,
             onChange: onChangePaging && ((page, pageSize) => onChangePaging({ pageNum: page, pageSize }))
           } : false}
         />

+ 8 - 1
src/hook/paging.ts

@@ -32,6 +32,7 @@ export const usePaging = <T extends any[], R>(
     const allParams = [paging, ...surplusParams] as GetPagingDataParams<T>
     return getData(...allParams).then(data => {
       if (paging.total !== data.total) {
+        console.log('setPaging', paging)
         setPaging(paging => ({ ...paging, total: data.total }))
       }
       return data
@@ -70,6 +71,12 @@ export const useThunkPaging = <T extends ParamsPagingRequest, R, K extends Pagin
     const action: any = asyncThunk({ ...paging, ...params })
     return dispatch(action).unwrap()
   }, [asyncThunk, dispatch])
+  const results = (usePaging as any)(getData, initPaging, initSurplusParams)
+  const setParamsRaw = results[1][1]
+  results[1][1] = (params: any) => {
+    results[0][1]((paging: Paging) => ({ ...paging, pageNum: 1 }))
+    setParamsRaw(params)
+  }
 
-  return (usePaging as any)(getData, initPaging, initSurplusParams)
+  return results
 }

+ 1 - 1
src/views/example/index.tsx

@@ -120,7 +120,7 @@ export const ExamplePage = () => {
           sceneManage={() => setScenesCaseId(record.caseId)}
           file={() => setFileCaseId(record.caseId)}
           query={() => checkScenesOpen(record.caseId, `${getFuseCodeLink(record.caseId)}#show/summary`)}
-          fuse={() => onlyOpenWindow(`${getFuseCodeLink(record.caseId)}#fuseEdit/merge`)}
+          fuse={() => checkScenesOpen(record.caseId, `${getFuseCodeLink(record.caseId)}#fuseEdit/merge`)}
           getView={() => checkScenesOpen(record.caseId, `${getFuseCodeLink(record.caseId)}#sceneEdit/view`)}
           record={() => checkScenesOpen(record.caseId, `${getFuseCodeLink(record.caseId)}#sceneEdit/record`)} 
         /> 

+ 9 - 3
src/views/example/scene/list.tsx

@@ -63,7 +63,9 @@ export const ExampleScenes = (props: ExampleScenesProps) => {
       }
     }
   ]
+
   const fetchExampleScenes = () => {
+    console.log('????????', props.caseId)
     getExampleScenes({ caseId: props.caseId })
       .then(scenes => {
         setScenes(scenes)
@@ -71,15 +73,19 @@ export const ExampleScenes = (props: ExampleScenesProps) => {
       })
   }
   const selectChange = async (newIdents: SceneIdents) => {
-    await props.onChangeScenes(newIdents, idents)
-    await fetchExampleScenes()
+    if (JSON.stringify(newIdents) !== JSON.stringify(idents)) {
+      await props.onChangeScenes(newIdents, idents)
+      await fetchExampleScenes()
+    }
     setInSelectMode(false)
   }
   useEffect(fetchExampleScenes, [props.caseId])
 
   const renderSelectMode = inSelectMode 
     && <SelectScenes 
-        onClose={() => setInSelectMode(false)}
+        onClose={() => {
+          setInSelectMode(false)
+        }}
         sceneIdents={idents}
         onSelect={selectChange}
       />

+ 67 - 27
src/views/login/index.tsx

@@ -9,7 +9,7 @@ import { useLoading } from 'hook'
 
 import type { LoginParams } from 'api'
 import type { FormItemProps } from 'antd'
-import type { ReactElement } from 'react'
+import type { ComponentType } from 'react'
 
 type LoginInfo = LoginParams & { markpsw: boolean }
 
@@ -18,38 +18,78 @@ const setCache = (data: LoginInfo) => localStorage.setItem(KEY, JSON.stringify(d
 const getCache = (): LoginInfo | undefined => localStorage.getItem(KEY) && JSON.parse(localStorage.getItem(KEY)!)
 const delCache = () => localStorage.removeItem(KEY)
 
-const getLoginInputs = (): (FormItemProps & { node: ReactElement })[] => ([
-  {
-    name: 'phoneNum',
-    initialValue: getCache()?.phoneNum,
-    rules: [{ required: true, message: '请输入正确的手机号', pattern: /^1[3|4|5|7|8][0-9]\d{8}$/ }],
-    node: <Input placeholder='请输入账号' size="large" prefix={<UserOutlined />} />
-  },
-  {
-    name: 'password',
-    initialValue: getCache()?.password,
-    rules: [{ required: true, message: '请输入正确的密码', pattern: /^[^\u4e00-\u9fa5]{1,16}$/, min: 1, max: 16 }],
-    node: <Input.Password placeholder='请输入密码' size="large" prefix={<LockOutlined />} />
-  },
-  {
-    name: 'markpsw',
-    initialValue: getCache()?.markpsw,
-    valuePropName: 'checked',
-    node: <Checkbox>记住密码</Checkbox>
-  },
-  {
-    node: <Button type='primary' htmlType='submit' size="large" children="登录" block />
-  }
-])
+interface PriceInputProps<T> {
+  value?: T;
+  onChange?: (value: T) => void;
+}
+
+const getLoginInputs = (loginFrom: LoginInfo): (FormItemProps & { node: ComponentType<PriceInputProps<any>> })[] => {
+  return [
+    {
+      name: 'phoneNum',
+      rules: [{ required: true, message: '请输入正确的手机号', pattern: /^1[3|4|5|7|8][0-9]\d{8}$/ }],
+      initialValue: loginFrom.phoneNum,
+      node: (props: PriceInputProps<LoginInfo['phoneNum']>) => (<Input 
+              placeholder='请输入账号' 
+              size="large" 
+              prefix={<UserOutlined />} 
+              value={props.value} 
+              onChange={ev => {
+                const phoneNum = ev.target.value
+                if (phoneNum.length <= 11) {
+                  props.onChange && props.onChange(phoneNum)
+                }
+              }}
+            />)
+    },
+    {
+      name: 'password',
+      rules: [{ required: true, message: '请输入正确的密码', pattern: /^[^\u4e00-\u9fa5]{1,16}$/, min: 1, max: 16 }],
+      node: (props) => <Input.Password 
+              placeholder='请输入密码' 
+              size="large" 
+              prefix={<LockOutlined />} 
+              value={props.value} 
+              onChange={ev => {
+                const password = ev.target.value
+                if (password.length <= 16) {
+                  props.onChange && props.onChange(password)
+                }
+              }}
+            />
+    },
+    {
+      name: 'markpsw',
+      initialValue: getCache()?.markpsw,
+      valuePropName: 'checked',
+      node: (props: any) => <Checkbox 
+              checked={props.checked}
+              onChange={ev => {
+                props.onChange && props.onChange(ev.target.checked)
+              }}
+              children="记住密码" 
+            />
+    },
+    {
+      node: () => <Button type='primary' htmlType='submit' size="large" children="登录" block />
+    }
+  ]
+}
 
 export const Login = () => {
   const dispatch = useDispatch()
   const navigate = useNavigate()
   const [loading, setPromise] = useLoading()
+  const cacheLogin = getCache() || {
+    phoneNum: '',
+    password: '',
+    markpsw: false
+}
 
-  const renderOptions = getLoginInputs().map(({node, ...props}, i) => (
-    <Form.Item {...props} key={i} children={node} />
-  ))
+  const renderOptions = getLoginInputs(cacheLogin)
+    .map(({node: Node, ...props}, i) => (
+      <Form.Item {...props} key={i} children={<Node />} />
+    ))
   const loginHandler = async (data: LoginInfo) => {
     await setPromise(dispatch(postLogin(data)).unwrap())
     navigate(RoutePath.home, { replace: true })

+ 1 - 1
src/views/scene/header.tsx

@@ -32,7 +32,7 @@ export const SceneHeader = memo(({ readonly, type, onSearch, onDataChange }: Lis
 
   const renderUpload = readonly || (type === SceneType.SWMX && (
     <Upload beforeUpload={onUpload} multiple={false} accept="application/zip,application/rar">
-      <Popover content="请上传zip/rar文件(支持osgb/obj/ply/las格式的数据),大小在1GB以内">
+      <Popover content="请上传zip/rar文件(支持obj/ply/las格式的数据),大小在1GB以内">
         <Button type="primary" children="上传数据" />
       </Popover>
     </Upload>