lanjianrong 4 yıl önce
ebeveyn
işleme
b8a284ee91

+ 15 - 9
src/pages/Customer/Client/index.jsx

@@ -17,7 +17,7 @@ import { Add, Down, Check } from '@icon-park/react'
 import { apiAddClient, queryClient } from '@/services/customer'
 import { apiBatchLink } from '@/services/customer'
 import styles from './index.less'
-import { refactorFilterField, refactorSortField } from '@/utils/utils'
+import { generateFilterField, generateSortField } from '@/utils/utils'
 import { PermDataTypeEunm } from '../Company/components/PermSelect'
 import BasicTable from '@/components/Table'
 import { getPermAuthCache } from '@/utils/auth'
@@ -172,7 +172,8 @@ const Client = props => {
       render: (clientName, record) => (
         <span
           onClick={() => showDrawer(record.id)}
-          className="text-primary cursor-pointer hover:text-[#967bbd]">
+          className="text-primary cursor-pointer hover:text-[#967bbd]"
+        >
           {clientName}
         </span>
       ),
@@ -189,7 +190,8 @@ const Client = props => {
         record.companyId !== consts.ENCRYPTION_ZERO ? (
           <span
             onClick={() => showDrawerComapny(record.companyId)}
-            className="text-primary cursor-pointer hover:text-[#967bbd]">
+            className="text-primary cursor-pointer hover:text-[#967bbd]"
+          >
             {companyName}
           </span>
         ) : (
@@ -295,7 +297,8 @@ const Client = props => {
             tagType={TagTypeEnum.PERSONTAG}
             tagColumn={TagDataTypeEnum.CLIENT}
             checkCallBack={refreshData}
-            modeType={LabelModeType.column}>
+            modeType={LabelModeType.column}
+          >
             <Add theme="filled" size="20" fill="#868e96" className="cursor-pointer" />
           </PersonLabel>
         </div>
@@ -332,7 +335,8 @@ const Client = props => {
             tagType={TagTypeEnum.TEAMTAG}
             tagColumn={TagDataTypeEnum.CLIENT}
             checkCallBack={refreshData}
-            modeType={LabelModeType.column}>
+            modeType={LabelModeType.column}
+          >
             <Add theme="filled" size="20" fill="#868e96" className="cursor-pointer" />
           </PersonLabel>
         </div>
@@ -493,7 +497,8 @@ const Client = props => {
             tagType={TagTypeEnum.PERSONTAG}
             tagColumn={TagDataTypeEnum.CLIENT}
             checkCallBack={toolbarOptionsChange}
-            modeType={LabelModeType.toolbar}>
+            modeType={LabelModeType.toolbar}
+          >
             {tagState.tagIds.length ? (
               <Button>
                 {tagState.tagIds.map(item => (
@@ -518,7 +523,8 @@ const Client = props => {
             tagType={TagTypeEnum.TEAMTAG}
             tagColumn={TagDataTypeEnum.CLIENT}
             checkCallBack={toolbarOptionsChange}
-            modeType={LabelModeType.toolbar}>
+            modeType={LabelModeType.toolbar}
+          >
             {tagState.tagCooperationIds.length ? (
               <Button>
                 {tagState.tagCooperationIds.map(item => (
@@ -555,8 +561,8 @@ const Client = props => {
         rowKey={record => record.id}
         columns={columns}
         request={async (params, sort, filter) => {
-          const srotOrder = refactorSortField(sort)
-          const nFilter = refactorFilterField(filter)
+          const srotOrder = generateSortField(sort)
+          const nFilter = generateFilterField(filter)
           const {
             code = -1,
             data: { client = [], total = 0 }

+ 13 - 8
src/pages/Customer/Company/index.jsx

@@ -12,7 +12,7 @@ import { TagTypeEnum, TagDataTypeEnum, LabelModeType } from './components/Person
 import { Add, Down, Check } from '@icon-park/react'
 import { apiBatchLink } from '@/services/customer'
 import styles from './index.less'
-import { refactorFilterField, refactorSortField } from '@/utils/utils'
+import { generateFilterField, generateSortField } from '@/utils/utils'
 import { PermDataTypeEunm } from './components/PermSelect'
 import BasicTable from '@/components/Table'
 import { getPermAuthCache } from '@/utils/auth'
@@ -168,7 +168,8 @@ const Company = props => {
       render: (companyName, record) => (
         <span
           onClick={() => showDrawer(record.id)}
-          className="text-primary cursor-pointer hover:text-[#967bbd]">
+          className="text-primary cursor-pointer hover:text-[#967bbd]"
+        >
           {companyName}
         </span>
       )
@@ -214,7 +215,8 @@ const Company = props => {
             tagType={TagTypeEnum.PERSONTAG}
             tagColumn={TagDataTypeEnum.COMPANY}
             checkCallBack={refreshData}
-            modeType={LabelModeType.column}>
+            modeType={LabelModeType.column}
+          >
             <Add theme="filled" size="20" fill="#868e96" className="cursor-pointer" />
           </PersonLabel>
         </div>
@@ -245,7 +247,8 @@ const Company = props => {
             tagType={TagTypeEnum.TEAMTAG}
             tagColumn={TagDataTypeEnum.COMPANY}
             checkCallBack={refreshData}
-            modeType={LabelModeType.column}>
+            modeType={LabelModeType.column}
+          >
             <Add theme="filled" size="20" fill="#868e96" className="cursor-pointer" />
           </PersonLabel>
         </div>
@@ -413,7 +416,8 @@ const Company = props => {
             tagType={TagTypeEnum.PERSONTAG}
             tagColumn={TagDataTypeEnum.COMPANY}
             checkCallBack={toolbarOptionsChange}
-            modeType={LabelModeType.toolbar}>
+            modeType={LabelModeType.toolbar}
+          >
             {tagState.tagIds.length ? (
               <Button>
                 {tagState.tagIds.map(item => (
@@ -438,7 +442,8 @@ const Company = props => {
             tagType={TagTypeEnum.TEAMTAG}
             tagColumn={TagDataTypeEnum.COMPANY}
             checkCallBack={toolbarOptionsChange}
-            modeType={LabelModeType.toolbar}>
+            modeType={LabelModeType.toolbar}
+          >
             {tagState.tagCooperationIds.length ? (
               <Button>
                 {tagState.tagCooperationIds.map(item => (
@@ -477,8 +482,8 @@ const Company = props => {
         columnStateType="COMPANY"
         params={state.params}
         request={async (params, sort, filter) => {
-          const srotOrder = refactorSortField(sort)
-          const nFilter = refactorFilterField(filter)
+          const srotOrder = generateSortField(sort)
+          const nFilter = generateFilterField(filter)
           const { code = -1, data: { customer = [], total = 0 } = { customer: [], total: 0 } } =
             await queryCompany({ ...params, ...srotOrder, ...nFilter })
           setState({ ...state, orderIds: customer.map(item => item.id) })

+ 6 - 4
src/pages/Product/Cloud/index.jsx

@@ -1,7 +1,7 @@
 /* eslint-disable no-underscore-dangle */
 import React, { useState, useEffect, useRef } from 'react'
 import BasicTable from '@/components/Table'
-import { dayjsFormat, refactorSortField } from '@/utils/utils'
+import { dayjsFormat, generateSortField } from '@/utils/utils'
 import { queryRoadpricingList } from '@/services/product'
 import { Input, Tag, Tooltip } from 'antd'
 import consts from '@/consts'
@@ -79,7 +79,8 @@ const Cloud = () => {
       render: (text, record) => (
         <span
           onClick={() => showDrawerRoadpricing(record.ssoId)}
-          className="text-primary cursor-pointer hover:text-[#967bbd]">
+          className="text-primary cursor-pointer hover:text-[#967bbd]"
+        >
           {text}
         </span>
       )
@@ -160,7 +161,8 @@ const Cloud = () => {
                       )
                   )}
                 </div>
-              }>
+              }
+            >
               {record.all_online_times}
             </Tooltip>
           )
@@ -275,7 +277,7 @@ const Cloud = () => {
       columnStateType={columnStateType}
       params={state.params}
       request={async (params, sort, filter) => {
-        const sortOrder = refactorSortField(sort)
+        const sortOrder = generateSortField(sort)
         const {
           code = -1,
           data: { list = [], total = 0 }

+ 10 - 6
src/pages/Product/Lock/LockStore/index.jsx

@@ -8,7 +8,7 @@ import ContactDetail from '@/pages/Customer/Client/components/ClientDetail'
 import SoftwareDetail from '@/pages/Product/Lock/LockStore/components/SoftwareDetail'
 import { useModal } from '@/components/Modal'
 import CompanyDetail from '@/pages/Customer/Company/components/CompanyDetail'
-import { refactorSortField } from '@/utils/utils'
+import { generateSortField } from '@/utils/utils'
 import ReceiveLock from './components/ReceiveLock'
 // import ReceiveNewLock from './components/ReceiveNewLock'
 import { PermDataTypeEunm } from '@/pages/Customer/Company/components/PermSelect'
@@ -197,7 +197,8 @@ const LockStore = ({ prodList = [], dispatch, shouldUpdate }) => {
       render: (keyNum, record) => (
         <span
           onClick={() => showDrawer(record.id)}
-          className="text-primary cursor-pointer hover:text-[#967bbd]">
+          className="text-primary cursor-pointer hover:text-[#967bbd]"
+        >
           {keyNum}
         </span>
       )
@@ -312,7 +313,8 @@ const LockStore = ({ prodList = [], dispatch, shouldUpdate }) => {
       render: (text, record) => (
         <span
           onClick={() => showDrawerClient(record.clientId)}
-          className="text-primary cursor-pointer hover:text-[#967bbd]">
+          className="text-primary cursor-pointer hover:text-[#967bbd]"
+        >
           {text}
         </span>
       )
@@ -326,7 +328,8 @@ const LockStore = ({ prodList = [], dispatch, shouldUpdate }) => {
       render: (text, record) => (
         <span
           onClick={() => showCompanyDrawer(record.customerId)}
-          className="text-primary cursor-pointer hover:text-[#967bbd]">
+          className="text-primary cursor-pointer hover:text-[#967bbd]"
+        >
           {text}
         </span>
       )
@@ -338,7 +341,8 @@ const LockStore = ({ prodList = [], dispatch, shouldUpdate }) => {
       render: (text, record) => (
         <span
           onClick={() => showDrawerResponsible(record.responsibleId)}
-          className="text-primary cursor-pointer hover:text-[#967bbd]">
+          className="text-primary cursor-pointer hover:text-[#967bbd]"
+        >
           {text}
         </span>
       )
@@ -387,7 +391,7 @@ const LockStore = ({ prodList = [], dispatch, shouldUpdate }) => {
       params={state.params}
       columns={columns}
       request={async (params, sort, filter) => {
-        const srotOrder = refactorSortField(sort)
+        const srotOrder = generateSortField(sort)
         const {
           code = -1,
           data: { longle = [], total = 0, totalOld = 0, totalNew = 0 } = {

+ 91 - 11
src/pages/Statistic/Product/InvoiceTrends/index.jsx

@@ -1,7 +1,7 @@
 import BasicTable from '@/components/Table'
 import consts from '@/consts'
 import { querySoftInvoiceTrendsList } from '@/services/statistic'
-// import { Column } from '@ant-design/charts'
+import { DualAxes } from '@ant-design/charts'
 import { DatePicker, Select } from 'antd'
 import dayjs from 'dayjs'
 import React, { useRef, useState } from 'react'
@@ -15,28 +15,86 @@ const InvoiceTrends = () => {
       priceType: 'invoice',
       startMonth: [dayjs(new Date()), dayjs(new Date())]
     },
-    list: []
+    chart: []
   })
   const tRef = useRef(null)
   const columns = [
     {
       dataIndex: 'name',
       title: '姓名',
+      align: 'center',
+      render: (value, _, idx) => {
+        const obj = {
+          children: value,
+          props: {}
+        }
+        if (idx == 0) {
+          obj.props.rowSpan = 2
+        }
+        if (idx == 1) {
+          obj.props.rowSpan = 0
+        }
+        return obj
+      }
+    },
+    {
+      dataIndex: 'options',
+      title: '项',
+      align: 'center'
+    },
+    {
+      dataIndex: 'month_2',
+      title: '2月',
+      align: 'center'
+    },
+    {
+      dataIndex: 'month_3',
+      title: '3月',
+      align: 'center'
+    },
+    {
+      dataIndex: 'month_4',
+      title: '4月',
+      align: 'center'
+    },
+    {
+      dataIndex: 'month_5',
+      title: '5月',
       align: 'center'
     },
     {
-      dataIndex: 'creditPrice',
-      title: '开票金额(元)',
+      dataIndex: 'month_6',
+      title: '6月',
       align: 'center'
     },
     {
-      dataIndex: 'receivablesPrice',
-      title: '收款金额(元)',
+      dataIndex: 'month_7',
+      title: '7月',
       align: 'center'
     },
     {
-      dataIndex: 'invoicePrice',
-      title: '入账金额(元)',
+      dataIndex: 'month_8',
+      title: '8月',
+      align: 'center'
+    },
+    {
+      dataIndex: 'month_9',
+      title: '9月',
+      align: 'center'
+    },
+    {
+      dataIndex: 'month_10',
+      title: '10月',
+      align: 'center'
+    },
+    {
+      dataIndex: 'month_11',
+      title: '11月',
+      align: 'center'
+    },
+    {
+      dataIndex: 'month_12',
+      title: '12月',
       align: 'center'
     }
   ]
@@ -44,10 +102,27 @@ const InvoiceTrends = () => {
   const optionChange = (type, ids) =>
     setState({ ...state, params: { ...state.params, optionType: type, dataIds: ids } })
 
+  const dualAxesOptions = {
+    data: [state.chart, state.chart],
+    xField: 'month',
+    yField: ['price', 'ring'],
+    geometryOptions: [
+      {
+        geometry: 'column'
+      },
+      {
+        geometry: 'line',
+        lineStyle: {
+          lineWidth: 2
+        }
+      }
+    ]
+  }
   return (
     <div className="flex flex-col">
       <div className="flex flex-row justify-between mb-4">
         <div className="card-transition bg-white w-full">
+          {state.chart?.length ? <DualAxes {...dualAxesOptions} /> : null}
           {/* {pieData.pieLeft ? <Pie {...leftConfig} /> : null} */}
           {/* {state.list?.length ? <Column {...columnConfig} /> : null} */}
         </div>
@@ -90,9 +165,14 @@ const InvoiceTrends = () => {
         request={async (params, sort, filter) => {
           const {
             code = -1,
-            data: { list, sum }
-          } = await querySoftInvoiceTrendsList({ ...params, ...sort, ...filter })
-          setState({ ...state, sum, list })
+            data: { list, chart }
+          } = await querySoftInvoiceTrendsList({
+            ...params,
+            ...sort,
+            ...filter
+          })
+
+          setState({ ...state, chart })
           return {
             data: list,
             success: code === consts.RET_CODE.SUCCESS,

+ 1 - 1
src/pages/Workbench/Dashboard/components/BusinessChar.jsx

@@ -1,4 +1,4 @@
-import DualAxes from '@ant-design/charts/es/plots/dualAxes'
+import { DualAxes } from '@ant-design/charts'
 import { Card, Select } from 'antd'
 import { connect } from 'umi'
 import React, { useEffect } from 'react'

+ 2 - 2
src/utils/utils.js

@@ -33,7 +33,7 @@ export const dayjsFormat = (date, format = 'YYYY-MM-DD HH:mm:ss') => {
 }
 
 /** 处理表格排序字段 */
-export const refactorSortField = sort => {
+export const generateSortField = sort => {
   if (!sort) return {}
   // 处理后的排序,格式{ field: 'xxxxx', order: 'desc/asc' }
   const s = { field: null, order: null }
@@ -48,7 +48,7 @@ export const refactorSortField = sort => {
 }
 
 /** 处理表格中的筛选(特殊情况) */
-export const refactorFilterField = filter => {
+export const generateFilterField = filter => {
   if (!filter) return {}
   const keys = Object.keys(filter)
   const nFiter = { ...filter }