Quellcode durchsuchen

Merge remote-tracking branch 'origin/master'

yingp vor 6 Jahren
Ursprung
Commit
55359eda97
30 geänderte Dateien mit 2871 neuen und 879 gelöschten Zeilen
  1. 1 1
      uas-office-web/wxuasapproval/.gitignore
  2. 64 33
      uas-office-web/wxuasapproval/config-overrides.js
  3. BIN
      uas-office-web/wxuasapproval/node_modules.tgz
  4. 726 88
      uas-office-web/wxuasapproval/package-lock.json
  5. 10 7
      uas-office-web/wxuasapproval/package.json
  6. 0 1
      uas-office-web/wxuasapproval/public/index.html
  7. 13 6
      uas-office-web/wxuasapproval/src/components/approvalItem/ApprovalItem.jsx
  8. 3 2
      uas-office-web/wxuasapproval/src/components/approvalItem/approvalItem.css
  9. 21 0
      uas-office-web/wxuasapproval/src/configs/Constants.js
  10. 14 4
      uas-office-web/wxuasapproval/src/configs/router.config.js
  11. BIN
      uas-office-web/wxuasapproval/src/images/approvalNew/businessTrip.png
  12. BIN
      uas-office-web/wxuasapproval/src/images/approvalNew/dailyreport.png
  13. BIN
      uas-office-web/wxuasapproval/src/images/approvalNew/monthlyReport.png
  14. BIN
      uas-office-web/wxuasapproval/src/images/approvalNew/outplans.png
  15. BIN
      uas-office-web/wxuasapproval/src/images/approvalNew/overtime.png
  16. BIN
      uas-office-web/wxuasapproval/src/images/approvalNew/reissueCard.png
  17. BIN
      uas-office-web/wxuasapproval/src/images/approvalNew/vacation.png
  18. BIN
      uas-office-web/wxuasapproval/src/images/approvalNew/visit.png
  19. BIN
      uas-office-web/wxuasapproval/src/images/approvalNew/weeklyreport.png
  20. 9 0
      uas-office-web/wxuasapproval/src/index.css
  21. 26 20
      uas-office-web/wxuasapproval/src/pages/approval/Approval.jsx
  22. 6 5
      uas-office-web/wxuasapproval/src/pages/approval/ApprovalAdd.jsx
  23. 29 6
      uas-office-web/wxuasapproval/src/pages/approval/ApprovalHome.jsx
  24. 5 1
      uas-office-web/wxuasapproval/src/pages/approval/UasApproval.jsx
  25. 6 3
      uas-office-web/wxuasapproval/src/pages/approval/approval.css
  26. 203 0
      uas-office-web/wxuasapproval/src/pages/useStatus/UseStatus.jsx
  27. 49 0
      uas-office-web/wxuasapproval/src/pages/useStatus/useStatus.css
  28. 177 0
      uas-office-web/wxuasapproval/src/pages/workSummary/WorkSummary.jsx
  29. 62 0
      uas-office-web/wxuasapproval/src/pages/workSummary/workSummary.css
  30. 1447 702
      uas-office-web/wxuasapproval/yarn.lock

+ 1 - 1
uas-office-web/wxuasapproval/.gitignore

@@ -1,7 +1,7 @@
 # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
 
 # dependencies
-/node_modules
+#/node_modules
 
 # testing
 /coverage

+ 64 - 33
uas-office-web/wxuasapproval/config-overrides.js

@@ -1,41 +1,72 @@
-const { injectBabelPlugin } = require('react-app-rewired')
+const {
+  override,
+  fixBabelImports,
+  addLessLoader,
+  addWebpackAlias,
+} = require(
+  'customize-cra')
 const rewireLess = require('react-app-rewire-less')
 const path = require('path')
 
-module.exports = function override (config, env) {
+//执行npm run build不产生map文件
+process.env.GENERATE_SOURCEMAP = 'false'
 
-  config = injectBabelPlugin(
-    [
-      'import',
-      {
-        libraryName: 'antd',
-        libraryDirectory: 'es',
-        style: true,
-      }, 'ant',
-    ],
-    config,
-  )
+module.exports = override(
+  fixBabelImports('import-antd', {
+    libraryName: 'antd',
+    libraryDirectory: 'es',
+    style: true,
+  }),
 
-  config = injectBabelPlugin(
-    [
-      'import',
-      {
-        libraryName: 'antd-mobile',
-        libraryDirectory: 'lib',
-        style: true,
-      }, 'ant-mobile',
-    ],
-    config,
-  )
+  fixBabelImports('import-ant-mobile', {
+    libraryName: 'antd-mobile',
+    libraryDirectory: 'lib',
+    style: true,
+  }),
 
-  config = rewireLess.withLoaderOptions({
-    modifyVars: { '@primary-color': '#1DA57A' },
+  addLessLoader({
     javascriptEnabled: true,
-  })(config, env)
-
-  config.resolve.alias = {
-    '@': path.join(__dirname, './src'),
-  }
+    modifyVars: { '@primary-color': '#1DA57A' },
+  }),
 
-  return config
-}
+  addWebpackAlias({
+    '@': path.join(__dirname, 'src'),
+  }),
+)
+// module.exports = function override (config, env) {
+//
+//   config = injectBabelPlugin(
+//     [
+//       'import',
+//       {
+//         libraryName: 'antd',
+//         libraryDirectory: 'es',
+//         style: true,
+//       }, 'ant',
+//     ],
+//     config,
+//   )
+//
+//   config = injectBabelPlugin(
+//     [
+//       'import',
+//       {
+//         libraryName: 'antd-mobile',
+//         libraryDirectory: 'lib',
+//         style: true,
+//       }, 'ant-mobile',
+//     ],
+//     config,
+//   )
+//
+//   config = rewireLess.withLoaderOptions({
+//     modifyVars: { '@primary-color': '#1DA57A' },
+//     javascriptEnabled: true,
+//   })(config, env)
+//
+//   config.resolve.alias = {
+//     '@': path.join(__dirname, './src'),
+//   }
+//
+//   return config
+// }

BIN
uas-office-web/wxuasapproval/node_modules.tgz


Datei-Diff unterdrückt, da er zu groß ist
+ 726 - 88
uas-office-web/wxuasapproval/package-lock.json


+ 10 - 7
uas-office-web/wxuasapproval/package.json

@@ -4,17 +4,19 @@
   "private": true,
   "homepage": ".",
   "dependencies": {
+    "@antv/data-set": "^0.11.1",
     "antd-mobile": "^2.3.1",
     "babel-polyfill": "^6.26.0",
+    "bizcharts": "^3.5.7",
     "js-cookie": "^2.2.1",
     "moment": "^2.22.2",
     "react": "^16.5.2",
     "react-app-rewire-less": "^2.1.3",
     "react-dom": "^16.5.2",
     "react-file-viewer": "^1.2.1",
-    "react-redux": "^5.0.7",
-    "react-router-dom": "^4.3.1",
-    "react-scripts": "2.0.5",
+    "react-redux": "^7.2.0",
+    "react-router-dom": "^5.1.2",
+    "react-scripts": "3.4.0",
     "redux": "^4.0.1",
     "redux-persist": "^6.0.0",
     "redux-thunk": "^2.3.0",
@@ -39,11 +41,12 @@
   ],
   "devDependencies": {
     "antd": "^3.26.11",
-    "axios": "^0.18.0",
+    "axios": "^0.19.2",
     "babel-plugin-import": "^1.10.0",
-    "react-app-rewired": "^1.6.2",
-    "react-router": "^4.3.1",
+    "customize-cra": "^0.9.1",
+    "react-app-rewired": "^2.1.5",
+    "react-router": "^5.1.2",
     "redux-logger": "^3.0.6",
-    "semantic-ui-react": "^0.82.5"
+    "semantic-ui-react": "^0.88.2"
   }
 }

+ 0 - 1
uas-office-web/wxuasapproval/public/index.html

@@ -19,7 +19,6 @@
       work correctly both with client-side routing and a non-root public URL.
       Learn how to configure a non-root public URL by running `npm run build`.
     -->
-
     <script type="text/javascript">
       function GetQueryString (name) {
         let reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)')

+ 13 - 6
uas-office-web/wxuasapproval/src/components/approvalItem/ApprovalItem.jsx

