{"version":3,"sources":["img/logo.png","img/kbColors.png","tools/Notification/notice.js","tools/Notification/notification.js","tools/Notification/toast.js","tools/FetchAPI.js","Default.js","tools/StorageData.js","control/Grid.js","WorkShop.js","control/Pagination.js","EmpPerformance.js","control/Lightbox.js","SdsProgress.js","QcAbnormal.js","McmState.class.js","ProductionStatus.js","MmsFixture.js","Login.js","control/Seek.js","control/DataSelector.js","UserCenter.js","serviceWorker.js","index.js"],"names":["module","exports","Notice","this","props","type","content","className","aria-hidden","xlinkHref","info","success","warning","error","loading","Component","Notification","transitionTime","state","notices","removeNotice","bind","Date","getTime","length","notice","key","getNoticeKey","every","item","push","setTimeout","setState","duration","filter","onClose","TransitionGroup","map","CSSTransition","classNames","timeout","createNotification","notification","div","document","createElement","body","appendChild","ref","React","createRef","ReactDOM","render","addNotice","current","destroy","unmountComponentAtNode","removeChild","notificationDOM","FetchApi","callback","get","jsonResult","data","_this","loginResult","State","Toast","Msg","authUser","Data","path","params","noAuth","url","host","paramsArray","Object","keys","forEach","encodeURIComponent","search","join","header","AuthorizedCode","fetch","method","headers","then","response","_resolveException","json","result","catch","toString","_resolveNetworkError","redo","ok","text","console","log","status","isRefreshingToken","interval","setInterval","clearInterval","window","location","origin","Default","clearAllTimer","allBlocks","block","refreshTimer","clearTimeout","refreshTimer2","windowResize","charts","chart","resize","beginRefresh","refreshData","a","refreshFn","delay","block1Data","block3Data","oeeCurrentData","name","calcFontSize","res","clientWidth","innerWidth","documentElement","chartCommonOption","textStyle","fontSize","tooltip","trigger","formatter","title","delays","updateHeader","workEfficiency","deRate","toFixed","initChart","echarts","getElementById","setOption","assign","legend","orient","right","width","top","_thisItem","_total","getOption","series","i","value","color","rich","padding","lineHeight","qty","align","percent","center","radius","avoidLabelOverlap","label","normal","show","position","emphasis","fontWeight","labelLine","date","moment","format","Array","isArray","bp_quan","cp_no_quan","chart1","left","bottom","itemGap","itemHeight","itemWidth","chart2","mcmCurrentIndex","running","maintain","idle","stop","scene","xAxis","boundaryGap","axisLine","lineStyle","axisLabel","axisTick","yAxis","margin","grid","smooth","symbolSize","areaStyle","refreshOee","oeeCurrentIndex","oeeXData","oeeYData","currentData","op_date","oee","find","o","addEventListener","removeEventListener","id","slice","Username","DeTotal","style","So_no","GdCode","GdName","r_date","StorageData","Promise","resolve","reject","localStorage","e","_cache","JSON","parse","message","getItem","setItem","stringify","ReactNativeWebView","postMessage","removeItem","Grid","renderGridCell","col","datarow","FieldName","v","dataType","selectRow","onClickRow","currentTarget","sectionRowIndex","disableRowSelect","oldRow","querySelector","replace","onSelectRow","getSelectedData","selectedRow","dataset","index","renderRowBottom","colSpan","columns","Header","onScroll","target","previousElementSibling","scrollLeft","d","Fragment","onClick","data-index","j","_renderRowBottom","defaultProps","WorkShop","partGridCols","gridScrollTimer","McmStatusTimer","wsts","getObject","headerWst","x","substring","workshopWsts","param","wstIds","mcmIds","empIds","mcms","concat","gallery","undefined","BillType","galleryItemClick","Mcm_ID","Emp_ID","nwst","emps","newState","xx","itemId","stateCode","worker","refreshMcmState","funcid","attr_no","val","dateColTitle","cols","gridCols","scrollToLeft","offsetWidth","galleryX","Math","min","scrollToRight","selectedItem","gridData","galleryItem","offsetLeft","galleryContainer","itemOffsetX2","isFetchOK","wstId","mcmId","nomcm","gridScroll","partGridShow","autoRefresh","scrollHeight","clientHeight","scrollTop","scroll","nextGalleryItem","currentItemIndex","findIndex","warn","marginLeft","Upstate","partGridData","itemIndex","color_set","ww_if","qcun_if","qc_if","zt_if","yc_if","rowdata","EDraNo","currentEDraNo","transform","mcm_no","emp_no","mcm_name","empName","src","mcmPhone","empPhone","alt","showPartData","display","closePartGrid","Pagination","goPage","pageIndex","forcePage","onPageChange","selected","goNextPage","_next","pageCount","ceil","pageSize","_start","selectedData","onPageChanged","autoPager","autoPagerFun","timers","autoNextTimer","autoPagerRunning","p","containerClassName","previousLabel","nextLabel","EmpPerformance","dayTimer","managerTimer","monthPagerTimer","dayTimerTimeout","add","hour","minute","second","millisecond","diff","_d","managers","currentManager","currentIndex","indexOf","ID","Code","Name","NickName","monthData","monthPageCount","monthPageSize","loadMonthPageData","weekData","monthAvg","empId","chartWeek","seriesWeek","detailData","xData","emp_per","yData","ord","reverse","monthPageIndex","onMonthPageChange","GStand","plan_hour","fact_hour","work_hour","p_tc_quan","p_hg_quan","p_bf_quan","p_bhg_quan","seekScrollTimer","Number","getComputedStyle","axisPointer","splitLine","barMaxWidth","barMinHeight","itemStyle","dataIndex","height","focus","symbol","markPoint","markLine","Lightbox","images","open","useState","modalIsOpen","setModalIsOpen","useEffect","views","styles","base","zIndex","view","textAlign","isFullscreen","SdsProgress","Classb_ID","Gd_ID","source","imageIsOpen","gridPagerData","total","currentSpbId","gridScrollCurrentTrIndex","workEfficiencyTimer","gridRefreshTimer","clearGridTimer","setting","loadGridData","loadWorkEfficiency","initIf","cates","gdnos","prusers","qrusers","itemLevel","days","doSearchIf","soaCateIds","gdIds","prUserIds","qrUserIds","loadGirdPagData","dataCount","setGridData","currentPage","allTr","querySelectorAll","offsetTop","newData","line","progress","spb_id","spb_line_no","plan","fact","abnor_if","emp","note","item_progress","split","spbId","renderGridRowBottom","QcAbnormal","line_id_err_if","DutDept","wst_name","errIf","end_date","txt","line_index","noteZG","wordBreak","wordWrap","whiteSpace","btmImgsTimer","btm1CurrentImg","btm1Images","depts","deptIds","loadGridRowData","cnt","containLabel","encode","y","roseType","borderRadius","overflow","alignWithLabel","order","weekdays","k","dayofweek","serie","datasetId","showSymbol","endLabel","distance","valueAnimation","seriesName","labelLayout","moveOverlap","headerText","dept","relaId","relaFd","image","showImages","McmState","ali_date","backgroundColor","beg","end","marker","dataZoom","filterMode","showDataShadow","labelFormatter","scale","isSame","renderItem","api","categoryIndex","start","coord","size","rectShape","clipRectByRect","coordSys","transition","shape","closeBottom","btmSceneId","btmMcmId","btmShow","btmData","btmMcms","showBottom","mcm","sceneId","stateData","categories","states","mcmIndex","stateItem","time","valueOf","startOf","max","endOf","sceneMcmsData","mcmImage","stateCntData","code","filterState","gridDataCnt","gridPageIndex","refreshDataTimer","refreshMaintainDataTimer","loadMcmData","loadMaintainData","scenes","sceneIds","headerScene","mcmScene","contentLeft","offsetHeight","getElementsByClassName","mcm_img","dataCnt","ifDNC","cx","cnc_prg_name","zz","cnc_sp_speed","cnc_sp_override","jg","cnc_feed_rate","cnc_feed_override","cal_today_hours","cal_mon_oee","showMcmImg","gridPageChange","ProductionStatus","gridSdsOutPagerRef","gridPosRecPagerRef","gridMosRecPagerRef","girdPageSize","gridSdsOutCols","gridSdsOutData","gridSdsOutPageData","gridPosRecCols","gridPosRecData","gridPosRecPageData","gridMosRecCols","gridMosRecData","gridMosRecPageData","dispose","floor","complate_rate","sds_out","pos_rec","mos_rec","gridSdsOutPager_onPageChanged","gridPosRecPager_onPageChanged","gridMosRecPager_onPageChanged","class","MmsFixture","qrCodeIsOpen","loadData","fixInCod2s","fixChanges","fixSerialNums","incod2Ids","changeIds","fixaIds","Serial_num","QRCode","toCanvas","event","stopPropagation","change","row","fix_name","gstand","showQrcode","left_times","toLocaleString","Login","doLogin","loginSuccessCallback","login","userName","userPwd","md5","secureCode","OrgID","call","orgList","oragID","orgData","org_list","lastOrg","getOrg","onChange","org","orgName","placeholder","href","onConfirm","onCancel","visible","Seek","filterData","seek","seekName","query","seekQuery","filterKeyword","$fields","filterField","$keyword","queryString","dataObj","seekTitle","onKeyPress","which","DataSelector","selectBySeek","holder","seekData","afterSetValue","deleteItem","parseFloat","parentNode","values","UserCenter","doLogout","logout","handlePageChange","defaultPage","handleSettingChange","page","wsWsts","wsMcms","wsEmps","mcmDays","OrgName","UserName","checked","fun_id","splice","cateName","background","border","select","Wst_ID","emp_nam","chart_name","_data","InName","wordb_name","kanban","fixa_id","screen","devicePixelRatio","Boolean","hostname","match","B9KB","showLogin","loginChild","initUserInfo","App","showUserCenter","switchTo","userCenter","appTitle","pages","renderHeaderPart","toggleFullScreen","el","isFullScreen","rfs","exitFullscreen","mozCancelFullScreen","webkitCancelFullScreen","msExitFullscreen","requestFullScreen","webkitRequestFullScreen","mozRequestFullScreen","msRequestFullscreen","showColorBoard","colorShowIf","welcomeShowIf","welcomeImgIndex","onLogoClick","welcomeImgs","config","welcomeImages","process","welcomeSignInImg","welcomeTimer","clockTimer","now","init","msg","initError","classList","contains","remove","resetIf","navigator","userAgent","Logo","showWelcome","activeAutoRefresh","hideWelcome","ImgColor","StrictMode","serviceWorker","ready","registration","unregister"],"mappings":"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","file":"static/js/main.eaf7ffc8.chunk.js","sourcesContent":["module.exports = \"data:image/png;base64,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\"","module.exports = __webpack_public_path__ + \"static/media/kbColors.912a0cf3.png\";","import React, { Component } from 'react'\r\n\r\nclass Notice extends Component {\r\n render() {\r\n const icons = {\r\n info: 'icon-info-circle-fill',\r\n success: 'icon-check-circle-fill',\r\n warning: 'icon-warning-circle-fill',\r\n error: 'icon-close-circle-fill',\r\n loading: 'icon-loading'\r\n }\r\n const { type, content } = this.props\r\n return (\r\n
\r\n \r\n \r\n \r\n {content}\r\n
\r\n )\r\n }\r\n}\r\n\r\nexport default Notice\r\n","import React, { Component } from 'react'\r\nimport ReactDOM from 'react-dom'\r\nimport { CSSTransition, TransitionGroup } from 'react-transition-group'\r\nimport Notice from './notice'\r\n\r\nclass Notification extends Component {\r\n constructor() {\r\n super()\r\n this.transitionTime = 300\r\n this.state = { notices: [] }\r\n this.removeNotice = this.removeNotice.bind(this)\r\n }\r\n\r\n getNoticeKey() {\r\n const { notices } = this.state\r\n return `notice-${new Date().getTime()}-${notices.length}`\r\n }\r\n\r\n addNotice(notice) {\r\n const { notices } = this.state\r\n notice.key = this.getNoticeKey()\r\n if (notices.every(item => item.key !== notice.key)) {\r\n if (notices.length > 0 && notices[notices.length - 1].type === 'loading') {\r\n notices.push(notice)\r\n setTimeout(() => {\r\n this.setState({ notices })\r\n }, this.transitionTime)\r\n } else {\r\n notices.push(notice)\r\n this.setState({ notices })\r\n }\r\n if (notice.duration > 0) {\r\n setTimeout(() => {\r\n this.removeNotice(notice.key)\r\n }, notice.duration)\r\n }\r\n }\r\n return () => {\r\n this.removeNotice(notice.key)\r\n }\r\n }\r\n\r\n removeNotice(key) {\r\n const { notices } = this.state\r\n this.setState({\r\n notices: notices.filter(notice => {\r\n if (notice.key === key) {\r\n if (notice.onClose) setTimeout(notice.onClose, this.transitionTime)\r\n return false\r\n }\r\n return true\r\n })\r\n })\r\n }\r\n\r\n render() {\r\n const { notices } = this.state\r\n return (\r\n \r\n {notices.map(notice => (\r\n \r\n \r\n \r\n ))}\r\n \r\n )\r\n }\r\n}\r\n\r\nfunction createNotification() {\r\n const div = document.createElement('div')\r\n document.body.appendChild(div)\r\n const ref = React.createRef()\r\n ReactDOM.render(, div)\r\n return {\r\n addNotice(notice) {\r\n return ref.current.addNotice(notice)\r\n },\r\n destroy() {\r\n ReactDOM.unmountComponentAtNode(div)\r\n document.body.removeChild(div)\r\n }\r\n }\r\n}\r\n\r\nexport default createNotification()\r\n","import notificationDOM from './notification'\r\nimport './toast.css'\r\n\r\nlet notification\r\nconst notice = (type, content, duration = 2000, onClose) => {\r\n if (!notification) notification = notificationDOM\r\n return notification.addNotice({ type, content, duration, onClose })\r\n}\r\n\r\nexport default {\r\n info(content, duration, onClose) {\r\n return notice('info', content, duration, onClose)\r\n },\r\n success(content, duration, onClose) {\r\n return notice('success', content, duration, onClose)\r\n },\r\n warning(content, duration, onClose) {\r\n return notice('warning', content, duration, onClose)\r\n },\r\n error(content, duration, onClose) {\r\n return notice('error', content, duration, onClose)\r\n },\r\n loading(content, duration = 0, onClose) {\r\n return notice('loading', content, duration, onClose)\r\n }\r\n}\r\n","import Toast from './Notification/toast';\r\n\r\nclass FetchApi {\r\n\r\n static async getOrg(callback) {\r\n this.get('/api/account/getorgs', null, function (jsonResult) {\r\n callback && callback(jsonResult);\r\n }, true);\r\n }\r\n\r\n static async login(data, callback) {\r\n var _this = this;\r\n return await this.get('/api/account/Login', data, function (jsonResult) {\r\n if (jsonResult) {\r\n var loginResult = jsonResult;\r\n if (loginResult.State !== '1') {\r\n Toast.error(loginResult.Msg);\r\n } else {\r\n _this.authUser = loginResult.Data;\r\n }\r\n\r\n callback && callback(loginResult);\r\n }\r\n }, true);\r\n }\r\n static async logout(callback) {\r\n var _this = this;\r\n this.get('/api/account/Logout', null, function (jsonResult) {\r\n _this.authUser = null;\r\n callback && callback();\r\n });\r\n }\r\n\r\n static async get(path, params, callback, noAuth = false) {\r\n\r\n var url = this.host + path;\r\n\r\n if (!noAuth && !this.authUser) {\r\n // 未登录 \r\n Toast.error('尚未登录');\r\n return false;\r\n }\r\n\r\n if (params) {\r\n let paramsArray = []\r\n Object.keys(params).forEach(key => paramsArray.push(key + '=' + encodeURIComponent(params[key])))\r\n if (url.search(/\\?/) === -1) {\r\n url += '?' + paramsArray.join('&')\r\n } else {\r\n url += '&' + paramsArray.join('&')\r\n }\r\n }\r\n\r\n let header = {\r\n \"Content-Type\": \"application/json\"\r\n }\r\n if (!noAuth) {\r\n header[\"Authorization\"] = (\"BasicAuth \" + this.authUser.AuthorizedCode);\r\n }\r\n\r\n // let loading = document.querySelector('#loading');\r\n // if (!loading) {\r\n // loading = document.createElement('div');\r\n // loading.id = 'loading';\r\n // loading.style = `\r\n // background: red;\r\n // position: absolute;\r\n // top: 0;\r\n // bottom: 0;\r\n // right: 0;\r\n // left: 0;\r\n // opacity: .5;`;\r\n // window.document.body.append(loading);\r\n // }\r\n\r\n await fetch(url, {\r\n method: 'GET',\r\n headers: header\r\n }).then((response) => {\r\n // if (loading) {\r\n // loading.remove();\r\n // }\r\n if (!_resolveException(response,\r\n url,\r\n () => { FetchApi.get(path, params, callback, noAuth); } // redo \r\n )) {\r\n callback && callback(null);\r\n return;\r\n }\r\n response\r\n .json()\r\n .then((result) => {\r\n callback && callback(result);\r\n })\r\n .catch((error) => {\r\n Toast.error(error.toString());\r\n callback && callback(null);\r\n });\r\n\r\n }).catch(function (error) {\r\n _resolveNetworkError(error);\r\n callback && callback(null);\r\n });\r\n\r\n }\r\n}\r\nFetchApi.host = process.env.NODE_ENV === \"production\" ? window.location.origin : 'http://localhost:14883';\r\nFetchApi.authUser = null;\r\nFetchApi.isRefreshingToken = 0;\r\n\r\n// 处理一般的服务器异常 \r\nfunction _resolveException(response, url, redo) {\r\n if (response.ok) {\r\n //AsyncStorage.setItem('401', 'true');\r\n return true;\r\n }\r\n\r\n response.text().then((result) => {\r\n console.log('response.status:' + response.status + '. ' + result);\r\n });\r\n\r\n if (response.status === 410 && response.headers.get(\"app-permission-denied\")) {\r\n Toast.error('您的操作未授权,请授权限后再操作');\r\n return false;\r\n }\r\n\r\n if (response.status === 401 && response.headers.get(\"session-timeout\")) {\r\n // 超时,刷新token后重新发起当前请求 \r\n if (redo) {\r\n\r\n if (FetchApi.isRefreshingToken) {\r\n var interval = setInterval(function () {\r\n if (!FetchApi.isRefreshingToken) {\r\n clearInterval(interval);\r\n\r\n redo();\r\n }\r\n }, 3000);\r\n }\r\n else {\r\n FetchApi.isRefreshingToken = 1;\r\n FetchApi.get('/api/account/RefreshToken', { 'authCode': FetchApi.authUser.AuthorizedCode }, function (jsonResult) {\r\n FetchApi.isRefreshingToken = 0;\r\n if (jsonResult) {\r\n var loginResult = jsonResult;\r\n if (loginResult.State !== '1') {\r\n Toast.error(loginResult.Msg);\r\n } else {\r\n redo();\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n // Not Found 请求的资源不存在\r\n if (response.status === 404) {\r\n Toast.error('请求的资源不存在,请确认');\r\n return false;\r\n }\r\n // Internal Server Error 服务器返回一个错误 \r\n else if (response.status === 500) {\r\n Toast.error('服务器响应错误,请重试或联系管理员');\r\n return false;\r\n }\r\n // Service Unavailable 服务器不可用 \r\n else if (response.status === 503) {\r\n Toast.error('服务不可用,请稍后重试');\r\n return false;\r\n }\r\n else {\r\n // 其他错误 \r\n Toast.error(\"服务异常,状态码:\" + response.status);\r\n return false;\r\n }\r\n}\r\n\r\nfunction _resolveNetworkError(error) {\r\n Toast.error('网络请求失败,无法连接到服务器');\r\n console.log('fetch error:' + error);\r\n}\r\n\r\nexport default FetchApi;","import React, { Fragment } from 'react';\r\nimport * as echarts from 'echarts';\r\nimport ReactDOM from 'react-dom';\r\nimport moment from 'moment';\r\nimport FetchApi from './tools/FetchAPI'\r\nimport './App.css';\r\n\r\nclass Default extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n block1Data: [{}, {}, {}, {}],\r\n block3Data: [],\r\n oeeCurrentData: { name: '设备综合利用率OEE', data: [] }\r\n };\r\n this.allBlocks = [];\r\n }\r\n\r\n componentDidMount() {\r\n\r\n const calcFontSize = (res) => {\r\n let clientWidth = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;\r\n if (!clientWidth)\r\n return 16;\r\n let fontSize = 100 * (clientWidth / 1440);\r\n //console.log(res * fontSize);\r\n return res * fontSize;\r\n }\r\n\r\n let chartCommonOption = {\r\n textStyle: {\r\n fontSize: calcFontSize(0.18)\r\n },\r\n tooltip: {\r\n trigger: 'item',\r\n textStyle: {\r\n fontSize: calcFontSize(0.18)\r\n },\r\n formatter: '{a}
{b}: {c} ({d}%)'\r\n }\r\n }\r\n\r\n this.allBlocks = [\r\n {\r\n title: '项目预警看板',\r\n interval: 17 * 60 * 1000,\r\n delay: 2 * 1000,\r\n refreshFn: async () => {\r\n return await FetchApi.get(\"/API/BoardData/GetProjectDelay\", null, (result) => {\r\n if (result && result.delays) {\r\n this.setState({ block1Data: result.delays });\r\n this.props.updateHeader({\r\n workEfficiency: ((100 - result.deRate).toFixed(2) || '')\r\n });\r\n //document.querySelector('#lblTotalEfficiency>span').innerHTML = ((100 - result.deRate).toFixed(2) || '') + '%';\r\n //console.log('项目预警看板', 'refresh complete');\r\n }\r\n });\r\n }\r\n }, {\r\n title: '当日质检概览',\r\n interval: 7 * 60 * 1000,\r\n delay: 0.5 * 1000,\r\n initChart: () => {\r\n var chart = echarts.init(document.getElementById('block2-chart'));\r\n chart.setOption(Object.assign({}, chartCommonOption, {\r\n legend: {\r\n orient: 'vertical',\r\n right: calcFontSize(0.2),\r\n width: '30%',\r\n top: 'middle',\r\n formatter: function (name) {\r\n var _total = 0;\r\n var _thisItem;\r\n var data = chart.getOption().series[0].data;\r\n for (var i = 0; i < data.length; i++) {\r\n _total += data[i].value;\r\n if (name == data[i].name) {\r\n _thisItem = data[i];\r\n }\r\n }\r\n\r\n return ' \\n {name|' + name + '} ' +\r\n '\\n' +\r\n ' {qty|' + _thisItem.value + '个' + '}' +\r\n (_total != 0 ? ('{percent|' + (_thisItem.value / _total * 100).toFixed(2) + '%}') : '');\r\n },\r\n textStyle: {\r\n color: '#EEE',\r\n rich: {\r\n name: {\r\n color: '#CCC',\r\n padding: [0, 0, 0, 0],\r\n lineHeight: calcFontSize(0.36),\r\n },\r\n qty: {\r\n width: calcFontSize(0.8),\r\n align: 'left',\r\n },\r\n percent: {\r\n width: calcFontSize(0.8),\r\n align: 'right',\r\n }\r\n }\r\n }\r\n },\r\n series: [{\r\n name: '比率',\r\n type: 'pie',\r\n center: ['30%', '50%'],\r\n radius: ['40%', '60%'],\r\n avoidLabelOverlap: false,\r\n label: {\r\n normal: {\r\n show: false,\r\n position: 'center'\r\n },\r\n emphasis: {\r\n show: true,\r\n textStyle: {\r\n fontSize: calcFontSize(0.16) * 1.1,\r\n fontWeight: 'bold'\r\n }\r\n }\r\n },\r\n labelLine: {\r\n normal: {\r\n show: false\r\n }\r\n },\r\n data: [\r\n { value: 0, name: '合格数量' },\r\n { value: 0, name: '不合格数量' }\r\n ],\r\n color: ['#33971d', '#d14040']\r\n }]\r\n }));\r\n return [chart];\r\n },\r\n refreshFn: async function () {\r\n FetchApi.get(\"/API/BoardData/GetQC_WorkaData\", { date: moment().format('YYYY-MM-DD') }, (result) => {\r\n if (result && Array.isArray(result)) {\r\n if (result.length < 1) {\r\n result.push({});\r\n }\r\n var series = this.charts[0].getOption().series;\r\n series[0].data[0].value = result[0].bp_quan || 0;\r\n series[0].data[1].value = result[0].cp_no_quan || 0;\r\n\r\n this.charts[0].setOption({ series: series });\r\n }\r\n });\r\n }\r\n }, {\r\n title: '精益生产延期',\r\n interval: 11 * 60 * 1000,\r\n delay: 1 * 1000,\r\n refreshFn: async () => {\r\n FetchApi.get(\"/API/BoardData/GetSDS_SalesAnaly\", null, (result) => {\r\n if (result && Array.isArray(result)) {\r\n this.setState({ block3Data: result });\r\n }\r\n });\r\n }\r\n }, {\r\n title: '机台状态统计',\r\n interval: 0.5 * 60 * 1000,\r\n delay: 0,\r\n initChart: () => {\r\n let chart1 = echarts.init(document.getElementById('block4-chart1'));\r\n var device1Data = [\r\n { value: 0, name: '运行' },\r\n { value: 0, name: '维护' },\r\n { value: 0, name: '空闲' },\r\n { value: 0, name: '停止' }\r\n ]\r\n chart1.setOption(Object.assign({}, chartCommonOption, {\r\n title: {\r\n text: '场景一',\r\n top: '5%',\r\n left: 'center',\r\n textStyle: {\r\n color: '#DDD',\r\n fontSize: calcFontSize(0.18)\r\n }\r\n },\r\n legend: {\r\n orient: 'horizontal',\r\n bottom: '7%',\r\n width: '90%',\r\n itemGap: calcFontSize(0.15),\r\n itemHeight: chartCommonOption.textStyle.fontSize * 0.9,\r\n itemWidth: chartCommonOption.textStyle.fontSize * 0.9 * 1.786,\r\n formatter: function (name) {\r\n\r\n var _thisItem;\r\n var data = chart1.getOption().series[0].data;\r\n for (var i = 0; i < data.length; i++) {\r\n\r\n if (name == data[i].name) {\r\n _thisItem = data[i];\r\n }\r\n }\r\n\r\n return name + ' ' + _thisItem.value + ' 台';\r\n },\r\n textStyle: {\r\n color: '#EEE',\r\n rich: {\r\n name: {\r\n color: '#CCC',\r\n padding: [0, 0, 0, 0],\r\n lineHeight: calcFontSize(0.36),\r\n },\r\n qty: {\r\n width: calcFontSize(0.8),\r\n align: 'left',\r\n }\r\n }\r\n }\r\n },\r\n series: [{\r\n name: '比率',\r\n type: 'pie',\r\n center: ['50%', '40%'],\r\n top: '10%',\r\n bottom: '15%',\r\n left: '10%',\r\n right: '10%',\r\n radius: ['30%', '60%'],\r\n avoidLabelOverlap: false,\r\n label: {\r\n normal: {\r\n show: false,\r\n position: 'center'\r\n },\r\n emphasis: {\r\n show: true,\r\n textStyle: {\r\n fontSize: calcFontSize(0.16) * 1.1,\r\n fontWeight: 'bold'\r\n }\r\n }\r\n },\r\n labelLine: {\r\n normal: {\r\n show: false\r\n }\r\n },\r\n data: device1Data,\r\n color: ['#33971d', '#d14040', 'orange', 'gray']\r\n }]\r\n }));\r\n\r\n let chart2 = echarts.init(document.getElementById('block4-chart2'));\r\n var device2Data = [\r\n { value: 0, name: '运行' },\r\n { value: 0, name: '维护' },\r\n { value: 0, name: '空闲' },\r\n { value: 0, name: '停止' }\r\n ]\r\n chart2.setOption(Object.assign({}, chartCommonOption, {\r\n title: {\r\n text: '场景二',\r\n top: '5%',\r\n left: 'center',\r\n textStyle: {\r\n color: '#DDD',\r\n fontSize: calcFontSize(0.18)\r\n }\r\n },\r\n legend: {\r\n orient: 'horizontal',\r\n bottom: '7%',\r\n width: '90%',\r\n itemGap: calcFontSize(0.15),\r\n itemHeight: chartCommonOption.textStyle.fontSize * 0.9,\r\n itemWidth: chartCommonOption.textStyle.fontSize * 0.9 * 1.786,\r\n formatter: function (name) {\r\n\r\n var _thisItem;\r\n var data = chart2.getOption().series[0].data;\r\n for (var i = 0; i < data.length; i++) {\r\n\r\n if (name == data[i].name) {\r\n _thisItem = data[i];\r\n }\r\n }\r\n\r\n return name + ' ' + _thisItem.value + ' 台';\r\n },\r\n textStyle: {\r\n color: '#EEE',\r\n rich: {\r\n name: {\r\n color: '#CCC',\r\n padding: [0, 0, 0, 0],\r\n lineHeight: calcFontSize(0.36),\r\n },\r\n qty: {\r\n width: calcFontSize(0.8),\r\n align: 'left',\r\n }\r\n }\r\n }\r\n },\r\n series: [{\r\n name: '比率',\r\n type: 'pie',\r\n center: ['50%', '40%'],\r\n top: '10%',\r\n bottom: '15%',\r\n left: '10%',\r\n right: '10%',\r\n radius: ['30%', '60%'],\r\n avoidLabelOverlap: false,\r\n label: {\r\n normal: {\r\n show: false,\r\n position: 'center'\r\n },\r\n emphasis: {\r\n show: true,\r\n textStyle: {\r\n fontSize: calcFontSize(0.16) * 1.1,\r\n fontWeight: 'bold'\r\n }\r\n }\r\n },\r\n labelLine: {\r\n normal: {\r\n show: false\r\n }\r\n },\r\n data: device2Data,\r\n color: ['#33971d', '#d14040', 'orange', 'gray']\r\n }]\r\n }));\r\n\r\n return [chart1, chart2];\r\n },\r\n refreshFn: async function () {\r\n FetchApi.get(\"/API/BoardData/GetMcmStatsByScene\", null, (result) => {\r\n if (result && Array.isArray(result) && result.length > 0) {\r\n let mcmCurrentIndex = this.mcmCurrentIndex || 0;\r\n if (mcmCurrentIndex > result.length - 2) {\r\n mcmCurrentIndex = 0;\r\n }\r\n\r\n let series = this.charts[0].getOption().series;\r\n series[0].data[0].value = result[mcmCurrentIndex].running;\r\n series[0].data[1].value = result[mcmCurrentIndex].maintain;\r\n series[0].data[2].value = result[mcmCurrentIndex].idle;\r\n series[0].data[3].value = result[mcmCurrentIndex].stop;\r\n\r\n let title = this.charts[0].getOption().title;\r\n title[0].text = result[mcmCurrentIndex].scene;\r\n\r\n this.charts[0].setOption({\r\n title: title,\r\n series: series\r\n });\r\n\r\n mcmCurrentIndex++;\r\n\r\n if (result.length > 1) {\r\n let series = this.charts[1].getOption().series;\r\n series[0].data[0].value = result[mcmCurrentIndex].running;\r\n series[0].data[1].value = result[mcmCurrentIndex].maintain;\r\n series[0].data[2].value = result[mcmCurrentIndex].idle;\r\n series[0].data[3].value = result[mcmCurrentIndex].stop;\r\n\r\n let title = this.charts[1].getOption().title;\r\n title[0].text = result[mcmCurrentIndex].scene;\r\n\r\n this.charts[1].setOption({\r\n title: title,\r\n series: series\r\n });\r\n }\r\n\r\n this.mcmCurrentIndex = mcmCurrentIndex;\r\n }\r\n });\r\n }\r\n }, {\r\n title: '设备综合利用率',\r\n interval: 61 * 60 * 1000,\r\n delay: 0.1 * 1000,\r\n initChart: () => {\r\n var chart = echarts.init(document.getElementById('block5-chart'));\r\n var oeeData = [80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80];\r\n var oeeXData = ['1', '2', '3', '4', '5', '6', '7',\r\n '8', '9', '10', '11', '12'\r\n ];\r\n chart.setOption(Object.assign({}, chartCommonOption, {\r\n xAxis: {\r\n type: 'category',\r\n boundaryGap: false,\r\n data: oeeXData,\r\n axisLine: {\r\n lineStyle: {\r\n color: '#fff'\r\n }\r\n },\r\n axisLabel: {\r\n fontSize: calcFontSize(0.13)\r\n },\r\n axisTick: {\r\n show: false\r\n }\r\n },\r\n yAxis: {\r\n type: 'value',\r\n axisLine: {\r\n show: false,\r\n lineStyle: {\r\n color: '#fff'\r\n },\r\n },\r\n axisLabel: {\r\n margin: calcFontSize(0.14),\r\n fontSize: calcFontSize(0.14)\r\n }\r\n },\r\n grid: {\r\n top: '15%',\r\n bottom: '12%',\r\n right: '7%'\r\n },\r\n series: [{\r\n name: 'OEE',\r\n data: oeeData,\r\n type: 'line',\r\n smooth: true,\r\n symbolSize: 8,\r\n lineStyle: {\r\n color: 'rgb(66, 106, 222)'\r\n },\r\n areaStyle: {\r\n color: 'rgba(66, 106, 222, 0.3)'\r\n }\r\n }],\r\n tooltip: {\r\n formatter: '{b}: {c}%',\r\n textStyle: {\r\n fontSize: calcFontSize(0.18)\r\n },\r\n }\r\n }));\r\n\r\n return [chart];\r\n },\r\n refreshFn: async () => {\r\n FetchApi.get(\"/API/BoardData/GetMcmActivationData\", null, (result) => {\r\n if (result && Array.isArray(result) && result.length > 0) {\r\n let oeeCurrentIndex = 0;\r\n let refreshOee;\r\n (refreshOee = () => {\r\n if (oeeCurrentIndex > result.length - 1) {\r\n oeeCurrentIndex = 0;\r\n }\r\n var oeeXData = [],\r\n oeeYData = [];\r\n\r\n let currentData = result[oeeCurrentIndex];\r\n this.setState({\r\n oeeCurrentData: currentData\r\n });\r\n currentData.data.forEach(item => {\r\n oeeXData.push(moment(item.op_date).format('M/D'));\r\n oeeYData.push(item.oee);\r\n });\r\n\r\n let block = this.allBlocks.find(o => o.title == '设备综合利用率');\r\n var xAxis = block.charts[0].getOption().xAxis;\r\n xAxis[0].data = oeeXData;\r\n var series = block.charts[0].getOption().series;\r\n series[0].data = oeeYData;\r\n\r\n block.charts[0].setOption({ series: series, xAxis: xAxis });\r\n\r\n oeeCurrentIndex++;\r\n\r\n if (result.length > 1) {\r\n block.refreshTimer2 = setTimeout(() => {\r\n refreshOee();\r\n }, 20 * 1000);\r\n }\r\n })();\r\n }\r\n });\r\n }\r\n }\r\n ]\r\n\r\n setTimeout(() => { // 这里使用延迟是为了确保echart绘图时能100% \r\n\r\n this.allBlocks.forEach(block => {\r\n if (block.initChart) {\r\n block.charts = block.initChart();\r\n }\r\n });\r\n\r\n window.addEventListener('resize', this.windowResize);\r\n }, 0);\r\n }\r\n\r\n componentWillUnmount() {\r\n this.clearAllTimer();\r\n window.removeEventListener('resize', this.windowResize);\r\n }\r\n\r\n clearAllTimer = () => {\r\n this.allBlocks.forEach(block => {\r\n if (block.refreshTimer) {\r\n clearTimeout(block.refreshTimer);\r\n }\r\n if (block.refreshTimer2) {\r\n clearTimeout(block.refreshTimer2);\r\n }\r\n });\r\n }\r\n\r\n windowResize = () => {\r\n this.allBlocks.forEach(block => {\r\n if (block.charts && block.charts.length > 0) {\r\n block.charts.forEach(chart => {\r\n chart.resize();\r\n })\r\n }\r\n });\r\n }\r\n\r\n beginRefresh = () => {\r\n\r\n this.allBlocks.forEach(block => {\r\n\r\n (function refreshData() {\r\n\r\n if (block.refreshTimer) {\r\n clearTimeout(block.refreshTimer);\r\n }\r\n if (block.refreshTimer2) {\r\n clearTimeout(block.refreshTimer2);\r\n }\r\n\r\n if (!FetchApi.authUser) {\r\n return;\r\n }\r\n\r\n setTimeout(async () => {\r\n\r\n await block.refreshFn();\r\n\r\n block.refreshTimer = setTimeout(() => {\r\n refreshData();\r\n }, block.interval);\r\n\r\n }, block.delay || 0);\r\n\r\n })();\r\n\r\n });\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n

项目预警看板

\r\n
\r\n
    \r\n {\r\n this.state.block1Data.slice(0, 4).map((item, i) => {\r\n return (
  • {item.Username}\r\n {item.DeTotal}\r\n
  • )\r\n })\r\n }\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n

当日质检概览

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n this.state.block3Data.map((item, i) => {\r\n return (\r\n \r\n \r\n \r\n \r\n )\r\n })\r\n }\r\n \r\n
销售单号货品编号货品名称预定交期
{item.So_no}{item.GdCode}{item.GdName}{moment(item.r_date).format('YYYY/MM/DD')}
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n

设备实时状态

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n

\r\n {this.state.oeeCurrentData.name || ' '}\r\n

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default Default;\r\n","class StorageData {\r\n\r\n static init() {\r\n return new Promise((resolve, reject) => {\r\n\r\n if (!window.localStorage) {\r\n document.addEventListener('message', function (e) {\r\n\r\n console.log('message from RN:' + e.data);\r\n StorageData._cache = JSON.parse(e.data || '{}');\r\n\r\n // 对传过来的数据进行兼容处理\r\n if (StorageData._cache.authUser && !StorageData._cache.authUser.AuthorizedCode) {\r\n delete StorageData._cache.authUser;\r\n }\r\n\r\n resolve({ success: true });\r\n });\r\n setTimeout(() => {\r\n reject({ success: false, message: '无法从运行容器中接收到消息' });\r\n }, 5 * 1000);\r\n } else {\r\n resolve({ success: true });\r\n }\r\n });\r\n\r\n }\r\n static getItem(key) {\r\n if (window.localStorage) {\r\n return window.localStorage.getItem(key);\r\n } else {\r\n return StorageData._cache[key];\r\n }\r\n }\r\n static getObject(key) {\r\n var value = StorageData.getItem(key);\r\n\r\n if (value && typeof value !== 'object') {\r\n value = JSON.parse(value);\r\n }\r\n\r\n return value;\r\n }\r\n static setItem(key, value) {\r\n //console.log('setItem: key=' + key + ', value=' + value);\r\n\r\n if (window.localStorage) {\r\n window.localStorage.setItem(key, typeof value === 'object' ? JSON.stringify(value) : value);\r\n } else {\r\n try {\r\n StorageData._cache[key] = value;\r\n window.ReactNativeWebView.postMessage(JSON.stringify({\r\n 'type': 'set',\r\n 'data': StorageData._cache\r\n }));\r\n } catch (e) {\r\n console.error(e.toString());\r\n }\r\n }\r\n }\r\n static removeItem(key) {\r\n if (window.localStorage) {\r\n window.localStorage.removeItem(key);\r\n } else {\r\n delete StorageData._cache[key];\r\n window.ReactNativeWebView.postMessage(JSON.stringify({\r\n 'type': 'delete',\r\n 'data': key\r\n }));\r\n }\r\n }\r\n}\r\nStorageData._cache = null;\r\n\r\nexport default StorageData;","import React from 'react';\r\nimport moment from 'moment';\r\nimport './Grid.css'\r\n\r\nclass Grid extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n };\r\n }\r\n\r\n static defaultProps = {\r\n columns: [], //{name:'', title:'', dataType:'', width:number}\r\n data: [],\r\n onClickRow: null,\r\n disableRowSelect: false,\r\n onSelectRow: null,\r\n renderRowBottom: null,\r\n }\r\n\r\n componentDidMount() {\r\n\r\n }\r\n\r\n renderGridCell = (col, datarow, i) => {\r\n let content = datarow[col.name || col.FieldName];\r\n if (col.render) {\r\n content = col.render({\r\n col: col,\r\n datarow: datarow,\r\n i: i,\r\n v: content,\r\n });\r\n }\r\n else if (col.dataType === 'date' && content) {\r\n content = moment(content).format(\"YY/MM/DD HH:mm\")\r\n }\r\n\r\n return content;\r\n }\r\n\r\n selectRow = (e) => {\r\n\r\n if (this.props.onClickRow) {\r\n this.props.onClickRow(this.props.data[e.currentTarget.sectionRowIndex]);\r\n }\r\n\r\n if (this.props.disableRowSelect) {\r\n return;\r\n }\r\n\r\n let oldRow = document.querySelector('.grid tr.selected');\r\n if (oldRow) {\r\n if (e.currentTarget === oldRow) {\r\n return;\r\n }\r\n oldRow.className = oldRow.className.replace(/\\s*selected/, '');\r\n }\r\n e.currentTarget.className = e.currentTarget.className + ' selected';\r\n\r\n if (this.props.onSelectRow) {\r\n this.props.onSelectRow(this.props.data[e.currentTarget.sectionRowIndex]);\r\n }\r\n }\r\n\r\n getSelectedData = () => {\r\n let selectedRow = document.querySelector('.grid tr.selected');\r\n if (!selectedRow) {\r\n return null;\r\n }\r\n return this.props.data[selectedRow.dataset.index];\r\n }\r\n\r\n _renderRowBottom(datarow, i) {\r\n let _this = this;\r\n\r\n if (_this.props.renderRowBottom) {\r\n return \r\n \r\n {_this.props.renderRowBottom(datarow, i)}\r\n \r\n ;\r\n }\r\n return null;\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n
\r\n \r\n \r\n \r\n {\r\n this.props.columns.map((item, i) => {\r\n let style = item.style || { width: item.width };\r\n if (item.width) {\r\n style.width = item.width;\r\n }\r\n return \r\n })\r\n }\r\n \r\n \r\n
{item.title || item.Header}
\r\n
\r\n
{\r\n e.target.previousElementSibling.scrollLeft = e.target.scrollLeft;\r\n }}>\r\n \r\n {/* \r\n \r\n {\r\n this.props.columns.map((item, i) => {\r\n let style = item.style || { width: item.width };\r\n if (item.width) {\r\n style.width = item.width;\r\n }\r\n return \r\n })\r\n }\r\n \r\n */}\r\n \r\n {\r\n this.props.data && this.props.data.map((d, i) =>\r\n \r\n \r\n {this.props.columns.map((col, j) => {\r\n let content = this.renderGridCell(col, d, i);\r\n let style = col.style || { width: col.width };\r\n if (col.width) {\r\n style.width = col.width;\r\n }\r\n return \r\n })}\r\n \r\n {\r\n this._renderRowBottom(d, i)\r\n }\r\n \r\n )\r\n }\r\n \r\n
{item.title || item.Header}
\r\n {content}\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default Grid;\r\n","import React, { Fragment } from 'react';\r\nimport moment from 'moment';\r\nimport FetchApi from './tools/FetchAPI'\r\nimport './App.css';\r\nimport './WorkShop.css';\r\nimport StorageData from './tools/StorageData';\r\nimport Grid from './control/Grid'\r\n\r\nclass WorkShop extends React.Component {\r\n\r\n static defaultProps = {\r\n autoRefresh: true,\r\n }\r\n\r\n partGridCols = [\r\n { title: '条形码', name: 'sline_id', width: 100 },\r\n { title: \"工程图号\", name: \"EDraNo\", width: 120 },\r\n // { title: '产品', name: 'Gd_No', width: 100 },\r\n // { title: '零件编号', name: 'piece_no', width: 100 },\r\n { title: '名称规格', name: 'piece_name', width: 100 },\r\n { title: 'BOM类型', name: 'Style_Name', width: 100 },\r\n { title: '状态', name: 'state', width: 100 },\r\n ];\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n wsts: '',\r\n gallery: [{}, {}, {}, {}, {}, {}, {}, {}, {}, {}],\r\n galleryX: 0,\r\n gridData: [],\r\n gridCols: [\r\n { title: \"优先级\", name: \"line_no\", width: 50, render: item =>
{item.i + 1}
},\r\n { title: \"上工序\", name: \"Upstate\", render: item => { return
{item.datarow[\"wst_name_prev\"]}
}, width: 60 },\r\n { title: \"本工序\", name: \"state\", render: item => { return
{item.datarow[\"state\"] !== '1' ? (item.datarow[\"emp_nam\"] || ' ') : ' '}
}, width: 60 },\r\n { title: \"下工序\", name: \"wst_name_next\", width: 60 },\r\n { title: \"作业类型\", name: \"WorkIF_name\", width: 60 },\r\n { title: \"条形码\", name: \"line_id\", width: 70 },\r\n //{ title: \"货品编号\", name: \"mat_no\", width: 90 },\r\n { title: \"工程图号\", name: \"EDraNo\", width: 90 },\r\n { title: \"货品名称\", name: \"mat_name\", width: 80 },\r\n { title: \"数量\", name: \"s_quan\", render: item => { return (item.datarow[\"y_s_quan\"] || '0') + ' / ' + (item.datarow[\"ac_quan\"] || '0') }, width: 90 },\r\n { title: \"工时\", name: \"jhour\", render: item => { return item.datarow[\"jhour\"] + ' / ' + item.datarow[\"shour\"] }, width: 80 },\r\n { title: \"计划开工日\", name: \"jbeg_date\", width: 90, dataType: 'date' },\r\n { title: \"计划完工日\", name: \"jend_date\", width: 90, dataType: 'date' },\r\n { title: \"加工说明\", name: \"Crafts_Explain\", width: 150 }\r\n ],\r\n partGridShow: false,\r\n partGridData: [],\r\n selectedItem: null,\r\n gridScrollTimer: 0, // grid 向下滚动的计时器 \r\n McmStatusTimer: 0 // 机台/人员状态刷新计时器 \r\n };\r\n //this.reloadTimestamp = null; // 刷新页面时间戳(超过3小时刷新一次页面,防止崩溃)\r\n let i = 1;\r\n while (i <= 30) {\r\n this.partGridCols.push({\r\n title: '工序' + i,\r\n name: 'wst_name' + i,\r\n itemIndex: i,\r\n width: 100,\r\n render: item => {\r\n let color_set = item.datarow['color_set' + item.col.itemIndex];\r\n let ww_if = !!item.datarow['ww_if' + item.col.itemIndex];\r\n let qcun_if = !!item.datarow['qcun_if' + item.col.itemIndex];\r\n let qc_if = !!item.datarow['qc_if' + item.col.itemIndex];\r\n let zt_if = color_set != '0' && item.datarow['zt_if' + item.col.itemIndex];\r\n let yc_if = color_set != '0' && item.datarow['yc_if' + item.col.itemIndex];\r\n return (\r\n
\r\n
 
\r\n {ww_if &&
 
}\r\n {qcun_if &&
 
}\r\n {qc_if &&
 
}\r\n {zt_if &&
 
}\r\n
\r\n {item.v}\r\n
\r\n
\r\n );\r\n }\r\n });\r\n i++;\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n setTimeout(() => {\r\n this.windowResize();\r\n window.addEventListener('resize', this.windowResize);\r\n }, 0);\r\n }\r\n componentWillUnmount() {\r\n this.clearAllTimer();\r\n window.removeEventListener('resize', this.windowResize);\r\n }\r\n\r\n windowResize = () => {\r\n //document.querySelector('.grid').style.height = document.querySelector('.flex-row').offsetHeight + 'px';\r\n }\r\n clearAllTimer = () => {\r\n clearTimeout(this.state.gridScrollTimer);\r\n clearTimeout(this.state.McmStatusTimer);\r\n }\r\n\r\n beginRefresh = (wsts) => {\r\n this.clearAllTimer();\r\n\r\n wsts = wsts || StorageData.getObject(\"wsWsts\") || [];\r\n this.setState({\r\n wsts: wsts\r\n });\r\n\r\n let headerWst = wsts.map(x => x.name).join(',');\r\n if (headerWst.length > 25) {\r\n headerWst = headerWst.substring(0, 25) + '...';\r\n }\r\n this.props.updateHeader({\r\n workshopWsts: headerWst\r\n });\r\n\r\n if (!wsts || wsts.length < 1) {\r\n return;\r\n }\r\n\r\n let _this = this,\r\n param = {\r\n wstIds: wsts.map(x => x.id).join(',')\r\n };\r\n if (StorageData.getObject(\"wsMcms\")) {\r\n param.mcmIds = StorageData.getObject(\"wsMcms\").map(x => x.id).join(',')\r\n }\r\n if (StorageData.getObject(\"wsEmps\")) {\r\n param.empIds = StorageData.getObject(\"wsEmps\").map(x => x.id).join(',')\r\n }\r\n FetchApi.get('/API/FieldProcessing/GetMcmByWstId', param, (mcms => {\r\n if (!mcms || mcms.length < 8) {\r\n mcms = (mcms || []).concat([{}, {}, {}, {}, {}, {}, {}, {}]).slice(0, 8);\r\n }\r\n _this.setState({\r\n gallery: mcms\r\n });\r\n\r\n if (mcms.length > 0 && mcms[0].BillType !== undefined) {\r\n _this.galleryItemClick(mcms[0]);\r\n }\r\n\r\n (async function refreshMcmState() {\r\n\r\n var mcmIds = mcms.filter(x => x.BillType === '1').map(x => x.Mcm_ID).join(',');\r\n var empIds = mcms.filter(x => x.BillType === '2').map(x => x.Emp_ID).join(',');\r\n\r\n await FetchApi.get('/API/FieldProcessing/GetMcmState', { mcmIds, empIds }, (result => {\r\n var nwst = result ? (result.mcms || []).concat(result.emps || []) : [];\r\n if (nwst.length > 0) {\r\n _this.setState((state, props) => {\r\n state.gallery.forEach(x => {\r\n let newState = nwst.find(xx => xx.itemId === x.Mcm_ID || xx.itemId === x.Emp_ID)\r\n if (newState) {\r\n x.state = newState.state;\r\n x.stateCode = newState.stateCode;\r\n x.worker = newState.worker;\r\n }\r\n });\r\n return {\r\n gallery: state.gallery\r\n }\r\n });\r\n }\r\n }));\r\n\r\n _this.state.McmStatusTimer = setTimeout(() => {\r\n refreshMcmState();\r\n }, 60 * 1000);\r\n })();\r\n }));\r\n\r\n // 属性:加工状态取计划时间(现场加工电子看板)\r\n FetchApi.get('/API/Params/GetPropertieByCode', {\r\n funcid: '9117c6fd-bca6-4b01-ac05-df616bf51b96',\r\n attr_no: 'state_plan_if'\r\n }, val => {\r\n let dateColTitle = '排产';\r\n if (val == '1') {\r\n dateColTitle = '计划';\r\n }\r\n let cols = _this.state.gridCols;\r\n cols.find(o => o.name == 'jbeg_date').title = dateColTitle + '开工日';\r\n cols.find(o => o.name == 'jend_date').title = dateColTitle + '完工日';\r\n _this.setState({ gridCols: cols });\r\n });\r\n }\r\n\r\n scrollToLeft = () => {\r\n let itemWidth = document.querySelector('.item').offsetWidth + 6;\r\n this.setState((state, props) => ({\r\n galleryX: Math.min(0, state.galleryX + itemWidth)\r\n }));\r\n }\r\n scrollToRight = () => {\r\n let itemWidth = document.querySelector('.item').offsetWidth + 6;\r\n this.setState((state, props) => ({\r\n galleryX: state.galleryX - itemWidth\r\n }));\r\n }\r\n\r\n galleryItemClick = async (item) => {\r\n\r\n if (item.BillType === undefined) {\r\n item.BillType = 1;\r\n }\r\n\r\n clearTimeout(this.state.gridScrollTimer);\r\n await this.setState({\r\n selectedItem: item,\r\n gridData: []\r\n });\r\n\r\n // 保持完整可见 \r\n let galleryItem = document.querySelector('.item-container .item-selected');\r\n if (!galleryItem) {\r\n return;\r\n }\r\n if (galleryItem.offsetLeft < this.state.galleryX * -1) {\r\n this.setState((state, props) => ({\r\n galleryX: Math.min(0, -1 * (galleryItem.offsetLeft + 6 - galleryItem.offsetWidth / 2))\r\n }));\r\n }\r\n else {\r\n let galleryContainer = document.querySelector('.item-container');\r\n let itemOffsetX2 = galleryItem.offsetLeft + galleryItem.offsetWidth + 6\r\n if (galleryContainer.clientWidth + -1 * this.state.galleryX < itemOffsetX2) {\r\n this.setState((state, props) => ({\r\n galleryX: Math.min(0, -1 * (itemOffsetX2 - galleryContainer.clientWidth + galleryItem.offsetWidth / 2))\r\n }));\r\n }\r\n }\r\n\r\n if (!this.state.wsts || this.state.wsts.length < 1) {\r\n return;\r\n }\r\n\r\n let _this = this, isFetchOK = false;\r\n await FetchApi.get('/API/FieldProcessing/GetMcmCorresponData', {\r\n wstId: this.state.wsts.map(x => x.id).join(','),\r\n mcmId: item.BillType === '1' ? item.Mcm_ID : item.Emp_ID,\r\n nomcm: item.BillType === '1' ? '1' : '2'\r\n }, async (data) => {\r\n\r\n if (isFetchOK) {\r\n // 此请求的响应已过期,忽略之 \r\n return;\r\n }\r\n\r\n isFetchOK = true;\r\n clearTimeout(_this.state.gridScrollTimer);\r\n\r\n if (data && Array.isArray(data)) {\r\n await _this.setState({\r\n gridData: data\r\n });\r\n }\r\n\r\n // grid 向下滚动 \r\n let grid = document.querySelector('.grid .grid-body');\r\n (function gridScroll() {\r\n\r\n _this.state.gridScrollTimer = setTimeout(() => {\r\n if (_this.state.partGridShow || !_this.props.autoRefresh) {\r\n gridScroll();\r\n return;\r\n }\r\n if (grid.scrollHeight - grid.clientHeight - grid.scrollTop >= 1) {\r\n grid.scroll(0, grid.scrollTop + grid.clientHeight - 32);\r\n\r\n gridScroll();\r\n }\r\n else {\r\n // 进入下一个机台/人员\r\n let nextGalleryItem = _this.state.gallery[0];\r\n let currentItemIndex = _this.state.gallery.findIndex(x => x === item);\r\n if (currentItemIndex < _this.state.gallery.length - 1\r\n && _this.state.gallery[currentItemIndex + 1].BillType !== undefined) {\r\n nextGalleryItem = _this.state.gallery[currentItemIndex + 1];\r\n }\r\n _this.galleryItemClick(nextGalleryItem);\r\n }\r\n }, 20 * 1000);\r\n })();\r\n });\r\n\r\n // 增强定时器的可靠性:fetch.get的任何异常导致回调未执行时,此处强制重查\r\n _this.state.gridScrollTimer = setTimeout(() => {\r\n if (!isFetchOK) {\r\n console.warn('fetch.get的未及时响应(180s内),强制重查此机台数据')\r\n isFetchOK = true;\r\n _this.galleryItemClick(item);\r\n }\r\n }, 180 * 1000);\r\n }\r\n\r\n showPartData(rowdata) {\r\n if (!rowdata) {\r\n return;\r\n }\r\n\r\n let _this = this;\r\n\r\n if (!rowdata.EDraNo) {\r\n _this.setState({\r\n partGridShow: false,\r\n partGridData: [],\r\n });\r\n return;\r\n }\r\n\r\n _this.setState({\r\n partGridShow: true,\r\n });\r\n\r\n if (_this.currentEDraNo === rowdata.EDraNo) {\r\n return;\r\n }\r\n\r\n _this.setState({\r\n partGridData: [],\r\n });\r\n\r\n _this.currentEDraNo = rowdata.EDraNo;\r\n\r\n FetchApi.get('/API/FieldProcessing/GetPartDataByEDraNo', { EDraNo: rowdata.EDraNo }, result => {\r\n _this.setState({\r\n partGridData: result,\r\n });\r\n });\r\n }\r\n\r\n closePartGrid() {\r\n this.setState({ partGridShow: false });\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n {\r\n this.state.gallery.map((item, i) => {\r\n return
\r\n {item.BillType !== undefined ?\r\n (\r\n \r\n
\r\n {item.BillType === '1' ? item.mcm_no : item.emp_no}\r\n {item.BillType === '1' ? item.mcm_name : item.empName}\r\n
\r\n \"\"\r\n
\r\n {(item.state || '-') + (item.worker ? ('-' + item.worker) : '')}\r\n
\r\n
\r\n )\r\n :\r\n (\r\n \r\n
\r\n
\r\n
\r\n )\r\n }\r\n
\r\n })\r\n }\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default WorkShop;\r\n","import React from 'react';\r\nimport ReactPaginate from 'react-paginate';\r\nimport './Pagination.css'\r\n\r\nclass Pagination extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n loading: false,\r\n pageCount: props.pageCount || 1,\r\n forcePage: props.forcePage || 0,\r\n };\r\n\r\n this.timers = {\r\n autoNextTimer: 0,\r\n };\r\n }\r\n\r\n static defaultProps = {\r\n data: null,\r\n pageSize: 15,\r\n containerClassName: 'pagination',\r\n previousLabel: '上一页',\r\n nextLabel: '下一页',\r\n // 自定义\r\n autoPager: 0,\r\n autoPagerRunning: true,\r\n }\r\n\r\n goPage = (pageIndex = 0) => {\r\n this.setState({\r\n forcePage: pageIndex,\r\n }, () => {\r\n this.onPageChange({ selected: pageIndex });\r\n });\r\n }\r\n\r\n goNextPage = () => {\r\n var _next = this.state.forcePage + 1;\r\n var _pageCount = this.props.data ? this.state.pageCount : this.props.pageCount;\r\n if (_next >= _pageCount) {\r\n _next = 0;\r\n }\r\n this.goPage(_next);\r\n }\r\n\r\n onPageChange = async (o) => {\r\n if (this.state.loading) {\r\n return;\r\n }\r\n this.setState({\r\n loading: true,\r\n });\r\n if (this.props.data) {\r\n await this.setState({\r\n pageCount: Math.ceil(this.props.data.length / this.props.pageSize) || 1,\r\n //forcePage: o.selected,\r\n });\r\n var _start = this.props.pageSize * o.selected;\r\n o.selectedData = this.props.data.slice(_start, _start + this.props.pageSize);\r\n }\r\n if (this.props.onPageChanged) {\r\n await this.props.onPageChanged(o);\r\n }\r\n this.setState({\r\n loading: false,\r\n });\r\n if (this.props.autoPager) {\r\n let autoPagerFun;\r\n (autoPagerFun = () => {\r\n this.clearAllTimer();\r\n this.timers.autoNextTimer = setTimeout(() => {\r\n if (this.props.autoPagerRunning) {\r\n this.goNextPage();\r\n }\r\n else {\r\n autoPagerFun();\r\n }\r\n }, this.props.autoPager);\r\n })();\r\n }\r\n }\r\n\r\n clearAllTimer() {\r\n if (this.timers.autoNextTimer) {\r\n clearTimeout(this.timers.autoNextTimer);\r\n }\r\n }\r\n\r\n dispose() {\r\n this.clearAllTimer();\r\n }\r\n\r\n render() {\r\n let p = {\r\n ...this.props,\r\n pageCount: this.props.data ? this.state.pageCount : this.props.pageCount,\r\n forcePage: this.props.data ? this.state.forcePage : this.props.forcePage,\r\n onPageChange: this.onPageChange.bind(this),\r\n };\r\n\r\n return
\r\n
 
\r\n \r\n
\r\n }\r\n}\r\n\r\nexport default Pagination;","import React, { Fragment } from 'react';\r\nimport moment from 'moment';\r\nimport FetchApi from './tools/FetchAPI';\r\nimport * as echarts from 'echarts';\r\nimport StorageData from './tools/StorageData';\r\nimport Grid from './control/Grid';\r\nimport Pagination from './control/Pagination';\r\nimport './App.css';\r\nimport './EmpPerformance.css';\r\n\r\nclass EmpPerformance extends React.Component {\r\n static defaultProps = {\r\n autoRefresh: true,\r\n }\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n wsts: [],\r\n managers: [],\r\n weekData: [{}, {}, {}, {}, {}],\r\n monthData: [{}, {}, {}, {}, {}],\r\n monthAvg: null,\r\n currentManager: {\r\n ID: '',\r\n Code: '',\r\n Name: '',\r\n NickName: '',\r\n },\r\n selectedItem: null,\r\n galleryX: 0,\r\n gridCols: [\r\n { title: '货品编号', name: 'GdCode', width: 100, render: item => item.i == 0 ? Σ : item.datarow.GdCode },\r\n { title: '货品名称', name: 'GdName', width: 140, render: item => item.i == 0 ? '' : item.datarow.GdName + ' ' + (item.datarow.GStand || '') },\r\n { title: '工时', name: 'work_hour', width: 70, render: item =>
{item.datarow.work_hour}
},\r\n { title: '合格量', name: 'p_hg_quan', width: 70, render: item =>
0 ? \"state-p_hg_quan\" : \"\")} > {item.datarow.p_hg_quan}
},\r\n { title: '不合格量', name: 'p_bhg_quan', width: 70, render: item =>
0 ? \"state-p_bhg_quan\" : \"\")} > {item.datarow.p_bhg_quan}
},\r\n { title: '良品率', name: 'ok_rate', width: 70 },\r\n { title: '合格工时', name: 'qual_hour', width: 70 },\r\n { title: '报废工时', name: 'scrap_hour', width: 70 },\r\n { title: '员工绩效', name: 'emp_per', width: 70, render: item =>
{item.datarow.emp_per}
}\r\n ],\r\n gridData: [],\r\n // 月排行分页\r\n monthPageSize: 10,\r\n monthPageCount: 1,\r\n monthPageIndex: 0,\r\n };\r\n this.timers = {\r\n dayTimer: 0,\r\n managerTimer: 0,\r\n seekScrollTimer: 0,\r\n gridScrollTimer: 0,\r\n monthPagerTimer: 0,\r\n };\r\n this.allBlocks = [];\r\n }\r\n\r\n componentDidMount() {\r\n\r\n const calcFontSize = (res) => {\r\n let clientWidth = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;\r\n if (!clientWidth)\r\n return 16;\r\n let fontSize = 100 * (clientWidth / 1440);\r\n //console.log(res * fontSize);\r\n let result = res * fontSize;\r\n\r\n return Number(window.getComputedStyle(document.querySelector('.grid-head tr th')).fontSize.replace('px', '')) || result;\r\n }\r\n\r\n let chartCommonOption = {\r\n\r\n }\r\n\r\n this.allBlocks = [\r\n {\r\n title: '月数据',\r\n initChart: () => {\r\n let chart = echarts.init(document.getElementById('block1-chart'));\r\n\r\n chart.setOption(Object.assign({}, chartCommonOption, {\r\n textStyle: {\r\n fontSize: calcFontSize(0.14)\r\n },\r\n tooltip: {\r\n trigger: 'axis',\r\n axisPointer: {\r\n type: 'shadow'\r\n }\r\n },\r\n grid: {\r\n top: '3%',\r\n bottom: '10%',\r\n right: '10%',\r\n left: '20%'\r\n },\r\n xAxis: {\r\n type: 'value',\r\n axisLabel: {\r\n fontSize: calcFontSize(0.14),\r\n color: '#fff'\r\n },\r\n axisLine: {\r\n lineStyle: {\r\n color: '#424765',\r\n }\r\n },\r\n splitLine: {\r\n lineStyle: {\r\n color: '#424765'\r\n }\r\n }\r\n },\r\n yAxis: {\r\n type: 'category',\r\n axisTick: {\r\n show: false\r\n },\r\n axisLabel: {\r\n fontSize: calcFontSize(0.14),\r\n color: '#fff',\r\n align: 'left',\r\n margin: calcFontSize(0.14) * 5\r\n },\r\n axisLine: {\r\n lineStyle: {\r\n color: '#424765',\r\n }\r\n },\r\n //data: ['1.张三', '2.酏四', '3.王麻四', '4.张晓丽']\r\n },\r\n series: [\r\n {\r\n name: '绩效',\r\n type: 'bar',\r\n label: {\r\n show: true,\r\n color: '#fff',\r\n position: 'right',\r\n },\r\n //barWidth: 40,\r\n barMaxWidth: 20,\r\n barMinHeight: 2,\r\n itemStyle: {\r\n color: function (param) {\r\n return ['rgb(116, 142, 222)', 'rgb(169, 223, 150)', 'rgb(246, 220, 125)'].reverse()[param.dataIndex % 3];\r\n },\r\n height: 10\r\n },\r\n emphasis: {\r\n focus: 'series'\r\n },\r\n data: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]\r\n }\r\n ]\r\n }));\r\n return [chart];\r\n }\r\n },\r\n {\r\n title: '周数据',\r\n initChart: () => {\r\n let chart = echarts.init(document.getElementById('block2-chart'));\r\n\r\n chart.setOption(Object.assign({}, chartCommonOption, {\r\n textStyle: {\r\n fontSize: calcFontSize(0.14)\r\n },\r\n tooltip: {\r\n trigger: 'axis'\r\n },\r\n color: 'rgb(100, 255, 175)',\r\n grid: {\r\n top: '19%',\r\n bottom: '14%',\r\n right: '6%',\r\n left: '6%'\r\n },\r\n xAxis: {\r\n type: 'category',\r\n boundaryGap: false,\r\n data: ['周一', '周二', '周三', '周四', '周五', '周六', '周日'],\r\n axisLabel: {\r\n fontSize: calcFontSize(0.14),\r\n color: '#fff',\r\n },\r\n axisLine: {\r\n lineStyle: {\r\n color: '#424765',\r\n }\r\n },\r\n axisTick: {\r\n // show: false\r\n },\r\n axisPointer: {\r\n lineStyle: {\r\n type: 'dashed'\r\n }\r\n }\r\n },\r\n yAxis: {\r\n type: 'value',\r\n axisLine: {\r\n show: false,\r\n },\r\n axisLabel: {\r\n formatter: '{value}',\r\n margin: calcFontSize(0.14),\r\n fontSize: calcFontSize(0.14),\r\n color: '#fff',\r\n },\r\n axisTick: {\r\n show: false\r\n },\r\n splitLine: {\r\n lineStyle: {\r\n color: '#424765'\r\n }\r\n },\r\n },\r\n series: [\r\n {\r\n name: '绩效',\r\n type: 'line',\r\n symbol: 'circle',\r\n symbolSize: 8,\r\n //data: [100, 100, 100, 100, 100, 100, 100],\r\n markPoint: {\r\n label: {\r\n color: '#000',\r\n fontSize: calcFontSize(0.14)\r\n },\r\n data: [\r\n { type: 'max', name: '最大值' },\r\n { type: 'min', name: '最小值' }\r\n ]\r\n },\r\n markLine: {\r\n label: {\r\n color: '#fff',\r\n fontSize: calcFontSize(0.14)\r\n },\r\n data: [\r\n //{ type: 'max', name: '最大值' },\r\n { type: 'average', name: '平均值' }\r\n ]\r\n }\r\n }\r\n ]\r\n }));\r\n return [chart];\r\n }\r\n }\r\n ];\r\n\r\n setTimeout(() => { // 这里使用延迟是为了确保echart绘图时能100% \r\n\r\n this.allBlocks.forEach(block => {\r\n if (block.initChart) {\r\n block.charts = block.initChart();\r\n }\r\n });\r\n\r\n window.addEventListener('resize', this.windowResize);\r\n }, 0);\r\n }\r\n\r\n componentWillUnmount() {\r\n this.clearAllTimer();\r\n window.removeEventListener('resize', this.windowResize);\r\n }\r\n\r\n clearAllTimer = () => {\r\n if (this.timers.dayTimer) {\r\n clearTimeout(this.timers.dayTimer);\r\n }\r\n if (this.timers.managerTimer) {\r\n clearInterval(this.timers.managerTimer);\r\n }\r\n if (this.timers.gridScrollTimer) {\r\n clearInterval(this.timers.gridScrollTimer);\r\n }\r\n if (this.timers.monthPagerTimer) {\r\n clearTimeout(this.timers.monthPagerTimer);\r\n }\r\n }\r\n\r\n beginRefresh = (wsts) => {\r\n this.clearAllTimer();\r\n\r\n wsts = wsts || StorageData.getObject(\"wsts\") || [];\r\n this.setState({\r\n wsts: wsts\r\n });\r\n\r\n let headerWst = wsts.map(x => x.name).join(',');\r\n if (headerWst.length > 25) {\r\n headerWst = headerWst.substring(0, 25) + '...';\r\n }\r\n this.props.updateHeader({\r\n workshopWsts: headerWst\r\n });\r\n\r\n if (!wsts) {\r\n wsts = [];\r\n }\r\n\r\n let _this = this;\r\n\r\n // 零点刷新\r\n var dayTimerTimeout = moment().add(1, 'd').hour(0).minute(0).second(0).millisecond(0).diff(moment());\r\n this.timers.dayTimer = setTimeout(() => {\r\n console.log(`零点刷新:${moment()._d}`);\r\n _this.beginRefresh();\r\n }, dayTimerTimeout);\r\n\r\n // 查询数据\r\n let param = {\r\n wstIds: wsts.map(x => x.id).join(',')\r\n };\r\n if (StorageData.getObject(\"emps\")) {\r\n param.empIds = StorageData.getObject(\"emps\").map(x => x.id).join(',')\r\n }\r\n FetchApi.get('/API/EmpPerformance/Get', param, (result => {\r\n if (!result) {\r\n return;\r\n }\r\n\r\n // 负责人\r\n if (result.managers) {\r\n if (result.managers.length) {\r\n _this.setState({\r\n managers: result.managers,\r\n currentManager: result.managers[0]\r\n }, () => {\r\n // 大于一个时定时切换\r\n if (result.managers.length > 1) {\r\n _this.timers.managerTimer = setInterval(() => {\r\n if (!this.props.autoRefresh) {\r\n return;\r\n }\r\n let currentIndex = 0;\r\n if (_this.state.currentManager) {\r\n currentIndex = _this.state.managers.indexOf(_this.state.currentManager) + 1;\r\n if (currentIndex >= _this.state.managers.length) {\r\n currentIndex = 0;\r\n }\r\n }\r\n _this.setState({\r\n currentManager: _this.state.managers[currentIndex]\r\n });\r\n }, 20 * 1000);\r\n }\r\n });\r\n }\r\n else {\r\n _this.setState({\r\n managers: [],\r\n currentManager: {\r\n ID: '',\r\n Code: '',\r\n Name: '',\r\n NickName: '',\r\n }\r\n });\r\n }\r\n }\r\n\r\n // 月星\r\n if (result.monthData) {\r\n _this.setState({\r\n monthData: result.monthData,\r\n monthPageCount: Math.ceil(result.monthData.length / _this.state.monthPageSize),\r\n }, () => {\r\n _this.loadMonthPageData(0);\r\n });\r\n }\r\n\r\n // 周星\r\n if (result.weekData && result.weekData.length) {\r\n _this.setState({\r\n weekData: result.weekData\r\n }, () => {\r\n _this.galleryItemClick(result.weekData[0]);\r\n });\r\n }\r\n else {\r\n _this.setState({\r\n weekData: [{}, {}, {}, {}, {}]\r\n });\r\n }\r\n\r\n // 平均绩效\r\n _this.setState({ monthAvg: result.monthAvg });\r\n }));\r\n }\r\n\r\n galleryItemClick = async (item) => {\r\n\r\n let _this = this;\r\n if (_this.state.selectedItem == item) {\r\n return;\r\n }\r\n\r\n await _this.setState({\r\n selectedItem: item\r\n });\r\n if (_this.timers.gridScrollTimer) {\r\n clearInterval(_this.timers.gridScrollTimer);\r\n }\r\n\r\n // Grid读取数据\r\n FetchApi.get('/API/EmpPerformance/GetDayDataByEmp',\r\n {\r\n wstIds: _this.state.wsts.map(x => x.id).join(','),\r\n empId: item.ID\r\n },\r\n result => {\r\n let grid = document.querySelector('.grid .grid-body');\r\n if (!grid) {\r\n return;\r\n }\r\n grid.scroll(0, 0);\r\n if (result) {\r\n _this.setState({ gridData: result });\r\n }\r\n // Grid自动滚动\r\n if (_this.timers.gridScrollTimer) {\r\n clearInterval(_this.timers.gridScrollTimer);\r\n }\r\n _this.timers.gridScrollTimer = setInterval(() => {\r\n if (!_this.props.autoRefresh) {\r\n return;\r\n }\r\n if (grid.scrollHeight - grid.clientHeight - grid.scrollTop >= 1) {\r\n grid.scroll(0, grid.scrollTop + grid.clientHeight - 32);\r\n }\r\n else {\r\n let i = 0;\r\n if (_this.state.selectedItem) {\r\n i = _this.state.weekData.indexOf(_this.state.selectedItem) + 1;\r\n if (i >= _this.state.weekData.length) {\r\n i = 0;\r\n }\r\n }\r\n _this.galleryItemClick(_this.state.weekData[i]);\r\n }\r\n }, 20 * 1000);\r\n });\r\n\r\n // 保持完整可见\r\n let galleryItem = document.querySelector('.item-container .item-selected');\r\n if (!galleryItem) {\r\n return;\r\n }\r\n if (galleryItem.offsetLeft < this.state.galleryX * -1) {\r\n this.setState((state, props) => ({\r\n galleryX: Math.min(0, -1 * (galleryItem.offsetLeft + 6 - galleryItem.offsetWidth / 2))\r\n }));\r\n }\r\n else {\r\n let galleryContainer = document.querySelector('.item-container');\r\n let itemOffsetX2 = galleryItem.offsetLeft + galleryItem.offsetWidth + 6;\r\n if (galleryContainer.clientWidth + -1 * this.state.galleryX < itemOffsetX2) {\r\n this.setState((state, props) => ({\r\n galleryX: Math.min(0, -1 * (itemOffsetX2 - galleryContainer.clientWidth + galleryItem.offsetWidth / 2))\r\n }));\r\n }\r\n }\r\n\r\n // 周图\r\n let chartWeek = _this.allBlocks[1].charts[0];\r\n let seriesWeek = chartWeek.getOption().series;\r\n seriesWeek[0].data = item.detailData;\r\n chartWeek.setOption({\r\n series: seriesWeek\r\n });\r\n }\r\n\r\n scrollToLeft = () => {\r\n let itemWidth = document.querySelector('.item').offsetWidth + 6;\r\n this.setState((state, props) => ({\r\n galleryX: Math.min(0, state.galleryX + itemWidth)\r\n }));\r\n }\r\n\r\n scrollToRight = () => {\r\n let itemWidth = document.querySelector('.item').offsetWidth + 6;\r\n this.setState((state, props) => ({\r\n galleryX: state.galleryX - itemWidth\r\n }));\r\n }\r\n\r\n windowResize = () => {\r\n this.allBlocks.forEach(block => {\r\n if (block.charts && block.charts.length > 0) {\r\n block.charts.forEach(chart => {\r\n chart.resize();\r\n })\r\n }\r\n });\r\n }\r\n\r\n loadMonthPageData = async (pageIndex) => {\r\n let _this = this;\r\n\r\n let pageSize = _this.state.monthPageSize;\r\n let pageCount = Math.ceil(_this.state.monthData.length / pageSize);\r\n if (pageIndex >= pageCount) {\r\n pageIndex = 0;\r\n }\r\n\r\n let chart = _this.allBlocks[0].charts[0];\r\n let series = chart.getOption().series;\r\n let yAxis = chart.getOption().yAxis;\r\n\r\n // 数据处理\r\n let xData = _this.state.monthData.map(o => o.emp_per);\r\n let yData = _this.state.monthData.map(o => o.ord + '.' + o.Name);\r\n\r\n series[0].data = xData.slice(pageIndex * pageSize, (pageIndex + 1) * pageSize).reverse();\r\n yAxis[0].data = yData.slice(pageIndex * pageSize, (pageIndex + 1) * pageSize).reverse();\r\n chart.setOption({\r\n series: series,\r\n yAxis: yAxis\r\n });\r\n\r\n _this.setState({\r\n monthPageIndex: pageIndex,\r\n monthPageCount: pageCount\r\n }, () => {\r\n // 大于一页时,自动跳转分页\r\n if (_this.state.monthPageCount > 1) {\r\n if (_this.timers.monthPagerTimer) {\r\n clearTimeout(this.timers.monthPagerTimer);\r\n }\r\n _this.timers.monthPagerTimer = setTimeout(() => {\r\n if (!_this.props.autoRefresh) {\r\n _this.loadMonthPageData(_this.state.monthPageIndex);\r\n return;\r\n }\r\n _this.loadMonthPageData(_this.state.monthPageIndex + 1);\r\n }, 20 * 1000);\r\n }\r\n });\r\n }\r\n\r\n onMonthPageChange = (o) => {\r\n this.loadMonthPageData(o.selected);\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n \"\"\r\n
{\r\n this.state.currentManager.Name + ' ' + (this.state.currentManager.NickName || '')\r\n }{\r\n this.state.monthAvg\r\n }
\r\n
\r\n
\r\n
\r\n
\r\n

每周之星

\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n {\r\n this.state.weekData.map((item, i) => {\r\n return
\r\n \r\n {/*
{item.Code || ''}
*/}\r\n \"\"\r\n
{\r\n item.Code ? '第' + item.ord + '名 ' + item.emp_per + ' ' + item.Name : ''\r\n }
\r\n
\r\n
\r\n })\r\n }\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {/*
asdfasdf
*/}\r\n \">\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default EmpPerformance;","import React, { useState, useEffect } from 'react';\r\nimport Carousel, { Modal, ModalGateway } from 'react-images';\r\n\r\nconst Lightbox = (props) => {\r\n const { images = [], open, onClose } = props;\r\n const [modalIsOpen, setModalIsOpen] = useState(open)\r\n useEffect(() => {\r\n setModalIsOpen(open)\r\n }, [images, open])\r\n\r\n const toggleModal = () => {\r\n setModalIsOpen(!modalIsOpen)\r\n if (typeof onClose === 'function') {\r\n onClose()\r\n }\r\n\r\n }\r\n const styleInit = {\r\n header: (base, state) => ({ //头部样式\r\n position: 'absolute',\r\n top: 90,\r\n right: 90,\r\n zIndex: 9999,\r\n }),\r\n view: (base, state) => ({\r\n textAlign: 'center',\r\n height: state.isFullscreen?'100%':600 //当点击全屏的时候图片样式\r\n })\r\n }\r\n return (\r\n \r\n {modalIsOpen ? (\r\n \r\n \r\n \r\n ) : null}\r\n \r\n );\r\n\r\n}\r\n\r\n\r\nexport default Lightbox;","import React, { Fragment } from 'react';\r\nimport moment from 'moment';\r\nimport FetchApi from './tools/FetchAPI';\r\nimport StorageData from './tools/StorageData';\r\nimport Grid from './control/Grid';\r\nimport Lightbox from './control/Lightbox';\r\nimport Pagination from './control/Pagination'\r\nimport './App.css';\r\nimport './SdsProgress.css';\r\n\r\nclass SdsProgress extends React.Component {\r\n static defaultProps = {\r\n autoRefresh: true,\r\n }\r\n\r\n gridCols = [\r\n { title: '货品编号', name: 'Gd_No', width: 120 },\r\n {\r\n title: '名称规格', name: 'Gd_Name', width: 120,\r\n render: item => \r\n {item.v}
{item.datarow.GStand || ''}\r\n
\r\n },\r\n {\r\n title: '图片', name: 'SFName', width: 60,\r\n render: item => {\r\n this.setState({\r\n images: [{ source: FetchApi.host + \"/UpLoad/FileManage.ashx?t=v&from=img¬shownull=1&RelaFd=image,goodsImg&RelaID=\" + item.datarow.Classb_ID + \",\" + item.datarow.Gd_ID }],\r\n imageIsOpen: true\r\n });\r\n }} />\r\n },\r\n { title: '销售单号', name: 'So_No', width: 100 },\r\n { title: '排程单号', name: 'sp_no', width: 100 },\r\n // { title: '销售日期', name: 'so_date', width: 80, render: item => item.v && moment(item.v).format('YYYY-MM-DD') },\r\n // { title: '排程日期', name: 'op_date', width: 80, render: item => item.v && moment(item.v).format('YYYY-MM-DD') },\r\n { title: '预定交期', name: 'r_date', width: 110, render: item => item.v && moment(item.v).format('YYYY-MM-DD HH:mm:ss') },\r\n { title: '项目担当', name: 'pr_user_name', width: 80 },\r\n // { title: '设计担当', name: 'sr_user_name', width: 80 },\r\n { title: '钳工担当', name: 'qr_user_name', width: 80 },\r\n { title: '完成比', name: 'over_rate', width: 60, render: item => item.v || '' },\r\n { title: '排程备注', name: 'spa_note', width: 150, render: item =>
{item.v || ''}
},\r\n ];\r\n\r\n gridPagerData = {\r\n index: 1,\r\n total: 0\r\n };\r\n\r\n partGridCols = [\r\n { title: '条形码', name: 'sline_id', width: 100 },\r\n { title: '产品', name: 'Gd_No', width: 100 },\r\n { title: '零件编号', name: 'piece_no', width: 100 },\r\n { title: '名称规格', name: 'piece_name', width: 100 },\r\n { title: 'BOM类型', name: 'Style_Name', width: 100 },\r\n { title: '状态', name: 'state', width: 100 },\r\n ];\r\n\r\n currentSpbId = '';\r\n\r\n gridScrollCurrentTrIndex = 0;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n gridCols: this.gridCols,\r\n gridData: [],\r\n partGridShow: false,\r\n partGridData: [],\r\n images: [],\r\n imageIsOpen: false,\r\n pageSize: 30 * 3,\r\n pageCount: 1,\r\n pageIndex: 0,\r\n };\r\n let i = 1;\r\n while (i <= 30) {\r\n this.partGridCols.push({\r\n title: '工序' + i,\r\n name: 'wst_name' + i,\r\n itemIndex: i,\r\n width: 100,\r\n render: item => {\r\n let color_set = item.datarow['color_set' + item.col.itemIndex];\r\n let ww_if = !!item.datarow['ww_if' + item.col.itemIndex];\r\n let qcun_if = !!item.datarow['qcun_if' + item.col.itemIndex];\r\n let qc_if = !!item.datarow['qc_if' + item.col.itemIndex];\r\n let zt_if = color_set != '0' && item.datarow['zt_if' + item.col.itemIndex];\r\n let yc_if = color_set != '0' && item.datarow['yc_if' + item.col.itemIndex];\r\n return (\r\n
\r\n
 
\r\n {ww_if &&
 
}\r\n {qcun_if &&
 
}\r\n {qc_if &&
 
}\r\n {zt_if &&
 
}\r\n
\r\n {item.v}\r\n
\r\n
\r\n );\r\n }\r\n });\r\n i++;\r\n }\r\n this.timers = {\r\n workEfficiencyTimer: 0,\r\n gridRefreshTimer: 0,\r\n gridScrollTimer: 0,\r\n };\r\n }\r\n\r\n componentDidMount() { }\r\n\r\n componentWillUnmount() {\r\n this.clearAllTimer();\r\n }\r\n\r\n clearAllTimer() {\r\n if (this.timers.workEfficiencyTimer) {\r\n clearTimeout(this.timers.workEfficiencyTimer);\r\n }\r\n this.clearGridTimer();\r\n }\r\n\r\n clearGridTimer() {\r\n if (this.timers.gridRefreshTimer) {\r\n clearTimeout(this.timers.gridRefreshTimer);\r\n }\r\n this.gridScrollCurrentTrIndex = 0;\r\n if (this.timers.gridScrollTimer) {\r\n clearInterval(this.timers.gridScrollTimer);\r\n }\r\n }\r\n\r\n beginRefresh(setting) {\r\n // 执行率(屏蔽原因:禅道bug 2100)\r\n //this.loadWorkEfficiency();\r\n // 主体数据\r\n this.loadGridData(true);\r\n }\r\n\r\n loadWorkEfficiency() {\r\n let _this = this;\r\n\r\n if (this.timers.workEfficiencyTimer) {\r\n clearTimeout(this.timers.workEfficiencyTimer);\r\n }\r\n\r\n FetchApi.get(\"/API/BoardData/GetProjectDelay\", null, (result) => {\r\n this.timers.workEfficiencyTimer = setTimeout(() => {\r\n _this.loadWorkEfficiency();\r\n }, 17 * 60 * 1000);\r\n\r\n if (result && result.delays) {\r\n if (!this.props.updateHeader) {\r\n _this.clearAllTimer();\r\n return;\r\n }\r\n this.props.updateHeader({\r\n workEfficiency: ((100 - result.deRate).toFixed(2) || '') + '%'\r\n });\r\n }\r\n });\r\n }\r\n\r\n loadGridData(initIf) {\r\n let _this = this;\r\n\r\n _this.clearGridTimer();\r\n\r\n if (!initIf && !_this.props.autoRefresh) {\r\n _this.timers.gridRefreshTimer = setTimeout(() => {\r\n _this.loadGridData();\r\n }, 20 * 60 * 1000);\r\n return;\r\n }\r\n\r\n let cates = StorageData.getObject(\"cates\") || [];\r\n let gdnos = StorageData.getObject(\"gdnos\") || [];\r\n let prusers = StorageData.getObject(\"prusers\") || [];\r\n let qrusers = StorageData.getObject(\"qrusers\") || [];\r\n let itemLevel = StorageData.getObject(\"itemLevel\") || 0;\r\n let days = StorageData.getObject(\"days\") || 30;\r\n FetchApi.get('/API/SdsProgress/Get',\r\n {\r\n doSearchIf: true,\r\n soaCateIds: cates.map(x => \"'\" + x.id + \"'\").join(','),\r\n gdIds: gdnos.map(x => \"'\" + x.id + \"'\").join(','),\r\n prUserIds: prusers.map(x => \"'\" + x.id + \"'\").join(','),\r\n qrUserIds: qrusers.map(x => \"'\" + x.id + \"'\").join(','),\r\n itemLevel: itemLevel,\r\n days: days\r\n },\r\n result => {\r\n // 定时刷新\r\n _this.timers.gridRefreshTimer = setTimeout(() => {\r\n _this.loadGridData();\r\n }, 20 * 60 * 1000);\r\n\r\n // 加载页\r\n _this.loadGirdPagData(result);\r\n });\r\n }\r\n\r\n async loadGirdPagData(data, pageIndex) {\r\n let _this = this;\r\n\r\n this.gridScrollCurrentTrIndex = 0;\r\n if (_this.timers.gridScrollTimer) {\r\n clearInterval(_this.timers.gridScrollTimer);\r\n }\r\n\r\n if (data) {\r\n _this.setState({\r\n pageIndex: 0,\r\n pageCount: Math.ceil(data.dataCount / _this.state.pageSize),\r\n });\r\n _this.setGridData(data);\r\n\r\n // 顶部共计\r\n _this.props.updateHeader({\r\n dataCount: data.dataCount / 3\r\n });\r\n }\r\n else {\r\n if (_this.state.pageCount > 1) {\r\n if (pageIndex == null) {\r\n pageIndex = _this.state.pageIndex + 1;\r\n if (pageIndex >= _this.state.pageCount) {\r\n pageIndex = 0;\r\n }\r\n }\r\n _this.setState({\r\n pageIndex: pageIndex\r\n });\r\n await FetchApi.get('/API/SdsProgress/Get', {\r\n currentPage: pageIndex + 1,\r\n pageSize: _this.state.pageSize,\r\n }, result => {\r\n _this.setGridData(result);\r\n });\r\n }\r\n else {\r\n _this.setGridData();\r\n }\r\n }\r\n }\r\n\r\n setGridData(result) {\r\n let _this = this;\r\n let grid = document.querySelector('.grid .grid-body');\r\n if (!grid) {\r\n _this.clearGridTimer();\r\n return;\r\n }\r\n grid.scroll(0, 0);\r\n\r\n // 滚动、分页\r\n if (_this.timers.gridScrollTimer) {\r\n clearInterval(_this.timers.gridScrollTimer);\r\n }\r\n _this.timers.gridScrollTimer = setInterval(() => {\r\n if (!grid) {\r\n _this.clearGridTimer();\r\n return;\r\n }\r\n // 暂停滚动\r\n if (_this.state.partGridShow || !_this.props.autoRefresh) {\r\n return;\r\n }\r\n let allTr = grid.querySelectorAll('tr');\r\n if (_this.gridScrollCurrentTrIndex < allTr.length\r\n && grid.scrollHeight - grid.clientHeight - grid.scrollTop >= 1) {\r\n _this.gridScrollCurrentTrIndex += 4;\r\n grid.scroll(0, allTr[_this.gridScrollCurrentTrIndex].offsetTop);\r\n }\r\n else {\r\n _this.loadGirdPagData();\r\n }\r\n }, 10 * 1000);\r\n\r\n if (!result) {\r\n return;\r\n }\r\n\r\n // 数据折行处理\r\n let newData = [];\r\n result.data.forEach((x, i) => {\r\n if (x.line == 0) {\r\n let progress = [], j = 1;\r\n while (j <= 10000) {\r\n if (!x['item_id' + j]) {\r\n break;\r\n }\r\n progress.push({\r\n spb_id: x['BID' + j],\r\n spb_line_no: x['spb_line_no' + j],\r\n title: x['spb_line_no' + j] + '.' + x['item_id' + j],\r\n plan: result.data[i + 1]['item_id' + j],\r\n fact: result.data[i + 2]['item_id' + j],\r\n state: x['col' + j],\r\n abnor_if: x['abnor_if'],\r\n emp: x['emp' + j],\r\n note: x['note' + j]\r\n });\r\n j++;\r\n }\r\n x.item_progress = progress;\r\n newData.push(x);\r\n }\r\n });\r\n\r\n _this.setState({\r\n gridData: newData,\r\n });\r\n }\r\n\r\n async onPageChange(o) {\r\n this.setState({ partGridData: [] });\r\n await this.loadGirdPagData(null, o.selected || 0);\r\n }\r\n\r\n renderGridRowBottom(rowdata, i) {\r\n return rowdata.item_progress.map((x, j) => {\r\n let state;\r\n switch (x.state) {\r\n case 'HUI':\r\n state = '0';\r\n break;\r\n case 'ZI':\r\n state = '1';\r\n break;\r\n case 'LAN':\r\n state = '2';\r\n break;\r\n case 'MOLV':\r\n state = '3';\r\n break;\r\n case 'LV':\r\n state = '4';\r\n break;\r\n case 'HONG':\r\n if (rowdata.line == '2')\r\n state = '003';\r\n else\r\n state = '5';\r\n break;\r\n case 'HUANG':\r\n state = '6';\r\n break;\r\n case 'ZIHong':\r\n state = '7';\r\n break;\r\n case 'QIANHUI':\r\n state = '8';\r\n break;\r\n default:\r\n state = ''\r\n }\r\n let plan = x.plan || '';\r\n plan = plan && plan.split(' ')[0];\r\n let fact = x.fact || '';\r\n fact = fact && fact.split(' ')[0];\r\n let title = '';\r\n if (x.emp) {\r\n title += \" 负责人:\" + x.emp;\r\n }\r\n if (x.note) {\r\n title += \" 备注:\" + x.note;\r\n }\r\n let abnor_if = x.abnor_if == '1';\r\n return (\r\n
\r\n
 
\r\n {abnor_if &&
 
}\r\n
\r\n
{x.title}
\r\n
{plan}
\r\n
{fact}
\r\n
\r\n
\r\n );\r\n });\r\n }\r\n\r\n showPartData(spb_id) {\r\n if (!spb_id) {\r\n return;\r\n }\r\n\r\n let _this = this;\r\n\r\n _this.setState({\r\n partGridShow: true,\r\n });\r\n\r\n if (_this.currentSpbId === spb_id) {\r\n return;\r\n }\r\n\r\n _this.currentSpbId = spb_id;\r\n\r\n FetchApi.get('/API/SdsProgress/GetPartData', { spbId: this.currentSpbId }, result => {\r\n _this.setState({\r\n partGridData: result,\r\n });\r\n });\r\n }\r\n\r\n closePartGrid() {\r\n this.setState({ partGridShow: false });\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default SdsProgress;","import React, { Fragment } from 'react';\r\nimport moment from 'moment';\r\nimport StorageData from './tools/StorageData';\r\nimport FetchApi from './tools/FetchAPI';\r\nimport * as echarts from 'echarts';\r\nimport Grid from './control/Grid';\r\nimport Lightbox from './control/Lightbox';\r\nimport './QcAbnormal.css';\r\n\r\nclass QcAbnormal extends React.Component {\r\n\r\n static defaultProps = {\r\n autoRefresh: true,\r\n }\r\n\r\n gridCols = [\r\n { name: 'UserName', title: '报告人', width: 60 },\r\n { name: 'bill_no', title: '报告单号', width: 70 },\r\n { name: 'bill_typeName', title: '报告单别', width: 60 },\r\n {\r\n name: 'line_id', title: '条形码', width: 60,\r\n render: item =>
{item.v}
,\r\n },\r\n { name: 'Gd_No', title: '货品编号', width: 80 },\r\n {\r\n name: 'Gd_NameGstand', title: '名称规格', width: 100,\r\n render: item => (item.datarow.GdName || '') + ' ' + (item.datarow.GStand || ''),\r\n },\r\n {\r\n name: 'Dut_DeptWst', title: '部门/工序', width: 60,\r\n render: item => (item.datarow.DutDept || '') + ' ' + (item.datarow.wst_name || ''),\r\n },\r\n { name: 'DutPer', title: '责任人', width: 60 },\r\n {\r\n name: 'end_date', title: '截止日期', width: 60,\r\n render: item => {\r\n let text =  ,\r\n errIf = false;\r\n if (item.v) {\r\n let end_date = moment(item.v);\r\n if (item.datarow.state == '2' && end_date < moment()) {\r\n errIf = true;\r\n }\r\n text = end_date.format('YYYY-MM-DD');\r\n }\r\n // else if (item.datarow.line_index === 1) {\r\n // errIf = true;\r\n // }\r\n return
{text}
;\r\n },\r\n },\r\n {\r\n name: 'state_Name', title: '当前状态', width: 60,\r\n render: item =>
{item.v},\r\n },\r\n {\r\n name: 'note', title: '问题描述-整改方案', width: 300,\r\n render: item => {\r\n let txt;\r\n if (item.datarow.line_index === 1) {\r\n txt = `${item.datarow.note || ''}${item.datarow.note && item.datarow.noteZG ? ' - ' : ''}${item.datarow.noteZG || ''}`;\r\n }\r\n else {\r\n txt = item.datarow.noteZG || '';\r\n }\r\n return
{txt}
;\r\n }\r\n },\r\n ];\r\n\r\n timers = {\r\n btmImgsTimer: 0,\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n gridData: [],\r\n btm1CurrentImg: `${FetchApi.host}/images/kanban/nophoto.jpg`,\r\n btm1Images: [],\r\n imageIsOpen: false,\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n\r\n const calcFontSize = (res) => {\r\n let clientWidth = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;\r\n if (!clientWidth)\r\n return 16;\r\n let fontSize = 100 * (clientWidth / 1440);\r\n //console.log(res * fontSize);\r\n return res * fontSize;\r\n }\r\n\r\n let chartCommonOption = {\r\n\r\n }\r\n\r\n this.allBlocks = [\r\n {\r\n title: '1',\r\n interval: 1 * 60 * 1000,\r\n delay: 1,\r\n refreshFn: async () => {\r\n let depts = StorageData.getObject('depts') || [];\r\n FetchApi.get('/API/QcAbnormal/Get',\r\n {\r\n deptIds: depts.map(x => x.id).join(',')\r\n },\r\n result => {\r\n if (this.timers.btmImgsTimer) {\r\n clearInterval(this.timers.btmImgsTimer);\r\n }\r\n this.setState({ gridData: [] });\r\n this.setState({ gridData: result }, function () {\r\n this.state.gridData.every(data => {\r\n let i = 1;\r\n while (i <= 6) {\r\n let relaId = data['RelaID' + i];\r\n if (relaId) {\r\n this.loadGridRowData(data);\r\n return false;\r\n }\r\n i++;\r\n }\r\n });\r\n });\r\n });\r\n },\r\n },\r\n {\r\n title: '2',\r\n initChart: () => {\r\n let chart = echarts.init(document.getElementById('bottom-emp'));\r\n\r\n chart.setOption(Object.assign({}, chartCommonOption, {\r\n textStyle: {\r\n fontSize: calcFontSize(0.12),\r\n color: '#fff'\r\n },\r\n tooltip: {\r\n trigger: 'axis',\r\n axisPointer: {\r\n type: 'shadow'\r\n }\r\n },\r\n dataset: {\r\n source: [\r\n { name: '', cnt: 0 },\r\n { name: '', cnt: 0 },\r\n { name: '', cnt: 0 },\r\n ]\r\n },\r\n grid: {\r\n containLabel: true,\r\n top: 10,\r\n right: 10,\r\n bottom: 0,\r\n left: 0,\r\n },\r\n xAxis: {\r\n name: 'cnt',\r\n axisLabel: {\r\n fontSize: calcFontSize(0.12),\r\n color: '#fff'\r\n },\r\n axisLine: {\r\n show: false,\r\n lineStyle: {\r\n color: '#424765',\r\n }\r\n },\r\n axisTick: {\r\n show: false,\r\n },\r\n splitLine: {\r\n lineStyle: {\r\n color: '#424765'\r\n }\r\n },\r\n },\r\n yAxis: {\r\n type: 'category',\r\n axisLabel: {\r\n fontSize: calcFontSize(0.12),\r\n color: '#fff'\r\n },\r\n axisLine: {\r\n lineStyle: {\r\n color: '#424765',\r\n }\r\n },\r\n },\r\n series: [\r\n {\r\n type: 'bar',\r\n barMaxWidth: 18,\r\n barMinHeight: 2,\r\n itemStyle: {\r\n color: function (param) {\r\n return ['rgb(116, 142, 222)', 'rgb(169, 223, 150)', 'rgb(246, 220, 125)'].reverse()[param.dataIndex % 3];\r\n },\r\n height: 10,\r\n },\r\n emphasis: {\r\n focus: 'series'\r\n },\r\n encode: {\r\n // Map the \"cnt\" column to X axis.\r\n x: 'cnt',\r\n // Map the \"name\" column to Y axis\r\n y: 'name'\r\n }\r\n }\r\n ]\r\n }));\r\n return [chart];\r\n },\r\n interval: 3 * 60 * 1000,\r\n delay: 1,\r\n refreshFn: async () => {\r\n let depts = StorageData.getObject('depts') || [];\r\n let param = {\r\n deptIds: depts.map(x => x.id).join(',')\r\n };\r\n FetchApi.get('/API/QcAbnormal/GetEmpData', param, result => {\r\n result = result || [];\r\n let chart = this.allBlocks[1].charts[0];\r\n let dataset = chart.getOption().dataset;\r\n dataset[0].source = result;\r\n chart.setOption({ dataset: dataset });\r\n });\r\n },\r\n },\r\n {\r\n title: '3',\r\n initChart: () => {\r\n let chart = echarts.init(document.getElementById('bottom-dept'));\r\n\r\n chart.setOption(Object.assign({}, chartCommonOption, {\r\n // legend: {\r\n // top: 'bottom'\r\n // },\r\n tooltip: {\r\n show: true,\r\n },\r\n color: [\r\n '#5470c6',\r\n '#91cc75',\r\n '#fac858',\r\n '#ee6666',\r\n '#73c0de',\r\n '#3ba272',\r\n '#fc8452',\r\n '#9a60b4',\r\n '#ea7ccc'\r\n ],\r\n series: [\r\n {\r\n name: '面积模式',\r\n type: 'pie',\r\n radius: ['15%', '75%'],\r\n center: ['50%', '50%'],\r\n roseType: 'area',\r\n itemStyle: {\r\n borderRadius: 8,\r\n },\r\n label: {\r\n fontSize: calcFontSize(0.12),\r\n color: '#fff',\r\n overflow: 'break',\r\n margin: 0\r\n },\r\n data: [\r\n { value: 1, name: '' },\r\n ],\r\n top: 0,\r\n right: 0,\r\n bottom: 0,\r\n left: 0,\r\n\r\n }\r\n ]\r\n }));\r\n return [chart];\r\n },\r\n interval: 3 * 60 * 1000,\r\n delay: 1,\r\n refreshFn: async () => {\r\n FetchApi.get('/API/QcAbnormal/GetDeptData', {}, result => {\r\n result = result || [];\r\n let chart = this.allBlocks[2].charts[0];\r\n let series = chart.getOption().series;\r\n series[0].data = result.map(o => { return { name: o.name, value: o.cnt } });\r\n chart.setOption({ series: series });\r\n });\r\n },\r\n },\r\n {\r\n title: '4',\r\n initChart: () => {\r\n let chart = echarts.init(document.getElementById('bottom-other'));\r\n\r\n chart.setOption(Object.assign({}, chartCommonOption, {\r\n //animationDuration: 10000,\r\n textStyle: {\r\n fontSize: calcFontSize(0.12),\r\n color: '#fff'\r\n },\r\n grid: {\r\n containLabel: true,\r\n top: 10,\r\n right: 10,\r\n bottom: 0,\r\n left: 0,\r\n },\r\n color: [\r\n '#5470c6',\r\n '#91cc75',\r\n '#fac858',\r\n '#ee6666',\r\n '#73c0de',\r\n '#3ba272',\r\n '#fc8452',\r\n '#9a60b4',\r\n '#ea7ccc'\r\n ],\r\n xAxis: {\r\n type: 'category',\r\n boundaryGap: false,\r\n axisLabel: {\r\n fontSize: calcFontSize(0.12),\r\n color: '#fff',\r\n },\r\n axisLine: {\r\n lineStyle: {\r\n color: '#424765',\r\n }\r\n },\r\n axisTick: {\r\n alignWithLabel: true\r\n },\r\n data: ['周一', '周二', '周三', '周四', '周五', '周六', '周日'],\r\n },\r\n yAxis: {\r\n axisLabel: {\r\n fontSize: calcFontSize(0.12),\r\n color: '#fff'\r\n },\r\n axisLine: {\r\n show: false,\r\n lineStyle: {\r\n color: '#424765',\r\n }\r\n },\r\n axisTick: {\r\n show: false,\r\n },\r\n splitLine: {\r\n show: true,\r\n lineStyle: {\r\n color: '#424765'\r\n }\r\n },\r\n },\r\n tooltip: {\r\n order: 'valueDesc',\r\n trigger: 'axis',\r\n },\r\n }));\r\n return [chart];\r\n },\r\n interval: 3 * 60 * 1000,\r\n delay: 1,\r\n refreshFn: async () => {\r\n let depts = StorageData.getObject('depts') || [];\r\n let param = {\r\n deptIds: depts.map(x => x.id).join(',')\r\n };\r\n FetchApi.get('/API/QcAbnormal/GetCateData', param, result => {\r\n result = result || [];\r\n // if (result.length == 0) {\r\n // result = [\r\n // { name: 'aaa', dayofweek: 1, cnt: 10 },\r\n // { name: 'aaa', dayofweek: 2, cnt: 20 },\r\n // { name: 'aaa', dayofweek: 3, cnt: 30 },\r\n // { name: 'aaa', dayofweek: 4, cnt: 40 },\r\n // { name: 'aaa', dayofweek: 5, cnt: 50 },\r\n // { name: 'aaa', dayofweek: 6, cnt: 60 },\r\n // { name: 'aaa', dayofweek: 0, cnt: 70 },\r\n // { name: 'bbb', dayofweek: 1, cnt: 0 },\r\n // { name: 'bbb', dayofweek: 2, cnt: 20 },\r\n // { name: 'bbb', dayofweek: 3, cnt: 40 },\r\n // { name: 'bbb', dayofweek: 4, cnt: 60 },\r\n // { name: 'bbb', dayofweek: 5, cnt: 80 },\r\n // { name: 'bbb', dayofweek: 6, cnt: 100 },\r\n // { name: 'bbb', dayofweek: 0, cnt: 120 },\r\n // { name: 'ccc', dayofweek: 1, cnt: 5 },\r\n // { name: 'ccc', dayofweek: 2, cnt: 35 },\r\n // { name: 'ccc', dayofweek: 3, cnt: 65 },\r\n // { name: 'ccc', dayofweek: 4, cnt: 95 },\r\n // { name: 'ccc', dayofweek: 5, cnt: 125 },\r\n // { name: 'ccc', dayofweek: 6, cnt: 155 },\r\n // { name: 'ccc', dayofweek: 0, cnt: 185 },\r\n // ];\r\n // }\r\n let weekdays = ['周一', '周二', '周三', '周四', '周五', '周六', '周日'];\r\n let chart = this.allBlocks[3].charts[0];\r\n let dataset = [];\r\n let series = [];\r\n let grid = chart.getOption().grid;\r\n grid[0].right = 10;\r\n result.forEach(item => {\r\n let data = dataset.find(o => o.id == item.name);\r\n if (!data) {\r\n data = {\r\n id: item.name,\r\n source: []\r\n };\r\n dataset.push(data);\r\n }\r\n let k = 0;\r\n while (k < item.dayofweek) {\r\n if (!data.source.find(o => o.x === weekdays[k])) {\r\n data.source.push({ x: weekdays[k], y: 0 });\r\n }\r\n k++;\r\n }\r\n data.source.push({ x: weekdays[item.dayofweek], y: item.cnt });\r\n if (item.dayofweek === 0) {\r\n grid[0].right = 60;\r\n }\r\n let serie = series.find(o => o.name == item.name);\r\n if (!serie) {\r\n serie = {\r\n name: item.name,\r\n type: 'line',\r\n datasetId: item.name,\r\n showSymbol: false,\r\n endLabel: {\r\n show: true,\r\n distance: 5,\r\n fontSize: calcFontSize(0.12),\r\n color: '#fff',\r\n valueAnimation: true,\r\n formatter: function (params) {\r\n return `${params.seriesName}: ${params.data.y}`;\r\n }\r\n },\r\n labelLayout: {\r\n moveOverlap: 'shiftY'\r\n },\r\n emphasis: {\r\n focus: 'series'\r\n },\r\n encode: {\r\n x: 'x',\r\n y: 'y'\r\n }\r\n };\r\n series.push(serie);\r\n }\r\n });\r\n chart.setOption({\r\n dataset: dataset,\r\n series: series,\r\n grid: grid\r\n });\r\n });\r\n },\r\n },\r\n ];\r\n\r\n setTimeout(() => { // 这里使用延迟是为了确保echart绘图时能100% \r\n\r\n this.allBlocks.forEach(block => {\r\n if (block.initChart) {\r\n block.charts = block.initChart();\r\n }\r\n });\r\n\r\n window.addEventListener('resize', this.windowResize);\r\n }, 0);\r\n }\r\n\r\n componentWillUnmount() {\r\n this.clearAllTimer();\r\n window.removeEventListener('resize', this.windowResize);\r\n }\r\n\r\n windowResize = () => {\r\n this.allBlocks.forEach(block => {\r\n if (block.charts && block.charts.length > 0) {\r\n block.charts.forEach(chart => {\r\n chart.resize();\r\n })\r\n }\r\n });\r\n }\r\n\r\n clearAllTimer = () => {\r\n this.allBlocks.forEach(block => {\r\n if (block.refreshTimer) {\r\n clearTimeout(block.refreshTimer);\r\n }\r\n if (block.refreshTimer2) {\r\n clearInterval(block.refreshTimer2);\r\n }\r\n });\r\n }\r\n\r\n beginRefresh() {\r\n let _this = this;\r\n\r\n let depts = StorageData.getObject('depts') || [];\r\n let headerText = depts.slice(0, 2).map(dept => dept.name).join(',')\r\n if (depts.length > 2) {\r\n headerText += '...';\r\n }\r\n this.props.updateHeader({ headerText: headerText });\r\n\r\n _this.allBlocks.forEach(block => {\r\n (function refreshData(initIf) {\r\n if (block.refreshTimer) {\r\n clearTimeout(block.refreshTimer);\r\n }\r\n if (block.refreshTimer2) {\r\n clearInterval(block.refreshTimer2);\r\n }\r\n if (!FetchApi.authUser) {\r\n return;\r\n }\r\n setTimeout(async () => {\r\n if (initIf || _this.props.autoRefresh) {\r\n await block.refreshFn();\r\n }\r\n block.refreshTimer = setTimeout(() => {\r\n refreshData();\r\n }, block.interval);\r\n }, block.delay || 0);\r\n })(true);\r\n });\r\n }\r\n\r\n loadGridRowData(data) {\r\n if (this.timers.btmImgsTimer) {\r\n clearInterval(this.timers.btmImgsTimer);\r\n }\r\n let i = 1, images = [];\r\n while (i <= 6) {\r\n let relaId = data['RelaID' + i];\r\n if (relaId) {\r\n //let relaFds = ['qc_abnorre_pic1', 'qc_abnorre_pic2', 'qc_abnorre_pic3', 'qc_abnorim_pic1', 'qc_abnorim_pic2', 'qc_abnorim_pic3'];\r\n let relaFd;\r\n if (i <= 3) {\r\n relaFd = 'qc_abnorre_pic' + i;\r\n }\r\n else {\r\n relaFd = 'qc_abnorim_pic' + (i - 3);\r\n }\r\n images.push(`${FetchApi.host}/UpLoad/FileManage.ashx?t=v&from=img&RelaFd=${relaFd}&RelaID=${relaId}`);\r\n }\r\n i++;\r\n }\r\n this.setState({\r\n imageIsOpen: false,\r\n btm1Images: images.map(image => ({ source: `${FetchApi.host}/UpLoad/FileManage.ashx?t=v&from=img&n=${image}` }))\r\n });\r\n if (images.length) {\r\n let currentIndex = 0;\r\n this.setState({\r\n btm1CurrentImg: images[currentIndex]\r\n });\r\n this.timers.btmImgsTimer = setInterval(() => {\r\n if (!this.props.autoRefresh) {\r\n return;\r\n }\r\n currentIndex++;\r\n if (currentIndex >= images.length) {\r\n currentIndex = 0;\r\n }\r\n this.setState({\r\n btm1CurrentImg: images[currentIndex]\r\n });\r\n }, 10 * 1000);\r\n }\r\n else {\r\n this.setState({\r\n btm1CurrentImg: `${FetchApi.host}/images/kanban/nophoto.jpg`\r\n });\r\n }\r\n }\r\n showImages() {\r\n if (this.state.btm1Images.length) {\r\n this.setState({\r\n btm1Images: Object.assign([], this.state.btm1Images),\r\n imageIsOpen: true\r\n });\r\n }\r\n }\r\n render() {\r\n return (\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \"\"\r\n
\r\n
2
\r\n
3
\r\n
4
\r\n
\r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default QcAbnormal;","import React from \"react\";\r\nimport moment from 'moment';\r\nimport StorageData from './tools/StorageData';\r\nimport FetchApi from './tools/FetchAPI';\r\nimport Grid from \"./control/Grid\";\r\nimport Pagination from './control/Pagination';\r\nimport Lightbox from './control/Lightbox';\r\nimport * as echarts from 'echarts';\r\n\r\nimport './McmState.css';\r\n\r\nclass McmState extends React.Component {\r\n static defaultProps = {\r\n autoRefresh: true,\r\n }\r\n\r\n // 机台维修\r\n gridCols = [\r\n {\r\n name: 'state',\r\n title: '',\r\n style: { padding: 0, width: 1 },\r\n render: item => {\r\n if (item.datarow.ali_date\r\n && moment(item.datarow.ali_date) < moment()._d\r\n && !item.datarow.end_date) {\r\n return
 
;\r\n }\r\n return '';\r\n }\r\n },\r\n { name: 'mcm_name', title: '设备', width: 60 },\r\n { name: 'change_Name', title: '维护原因', width: 80 },\r\n { name: 'ali_date', title: '预计恢复', width: 60, render: item => item.v && moment(item.v).format('YYYY-MM-DD') },\r\n { name: 'beg_date', title: '维护开始', width: 60, render: item => item.v && moment(item.v).format('MM-DD HH:mm') },\r\n { name: 'end_date', title: '维护结束', width: 60, render: item => item.v && moment(item.v).format('MM-DD HH:mm') },\r\n { name: 'ali_user_Name', title: '负责人', width: 50 },\r\n ];\r\n\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n // 机台状态\r\n sceneMcmsData: [],\r\n mcmImage: [],\r\n imageIsOpen: false,\r\n // 状态统计\r\n stateCntData: [\r\n { code: '1', name: '加工中', cnt: 0 },\r\n { code: '2', name: '空闲', cnt: 0 },\r\n { code: '0', name: '停止', cnt: 0 },\r\n { code: '3', name: '维护中', cnt: 0 },\r\n ],\r\n // 状态过滤\r\n filterState: '',\r\n // 机台维修\r\n gridData: [],\r\n pageSize: 50,\r\n gridDataCnt: 0,\r\n gridPageIndex: 0,\r\n // \r\n btmShow: false,\r\n btmSceneId: '',\r\n btmMcmId: '',\r\n btmData: [],\r\n btmMcms: [],\r\n };\r\n }\r\n\r\n allBlocks = [\r\n {\r\n initChart: () => {\r\n const renderItem = (params, api) => {\r\n var categoryIndex = api.value(0);\r\n var start = api.coord([api.value(1), categoryIndex]);\r\n var end = api.coord([api.value(2), categoryIndex]);\r\n var height = api.size([0, 1])[1] * 0.6;\r\n //if (height > 20) { height = 20; }\r\n //var height = 20;\r\n var rectShape = echarts.graphic.clipRectByRect(\r\n {\r\n x: start[0],\r\n y: start[1] - height / 2,\r\n width: end[0] - start[0],\r\n height: height\r\n },\r\n {\r\n x: params.coordSys.x,\r\n y: params.coordSys.y,\r\n width: params.coordSys.width,\r\n height: params.coordSys.height\r\n }\r\n );\r\n return (\r\n rectShape && {\r\n type: 'rect',\r\n transition: ['shape'],\r\n shape: rectShape,\r\n style: api.style()\r\n }\r\n );\r\n };\r\n\r\n let chart = echarts.init(document.getElementById('chartBottom'));\r\n\r\n chart.setOption({\r\n textStyle: {\r\n fontSize: this.calcFontSize(0.14)\r\n },\r\n tooltip: {\r\n formatter: function (params) {\r\n let beg = '开始:' + moment(params.value[1]).format('YYYY-MM-DD HH:mm');\r\n let end = '结束:' + moment(params.value[2]).format('YYYY-MM-DD HH:mm');\r\n return params.marker + params.name + '
' + beg + '
' + end;\r\n }\r\n },\r\n dataZoom: [\r\n {\r\n type: 'slider',\r\n filterMode: 'weakFilter',\r\n showDataShadow: false,\r\n height: 12,\r\n bottom: 10,\r\n labelFormatter: ''\r\n },\r\n {\r\n type: 'inside',\r\n filterMode: 'weakFilter',\r\n }\r\n ],\r\n grid: {\r\n left: '8%',\r\n right: '4%',\r\n top: '5%',\r\n bottom: '50',\r\n },\r\n xAxis: {\r\n min: 0,\r\n scale: true,\r\n axisLabel: {\r\n fontSize: this.calcFontSize(0.14),\r\n color: '#fff',\r\n formatter: function (val) {\r\n //return Math.max(0, val - startTime) + ' ms';\r\n //return new Date(val).getHours();\r\n if (moment(val).isSame(moment(), 'day')) {\r\n return moment(val).format(\"HH:mm\");\r\n }\r\n else if (moment(val).isSame(moment(), 'month')) {\r\n return moment(val).format(\"DD日HH:mm\");\r\n }\r\n else if (moment(val).isSame(moment(), 'year')) {\r\n return moment(val).format(\"MM/DD HH:mm\");\r\n }\r\n else {\r\n return moment(val).format(\"YY/MM/DD HH:mm\");\r\n }\r\n }\r\n },\r\n axisLine: {\r\n lineStyle: {\r\n color: '#424765',\r\n }\r\n },\r\n splitLine: {\r\n lineStyle: {\r\n color: '#424765'\r\n }\r\n }\r\n },\r\n yAxis: {\r\n data: [],\r\n axisLabel: {\r\n fontSize: this.calcFontSize(0.14),\r\n color: '#fff',\r\n },\r\n axisLine: {\r\n lineStyle: {\r\n color: '#424765',\r\n }\r\n },\r\n },\r\n series: [\r\n {\r\n type: 'custom',\r\n renderItem: renderItem,\r\n itemStyle: {\r\n // opacity: 0.8\r\n },\r\n encode: {\r\n x: [1, 2],\r\n y: 0\r\n },\r\n data: []\r\n }\r\n ]\r\n });\r\n\r\n return [chart];\r\n },\r\n }\r\n ];\r\n\r\n calcFontSize = (res) => {\r\n let clientWidth = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;\r\n if (!clientWidth)\r\n return 16;\r\n let fontSize = 100 * (clientWidth / 1440);\r\n //console.log(res * fontSize);\r\n let result = res * fontSize;\r\n\r\n return Number(window.getComputedStyle(document.querySelector('.grid-head tr th')).fontSize.replace('px', '')) || result;\r\n }\r\n\r\n componentDidMount() {\r\n\r\n setTimeout(() => { // 这里使用延迟是为了确保echart绘图时能100% \r\n\r\n this.allBlocks.forEach(block => {\r\n if (block.initChart) {\r\n block.charts = block.initChart();\r\n }\r\n });\r\n\r\n window.addEventListener('resize', this.windowResize);\r\n }, 0);\r\n }\r\n\r\n componentWillUnmount() {\r\n this.clearAllTimer();\r\n window.removeEventListener('resize', this.windowResize);\r\n }\r\n\r\n clearAllTimer() {\r\n if (this.refreshDataTimer) {\r\n clearTimeout(this.refreshDataTimer);\r\n }\r\n if (this.refreshMaintainDataTimer) {\r\n clearTimeout(this.refreshMaintainDataTimer);\r\n }\r\n }\r\n\r\n windowResize = () => {\r\n this.allBlocks.forEach(block => {\r\n if (block.charts && block.charts.length > 0) {\r\n block.charts.forEach(chart => {\r\n chart.resize();\r\n })\r\n }\r\n });\r\n }\r\n\r\n // 加载机台数据\r\n beginRefresh() {\r\n this.loadMcmData();\r\n this.loadMaintainData();\r\n }\r\n\r\n // 机台数据\r\n loadMcmData() {\r\n let refreshData;\r\n (refreshData = (initIf = false) => {\r\n if (!initIf && (!this.props.autoRefresh || this.state.btmShow)) {\r\n if (this.refreshDataTimer) {\r\n clearTimeout(this.refreshDataTimer);\r\n }\r\n this.refreshDataTimer = setTimeout(() => {\r\n refreshData();\r\n }, 30 * 1000);\r\n return;\r\n }\r\n let scenes = StorageData.getObject(\"scenes\") || [];\r\n FetchApi.get('/API/McmState/Get',\r\n {\r\n sceneIds: scenes.map(o => o.id).join(',')\r\n },\r\n result => {\r\n // 数据\r\n if (result) {\r\n this.setState({ sceneMcmsData: result });\r\n\r\n this.state.stateCntData.map(state => {\r\n state.cnt = 0;\r\n result.forEach(scene => {\r\n state.cnt += scene.mcms.filter(mcm => mcm.state == state.code).length;\r\n });\r\n });\r\n this.setState({ stateCntData: this.state.stateCntData });\r\n\r\n let headerScene = result.slice(0, 2).map(scene => scene.name).join(',');\r\n if (result.length > 2) {\r\n headerScene += '...';\r\n }\r\n this.props.updateHeader({ mcmScene: headerScene });\r\n }\r\n // 滚动\r\n if (initIf === false) {\r\n let contentLeft = document.getElementById('content-left');\r\n if (contentLeft.offsetHeight + contentLeft.scrollTop >= contentLeft.scrollHeight) {\r\n contentLeft.scrollTop = 0;\r\n }\r\n else if (contentLeft.offsetHeight + contentLeft.scrollTop < contentLeft.scrollHeight) {\r\n let lineHeight = contentLeft.getElementsByClassName('item')[0].offsetHeight + 10;\r\n contentLeft.scrollTop += lineHeight * 5;\r\n }\r\n }\r\n // 刷新\r\n if (this.refreshDataTimer) {\r\n clearTimeout(this.refreshDataTimer);\r\n }\r\n this.refreshDataTimer = setTimeout(() => {\r\n refreshData();\r\n }, 30 * 1000);\r\n });\r\n })(true);\r\n }\r\n\r\n showMcmImg(mcm) {\r\n if (mcm.mcm_img) {\r\n this.setState({\r\n mcmImage: [{ source: `${FetchApi.host}/UpLoad/FileManage.ashx?t=v&from=img&n=${mcm.mcm_img}` }],\r\n imageIsOpen: true\r\n });\r\n }\r\n }\r\n\r\n // 加载维护数据\r\n loadMaintainData() {\r\n let refreshData;\r\n (refreshData = (initIf = false) => {\r\n if (!initIf && (!this.props.autoRefresh || this.state.btmShow)) {\r\n if (this.refreshMaintainDataTimer) {\r\n clearTimeout(this.refreshMaintainDataTimer);\r\n }\r\n this.refreshMaintainDataTimer = setTimeout(() => {\r\n refreshData();\r\n }, 30 * 1000);\r\n return;\r\n }\r\n let scenes = StorageData.getObject(\"scenes\") || [];\r\n FetchApi.get('/API/McmState/GetMaintain', {\r\n sceneIds: scenes.map(o => o.id).join(','),\r\n pageIndex: this.state.gridPageIndex,\r\n pageSize: this.state.pageSize,\r\n }, result => {\r\n this.setState({\r\n gridDataCnt: result.dataCnt,\r\n gridData: result.data\r\n });\r\n });\r\n // 刷新\r\n if (this.refreshMaintainDataTimer) {\r\n clearTimeout(this.refreshMaintainDataTimer);\r\n }\r\n this.refreshMaintainDataTimer = setTimeout(() => {\r\n this.setState({ gridPageIndex: 0 }, () => {\r\n refreshData();\r\n });\r\n }, 30 * 1000);\r\n })(true);\r\n }\r\n\r\n async gridPageChange(o) {\r\n this.setState({ gridPageIndex: o.selected }, () => {\r\n this.loadMaintainData()\r\n });\r\n }\r\n\r\n closeBottom = () => {\r\n this.setState({\r\n btmSceneId: '',\r\n btmMcmId: '',\r\n btmShow: false,\r\n btmData: [],\r\n btmMcms: [],\r\n });\r\n };\r\n\r\n showBottom = (scene, mcm) => {\r\n var sceneId = scene.id;\r\n var mcmId = mcm ? mcm.id : '';\r\n if (this.state.btmSceneId == sceneId && this.state.btmMcmId == mcmId) {\r\n return;\r\n }\r\n this.setState({\r\n btmSceneId: sceneId,\r\n btmMcmId: mcmId,\r\n btmShow: true,\r\n });\r\n var days = StorageData.getObject(\"mcmDays\") || 1;\r\n FetchApi.get('/API/McmState/GetHistoryState',\r\n {\r\n sceneId: sceneId,\r\n mcmId: mcmId,\r\n days: days\r\n },\r\n stateData => {\r\n if (stateData) {\r\n let data = [];\r\n let categories = [];\r\n let states = [\r\n { id: '0', name: '复位', color: 'rgba(0, 184, 255)' },\r\n { id: '1', name: '停止', color: 'rgba(139, 139, 139)' },\r\n { id: '2', name: '空闲', color: 'rgba(255, 255, 0)' },\r\n { id: '3', name: '运行', color: 'rgba(0, 128, 0)' },\r\n { id: '4', name: '维护', color: 'rgba(255, 0, 0)' },\r\n ];\r\n\r\n stateData.forEach((x, i) => {\r\n var mcmIndex = categories.indexOf(x.mcm);\r\n if (mcmIndex < 0) {\r\n mcmIndex = categories.length;\r\n categories.push(x.mcm);\r\n }\r\n\r\n var stateItem = states.find(y => y.id == x.state);\r\n if (!stateItem) {\r\n stateItem = { id: x.state, name: x.state, color: 'rgba(255, 255, 182)' };\r\n }\r\n\r\n var start = moment(x.time);\r\n var end = i < stateData.length - 1 && stateData[i + 1].mcm == x.mcm ? moment(stateData[i + 1].time) : moment();\r\n data.push({\r\n name: stateItem.name,\r\n value: [mcmIndex, start.valueOf(), end.valueOf(), end.diff(start)],\r\n itemStyle: { normal: { color: stateItem.color } }\r\n });\r\n });\r\n\r\n var chart = this.allBlocks[0].charts[0];\r\n let xAxis = chart.getOption().xAxis;\r\n xAxis[0].min = moment().add(-(days - 1), 'd').startOf('day').valueOf();\r\n xAxis[0].max = moment().endOf('day').valueOf();\r\n let yAxis = chart.getOption().yAxis;\r\n yAxis[0].data = categories;\r\n let series = chart.getOption().series;\r\n series[0].data = data;\r\n chart.setOption({\r\n xAxis: xAxis,\r\n yAxis: yAxis,\r\n series: series,\r\n });\r\n\r\n this.setState({ btmData: data, btmMcms: categories });\r\n }\r\n this.windowResize();\r\n });\r\n };\r\n\r\n render() {\r\n return (\r\n
\r\n
\r\n
\r\n {\r\n this.state.sceneMcmsData.map(scene => {\r\n return (\r\n <>\r\n
{ this.showBottom(scene); }}>\r\n {scene.name}\r\n
\r\n {\r\n scene.mcms.map(mcm => {\r\n if (!this.state.filterState || mcm.state == this.state.filterState) {\r\n let title = `${mcm.mcm_no} ${mcm.mcm_name}`;\r\n if (scene.ifDNC) {\r\n let cx = mcm.cnc_prg_name || '--';\r\n let zz = `${mcm.cnc_sp_speed || '--'}/${mcm.cnc_sp_override || '--'}`;\r\n let jg = `${mcm.cnc_feed_rate || '--'}/${mcm.cnc_feed_override || '--'}`;\r\n\r\n return
{ this.showBottom(scene, mcm); }}>\r\n
\r\n {title}\r\n
\r\n
\r\n 程序:{cx}\r\n
\r\n
\r\n 主轴:{zz}\r\n
\r\n
\r\n 进给:{jg}\r\n
\r\n
\r\n
{mcm.cal_today_hours && `${mcm.cal_today_hours}H`}
\r\n
{mcm.cal_mon_oee && `${mcm.cal_mon_oee}%`}
\r\n
\r\n
{ this.showMcmImg(mcm); }}>
\r\n
;\r\n }\r\n else {\r\n return
{ this.showBottom(scene, mcm); }}>\r\n
\r\n {title}\r\n
\r\n
\r\n {this.state.stateCntData.find(state => state.code == mcm.state).name}\r\n
\r\n
{ this.showMcmImg(mcm); }}>
\r\n
;\r\n }\r\n }\r\n })\r\n }\r\n );\r\n })\r\n }\r\n
\r\n
\r\n
\r\n {\r\n this.state.stateCntData.map(state => {\r\n return (\r\n
{\r\n if (this.state.filterState && state.code == this.state.filterState) {\r\n this.setState({ filterState: null });\r\n }\r\n else {\r\n this.setState({ filterState: state.code });\r\n }\r\n }}>\r\n
{state.cnt}
\r\n
{state.name}
\r\n
\r\n );\r\n })\r\n }\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default McmState;","import React from \"react\";\r\nimport StorageData from './tools/StorageData';\r\nimport FetchApi from './tools/FetchAPI';\r\nimport Grid from './control/Grid';\r\nimport Pagination from './control/Pagination';\r\n\r\nimport './ProductionStatus.css';\r\n\r\nclass ProductionStatus extends React.Component {\r\n static defaultProps = {\r\n autoRefresh: true,\r\n }\r\n\r\n constructor(props) {\r\n super(props);\r\n\r\n // 分页控件\r\n this.gridSdsOutPagerRef = React.createRef();\r\n this.gridPosRecPagerRef = React.createRef();\r\n this.gridMosRecPagerRef = React.createRef();\r\n\r\n this.state = {\r\n // 顶部:订单完成率、采购完成率、工单完成率,外发完成率\r\n stateCntData: [\r\n { code: 'so_rate', name: '订单完成率', cnt: 0 },\r\n { code: 'po_rate', name: '采购完成率', cnt: 0 },\r\n { code: 'plan_rate', name: '工单完成率', cnt: 0 },\r\n { code: 'plan_wf_rate', name: '外发完成率', cnt: 0 },\r\n ],\r\n // grid 页行数\r\n girdPageSize: 15,\r\n // 今日订单出货:统计销售出货单,相关子段:出货单号、货品编号、货品名称、出货数量、未出数量\r\n gridSdsOutCols: [\r\n { title: '出货单号', name: 'out_no', width: 100 },\r\n { title: '货品编号', name: 'GdCode', width: 100 },\r\n { title: '货品名称', name: 'GdName', width: 150 },\r\n { title: '出货数量', name: 's_quan', width: 70 },\r\n { title: '未出数量', name: 'not_quan', width: 70 },\r\n ],\r\n gridSdsOutData: [],\r\n gridSdsOutPageData: [],\r\n // 今日采购入库:统计采购单的验收入库单,相关子段:验收单号、货品编号、货品名称、验收数量、未交数量\r\n gridPosRecCols: [\r\n { title: '验收单号', name: 'rec_no', width: 100 },\r\n { title: '货品编号', name: 'GdCode', width: 100 },\r\n { title: '货品名称', name: 'GdName', width: 150 },\r\n { title: '验收数量', name: 's_quan', width: 70 },\r\n { title: '未交数量', name: 'not_quan', width: 70 },\r\n ],\r\n gridPosRecData: [],\r\n gridPosRecPageData: [],\r\n // 今日生产入库:统计制令单的生产入库单,相关子段:入库单号、入库单别、制令单号、货品编号、货品名称、制造中心、计划开工日、计划完工日、入库数量、未入数量\r\n gridMosRecCols: [\r\n { title: '入库单号', name: 'rec_no', width: 100 },\r\n { title: '入库单别', name: 'cate_name', width: 100 },\r\n { title: '制令单号', name: 'plan_no', width: 100 },\r\n { title: '货品编号', name: 'GdCode', width: 100 },\r\n { title: '货品名称', name: 'GdName', width: 150 },\r\n { title: '制造中心', name: 'mk_name', width: 100 },\r\n { title: '计划开工日', name: 'x', width: 100 },\r\n { title: '计划完工日', name: 'x', width: 100 },\r\n { title: '入库数量', name: 's_quan', width: 70 },\r\n { title: '未入数量', name: 'not_quan', width: 70 },\r\n ],\r\n gridMosRecData: [],\r\n gridMosRecPageData: [],\r\n };\r\n }\r\n\r\n componentWillUnmount() {\r\n if (this.refreshTimer) {\r\n clearTimeout(this.refreshTimer);\r\n }\r\n window.removeEventListener('resize', this.windowResize);\r\n this.gridSdsOutPagerRef.current.dispose();\r\n this.gridPosRecPagerRef.current.dispose();\r\n this.gridMosRecPagerRef.current.dispose();\r\n }\r\n\r\n beginRefresh() {\r\n let refreshFn;\r\n (refreshFn = (initIf) => {\r\n if (!initIf && !this.props.autoRefresh) {\r\n if (this.refreshTimer) {\r\n clearTimeout(this.refreshTimer);\r\n }\r\n this.refreshTimer = setTimeout(() => {\r\n refreshFn();\r\n }, 60 * 1000);\r\n return;\r\n }\r\n\r\n FetchApi.get('/API/ProductionStatus/Get',\r\n {},\r\n result => {\r\n if (result) {\r\n // 动态计划页行数\r\n this.setState({\r\n girdPageSize: Math.floor(\r\n document.querySelector('.grid-body').clientHeight\r\n /\r\n document.querySelector('.virtual-grid .grid-body tr').clientHeight\r\n )\r\n });\r\n // 加载数据\r\n if (result.complate_rate) {\r\n this.state.stateCntData.map(state => {\r\n state.cnt = result.complate_rate[0][state.code];\r\n });\r\n this.setState({\r\n stateCntData: this.state.stateCntData,\r\n });\r\n }\r\n if (result.sds_out) {\r\n this.setState({\r\n gridSdsOutData: result.sds_out\r\n }, () => {\r\n this.gridSdsOutPagerRef.current.goPage();\r\n });\r\n }\r\n if (result.pos_rec) {\r\n this.setState({\r\n gridPosRecData: result.pos_rec,\r\n }, () => {\r\n this.gridPosRecPagerRef.current.goPage();\r\n });\r\n }\r\n if (result.mos_rec) {\r\n this.setState({\r\n gridMosRecData: result.mos_rec,\r\n }, () => {\r\n this.gridMosRecPagerRef.current.goPage();\r\n });\r\n }\r\n }\r\n // 刷新\r\n if (this.refreshTimer) {\r\n clearTimeout(this.refreshTimer);\r\n }\r\n this.refreshTimer = setTimeout(() => {\r\n refreshFn();\r\n }, 30 * 1000);\r\n });\r\n })(true);\r\n }\r\n\r\n gridSdsOutPager_onPageChanged(o) {\r\n this.setState({\r\n gridSdsOutPageData: o.selectedData,\r\n });\r\n }\r\n\r\n gridPosRecPager_onPageChanged(o) {\r\n this.setState({\r\n gridPosRecPageData: o.selectedData,\r\n });\r\n }\r\n\r\n gridMosRecPager_onPageChanged(o) {\r\n this.setState({\r\n gridMosRecPageData: o.selectedData,\r\n });\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n
\r\n {\r\n this.state.stateCntData.map(state => {\r\n return (\r\n
\r\n
{state.cnt}
\r\n
{state.name}
\r\n
\r\n );\r\n })\r\n }\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n}\r\n\r\nexport default ProductionStatus;","import React from \"react\";\r\nimport moment, { normalizeUnits } from 'moment';\r\nimport StorageData from './tools/StorageData';\r\nimport FetchApi from './tools/FetchAPI';\r\nimport Pagination from './control/Pagination';\r\nimport Lightbox from './control/Lightbox';\r\nimport QRCode from \"qrcode\";\r\n\r\nimport './MmsFixture.css';\r\n\r\nclass MmsFixture extends React.Component {\r\n static defaultProps = {\r\n autoRefresh: true,\r\n }\r\n\r\n // 机台维修\r\n gridCols = [\r\n {\r\n name: 'state',\r\n title: '',\r\n style: { padding: 0, width: 1 },\r\n render: item => {\r\n if (item.datarow.ali_date\r\n && moment(item.datarow.ali_date) < moment()._d\r\n && !item.datarow.end_date) {\r\n return
 
