Commit 39a4ab8a authored by 左玲玲's avatar 左玲玲 😬

1723

parent cf32b0ef
...@@ -337,6 +337,12 @@ export default [ ...@@ -337,6 +337,12 @@ export default [
icon: '', icon: '',
component: './lease/contract', component: './lease/contract',
}, },
{
name: '费用分析',
path: '/lease/costanalysis',
icon: '',
component: './lease/costanalysis',
},
{ {
name: '租赁设备', name: '租赁设备',
path: '/lease/leasedevice', path: '/lease/leasedevice',
......
...@@ -13,7 +13,7 @@ export default { ...@@ -13,7 +13,7 @@ export default {
dev: { dev: {
[defaultSetting.proxypath]: { [defaultSetting.proxypath]: {
// 要代理的地址 // 要代理的地址
target: 'http://192.168.40.111:8000', //jf哥 target: 'http://192.168.40.110:8000', //jf哥
// target: 'http://192.168.40.248:8080', //jf哥 // target: 'http://192.168.40.248:8080', //jf哥
// target: 'http://192.168.40.64:28000', //gc哥 // target: 'http://192.168.40.64:28000', //gc哥
// target: 'http://192.168.40.203:8000', //dj哥 // target: 'http://192.168.40.203:8000', //dj哥
...@@ -22,7 +22,7 @@ export default { ...@@ -22,7 +22,7 @@ export default {
}, },
'/token': { '/token': {
// 要代理的地址 // 要代理的地址
target: 'http://192.168.40.111:8000', target: 'http://192.168.40.110:8000',
changeOrigin: true, changeOrigin: true,
}, },
'/staticfile/': { '/staticfile/': {
......
...@@ -73,6 +73,7 @@ ...@@ -73,6 +73,7 @@
"react-dom": "^17.0.0", "react-dom": "^17.0.0",
"react-helmet-async": "^1.2.0", "react-helmet-async": "^1.2.0",
"react-resizable": "^3.0.4", "react-resizable": "^3.0.4",
"socket.io-client": "2.2.0",
"umi-request": "^1.4.0" "umi-request": "^1.4.0"
}, },
"devDependencies": { "devDependencies": {
......
...@@ -120,7 +120,7 @@ export default (props) => { ...@@ -120,7 +120,7 @@ export default (props) => {
{props.childposition == 'bottom' && props.children} {props.childposition == 'bottom' && props.children}
</Card> </Card>
) : ( ) : (
<div className="tabsTable"> <div className="tabstable">
<div style={{ display: 'flex', justifyContent: 'space-between', padding: '16px 20px 0' }}> <div style={{ display: 'flex', justifyContent: 'space-between', padding: '16px 20px 0' }}>
<div style={{ fontSize: 16, fontWeight: 500 }}>{props.pagetitle}</div> <div style={{ fontSize: 16, fontWeight: 500 }}>{props.pagetitle}</div>
<div className="center">{renderextra()}</div> <div className="center">{renderextra()}</div>
......
...@@ -36,7 +36,11 @@ function DrawerPro(props) { ...@@ -36,7 +36,11 @@ function DrawerPro(props) {
{props?.children} {props?.children}
</div> </div>
) : ( ) : (
<>
{props.childrenposition == 'top' && props.children}
<InitForm {...newProps} /> <InitForm {...newProps} />
{props.childrenposition == 'bottom' && props.children}
</>
)} )}
{pushSettingFlag ? ( {pushSettingFlag ? (
......
...@@ -138,11 +138,11 @@ let FormRender = memo(({ fields = [], name, curindex, formRef, action }) => { ...@@ -138,11 +138,11 @@ let FormRender = memo(({ fields = [], name, curindex, formRef, action }) => {
<Col {...item.colProps} key={index}> <Col {...item.colProps} key={index}>
{curindex == 0 ? ( {curindex == 0 ? (
<div> <div>
<label htmlFor="">{item.title}</label> <label htmlFor="" style={{ marginBottom: 10, display: 'inline-block' }} >{item.title}</label>
{ {
hideInFormShowKey ? <div style={{ padding: "6px 0 0 0", margin: 0 }}>{value[hideInFormShowKey]}</div> hideInFormShowKey ? <div style={{ margin: 0 }}>{value[hideInFormShowKey]}</div>
: :
<div style={{ padding: "6px 0 0 0", margin: 0 }}> <div style={{ margin: 0 }}>
<b style={{ color: "red" }}>!</b>{" "} <b style={{ color: "red" }}>!</b>{" "}
需满足条件才可以填写{item.title} 需满足条件才可以填写{item.title}
</div> </div>
...@@ -154,7 +154,7 @@ let FormRender = memo(({ fields = [], name, curindex, formRef, action }) => { ...@@ -154,7 +154,7 @@ let FormRender = memo(({ fields = [], name, curindex, formRef, action }) => {
{ {
hideInFormShowKey ? <>{value[hideInFormShowKey]}</> hideInFormShowKey ? <>{value[hideInFormShowKey]}</>
: :
<div style={{ padding: "6px 0 0 0", margin: 0 }}> <div style={{ margin: 0 }}>
<b style={{ color: "red" }}>!</b>{" "} <b style={{ color: "red" }}>!</b>{" "}
需满足条件才可以填写{item.title} 需满足条件才可以填写{item.title}
</div> </div>
...@@ -180,8 +180,8 @@ let FormRender = memo(({ fields = [], name, curindex, formRef, action }) => { ...@@ -180,8 +180,8 @@ let FormRender = memo(({ fields = [], name, curindex, formRef, action }) => {
return curindex === 0 ? ( return curindex === 0 ? (
<Col {...item.colProps} style={{ height: 68 }} key={index}> <Col {...item.colProps} style={{ height: 68 }} key={index}>
<div> <div>
<label htmlFor="">{item.title}</label> <label htmlFor="" style={{ marginBottom: 10, display: 'inline-block' }} >{item.title}</label>
<div style={{ padding: "6px 0 0 0", margin: 0 }}> <div style={{ margin: 0 }}>
{value[item?.key ?? item?.dataIndex] ?? "-"} {value[item?.key ?? item?.dataIndex] ?? "-"}
</div> </div>
</div> </div>
...@@ -189,7 +189,7 @@ let FormRender = memo(({ fields = [], name, curindex, formRef, action }) => { ...@@ -189,7 +189,7 @@ let FormRender = memo(({ fields = [], name, curindex, formRef, action }) => {
) : ( ) : (
<Col {...item.colProps} style={{ height: 68 }} key={index}> <Col {...item.colProps} style={{ height: 68 }} key={index}>
<div> <div>
<div style={{ padding: "6px 0 0 0", margin: 0 }}> <div style={{ margin: 0 }}>
{value[item?.key ?? item?.dataIndex] ?? "-"} {value[item?.key ?? item?.dataIndex] ?? "-"}
</div> </div>
</div> </div>
...@@ -383,7 +383,7 @@ function DigitRange({ item, colProps }) { ...@@ -383,7 +383,7 @@ function DigitRange({ item, colProps }) {
} }
//Date //Date
function Date({ item, colProps }) { function Date({ item, colProps, curindex = 0 }) {
return ( return (
<> <>
<ProFormDatePicker <ProFormDatePicker
...@@ -391,7 +391,7 @@ function Date({ item, colProps }) { ...@@ -391,7 +391,7 @@ function Date({ item, colProps }) {
formItemProps={item.formItemProps} formItemProps={item.formItemProps}
name={item?.key ?? item?.dataIndex} name={item?.key ?? item?.dataIndex}
colProps={item.colProps ?? colProps} colProps={item.colProps ?? colProps}
label={item.title} label={curindex == 0 ? item.title : ""}
placeholder={`请选择${item.title}`} placeholder={`请选择${item.title}`}
width="100%" width="100%"
/> />
...@@ -1452,11 +1452,23 @@ function Expandable({ item, colProps }) { ...@@ -1452,11 +1452,23 @@ function Expandable({ item, colProps }) {
} }
function FormList(props) { function FormList(props) {
const [isEmpty, cie] = useState(false);
let { item, colProps, formRef } = props; let { item, colProps, formRef } = props;
let col = item.colProps ?? colProps; let col = item.colProps ?? colProps;
let fields = item.columns?.filter(it => !it.hideInTable) ?? []; let fields = item.columns?.filter(it => !it.hideInTable) ?? [];
useEffect(() => {
let value = props.formRef.current.getFieldValue(
item?.key ?? item?.dataIndex
);
if (value?.length == 0) {
cie(true);
}
}, [props]);
return ( return (
<Col {...col}> <Col {...col}>
<div className="formlist">
{
!isEmpty ?
<ProFormList <ProFormList
name={item.key ?? item.dataIndex} name={item.key ?? item.dataIndex}
label={item.title} label={item.title}
...@@ -1482,6 +1494,20 @@ function FormList(props) { ...@@ -1482,6 +1494,20 @@ function FormList(props) {
); );
}} }}
</ProFormList> </ProFormList>
:
<div>
<div>{item.title}</div>
<Empty
image={"./empty.svg"}
imageStyle={{
height: 60,
}}
/>
</div>
}
</div>
</Col> </Col>
); );
} }
......
import React, { useCallback, useState, useMemo } from 'react'; import React, { useCallback, useState, useMemo, useEffect } from 'react';
import { LogoutOutlined, LockOutlined } from '@ant-design/icons'; import { LogoutOutlined, LockOutlined } from '@ant-design/icons';
import { Menu, Spin, Button, Form, Modal, message, Avatar, Select } from 'antd'; import { Menu, Spin, Button, Form, Modal, message, Avatar, Select } from 'antd';
import { history, useModel } from '@umijs/max'; import { history, useModel } from '@umijs/max';
...@@ -14,6 +14,14 @@ import ECB from 'crypto-js/mode-ecb'; ...@@ -14,6 +14,14 @@ import ECB from 'crypto-js/mode-ecb';
import Pkcs7 from 'crypto-js/pad-pkcs7'; import Pkcs7 from 'crypto-js/pad-pkcs7';
import Utf8 from 'crypto-js/enc-utf8'; import Utf8 from 'crypto-js/enc-utf8';
import moment from 'moment'; import moment from 'moment';
import io from 'socket.io-client';
const { NODE_ENV } = process.env;
const websocketUrl = NODE_ENV == "development" ? "ws://192.168.40.110:9933" : `${window.location.protocol == "http:" ? "ws" : "wss"}://${window.location.host}`;
const socket = io(websocketUrl, {
reconnectionDelay: 4000,
transports: ['websocket'],
autoConnect: true,
});
/** /**
* 退出登录,并且将当前的 url 保存 * 退出登录,并且将当前的 url 保存
*/ */
...@@ -31,6 +39,7 @@ const AvatarDropdown = ({ menu }) => { ...@@ -31,6 +39,7 @@ const AvatarDropdown = ({ menu }) => {
return res?.data || {}; return res?.data || {};
}); });
const { initialState, setInitialState } = useModel('@@initialState'); const { initialState, setInitialState } = useModel('@@initialState');
const { allWebsocket, changeWebsocket } = useModel('useGlobal');
const [visible, cv] = useState(false), const [visible, cv] = useState(false),
[formRef] = Form.useForm(), [formRef] = Form.useForm(),
{ run, loading } = useRequest(doFetch, { { run, loading } = useRequest(doFetch, {
...@@ -50,6 +59,14 @@ const AvatarDropdown = ({ menu }) => { ...@@ -50,6 +59,14 @@ const AvatarDropdown = ({ menu }) => {
} }
}, },
}); });
useEffect(() => {
changeWebsocket((s) => ({ ...s, commonWebsocket: socket }));
socket.on('iotData', (data) => {
changeWebsocket((s) => ({ ...s, commonWebmsg: data }));
});
}, []);
const fields = useMemo(() => { const fields = useMemo(() => {
return { return {
password: { password: {
...@@ -184,7 +201,7 @@ const AvatarDropdown = ({ menu }) => { ...@@ -184,7 +201,7 @@ const AvatarDropdown = ({ menu }) => {
formRef={formRef} formRef={formRef}
fields={fields} fields={fields}
col={{ span: 24 }} col={{ span: 24 }}
onChange={(changedValues, allValues) => {}} onChange={(changedValues, allValues) => { }}
submitData={(values, fn) => { submitData={(values, fn) => {
saveData(values, fn); saveData(values, fn);
}} }}
......
...@@ -368,7 +368,7 @@ ol { ...@@ -368,7 +368,7 @@ ol {
} }
} }
.tabsTable { .tabstable {
background: #fff; background: #fff;
.ant-tabs-nav { .ant-tabs-nav {
...@@ -561,12 +561,24 @@ ol { ...@@ -561,12 +561,24 @@ ol {
} }
} }
.formList {
.ledgerf {
.ant-card-head {
display: none !important;
}
.ant-card-body {
padding: 0 !important;
}
}
.formlist {
>div { >div {
>div { >div {
>div { >div {
>div { >div {
>div:last-child { >div:last-child {
border: 1px solid #dbdbdb;
padding: 12px; padding: 12px;
} }
} }
...@@ -574,13 +586,3 @@ ol { ...@@ -574,13 +586,3 @@ ol {
} }
} }
} }
\ No newline at end of file
.ledgerf {
.ant-card-head {
display: none !important;
}
.ant-card-body {
padding: 0 !important;
}
}
\ No newline at end of file
import { useState, useCallback } from 'react'; import { useState, useCallback } from 'react';
export default function useGlobal() { export default function useGlobal() {
const [alive, setAlive] = useState(false), const [alive, setAlive] = useState(false),
[newMenus, setMenu] = useState({}); [newMenus, setMenu] = useState({}),
[allWebsocket, setAllWebsocket] = useState({});
const changealive = useCallback((parser) => { const changealive = useCallback((parser) => {
setAlive(parser); setAlive(parser);
...@@ -10,11 +11,16 @@ export default function useGlobal() { ...@@ -10,11 +11,16 @@ export default function useGlobal() {
const setMenuFn = useCallback((val) => { const setMenuFn = useCallback((val) => {
setMenu(val); setMenu(val);
}, []); }, []);
const changeWebsocket = useCallback((parser) => {
setAllWebsocket(parser)
}, []);
return { return {
alive, alive,
changealive, changealive,
newMenus, newMenus,
setMenuFn, setMenuFn,
allWebsocket,
changeWebsocket
}; };
} }
...@@ -3,6 +3,7 @@ import { Tooltip, Tabs } from 'antd'; ...@@ -3,6 +3,7 @@ import { Tooltip, Tabs } from 'antd';
import Filedetail from "@/components/Filedetail"; import Filedetail from "@/components/Filedetail";
import DetailPro from '@/components/DetailPro'; import DetailPro from '@/components/DetailPro';
import AutoTable from '@/components/AutoTable/mtable'; import AutoTable from '@/components/AutoTable/mtable';
import { history } from '@umijs/max';
const fields = [ const fields = [
{ {
title: '合同单号', title: '合同单号',
...@@ -188,14 +189,31 @@ const fields = [ ...@@ -188,14 +189,31 @@ const fields = [
render: (_, row) => { render: (_, row) => {
return ( return (
<Tooltip title={row.equipmentNo}> <Tooltip title={row.equipmentNo}>
{
row.pageStatus == 0 ?
<span className="table-cell">
{row.equipmentNo}
</span>
:
<a <a
className="table-cell" className="table-cell"
onClick={() => { onClick={() => {
history.push({
path: '/lease/costanalysis',
query: {
pageStatus: row.pageStatus,
extraparams: {
contractId: row.contractId,
equipmentId: row.id
}
}
})
}} }}
> >
{row.equipmentNo} {row.equipmentNo}
</a> </a>
}
</Tooltip> </Tooltip>
); );
} }
......
import React, { useMemo } from 'react';
import { Tooltip, Tabs } from 'antd';
import Filedetail from "@/components/Filedetail";
import DetailPro from '@/components/DetailPro';
import AutoTable from '@/components/AutoTable/mtable';
import { history } from '@umijs/max';
const columns = [
{
title: '设备编号',
dataIndex: 'equipmentNo',
key: 'equipmentNo'
},
{
title: '设备名称',
dataIndex: 'equipmentName',
key: 'equipmentName',
},
{
title: '设备类型',
dataIndex: 'equipmentTypeName',
key: 'equipmentType',
hideInSearch: true,
// valueType: 'select',
// options: [
// { label: '设备', value: 1 },
// { label: '智能单元', value: 2 },
// ]
},
{
title: '设备型号',
dataIndex: 'equipmentModelName',
key: 'equipmentModelName',
},
{
title: '开始租赁时间',
dataIndex: 'startLeaseDate',
key: 'startLeaseDateList',
valueType: 'dateRange'
},
{
title: '结束租赁时间',
dataIndex: 'endLeaseDate',
key: 'endLeaseDateList',
valueType: 'dateRange'
},
{
title: '实际结束时间',
dataIndex: 'realEndDate',
key: 'realEndDateList',
valueType: 'dateRange'
},
{
title: '采集状态',
dataIndex: 'collectStatusName',
key: 'collectStatusName',
hideInSearch: true
},
];
const Devices = ({ drawer }) => {
return <div>
<AutoTable
columns={columns}
path={'/lease/umContractEquipment/queryByContractId'}
resizeable={false}
pageextra="none"
bordered={false}
extraparams={{ contractId: drawer?.item?.id }}
pagination={'false'}
/>
</div>
}
export default Devices;
\ No newline at end of file
...@@ -18,7 +18,8 @@ function getcolumns(setdrawer, drawer) { ...@@ -18,7 +18,8 @@ function getcolumns(setdrawer, drawer) {
open: true, open: true,
item: row, item: row,
val: 'only', val: 'only',
title: '合同详情' title: '合同详情',
type: 'detail'
})); }));
}} }}
> >
...@@ -71,13 +72,14 @@ function getcolumns(setdrawer, drawer) { ...@@ -71,13 +72,14 @@ function getcolumns(setdrawer, drawer) {
<a <a
className="table-cell" className="table-cell"
onClick={() => { onClick={() => {
// setdrawer && setdrawer((s) => ({ setdrawer && setdrawer((s) => ({
// ...s, ...s,
// open: true, open: true,
// item: row, item: row,
// val: 'only', val: 'only',
// title: '租赁设备' title: '租赁设备',
// })); type: 'device'
}));
}} }}
> >
{row.equipmentNum} {row.equipmentNum}
......
...@@ -18,6 +18,79 @@ import Addform from '@/components/Addform'; ...@@ -18,6 +18,79 @@ import Addform from '@/components/Addform';
import Detail from '@/components/RepaireDetail/Detail'; import Detail from '@/components/RepaireDetail/Detail';
import dayjs from 'dayjs'; import dayjs from 'dayjs';
import Details from "./Details"; import Details from "./Details";
import Devices from "./Devices";
const formCommonColumns = [
{
title: '是否可操作',
dataIndex: 'isFinish',
key: 'isFinish',
editable: false,
hideInTable: true
},
{
title: '设备编号',
dataIndex: 'equipmentNo',
key: 'equipmentNo',
colProps: {
sm: 3,
},
editable: false
},
{
title: '设备名称',
dataIndex: 'equipmentName',
key: 'equipmentName',
colProps: {
sm: 3,
},
editable: false
},
{
title: '设备型号',
dataIndex: 'equipmentModelName',
key: 'equipmentModelName',
colProps: {
sm: 3,
},
editable: false
},
{
title: '每期单价(元)',
dataIndex: 'unitPrice',
key: 'unitPrice',
colProps: {
sm: 2,
},
editable: false
},
{
title: '押金(元)',
dataIndex: 'deposit',
key: 'deposit',
editable: false,
colProps: {
sm: 2,
},
},
{
title: '结束租赁时间',
dataIndex: 'endLeaseDate',
key: 'endLeaseDate',
editable: false,
colProps: {
sm: 3,
},
},
{
title: '采集状态',
dataIndex: 'collectStatusName',
key: 'collectStatusName',
editable: false,
colProps: {
sm: 2,
},
}
];
function Contract(props) { function Contract(props) {
let actionRef = useRef(), let actionRef = useRef(),
formRef = useRef(); formRef = useRef();
...@@ -269,8 +342,65 @@ function Contract(props) { ...@@ -269,8 +342,65 @@ function Contract(props) {
key='out' key='out'
btn={{ btn={{
size: 'small', size: 'small',
onClick: () => { onClick: async () => {
let res = await doFetch({ url: '/lease/umContractEquipment/queryBeforeRentout', params: { contractId: row.id } });
setdrawer((s) => ({
...s,
open: true,
item: { ...row, deviceList: res?.data?.dataList ?? [] },
val: 'out',
title: '退租',
fields: [
{
title: '',
dataIndex: 'deviceList',
key: 'deviceList',
valueType: 'formList',
initialValue: [
{
state: 'all',
title: '标题',
},
],
colProps: {
xs: 24,
sm: 24,
},
columns: [
...formCommonColumns,
{
title: '实际结束时间',
dataIndex: 'realEndDate',
key: 'realEndDate',
valueType: 'date',
colProps: {
sm: 3,
},
hideInForm: {
isFinish: [2]
},
hideInFormShowKey: 'realEndDate'
},
{
title: '违约金(元)',
dataIndex: 'violatePrice',
key: 'violatePrice',
colProps: {
sm: 3,
},
valueType: 'digit',
precision: 2,
hideInForm: {
isFinish: [2]
},
hideInFormShowKey: 'violatePrice'
},
],
creatorButtonProps: false,
deleteIconProps: false,
}
]
}));
}, },
}} }}
> >
...@@ -280,8 +410,38 @@ function Contract(props) { ...@@ -280,8 +410,38 @@ function Contract(props) {
key='break' key='break'
btn={{ btn={{
size: 'small', size: 'small',
onClick: () => { onClick: async () => {
let res = await doFetch({ url: '/lease/umContractEquipment/queryBeforeEndOrHandle', params: { contractId: row.id } });
setdrawer((s) => ({
...s,
open: true,
item: { ...row, deviceList: res?.data?.dataList ?? [] },
val: 'break',
title: '结束',
fields: [
{
title: '返程运费',
dataIndex: 'returnFreight',
key: 'returnFreight',
colProps: { span: 8 },
valueType: 'digit',
precision: 2,
formItemProps: { rules: [{ required: true, message: '此项为必填项' }] }
},
{
title: '返程运费承担方',
dataIndex: 'returnBear',
key: 'returnBear',
valueType: 'select',
options: [
{ label: '客户', value: '1' },
{ label: '平台', value: '2' },
],
colProps: { span: 8 },
formItemProps: { rules: [{ required: true, message: '此项为必填项' }] }
},
]
}));
}, },
}} }}
> >
...@@ -291,8 +451,46 @@ function Contract(props) { ...@@ -291,8 +451,46 @@ function Contract(props) {
key='handle' key='handle'
btn={{ btn={{
size: 'small', size: 'small',
onClick: () => { onClick: async () => {
let res = await doFetch({ url: '/lease/umContractEquipment/queryBeforeEndOrHandle', params: { contractId: row.id } });
setdrawer((s) => ({
...s,
open: true,
item: { ...row, deviceList: res?.data?.dataList ?? [] },
val: 'handle',
title: '处理',
fields: [
{
title: '退还押金',
dataIndex: 'refund',
key: 'refund',
colProps: { span: 8 },
valueType: 'digit',
precision: 2,
formItemProps: { rules: [{ required: true, message: '此项为必填项' }] }
},
{
title: '租赁物归还确认单上传',
dataIndex: 'leaseReturnFileList',
key: 'leaseReturnFileList',
valueType: 'uploadBtn',
fieldProps: {
limit: 1,
},
colProps: { span: 24 },
},
{
title: '押金归还确认单上传',
dataIndex: 'refundFileList',
key: 'refundFileList',
valueType: 'uploadBtn',
fieldProps: {
limit: 1,
},
colProps: { span: 24 },
},
]
}));
}, },
}} }}
> >
...@@ -342,6 +540,17 @@ function Contract(props) { ...@@ -342,6 +540,17 @@ function Contract(props) {
let end = dayjs(start).add(drawer.item.tenancy, 'months').subtract(1, 'day'); let end = dayjs(start).add(drawer.item.tenancy, 'months').subtract(1, 'day');
return end; return end;
}; };
function getOnlyDom() {
switch (drawer.type) {
case 'detail':
return <Details drawer={drawer} />;
case 'device':
return <Devices drawer={drawer} />;
}
}
return ( return (
<div style={{ position: 'relative' }}> <div style={{ position: 'relative' }}>
<AutoTable <AutoTable
...@@ -401,15 +610,30 @@ function Contract(props) { ...@@ -401,15 +610,30 @@ function Contract(props) {
open: false, open: false,
})); }));
}} }}
onFinish={(vals) => { onFinish={async (vals) => {
let newVals = JSON.parse(JSON.stringify(vals)); let newVals = JSON.parse(JSON.stringify(vals));
if (drawer?.val == 'add') { if (drawer?.val == 'add') {
run({ url: pathconfig?.add, params: { ...newVals, amount } }); await runAsync({ url: pathconfig?.add, params: { ...newVals, amount } });
} else if (drawer?.val == 'edit') { } else if (drawer?.val == 'edit') {
run({ url: pathconfig?.edit, params: { ...newVals, id: drawer?.item?.id, amount } }); await runAsync({ url: pathconfig?.edit, params: { ...newVals, id: drawer?.item?.id, amount } });
} else if (drawer?.val == 'start') { } else if (drawer?.val == 'start') {
delete newVals.intelligenceList; delete newVals.intelligenceList;
run({ url: '/lease/umContract/start', params: { ...newVals, id: drawer?.item?.id } }); await runAsync({ url: '/lease/umContract/start', params: { ...newVals, id: drawer?.item?.id } });
} else if (drawer?.val == 'out') {
let contractEquipmentList = newVals.deviceList?.filter(it => {
if (it.isFinish == 1) {
return {
id: it.id,
realEndDate: it.realEndDate,
violatePrice: it.violatePrice
}
}
})
await runAsync({ url: '/lease/umContract/rentout', params: { contractEquipmentList, id: drawer?.item?.id } });
} else if (drawer?.val == 'break') {
await runAsync({ url: '/lease/umContract/end', params: { ...newVals, id: drawer?.item?.id } });
} else if (drawer?.val == 'handle') {
await runAsync({ url: '/lease/umContract/handle', params: { ...newVals, id: drawer?.item?.id } });
} }
}} }}
onValuesChange={(changedValues, allValues) => { onValuesChange={(changedValues, allValues) => {
...@@ -448,10 +672,12 @@ function Contract(props) { ...@@ -448,10 +672,12 @@ function Contract(props) {
render: (props, doms) => { render: (props, doms) => {
return [ return [
<div key='render' className='spread' style={{ position: 'fixed', bottom: 12, width: 'calc(100% - 62px)' }}> <div key='render' className='spread' style={{ position: 'fixed', bottom: 12, width: 'calc(100% - 62px)' }}>
<div key='amount' style={{ color: 'red', fontSize: 16, fontWeight: 500 }}> {
(drawer.val == 'add' || drawer.val == 'edit') && <div key='amount' style={{ color: 'red', fontSize: 16, fontWeight: 500 }}>
<span>合同金额(单位:元):</span> <span>合同金额(单位:元):</span>
<span>{amount}</span> <span>{amount}</span>
</div>, </div>
}
<div> <div>
<PremButton <PremButton
key='rest' key='rest'
...@@ -481,8 +707,39 @@ function Contract(props) { ...@@ -481,8 +707,39 @@ function Contract(props) {
}, },
}} }}
childrenposition={(drawer.val == 'break' || drawer.val == 'handle') ? 'top' : ''}
> >
<Details drawer={drawer} /> {
drawer.val == 'only' && getOnlyDom()
}
{
(drawer.val == 'break' || drawer.val == 'handle') && <FormTable columns={[
...formCommonColumns,
{
title: '实际结束时间',
dataIndex: 'realEndDate',
key: 'realEndDate',
colProps: {
sm: 3,
},
editable: false
},
{
title: '违约金(元)',
dataIndex: 'violatePrice',
key: 'violatePrice',
colProps: {
sm: 3,
},
editable: false
},
]}
dataSource={drawer?.item?.deviceList}
resizeable={false}
pageextra="none"
/>
}
</DrawerPro> </DrawerPro>
</div> </div>
); );
......
import React, { useMemo, useState } from 'react';
import DrawerPro from '@/components/DrawerPro';
import AutoTable from '@/components/AutoTable/mtable';
import PremButton from '@/components/PremButton';
import { Tooltip } from "antd";
import Filedetail from "@/components/Filedetail";
import { doFetch, exportFetch } from '@/utils/doFetch';
import { message } from "antd";
const commona = [
{
title: '当期金额',
dataIndex: 'thisPrice',
key: 'thisPrice',
search: false
},
{
title: '回款日期',
dataIndex: 'collectionDate',
key: 'collectionDate',
search: false
},
{
title: '预警日期',
dataIndex: 'warnDate',
key: 'warnDate',
search: false
},
{
title: '状态',
dataIndex: 'statusName',
key: 'statusName',
search: false
}
],
commonb = [
{
title: '是否回款',
dataIndex: 'isCollectionName',
key: 'isCollectionName',
search: false
},
{
title: '回款时间',
dataIndex: 'collectionTime',
key: 'collectionTime',
search: false
},
{
title: '回款形式',
dataIndex: 'collectionTypeName',
key: 'collectionTypeName',
search: false
}
],
columnsc = [
{
title: '基本信息',
valueType: 'split'
},
{
title: '期数',
dataIndex: 'thisTenancy',
key: 'thisTenancy'
},
{
title: '当期开始时间',
dataIndex: 'tenancyStartDate',
key: 'tenancyStartDate'
},
{
title: '当期结束时间',
dataIndex: 'tenancyEndDate',
key: 'tenancyEndDate'
},
...commona,
{
title: '回款信息',
valueType: 'split'
},
...commonb,
{
title: '回款确认人',
dataIndex: 'collectionUserName',
key: 'collectionUserName'
},
{
title: '是否逾期',
dataIndex: 'isOverdueName',
key: 'isOverdueName'
},
{
title: '减免租金信息',
valueType: 'split'
},
{
title: '当期租金减免金额',
dataIndex: 'reducePrice',
key: 'reducePrice'
},
{
title: '最近租金减免时间',
dataIndex: 'reduceTime',
key: 'reduceTime'
},
{
title: '最近租金减免人',
dataIndex: 'reduceUserName',
key: 'reduceUserName'
},
{
title: '减免情况说明',
dataIndex: 'reduceRemark',
key: 'reduceRemark'
},
{
title: '相关文件',
dataIndex: 'reduceFileFileList',
key: 'reduceFileFileList',
render: (_, row) => {
return <Filedetail files={row?.['reduceFileFileList']} />
}
},
{
title: '开票信息',
valueType: 'split'
},
{
title: '是否开票',
dataIndex: 'isOpenName',
key: 'isOpenName'
},
{
title: '开票时间',
dataIndex: 'openTime',
key: 'openTime'
},
{
title: '开票记录人',
dataIndex: 'openUserName',
key: 'openUserName'
},
];
const Leaseterminformation = ({ drawer, boxRef }) => {
const [detail, cd] = useState({
open: false,
});
const columns = [
{
title: '期数',
dataIndex: 'thisTenancy',
key: 'thisTenancy',
search: false
},
...commona,
...commonb,
{
title: '是否逾期',
dataIndex: 'isOverdueName',
key: 'isOverdueName',
search: false
},
{
title: '租金减免金额',
dataIndex: 'reducePrice',
key: 'reducePrice',
search: false
},
{
title: '租金情况说明',
dataIndex: 'reduceRemark',
key: 'reduceRemark',
search: false
},
{
title: '是否开票',
dataIndex: 'isOpenName',
key: 'isOpenName',
search: false
},
{
title: '操作',
valueType: 'option',
width: 80,
render: (text, row, _, action) => rightExtra(text, row, _, action),
}
];
const rightExtra = (text, row, _, action) => {
return [
<PremButton
key='confirm'
btn={{
size: 'small',
onClick: () => {
cd((s) => ({
...s,
open: true,
item: row,
title: '租期详情',
val: 'detail'
}));
},
}}
>
详情
</PremButton>
]
}
return <div style={{ position: "relative" }}>
<div style={{ display: 'flex', justifyContent: 'flex-end' }}>
<PremButton
key='export'
btn={{
type: 'primary',
onClick: async () => {
message.warning('导出中,请稍后');
await exportFetch({ url: '/lease/umContractEquipmentTenancy/exportExcelTenancy', params: { id: drawer?.item?.id } });
}
}}
>
导出
</PremButton>
</div>
<AutoTable
columns={columns}
path={'/lease/umContractEquipmentTenancy/queryByContractEquipmentId'}
resizeable={false}
bordered={false}
extraparams={{ id: drawer?.item?.id }}
options={false}
pagination='false'
/>
<DrawerPro
{...detail}
fields={columnsc}
params={{ id: detail?.item?.id }}
detailpath='/lease/umContractEquipmentTenancy/queryDetail'
placement="right"
onClose={() => {
cd((s) => ({
...s,
open: false,
}));
}}
getContainer={() => boxRef.current}
>
</DrawerPro>
</div>
}
export default Leaseterminformation;
\ No newline at end of file
import { Tooltip, Image, Tag } from 'antd';
import { doFetch } from '@/utils/doFetch';
const statusColors = {
1: '#7ac143',
2: 'orange',
3: '#fa4659'
};
function getcolumns(setdrawer, activeKey) {
const commona = [
{
title: '客户',
dataIndex: 'customerName',
key: 'customerId',
valueType: 'select',
options: { path: '/lease/umLeaseCustomer/getSelection', params: {} },
fieldProps: {
showSearch: true
},
fixed: 'left'
},
{
title: '合同单号',
dataIndex: 'contractNo',
key: 'contractNo',
fixed: 'left'
},
{
title: '设备编号',
dataIndex: 'equipmentNo',
key: 'equipmentNo'
},
{
title: '设备名称',
dataIndex: 'equipmentName',
key: 'equipmentName',
},
{
title: '智能单元莫格云眼编号',
dataIndex: 'intelligentUnitNo',
key: 'intelligentUnitNo',
width: 170
},
{
title: '每期单价(元)',
dataIndex: 'unitPrice',
key: 'unitPrice',
hideInSearch: true
},
{
title: '智享价(元)',
dataIndex: 'zxPrice',
key: 'zxPrice',
hideInSearch: true
},
{
title: '返利金额(元)',
dataIndex: 'rebatePrice',
key: 'rebatePrice',
hideInSearch: true
},
{
title: '押金(元)',
dataIndex: 'deposit',
key: 'deposit',
hideInSearch: true
}
],
commonb = [
{
title: '开票期数',
dataIndex: 'openNum',
key: 'openNum',
hideInSearch: true
},
{
title: '已发生租金',
dataIndex: 'occurredPrice',
key: 'occurredPrice',
hideInSearch: true
},
{
title: '累计逾期欠费',
dataIndex: 'overduePrice',
key: 'overduePrice',
hideInSearch: true
},
{
title: '累计回款金额',
dataIndex: 'collectionPrice',
key: 'collectionPrice',
hideInSearch: true
},
{
title: '逾期次数',
dataIndex: 'overdueNum',
key: 'overdueNum',
hideInSearch: true
},
{
title: '开始租赁时间',
dataIndex: 'startLeaseDate',
key: 'startLeaseDateList',
valueType: 'dateRange'
},
{
title: '结束租赁时间',
dataIndex: 'endLeaseDate',
key: 'endLeaseDateList',
valueType: 'dateRange'
},
{
title: '实际结束时间',
dataIndex: 'realEndDate',
key: 'realEndDateList',
valueType: 'dateRange'
}
];
return [
{
tab: '未完成',
key: 'item-1',
columns: [
...commona,
{
title: '当前租期/租期',
dataIndex: 'thisTenancy',
key: 'thisTenancy',
render: (_, row) => {
return (
<a
className="table-cell"
onClick={() => {
setdrawer && setdrawer((s) => ({
...s,
open: true,
item: row,
val: 'only',
title: '租期信息',
type: 'detail'
}));
}}
>
{row.thisTenancy + '/' + row.tenancyTotal}
</a>
);
},
hideInSearch: true
},
...commonb,
{
title: '回款状态',
dataIndex: 'collectionStatusName',
key: 'collectionStatus',
hideInForm: true,
valueType: 'select',
options: [
{ label: '正常', value: 1 },
{ label: '预警', value: 2 },
{ label: '报警', value: 3 }
],
fixed: 'right',
render: (_, row) => {
return <span style={{ color: statusColors[row.collectionStatus] }}>{row.collectionStatusName}</span>
},
width: 100
},
]
},
{
tab: '已完成',
key: 'item-2',
columns: [
...commona,
{
title: '租期',
dataIndex: 'tenancyTotal',
key: 'tenancyTotal',
render: (_, row) => {
return (
<a
className="table-cell"
onClick={() => {
setdrawer && setdrawer((s) => ({
...s,
open: true,
item: row,
val: 'only',
title: '租期信息',
type: 'detail'
}));
}}
>
{row.tenancyTotal}
</a>
);
},
hideInSearch: true
},
...commonb,]
}
]
}
export default getcolumns;
\ No newline at end of file
import React, { useState, useMemo, useRef, useEffect } from 'react';
import DrawerPro from '@/components/DrawerPro';
import AutoTable from '@/components/AutoTable';
import PremButton from '@/components/PremButton';
import getcolumns from './columns';
import { doFetch } from '@/utils/doFetch';
import { useRequest } from "ahooks";
import { Divider, Tabs, ProDescriptions, message } from "antd";
import dayjs from 'dayjs';
import Leaseterminformation from "./Leaseterminformation";
const Costanalysis = () => {
let actionRef = useRef(), formRef = useRef(), boxRef = useRef();
const [drawer, setdrawer] = useState({
open: false,
}),
[extraparams, setextraparams] = useState({}),
[activeKey, catk] = useState('item-1');
const { run, loading, runAsync } = useRequest(doFetch, {
manual: true,
onSuccess: (res, params) => {
if (res?.code == "0000") {
actionRef?.current?.reload();
setdrawer((s) => ({
...s,
open: false,
}));
}
},
});
const columns = useMemo(() => {
let defcolumn = getcolumns(setdrawer, activeKey)?.filter(it => it.key == activeKey)?.[0]?.columns ?? [];
return defcolumn.concat({
title: '操作',
valueType: 'option',
width: activeKey == 'item-1' ? 260 : 100,
render: (text, row, _, action) => rightExtra(text, row, _, action),
});
}, [activeKey]);
const rightExtra = (text, row, _, action) => {
return [
activeKey == 'item-1' && <PremButton
key='confirm'
btn={{
size: 'small',
onClick: async () => {
let res = await doFetch({ url: '/lease/umContractEquipment/queryBeforeCollection', params: { id: row.id } });
if (res?.data?.data?.waitNum == 0) {
message.warning('该设备需回款的租期已全部回款,无需再次回款!')
} else {
setdrawer((s) => ({
...s,
open: true,
item: { ...row, waitNum: res?.data?.data?.waitNum, isColl: res?.data?.data?.isColl },
val: 'confirm',
title: '回款确认',
fields: [
{
title: '本期是否回款',
dataIndex: 'isColl',
key: 'isColl',
fieldProps: {
disabled: true
},
colProps: { span: 8 },
},
{
title: '剩余回款期数',
dataIndex: 'waitNum',
key: 'waitNum',
fieldProps: {
disabled: true
},
colProps: { span: 8 },
},
{
title: '本次回款期数',
dataIndex: 'collNum',
key: 'collNum',
valueType: 'digit',
colProps: { span: 8 },
precision: 0,
formItemProps: { rules: [{ required: true, message: '此项为必填项' }] }
},
{
title: '回款形式',
dataIndex: 'collType',
key: 'collType',
valueType: 'select',
options: [
{ label: '现金', value: 1 },
{ label: '银行承兑', value: 2 },
],
colProps: { span: 8 },
formItemProps: { rules: [{ required: true, message: '此项为必填项' }] },
},
]
}));
}
},
}}
>
回款确认
</PremButton>,
activeKey == 'item-1' && <PremButton
key='reduction'
btn={{
size: 'small',
onClick: async () => {
},
}}
>
租金减免
</PremButton>,
<PremButton
key='invoicing'
btn={{
size: 'small',
onClick: async () => {
},
}}
>
开票记录
</PremButton>
]
};
return <div ref={boxRef}>
<AutoTable
pagetitle={<h3 className="page-title">费用分析</h3>}
columns={columns}
path={activeKey == 'item-1' ? '/lease/umContractEquipment/queryNoAnalysis' : '/lease/umContractEquipment/queryYesAnalysis'}
actionRef={actionRef}
resizeable={false}
bordered={false}
x={2500}
extraparams={extraparams}
onTabChange={(key) => {
catk(key);
}}
activeTabKey={activeKey}
tabList={getcolumns()}
/>
<DrawerPro
{...drawer}
fields={drawer.fields}
params={{ id: drawer?.item?.id }}
defaultFormValue={drawer?.item ?? {}}
placement="right"
onClose={() => {
setdrawer((s) => ({
...s,
open: false,
}));
}}
>
<Leaseterminformation drawer={drawer} boxRef={boxRef} />
</DrawerPro>
</div>
}
export default Costanalysis;
\ No newline at end of file
import { Tooltip, Image, Tag } from 'antd'; import { Tooltip, Image, Tag } from 'antd';
import { doFetch } from '@/utils/doFetch'; import { doFetch } from '@/utils/doFetch';
const statusColors = {
1: '#7ac143',
2: '#00bce4',
3: '#6a737b',
4: '#fa4659'
};
function getcolumns(setdrawer, activeKey) { function getcolumns(setdrawer, activeKey) {
return activeKey == 'item-1' ? { return activeKey == 'item-1' ? {
columns: [ columns: [
...@@ -130,12 +136,15 @@ function getcolumns(setdrawer, activeKey) { ...@@ -130,12 +136,15 @@ function getcolumns(setdrawer, activeKey) {
hideInForm: true, hideInForm: true,
valueType: 'select', valueType: 'select',
options: [ options: [
{ label: '工作', value: '1' }, { label: '工作', value: 1 },
{ label: '待机', value: '2' }, { label: '待机', value: 2 },
{ label: '关机', value: '3' }, { label: '关机', value: 3 },
{ label: '报警', value: '4' } { label: '报警', value: 4 }
], ],
fixed: 'right' fixed: 'right',
render: (_, row) => {
return <span style={{ color: statusColors[row.collectStatus] }}>{row.collectStatusName}</span>
}
}, },
{ {
title: '所属信息', title: '所属信息',
......
...@@ -10,6 +10,8 @@ import TreeRender from '@/components/TreeRender'; ...@@ -10,6 +10,8 @@ import TreeRender from '@/components/TreeRender';
import { Divider, Tabs, ProDescriptions } from "antd"; import { Divider, Tabs, ProDescriptions } from "antd";
import Account from "./Account"; import Account from "./Account";
import Basemsg from "./Basemsg"; import Basemsg from "./Basemsg";
import { useModel } from "@umijs/max";
import dayjs from 'dayjs';
const Devicedata = () => { const Devicedata = () => {
let actionRef = useRef(), formRef = useRef(), boxRef = useRef(); let actionRef = useRef(), formRef = useRef(), boxRef = useRef();
const [drawer, setdrawer] = useState({ const [drawer, setdrawer] = useState({
...@@ -18,7 +20,9 @@ const Devicedata = () => { ...@@ -18,7 +20,9 @@ const Devicedata = () => {
[extraparams, setextraparams] = useState({}), [extraparams, setextraparams] = useState({}),
[activeKey, catk] = useState('item-1'), [activeKey, catk] = useState('item-1'),
[item2extraparams, citp] = useState({}), [item2extraparams, citp] = useState({}),
[searchParams, csp] = useState({}); [searchParams, csp] = useState({}),
[leaseList, clea] = useState([]);
const { allWebsocket: { commonWebsocket, commonWebmsg } } = useModel('useGlobal');
const { run, loading, runAsync } = useRequest(doFetch, { const { run, loading, runAsync } = useRequest(doFetch, {
manual: true, manual: true,
onSuccess: (res, params) => { onSuccess: (res, params) => {
...@@ -31,12 +35,42 @@ const Devicedata = () => { ...@@ -31,12 +35,42 @@ const Devicedata = () => {
} }
}, },
}), }),
tableData = useRequest(async () => { tableData = useRequest(() => doFetch({ url: '/lease/umLeaseLedger/queryLeaseList', params: { ...searchParams, ...extraparams } }), {
let res = await doFetch({ url: '/lease/umLeaseLedger/queryLeaseList', params: { ...searchParams, ...extraparams } }); refreshDeps: [extraparams, searchParams],
return res?.data?.dataList ?? []; onSuccess: (res, params) => {
}, { if (res.code == '0000') {
refreshDeps: [extraparams, searchParams] clea(res?.data?.dataList ?? [])
}) }
}
});
useEffect(() => {
const msg = commonWebmsg?.msg;
if (commonWebmsg?.wsMsgModel == 'LEASE') {
let newList = JSON.parse(JSON.stringify(leaseList));
newList = newList?.map(it => {
if (it.id == msg.id) {
it.collectStatusName = msg.collectStatusName;
it.collectStatus = msg.collectStatus;
}
return it
});
clea(newList);
}
}, [commonWebmsg]);
useEffect(() => {
try {
commonWebsocket && commonWebsocket.emit("sendMessage", {
"wsMsgModel": "LEASE",
"subId": dayjs().valueOf(),
param: '',
unsubscribe: false,
});
} catch (error) {
}
}, []);
const columns = useMemo(() => { const columns = useMemo(() => {
let defcolumn = getcolumns(setdrawer, activeKey)?.columns ?? []; let defcolumn = getcolumns(setdrawer, activeKey)?.columns ?? [];
return defcolumn; return defcolumn;
...@@ -49,7 +83,7 @@ const Devicedata = () => { ...@@ -49,7 +83,7 @@ const Devicedata = () => {
key: 'item-1', key: 'item-1',
children: <AutoTable children: <AutoTable
columns={columns} columns={columns}
dataSource={tableData?.data ?? []} dataSource={leaseList}
actionRef={actionRef} actionRef={actionRef}
resizeable={false} resizeable={false}
bordered={false} bordered={false}
...@@ -70,7 +104,7 @@ const Devicedata = () => { ...@@ -70,7 +104,7 @@ const Devicedata = () => {
children: <Account boxRef={boxRef} extraparams={item2extraparams} /> children: <Account boxRef={boxRef} extraparams={item2extraparams} />
} }
] ]
}, [extraparams, tableData?.data]); }, [extraparams, leaseList]);
const items = useMemo(() => { const items = useMemo(() => {
if (drawer.val == 'only') { if (drawer.val == 'only') {
if (activeKey == 'item-1') { if (activeKey == 'item-1') {
......
...@@ -2,6 +2,7 @@ import React, { useState, useRef } from 'react'; ...@@ -2,6 +2,7 @@ import React, { useState, useRef } from 'react';
import AutoTable from '@/components/AutoTable/mtable'; import AutoTable from '@/components/AutoTable/mtable';
import { useRequest } from 'ahooks'; import { useRequest } from 'ahooks';
import { doFetch } from '@/utils/doFetch'; import { doFetch } from '@/utils/doFetch';
import styles from "./index.less";
const columnsa = [ const columnsa = [
{ {
title: '客户名称', title: '客户名称',
...@@ -42,7 +43,10 @@ const columnsa = [ ...@@ -42,7 +43,10 @@ const columnsa = [
dataIndex: 'equipmentModelName', dataIndex: 'equipmentModelName',
key: 'equipmentModelId', key: 'equipmentModelId',
valueType: 'select', valueType: 'select',
options: { path: '/asset/equipmentModel/query/selection', params: {} } options: { path: '/asset/equipmentModel/query/selection', params: {} },
fieldProps: {
showSearch: true
}
}, },
{ {
title: '设备品牌', title: '设备品牌',
...@@ -77,25 +81,37 @@ const columnsa = [ ...@@ -77,25 +81,37 @@ const columnsa = [
title: '工作', title: '工作',
dataIndex: 'runRate', dataIndex: 'runRate',
key: 'runRate', key: 'runRate',
search: false search: false,
render: (_, row) => {
return <span style={{ color: "#7ac143" }}>{row.runRate}%</span>
}
}, },
{ {
title: '待机', title: '待机',
dataIndex: 'standbyRate', dataIndex: 'standbyRate',
key: 'standbyRate', key: 'standbyRate',
search: false search: false,
render: (_, row) => {
return <span style={{ color: "#00bce4" }}>{row.runRate}%</span>
}
}, },
{ {
title: '报警', title: '报警',
dataIndex: 'alarmRate', dataIndex: 'alarmRate',
key: 'alarmRate', key: 'alarmRate',
search: false search: false,
render: (_, row) => {
return <span style={{ color: "#fa4659" }}>{row.runRate}%</span>
}
}, },
{ {
title: '关机', title: '关机',
dataIndex: 'offRate', dataIndex: 'offRate',
key: 'offRate', key: 'offRate',
search: false search: false,
render: (_, row) => {
return <span style={{ color: "#6a737b" }}>{row.runRate}%</span>
}
}, },
]; ];
...@@ -109,7 +125,7 @@ const Leasedevice = () => { ...@@ -109,7 +125,7 @@ const Leasedevice = () => {
return res?.data?.dataList ?? []; return res?.data?.dataList ?? [];
}, { }, {
refreshDeps: [searchParams] refreshDeps: [searchParams]
}) });
return <div style={{ background: '#fff' }}> return <div style={{ background: '#fff' }}>
<div className="ant-card-head" style={{ backgroundColor: 'white' }}> <div className="ant-card-head" style={{ backgroundColor: 'white' }}>
<div className="ant-card-head-wrapper"> <div className="ant-card-head-wrapper">
...@@ -128,7 +144,7 @@ const Leasedevice = () => { ...@@ -128,7 +144,7 @@ const Leasedevice = () => {
onRow={(record) => { onRow={(record) => {
return { return {
onClick: (event) => { onClick: (event) => {
console.log(event, record); cr(record);
} }
}; };
}} }}
...@@ -139,14 +155,19 @@ const Leasedevice = () => { ...@@ -139,14 +155,19 @@ const Leasedevice = () => {
}} }}
toolBarRender={true} toolBarRender={true}
options={false} options={false}
rowKey='ledgerCustomerId'
rowClassName={(record, index) => {
return record.ledgerCustomerId == clickrow?.ledgerCustomerId ? styles.rowClass : ''
}}
/> />
</div> </div>
<div style={{ flex: 2 }}> <div style={{ flex: 2 }}>
<AutoTable <AutoTable
columns={columnsb} columns={columnsb}
path='/lease/umLeaseLedger/ledgerCustomerEquipmentUseDetail' path={clickrow?.ledgerCustomerId ? '/lease/umLeaseLedger/ledgerCustomerEquipmentUseDetail' : ''}
resizeable={false} resizeable={false}
pageextra="none" pageextra="none"
extraparams={{ ledgerCustomerId: clickrow?.ledgerCustomerId }}
/> />
</div> </div>
</div> </div>
......
.rowClass {
background-color: #e6f4ff;
}
\ No newline at end of file
...@@ -10,9 +10,9 @@ import TreeRender from '@/components/TreeRender'; ...@@ -10,9 +10,9 @@ import TreeRender from '@/components/TreeRender';
const { RangePicker } = DatePicker; const { RangePicker } = DatePicker;
const statusColors = { const statusColors = {
报警: '#fa4659', 报警: '#fa4659',
工作: '#00fff5', 工作: '#7ac143',
待机: '#80d6ff', 待机: '#00bce4',
关机: '#194769' 关机: '#6a737b'
}, },
format = 'YYYY-MM-DD HH:mm:ss'; format = 'YYYY-MM-DD HH:mm:ss';
const Devicestatus = ({ drawer }) => { const Devicestatus = ({ drawer }) => {
...@@ -151,14 +151,14 @@ const Devicestatus = ({ drawer }) => { ...@@ -151,14 +151,14 @@ const Devicestatus = ({ drawer }) => {
<div style={{ display: "flex", flexWrap: "wrap", gap: 15 }}> <div style={{ display: "flex", flexWrap: "wrap", gap: 15 }}>
{ {
Object?.keys(statusColors)?.map(it => { Object?.keys(statusColors)?.map(it => {
return <div key={it} style={{ width: '30%', display: 'flex', gap: 16, justifyContent: 'center' }} > return <div key={it} style={{ width: '31%', display: 'flex', gap: 16, justifyContent: 'center' }} >
<div style={{ color: statusColors[it] }}>{it}时长</div> <div style={{ color: statusColors[it] }}>{it}时长</div>
<div>{chartdata?.data?.data?.rateList?.filter(item => item.name == it)?.[0]?.time ?? 0}小时</div> <div>{chartdata?.data?.data?.rateList?.filter(item => item.name == it)?.[0]?.time ?? 0}小时</div>
<div>{chartdata?.data?.data?.rateList?.filter(item => item.name == it)?.[0]?.rate ?? 0}%</div> <div>{chartdata?.data?.data?.rateList?.filter(item => item.name == it)?.[0]?.rate ?? 0}%</div>
</div> </div>
}) })
} }
<div style={{ width: '30%', display: 'flex', gap: 16, justifyContent: 'center' }} > <div style={{ width: '31%', display: 'flex', gap: 16, justifyContent: 'center' }} >
<div>总时长</div> <div>总时长</div>
<div>{chartdata?.data?.data?.timeRange}小时</div> <div>{chartdata?.data?.data?.timeRange}小时</div>
</div> </div>
......
...@@ -4099,6 +4099,11 @@ address@^1.0.1, address@^1.1.2: ...@@ -4099,6 +4099,11 @@ address@^1.0.1, address@^1.1.2:
resolved "https://mirrors.huaweicloud.com/repository/npm/address/-/address-1.2.2.tgz#2b5248dac5485a6390532c6a517fda2e3faac89e" resolved "https://mirrors.huaweicloud.com/repository/npm/address/-/address-1.2.2.tgz#2b5248dac5485a6390532c6a517fda2e3faac89e"
integrity sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA== integrity sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==
after@0.8.2:
version "0.8.2"
resolved "https://registry.npmmirror.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f"
integrity sha512-QbJ0NTQ/I9DI3uSJA4cbexiwQeRAfjPScqIbSjUDd9TOrcg6pTkdgziesOqxBMBzit8vFCTwrP27t13vFOORRA==
agent-base@6: agent-base@6:
version "6.0.2" version "6.0.2"
resolved "https://registry.npmmirror.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" resolved "https://registry.npmmirror.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77"
...@@ -4463,6 +4468,11 @@ array.prototype.tosorted@^1.1.1: ...@@ -4463,6 +4468,11 @@ array.prototype.tosorted@^1.1.1:
es-shim-unscopables "^1.0.0" es-shim-unscopables "^1.0.0"
get-intrinsic "^1.1.3" get-intrinsic "^1.1.3"
arraybuffer.slice@~0.0.7:
version "0.0.7"
resolved "https://registry.npmmirror.com/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz#3bbc4275dd584cc1b10809b89d4e8b63a69e7675"
integrity sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==
arrify@^1.0.1: arrify@^1.0.1:
version "1.0.1" version "1.0.1"
resolved "https://mirrors.huaweicloud.com/repository/npm/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" resolved "https://mirrors.huaweicloud.com/repository/npm/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
...@@ -4825,6 +4835,11 @@ babel-types@^6.26.0: ...@@ -4825,6 +4835,11 @@ babel-types@^6.26.0:
lodash "^4.17.4" lodash "^4.17.4"
to-fast-properties "^1.0.3" to-fast-properties "^1.0.3"
backo2@1.0.2:
version "1.0.2"
resolved "https://registry.npmmirror.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947"
integrity sha512-zj6Z6M7Eq+PBZ7PQxl5NT665MvJdAkzp0f60nAJ+sLaSCBPMwVak5ZegFbgVCzFcCJTKFoMizvM5Ld7+JrRJHA==
bail@^1.0.0: bail@^1.0.0:
version "1.0.5" version "1.0.5"
resolved "https://mirrors.huaweicloud.com/repository/npm/bail/-/bail-1.0.5.tgz#b6fa133404a392cbc1f8c4bf63f5953351e7a776" resolved "https://mirrors.huaweicloud.com/repository/npm/bail/-/bail-1.0.5.tgz#b6fa133404a392cbc1f8c4bf63f5953351e7a776"
...@@ -4840,6 +4855,11 @@ balanced-match@^2.0.0: ...@@ -4840,6 +4855,11 @@ balanced-match@^2.0.0:
resolved "https://mirrors.huaweicloud.com/repository/npm/balanced-match/-/balanced-match-2.0.0.tgz#dc70f920d78db8b858535795867bf48f820633d9" resolved "https://mirrors.huaweicloud.com/repository/npm/balanced-match/-/balanced-match-2.0.0.tgz#dc70f920d78db8b858535795867bf48f820633d9"
integrity sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA== integrity sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==
base64-arraybuffer@0.1.5:
version "0.1.5"
resolved "https://registry.npmmirror.com/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz#73926771923b5a19747ad666aa5cd4bf9c6e9ce8"
integrity sha512-437oANT9tP582zZMwSvZGy2nmSeAb8DW2me3y+Uv1Wp2Rulr8Mqlyrv3E7MLxmsiaPSMMDmiDVzgE+e8zlMx9g==
base64-js@^1.0.2, base64-js@^1.3.1: base64-js@^1.0.2, base64-js@^1.3.1:
version "1.5.1" version "1.5.1"
resolved "https://mirrors.huaweicloud.com/repository/npm/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" resolved "https://mirrors.huaweicloud.com/repository/npm/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
...@@ -4865,6 +4885,13 @@ bcrypt-pbkdf@^1.0.0: ...@@ -4865,6 +4885,13 @@ bcrypt-pbkdf@^1.0.0:
dependencies: dependencies:
tweetnacl "^0.14.3" tweetnacl "^0.14.3"
better-assert@~1.0.0:
version "1.0.2"
resolved "https://registry.npmmirror.com/better-assert/-/better-assert-1.0.2.tgz#40866b9e1b9e0b55b481894311e68faffaebc522"
integrity sha512-bYeph2DFlpK1XmGs6fvlLRUN29QISM3GBuUwSFsMY2XRx4AvC0WNCS57j4c/xGrK2RS24C1w3YoBOsw9fT46tQ==
dependencies:
callsite "1.0.0"
big.js@^5.2.2: big.js@^5.2.2:
version "5.2.2" version "5.2.2"
resolved "https://mirrors.huaweicloud.com/repository/npm/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" resolved "https://mirrors.huaweicloud.com/repository/npm/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328"
...@@ -4889,6 +4916,11 @@ blink-diff@^1.0.13: ...@@ -4889,6 +4916,11 @@ blink-diff@^1.0.13:
resolved "https://mirrors.huaweicloud.com/repository/npm/blink-diff/-/blink-diff-1.0.13.tgz#80e3df69de804b30d40c70f041e983841ecda899" resolved "https://mirrors.huaweicloud.com/repository/npm/blink-diff/-/blink-diff-1.0.13.tgz#80e3df69de804b30d40c70f041e983841ecda899"
integrity sha512-2hIEnGq8wruXfje9GvDV41VXo+4YdjrjL5ZMlVJT3Wi5k1jjz20fCTlVejSXoERirhEVsFYz9NmgdUYgQ41Giw== integrity sha512-2hIEnGq8wruXfje9GvDV41VXo+4YdjrjL5ZMlVJT3Wi5k1jjz20fCTlVejSXoERirhEVsFYz9NmgdUYgQ41Giw==
blob@0.0.5:
version "0.0.5"
resolved "https://registry.npmmirror.com/blob/-/blob-0.0.5.tgz#d680eeef25f8cd91ad533f5b01eed48e64caf683"
integrity sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==
bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9: bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9:
version "4.12.0" version "4.12.0"
resolved "https://mirrors.huaweicloud.com/repository/npm/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" resolved "https://mirrors.huaweicloud.com/repository/npm/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88"
...@@ -5209,6 +5241,11 @@ caller-path@^2.0.0: ...@@ -5209,6 +5241,11 @@ caller-path@^2.0.0:
dependencies: dependencies:
caller-callsite "^2.0.0" caller-callsite "^2.0.0"
callsite@1.0.0:
version "1.0.0"
resolved "https://registry.npmmirror.com/callsite/-/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20"
integrity sha512-0vdNRFXn5q+dtOqjfFtmtlI9N2eVZ7LMyEV2iKC5mEEFvSg/69Ml6b/WU2qF8W1nLRa0wiSrDT3Y5jOHZCwKPQ==
callsites@^2.0.0: callsites@^2.0.0:
version "2.0.0" version "2.0.0"
resolved "https://mirrors.huaweicloud.com/repository/npm/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" resolved "https://mirrors.huaweicloud.com/repository/npm/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50"
...@@ -5608,6 +5645,11 @@ compare-versions@^5.0.1: ...@@ -5608,6 +5645,11 @@ compare-versions@^5.0.1:
resolved "https://mirrors.huaweicloud.com/repository/npm/compare-versions/-/compare-versions-5.0.3.tgz#a9b34fea217472650ef4a2651d905f42c28ebfd7" resolved "https://mirrors.huaweicloud.com/repository/npm/compare-versions/-/compare-versions-5.0.3.tgz#a9b34fea217472650ef4a2651d905f42c28ebfd7"
integrity sha512-4UZlZP8Z99MGEY+Ovg/uJxJuvoXuN4M6B3hKaiackiHrgzQFEe3diJi1mf1PNHbFujM7FvLrK2bpgIaImbtZ1A== integrity sha512-4UZlZP8Z99MGEY+Ovg/uJxJuvoXuN4M6B3hKaiackiHrgzQFEe3diJi1mf1PNHbFujM7FvLrK2bpgIaImbtZ1A==
component-bind@1.0.0:
version "1.0.0"
resolved "https://registry.npmmirror.com/component-bind/-/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1"
integrity sha512-WZveuKPeKAG9qY+FkYDeADzdHyTYdIboXS59ixDeRJL5ZhxpqUnxSOwop4FQjMsiYm3/Or8cegVbpAHNA7pHxw==
component-classes@^1.2.5: component-classes@^1.2.5:
version "1.2.6" version "1.2.6"
resolved "https://mirrors.huaweicloud.com/repository/npm/component-classes/-/component-classes-1.2.6.tgz#c642394c3618a4d8b0b8919efccbbd930e5cd691" resolved "https://mirrors.huaweicloud.com/repository/npm/component-classes/-/component-classes-1.2.6.tgz#c642394c3618a4d8b0b8919efccbbd930e5cd691"
...@@ -5615,7 +5657,12 @@ component-classes@^1.2.5: ...@@ -5615,7 +5657,12 @@ component-classes@^1.2.5:
dependencies: dependencies:
component-indexof "0.0.3" component-indexof "0.0.3"
component-emitter@^1.2.1: component-emitter@1.2.1:
version "1.2.1"
resolved "https://registry.npmmirror.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6"
integrity sha512-jPatnhd33viNplKjqXKRkGU345p263OIWzDL2wH3LGIGp5Kojo+uXizHmOADRvhGFFTnJqX3jBAKP6vvmSDKcA==
component-emitter@^1.2.1, component-emitter@~1.3.0:
version "1.3.0" version "1.3.0"
resolved "https://mirrors.huaweicloud.com/repository/npm/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" resolved "https://mirrors.huaweicloud.com/repository/npm/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0"
integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==
...@@ -5625,6 +5672,11 @@ component-indexof@0.0.3: ...@@ -5625,6 +5672,11 @@ component-indexof@0.0.3:
resolved "https://mirrors.huaweicloud.com/repository/npm/component-indexof/-/component-indexof-0.0.3.tgz#11d091312239eb8f32c8f25ae9cb002ffe8d3c24" resolved "https://mirrors.huaweicloud.com/repository/npm/component-indexof/-/component-indexof-0.0.3.tgz#11d091312239eb8f32c8f25ae9cb002ffe8d3c24"
integrity sha512-puDQKvx/64HZXb4hBwIcvQLaLgux8o1CbWl39s41hrIIZDl1lJiD5jc22gj3RBeGK0ovxALDYpIbyjqDUUl0rw== integrity sha512-puDQKvx/64HZXb4hBwIcvQLaLgux8o1CbWl39s41hrIIZDl1lJiD5jc22gj3RBeGK0ovxALDYpIbyjqDUUl0rw==
component-inherit@0.0.3:
version "0.0.3"
resolved "https://registry.npmmirror.com/component-inherit/-/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143"
integrity sha512-w+LhYREhatpVqTESyGFg3NlP6Iu0kEKUHETY9GoZP/pQyW4mHFZuFWRUCIqVPZ36ueVLtoOEZaAqbCF2RDndaA==
compressible@~2.0.16: compressible@~2.0.16:
version "2.0.18" version "2.0.18"
resolved "https://mirrors.huaweicloud.com/repository/npm/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" resolved "https://mirrors.huaweicloud.com/repository/npm/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba"
...@@ -6123,6 +6175,13 @@ debug@^3.1.0, debug@^3.2.6: ...@@ -6123,6 +6175,13 @@ debug@^3.1.0, debug@^3.2.6:
dependencies: dependencies:
ms "^2.1.1" ms "^2.1.1"
debug@~3.1.0:
version "3.1.0"
resolved "https://registry.npmmirror.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==
dependencies:
ms "2.0.0"
decamelize-keys@^1.1.0: decamelize-keys@^1.1.0:
version "1.1.1" version "1.1.1"
resolved "https://mirrors.huaweicloud.com/repository/npm/decamelize-keys/-/decamelize-keys-1.1.1.tgz#04a2d523b2f18d80d0158a43b895d56dff8d19d8" resolved "https://mirrors.huaweicloud.com/repository/npm/decamelize-keys/-/decamelize-keys-1.1.1.tgz#04a2d523b2f18d80d0158a43b895d56dff8d19d8"
...@@ -6626,6 +6685,34 @@ end-of-stream@^1.1.0, end-of-stream@^1.4.1: ...@@ -6626,6 +6685,34 @@ end-of-stream@^1.1.0, end-of-stream@^1.4.1:
dependencies: dependencies:
once "^1.4.0" once "^1.4.0"
engine.io-client@~3.3.1:
version "3.3.3"
resolved "https://registry.npmmirror.com/engine.io-client/-/engine.io-client-3.3.3.tgz#aeb45695ced81b787a8a10c92b0bc226b1cb3c53"
integrity sha512-PXIgpzb1brtBzh8Q6vCjzCMeu4nfEPmaDm+L3Qb2sVHwLkxC1qRiBMSjOB0NJNjZ0hbPNUKQa+s8J2XxLOIEeQ==
dependencies:
component-emitter "1.2.1"
component-inherit "0.0.3"
debug "~3.1.0"
engine.io-parser "~2.1.1"
has-cors "1.1.0"
indexof "0.0.1"
parseqs "0.0.5"
parseuri "0.0.5"
ws "~6.1.0"
xmlhttprequest-ssl "~1.6.3"
yeast "0.1.2"
engine.io-parser@~2.1.1:
version "2.1.3"
resolved "https://registry.npmmirror.com/engine.io-parser/-/engine.io-parser-2.1.3.tgz#757ab970fbf2dfb32c7b74b033216d5739ef79a6"
integrity sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA==
dependencies:
after "0.8.2"
arraybuffer.slice "~0.0.7"
base64-arraybuffer "0.1.5"
blob "0.0.5"
has-binary2 "~1.0.2"
enhanced-resolve@5.9.3: enhanced-resolve@5.9.3:
version "5.9.3" version "5.9.3"
resolved "https://mirrors.huaweicloud.com/repository/npm/enhanced-resolve/-/enhanced-resolve-5.9.3.tgz#44a342c012cbc473254af5cc6ae20ebd0aae5d88" resolved "https://mirrors.huaweicloud.com/repository/npm/enhanced-resolve/-/enhanced-resolve-5.9.3.tgz#44a342c012cbc473254af5cc6ae20ebd0aae5d88"
...@@ -8401,6 +8488,18 @@ has-bigints@^1.0.1, has-bigints@^1.0.2: ...@@ -8401,6 +8488,18 @@ has-bigints@^1.0.1, has-bigints@^1.0.2:
resolved "https://mirrors.huaweicloud.com/repository/npm/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" resolved "https://mirrors.huaweicloud.com/repository/npm/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa"
integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==
has-binary2@~1.0.2:
version "1.0.3"
resolved "https://registry.npmmirror.com/has-binary2/-/has-binary2-1.0.3.tgz#7776ac627f3ea77250cfc332dab7ddf5e4f5d11d"
integrity sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==
dependencies:
isarray "2.0.1"
has-cors@1.1.0:
version "1.1.0"
resolved "https://registry.npmmirror.com/has-cors/-/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39"
integrity sha512-g5VNKdkFuUuVCP9gYfDJHjK2nqdQJ7aDLTnycnc2+RvsOQbuLdF5pm7vuE5J76SEBIQjs4kQY/BWq74JUmjbXA==
has-flag@^2.0.0: has-flag@^2.0.0:
version "2.0.0" version "2.0.0"
resolved "https://mirrors.huaweicloud.com/repository/npm/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" resolved "https://mirrors.huaweicloud.com/repository/npm/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51"
...@@ -8849,6 +8948,11 @@ indent-string@^4.0.0: ...@@ -8849,6 +8948,11 @@ indent-string@^4.0.0:
resolved "https://mirrors.huaweicloud.com/repository/npm/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" resolved "https://mirrors.huaweicloud.com/repository/npm/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251"
integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==
indexof@0.0.1:
version "0.0.1"
resolved "https://registry.npmmirror.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d"
integrity sha512-i0G7hLJ1z0DE8dsqJa2rycj9dBmNKgXBvotXtZYXakU9oivfB9Uj2ZBC27qqef2U58/ZLwalxa1X/RDCdkHtVg==
inflight@^1.0.4: inflight@^1.0.4:
version "1.0.6" version "1.0.6"
resolved "https://mirrors.huaweicloud.com/repository/npm/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" resolved "https://mirrors.huaweicloud.com/repository/npm/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
...@@ -9424,6 +9528,11 @@ isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: ...@@ -9424,6 +9528,11 @@ isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0:
resolved "https://mirrors.huaweicloud.com/repository/npm/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" resolved "https://mirrors.huaweicloud.com/repository/npm/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==
isarray@2.0.1:
version "2.0.1"
resolved "https://registry.npmmirror.com/isarray/-/isarray-2.0.1.tgz#a37d94ed9cda2d59865c9f76fe596ee1f338741e"
integrity sha512-c2cu3UxbI+b6kR3fy0nRnAhodsvR9dx7U5+znCOzdj6IfP3upFURTr0Xl5BlQZNKZjEtxrmVyfSdeE3O57smoQ==
isarray@^2.0.5: isarray@^2.0.5:
version "2.0.5" version "2.0.5"
resolved "https://mirrors.huaweicloud.com/repository/npm/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" resolved "https://mirrors.huaweicloud.com/repository/npm/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723"
...@@ -10889,6 +10998,11 @@ object-assign@4.x, object-assign@^4, object-assign@^4.0.1, object-assign@^4.1.0, ...@@ -10889,6 +10998,11 @@ object-assign@4.x, object-assign@^4, object-assign@^4.0.1, object-assign@^4.1.0,
resolved "https://mirrors.huaweicloud.com/repository/npm/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" resolved "https://mirrors.huaweicloud.com/repository/npm/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==
object-component@0.0.3:
version "0.0.3"
resolved "https://registry.npmmirror.com/object-component/-/object-component-0.0.3.tgz#f0c69aa50efc95b866c186f400a33769cb2f1291"
integrity sha512-S0sN3agnVh2SZNEIGc0N1X4Z5K0JeFbGBrnuZpsxuUh5XLF0BnvWkMjRXo/zGKLd/eghvNIKcx1pQkmUjXIyrA==
object-copy@^0.1.0: object-copy@^0.1.0:
version "0.1.0" version "0.1.0"
resolved "https://mirrors.huaweicloud.com/repository/npm/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" resolved "https://mirrors.huaweicloud.com/repository/npm/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c"
...@@ -11263,6 +11377,20 @@ parse5@6.0.1: ...@@ -11263,6 +11377,20 @@ parse5@6.0.1:
resolved "https://registry.npmmirror.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" resolved "https://registry.npmmirror.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b"
integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==
parseqs@0.0.5:
version "0.0.5"
resolved "https://registry.npmmirror.com/parseqs/-/parseqs-0.0.5.tgz#d5208a3738e46766e291ba2ea173684921a8b89d"
integrity sha512-B3Nrjw2aL7aI4TDujOzfA4NsEc4u1lVcIRE0xesutH8kjeWF70uk+W5cBlIQx04zUH9NTBvuN36Y9xLRPK6Jjw==
dependencies:
better-assert "~1.0.0"
parseuri@0.0.5:
version "0.0.5"
resolved "https://registry.npmmirror.com/parseuri/-/parseuri-0.0.5.tgz#80204a50d4dbb779bfdc6ebe2778d90e4bce320a"
integrity sha512-ijhdxJu6l5Ru12jF0JvzXVPvsC+VibqeaExlNoMhWN6VQ79PGjkmc7oA4W1lp00sFkNyj0fx6ivPLdV51/UMog==
dependencies:
better-assert "~1.0.0"
parseurl@~1.3.3: parseurl@~1.3.3:
version "1.3.3" version "1.3.3"
resolved "https://mirrors.huaweicloud.com/repository/npm/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" resolved "https://mirrors.huaweicloud.com/repository/npm/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
...@@ -14085,6 +14213,35 @@ snapdragon@^0.8.1: ...@@ -14085,6 +14213,35 @@ snapdragon@^0.8.1:
source-map-resolve "^0.5.0" source-map-resolve "^0.5.0"
use "^3.1.0" use "^3.1.0"
socket.io-client@2.2.0:
version "2.2.0"
resolved "https://registry.npmmirror.com/socket.io-client/-/socket.io-client-2.2.0.tgz#84e73ee3c43d5020ccc1a258faeeb9aec2723af7"
integrity sha512-56ZrkTDbdTLmBIyfFYesgOxsjcLnwAKoN4CiPyTVkMQj3zTUh0QAx3GbvIvLpFEOvQWu92yyWICxB0u7wkVbYA==
dependencies:
backo2 "1.0.2"
base64-arraybuffer "0.1.5"
component-bind "1.0.0"
component-emitter "1.2.1"
debug "~3.1.0"
engine.io-client "~3.3.1"
has-binary2 "~1.0.2"
has-cors "1.1.0"
indexof "0.0.1"
object-component "0.0.3"
parseqs "0.0.5"
parseuri "0.0.5"
socket.io-parser "~3.3.0"
to-array "0.1.4"
socket.io-parser@~3.3.0:
version "3.3.3"
resolved "https://registry.npmmirror.com/socket.io-parser/-/socket.io-parser-3.3.3.tgz#3a8b84823eba87f3f7624e64a8aaab6d6318a72f"
integrity sha512-qOg87q1PMWWTeO01768Yh9ogn7chB9zkKtQnya41Y355S0UmpXgpcrFwAgjYJxu9BdKug5r5e9YtVSeWhKBUZg==
dependencies:
component-emitter "~1.3.0"
debug "~3.1.0"
isarray "2.0.1"
sonic-boom@^2.2.1: sonic-boom@^2.2.1:
version "2.8.0" version "2.8.0"
resolved "https://mirrors.huaweicloud.com/repository/npm/sonic-boom/-/sonic-boom-2.8.0.tgz#c1def62a77425090e6ad7516aad8eb402e047611" resolved "https://mirrors.huaweicloud.com/repository/npm/sonic-boom/-/sonic-boom-2.8.0.tgz#c1def62a77425090e6ad7516aad8eb402e047611"
...@@ -14861,6 +15018,11 @@ tmpl@1.0.5: ...@@ -14861,6 +15018,11 @@ tmpl@1.0.5:
resolved "https://mirrors.huaweicloud.com/repository/npm/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" resolved "https://mirrors.huaweicloud.com/repository/npm/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc"
integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==
to-array@0.1.4:
version "0.1.4"
resolved "https://registry.npmmirror.com/to-array/-/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890"
integrity sha512-LhVdShQD/4Mk4zXNroIQZJC+Ap3zgLcDuwEdcmLv9CCO73NWockQDwyUnW/m8VX/EElfL6FcYx7EeutN4HJA6A==
to-arraybuffer@^1.0.0: to-arraybuffer@^1.0.0:
version "1.0.1" version "1.0.1"
resolved "https://mirrors.huaweicloud.com/repository/npm/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" resolved "https://mirrors.huaweicloud.com/repository/npm/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43"
...@@ -15822,6 +15984,13 @@ ws@^8.2.3: ...@@ -15822,6 +15984,13 @@ ws@^8.2.3:
resolved "https://registry.npmmirror.com/ws/-/ws-8.14.1.tgz#4b9586b4f70f9e6534c7bb1d3dc0baa8b8cf01e0" resolved "https://registry.npmmirror.com/ws/-/ws-8.14.1.tgz#4b9586b4f70f9e6534c7bb1d3dc0baa8b8cf01e0"
integrity sha512-4OOseMUq8AzRBI/7SLMUwO+FEDnguetSk7KMb1sHwvF2w2Wv5Hoj0nlifx8vtGsftE/jWHojPy8sMMzYLJ2G/A== integrity sha512-4OOseMUq8AzRBI/7SLMUwO+FEDnguetSk7KMb1sHwvF2w2Wv5Hoj0nlifx8vtGsftE/jWHojPy8sMMzYLJ2G/A==
ws@~6.1.0:
version "6.1.4"
resolved "https://registry.npmmirror.com/ws/-/ws-6.1.4.tgz#5b5c8800afab925e94ccb29d153c8d02c1776ef9"
integrity sha512-eqZfL+NE/YQc1/ZynhojeV8q+H050oR8AZ2uIev7RU10svA9ZnJUddHcOUZTJLinZ9yEfdA2kSATS2qZK5fhJA==
dependencies:
async-limiter "~1.0.0"
xdg-basedir@^3.0.0: xdg-basedir@^3.0.0:
version "3.0.0" version "3.0.0"
resolved "https://mirrors.huaweicloud.com/repository/npm/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" resolved "https://mirrors.huaweicloud.com/repository/npm/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4"
...@@ -15837,6 +16006,11 @@ xmlchars@^2.2.0: ...@@ -15837,6 +16006,11 @@ xmlchars@^2.2.0:
resolved "https://registry.npmmirror.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" resolved "https://registry.npmmirror.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb"
integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==
xmlhttprequest-ssl@~1.6.3:
version "1.6.3"
resolved "https://registry.npmmirror.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.6.3.tgz#03b713873b01659dfa2c1c5d056065b27ddc2de6"
integrity sha512-3XfeQE/wNkvrIktn2Kf0869fC0BN6UpydVasGIeSm2B1Llihf7/0UfZM+eCkOw3P7bP4+qPgqhm7ZoxuJtFU0Q==
xtend@^4.0.0: xtend@^4.0.0:
version "4.0.2" version "4.0.2"
resolved "https://mirrors.huaweicloud.com/repository/npm/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" resolved "https://mirrors.huaweicloud.com/repository/npm/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
...@@ -15906,6 +16080,11 @@ yauzl@^2.10.0: ...@@ -15906,6 +16080,11 @@ yauzl@^2.10.0:
buffer-crc32 "~0.2.3" buffer-crc32 "~0.2.3"
fd-slicer "~1.1.0" fd-slicer "~1.1.0"
yeast@0.1.2:
version "0.1.2"
resolved "https://registry.npmmirror.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419"
integrity sha512-8HFIh676uyGYP6wP13R/j6OJ/1HwJ46snpvzE7aHAN3Ryqh2yX6Xox2B4CUmTwwOIzlG3Bs7ocsP5dZH/R1Qbg==
yocto-queue@^0.1.0: yocto-queue@^0.1.0:
version "0.1.0" version "0.1.0"
resolved "https://mirrors.huaweicloud.com/repository/npm/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" resolved "https://mirrors.huaweicloud.com/repository/npm/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment