nili
5 months ago
29 changed files with 835 additions and 659 deletions
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -0,0 +1 @@ |
|||||
|
!function(){"use strict";var t="/".replace(/([^/])$/,"$1/"),e=location.pathname,n=e.startsWith(t)&&decodeURI("/".concat(e.slice(t.length)));if(n){var a=document,c=a.head,r=a.createElement.bind(a),i=function(t,e,n){var a,c=e.r[t]||(null===(a=Object.entries(e.r).find((function(e){var n=e[0];return new RegExp("^".concat(n.replace(/\/:[^/]+/g,"/[^/]+").replace("/*","/.+"),"$")).test(t)})))||void 0===a?void 0:a[1]);return null==c?void 0:c.map((function(t){var a=e.f[t][1],c=e.f[t][0];return{type:c.split(".").pop(),url:"".concat(n.publicPath).concat(c),attrs:[["data-".concat(e.b),"".concat(e.p,":").concat(a)]]}}))}(n,{"p":"ant-design-pro","b":"webpack","f":[["134.6fc81d91.async.js",134],["169.57647c7d.async.js",169],["p__Welcome.61596037.async.js",185],["p__MoneyManagement.b9d33efc.async.js",190],["247.3fe8fb10.async.js",247],["t__plugin-layout__Layout.6cae69f5.chunk.css",301],["t__plugin-layout__Layout.4594a64b.async.js",301],["p__User__Login__index.9d3ab92e.async.js",366],["p__DeviceOwnerApp.c61abcd9.async.js",371],["390.41467286.async.js",390],["393.38316f72.async.js",393],["397.fb5f72c1.async.js",397],["p__SuperAdmin.aebf7b0e.async.js",455],["p__Proxy__ProxyUserManagement.8c01d23c.async.js",526],["531.35af34f5.async.js",531],["539.290aefb9.async.js",539],["p__AdvRecordListV2.984e68f4.async.js",542],["p__Bind.b6ee068f.async.js",557],["559.016bfdbb.async.js",559],["p__404.0c100574.async.js",571],["635.20e45f05.async.js",635],["p__App__AppManagement.4cf1b18c.async.js",731],["761.f7bbde11.async.js",761],["p__AdminManagement.0afb1c76.async.js",816],["841.614ef4c0.async.js",841],["p__AdvRecordList.fc092f59.async.js",857],["p__UserManagement.17af3678.async.js",903],["905.6e225d1b.async.js",905],["930.fca7adbf.async.js",930],["p__Proxy__ProxyAdvRecordListV2.a4fe446b.async.js",990]],"r":{"/*":[19,27],"/":[0,5,6,18,20,27],"/welcome":[0,1,2,10,18,28,5,6,20,27],"/super":[0,1,4,12,14,15,27,28,5,6,18,20],"/adminList":[0,1,14,15,22,23,27,5,6,18,20],"/bind":[0,1,10,11,17,18,28,5,6,20,27],"/appList":[0,1,4,11,14,15,21,27,28,5,6,18,20],"/advList/:code":[0,1,14,15,18,24,25,27,28,5,6,20],"/advListV2/:code":[0,1,14,15,16,18,24,27,28,5,6,20],"/user/:code":[0,1,14,15,26,27,28,5,6,18,20],"/money/:code":[0,1,3,14,15,27,28,5,6,18,20],"/app/:code":[0,1,8,14,15,18,24,27,28,5,6,20],"/user/login":[0,1,7,14],"/proxy/advListV2/:code":[0,1,14,15,18,24,27,28,29,5,6,20],"/proxy/user/:code":[0,1,13,14,15,27,28,5,6,18,20]}},{publicPath:"/"});null==i||i.forEach((function(t){var e,n=t.type,a=t.url;if("js"===n)(e=r("script")).src=a,e.async=!0;else{if("css"!==n)return;(e=r("link")).href=a,e.rel="preload",e.as="style"}t.attrs.forEach((function(t){e.setAttribute(t[0],t[1]||"")})),c.appendChild(e)}))}}(); |
@ -1 +0,0 @@ |
|||||
!function(){"use strict";var t="/".replace(/([^/])$/,"$1/"),e=location.pathname,n=e.startsWith(t)&&decodeURI("/".concat(e.slice(t.length)));if(n){var a=document,c=a.head,r=a.createElement.bind(a),i=function(t,e,n){var a,c=e.r[t]||(null===(a=Object.entries(e.r).find((function(e){var n=e[0];return new RegExp("^".concat(n.replace(/\/:[^/]+/g,"/[^/]+").replace("/*","/.+"),"$")).test(t)})))||void 0===a?void 0:a[1]);return null==c?void 0:c.map((function(t){var a=e.f[t][1],c=e.f[t][0];return{type:c.split(".").pop(),url:"".concat(n.publicPath).concat(c),attrs:[["data-".concat(e.b),"".concat(e.p,":").concat(a)]]}}))}(n,{"p":"ant-design-pro","b":"webpack","f":[["51.a2ea1b3b.async.js",51],["134.6fc81d91.async.js",134],["169.57647c7d.async.js",169],["p__Welcome.61596037.async.js",185],["p__MoneyManagement.7ad34f8d.async.js",190],["247.3fe8fb10.async.js",247],["t__plugin-layout__Layout.6cae69f5.chunk.css",301],["t__plugin-layout__Layout.4594a64b.async.js",301],["p__User__Login__index.9d3ab92e.async.js",366],["p__DeviceOwnerApp.c61abcd9.async.js",371],["390.41467286.async.js",390],["393.38316f72.async.js",393],["397.fb5f72c1.async.js",397],["p__SuperAdmin.92290426.async.js",455],["p__Proxy__ProxyUserManagement.7f03f17a.async.js",526],["531.4c68f902.async.js",531],["539.49b7b156.async.js",539],["p__AdvRecordListV2.7d43902a.async.js",542],["p__Bind.b6ee068f.async.js",557],["559.016bfdbb.async.js",559],["p__404.0c100574.async.js",571],["635.20e45f05.async.js",635],["p__App__AppManagement.4cf1b18c.async.js",731],["p__AdminManagement.16f4328b.async.js",816],["822.4ba8fa04.async.js",822],["841.614ef4c0.async.js",841],["p__AdvRecordList.fc092f59.async.js",857],["p__UserManagement.5e827801.async.js",903],["905.6e225d1b.async.js",905],["930.fca7adbf.async.js",930],["942.561ac28f.async.js",942],["p__Proxy__ProxyAdvRecordListV2.edf1fabd.async.js",990]],"r":{"/*":[20,28],"/":[1,6,7,19,21,28],"/welcome":[1,2,3,11,19,29,6,7,21,28],"/super":[0,1,2,5,13,15,16,24,28,29,6,7,19,21],"/adminList":[0,1,2,23,24,30,6,7,19,21,28],"/bind":[1,2,11,12,18,19,29,6,7,21,28],"/appList":[0,1,2,5,12,15,16,22,24,28,29,6,7,19,21],"/advList/:code":[0,1,2,15,16,19,24,25,26,28,29,6,7,21],"/advListV2/:code":[0,1,2,15,16,17,19,24,25,28,29,6,7,21],"/user/:code":[0,1,2,15,16,24,27,28,29,6,7,19,21],"/money/:code":[0,1,2,4,15,16,24,28,29,6,7,19,21],"/app/:code":[0,1,2,9,15,16,19,24,25,28,29,6,7,21],"/user/login":[1,2,8,15,24],"/proxy/advListV2/:code":[0,1,2,15,16,19,24,25,28,29,31,6,7,21],"/proxy/user/:code":[0,1,2,14,15,16,24,28,29,6,7,19,21]}},{publicPath:"/"});null==i||i.forEach((function(t){var e,n=t.type,a=t.url;if("js"===n)(e=r("script")).src=a,e.async=!0;else{if("css"!==n)return;(e=r("link")).href=a,e.rel="preload",e.as="style"}t.attrs.forEach((function(t){e.setAttribute(t[0],t[1]||"")})),c.appendChild(e)}))}}(); |
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -0,0 +1,144 @@ |
|||||
|
import { SearchOutlined } from '@ant-design/icons'; |
||||
|
import { ProColumns, ProTable } from '@ant-design/pro-components'; |
||||
|
import { Button, Input, Modal, Space } from 'antd'; |
||||
|
import { useEffect, useState } from 'react'; |
||||
|
|
||||
|
import { evilAppList } from '@/services/matrix/superAdmin'; |
||||
|
|
||||
|
export type LocalAppListProps = { |
||||
|
data: API.UserBo; |
||||
|
onClose: () => void; |
||||
|
}; |
||||
|
|
||||
|
interface LocalApp { |
||||
|
appName?: string; |
||||
|
packageName?: string; |
||||
|
evil: boolean; |
||||
|
} |
||||
|
|
||||
|
const LocalAppList: React.FC<LocalAppListProps> = (props) => { |
||||
|
const [appArr, setAppArr] = useState<LocalApp[]>(); |
||||
|
const [filteredAppArr, setFilteredAppArr] = useState<LocalApp[]>(); |
||||
|
|
||||
|
const columns: ProColumns<LocalApp>[] = [ |
||||
|
{ |
||||
|
title: '应用名', |
||||
|
dataIndex: 'appName', |
||||
|
ellipsis: true, |
||||
|
hideInSearch: true, |
||||
|
filterDropdown: ({ setSelectedKeys, selectedKeys, confirm, clearFilters }) => ( |
||||
|
<div style={{ padding: 8 }}> |
||||
|
<Input |
||||
|
placeholder="搜索应用" |
||||
|
value={selectedKeys[0]} |
||||
|
onChange={(e) => setSelectedKeys(e.target.value ? [e.target.value] : [])} |
||||
|
onPressEnter={() => confirm()} |
||||
|
style={{ marginBottom: 8, display: 'block' }} |
||||
|
/> |
||||
|
<Space> |
||||
|
<Button onClick={() => confirm()} type="primary"> |
||||
|
搜索 |
||||
|
</Button> |
||||
|
<Button onClick={() => clearFilters && clearFilters()} type="link"> |
||||
|
清除 |
||||
|
</Button> |
||||
|
</Space> |
||||
|
</div> |
||||
|
), |
||||
|
onFilter: (value, record) => { |
||||
|
if (typeof value === 'string' && typeof record?.appName === 'string') { |
||||
|
return record.appName.includes(value); |
||||
|
} |
||||
|
return false; |
||||
|
}, |
||||
|
filterIcon: (filtered) => ( |
||||
|
<SearchOutlined |
||||
|
style={{ color: filtered ? '#1890ff' : undefined }} |
||||
|
onPointerOverCapture={undefined} |
||||
|
onPointerMoveCapture={undefined} |
||||
|
/> |
||||
|
), |
||||
|
}, |
||||
|
{ |
||||
|
title: '应用包名', |
||||
|
dataIndex: 'packageName', |
||||
|
hideInSearch: true, |
||||
|
ellipsis: true, |
||||
|
filterDropdown: ({ setSelectedKeys, selectedKeys, confirm, clearFilters }) => ( |
||||
|
<div style={{ padding: 8 }}> |
||||
|
<Input |
||||
|
placeholder="搜索包名" |
||||
|
value={selectedKeys[0]} |
||||
|
onChange={(e) => setSelectedKeys(e.target.value ? [e.target.value] : [])} |
||||
|
onPressEnter={() => confirm()} |
||||
|
style={{ marginBottom: 8, display: 'block' }} |
||||
|
/> |
||||
|
<Space> |
||||
|
<Button onClick={() => confirm()} type="primary"> |
||||
|
搜索 |
||||
|
</Button> |
||||
|
<Button onClick={() => clearFilters && clearFilters()} type="link"> |
||||
|
清除 |
||||
|
</Button> |
||||
|
</Space> |
||||
|
</div> |
||||
|
), |
||||
|
onFilter: (value, record) => { |
||||
|
if (typeof value === 'string' && typeof record?.packageName === 'string') { |
||||
|
return record.packageName.includes(value); |
||||
|
} |
||||
|
return false; |
||||
|
}, |
||||
|
filterIcon: (filtered) => ( |
||||
|
<SearchOutlined |
||||
|
style={{ color: filtered ? '#1890ff' : undefined }} |
||||
|
onPointerOverCapture={undefined} |
||||
|
onPointerMoveCapture={undefined} |
||||
|
/> |
||||
|
), |
||||
|
}, |
||||
|
]; |
||||
|
|
||||
|
const fetchApp = async () => { |
||||
|
const res = await evilAppList(); |
||||
|
if (res.data) { |
||||
|
let common: LocalApp[] = []; |
||||
|
let remain: LocalApp[] = []; |
||||
|
props.data.localAppList?.forEach((x) => { |
||||
|
if (res.data?.some((y) => y.packageName === x.packageName)) { |
||||
|
common.push({ ...x, evil: true }); |
||||
|
} else { |
||||
|
remain.push({ ...x, evil: false }); |
||||
|
} |
||||
|
}); |
||||
|
setAppArr([...common, ...remain]); |
||||
|
setFilteredAppArr([...common, ...remain]); |
||||
|
} |
||||
|
}; |
||||
|
|
||||
|
useEffect(() => { |
||||
|
fetchApp(); |
||||
|
}, []); |
||||
|
|
||||
|
return ( |
||||
|
<Modal style={{ width: 600 }} onCancel={props.onClose} visible={true} footer={[]}> |
||||
|
<ProTable |
||||
|
onRow={(record) => { |
||||
|
return { |
||||
|
style: { |
||||
|
backgroundColor: record.evil ? 'red' : 'transparent', |
||||
|
}, |
||||
|
}; |
||||
|
}} |
||||
|
search={false} |
||||
|
onReset={() => { |
||||
|
setFilteredAppArr(appArr); |
||||
|
}} |
||||
|
columns={columns} |
||||
|
dataSource={filteredAppArr} |
||||
|
/> |
||||
|
</Modal> |
||||
|
); |
||||
|
}; |
||||
|
|
||||
|
export default LocalAppList; |
Loading…
Reference in new issue