;\r\n }\r\n return '';\r\n }\r\n },\r\n { name: 'mcm_name', title: '设备', width: 60 },\r\n { name: 'change_Name', title: '维护原因', width: 80 },\r\n { name: 'ali_date', title: '预计恢复', width: 60, render: item => item.v && moment(item.v).format('YYYY-MM-DD') },\r\n { name: 'beg_date', title: '维护开始', width: 60, render: item => item.v && moment(item.v).format('MM-DD HH:mm') },\r\n { name: 'end_date', title: '维护结束', width: 60, render: item => item.v && moment(item.v).format('MM-DD HH:mm') },\r\n { name: 'ali_user_Name', title: '负责人', width: 50 },\r\n ];\r\n\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n qrCodeIsOpen: false,\r\n // 数据\r\n data: [],\r\n dataCnt: 0,\r\n pageSize: 200,\r\n pageIndex: 0,\r\n };\r\n }\r\n\r\n calcFontSize = (res) => {\r\n let clientWidth = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;\r\n if (!clientWidth)\r\n return 16;\r\n let fontSize = 100 * (clientWidth / 1440);\r\n //console.log(res * fontSize);\r\n let result = res * fontSize;\r\n\r\n return Number(window.getComputedStyle(document.querySelector('.grid-head tr th')).fontSize.replace('px', '')) || result;\r\n }\r\n\r\n componentDidMount() {\r\n\r\n setTimeout(() => { // 这里使用延迟是为了确保echart绘图时能100% \r\n window.addEventListener('resize', this.windowResize);\r\n }, 0);\r\n }\r\n\r\n componentWillUnmount() {\r\n this.clearAllTimer();\r\n window.removeEventListener('resize', this.windowResize);\r\n }\r\n\r\n clearAllTimer() {\r\n if (this.refreshDataTimer) {\r\n clearTimeout(this.refreshDataTimer);\r\n }\r\n }\r\n\r\n windowResize = () => {\r\n }\r\n\r\n beginRefresh() {\r\n this.loadData();\r\n }\r\n\r\n // 加载数据\r\n loadData() {\r\n let refreshData;\r\n (refreshData = (initIf = false) => {\r\n if (!initIf && !this.props.autoRefresh) {\r\n if (this.refreshDataTimer) {\r\n clearTimeout(this.refreshDataTimer);\r\n }\r\n this.refreshDataTimer = setTimeout(() => {\r\n refreshData();\r\n }, 20 * 1000);\r\n return;\r\n }\r\n if (initIf) {\r\n // 加载\r\n let fixInCod2s = StorageData.getObject(\"fixInCod2s\") || [];\r\n let fixChanges = StorageData.getObject(\"fixChanges\") || [];\r\n let fixSerialNums = StorageData.getObject(\"fixSerialNums\") || [];\r\n FetchApi.get('/API/MmsFixture/Get',\r\n {\r\n incod2Ids: fixInCod2s.map(o => o.id).join(','),\r\n changeIds: fixChanges.map(o => o.id).join(','),\r\n fixaIds: fixSerialNums.map(o => o.id).join(','),\r\n pageIndex: this.state.pageIndex,\r\n pageSize: this.state.pageSize,\r\n },\r\n result => {\r\n // 数据\r\n this.setState({\r\n data: result.data,\r\n dataCnt: result.dataCnt,\r\n });\r\n this.props.updateHeader({ dataCount: result.dataCnt });\r\n });\r\n }\r\n else {\r\n // 滚动\r\n let contentLeft = document.getElementById('content-left');\r\n if (contentLeft.offsetHeight + contentLeft.scrollTop >= contentLeft.scrollHeight) {\r\n contentLeft.scrollTop = 0;\r\n let pageCount = Math.ceil(this.state.dataCnt / this.state.pageSize);\r\n let pageIndex = this.state.pageIndex;\r\n pageIndex += 1;\r\n if (pageIndex >= pageCount) {\r\n this.setState({ pageIndex: 0 });\r\n }\r\n else {\r\n this.setState({ pageIndex: pageIndex });\r\n }\r\n refreshData(true);\r\n }\r\n else if (contentLeft.offsetHeight + contentLeft.scrollTop < contentLeft.scrollHeight) {\r\n let lineHeight = contentLeft.getElementsByClassName('item')[0].offsetHeight + 10;\r\n contentLeft.scrollTop += lineHeight * 5;\r\n }\r\n }\r\n\r\n // 刷新\r\n if (this.refreshDataTimer) {\r\n clearTimeout(this.refreshDataTimer);\r\n }\r\n this.refreshDataTimer = setTimeout(() => {\r\n refreshData();\r\n }, 20 * 1000);\r\n })(true);\r\n }\r\n\r\n // 显示二维码\r\n showQrcode(item, e) {\r\n let _this = this;\r\n if (item.Serial_num) {\r\n QRCode.toCanvas(document.getElementById('canvasQrcode'), item.Serial_num, function (error) {\r\n if (error) {\r\n console.error(error);\r\n _this.setState({\r\n qrCodeIsOpen: false\r\n });\r\n }\r\n else {\r\n _this.setState({\r\n qrCodeIsOpen: true\r\n });\r\n }\r\n });\r\n }\r\n else {\r\n _this.setState({\r\n qrCodeIsOpen: false\r\n });\r\n }\r\n // 阻止冒泡\r\n const ev = e || window.event;\r\n ev.stopPropagation();\r\n }\r\n\r\n async gridPageChange(o) {\r\n console.log(o);\r\n this.setState({ pageIndex: o.selected }, () => {\r\n this.loadData();\r\n });\r\n }\r\n\r\n render() {\r\n return (\r\n
{ this.setState({ 'qrCodeIsOpen': false }); }}>\r\n
\r\n
\r\n {\r\n this.state.data.map(change => {\r\n return (\r\n <>\r\n
\r\n {change.name}({change.cnt})\r\n
\r\n {\r\n change.data.map((row, i) => {\r\n let title = row.fix_name + '\\n' + row.gstand;\r\n return
{ this.showQrcode(row, e); }}>\r\n
\r\n {row.Serial_num}\r\n
\r\n
\r\n {row.left_times ? row.left_times.toLocaleString() : ''}\r\n
\r\n
\r\n
;\r\n })\r\n }\r\n );\r\n })\r\n }\r\n
\r\n
\r\n \r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default MmsFixture;","import React, { Fragment } from 'react';\r\nimport md5 from 'blueimp-md5';\r\nimport FetchApi from './tools/FetchAPI'\r\nimport StorageData from './tools/StorageData'\r\n\r\nclass Login extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n orgList: [],\r\n oragID: '',\r\n userName: null,\r\n userPwd: null,\r\n secureCode: null,\r\n };\r\n }\r\n\r\n static defaultProps = {\r\n visible: false,\r\n onConfirm: () => { },\r\n onCancel: () => { }\r\n }\r\n\r\n componentDidMount() {\r\n\r\n var orgData = StorageData.getObject('org');\r\n if (orgData) {\r\n this.setState({\r\n orgList: orgData.org_list\r\n });\r\n\r\n let lastOrg = StorageData.getItem('lastOrg');\r\n if (lastOrg && orgData.org_list.findIndex(item => item.id === lastOrg) > -1) {\r\n this.setState({\r\n oragID: lastOrg\r\n });\r\n }\r\n }\r\n FetchApi.getOrg((result) => {\r\n if (result) {\r\n\r\n if (orgData && JSON.stringify(result) === JSON.stringify(orgData)) {\r\n return;\r\n }\r\n orgData = result;\r\n StorageData.setItem('org', result);\r\n this.setState({\r\n orgList: orgData.org_list\r\n });\r\n\r\n let lastOrg = StorageData.getItem('lastOrg');\r\n if (lastOrg && orgData.org_list.findIndex(item => item.id === lastOrg) > -1) {\r\n this.setState({\r\n oragID: lastOrg\r\n });\r\n }\r\n }\r\n });\r\n\r\n }\r\n\r\n doLogin = (loginSuccessCallback) => {\r\n FetchApi.login({\r\n //oragID: this.state.oragID || this.state.orgList[0].id,\r\n userName: this.state.userName,\r\n userPwd: md5(this.state.userPwd),\r\n secureCode: this.state.secureCode\r\n },\r\n (loginResult) => {\r\n if (loginResult.State !== '1') {\r\n document.querySelector('#txtPassword').focus();\r\n }\r\n else {\r\n StorageData.setItem('authUser', loginResult.Data);\r\n StorageData.setItem('lastOrg', loginResult.Data.OrgID);\r\n if (loginSuccessCallback) {\r\n loginSuccessCallback.call(window, loginResult.Data);\r\n }\r\n }\r\n });\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n
\r\n
    \r\n
  • \r\n
    \r\n \r\n
    \r\n
  • \r\n
  • \r\n
    \r\n { this.setState({ 'userName': e.target.value }) }} />\r\n
    \r\n
  • \r\n
  • \r\n
    \r\n { this.setState({ 'userPwd': e.target.value }) }} />\r\n
    \r\n
  • \r\n
  • \r\n
    \r\n { this.setState({ 'secureCode': e.target.value }) }} />\r\n
    \r\n
  • \r\n
  • \r\n
    \r\n 登录\r\n 返回\r\n
    \r\n
  • \r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default Login;\r\n","import React, { Fragment } from 'react';\r\nimport FetchApi from '../tools/FetchAPI';\r\nimport Grid from './Grid';\r\nimport './Seek.css'\r\nimport './Grid.css'\r\n\r\nclass Seek extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n columns: [],\r\n data: [],\r\n filterField: props.filterField,\r\n filterKeyword: ''\r\n };\r\n }\r\n\r\n static defaultProps = {\r\n seekName: '',\r\n seekTitle: '',\r\n seekQuery: null, // seek查询参数,类型为对象,可以是函数\r\n filterField: '',\r\n onConfirm: () => { },\r\n onCancel: () => { }\r\n }\r\n\r\n componentDidMount() {\r\n if (this.props.seekName) {\r\n this.filterData();\r\n }\r\n }\r\n\r\n filterData = () => {\r\n let param = {\r\n seek: this.props.seekName\r\n }\r\n\r\n let query = {};\r\n if (this.props.seekQuery != null) {\r\n if (typeof this.props.seekQuery === 'function') {\r\n query = this.props.seekQuery() || {};\r\n }\r\n else if (typeof this.props.seekQuery === 'object') {\r\n query = this.props.seekQuery;\r\n }\r\n }\r\n if (this.state.filterKeyword) {\r\n query = Object.assign(query, {\r\n $fields: this.state.filterField || this.state.columns[0].FieldName,\r\n $keyword: this.state.filterKeyword\r\n });\r\n }\r\n if (Object.keys(query).length > 0) {\r\n param.queryString = JSON.stringify(query);\r\n }\r\n\r\n FetchApi.get('/API/Seek/GetSeek', param, (result) => {\r\n if (result && result.success) {\r\n this.setState({\r\n columns: result.dataObj,\r\n data: result.data\r\n });\r\n }\r\n });\r\n }\r\n\r\n getSelectedData = () => {\r\n return this.grid.getSelectedData()\r\n }\r\n\r\n\r\n render() {\r\n return (\r\n \r\n
\r\n
\r\n
{this.props.seekTitle}
\r\n
\r\n \r\n { this.setState({ 'filterKeyword': e.target.value }) }}\r\n onKeyPress={e => { e.which === 13 && this.filterData() }}>\r\n 查询\r\n
\r\n this.grid = ref} >\r\n
\r\n
\r\n 选择\r\n 取消\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default Seek;\r\n","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport Seek from './Seek';\r\nimport './DataSelector.css'\r\n\r\n\r\nclass DataSelector extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n };\r\n }\r\n\r\n static defaultProps = {\r\n title: \"\",\r\n values: [],\r\n seek: \"\",\r\n seekQuery: null,\r\n filterField: '',\r\n afterSetValue: () => { } // seek回调函数 \r\n }\r\n\r\n selectBySeek = () => {\r\n const holder = document.createElement('div');\r\n document.body.appendChild(holder);\r\n\r\n ReactDOM.render(\r\n this.seek = ref}\r\n onConfirm={() => {\r\n var seekData = this.seek.getSelectedData();\r\n if (seekData) {\r\n this.props.afterSetValue(seekData);\r\n document.body.removeChild(holder);\r\n }\r\n }}\r\n onCancel={() => {\r\n document.body.removeChild(holder);\r\n }}\r\n >,\r\n holder\r\n );\r\n }\r\n\r\n deleteItem = (e) => {\r\n this.props.afterSetValue(parseFloat(e.target.parentNode.dataset.index));\r\n //e.target.parentNode.remove();\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n \r\n
\r\n
\r\n {\r\n this.props.values.map((x, i) => {\r\n return \r\n {x.name}\r\n \r\n \r\n })\r\n }\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n )\r\n }\r\n}\r\nexport default DataSelector","import React, { Fragment } from 'react';\r\nimport FetchApi from './tools/FetchAPI';\r\nimport StorageData from './tools/StorageData';\r\nimport DataSelector from './control/DataSelector';\r\nimport './css/iconfont.css'\r\nimport { normalizeUnits } from 'moment';\r\n\r\nclass UserCenter extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n page: 'default', //default,workshop \r\n wsWsts: [],// 选择的工序\r\n wsMcms: [],// 选择的机台\r\n wsEmps: [],// 选择的人员\r\n wsts: [],// 选择的工序 \r\n mcms: [],// 选择的机台\r\n emps: [],// 选择的人员\r\n depts: [],// 选择的部门\r\n cates: [],// 订单单别(订单进度电子看板)\r\n gdnos: [],// 货品编号(订单进度电子看板)\r\n prusers: [],// 项目负责人(订单进度电子看板)\r\n qrusers: [],// 钳工负责人(订单进度电子看板)\r\n itemLevel: [],// 项次级别(订单进度电子看板)\r\n days: 30,// 显示天数(订单进度电子看板)\r\n scenes: [],// 选择的场景(设备监控电子看板)\r\n mcmDays: 1, // 显示天数(设备监控电子看板)\r\n fixInCod2s: [], // 类别(工模器具电子看板)\r\n fixChanges: [], // 状态(工模器具电子看板)\r\n fixSerialNums: [], // 序号(工模器具电子看板)\r\n };\r\n }\r\n\r\n static defaultProps = {\r\n visible: false,\r\n onConfirm: () => { },\r\n onCancel: () => { },\r\n onPageChanged: (page) => { }\r\n }\r\n\r\n componentDidMount() {\r\n let authUser = StorageData.getItem('authUser');\r\n if (authUser) {\r\n\r\n if (typeof authUser !== 'object') {\r\n authUser = JSON.parse(authUser);\r\n }\r\n\r\n this.setState({\r\n OrgName: authUser.OrgName,\r\n UserName: authUser.UserName\r\n })\r\n }\r\n\r\n let defaultPage = StorageData.getItem('defaultPage');\r\n if (defaultPage) {\r\n this.setState({\r\n 'defaultPage': defaultPage\r\n });\r\n\r\n this.setState({ wsWsts: StorageData.getObject(\"wsWsts\") || [] });\r\n this.setState({ wsMcms: StorageData.getObject(\"wsMcms\") || [] });\r\n this.setState({ wsEmps: StorageData.getObject(\"wsEmps\") || [] });\r\n this.setState({ wsts: StorageData.getObject(\"wsts\") || [] });\r\n this.setState({ mcms: StorageData.getObject(\"mcms\") || [] });\r\n this.setState({ emps: StorageData.getObject(\"emps\") || [] });\r\n this.setState({ depts: StorageData.getObject(\"depts\") || [] });\r\n this.setState({ cates: StorageData.getObject(\"cates\") || [] });\r\n this.setState({ gdnos: StorageData.getObject(\"gdnos\") || [] });\r\n this.setState({ prusers: StorageData.getObject(\"prusers\") || [] });\r\n this.setState({ qrusers: StorageData.getObject(\"qrusers\") || [] });\r\n this.setState({ itemLevel: StorageData.getObject(\"itemLevel\") || [] });\r\n this.setState({ days: StorageData.getObject(\"days\") || 30 });\r\n this.setState({ scenes: StorageData.getObject(\"scenes\") || [] });\r\n this.setState({ mcmDays: StorageData.getObject(\"mcmDays\") || [] });\r\n this.setState({ fixInCod2s: StorageData.getObject(\"fixInCod2s\") || [] });\r\n this.setState({ fixChanges: StorageData.getObject(\"fixChanges\") || [] });\r\n this.setState({ fixSerialNums: StorageData.getObject(\"fixSerialNums\") || [] });\r\n }\r\n }\r\n\r\n doLogout = async (callback) => {\r\n FetchApi.logout(() => {\r\n StorageData.removeItem('authUser');\r\n FetchApi.authUser = null;\r\n\r\n if (callback) {\r\n callback.call(window);\r\n }\r\n });\r\n }\r\n\r\n handlePageChange = (e) => {\r\n this.setState({ defaultPage: e.target.value });\r\n StorageData.setItem('defaultPage', e.target.value);\r\n this.props.onPageChanged(e.target.value);\r\n }\r\n handleSettingChange = (wsts) => {\r\n this.props.onPageChanged(this.state.defaultPage, wsts);\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n
\r\n
    \r\n
    \r\n \r\n
    \r\n
  • \r\n
    \r\n 账户\r\n
    \r\n
    \r\n {this.state.OrgName} / {this.state.UserName}\r\n 注销\r\n
    \r\n
  • \r\n
  • \r\n
    \r\n 看板选择\r\n
    \r\n
    \r\n
      \r\n
    • \r\n
    • \r\n
    • \r\n {\r\n this.state.defaultPage === 'sdsProgress' ? (\r\n
      \r\n
      \r\n { return { fun_id: '2d40ec3d-7151-496c-9bf9-da8fdb69e3b6' } }}\r\n afterSetValue={(result) => {\r\n let cates = this.state.cates;\r\n if (typeof result === \"number\") {\r\n if (cates.length > result) {\r\n cates.splice(result, 1);\r\n this.setState({ cates: cates });\r\n }\r\n }\r\n else {\r\n if (!cates.find(x => x.id === result.ID)) {\r\n cates.push({\r\n id: result.ID,\r\n name: result.cateName\r\n });\r\n this.setState({\r\n cates: cates\r\n });\r\n }\r\n }\r\n StorageData.setItem(\"cates\", cates);\r\n this.handleSettingChange({\r\n cates: cates,\r\n gdnos: this.state.gdnos,\r\n prusers: this.state.prusers,\r\n qrusers: this.state.qrusers,\r\n itemLevel: this.state.itemLevel,\r\n days: this.state.days\r\n });\r\n }}\r\n >\r\n {\r\n let gdnos = this.state.gdnos;\r\n if (typeof result === \"number\") {\r\n if (gdnos.length > result) {\r\n gdnos.splice(result, 1);\r\n this.setState({ gdnos: gdnos });\r\n }\r\n }\r\n else {\r\n if (!gdnos.find(x => x.id === result.ID)) {\r\n gdnos.push({\r\n id: result.ID,\r\n name: result.GdCode\r\n });\r\n this.setState({\r\n gdnos: gdnos\r\n });\r\n }\r\n }\r\n StorageData.setItem(\"gdnos\", gdnos);\r\n this.handleSettingChange({\r\n cates: this.state.cates,\r\n gdnos: gdnos,\r\n prusers: this.state.prusers,\r\n qrusers: this.state.qrusers,\r\n itemLevel: this.state.itemLevel,\r\n days: this.state.days\r\n });\r\n }}\r\n >\r\n {\r\n let prusers = this.state.prusers;\r\n if (typeof result === \"number\") {\r\n if (prusers.length > result) {\r\n prusers.splice(result, 1);\r\n this.setState({ prusers: prusers });\r\n }\r\n }\r\n else {\r\n if (!prusers.find(x => x.id === result.id)) {\r\n prusers.push({\r\n id: result.id,\r\n name: result.name\r\n });\r\n this.setState({\r\n prusers: prusers\r\n });\r\n }\r\n }\r\n StorageData.setItem(\"prusers\", prusers);\r\n this.handleSettingChange({\r\n gdnos: this.state.gdnos,\r\n cates: this.state.cates,\r\n prusers: prusers,\r\n qrusers: this.state.qrusers,\r\n itemLevel: this.state.itemLevel,\r\n days: this.state.days\r\n });\r\n }}\r\n >\r\n {\r\n let qrusers = this.state.qrusers;\r\n if (typeof result === \"number\") {\r\n if (qrusers.length > result) {\r\n qrusers.splice(result, 1);\r\n this.setState({ qrusers: qrusers });\r\n }\r\n }\r\n else {\r\n if (!qrusers.find(x => x.id === result.id)) {\r\n qrusers.push({\r\n id: result.id,\r\n name: result.name\r\n });\r\n this.setState({\r\n qrusers: qrusers\r\n });\r\n }\r\n }\r\n StorageData.setItem(\"qrusers\", qrusers);\r\n this.handleSettingChange({\r\n gdnos: this.state.gdnos,\r\n cates: this.state.cates,\r\n prusers: this.state.prusers,\r\n qrusers: qrusers,\r\n itemLevel: this.state.itemLevel,\r\n days: this.state.days\r\n });\r\n }}\r\n >\r\n
      \r\n \r\n
      \r\n {\r\n // e.target.select();\r\n // }}\r\n onChange={(e) => {\r\n let itemLevel = Number(e.target.value) || 0;\r\n this.setState({ itemLevel: itemLevel });\r\n StorageData.setItem(\"itemLevel\", itemLevel);\r\n this.handleSettingChange({\r\n gdnos: this.state.gdnos,\r\n cates: this.state.cates,\r\n prusers: this.state.prusers,\r\n qrusers: this.state.qrusers,\r\n itemLevel: itemLevel,\r\n days: this.state.days\r\n });\r\n }}\r\n style={{\r\n color: '#73aae5',\r\n background: 'none',\r\n border: 0,\r\n width: '100%'\r\n }}>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
      \r\n
      \r\n
      \r\n \r\n
      \r\n {\r\n e.target.select();\r\n }}\r\n onChange={(e) => {\r\n let days = Number(e.target.value) || 30;\r\n this.setState({ days: days });\r\n StorageData.setItem(\"days\", days);\r\n this.handleSettingChange({\r\n gdnos: this.state.gdnos,\r\n cates: this.state.cates,\r\n prusers: this.state.prusers,\r\n qrusers: this.state.qrusers,\r\n itemLevel: this.state.itemLevel,\r\n days: days\r\n });\r\n }}\r\n style={{\r\n color: '#73aae5',\r\n background: 'none',\r\n border: 0,\r\n width: '100%',\r\n padding: '.2em .4em'\r\n }} />\r\n
      \r\n
      \r\n
      \r\n
      \r\n
      \r\n
      ) : null\r\n }\r\n
    • \r\n
    • \r\n {\r\n this.state.defaultPage === 'workshop' ? (\r\n
      \r\n {\r\n let wsts = this.state.wsWsts;\r\n if (typeof result === \"number\") {\r\n if (wsts.length > result) {\r\n wsts.splice(result, 1);\r\n this.setState({ wsWsts: wsts });\r\n }\r\n }\r\n else {\r\n if (!wsts.find(x => x.id === result.Wst_ID)) {\r\n wsts.push({\r\n id: result.Wst_ID,\r\n name: result.wst_name\r\n });\r\n this.setState({\r\n wsWsts: wsts\r\n });\r\n }\r\n }\r\n\r\n\r\n StorageData.setItem(\"wsMcms\", []);\r\n StorageData.setItem(\"wsEmps\", []);\r\n this.setState({\r\n wsMcms: [],\r\n wsEmps: []\r\n });\r\n\r\n StorageData.setItem(\"wsWsts\", wsts);\r\n this.handleSettingChange(wsts);\r\n }}\r\n >\r\n {\r\n return {\r\n 'wst_ID': this.state.wsWsts.map(item => { return item.id }).join(',')\r\n }\r\n }}\r\n afterSetValue={(result) => {\r\n let mcms = this.state.wsMcms;\r\n if (typeof result === \"number\") {\r\n if (mcms.length > result) {\r\n mcms.splice(result, 1);\r\n this.setState({ wsMcms: mcms });\r\n }\r\n }\r\n else {\r\n if (!mcms.find(x => x.id === result.ID)) {\r\n mcms.push({\r\n id: result.ID,\r\n name: result.mcm_name\r\n });\r\n this.setState({\r\n wsMcms: mcms\r\n });\r\n }\r\n }\r\n StorageData.setItem(\"wsMcms\", mcms);\r\n this.handleSettingChange(this.state.wsWsts);\r\n }}\r\n >\r\n {\r\n return {\r\n 'wstID': this.state.wsWsts.map(item => { return item.id }).join(',')\r\n }\r\n }}\r\n afterSetValue={(result) => {\r\n let emps = this.state.wsEmps;\r\n if (typeof result === \"number\") {\r\n if (emps.length > result) {\r\n emps.splice(result, 1);\r\n this.setState({ wsEmps: emps });\r\n }\r\n }\r\n else {\r\n if (!emps.find(x => x.id === result.ID)) {\r\n emps.push({\r\n id: result.ID,\r\n name: result.emp_nam\r\n });\r\n this.setState({\r\n wsEmps: emps\r\n });\r\n }\r\n }\r\n StorageData.setItem(\"wsEmps\", emps);\r\n this.handleSettingChange(this.state.wsWsts);\r\n }}\r\n >\r\n
      ) : null\r\n }\r\n
    • \r\n
    • \r\n {\r\n this.state.defaultPage === 'empPerformance' ? (\r\n
      \r\n {\r\n let wsts = this.state.wsts;\r\n if (typeof result === \"number\") {\r\n if (wsts.length > result) {\r\n wsts.splice(result, 1);\r\n this.setState({ wsts: wsts });\r\n }\r\n }\r\n else {\r\n if (!wsts.find(x => x.id === result.Wst_ID)) {\r\n wsts.push({\r\n id: result.Wst_ID,\r\n name: result.wst_name\r\n });\r\n this.setState({\r\n wsts: wsts\r\n });\r\n }\r\n }\r\n\r\n\r\n StorageData.setItem(\"mcms\", []);\r\n StorageData.setItem(\"emps\", []);\r\n this.setState({\r\n mcms: [],\r\n emps: []\r\n });\r\n\r\n StorageData.setItem(\"wsts\", wsts);\r\n this.handleSettingChange(wsts);\r\n }}\r\n >\r\n {\r\n return {\r\n //'wstID': this.state.wsts.map(item => { return item.id }).join(',')\r\n }\r\n }}\r\n afterSetValue={(result) => {\r\n let emps = this.state.emps;\r\n if (typeof result === \"number\") {\r\n if (emps.length > result) {\r\n emps.splice(result, 1);\r\n this.setState({ emps: emps });\r\n }\r\n }\r\n else {\r\n if (!emps.find(x => x.id === result.ID)) {\r\n emps.push({\r\n id: result.ID,\r\n name: result.emp_nam\r\n });\r\n this.setState({\r\n emps: emps\r\n });\r\n }\r\n }\r\n StorageData.setItem(\"emps\", emps);\r\n this.handleSettingChange(this.state.wsts);\r\n }}\r\n >\r\n
      ) : null\r\n }\r\n
    • \r\n
    • \r\n {\r\n this.state.defaultPage === 'mcmState' ? (\r\n
      \r\n {\r\n let scenes = this.state.scenes;\r\n if (typeof result === \"number\") {\r\n if (scenes.length > result) {\r\n scenes.splice(result, 1);\r\n this.setState({ scenes: scenes });\r\n }\r\n }\r\n else {\r\n if (!scenes.find(x => x.id === result.ID)) {\r\n scenes.push({\r\n id: result.ID,\r\n name: result.chart_name\r\n });\r\n this.setState({\r\n scenes: scenes\r\n });\r\n }\r\n }\r\n StorageData.setItem(\"scenes\", scenes);\r\n this.handleSettingChange(this.state.scenes);\r\n }}\r\n >\r\n
      \r\n \r\n
      \r\n {\r\n e.target.select();\r\n }}\r\n onChange={(e) => {\r\n let mcmDays = Number(e.target.value) || 3;\r\n this.setState({ mcmDays: mcmDays });\r\n StorageData.setItem(\"mcmDays\", mcmDays);\r\n }}\r\n style={{\r\n color: '#73aae5',\r\n background: 'none',\r\n border: 0,\r\n width: '100%',\r\n padding: '.2em .4em'\r\n }} />\r\n
      \r\n
      \r\n
      \r\n
      \r\n
      \r\n ) : null\r\n }\r\n
    • \r\n
    • \r\n {\r\n this.state.defaultPage === 'qcAbnormal' ? (\r\n
      \r\n {\r\n return {\r\n 'orgid': StorageData.getItem('lastOrg'),\r\n }\r\n }}\r\n afterSetValue={(result) => {\r\n let depts = this.state.depts;\r\n if (typeof result === \"number\") {\r\n if (depts.length > result) {\r\n depts.splice(result, 1);\r\n this.setState({ depts: depts });\r\n }\r\n }\r\n else {\r\n if (!depts.find(x => x.id === result.ID)) {\r\n depts.push({\r\n id: result.ID,\r\n name: result.name\r\n });\r\n this.setState({\r\n depts: depts\r\n });\r\n }\r\n }\r\n StorageData.setItem(\"depts\", depts);\r\n this.handleSettingChange(this.state.depts);\r\n }}\r\n >\r\n
      \r\n ) : null\r\n }\r\n
    • \r\n
    • \r\n {\r\n this.state.defaultPage === 'productionStatus' ? (\r\n
      \r\n\r\n
      \r\n ) : null\r\n }\r\n
    • \r\n
    • \r\n {\r\n this.state.defaultPage === 'mmsFixture' ? (\r\n
      \r\n {\r\n let _data = this.state.fixInCod2s;\r\n if (typeof result === \"number\") {\r\n if (_data.length > result) {\r\n _data.splice(result, 1);\r\n this.setState({ fixInCod2s: _data });\r\n }\r\n }\r\n else {\r\n if (!_data.find(x => x.id === result.ID)) {\r\n _data.push({\r\n id: result.ID,\r\n name: result.InName\r\n });\r\n this.setState({\r\n fixInCod2s: _data\r\n });\r\n }\r\n }\r\n StorageData.setItem(\"fixInCod2s\", _data);\r\n this.handleSettingChange(_data);\r\n }}\r\n >\r\n {\r\n let _data = this.state.fixChanges;\r\n if (typeof result === \"number\") {\r\n if (_data.length > result) {\r\n _data.splice(result, 1);\r\n this.setState({ fixChanges: _data });\r\n }\r\n }\r\n else {\r\n if (!_data.find(x => x.id === result.ID)) {\r\n _data.push({\r\n id: result.ID,\r\n name: result.wordb_name\r\n });\r\n this.setState({\r\n fixChanges: _data\r\n });\r\n }\r\n }\r\n StorageData.setItem(\"fixChanges\", _data);\r\n this.handleSettingChange(_data);\r\n }}\r\n >\r\n {\r\n let _data = this.state.fixSerialNums;\r\n if (typeof result === \"number\") {\r\n if (_data.length > result) {\r\n _data.splice(result, 1);\r\n this.setState({ fixSerialNums: _data });\r\n }\r\n }\r\n else {\r\n if (!_data.find(x => x.id === result.fixa_id)) {\r\n _data.push({\r\n id: result.fixa_id,\r\n name: result.Serial_num\r\n });\r\n this.setState({\r\n fixSerialNums: _data\r\n });\r\n }\r\n }\r\n StorageData.setItem(\"fixSerialNums\", _data);\r\n this.handleSettingChange(_data);\r\n }}\r\n >\r\n
      \r\n ) : null\r\n }\r\n
    • \r\n
    \r\n
    \r\n
  • \r\n
  • \r\n
    {window.screen.width + ' x ' + window.screen.height + ' DPR=' + window.devicePixelRatio.toFixed(2)}
    \r\n
  • \r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default UserCenter;\r\n","// This optional code is used to register a service worker.\r\n// register() is not called by default.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on subsequent visits to a page, after all the\r\n// existing tabs open on the page have been closed, since previously cached\r\n// resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model and instructions on how to\r\n// opt-in, read https://bit.ly/CRA-PWA\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === 'localhost' ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === '[::1]' ||\r\n // 127.0.0.0/8 are considered localhost for IPv4.\r\n window.location.hostname.match(\r\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n )\r\n);\r\n\r\nexport function register(config) {\r\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\r\n return;\r\n }\r\n\r\n window.addEventListener('load', () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n\r\n if (isLocalhost) {\r\n // This is running on localhost. Let's check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl, config);\r\n\r\n // Add some additional logging to localhost, pointing developers to the\r\n // service worker/PWA documentation.\r\n navigator.serviceWorker.ready.then(() => {\r\n console.log(\r\n 'This web app is being served cache-first by a service ' +\r\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\r\n );\r\n });\r\n } else {\r\n // Is not localhost. Just register service worker\r\n registerValidSW(swUrl, config);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW(swUrl, config) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then(registration => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing;\r\n if (installingWorker == null) {\r\n return;\r\n }\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the updated precached content has been fetched,\r\n // but the previous service worker will still serve the older\r\n // content until all client tabs are closed.\r\n console.log(\r\n 'New content is available and will be used when all ' +\r\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\r\n );\r\n\r\n // Execute callback\r\n if (config && config.onUpdate) {\r\n config.onUpdate(registration);\r\n }\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // \"Content is cached for offline use.\" message.\r\n console.log('Content is cached for offline use.');\r\n\r\n // Execute callback\r\n if (config && config.onSuccess) {\r\n config.onSuccess(registration);\r\n }\r\n }\r\n }\r\n };\r\n };\r\n })\r\n .catch(error => {\r\n console.error('Error during service worker registration:', error);\r\n });\r\n}\r\n\r\nfunction checkValidServiceWorker(swUrl, config) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl, {\r\n headers: { 'Service-Worker': 'script' },\r\n })\r\n .then(response => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n const contentType = response.headers.get('content-type');\r\n if (\r\n response.status === 404 ||\r\n (contentType != null && contentType.indexOf('javascript') === -1)\r\n ) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister().then(() => {\r\n window.location.reload();\r\n });\r\n });\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl, config);\r\n }\r\n })\r\n .catch(() => {\r\n console.log(\r\n 'No internet connection found. App is running in offline mode.'\r\n );\r\n });\r\n}\r\n\r\nexport function unregister() {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready\r\n .then(registration => {\r\n registration.unregister();\r\n })\r\n .catch(error => {\r\n console.error(error.message);\r\n });\r\n }\r\n}\r\n","// 兼容性导入以下几个方法(旧版Chrome不支持) \r\nimport 'react-app-polyfill/ie11';\r\nimport 'core-js/features/array/find';\r\nimport 'core-js/features/array/find-index';\r\n\r\nimport React, { Fragment } from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport Default from './Default';\r\nimport WorkShop from './WorkShop';\r\nimport EmpPerformance from './EmpPerformance';\r\nimport SdsProgress from './SdsProgress';\r\nimport QcAbnormal from './QcAbnormal';\r\nimport McmState from './McmState.class';\r\nimport ProductionStatus from './ProductionStatus';\r\nimport MmsFixture from './MmsFixture';\r\nimport StorageData from './tools/StorageData';\r\nimport moment from 'moment';\r\nimport Login from './Login';\r\nimport UserCenter from './UserCenter';\r\nimport FetchApi from './tools/FetchAPI';\r\nimport './App.css';\r\nimport './index.css';\r\nimport Logo from './img/logo.png';\r\nimport ImgColor from './img/kbColors.png';\r\n\r\nimport * as serviceWorker from './serviceWorker';\r\nimport { color } from 'echarts';\r\n\r\nclass B9KB extends React.Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n defaultPage: '',\r\n appTitle: '',\r\n welcomeShowIf: false,\r\n welcomeImgIndex: 0,\r\n autoRefresh: true,\r\n colorShowIf: false,\r\n };\r\n this.pages = [\r\n { name: 'default', title: '智慧工厂智能电子看板系统' },\r\n { name: 'sdsProgress', title: '智慧工厂订单进度电子看板' },\r\n { name: 'workshop', title: '智慧工厂现场加工电子看板' },\r\n { name: 'empPerformance', title: '智慧工厂人员绩效电子看板' },\r\n { name: 'mcmState', title: '智慧工厂设备监控电子看板' },\r\n { name: 'qcAbnormal', title: '智慧工厂异常报告电子看板' },\r\n { name: 'productionStatus', title: '智慧工厂生产状况电子看板' },\r\n { name: 'mmsFixture', title: '智慧工厂工模器具电子看板' },\r\n ];\r\n this.isFullScreen = false;\r\n this.onLogoClick = this.onLogoClick.bind(this);\r\n this.welcomeImgs = window.config.welcomeImages.map(\r\n item => `${process.env.PUBLIC_URL}/${item}?time=${new Date().getTime()}`\r\n );\r\n this.welcomeSignInImg = `${process.env.PUBLIC_URL}/wel-sign-in.png?time=${new Date().getTime()}`;\r\n this.welcomeTimer = 0;\r\n }\r\n\r\n componentWillMount() {\r\n\r\n this.clockTimer = setInterval(() => {\r\n this.setState({\r\n now: new Date()\r\n });\r\n }, 1000);\r\n\r\n StorageData.init()\r\n .then(async () => {\r\n\r\n let page = StorageData.getItem('defaultPage') || 'default';\r\n await this.setState({\r\n defaultPage: page,\r\n appTitle: this.pages.find(x => x.name === page).title\r\n });\r\n\r\n // 如有授权码,则自动开始刷新 \r\n FetchApi.authUser = StorageData.getItem('authUser');\r\n if (FetchApi.authUser) {\r\n if (typeof FetchApi.authUser !== 'object') {\r\n FetchApi.authUser = JSON.parse(FetchApi.authUser);\r\n }\r\n this.initUserInfo(FetchApi.authUser);\r\n } else {\r\n this.showLogin();\r\n }\r\n\r\n })\r\n .catch((msg) => {\r\n console.log(msg);\r\n this.setState({ initError: msg });\r\n // let error = JSON.parse(msg);\r\n // alert(error.message);\r\n })\r\n\r\n }\r\n\r\n initUserInfo(authUser) {\r\n\r\n if (authUser) {\r\n this.setState({\r\n userName: authUser.UserName,\r\n orgName: authUser.OrgName,\r\n });\r\n if (this.App && this.App.beginRefresh) {\r\n this.App.beginRefresh();\r\n }\r\n }\r\n }\r\n\r\n showLogin = () => {\r\n\r\n const holder = document.createElement('div');\r\n document.body.appendChild(holder);\r\n\r\n ReactDOM.render( {\r\n this.loginChild.doLogin((authUser) => {\r\n this.initUserInfo(authUser);\r\n if (this.App && this.App.clearAllTimer) {\r\n this.App.clearAllTimer();\r\n }\r\n document.body.removeChild(holder);\r\n });\r\n }}\r\n onCancel={() => {\r\n console.log(\"login close\")\r\n document.body.removeChild(holder);\r\n }}\r\n ref={ref => { this.loginChild = ref; }}\r\n >, holder);\r\n }\r\n\r\n showUserCenter = () => {\r\n\r\n const holder = document.createElement('div');\r\n document.body.appendChild(holder);\r\n\r\n let switchTo = null;\r\n\r\n ReactDOM.render( {\r\n\r\n this.userCenter.doLogout(() => {\r\n\r\n this.setState({\r\n orgName: null,\r\n userName: null\r\n });\r\n document.body.removeChild(holder);\r\n });\r\n }}\r\n onCancel={() => {\r\n document.body.removeChild(holder);\r\n\r\n if (switchTo !== null) {\r\n this.setState({\r\n defaultPage: switchTo.page,\r\n appTitle: this.pages.find(x => x.name === switchTo.page).title\r\n }, () => {\r\n if (FetchApi.authUser) {\r\n if (this.App && this.App.beginRefresh) {\r\n this.App.beginRefresh(switchTo.setting);\r\n }\r\n }\r\n });\r\n }\r\n }}\r\n onPageChanged={async (page, setting) => {\r\n switchTo = {\r\n page: page,\r\n setting: setting\r\n };\r\n if (page === this.state.defaultPage && setting === undefined) {\r\n switchTo = null;\r\n }\r\n }}\r\n ref={ref => { this.userCenter = ref; }}\r\n >, holder);\r\n }\r\n\r\n updateHeader = (props) => {\r\n this.setState(props);\r\n }\r\n\r\n renderHeaderPart = () => {\r\n if (this.state.defaultPage === 'workshop'\r\n || this.state.defaultPage === 'empPerformance'\r\n || this.state.defaultPage === 'productionStatus') {\r\n return \r\n 工序:\r\n {this.state.workshopWsts || \"\"}\r\n ;\r\n }\r\n else if (this.state.defaultPage === 'default') {\r\n return \r\n 执行力:\r\n {this.state.workEfficiency || \"\"}\r\n \r\n }\r\n else if (this.state.defaultPage === 'sdsProgress'\r\n || this.state.defaultPage === 'mmsFixture') {\r\n return \r\n Total:\r\n {this.state.dataCount || \"\"}\r\n \r\n }\r\n else if (this.state.defaultPage === 'mcmState') {\r\n return \r\n \r\n {this.state.mcmScene || \"\"}\r\n \r\n }\r\n else if (this.state.defaultPage === 'qcAbnormal') {\r\n return \r\n \r\n {this.state.headerText || \"\"}\r\n \r\n }\r\n else {\r\n return \"\";\r\n }\r\n }\r\n\r\n toggleFullScreen = () => {\r\n // 全屏\r\n let el = this.isFullScreen ? document : document.documentElement;\r\n let rfs = this.isFullScreen\r\n ? (el.exitFullscreen || el.mozCancelFullScreen || el.webkitCancelFullScreen || el.msExitFullscreen)\r\n : (el.requestFullScreen || el.webkitRequestFullScreen || el.mozRequestFullScreen || el.msRequestFullscreen);\r\n if (typeof rfs !== \"undefined\" && rfs) {\r\n try {\r\n rfs.call(el);\r\n }\r\n catch { }\r\n this.isFullScreen = !this.isFullScreen;\r\n };\r\n }\r\n\r\n onLogoClick(e) {\r\n // 控制时间\r\n if (e.currentTarget.classList.contains('disable')) {\r\n return;\r\n }\r\n e.currentTarget.classList.add('disable');\r\n setTimeout(() => {\r\n document.querySelector('.logo').classList.remove('disable');\r\n }, 3 * 1000);\r\n // 跳转\r\n let currentIndex = this.pages.findIndex(x => x.name === this.state.defaultPage);\r\n currentIndex++;\r\n if (currentIndex > this.pages.length - 1) {\r\n currentIndex = 0;\r\n }\r\n this.setState({\r\n defaultPage: this.pages[currentIndex].name,\r\n appTitle: this.pages[currentIndex].title\r\n }, () => {\r\n StorageData.setItem('defaultPage', this.state.defaultPage);\r\n if (FetchApi.authUser) {\r\n if (this.App && this.App.beginRefresh) {\r\n this.App.beginRefresh();\r\n }\r\n }\r\n });\r\n }\r\n\r\n showWelcome(resetIf = true) {\r\n if (this.welcomeTimer) {\r\n clearInterval(this.welcomeTimer);\r\n }\r\n this.setState({\r\n welcomeImgIndex: resetIf ? 0 : this.state.welcomeImgIndex + 1 >= this.welcomeImgs.length ? 0 : this.state.welcomeImgIndex + 1,\r\n welcomeShowIf: true,\r\n });\r\n this.welcomeTimer = setInterval(() => {\r\n this.setState({\r\n welcomeImgIndex: this.state.welcomeImgIndex + 1 >= this.welcomeImgs.length ? 0 : this.state.welcomeImgIndex + 1,\r\n });\r\n }, 20 * 1000);\r\n if (!this.isFullScreen) {\r\n this.toggleFullScreen();\r\n }\r\n }\r\n\r\n hideWelcome() {\r\n if (this.welcomeTimer) {\r\n clearInterval(this.welcomeTimer);\r\n }\r\n this.setState({\r\n welcomeShowIf: false,\r\n welcomeImgIndex: 0,\r\n });\r\n if (!this.isFullScreen) {\r\n this.toggleFullScreen();\r\n }\r\n }\r\n\r\n activeAutoRefresh() {\r\n this.setState({\r\n autoRefresh: !this.state.autoRefresh\r\n });\r\n }\r\n\r\n showColorBoard = () => {\r\n this.setState({ colorShowIf: !this.state.colorShowIf });\r\n }\r\n\r\n render() {\r\n\r\n let page = null;\r\n if (this.state.defaultPage === 'workshop') {\r\n page = { this.App = ref }}\r\n updateHeader={this.updateHeader}\r\n autoRefresh={this.state.autoRefresh} />;\r\n }\r\n else if (this.state.defaultPage === 'default') {\r\n page = { this.App = ref }}\r\n updateHeader={this.updateHeader} />;\r\n }\r\n else if (this.state.defaultPage === 'empPerformance') {\r\n page = { this.App = ref }}\r\n updateHeader={this.updateHeader}\r\n autoRefresh={this.state.autoRefresh} />;\r\n }\r\n else if (this.state.defaultPage === 'sdsProgress') {\r\n page = { this.App = ref }}\r\n updateHeader={this.updateHeader}\r\n autoRefresh={this.state.autoRefresh} />;\r\n }\r\n else if (this.state.defaultPage === 'mcmState') {\r\n page = { this.App = ref }}\r\n updateHeader={this.updateHeader}\r\n autoRefresh={this.state.autoRefresh} />;\r\n }\r\n else if (this.state.defaultPage === 'qcAbnormal') {\r\n page = { this.App = ref }}\r\n updateHeader={this.updateHeader}\r\n autoRefresh={this.state.autoRefresh} />;\r\n }\r\n else if (this.state.defaultPage === 'productionStatus') {\r\n page = { this.App = ref }}\r\n updateHeader={this.updateHeader}\r\n autoRefresh={this.state.autoRefresh} />;\r\n }\r\n else if (this.state.defaultPage === 'mmsFixture') {\r\n page = { this.App = ref }}\r\n updateHeader={this.updateHeader}\r\n autoRefresh={this.state.autoRefresh} />;\r\n }\r\n else {\r\n return
\r\n

Please waiting...

\r\n

userAgent: {window.navigator.userAgent}

\r\n

{this.state.initError}

\r\n
;\r\n }\r\n\r\n return (\r\n \r\n
\r\n
\r\n

{this.state.appTitle}

\r\n
\r\n \r\n {this.renderHeaderPart()}\r\n
\r\n
\r\n \r\n {moment(this.state.now).format('YYYY-MM-DD HH:mm:ss')}\r\n \r\n {this.state.orgName}\r\n {this.state.userName}\r\n 登录\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {page}\r\n
\r\n \r\n {\r\n this.welcomeImgs.map((item, index) =>\r\n \r\n )\r\n }\r\n \r\n
\r\n \r\n \r\n \r\n \r\n );\r\n }\r\n\r\n componentDidMount() {\r\n\r\n // // 缩放 \r\n // var zoom = 1;\r\n // if (document.body.clientWidth < 1500 || document.body.clientHeight < 900) {\r\n // zoom = Math.min(document.body.clientWidth / 1500, document.body.clientHeight / 900);\r\n // if (zoom < .5) {\r\n // zoom = .5;\r\n // }\r\n // }\r\n // console.log('set zoom=' + zoom);\r\n // document.body.style.zoom = zoom;\r\n\r\n }\r\n}\r\n\r\nReactDOM.render(\r\n \r\n \r\n ,\r\n document.getElementById('root')\r\n)\r\n\r\n// If you want your app to work offline and load faster, you can change\r\n// unregister() to register() below. Note this comes with some pitfalls.\r\n// Learn more about service workers: https://bit.ly/CRA-PWA\r\nserviceWorker.unregister();"],"sourceRoot":""}