@@ -27,14 +27,14 @@ export default class ApprovalItem extends Component {
   render () {
     const { approval, type } = this.props
     let approvalStatus = '等待我审批'
-    let statusColor = '#3BAE7E'
+    let statusColor = '#33A3F4'
     if (type === 2) {
       approvalStatus = approval.JN_DEALRESULT
       if (!isObjEmpty(approvalStatus)) {
         if (approvalStatus.startWith('不同意') || approvalStatus.startWith('结束流程')
           || approvalStatus.startWith('未通过')) {
           approvalStatus = '未通过'
-          statusColor = 'red'
+          statusColor = '#db3a34'
         } else if (approvalStatus.startWith('变更处理人')) {
           statusColor = '#999999'
           if (!isObjEmpty(approval.JN_OPERATEDDESCRIPTION)) {
@@ -51,10 +51,10 @@ export default class ApprovalItem extends Component {
       approvalStatus = approval.JP_STATUS
       if (!isObjEmpty(approvalStatus)) {
         if (approvalStatus === '待审批') {
-          statusColor = '#3BAE7E'
+          statusColor = '#33A3F4'
           approvalStatus = '等待' + approval.JP_NODEDEALMANNAME + '审批'
         } else if (approvalStatus === '未通过') {
-          statusColor = 'red'
+          statusColor = '#db3a34'
         } else {
           statusColor = '#999999'
         }
@@ -91,8 +91,15 @@ export default class ApprovalItem extends Component {
             <div className='recharge-item-caption'>{approval.JP_STATUS
               ? '单据状态:'
               : approval.JN_DEALRESULT ? '审批结果:' : '状态'}</div>
-            <div className='recharge-item-value'
-                 style={{ color: statusColor }}>{approvalStatus}</div>
+            <div
+              // className='recharge-item-value'
+              style={{
+                background: statusColor,
+                borderRadius: '8px',
+                color: 'white',
+                padding: '1px 6px',
+                fontSize:'12px'
+              }}>{approvalStatus}</div>
           </div>
         </div>
       </div>

+ 3 - 2
uas-office-web/wxuasapproval/src/components/approvalItem/approvalItem.css

@@ -14,6 +14,7 @@
     padding: 2px 2px 2px 10px;
     font-family: PingFangSC-Regular;
     font-size: 13px;
+    align-items: center;
     letter-spacing: 0;
     flex-direction: row;
 }
@@ -50,8 +51,8 @@
 
 .homework-item-title-layout {
     padding: 8px 10px 4px;
-    font-family: PingFangSC-Regular;
-    font-size: 14px;
+    /*font-family: PingFangSC-Regular;*/
+    font-size: 13px;
     color: #000;
     letter-spacing: 0;
     flex: 1;

+ 21 - 0
uas-office-web/wxuasapproval/src/configs/Constants.js

@@ -0,0 +1,21 @@
+import businessTrip from '@/images/approvalNew/businessTrip.png'
+import dailyreport from '@/images/approvalNew/dailyreport.png'
+import monthlyReport from '@/images/approvalNew/monthlyReport.png'
+import outplans from '@/images/approvalNew/outplans.png'
+import overtime from '@/images/approvalNew/overtime.png'
+import reissueCard from '@/images/approvalNew/reissueCard.png'
+import vacation from '@/images/approvalNew/vacation.png'
+import visit from '@/images/approvalNew/visit.png'
+import weeklyreport from '@/images/approvalNew/weeklyreport.png'
+
+export const LocalImgs = {
+  'businessTrip.png': businessTrip,
+  'dailyreport.png': dailyreport,
+  'monthlyReport.png': monthlyReport,
+  'outplans.png': outplans,
+  'overtime.png': overtime,
+  'reissueCard.png': reissueCard,
+  'vacation.png': vacation,
+  'visit.png': visit,
+  'weeklyreport.png': weeklyreport,
+}

+ 14 - 4
uas-office-web/wxuasapproval/src/configs/router.config.js

@@ -11,6 +11,8 @@ import Approval from '../pages/approval/Approval'
 import BindResult from '../pages/bindPhone/BindResult'
 import RedirectPage from '../pages/RedirectPage'
 import ApprovalHome from '../pages/approval/ApprovalHome'
+import UseStatus from '../pages/useStatus/UseStatus'
+import WorkSummary from '../pages/workSummary/WorkSummary'
 import ApprovalAdd from '../pages/approval/ApprovalAdd'
 import UasApproval from '../pages/approval/UasApproval'
 
@@ -23,18 +25,26 @@ export class Routes extends React.Component {
 
   render () {
     return <Router
-      basename={process.env.REACT_APP_ROUTER_BASE_NAME || '/ERP/uas'}>
+      basename={(process.env.REACT_APP_ROUTER_BASE_NAME || '/ERP') + '/uas'}>
       <div style={{ width: '100%', height: '100%' }}>
         <Switch>
-          {/*<Route exact path='/bindPhone' component={BindPhone}/>*/}
-          <Route path='/uasApproval' component={UasApproval}/>
-          <Route path='/approvalHome' component={ApprovalHome}/>
+          {/*U审批过渡页面(入口页面)*/}
+          <Route path='/uasApproval/:master/:type?' component={UasApproval}/>
+          {/*U审批首页*/}
+          <Route path='/approvalHome/:master/:type?' component={ApprovalHome}/>
+          {/*U审批详情页*/}
           <Route path='/approval/:paramsStr?' component={Approval}/>
+          {/*U审批新增页面*/}
           <Route path='/approvalAdd/:caller/:master/:id?'
                  component={ApprovalAdd}/>
           <Route path='/redirect/:paramsStr?' component={RedirectPage}/>
+
+          {/*<Route exact path='/bindPhone' component={BindPhone}/>*/}
           <Route path='/bindPhone/:openId?' component={BindPhone}/>
           <Route path='/bindResult/:result' component={BindResult}/>
+
+          <Route path='/usestatus/:instanceId' component={UseStatus}/>
+          <Route path='/worksummary' component={WorkSummary}/>
           {/*<Redirect path='/' to={{pathname: '/bindPhone'}}/>*/}
 
           {/*404页面*/}

BIN
uas-office-web/wxuasapproval/src/images/approvalNew/businessTrip.png


BIN
uas-office-web/wxuasapproval/src/images/approvalNew/dailyreport.png


BIN
uas-office-web/wxuasapproval/src/images/approvalNew/monthlyReport.png


BIN
uas-office-web/wxuasapproval/src/images/approvalNew/outplans.png


BIN
uas-office-web/wxuasapproval/src/images/approvalNew/overtime.png


BIN
uas-office-web/wxuasapproval/src/images/approvalNew/reissueCard.png


BIN
uas-office-web/wxuasapproval/src/images/approvalNew/vacation.png


BIN
uas-office-web/wxuasapproval/src/images/approvalNew/visit.png


BIN
uas-office-web/wxuasapproval/src/images/approvalNew/weeklyreport.png


+ 9 - 0
uas-office-web/wxuasapproval/src/index.css

@@ -85,3 +85,12 @@ textarea::-webkit-scrollbar {
     display: none;
 }
 
+.am-tab-bar-tab {
+    font-size: 18px;
+}
+
+.am-tab-bar-bar .am-tab-bar-tab-title {
+    font-size: 12px !important;
+    margin: 4px 0 0 0 !important;
+}
+

+ 26 - 20
uas-office-web/wxuasapproval/src/pages/approval/Approval.jsx

@@ -80,8 +80,9 @@ export default class Approval extends Component {
     }
   }
 
-  componentWillMount () {
+  componentDidMount () {
     document.title = '审批单据'
+    this.initData()
     let paramsStr = this.props.match.params.paramsStr
     if (isObjEmpty(paramsStr)) {
       let storage = window.localStorage
@@ -94,7 +95,8 @@ export default class Approval extends Component {
 
         paramsJson.baseUrl
           ? (mBaseUrl = decodeURIComponent(paramsJson.baseUrl))
-          : (mBaseUrl = window.location.origin)
+          : (mBaseUrl = window.location.origin
+          + (process.env.REACT_APP_ROUTER_BASE_NAME || '/ERP'))
         mMaster = paramsJson.master
         mNodeId = paramsJson.nodeId
         mType = paramsJson.type
@@ -119,11 +121,27 @@ export default class Approval extends Component {
       })
       message.error('参数获取失败')
     }
-
   }
 
-  componentDidMount () {
+  componentWillUnmount () {
+    Toast.hide()
+  }
 
+  initData = () => {
+    mCachePoints = ''
+    mApprovalRecord = new ApprovalRecordBean()
+    mTitleApproval = new ApprovalBean()
+    mParams = []
+    mFormStore = new Map()
+    mHineApprovals = []//隐藏字段
+    mShowApprovals = []//显示字段
+    mHistoryNodes = []//历史审批
+    mMainList = []//主表
+    mDetailList = []//从表
+    mSetuptasList = []//历史审批要点
+    mEnclosureList = []//附件
+    mNodeList = []//审批节点
+    mPointsList = []//要点
   }
 
   getSessionId () {
@@ -413,20 +431,7 @@ export default class Approval extends Component {
   }
 
   initPageState = () => {
-    mCachePoints = ''
-    mApprovalRecord = new ApprovalRecordBean()
-    mTitleApproval = new ApprovalBean()
-    mParams = []
-    mFormStore = new Map()
-    mHineApprovals = []//隐藏字段
-    mShowApprovals = []//显示字段
-    mHistoryNodes = []//历史审批
-    mMainList = []//主表
-    mDetailList = []//从表
-    mSetuptasList = []//历史审批要点
-    mEnclosureList = []//附件
-    mNodeList = []//审批节点
-    mPointsList = []//要点
+    this.initData()
     this.setState({
         approvalContent: '',
         fastModalOpen: false,
@@ -565,6 +570,7 @@ export default class Approval extends Component {
       // 'Cookie': 'JSESSIONID=' + mSessionId,
       // "Content-Type": "application/json; charset=UTF-8"
     }).then((response) => {
+      console.log('response',response)
       try {
         let result = response
         let infoObject = result.info
@@ -1500,14 +1506,14 @@ export default class Approval extends Component {
   }
 
   getImagePathUrl = (path) => {
-    return mBaseUrl + 'common/download.action?path=' + path
+    return mBaseUrl + '/common/download.action?path=' + path
       // + '&sessionId=' + '094F0F24379928148A56D37EA83632AE'
       // + '&sessionUser=' + 'U0757'
       + '&master=' + mMaster
   }
 
   getImageIdUrl = (id) => {
-    return mBaseUrl + 'common/downloadbyId.action?id=' + id
+    return mBaseUrl + '/common/downloadbyId.action?id=' + id
       // + '&sessionId=' + '094F0F24379928148A56D37EA83632AE'
       // + '&sessionUser=' + 'U0757'
       + '&master=' + mMaster

+ 6 - 5
uas-office-web/wxuasapproval/src/pages/approval/ApprovalAdd.jsx

@@ -35,6 +35,7 @@ let mDefaultMap
 let mShowBillModels, mFormBillModels, mUpdateBillModels, mAllBillModels
 
 let mBaseUrl = window.location.origin
+  + (process.env.REACT_APP_ROUTER_BASE_NAME || '/ERP')
   // && 'http://29226oq576.qicp.vip/uas/'
 
 export default class ApprovalAdd extends Component {
@@ -48,7 +49,7 @@ export default class ApprovalAdd extends Component {
   }
 
   componentDidMount () {
-    document.title = ''
+    document.title = '新增单据'
     mCaller = this.props.match.params.caller
     mMaster = this.props.match.params.master
     mId = this.props.match.params.id
@@ -357,8 +358,8 @@ export default class ApprovalAdd extends Component {
       console.log('formdata', JSON.stringify(gridStoreList))
       Toast.loading('单据提交中', 0)
       fetchPost(mBaseUrl + (mId <= 0
-        ? 'uapproval/common/commonSaveAndSubmit.action'
-        : 'uapproval/common/commonUpdate.action'), {
+        ? '/uapproval/common/commonSaveAndSubmit.action'
+        : '/uapproval/common/commonUpdate.action'), {
         caller: mCaller,
         keyid: mId,
         id: mId,
@@ -471,8 +472,8 @@ export default class ApprovalAdd extends Component {
    */
   loadFormandGridDetail () {
     fetchPost(mBaseUrl + (mId <= 0
-      ? 'mobile/uapproval/getformandgriddetail.action'
-      : 'mobile/getformandgriddetail_uapproval.action'), {
+      ? '/mobile/uapproval/getformandgriddetail.action'
+      : '/mobile/getformandgriddetail_uapproval.action'), {
       condition: '1=1',
       caller: mCaller,
       id: mId,

+ 29 - 6
uas-office-web/wxuasapproval/src/pages/approval/ApprovalHome.jsx

@@ -14,6 +14,7 @@ import RefreshLayout from '../../components/RefreshLayout'
 import { isObjEmpty } from '../../utils/common'
 import { fetchGet } from '../../utils/fetchRequest'
 import { connect } from 'react-redux'
+import { LocalImgs } from '../../configs/Constants'
 import {
   clearHomeState,
   clearNewState,
@@ -27,14 +28,17 @@ import {
 import CustomIcon from '../../utils/CustomIcon'
 import ApprovalItem from '../../components/approvalItem/ApprovalItem'
 
-let mMaster = 'UAS_DEV'
+let mMaster
 const mPageSize = 20
 let mTodoIndex = 0
 let mDoneIndex = 0
 let mSendIndex = 0
 
 let mBaseUrl = window.location.origin
-  // && 'http://29226oq576.qicp.vip/uas/'
+  + (process.env.REACT_APP_ROUTER_BASE_NAME || '/ERP')
+// && 'http://erp.yitoa.com:8888/ERP'
+
+// process.env.REACT_APP_ROUTER_BASE_NAME || '/ERP'
 
 class ApprovalHome extends Component {
 
@@ -62,6 +66,9 @@ class ApprovalHome extends Component {
         pageVisible: true,
       })
     }, 100)
+
+    mMaster = this.props.match.params.master
+
     // 用于刷新组建确认高度
     if (ReactDOM.findDOMNode(this.contain)) {
       const hei = this.state.receiveHeight -
@@ -77,13 +84,25 @@ class ApprovalHome extends Component {
         sendHeight: hei,
       })
     }
-    document.title = '审批'
+    document.title = 'U审批'
 
     const { homeState } = this.props
-    const { newState, receiveState, sendState, selectedTab } = homeState
+    let { newState, receiveState, sendState, selectedTab } = homeState
 
     this.initSwiper(receiveState)
 
+    let pageType = this.props.match.params.type
+    if (pageType == 'receive') {
+      selectedTab = 1
+      freshHomeState({
+        selectedTab: 1,
+      })()
+    } else if (pageType == 'send') {
+      selectedTab = 2
+      freshHomeState({
+        selectedTab: 2,
+      })()
+    }
     switch (selectedTab) {
       case 0: {
         this.initNew(newState)
@@ -790,7 +809,8 @@ class ApprovalHome extends Component {
       sendList.length = 0
     }
 
-    fetchGet(mBaseUrl + '/common/desktop/process/uapproval/alreadyLaunch.action',
+    fetchGet(
+      mBaseUrl + '/common/desktop/process/uapproval/alreadyLaunch.action',
       {
         pageSize: mPageSize,
         page: mSendIndex,
@@ -849,13 +869,16 @@ class FuncItem extends Component {
   render () {
     const { funcObj } = this.props
 
+    let platform = funcObj.sv_logourl.platform
+    let imgUrl = funcObj.sv_logourl.mobile || LocalImgs[platform] || ''
+
     return (
       isObjEmpty(funcObj) ?
         <div></div> :
         <div className='newMenu-func-root' onClick={this.onFuncClick}>
           <div className='newMenu-func-layout'>
             <img className='newMenu-func-icon'
-                 src={funcObj.sv_logourl ? funcObj.sv_logourl.mobile : ''}/>
+                 src={imgUrl}/>
             <span className='newMenu-func-text'>{funcObj.sv_name}</span>
           </div>
         </div>

+ 5 - 1
uas-office-web/wxuasapproval/src/pages/approval/UasApproval.jsx

@@ -16,9 +16,13 @@ export default class UasApproval extends Component {
 
   componentDidMount () {
     document.title = 'U审批'
+    let master = this.props.match.params.master
+    let pageType = this.props.match.params.type
+
     clearHomeState()()
 
-    this.props.history.push('/approvalHome')
+    this.props.history.push(
+      '/approvalHome/' + master + (pageType ? ('/' + pageType) : ''))
   }
 
   componentWillUnmount () {

+ 6 - 3
uas-office-web/wxuasapproval/src/pages/approval/approval.css

@@ -159,10 +159,13 @@
 }
 
 .newMenu-group-layout {
-    padding: 10px 8px 6px;
+    padding: 6px 6px 2px 6px;
+    margin: 6px;
     display: flex;
     flex-direction: row;
     align-items: center;
+    /*background: white;*/
+    /*border-radius: 8px;*/
 }
 
 .newMenu-group-icon {
@@ -193,8 +196,8 @@
 }
 
 .newMenu-func-icon {
-    width: 36px;
-    height: 36px;
+    width: 30px;
+    height: 30px;
 }
 
 .newMenu-func-text {

+ 203 - 0
uas-office-web/wxuasapproval/src/pages/useStatus/UseStatus.jsx

@@ -0,0 +1,203 @@
+import React, { Component } from 'react';
+import {
+    Chart,
+    Geom,
+    Axis,
+    Tooltip,
+    Coord,
+    Label
+} from "bizcharts";
+import { message, Spin } from 'antd'
+import DataSet from "@antv/data-set";
+import './useStatus.css';
+import { fetchPost, fetchGet } from '../../utils/fetchRequest';
+import {
+    isObjEmpty
+} from '@/utils/common'
+
+let DEPART, USERCOUNT,dataLength;
+let DURATIONLIST = [];
+let DAILYCOUNT = [];
+let columnWidth = 300;
+let mBaseUrl =  window.location.origin+'/office';
+
+
+export default class Basic extends Component {
+    constructor() {
+        super()
+
+        this.state = { 
+            loading: true    //更改
+        }
+    }
+
+    componentWillMount() {
+        document.title = '部门成员使用情况'
+        let instanceId = this.props.match.params.instanceId;
+        if (!isObjEmpty(instanceId)) {
+            try {
+                this.getData(instanceId);
+            } catch (e) {
+                this.setState({
+                    loading: false,
+                })
+                message.error('参数获取失败')
+            }
+        } else {
+            this.setState({
+                loading: false,
+            })
+            message.error('参数获取失败')
+        }
+
+    }
+    // mBaseUrl+'/api/analysis/getAnalysisByWeek'
+    getData = (instanceId) => {
+        fetchPost('http://erp.yitoa.com:8888/office/api/analysis/getAnalysisByWeek', {
+            'instanceid': instanceId,
+        }, {
+            // 'Cookie': 'JSESSIONID=' + mSessionId,
+            // "Content-Type": "application/json; charset=UTF-8"
+        }).then((response) => {
+            if(response.success){
+                let dataSource = response.data[0];
+                DEPART = dataSource.DEPART;
+                USERCOUNT = dataSource.USERCOUNT;
+                DURATIONLIST = dataSource.DURATIONLIST;
+                DAILYCOUNT = dataSource.DAILYCOUNT;
+                dataLength = DURATIONLIST.length;
+                if(dataLength>0){
+                    columnWidth = dataLength*55;
+                }else{
+                    columnWidth = 300
+                }
+                this.setState({
+                    loading: false
+                })
+            }
+        }).catch(error => {
+            console.log(error)
+        })
+    }
+    handleClick = e => {
+        if (e.data) {
+            let emcode = e.data.point.EMCODE;
+            let instanceId = this.props.match.params.instanceId;
+            emcode = encodeURIComponent(emcode);
+            instanceId = encodeURIComponent(instanceId);
+            this.props.history.push('/worksummary?emcode=' + emcode + '&instanceId=' + instanceId)
+        } else {
+            return false;
+        }
+
+
+    }
+    render() {
+        const { loading } = this.state;
+        const cols = {
+            EMCOUNT: {
+                min: 0
+            },
+            DATE_TIME: {
+                range: [0, 1]
+            }
+        };
+        const ds = new DataSet();
+        const dv = ds.createView().source(DURATIONLIST);
+        dv.source(DURATIONLIST).transform({
+            type: "sort",
+            callback(a, b) {
+                // 排序依据,和原生js的排序callback一致
+                return a.DURATION - b.DURATION;
+            }
+        });
+
+        return (
+            <div className="useStatusRoot">
+                <Spin size="large"
+                    style={{ display: loading ? 'flex' : 'none' }}
+                    tip='数据请求中...'>
+                </Spin>
+                <div style={{ display: loading ? 'none' : 'flex' }} className='content'>
+                    <div className='branch'>{DEPART}</div>
+                    <div className='useNum'>使用人数{USERCOUNT}人</div>
+                    <div className='lineCharts'>
+                        <div className='useAnaly'>成员使用分析</div>
+                        <Chart padding={['12%','10%','12%','8%']} height={200} data={DAILYCOUNT} scale={cols} forceFit>
+                            <Axis
+                                name="DATE_TIME"
+                                label={{
+                                    offset: 18,
+                                    textStyle: {
+                                        fontSize: '16',
+                                        fill: '#959595'
+                                    }
+                                }} />
+                            <Axis
+                                name="EMCOUNT"
+                                position="right"
+                                label={{
+                                    offset: 10,
+                                    textStyle: {
+                                        fontSize: '16',
+                                        fill: '#959595'
+                                    }
+                                }}
+                            />
+                            <Tooltip
+                                crosshairs={{
+                                    type: "y"
+                                }}
+                            />
+                            <Geom type="line" position="DATE_TIME*EMCOUNT" size={2} />
+                            <Geom
+                                type="point"
+                                position="DATE_TIME*EMCOUNT"
+                                size={4}
+                                shape={"circle"}
+                                style={{
+                                    stroke: "#fff",
+                                    lineWidth: 1
+                                }}
+                            />
+                        </Chart>
+                    </div>
+                    <div className='columnCharts'>
+                        <div className='useTime'>成员使用时间(分钟)</div>
+                        <Chart
+                            onPlotClick={this.handleClick}
+                            padding={['auto','12%','auto','20%']}
+                            height={columnWidth}
+                            data={dv}
+                            forceFit
+                        >
+                            <Coord transpose />
+                            <Axis
+                                name="EMNAME"
+                                label={{
+                                    offset: 10,
+                                    textStyle: {
+                                        fontSize: '16',
+                                        fill: '#000'
+                                    }
+                                }}
+                            />
+                            <Axis name="DURATION" label={null} />
+                            <Tooltip />
+                            <Geom type="interval" position="EMNAME*DURATION" >
+                                <Label
+                                    offset={5}
+                                    content="DURATION"
+                                    textStyle={{
+                                        fill: '#000', // 文本的颜色
+                                        fontSize: '16', // 文本大小
+                                    }} />
+                            </Geom>
+                        </Chart>
+                    </div>
+                </div>
+            </div>
+        );
+    }
+}
+

+ 49 - 0
uas-office-web/wxuasapproval/src/pages/useStatus/useStatus.css

@@ -0,0 +1,49 @@
+
+.useStatusRoot{
+    width: 100%;
+    height: 100%;
+    background: #f5f5f5 !important;
+    display: flex;
+    flex-direction: column;
+    font-family: "Helvetica Neue", Helvetica, Arial, "PingFang SC", "Hiragino Sans GB", "Heiti SC", "Microsoft YaHei", "WenQuanYi Micro Hei", sans-serif;
+}
+.useStatusRoot .content {
+    width: 100%;
+    flex: 1;
+    flex-direction: column;
+    overflow-y: scroll;
+    overflow-x: hidden;
+}
+.useStatusRoot .content .branch{
+    padding:4%;
+    padding-bottom: 0;
+    color:#000;
+    font-size:24px;
+    background:#fff;
+    text-align:center;
+}
+.useStatusRoot .content .lineCharts{
+    background:#fff;
+    margin:3% 0 0 0;
+}
+.useStatusRoot .content .columnCharts{
+    background:#fff;
+    margin:3% 0 0 0;
+}
+.useStatusRoot .content .useNum{
+    background:#fff;
+    font-size:20px;
+    padding-left:4%;
+    color:#000;
+}
+.useStatusRoot .content .lineCharts .useAnaly{
+    margin:0 !important;
+    padding:4%;
+    padding-bottom:0%;
+    font-size:16px;
+}
+.useStatusRoot .content .columnCharts .useTime{
+    margin:0 !important;
+    padding:4%;
+    font-size:16px;
+}

+ 177 - 0
uas-office-web/wxuasapproval/src/pages/workSummary/WorkSummary.jsx

@@ -0,0 +1,177 @@
+import React, { Component } from 'react';
+import {
+    Chart,
+    Geom,
+    Axis,
+    Tooltip,
+    Coord,
+    Label
+} from "bizcharts";
+import DataSet from "@antv/data-set";
+import './workSummary.css';
+import { Avatar, message, Spin } from 'antd';
+import { List } from 'antd-mobile';
+import { fetchPost, fetchGet } from '../../utils/fetchRequest'
+import {
+    isObjNull, strContain, isObjEmpty, isEmptyObject, getStrValue,
+} from '@/utils/common'
+const Item = List.Item;
+
+let EMCODE, EMNAME, RANGETIME, DURATION, ADDCOUNT, COMMITCOUNT, AUDITCOUNT, dataLength;
+let MODELLIST = [];
+let columnWidth = 300;
+let mBaseUrl = window.location.origin + '/office';
+
+export default class Basic extends Component {
+    constructor() {
+        super()
+
+        this.state = {
+            loading: true   //更改
+        }
+    }
+    componentWillMount() {
+        let messobj = this.getUrlData();
+        if (!isObjEmpty(messobj)) {
+            try {
+                let emCode = decodeURIComponent(messobj.emcode);
+                let instanceId = decodeURIComponent(messobj.instanceId);
+                this.getData(emCode, instanceId);
+            } catch (e) {
+                this.setState({
+                    loading: false,
+                })
+                message.error('参数获取失败')
+            }
+        } else {
+            this.setState({
+                loading: false,
+            })
+            message.error('参数获取失败')
+        }
+    }
+
+    getUrlData() {
+        let url = window.location.href;  //url中?之后的部分
+        url = decodeURIComponent(url)
+        url = this.getCaption(url);
+        let dataObj = {};
+        if (url.indexOf('&') > -1) {
+            url = url.split('&');
+            for (let i = 0; i < url.length; i++) {
+                let arr = url[i].split('=');
+                dataObj[arr[0]] = arr[1];
+            }
+        } else {
+            url = url.split('=');
+            dataObj[url[0]] = url[1];
+        }
+        return dataObj;
+    }
+
+    getCaption(obj) {     //拿到?后的值
+        var index = obj.lastIndexOf("\?");
+        obj = obj.substring(index + 1, obj.length);
+        return obj;
+    }
+    // mBaseUrl+'/api/analysis/getAnalysisByPerson'
+    getData = (emCode, instanceId) => {
+        fetchPost('http://erp.yitoa.com:8888/office/api/analysis/getAnalysisByPerson', {
+            'emCode': emCode,
+            'instanceid': instanceId
+        }, {
+            // 'Cookie': 'JSESSIONID=' + mSessionId,
+            // "Content-Type": "application/json; charset=UTF-8"
+        }).then((response) => {
+            if (response.success) {
+                let dataSource = response.data;
+                EMCODE = dataSource.EMCODE;
+                EMNAME = dataSource.EMNAME;
+                RANGETIME = dataSource.RANGETIME;
+                DURATION = dataSource.DURATION;
+                ADDCOUNT = dataSource.ADDCOUNT;
+                COMMITCOUNT = dataSource.COMMITCOUNT;
+                AUDITCOUNT = dataSource.AUDITCOUNT;
+                MODELLIST = dataSource.MODELLIST;
+                dataLength = MODELLIST.length;
+                if (dataLength > 0) {
+                    columnWidth = dataLength * 55;
+                } else {
+                    columnWidth = 300
+                }
+                this.setState({
+                    loading: false
+                })
+            }
+        }).catch(error => {
+            console.log(error)
+        })
+    }
+
+    render() {
+        const { loading } = this.state;
+        const ds = new DataSet();
+        const dv = ds.createView().source(MODELLIST);
+        dv.source(MODELLIST).transform({
+            type: "sort",
+            callback(a, b) {
+                // 排序依据,和原生js的排序callback一致
+                return a.DURATION - b.DURATION;
+            }
+        });
+
+        return (
+            <div className=" workSummaryRoot">
+                <Spin size="large"
+                    style={{ display: loading ? 'flex' : 'none' }}
+                    tip='数据请求中...'>
+                </Spin>
+                <div style={{ display: loading ? 'none' : 'flex' }} className='content'>
+                    <div className='selfMess'>
+                        <Avatar size={42} src={require('@/images/default_header.png')} />
+                        <div className='self'>
+                            <p className='name'>{EMNAME}</p>
+                            <p className='summary'>一周小结 {RANGETIME}</p>
+                        </div>
+                    </div>
+                    <div className='workSummary'>
+                        <p className='workTitle'>工作小结</p>
+                        <List className="my-list">
+                            <Item extra={DURATION + ' 分钟'}>累计在线时长:</Item>
+                            <Item extra={ADDCOUNT + ' 项'}>累计新增单据:</Item>
+                            <Item extra={COMMITCOUNT + ' 项'}>累计提交单据:</Item>
+                            <Item extra={AUDITCOUNT + ' 项'}>累计处理审批:</Item>
+                        </List>
+                    </div>
+                    <div className='columnCharts'>
+                        <div className='useTime'>各模块使用情况(分钟)</div>
+                        <Chart padding={['auto', '12%', 'auto', 'auto']} height={columnWidth} data={dv} forceFit>
+                            <Coord transpose />
+                            <Axis
+                                name="MODELNAME"
+                                label={{
+                                    textStyle: {
+                                        textAlign: 'end', // 文本对齐方向,可取值为: start center end
+                                        fill: '#000',
+                                        fontSize: '16'
+                                    }
+                                }}
+                            />
+                            <Axis name="DURATION" label={null} />
+                            <Tooltip />
+                            <Geom type="interval" position="MODELNAME*DURATION" >
+                                <Label label={{
+                                    textStyle: {
+                                        fill: '#000',
+                                        fontSize: '16'
+                                    }
+                                }} offset={5} content="DURATION" />
+                            </Geom>
+                        </Chart>
+                    </div>
+                </div>
+            </div>
+        );
+    }
+}
+

+ 62 - 0
uas-office-web/wxuasapproval/src/pages/workSummary/workSummary.css

@@ -0,0 +1,62 @@
+.workSummaryRoot {
+    width: 100%;
+    height: 100%;
+    background: #f5f5f5 !important;
+    display:-webkit-flex;
+    display: flex;
+    font-family: "Helvetica Neue", Helvetica, Arial, "PingFang SC", "Hiragino Sans GB", "Heiti SC", "Microsoft YaHei", "WenQuanYi Micro Hei", sans-serif;
+}
+.workSummaryRoot .content {
+    width: 100%;
+    flex: 1;
+    overflow-y: scroll;
+    overflow-x: hidden;
+    display:-webkit-flex;
+    display: flex;
+    -webkit-flex-direction: column;
+    flex-direction: column;
+}
+.content::-webkit-scrollbar {
+    display: none;
+}
+.workSummaryRoot .content .selfMess{
+    width: 100%;
+    padding: 10px;
+    display: flex;
+    align-items: center;
+    background:#fff;
+}
+.workSummaryRoot .content .selfMess .self{
+    width:100%;
+}
+.workSummaryRoot .content .selfMess .self .name{
+    font-size:16px;
+    margin:0;
+    margin-left:5%;
+    color:#000;
+}
+.workSummaryRoot .content .selfMess .self .summary{
+    margin-left:5%;
+    font-size:16px;
+    color:#333333;
+}
+.workSummaryRoot .content .workSummary {
+    margin:3% 0 0 0;
+}
+.workSummaryRoot .content .workSummary .workTitle{
+    margin:0 !important;
+    padding:2%;
+    padding-left:5%;
+    color: rgba(0, 0, 0, 0.65);
+    font-size:16px;
+    background:#fff;
+}
+.workSummaryRoot .content .columnCharts{
+    margin:3% 0 0 0;
+    background:#fff;
+}
+.workSummaryRoot .content .columnCharts .useTime{
+    margin:0 !important;
+    padding:4% 4% 0 4%;
+    font-size: 16px;
+}

Datei-Diff unterdrückt, da er zu groß ist
+ 1447 - 702
uas-office-web/wxuasapproval/yarn.lock


Einige Dateien werden nicht angezeigt, da zu viele Dateien in diesem Diff geändert wurden.