-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy path.eslintcache
1 lines (1 loc) · 346 KB
/
.eslintcache
1
[{"G:\\react-flowable\\src\\index.js":"1","G:\\react-flowable\\src\\reportWebVitals.js":"2","G:\\react-flowable\\src\\App.js":"3","G:\\react-flowable\\src\\router\\Router.js":"4","G:\\react-flowable\\src\\pages\\NewForm\\NewForm.jsx":"5","G:\\react-flowable\\src\\pages\\Customize\\Customize.jsx":"6","G:\\react-flowable\\src\\pages\\ShowForm\\ShowForm.jsx":"7","G:\\react-flowable\\src\\pages\\EditForm\\EditForm.jsx":"8","G:\\react-flowable\\src\\pages\\process\\Process.jsx":"9","G:\\react-flowable\\src\\pages\\Transform\\Transform.jsx":"10","G:\\react-flowable\\src\\pages\\NeedToDeal\\NeedToDeal.jsx":"11","G:\\react-flowable\\src\\pages\\StartForm\\StartForm.jsx":"12","G:\\react-flowable\\src\\pages\\HistoryFlow\\HistoryFlow.jsx":"13","G:\\react-flowable\\src\\pages\\FlowPermission\\FlowPermission.jsx":"14","G:\\react-flowable\\src\\pages\\StartPermission\\StartPermission.jsx":"15","G:\\react-flowable\\src\\pages\\SetFlowForm\\SetFlowForm.jsx":"16","G:\\react-flowable\\src\\pages\\DoneDeal\\DoneDeal.jsx":"17","G:\\react-flowable\\src\\pages\\EventList\\EventList.jsx":"18","G:\\react-flowable\\src\\pages\\TestFrGenerator\\TestFrGenerator.jsx":"19","G:\\react-flowable\\src\\pages\\EventTypeList\\EventTypeList.jsx":"20","G:\\react-flowable\\src\\pages\\ExtraForm\\ExtraForm.jsx":"21","G:\\react-flowable\\src\\apis\\process.js":"22","G:\\react-flowable\\src\\utils\\config.js":"23","G:\\react-flowable\\src\\libs\\FormRenderWidgets\\FormRenderWidgets.js":"24","G:\\react-flowable\\src\\libs\\transform\\transform.js":"25","G:\\react-flowable\\src\\libs\\configSchema\\configSchema.js":"26","G:\\react-flowable\\src\\pages\\EventOperation\\EventOperation.jsx":"27","G:\\react-flowable\\src\\components\\ProductInfo\\ProductInfo.jsx":"28","G:\\react-flowable\\src\\components\\UploadFile\\UploadFile.jsx":"29","G:\\react-flowable\\src\\components\\NoData\\NoData.jsx":"30","G:\\react-flowable\\src\\utils\\request.js":"31","G:\\react-flowable\\src\\components\\DateTimePicker\\DateTimePicker.jsx":"32","G:\\react-flowable\\src\\components\\MultiSelect\\MultiSelect.jsx":"33","G:\\react-flowable\\src\\components\\CodeGenerator\\CodeGenerator.jsx":"34","G:\\react-flowable\\src\\components\\CityPicker\\CityPicker.jsx":"35","G:\\react-flowable\\src\\components\\SearchSelect\\SearchSelect.jsx":"36","G:\\react-flowable\\src\\components\\AMapContainer\\AMapContainer.jsx":"37","G:\\react-flowable\\src\\components\\EditbleSelct\\EditbleSelct.jsx":"38","G:\\react-flowable\\src\\components\\LoginNameSelect\\LoginNameSelect.jsx":"39","G:\\react-flowable\\src\\components\\TableAccount\\TableAccount.jsx":"40","G:\\react-flowable\\src\\components\\StaffSelectWidget\\StaffSelectWidget.jsx":"41","G:\\react-flowable\\src\\components\\TreeCascader\\TreeCascader.jsx":"42","G:\\react-flowable\\src\\libs\\ChineseDistricts\\ChineseDistricts.js":"43","G:\\react-flowable\\src\\libs\\extraFormMapping\\extraFormMapping.js":"44","G:\\react-flowable\\src\\libs\\FormDataValid\\FormDataValid.js":"45","G:\\react-flowable\\src\\libs\\frGeneratorConfig\\frGeneratorConfig.js":"46","G:\\react-flowable\\src\\components\\StaffSelect\\StaffSelect.jsx":"47","G:\\react-flowable\\src\\components\\FormRenderTrans\\FormRenderTrans.jsx":"48","G:\\react-flowable\\src\\pages\\Customize\\Sequelize\\Sequelize.jsx":"49","G:\\react-flowable\\src\\pages\\Customize\\Cascader\\Cascader.jsx":"50","G:\\react-flowable\\src\\pages\\EventOnDealList\\EventOnDealList.jsx":"51","G:\\react-flowable\\src\\pages\\EventStartForm\\EventStartForm.jsx":"52","G:\\react-flowable\\src\\pages\\EventStartPage\\EventStartPage.jsx":"53","G:\\react-flowable\\src\\pages\\EventPermissionConfig\\EventPermissionConfig.jsx":"54","G:\\react-flowable\\src\\pages\\EventShow\\EventShow.jsx":"55","G:\\react-flowable\\src\\pages\\EventConfig\\EventConfig.jsx":"56","G:\\react-flowable\\src\\pages\\NewEventForm\\NewEventForm.jsx":"57","G:\\react-flowable\\src\\libs\\eventSchema\\eventSchema.js":"58"},{"size":880,"mtime":1620732251285,"results":"59","hashOfConfig":"60"},{"size":362,"mtime":1609127554707,"results":"61","hashOfConfig":"60"},{"size":210,"mtime":1621507393172,"results":"62","hashOfConfig":"60"},{"size":4668,"mtime":1623048448243,"results":"63","hashOfConfig":"60"},{"size":10905,"mtime":1622517431245,"results":"64","hashOfConfig":"60"},{"size":1215,"mtime":1621583300702,"results":"65","hashOfConfig":"60"},{"size":3152,"mtime":1623053547402,"results":"66","hashOfConfig":"60"},{"size":10047,"mtime":1623118202729,"results":"67","hashOfConfig":"60"},{"size":13385,"mtime":1623142943928,"results":"68","hashOfConfig":"60"},{"size":5287,"mtime":1621507927427,"results":"69","hashOfConfig":"60"},{"size":41242,"mtime":1623051639138,"results":"70","hashOfConfig":"60"},{"size":18637,"mtime":1623047219513,"results":"71","hashOfConfig":"60"},{"size":9266,"mtime":1622442032726,"results":"72","hashOfConfig":"60"},{"size":8198,"mtime":1623047189973,"results":"73","hashOfConfig":"60"},{"size":7612,"mtime":1623047228438,"results":"74","hashOfConfig":"60"},{"size":8588,"mtime":1621583440730,"results":"75","hashOfConfig":"60"},{"size":19981,"mtime":1623051625413,"results":"76","hashOfConfig":"60"},{"size":9827,"mtime":1623047173673,"results":"77","hashOfConfig":"60"},{"size":1974,"mtime":1617764189868,"results":"78","hashOfConfig":"60"},{"size":4389,"mtime":1621583359843,"results":"79","hashOfConfig":"60"},{"size":9225,"mtime":1623143777886,"results":"80","hashOfConfig":"60"},{"size":11645,"mtime":1624502694869,"results":"81","hashOfConfig":"60"},{"size":392,"mtime":1632275664553,"results":"82","hashOfConfig":"60"},{"size":1497,"mtime":1623747307345,"results":"83","hashOfConfig":"60"},{"size":17551,"mtime":1632291682652,"results":"84","hashOfConfig":"60"},{"size":6619,"mtime":1622779116347,"results":"85","hashOfConfig":"60"},{"size":7906,"mtime":1622088220407,"results":"86","hashOfConfig":"60"},{"size":9836,"mtime":1622444625891,"results":"87","hashOfConfig":"60"},{"size":3049,"mtime":1621583255717,"results":"88","hashOfConfig":"60"},{"size":399,"mtime":1620635657563,"results":"89","hashOfConfig":"60"},{"size":749,"mtime":1623030883360,"results":"90","hashOfConfig":"60"},{"size":709,"mtime":1621936369580,"results":"91","hashOfConfig":"60"},{"size":2641,"mtime":1623118218761,"results":"92","hashOfConfig":"60"},{"size":300,"mtime":1621935115378,"results":"93","hashOfConfig":"60"},{"size":2522,"mtime":1621935106494,"results":"94","hashOfConfig":"60"},{"size":1699,"mtime":1621583238354,"results":"95","hashOfConfig":"60"},{"size":1328,"mtime":1623727268062,"results":"96","hashOfConfig":"60"},{"size":860,"mtime":1621251998922,"results":"97","hashOfConfig":"60"},{"size":3962,"mtime":1621583231571,"results":"98","hashOfConfig":"60"},{"size":6230,"mtime":1623402294480,"results":"99","hashOfConfig":"60"},{"size":3988,"mtime":1623816683788,"results":"100","hashOfConfig":"60"},{"size":2339,"mtime":1623749256269,"results":"101","hashOfConfig":"60"},{"size":111429,"mtime":1621216378057,"results":"102","hashOfConfig":"60"},{"size":98,"mtime":1622194636807,"results":"103","hashOfConfig":"60"},{"size":945,"mtime":1621586408842,"results":"104","hashOfConfig":"60"},{"size":8022,"mtime":1623747350675,"results":"105","hashOfConfig":"60"},{"size":4081,"mtime":1623816676805,"results":"106","hashOfConfig":"60"},{"size":2338,"mtime":1623739531797,"results":"107","hashOfConfig":"60"},{"size":511,"mtime":1621583305369,"results":"108","hashOfConfig":"60"},{"size":1320,"mtime":1615344419864,"results":"109","hashOfConfig":"60"},{"size":19123,"mtime":1622088215145,"results":"110","hashOfConfig":"60"},{"size":5888,"mtime":1622023210416,"results":"111","hashOfConfig":"60"},{"size":6709,"mtime":1622088225127,"results":"112","hashOfConfig":"60"},{"size":7990,"mtime":1620296230679,"results":"113","hashOfConfig":"60"},{"size":2932,"mtime":1622023197949,"results":"114","hashOfConfig":"60"},{"size":10931,"mtime":1628219872366,"results":"115","hashOfConfig":"60"},{"size":7801,"mtime":1621583418442,"results":"116","hashOfConfig":"60"},{"size":1706,"mtime":1621583267333,"results":"117","hashOfConfig":"60"},{"filePath":"118","messages":"119","errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"120","usedDeprecatedRules":"121"},"1ylb5r7",{"filePath":"122","messages":"123","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"121"},{"filePath":"124","messages":"125","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"121"},{"filePath":"126","messages":"127","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"121"},{"filePath":"128","messages":"129","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"121"},{"filePath":"130","messages":"131","errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"132","usedDeprecatedRules":"121"},{"filePath":"133","messages":"134","errorCount":0,"fatalErrorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"135","usedDeprecatedRules":"121"},{"filePath":"136","messages":"137","errorCount":0,"fatalErrorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"138","usedDeprecatedRules":"121"},{"filePath":"139","messages":"140","errorCount":0,"fatalErrorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"141","usedDeprecatedRules":"121"},{"filePath":"142","messages":"143","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"121"},{"filePath":"144","messages":"145","errorCount":0,"fatalErrorCount":0,"warningCount":13,"fixableErrorCount":0,"fixableWarningCount":1,"source":"146","usedDeprecatedRules":"121"},{"filePath":"147","messages":"148","errorCount":0,"fatalErrorCount":0,"warningCount":4,"fixableErrorCount":0,"fixableWarningCount":0,"source":"149","usedDeprecatedRules":"121"},{"filePath":"150","messages":"151","errorCount":0,"fatalErrorCount":0,"warningCount":62,"fixableErrorCount":0,"fixableWarningCount":0,"source":"152","usedDeprecatedRules":"121"},{"filePath":"153","messages":"154","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"121"},{"filePath":"155","messages":"156","errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"157","usedDeprecatedRules":"121"},{"filePath":"158","messages":"159","errorCount":0,"fatalErrorCount":0,"warningCount":3,"fixableErrorCount":0,"fixableWarningCount":0,"source":"160","usedDeprecatedRules":"121"},{"filePath":"161","messages":"162","errorCount":0,"fatalErrorCount":0,"warningCount":40,"fixableErrorCount":0,"fixableWarningCount":1,"source":"163","usedDeprecatedRules":"121"},{"filePath":"164","messages":"165","errorCount":0,"fatalErrorCount":0,"warningCount":12,"fixableErrorCount":0,"fixableWarningCount":0,"source":"166","usedDeprecatedRules":"121"},{"filePath":"167","messages":"168","errorCount":0,"fatalErrorCount":0,"warningCount":4,"fixableErrorCount":0,"fixableWarningCount":0,"source":"169","usedDeprecatedRules":"121"},{"filePath":"170","messages":"171","errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"172","usedDeprecatedRules":"121"},{"filePath":"173","messages":"174","errorCount":0,"fatalErrorCount":0,"warningCount":4,"fixableErrorCount":0,"fixableWarningCount":0,"source":"175","usedDeprecatedRules":"121"},{"filePath":"176","messages":"177","errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"178","usedDeprecatedRules":"121"},{"filePath":"179","messages":"180","errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"181","messages":"182","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"121"},{"filePath":"183","messages":"184","errorCount":0,"fatalErrorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"185","messages":"186","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"121"},{"filePath":"187","messages":"188","errorCount":0,"fatalErrorCount":0,"warningCount":7,"fixableErrorCount":0,"fixableWarningCount":0,"source":"189","usedDeprecatedRules":"121"},{"filePath":"190","messages":"191","errorCount":0,"fatalErrorCount":0,"warningCount":9,"fixableErrorCount":0,"fixableWarningCount":0,"source":"192","usedDeprecatedRules":"121"},{"filePath":"193","messages":"194","errorCount":0,"fatalErrorCount":0,"warningCount":9,"fixableErrorCount":0,"fixableWarningCount":0,"source":"195","usedDeprecatedRules":"121"},{"filePath":"196","messages":"197","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"121"},{"filePath":"198","messages":"199","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"121"},{"filePath":"200","messages":"201","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"121"},{"filePath":"202","messages":"203","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"121"},{"filePath":"204","messages":"205","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"121"},{"filePath":"206","messages":"207","errorCount":0,"fatalErrorCount":0,"warningCount":3,"fixableErrorCount":0,"fixableWarningCount":0,"source":"208","usedDeprecatedRules":"121"},{"filePath":"209","messages":"210","errorCount":0,"fatalErrorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"211","usedDeprecatedRules":"121"},{"filePath":"212","messages":"213","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"121"},{"filePath":"214","messages":"215","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"121"},{"filePath":"216","messages":"217","errorCount":0,"fatalErrorCount":0,"warningCount":3,"fixableErrorCount":0,"fixableWarningCount":0,"source":"218","usedDeprecatedRules":"121"},{"filePath":"219","messages":"220","errorCount":0,"fatalErrorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"221","usedDeprecatedRules":"121"},{"filePath":"222","messages":"223","errorCount":0,"fatalErrorCount":0,"warningCount":3,"fixableErrorCount":0,"fixableWarningCount":0,"source":"224","usedDeprecatedRules":"121"},{"filePath":"225","messages":"226","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"121"},{"filePath":"227","messages":"228","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"121"},{"filePath":"229","messages":"230","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"121"},{"filePath":"231","messages":"232","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"121"},{"filePath":"233","messages":"234","errorCount":0,"fatalErrorCount":0,"warningCount":24,"fixableErrorCount":0,"fixableWarningCount":0,"source":"235","usedDeprecatedRules":"121"},{"filePath":"236","messages":"237","errorCount":0,"fatalErrorCount":0,"warningCount":3,"fixableErrorCount":0,"fixableWarningCount":0,"source":"238","usedDeprecatedRules":"121"},{"filePath":"239","messages":"240","errorCount":0,"fatalErrorCount":0,"warningCount":3,"fixableErrorCount":0,"fixableWarningCount":0,"source":"241","usedDeprecatedRules":"121"},{"filePath":"242","messages":"243","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"121"},{"filePath":"244","messages":"245","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"121"},{"filePath":"246","messages":"247","errorCount":0,"fatalErrorCount":0,"warningCount":11,"fixableErrorCount":0,"fixableWarningCount":0,"source":"248","usedDeprecatedRules":"121"},{"filePath":"249","messages":"250","errorCount":0,"fatalErrorCount":0,"warningCount":12,"fixableErrorCount":0,"fixableWarningCount":0,"source":"251","usedDeprecatedRules":"121"},{"filePath":"252","messages":"253","errorCount":0,"fatalErrorCount":0,"warningCount":4,"fixableErrorCount":0,"fixableWarningCount":0,"source":"254","usedDeprecatedRules":"121"},{"filePath":"255","messages":"256","errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"257","usedDeprecatedRules":"121"},{"filePath":"258","messages":"259","errorCount":0,"fatalErrorCount":0,"warningCount":3,"fixableErrorCount":0,"fixableWarningCount":0,"source":"260","usedDeprecatedRules":"121"},{"filePath":"261","messages":"262","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"121"},{"filePath":"263","messages":"264","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"121"},{"filePath":"265","messages":"266","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"121"},"G:\\react-flowable\\src\\index.js",["267"],"import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport './index.css';\r\nimport './styles/reset.less'\r\nimport App from './App';\r\nimport reportWebVitals from './reportWebVitals';\r\nimport zhCN from 'antd/es/locale/zh_CN';\r\nimport 'antd/dist/antd.less';\r\nimport { BrowserRouter, HashRouter } from 'react-router-dom';\r\nimport { ConfigProvider } from 'antd';\r\n\r\nimport moment from 'moment';\r\nimport 'moment/locale/zh-cn';\r\nmoment.locale('zh-cn');\r\n\r\n\r\nReactDOM.render(\r\n <BrowserRouter>\r\n <ConfigProvider locale={zhCN}>\r\n <App />\r\n </ConfigProvider>\r\n </BrowserRouter>,\r\n document.getElementById('root')\r\n);\r\n\r\n// If you want to start measuring performance in your app, pass a function\r\n// to log results (for example: reportWebVitals(console.log))\r\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\r\nreportWebVitals();\r\n",["268","269"],"G:\\react-flowable\\src\\reportWebVitals.js",[],"G:\\react-flowable\\src\\App.js",[],"G:\\react-flowable\\src\\router\\Router.js",[],"G:\\react-flowable\\src\\pages\\NewForm\\NewForm.jsx",[],"G:\\react-flowable\\src\\pages\\Customize\\Customize.jsx",["270"],"// 自定义组件——未用到\r\nimport React, { useState } from \"react\";\r\nimport FormRender from \"form-render/lib/antd\";\r\nimport SCHEMA from \"./schema.json\";\r\nimport Cascade from \"./Cascader/Cascader\";\r\nimport Calendar from './Sequelize/Sequelize'\r\nclass Demo extends React.Component {\r\n state = {\r\n formData: {},\r\n valid: []\r\n }\r\n\r\n submit = () => {\r\n if (this.state.valid.length > 0) {\r\n alert(\"没有通过校验\");\r\n } else {\r\n alert(JSON.stringify(this.state.formData, null, 4));\r\n }\r\n };\r\n\r\n onValidate = valid => {\r\n // console.log(valid);\r\n }\r\n listenChange=(params)=>{\r\n // console.log(params)\r\n }\r\n render(){\r\n return (\r\n <div style={{ padding: 60 }}>\r\n <FormRender\r\n {...SCHEMA}\r\n formData={this.state.formData}\r\n onChange={this.listenChange}\r\n onValidate={this.onValidate}\r\n widgets={{ cascade: Cascade,calendar: Calendar }}\r\n />\r\n <button onClick={this.submit}>提交</button>\r\n </div>\r\n );\r\n }\r\n}\r\n\r\nexport default Demo\r\n","G:\\react-flowable\\src\\pages\\ShowForm\\ShowForm.jsx",["271","272"],"// 展示表单类型\r\nimport React, { useState, useEffect, useRef } from 'react';\r\nimport FormRender from 'form-render/lib/antd';\r\nimport './ShowForm.less'\r\nimport { Button, message } from 'antd';\r\nimport { GetFormJson } from '../../apis/process'\r\nimport FormRenderWidgets from '../../libs/FormRenderWidgets/FormRenderWidgets'\r\n\r\n\r\nconst ShowForm = (props) => {\r\n // FormRender的formData\r\n const [formData, setFormData] = useState({});\r\n // FormRender的schema\r\n const [schema, setSchema] = useState({})\r\n // FormRender的表单提交校验\r\n const [valid, setValid] = useState([])\r\n // FormRender的组件ref\r\n const formRef = useRef();\r\n\r\n // 拉取数据\r\n const getData =()=>{\r\n const id = props.location.state.id\r\n GetFormJson(id)\r\n .then((res)=>{\r\n if (res.data && res.data !== '未将对象引用设置到对象的实例。') {\r\n setSchema(JSON.parse(res.data))\r\n } else {\r\n message.error(res.data || '系统错误,请联系管理员')\r\n }\r\n })\r\n }\r\n \r\n useEffect(()=>{\r\n getData()\r\n },[])\r\n\r\n // 返回列表\r\n const handleClickReback = ()=>{\r\n props.history.push({\r\n pathname: '/form-render/home',\r\n state:{\r\n searchName: props.location.state.searchName\r\n }\r\n })\r\n }\r\n\r\n // 提交校验\r\n const onValidate=(valid)=>{\r\n setValid(valid)\r\n }\r\n\r\n return (\r\n <div style={{backgroundColor:'#ffffff'}}>\r\n <div className=\"form-info-box\">\r\n <div className=\"form-info-before\"></div>\r\n <div>{props.location.state.name}</div>\r\n </div>\r\n <div className=\"header-content-divider\"></div>\r\n <div className=\"showform-box\">\r\n {/* <FormRender\r\n ref={formRef}\r\n {...schema}\r\n formData={formData}\r\n onChange={setFormData}\r\n onValidate={onValidate}\r\n showValidate={false}\r\n widgets={{ staff: StaffSelectWidget, cascader: TreeCascader, search: SearchSelect, TableAccount: TableAccount, file:UploadFile, \r\n editSearch: EditbleSelct, mapSelect: AMapContainer,cityPicker: cityPicker,multiSelect: multiSelect, \r\n DateTimePicker:DateTimePicker, CodeGenerator:CodeGenerator }}\r\n /> */}\r\n <FormRender\r\n ref={formRef}\r\n {...schema}\r\n formData={formData}\r\n onChange={setFormData}\r\n onValidate={onValidate}\r\n showValidate={false}\r\n widgets={FormRenderWidgets}\r\n />\r\n </div>\r\n <div style={{textAlign: 'right',marginRight: '20px',padding: '30px 0'}}>\r\n <Button type=\"primary\" style={{ marginLeft: 30 }} className=\"table-oper-btn\" onClick={handleClickReback}>返回列表</Button>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default ShowForm;","G:\\react-flowable\\src\\pages\\EditForm\\EditForm.jsx",["273","274"],"// 编辑form render表单\r\nimport React,{useState, useRef, useEffect} from 'react';\r\nimport Generator from 'fr-generator';\r\nimport { GetFormJson, UpdateFormDef, getSelectName } from '../../apis/process'\r\nimport {Modal, Form, Input, message} from 'antd'\r\nimport settings from '../../libs/frGeneratorConfig/frGeneratorConfig' // 可视化表单配置文件\r\n\r\nconst EditForm = (props) => {\r\n const [isModalVisible, setIsModalVisible] = useState(false)\r\n const [defaultValue, setDefaultValue] = useState({})\r\n const [templates, setTemplates] = useState([])\r\n const genRef = useRef()\r\n const formNameRef = useRef()\r\n const formKeyRef = useRef()\r\n const formDescRef = useRef()\r\n \r\n // 配置自定义button\r\n const extraButtons = [\r\n true, true, true, true, \r\n { \r\n text: '确定修改',\r\n type: 'primary',\r\n onClick: () => handleScheam()\r\n },\r\n {\r\n text: '返回列表',\r\n type: 'primary',\r\n onClick: () => goBackToHome()\r\n }\r\n ]\r\n \r\n useEffect(()=>{\r\n getData()\r\n }, [])\r\n const getData =()=>{\r\n const id = props.location.state.id\r\n GetFormJson(id)\r\n .then((res)=>{\r\n if (res.status === 200) {\r\n setDefaultValue(JSON.parse(res.data))\r\n }\r\n })\r\n }\r\n // 确定修改\r\n const handleScheam = ()=>{\r\n handleOk()\r\n }\r\n // 取消修改\r\n const handleCancel= ()=>{\r\n setIsModalVisible(false)\r\n }\r\n // 返回列表\r\n const goBackToHome=()=>{\r\n props.history.push({\r\n pathname: '/form-render/home'\r\n })\r\n }\r\n // 判断是否是分组类型的表单——>格式保持与台账一致\r\n const handleObject=(formData)=>{\r\n let flag = false\r\n // console.log(JSON.stringify(formData))\r\n const {properties} = formData.schema\r\n let objTitleArr = []\r\n let sum = 0\r\n for (let key in properties) {\r\n if (key.indexOf('object') > -1 && properties[key].hasOwnProperty('title')) {\r\n objTitleArr.push(properties[key].title)\r\n sum += 1\r\n }\r\n }\r\n let setArr = Array.from(new Set(objTitleArr));\r\n if (sum !== setArr.length) {\r\n message.error(\"您提交的表单组件不可有重名,请检查!\")\r\n return\r\n }\r\n for (let key in properties) {\r\n if (!properties[key].hasOwnProperty('properties')) {\r\n if (key.indexOf('object') > -1) {\r\n message.error(\"请勿使用空的分组对象!\")\r\n } else {\r\n message.error(\"请使用布局组件Object包围子组件!\")\r\n }\r\n return false\r\n }\r\n for (let ckey in properties[key].properties) {\r\n // console.log(properties[key].properties[ckey].hasOwnProperty(\"properties\"))\r\n // console.log(properties[key].properties[ckey].type)\r\n if (properties[key].properties[ckey].type === \"object\" || properties[key].properties[ckey].hasOwnProperty(\"properties\")) {\r\n message.error(\"目前仅支持2层对象嵌套,请勿使用多层!\")\r\n return\r\n } else {\r\n flag = true\r\n }\r\n }\r\n }\r\n return flag\r\n }\r\n // 判断表单中是否有重复名称的字段\r\n const hanldeDeepObject = (properties) => {\r\n let BaseTypeList = [{Name: 'ProcID',Type: 'string', Code: ''}]\r\n for(let key in properties) {\r\n if (properties[key].hasOwnProperty('properties')) {\r\n for(let childkey in properties[key].properties) {\r\n let objType = properties[key].properties[childkey].type\r\n if (properties[key].properties[childkey].hasOwnProperty(\"format\")) {\r\n if (properties[key].properties[childkey].format === \"date\" || properties[key].properties[childkey].format === \"dateTime\") {\r\n objType = \"dateTime\"\r\n }\r\n }\r\n // console.log(properties[key].properties[childkey], \"properties[key].properties[childkey]\")\r\n BaseTypeList.push({\r\n Name:properties[key].properties[childkey].title,\r\n Type: objType,\r\n Code: properties[key].properties[childkey].hasOwnProperty(\"code\") && properties[key].properties[childkey].code ? properties[key].properties[childkey].code : \"\"\r\n })\r\n }\r\n } else {\r\n let outType = properties[key].type\r\n if (properties[key].hasOwnProperty(\"format\")) {\r\n if (properties[key].format === \"date\" || properties[key].format === \"dateTime\") {\r\n outType = \"dateTime\"\r\n }\r\n }\r\n BaseTypeList.push({\r\n Name:properties[key].title,\r\n Type: outType,\r\n Code: properties[key].hasOwnProperty(\"code\") && properties[key].code ? properties[key].code : \"\"\r\n })\r\n }\r\n }\r\n // 表单名称的数组\r\n const names = BaseTypeList.map((items)=> items.Name)\r\n // console.log(names)\r\n // 表单名称去重之后的数组\r\n const nameSet = new Set(names);\r\n // 如果二者相等,则没有重复的,否则有重复\r\n if (names.length === nameSet.size) {\r\n return BaseTypeList\r\n } else {\r\n message.error(\"您提交的表单组件不可有重名,请检查!\")\r\n return false\r\n }\r\n }\r\n // 处理schema表单读取数据字典\r\n const handleFormInfoApi = async(dataObj) => {\r\n let obj = {...dataObj}\r\n const {schema} = obj\r\n const {properties} = schema\r\n for(let key in properties) {\r\n for(let cKey in properties[key].properties) {\r\n if (properties[key].properties[cKey].hasOwnProperty(\"fieldData\") && properties[key].properties[cKey].fieldData && properties[key].properties[cKey].enum) {\r\n // console.log(properties[key].properties[cKey])\r\n properties[key].properties[cKey].enum = []\r\n properties[key].properties[cKey].enumNames = []\r\n let res =await getSelectName(properties[key].properties[cKey].fieldData)\r\n res.data.forEach((item)=>{\r\n properties[key].properties[cKey].enum.push(item.NODEVALUE)\r\n properties[key].properties[cKey].enumNames.push(item.NODENAME)\r\n })\r\n }\r\n }\r\n }\r\n return obj\r\n }\r\n\r\n // 处理必填字段\r\n const handleIsRequired=(dataObj)=>{\r\n let obj = {...dataObj}\r\n const {schema} = obj\r\n const {properties} = schema\r\n for(let key in properties) {\r\n let required = []\r\n for(let cKey in properties[key].properties) {\r\n if (properties[key].properties[cKey].hasOwnProperty(\"isRequired\") && properties[key].properties[cKey].isRequired) {\r\n required.push(cKey)\r\n properties[key].required = required\r\n }\r\n }\r\n }\r\n return obj\r\n }\r\n\r\n // 确定保存表单\r\n const handleOk=async()=>{\r\n // Generator的值\r\n const FormInfo = genRef.current && genRef.current.getValue()\r\n\r\n // console.log(FormInfo, \"FormInfo\")\r\n // 处理必填\r\n let requiredData = handleIsRequired(FormInfo)\r\n\r\n // console.log(requiredData, \"requiredData\")\r\n // 处理数据字典\r\n let handledData =await handleFormInfoApi(requiredData)\r\n\r\n // console.log(handledData, \"handledData\")\r\n\r\n if (!handleObject(handledData)) {\r\n return\r\n }\r\n let {properties} = handledData.schema\r\n const params = {\r\n FormInfo: JSON.stringify(handledData),\r\n description:props.location.state.desc,\r\n key: props.location.state.key,\r\n modelType:2,\r\n name: props.location.state.name,\r\n BaseTypeList: hanldeDeepObject(properties)\r\n }\r\n if(!params.BaseTypeList){\r\n message.error(\"您提交的表单组件不可有重名,请检查!\")\r\n return false\r\n }\r\n UpdateFormDef(props.location.state.id, params)\r\n .then(res=>{\r\n message.success(\"修改成功\")\r\n goBackToHome()\r\n })\r\n }\r\n return(\r\n <div style={{ height: '98vh' }}>\r\n <Generator \r\n // widgets={{ staff: StaffSelectWidget, cascader: TreeCascader, search: SearchSelect, file:UploadFile, editSearch: EditbleSelct, }} \r\n ref={genRef} \r\n defaultValue={defaultValue} \r\n templates={templates} \r\n extraButtons={extraButtons}\r\n settings = {settings}\r\n // commonSettings={commonSettings}\r\n />\r\n <Modal title=\"保存表单\" visible={isModalVisible} onOk={handleOk} onCancel={handleCancel}>\r\n <Form layout={\"horizontal\"}>\r\n <Form.Item label=\"表单名称\">\r\n <Input ref={formNameRef} placeholder=\"请输入表单名称\" />\r\n </Form.Item>\r\n <Form.Item label=\"表单标识\">\r\n <Input ref={formKeyRef} placeholder=\"请输入表单标识\" />\r\n </Form.Item>\r\n <Form.Item label=\"表单备注\">\r\n <Input ref={formDescRef} placeholder=\"请输入表单备注\" />\r\n </Form.Item>\r\n </Form>\r\n </Modal>\r\n </div>\r\n )\r\n}\r\n\r\nexport default EditForm;\r\n\r\n\r\n\r\n","G:\\react-flowable\\src\\pages\\process\\Process.jsx",["275","276"],"// 表单管理的列表\r\nimport React from \"react\";\r\nimport { UpdateStatus, GetFormListInfo, DeleteFormLogic, flowableLogin } from '../../apis/process'\r\n// import Modeler from \"../../components/Modeler\";\r\nimport { Table, Space, Button, Form, Input, Pagination, Modal, message } from 'antd';\r\nimport './process.less'\r\nimport moment from 'moment';\r\nimport NoData from '../../components/NoData/NoData'\r\nimport reactCookie from 'react-cookies'\r\nconst { Search } = Input\r\nconst { Column } = Table;\r\nclass Process extends React.Component{\r\n state={\r\n tableData: [],// 表格数据\r\n name: '', // 检索栏流程名称\r\n startDate: '',// 检索栏起始日期\r\n endDate: '',// 检索栏截止日期\r\n total: 0, // 数据总数\r\n curPage: 1,// 当前页码\r\n pageSize: 20,// 当前分页条数\r\n confirmLoading: false,// 加载新增接口loading效果\r\n visible: false, // 模态框显示隐藏\r\n processName: '',// 新增流程名称\r\n processKey: '',// 新增流程标识\r\n processDesc: '',// 新增流程描述\r\n cookieData: '', // flowable-engine鉴权的cookie\r\n formId: '', // 表单ID\r\n clientHeight: 0,\r\n }\r\n // 流程名称\r\n handleProName = (e)=>{\r\n this.setState({\r\n name: e.target.value\r\n })\r\n }\r\n // 获取流程创建的日期\r\n handleDateChange =(date, dateString)=>{\r\n this.setState({\r\n startDate: !dateString[0] ? '' : dateString[0] + ' ' + '00:00:00',\r\n endDate: !dateString[1]? '' : dateString[1] + ' ' +'23:59:59',\r\n })\r\n }\r\n // 翻页\r\n handlePageChange =(curPage, pageSize) => {\r\n this.setState({\r\n curPage: curPage,\r\n pageSize: pageSize\r\n },()=>{\r\n this.getData(this.state.name)\r\n })\r\n }\r\n // 改变页码大小\r\n handlePageSizeChange=(page, size)=>{\r\n }\r\n handleChange=(e)=>{\r\n this.setState({\r\n name: e.target.value\r\n })\r\n }\r\n handleSearch=(e)=>{\r\n this.setState({\r\n name: e\r\n }, ()=>{\r\n this.getData(this.state.name)\r\n })\r\n }\r\n // 拉取数据\r\n getData = (flowName)=> {\r\n \r\n GetFormListInfo(flowName,this.state.curPage, this.state.pageSize)\r\n .then(res=>{\r\n res.data.getMe.forEach((item,index)=>{\r\n item.index = index + 1\r\n item.created = item.created === \"\" ? \"\" : moment(item.created).format(\"YYYY-MM-DD HH:mm:ss\")\r\n item.lastUpdated = item.lastUpdated === \"\" ? \"\" :moment(item.lastUpdated).format(\"YYYY-MM-DD HH:mm:ss\")\r\n })\r\n this.setState({\r\n tableData: res.data.getMe,\r\n total: res.data.totalRcdNum\r\n })\r\n })\r\n }\r\n // 删除流程\r\n delProcess =(record) =>{\r\n return ()=>{\r\n UpdateStatus(record.ID, 0)\r\n .then((res)=>{\r\n this.getData(this.state.name)\r\n })\r\n }\r\n }\r\n // 删除表单\r\n delForm = (id)=>{\r\n return ()=>{\r\n this.setState({\r\n visible: true,\r\n formId: id\r\n })\r\n }\r\n }\r\n // 删除流程(逻辑删除)\r\n handleOk=()=>{\r\n DeleteFormLogic('', this.state.formId)\r\n .then((res)=>{\r\n if(res.data.statusCode === \"0000\") {\r\n message.success(\"删除成功\")\r\n this.setState({\r\n visible: false\r\n })\r\n this.getData(this.state.name)\r\n } else {\r\n message.success(res.data.errMsg)\r\n }\r\n })\r\n }\r\n // 取消按钮\r\n handleCancel=()=>{\r\n this.setState({\r\n visible: false\r\n })\r\n }\r\n // 创建流程按钮\r\n handleCreateProcessName=(e)=>{\r\n this.setState({\r\n processName: e.target.value\r\n })\r\n }\r\n // 处理流程标识\r\n handleCreateProcessKey=(e)=>{\r\n this.setState({\r\n processKey: e.target.value\r\n })\r\n }\r\n // 处理流程描述\r\n handleCreateProcessDesc=(e)=>{\r\n this.setState({\r\n processDesc: e.target.value\r\n })\r\n }\r\n // 打开对话框\r\n openModal=()=>{\r\n this.props.history.push({\r\n pathname: '/form-render/new'\r\n })\r\n }\r\n // 编辑流程\r\n goEdit=(id,name,key,desc)=>{\r\n return ()=>{\r\n this.props.history.push({\r\n pathname: '/form-render/edit',\r\n state:{\r\n id: id,\r\n name: name,\r\n key: key,\r\n desc: desc\r\n }\r\n })\r\n }\r\n }\r\n // 查看流程\r\n goShow=(id, name)=>{\r\n // console.log(id)\r\n return ()=>{\r\n this.props.history.push({\r\n pathname: '/form-render/show',\r\n state:{\r\n id: id,\r\n name: name,\r\n searchName: this.state.name\r\n }\r\n })\r\n }\r\n }\r\n // 跳转到台账\r\n goShowAccount=(name, key, id, type)=>{\r\n return ()=>{\r\n this.props.history.push({ \r\n pathname: '/form-render/trans',\r\n state:{\r\n name: name,\r\n searchName: this.state.name,\r\n key: key,\r\n id: id,\r\n type: type\r\n }\r\n })\r\n }\r\n }\r\n queryDataFromWeb4=()=>{\r\n // 处理任务ID,用户名称,用户所在部门\r\n let hashData = \"\"\r\n let searchData = \"\"\r\n let search = \"\"\r\n if (window.location.hash) {\r\n hashData = window.location.hash\r\n searchData = hashData.split(\"?\")\r\n search = searchData[1]\r\n } else {\r\n search = window.location.search.slice(1)\r\n }\r\n const searchArr = search.split(\"&\")\r\n searchArr.forEach((item)=>{\r\n if (item.indexOf(\"loginName\") > -1) {\r\n // setUserName(decodeURI(item.split(\"=\")[1]))\r\n this.LoginToFlowable(item.split(\"=\")[1])\r\n }\r\n })\r\n }\r\n\r\n // 登录到Flowable\r\n LoginToFlowable = (loginName)=>{\r\n let obj = reactCookie.loadAll()\r\n if (obj.FLOWABLE_REMEMBER_ME && obj.FLOWABLE_REMEMBER_ME !== 'undefined') {\r\n return\r\n }\r\n const myData = {\r\n _spring_security_remember_me:true,\r\n j_password:\"test\",\r\n j_username: loginName,\r\n submit:\"Login\"\r\n }\r\n flowableLogin(myData)\r\n .then((res)=>{\r\n if (res.data.indexOf('FLOWABLE_REMEMBER_ME') < 0) {\r\n message.error(\"流程引擎服务不可用,请联系管理员\")\r\n return\r\n }\r\n let resArr = res.data.split(';')\r\n let cookieKeyVal = resArr[0]\r\n let cookieArr = cookieKeyVal.split('=')\r\n reactCookie.save(\r\n cookieArr[0],\r\n cookieArr[1],\r\n { \r\n path: '/',\r\n expires: new Date(new Date().getTime() + 7 * 24 * 3600 * 1000)\r\n }\r\n )\r\n })\r\n }\r\n componentDidMount() {\r\n this.queryDataFromWeb4()\r\n this.computeHeight()\r\n let flowName = this.state.name\r\n if (this.props.location.state) {\r\n flowName = this.props.location.state.searchName\r\n this.setState({\r\n name: flowName\r\n })\r\n }\r\n this.getData(flowName)\r\n }\r\n computeHeight(){\r\n var height = document.documentElement.clientHeight;\r\n this.setState({\r\n clientHeight: height - 190\r\n })\r\n }\r\n render() {\r\n return(\r\n <div className=\"modeler-wrapper\">\r\n {/* <Modeler></Modeler> */}\r\n <div className=\"form-headerbox\">\r\n <Form layout=\"inline\">\r\n <Form.Item label=\"表单名称\">\r\n {/* <Input placeholder=\"请输入表单名称\" className=\"input-text-content\" allowClear onChange={this.handleProName}/> */}\r\n <Search placeholder=\"请输入表单名称\" value={this.state.name} allowClear className=\"input-text-content\" onChange={this.handleChange} onSearch={this.handleSearch} style={{ width: 200 }} />\r\n </Form.Item>\r\n {/* <Form.Item>\r\n <Button className=\"localBtnClass\" size=\"small\" type=\"primary\" onClick={this.getData}>查询</Button>\r\n </Form.Item> */}\r\n {/* <Form.Item>\r\n <Button className=\"localBtnClass\" size=\"small\" type=\"primary\" onClick={this.openModal}>新增</Button>\r\n </Form.Item> */}\r\n </Form>\r\n <Button className=\"localBtnClass rightBtn\" size=\"small\" type=\"primary\" onClick={this.openModal}>新增</Button>\r\n </div>\r\n \r\n <div className=\"header-content-divider\"></div>\r\n {\r\n this.state.tableData.length > 0 ?\r\n <>\r\n <Table bordered={true} dataSource={this.state.tableData} pagination={false} rowClassName=\"rowClassName\" scroll={{y: this.state.clientHeight}}>\r\n <Column title=\"序号\" dataIndex=\"index\" key=\"index\" width={80} align=\"center\"/>\r\n <Column title=\"表单名称\" dataIndex=\"name\" key=\"WorkflowName\" align=\"center\"/>\r\n <Column title=\"表单标识\" dataIndex=\"key\" key=\"Key\" align=\"center\"/>\r\n <Column title=\"创建人\" dataIndex=\"createdBy\" key=\"createdBy\" align=\"center\"/>\r\n <Column title=\"创建时间\" dataIndex=\"created\" key=\"created\" align=\"center\"/>\r\n <Column title=\"最后修改时间\" dataIndex=\"lastUpdated\" key=\"lastUpdated\" align=\"center\"/>\r\n <Column\r\n align=\"center\"\r\n title=\"操作\"\r\n key=\"action\"\r\n width={250}\r\n render={(text, record) => (\r\n <Space size=\"middle\">\r\n {\r\n record.Type === '表单' ?\r\n <div>\r\n <Button className=\"table-oper-btn\" size=\"small\" type=\"primary\" style={{marginRight:\"10px\"}} onClick={this.goEdit(record.id, record.name, record.key, record.description)}>编辑</Button>\r\n <Button className=\"table-oper-btn\" size=\"small\" type=\"primary\" style={{marginRight:\"10px\"}} onClick={this.delForm(record.id, record.name)}>删除</Button>\r\n <Button className=\"table-oper-btn\" size=\"small\" type=\"primary\" onClick={this.goShow(record.id, record.name)}>查看</Button>\r\n </div>\r\n :\r\n <div>\r\n <Button className=\"table-oper-btn\" size=\"small\" type=\"primary\" style={{marginRight:\"10px\"}} onClick={this.delForm(record.id)}>删除</Button>\r\n <Button className=\"table-oper-btn\" size=\"small\" type=\"primary\" onClick={this.goShowAccount(record.TableName, record.key, record.id, record.IsUpdateOrAdd)}>查看</Button>\r\n </div>\r\n }\r\n </Space>\r\n )}\r\n />\r\n </Table>\r\n <Pagination\r\n size=\"small\"\r\n current={this.state.curPage}\r\n total={this.state.total}\r\n showSizeChanger\r\n showQuickJumper\r\n defaultPageSize={20}\r\n onChange = {this.handlePageChange}\r\n showTotal={total => `共${Math.ceil(total/this.state.pageSize)}页/${total}条记录`}>\r\n </Pagination>\r\n </>\r\n :\r\n <NoData></NoData> \r\n }\r\n \r\n <Modal\r\n title=\"提示\"\r\n visible={this.state.visible}\r\n okText=\"确定\"\r\n cancelText=\"取消\"\r\n onOk={this.handleOk}\r\n confirmLoading={this.state.confirmLoading}\r\n onCancel={this.handleCancel}\r\n >\r\n 确定删除该表单吗?\r\n </Modal>\r\n \r\n </div>\r\n )\r\n }\r\n}\r\n\r\nexport default Process","G:\\react-flowable\\src\\pages\\Transform\\Transform.jsx",[],"G:\\react-flowable\\src\\pages\\NeedToDeal\\NeedToDeal.jsx",["277","278","279","280","281","282","283","284","285","286","287","288","289"],"// 在办\nimport React, { useState, useEffect, useRef } from 'react';\nimport FormRender from 'form-render/lib/antd';\nimport FormTransfer from '../../libs/transform/transform'\nimport FormDataValid from '../../libs/FormDataValid/FormDataValid'\nimport ConfigSchemaClass from '../../libs/configSchema/configSchema'\nimport configData from '../../utils/config'\nimport { Button, message, Modal, Radio, Input, Table, Space} from 'antd';\nimport { getTableName, GetFormList, GetTransferList, SaveFormInfoTransfer, TaskSave, \n GetTaskBaseInfo, getUserName, UpdateTaskInfo, TaskGoBack, WorkflowUrging, GetFlowProcessInfo, \n WorkflowFileOperation, uploadToService, WorkflowDelete, GetAssemblyByTaskID} from '../../apis/process'\nimport './NeedToDeal.less'\nimport {ProductInfo} from '../../libs/extraFormMapping/extraFormMapping'\nimport FormRenderWidgets from '../../libs/FormRenderWidgets/FormRenderWidgets'\nconst { Search } = Input;\nconst { Column } = Table;\n\nlet actArr = []\n\nconst NeedToDeal = (props) => {\n // FormRender提交表单校验\n const [valid, setValid] = useState([])\n // 表单得标识key\n const [FormKey, setFormKey] = useState([])\n // FormRender的formData\n const [formData, setFormData] = useState({});\n // FormRender的schema\n const [schema, setSchema] = useState({})\n // cookie\n const [cookie, setCookie] = useState(\"\")\n // 当前节点的任务ID\n const [taskId, setTaskId] = useState(\"\")\n // 当前节点的流程定义ID\n const [processDefinitionId, setProcessDefinitionId] = useState(\"\")\n // 用户ID\n const [userId, setUserId] = useState(\"\")\n // 表单ID\n const [formId, setFormId] = useState(\"\")\n // 任务移交Modal\n const [visible, setVisible] = useState(false)\n // 会签选择候选人Modal\n const [nextPersonVisible, setNextPersonVisible] = useState(false)\n // 流程图Modal\n const [modelerVisible, setModelerVisible] = useState(false)\n // 回退Modal\n const [rebackVisible, setRebackVisible] = useState(false)\n // 催办Modal\n const [urgentVisible, setUrgentVisible] = useState(false)\n // 候选人\n const [transValue, setTransValue] = useState(null)\n // 候选移交人数组\n const [userNameArr, setUserNameArr] = useState([])\n // 用户名\n const [userName, setUserName] = useState('')\n // 用户所在部门\n const [userDepart, setUserDepart] = useState('')\n // 流程图图片地址\n const [processImgSrc, setProcessImgSrc] = useState(null)\n\n // 流程详细信息\n // 分配人\n const [Assignee, setAssignee] = useState(null)\n // 截至时间\n const [ETime, setETime] = useState(null)\n // 开始时间\n const [STime, setSTime] = useState(null)\n // 任务名称\n const [TaskName, setTaskName] = useState(null)\n // 流转信息数据表格\n const [tableData, setTableData] = useState([])\n // 回退时候查询节点流转信息\n const [goBacktableData, setGoBacktableData] = useState([])\n // 催办时候,查询节点流转信息\n const [urgentTableData, setUrgentTableData] = useState([])\n // 附件数组\n const [fileTableData, setFileTableData] = useState([])\n // 流转信息Modal\n const [flowVisible, setFlowVisible] = useState(false)\n // 附件Modal\n const [fileVisible, setFileVisible] = useState(false)\n // 上传附件Modal\n const [uploadVisible, setUploadVisible] = useState(false)\n // 流程作废Modal\n const [abolishVisible, setAbolishVisible] = useState(false)\n // 上传附件文件的名字\n const [upFileName, setUpFileName] = useState([])\n // 会签点击完成按钮,选择下一个完成人\n const [nextPerson, setNextPerson] = useState('')\n // 会签时候,点击完成,候选人列表\n const [assigneeList, setAssigneeList] = useState([])\n // 下一个移交人\n const [workCode, setWorkCode] = useState(\"\")\n // 配置schema,传递给下一个节点\n const [configSchema, setConfigSchema] = useState('')\n // 表单类型:台账或者表单\n const [formType, setFormType] = useState(\"\")\n // \n const [chooseArr, setChooseArr] = useState([])\n // 加载产品信息得白名单数组\n const [isShowProduct, setIsShowProduct] = useState(false)\n \n // FormRender的ref\n const formRef = useRef();\n // 回退的ref\n const backRef = useRef();\n // 催办的ref\n const urgentRef = useRef();\n\n // FormRender提交表单校验\n const onValidate=(valid)=>{\n setValid(valid)\n }\n // 判断是否要加产品信息组件\n const judgeShowExtraForm=(taskIdArg)=>{\n GetAssemblyByTaskID(taskIdArg)\n .then((res)=>{\n if (res.data.say.statusCode === \"0000\") {\n if (res.data.getMe.length > 0) {\n res.data.getMe.forEach((item)=>{\n if (item.AssemblyName === '产品信息') {\n setIsShowProduct(true)\n }\n })\n }\n } else {\n message.error(res.data.say.errMsg)\n }\n })\n }\n // 子组件传值给父组件\n const getProductInfo=(data)=>{\n // console.log(data, \"产品信息\")\n }\n const getData =()=>{\n // cookie\n let cookieScope = \"\"\n // 任务ID\n let taskIdScope = \"\"\n // 处理cookie\n let winCookie = window.document.cookie\n let winCookieArr = winCookie.split(\";\")\n let userNameScope = \"\"\n let siteScope = \"\"\n let userDepartScope = \"\"\n winCookieArr.forEach((item)=>{\n if (item.indexOf(\"FLOWABLE_REMEMBER_ME\") > -1) {\n let itemArr = item.split(\"=\")\n cookieScope = itemArr[1]\n setCookie(cookieScope)\n }\n })\n // 处理任务ID,用户名称,用户所在部门\n let hashData = \"\"\n let searchData = \"\"\n let search = \"\"\n if (window.location.hash) {\n hashData = window.location.hash\n searchData = hashData.split(\"?\")\n search = searchData[1]\n } else {\n search = window.location.search.slice(1)\n }\n const searchArr = search.split(\"&\")\n searchArr.forEach((item)=>{\n if (item.indexOf(\"taskId\") > -1) {\n taskIdScope = decodeURI(item.split(\"=\")[1])\n setTaskId(taskIdScope)\n // 根据任务ID去查节点ID,然后是否显示视图\n judgeShowExtraForm(taskIdScope)\n window.taskId = taskIdScope\n } else if (item.indexOf(\"formId\") > -1) {\n setFormId(decodeURI(item.split(\"=\")[1]))\n } else if (item.indexOf(\"userDepart\") > -1) {\n userDepartScope = decodeURI(item.split(\"=\")[1])\n setUserDepart(decodeURI(item.split(\"=\")[1]))\n } else if (item.indexOf(\"userName\") > -1) {\n userNameScope = decodeURI(item.split(\"=\")[1])\n setUserName(decodeURI(item.split(\"=\")[1]))\n } else if (item.indexOf(\"site\") > -1) {\n siteScope = decodeURI(item.split(\"=\")[1])\n }\n })\n GetFormList(cookieScope, taskIdScope)\n .then((res)=>{\n // console.log(res)\n if (res.status === 200) {\n\n let fieldData = res.data\n setFormType(fieldData.Type)\n if(fieldData.Type === \"台账\") {\n // 台账类型\n const tableName = fieldData.Config\n getTableName(tableName)\n .then(async(response)=>{\n const dataArr = response.data.getMe[0].Groups\n let formTransfer = new FormTransfer(dataArr)\n let schemadata =await formTransfer.handleGroup()\n setSchema(schemadata)\n setConfigSchema(JSON.stringify(schemadata))\n })\n } else {\n // 表单类型\n setConfigSchema(fieldData.Config)\n const web4Config = {\n userName: userNameScope,\n userDepart: userDepartScope,\n site: siteScope\n }\n // 上一个节点带过来的values\n \n let values = JSON.parse(fieldData.formId).values\n // let values = {}\n const testData = new ConfigSchemaClass(fieldData.ColumnConfig, fieldData.Config, web4Config, fieldData.BackFillList, values)\n setSchema(testData.schema)\n // console.log(fieldData.ColumnConfig, \"fieldData.ColumnConfig\")\n\n // console.log(testData.schema, \"testData.schema\")\n }\n }\n })\n GetTaskBaseInfo(taskIdScope)\n .then((response)=>{\n let data = response.data\n setTaskName(data.TaskName)\n setAssignee(data.Assignee)\n setSTime(data.STime)\n setETime(data.ETime)\n })\n }\n // 处理请求参数\n const hanldeRouterParams =()=>{\n // 处理Cookie\n let winCookie = window.document.cookie\n let winCookieArr = winCookie.split(\";\")\n winCookieArr.forEach((item)=>{\n if (item.indexOf(\"FLOWABLE_REMEMBER_ME\") > -1) {\n let itemArr = item.split(\"=\")\n setCookie(itemArr[1])\n }\n })\n\n // 处理任务ID,用户ID,用户名称,用户所在部门\n let hashData = \"\"\n let searchData = \"\"\n let search = \"\"\n if (window.location.hash) {\n hashData = window.location.hash\n searchData = hashData.split(\"?\")\n search = searchData[1]\n } else {\n search = window.location.search.slice(1)\n }\n const searchArr = search.split(\"&\")\n searchArr.forEach((item)=>{\n if (item.indexOf(\"processInstanceId\") > -1) {\n // console.log(item)\n setProcessDefinitionId(item.split(\"=\")[1])\n } else if (item.indexOf(\"userId\") > -1) {\n setUserId(item.split(\"=\")[1])\n } else if (item.indexOf(\"loginName\") > -1) {\n setUserName(decodeURI(item.split(\"=\")[1]))\n } else if (item.indexOf(\"FormKey\") > -1) {\n setFormKey(decodeURI(item.split(\"=\")[1]))\n }\n })\n }\n // 重置表单\n const handleClick = () => {\n formRef.current.resetData({}).then(res => {\n alert(JSON.stringify(res, null, 2));\n });\n };\n // 返回\n const handleClickReback = ()=>{\n props.history.push({\n pathname: '/form-render/home'\n })\n }\n // 任务移交时候搜索框\n const getTransferName =(value)=>{\n getUserName(value)\n .then((res)=>{\n setUserNameArr(res.data.getMe)\n })\n }\n\n const handleArray=(arr)=> {\n let str = \"\"\n if (arr.length === 0){\n str = \"\"\n } else if (arr.length === 1) {\n str = arr[0] + \"#=#\"\n } else {\n str = arr.join(\"#=#\")\n }\n return str\n }\n \n // 将字符串转数组\n const revertHandleArray=(params) =>{\n let arr = []\n if (!params){\n arr = []\n } else {\n let arrTemp = params.split(\"#=#\")\n arr = arrTemp.filter(s => {\n return s && s.trim()\n })\n }\n return arr\n }\n // 处理FormRenderBaseType\n const handleFormRenderBaseType = (formData, configSchema)=>{\n let arr = []\n const { properties } = JSON.parse(configSchema).schema\n for (const key in properties) {\n for(const fkey in formData) {\n if (key === fkey) {\n for(const ckey in properties[key].properties){\n for(const cfkey in formData[fkey]) {\n if (ckey === cfkey) {\n // let tempValue = \"\"\n // if (Array.isArray(formData[fkey][cfkey])) {\n // tempValue = handleArray(formData[fkey][cfkey])\n // } else {\n // tempValue = formData[fkey][cfkey]\n // }\n let tempValue = formData[fkey][cfkey]\n if (Array.isArray(formData[fkey][cfkey])) {\n tempValue = handleArray(formData[fkey][cfkey])\n }\n arr.push({\n Type: properties[key].properties[ckey].type,\n Name: properties[key].properties[ckey].title,\n Value: tempValue,\n Code: properties[key].properties[ckey].hasOwnProperty(\"code\") && properties[key].properties[ckey].code ? properties[key].properties[ckey].code : \"\"\n })\n }\n }\n }\n }\n }\n }\n return arr;\n }\n // 处理参数\n const handleCondition=(formData, configSchema)=> {\n let arr = handleFormRenderBaseType(formData, configSchema)\n let obj = {}\n arr.forEach((item)=>{\n obj[item.Name] = item.Value\n })\n return obj\n }\n\n // 保存\n const saveTask=()=>{\n // console.log(formData)\n if (valid.length > 0) {\n const validData = new FormDataValid(valid, configSchema)\n message.error(validData.validMsg)\n return\n }\n // let obj = {}\n // if (prevSchemaValues) {\n // for(let pkey in prevSchemaValues) {\n // for(let fkey in formData) {\n // obj[pkey] = prevSchemaValues[pkey]\n // obj[fkey] = formData[fkey]\n // }\n // }\n // }\n const myData = {\n formId:JSON.stringify({\n formId,\n values: formData\n }),\n Config: configSchema,\n FormKey: FormKey,\n FormRenderBaseList: handleFormRenderBaseType(formData, configSchema)\n }\n\n TaskSave(cookie, taskId, myData)\n .then((res)=>{\n message.success('保存成功');\n })\n }\n // 完成\n // 这里的逻辑:点击完成时候,调取GetTransferList接口查询,下一个节点是否有会签,如果没有,该节点直接完成提交,否则,返回下一个节点的候选人\n const completeTask=()=>{\n if (valid.length > 0) {\n const validData = new FormDataValid(valid, configSchema)\n message.error(validData.validMsg)\n return\n }\n const myData = {\n formId:JSON.stringify({\n formId,\n values: formData\n }),\n formId_Post: formId,\n Config: configSchema,\n FormKey: FormKey,\n FormRenderBaseList: handleFormRenderBaseType(formData, configSchema),\n ConditionInfo: JSON.stringify(handleCondition(formData, configSchema))\n }\n GetTransferList(taskId, userId, cookie, myData)\n .then((res)=>{\n if (res.data.say.statusCode === \"0000\") {\n if (res.data.getMe.length > 0) {\n // 打开Modal\n setNextPersonVisible(true)\n // 拿去候选人数组\n // console.log(res.data.getMe)\n setAssigneeList(res.data.getMe)\n } else {\n message.success(\"当前节点已完成\")\n setNextPersonVisible(false)\n }\n } else {\n message.error(res.data.say.errMsg)\n }\n })\n }\n // 选择候选人\n const hanldeAssignChange=(e)=>{\n // console.log(e, \"e\")\n // console.log(assigneeList, \"assigneeList\")\n actArr.push({\n ActID: e.target.actid,\n UserID: e.target.value\n })\n actArr.forEach((item)=>{\n if (item.ActID === e.target.actid) {\n item.UserID = e.target.value\n }\n })\n setChooseArr(actArr)\n // setWorkCode(e.target.value)\n }\n // 完成关闭\n const closeNextPersonModeler=()=>{\n setNextPersonVisible(false)\n }\n\n // 选择候选人之后,完成确定\n const sureNextPersonModeler=()=>{\n let assignArr = []\n assigneeList.forEach((item)=>{\n if (item.PersonInfoList.length > 0) {\n assignArr.push(item)\n }\n })\n if (actArr.length === 0){\n message.error(\"请选择移交人!\")\n return\n }\n var result = [];\n var obj = {};\n for(var i =0; i<chooseArr.length; i++){\n if(!obj[chooseArr[i].ActID]){\n result.push(chooseArr[i]);\n obj[chooseArr[i].ActID] = true;\n }\n }\n if (result.length !== assignArr.length) {\n message.error(\"请给每个节点选择移交人\")\n return\n }\n const myData = {\n formId:JSON.stringify({\n formId,\n values: formData\n }),\n formId_Post: formId,\n Config: configSchema,\n FormKey: FormKey,\n FormRenderBaseList: handleFormRenderBaseType(formData, configSchema),\n TranserSaveModelList: result\n }\n SaveFormInfoTransfer(taskId, userId, cookie, workCode, myData)\n .then(res=>{\n if (res.data.statusCode === \"0000\") {\n setNextPersonVisible(false)\n message.success(\"任务移交成功!\")\n } else {\n message.error(res.data.errMsg)\n }\n })\n }\n // 搜索移交人\n const onTransferSearch=(e)=>{\n let listArr = []\n var ename = e\n assigneeList.map((item) => {\n let list = {\n ActID: item.ActID,\n PersonInfoList: [],\n PointName: item.PointName\n }\n item.PersonInfoList.map((user) => {\n if (user.UserName.indexOf(ename) > -1 || user.UserID.indexOf(ename) > -1) {\n list.PersonInfoList.push(user);\n }\n })\n if (list.PersonInfoList.length) {\n listArr.push(list);\n }\n })\n setAssigneeList(listArr)\n }\n\n // 移交按钮\n const transferTo=()=>{\n getTransferName(\"\")\n setVisible(true)\n }\n // 回退按钮\n const goBack =()=>{\n GetFlowProcessInfo(processDefinitionId)\n .then((res)=>{\n setGoBacktableData(res.data.getMe)\n setRebackVisible(true)\n })\n \n }\n // 取消回退\n const closeRebackModeler=()=>{\n setRebackVisible(false)\n }\n // 确定回退\n const sureRebackModeler=()=>{\n const textVal = backRef.current.state.value\n TaskGoBack(processDefinitionId,taskId,textVal)\n .then((res)=>{\n if (res.data.statusCode === \"0000\") {\n message.success(\"回退成功!\")\n setRebackVisible(false)\n } else {\n message.error(res.data.errMsg)\n }\n })\n }\n //催办\n const urgentTask=()=>{\n GetFlowProcessInfo(processDefinitionId)\n .then((res)=>{\n setUrgentTableData(res.data.getMe)\n setUrgentVisible(true)\n })\n }\n // 取消催办\n const closeUrgentModeler=()=>{\n setUrgentVisible(false)\n }\n // 确定催办\n const sureUrgentModeler=()=>{\n const textVal = urgentRef.current.state.value\n WorkflowUrging(processDefinitionId, userName, textVal)\n .then((res)=>{\n if (res.data.statusCode === \"0000\") {\n message.success(\"催办成功!\")\n setUrgentVisible(false)\n } else {\n message.error(res.data.errMsg)\n }\n })\n }\n // 处理单个文件数据\n const handleFileInfo=(pathname)=>{\n var filename = ''\n var pathnameArr = []\n if (!pathname){\n return\n }\n pathnameArr = pathname.split('/')\n filename = pathnameArr[pathnameArr.length - 1]\n return filename\n }\n // 附件上传\n const openUploadFile = ()=> {\n WorkflowFileOperation(taskId)\n .then((res)=>{\n if (res.data.statusCode === \"0000\") {\n let arr = []\n if (res.data.info !== \"\") {\n if (res.data.info.indexOf(',') > -1) {\n var infoArr = res.data.info.split(\",\")\n infoArr.forEach(item=>{\n arr.push({\n path: document.referrer + 'CityTemp/熊猫智慧水务平台' + item,\n name: handleFileInfo(item),\n state: \"上传成功\"\n })\n })\n } else {\n arr.push({\n path: document.referrer + 'CityTemp/熊猫智慧水务平台' + res.data.info,\n name: handleFileInfo(res.data.info),\n state: \"上传成功\"\n })\n }\n setFileTableData(arr)\n }\n setFileVisible(true)\n } else {\n message.error(res.data.errMsg)\n }\n })\n }\n // 打开上传附件窗口\n const openUploadVisible=()=>{\n setFileVisible(false)\n setUploadVisible(true)\n }\n // 关闭附件上传窗口\n const closeUploadVisible=()=>{\n setUploadVisible(false)\n }\n // 确定上传附件\n const sureUploadVisible=()=>{\n var _url = document.referrer + \"cityinterface/rest/services/filedownload.svc/uploadfile/workflow/\"+ taskId +'/' + upFileName.name;\n var formData = new FormData();\n formData.append(\"filedata\", upFileName);\n var request = new XMLHttpRequest();\n request.open(\"POST\", encodeURI(_url));\n request.onreadystatechange = function() {\n if (request.readyState == 4) {\n if (request.status == 200) {\n try {\n var data = JSON.parse(request.responseText);\n if (data && data.success) {\n message.success(\"数据上传成功\");\n fileuploadToService('workflow', taskId ,upFileName.name)\n } else {\n message.error(\"上传失败\")\n }\n } catch (e) {\n message.error(\"上传失败\")\n }\n } else {\n message.error(\"上传失败\")\n }\n }\n }\n request.send(formData);\n }\n // 上传文件至服务器\n const fileuploadToService=(folderName, timeStamp, fileName)=> {\n const FilePath = `/${folderName}/${timeStamp}/${fileName}`\n uploadToService(taskId, FilePath)\n .then((res)=>{\n if (res.data.statusCode === \"0000\") {\n message.success(\"上传成功!\")\n setUploadVisible(false)\n } else {\n message.error(res.data.errMsg)\n }\n })\n }\n // 获取上传的文件\n const hanldeFileUpload=(e)=>{\n // console.log(e.target.files[0])\n setUpFileName(e.target.files[0])\n }\n // 关闭上传文件的Modal\n const closeFileVisible=()=>{\n setFileVisible(false)\n }\n // 打开查询流转信息\n const showTransFlow=()=>{\n GetFlowProcessInfo(processDefinitionId)\n .then((res)=>{\n setTableData(res.data.getMe)\n setFlowVisible(true)\n })\n }\n // 关闭查询流转信息Modal\n const closeFlow=()=>{\n setFlowVisible(false)\n }\n // 查询流转信息确定\n const sureFlow =()=>{\n setFlowVisible(false)\n }\n // 查看历史节点表单\n const goShowHistoryForm=(taskId)=>{\n return ()=>{\n props.history.push({\n pathname: '/form-render/hisflow',\n state:{\n taskId: taskId,\n userName: userName,\n userDepart: userDepart,\n FormKey: FormKey\n }\n })\n }\n }\n // 获取流程图\n const showModeler=()=>{\n const imgSrc = configData.baseURL + '/rest/Services/PandaWorkflow.svc/GetWorkflowDiagram?processInstanceId=' + processDefinitionId + '&t=' + (new Date()).getTime()\n setProcessImgSrc(imgSrc)\n setModelerVisible(true)\n }\n // 关闭流程图Modal\n const closeModeler=()=>{\n setModelerVisible(false)\n }\n // 移交Modal\n const handleOK=()=>{\n if (!transValue) {\n message.error(\"请检查移交人!\")\n return\n }\n let Condition = JSON.stringify({\n assignee: transValue\n })\n UpdateTaskInfo(Condition, taskId)\n .then((res)=>{\n const parseData = JSON.parse(res.data)\n if (parseData.assignee === transValue) {\n message.success(\"移交成功\")\n setVisible(false)\n } else {\n message.error(\"移交失败,请检查移交人!\")\n }\n })\n }\n // 关闭移交人Modal\n const handleCancel=()=>{\n setVisible(false)\n }\n // 获取任务移交时候数据\n const handleSetTrans=(e)=>{\n setTransValue(e.target.value)\n }\n // 打开作废弹窗\n const openAbolishModal=()=>{\n setAbolishVisible(true)\n }\n // 取消作废\n const closeAbolishVisible=()=>{\n setAbolishVisible(false)\n }\n // 确定作废\n const sureAbolishVisible=()=>{\n WorkflowDelete(processDefinitionId,cookie)\n .then((res)=>{\n if(res.data.statusCode === \"0000\") {\n message.success(\"该流程已作废!\")\n setAbolishVisible(false)\n } else {\n message.error(res.data.errMsg)\n }\n })\n }\n \n useEffect(()=>{\n getData()\n hanldeRouterParams()\n }, [])\n\n return (\n <div className=\"needWrap\">\n <div className=\"deal-headerbox\">\n <h2 className=\"dealheaders\">{TaskName}</h2>\n <div className=\"dealdetails\">\n <p className=\"detail-items\">当前处理人:{Assignee}</p>\n <p className=\"detail-items\">起始时间:{STime}</p>\n <p className=\"detail-items\">截止时间:{ETime}</p>\n </div>\n </div>\n <div className=\"divider-box\"></div>\n <div className=\"btnGroups\">\n <Button type=\"primary\" className=\"table-oper-btn\" style={{ marginRight: 15, width:80 }} onClick={saveTask}>保存</Button>\n <Button type=\"primary\" className=\"table-oper-btn\" style={{ marginRight: 15, width:80 }} onClick={completeTask}>完成</Button>\n <Button type=\"primary\" className=\"table-oper-btn\" style={{ marginRight: 15, width:80 }} onClick={transferTo}>移交</Button>\n <Button type=\"primary\" className=\"table-oper-btn\" style={{ marginRight: 15, width:80 }} onClick={goBack}>回退</Button>\n <Button type=\"primary\" className=\"table-oper-btn\" style={{ marginRight: 15, width:80 }} onClick={openAbolishModal}>作废</Button>\n <Button type=\"primary\" className=\"table-oper-btn\" style={{ marginRight: 15, width:80 }} onClick={urgentTask}>催办</Button>\n <Button type=\"primary\" className=\"table-oper-btn\" style={{ marginRight: 15, width:80 }} onClick={openUploadFile}>附件</Button>\n <Button type=\"primary\" className=\"table-oper-btn\" style={{ marginRight: 15, width:80 }} onClick={showTransFlow}>流转信息</Button>\n <Button type=\"primary\" className=\"table-oper-btn\" style={{ marginRight: 15, width:80 }} onClick={showModeler}>流程图</Button>\n </div>\n <div className=\"divider-box\"></div>\n <Modal title=\"请选择候选人\" visible={nextPersonVisible} onCancel={closeNextPersonModeler} onOk={sureNextPersonModeler} width={650}>\n <div>\n <Search placeholder=\"请输入姓名\" allowClear onSearch={onTransferSearch} enterButton className=\"cadidateinput\"/>\n {\n assigneeList.map((item, index)=>{\n return(\n <div key={index} className=\"radio-wrapper\">\n {\n item.PersonInfoList.length > 0 ?\n <div className=\"radio-content\">\n <div className=\"radio-title\">{item.PointName}</div>\n <Radio.Group name=\"assigngroup\" onChange={hanldeAssignChange}>\n {\n item.PersonInfoList.map((cItem,cIndex)=>{\n return(\n <Radio key={cIndex} actid={item.ActID} value={cItem.UserID}>{cItem.UserName}</Radio>\n )\n })\n }\n </Radio.Group>\n </div>\n :\n null\n }\n </div>\n )\n })\n }\n </div>\n \n </Modal>\n <Modal title=\"任务移交\" visible={visible} onOk={handleOK} onCancel={handleCancel}\n bodyStyle={{height:'500px',overflowY:'auto'}}>\n <div>\n <Search\n className=\"onlistinput\"\n placeholder=\"请输入姓名\"\n allowClear\n style={{width: 400}}\n onSearch={getTransferName}\n />\n </div>\n <Radio.Group name=\"radiogroup\" value={transValue} onChange={handleSetTrans}>\n <div style={{display: 'flex',flexDirection: 'column'}}>\n {\n userNameArr.map((item,index)=>{\n return(\n <Radio value={item.JobNum} key={index}>\n <div style={{display:\"flex\", height:'36px',lineHeight:\"36px\"}}>\n <p style={{width:'120px'}}>{item.DepName}</p>\n <p>{item.Name}</p>\n </div>\n </Radio>\n )\n })\n }\n </div>\n </Radio.Group>\n </Modal>\n <Modal title=\"流程图\" visible={modelerVisible} onCancel={closeModeler} onOk={closeModeler} width={1000}\n bodyStyle={{ display: 'flex',justifyContent: 'center',alignItems:'center'}}>\n <img src={processImgSrc} alt=\"process\"/>\n </Modal>\n\n <Modal title=\"回退\" visible={rebackVisible} onCancel={closeRebackModeler} onOk={sureRebackModeler} width={750}\n bodyStyle={{ display: 'flex',flexDirection: 'column',justifyContent: 'center'}}>\n <Table bordered dataSource={goBacktableData} pagination={false} rowClassName=\"rowClassName\" style={{width:'100%'}}>\n <Column title=\"操作步骤\" dataIndex=\"TaskName\" key=\"TaskName\" align=\"center\"/>\n <Column title=\"开始时间\" dataIndex=\"STime\" key=\"STime\" align=\"center\"/>\n <Column title=\"结束时间\" dataIndex=\"ETime\" key=\"ETime\" align=\"center\"/>\n <Column title=\"操作人账号\" dataIndex=\"OperationMan\" key=\"OperationMan\" align=\"center\"/>\n <Column\n title=\"流程状态\"\n key=\"state\"\n align=\"center\"\n render={(text, record) => (\n <Space size=\"middle\">\n {\n record.DeleteReason !== \"\" ?\n <span>回退</span>\n :\n <span style={{color: record.State === '进行中'? '#096dd9' : ''}}>{record.State === \"提交\" ? \"已完成\": record.State}</span>\n }\n </Space>\n )}\n />\n </Table>\n <p className=\"inputBackReason\">请输入回退意见</p>\n <Input type=\"text\" placeholder=\"请输入回退意见\" ref={backRef}></Input>\n </Modal>\n\n <Modal title=\"催办\" visible={urgentVisible} onCancel={closeUrgentModeler} onOk={sureUrgentModeler} width={750}\n bodyStyle={{ display: 'flex',justifyContent: 'center',flexDirection: 'column'}}>\n <Table bordered dataSource={urgentTableData} pagination={false} rowClassName=\"rowClassName\" style={{width:'100%'}}>\n <Column title=\"操作步骤\" dataIndex=\"TaskName\" key=\"TaskName\" align=\"center\"/>\n <Column title=\"开始时间\" dataIndex=\"STime\" key=\"STime\" align=\"center\"/>\n <Column title=\"结束时间\" dataIndex=\"ETime\" key=\"ETime\" align=\"center\"/>\n <Column title=\"操作人账号\" dataIndex=\"OperationMan\" key=\"OperationMan\" align=\"center\"/>\n <Column\n title=\"流程状态\"\n key=\"state\"\n align=\"center\"\n render={(text, record) => (\n <Space size=\"middle\">\n {\n record.DeleteReason !== \"\" ?\n <span>回退</span>\n :\n <span style={{color: record.State === '进行中'? '#096dd9' : ''}}>{record.State === \"提交\" ? \"已完成\": record.State}</span>\n }\n </Space>\n )}\n />\n </Table>\n <p className=\"inputBackReason\">请输入催办意见</p>\n <Input type=\"text\" placeholder=\"请输入催办意见\" ref={urgentRef}></Input>\n </Modal>\n\n <Modal title=\"流转信息\" visible={flowVisible} onCancel={closeFlow} onOk={sureFlow} width={900}\n bodyStyle={{ display: 'flex',justifyContent: 'center',alignItems:'center'}}>\n <Table bordered dataSource={tableData} pagination={false} rowClassName=\"rowClassName\" style={{width:'100%'}}>\n <Column title=\"操作步骤\" dataIndex=\"TaskName\" key=\"TaskName\" align=\"center\"/>\n <Column title=\"开始时间\" dataIndex=\"STime\" key=\"STime\" align=\"center\"/>\n <Column title=\"结束时间\" dataIndex=\"ETime\" key=\"ETime\" align=\"center\"/>\n <Column title=\"操作人账号\" dataIndex=\"OperationMan\" key=\"OperationMan\" align=\"center\"/>\n <Column\n title=\"流程状态\"\n align=\"center\"\n key=\"state\"\n render={(text, record) => (\n <Space size=\"middle\">\n {\n record.DeleteReason !== \"\" ?\n <span>回退</span>\n :\n <span style={{color: record.State === '进行中'? '#096dd9' : ''}}>{record.State === \"提交\" ? \"已完成\": record.State}</span>\n }\n </Space>\n )}\n />\n <Column\n title=\"操作\"\n key=\"action\"\n render={(text, record) => (\n <Space size=\"middle\">\n {\n record.DeleteReason !== \"\" ?\n <div>\n {record.GoBackReason}\n </div>\n :\n <div>\n <Button className=\"localBtnClass\" size=\"small\" type=\"primary\" onClick={goShowHistoryForm(record.TaskID)}>查看</Button>\n </div>\n }\n </Space>\n )}\n />\n </Table>\n </Modal>\n\n <Modal title=\"附件\" visible={fileVisible} onCancel={closeFileVisible} okText=\"上传附件\" onOk={openUploadVisible} width={680}\n bodyStyle={{ display: 'flex',justifyContent: 'center',alignItems:'center'}}>\n <Table bordered dataSource={fileTableData} pagination={false} rowClassName=\"rowClassName\" style={{width:'100%'}}>\n <Column title=\"文件名\" dataIndex=\"name\" key=\"name\" align=\"center\"/>\n <Column title=\"状态\" dataIndex=\"state\" key=\"state\" align=\"center\"/>\n <Column\n title=\"操作\"\n key=\"action\"\n align=\"center\"\n render={(text, record) => (\n <Space size=\"middle\">\n {\n <div>\n <a href={record.path} download={upFileName.name} style={{marginRight:'10px'}}>下载</a>\n <a href={record.path} target=\"_blank\">预览</a>\n </div>\n }\n </Space>\n )}\n />\n </Table>\n </Modal>\n\n <Modal title=\"上传附件\" visible={uploadVisible} onCancel={closeUploadVisible} onOk={sureUploadVisible}\n bodyStyle={{ display: 'flex',justifyContent: 'center',alignItems:'center'}}>\n <Input type=\"file\" onChange={hanldeFileUpload}></Input>\n </Modal>\n <Modal title=\"流程作废\" visible={abolishVisible} onCancel={closeAbolishVisible} onOk={sureAbolishVisible}\n bodyStyle={{ display: 'flex',justifyContent: 'center',alignItems:'center'}}>\n 确定要作废该流程吗?\n </Modal>\n {/* <FormRender\n ref={formRef}\n {...schema}\n formData={formData}\n onChange={setFormData}\n onValidate={onValidate}\n widgets={{ staff: StaffSelectWidget, cascader: TreeCascader, search: SearchSelect, TableAccount: TableAccount, file:UploadFile, \n editSearch: EditbleSelct, mapSelect: AMapContainer,cityPicker: cityPicker, multiSelect: multiSelect, \n DateTimePicker:DateTimePicker, CodeGenerator:CodeGenerator }}\n /> */}\n <FormRender\n ref={formRef}\n {...schema}\n formData={formData}\n onChange={setFormData}\n onValidate={onValidate}\n widgets={FormRenderWidgets}\n />\n {\n isShowProduct ? \n <div className=\"product-info-box\">\n <ProductInfo getProductInfo={getProductInfo} showAddProductButton={false} taskId={taskId}></ProductInfo>\n </div>\n :\n null\n }\n </div>\n );\n};\n\nexport default NeedToDeal;","G:\\react-flowable\\src\\pages\\StartForm\\StartForm.jsx",["290","291","292","293"],"// 流程发起页面\r\nimport React, { useState, useEffect, useRef } from 'react';\r\nimport FormRender from 'form-render/lib/antd';\r\nimport { Button, message, Input, Modal, Radio } from 'antd';\r\nimport FormTransfer from '../../libs/transform/transform'\r\nimport FormDataValid from '../../libs/FormDataValid/FormDataValid'\r\nimport ConfigSchemaClass from '../../libs/configSchema/configSchema'\r\nimport { GetStartForm, WorkflowStart, getTableName, GetTransferList_FirstNode, AddProduct, GetAssembly_Start } from '../../apis/process'\r\nimport \"./StartForm.less\"\r\nimport ProductInfo from '../../components/ProductInfo/ProductInfo'\r\nimport FormRenderWidgets from '../../libs/FormRenderWidgets/FormRenderWidgets'\r\nconst { Search } = Input;\r\n\r\nlet actArr = []\r\nconst StartForm = (props) => {\r\n // FormRender的formData\r\n const [formData, setFormData] = useState({});\r\n // FormRender的 schema\r\n const [schema, setSchema] = useState({})\r\n // 表单的key\r\n const [FormKey, setFormKey] = useState('')\r\n // 表单的id\r\n const [formId, setFormId] = useState('')\r\n // formRender 校验 数组\r\n const [valid, setValid] = useState([])\r\n // schema的配置文件,需要每次传递保存\r\n const [configSchema, setConfigSchema] = useState('')\r\n // form render 的ref\r\n const formRef = useRef();\r\n // 会签选择候选人Modal\r\n const [nextPersonVisible, setNextPersonVisible] = useState(false)\r\n // 移交人数组\r\n const [chooseArr, setChooseArr] = useState([])\r\n // 会签时候,点击完成,候选人列表\r\n const [assigneeList, setAssigneeList] = useState([])\r\n // 加载产品信息得白名单数组\r\n const [isShowProduct, setIsShowProduct] = useState(false)\r\n // workId\r\n const [ProductModels, setProductModels] = useState([])\r\n // userName\r\n const [myUserName, setMyUserName] = useState(\"\")\r\n\r\n // 校验提交表单\r\n const onValidate=(valid)=>{\r\n setValid(valid)\r\n }\r\n // 判断是否要加产品信息组件\r\n const judgeShowExtraForm=(FlowDefIDArg)=>{\r\n GetAssembly_Start(FlowDefIDArg)\r\n .then((res)=>{\r\n if (res.data.say.statusCode === \"0000\") {\r\n if (res.data.getMe.length > 0) {\r\n res.data.getMe.forEach((item)=>{\r\n if (item.AssemblyName === '产品信息') {\r\n setIsShowProduct(true)\r\n }\r\n })\r\n }\r\n } else {\r\n message.error(res.data.say.errMsg)\r\n }\r\n })\r\n }\r\n // 子组件传值给父组件\r\n const getProductInfo=(data)=>{\r\n setProductModels(data)\r\n }\r\n\r\n // 拉取数据\r\n const getData =async()=>{\r\n // 流程ID\r\n let FlowDefID = props.location.state.FlowDefID\r\n // 用户名\r\n let userName = props.location.state.userName\r\n // 站点\r\n let site = props.location.state.site\r\n setMyUserName(userName)\r\n // 用户部门\r\n let userDepart = props.location.state.userDepart\r\n // 拉取发起流程的第一个节点的表单\r\n let res =await GetStartForm(FlowDefID)\r\n \r\n if (res.data.Errmsg) {\r\n alert(res.data.Errmsg)\r\n return\r\n }\r\n setFormId(res.data.FormID)\r\n setFormKey(res.data.FormKey)\r\n judgeShowExtraForm(FlowDefID)\r\n\r\n if (res.data.Type === \"台账\") {\r\n const tableName = res.data.Form\r\n // 通过台账名称取查询台账字段\r\n let response = await getTableName(tableName)\r\n // 接受台账字段数组\r\n const dataArr = response.data.getMe[0].Groups\r\n // 处理台账各种字段\r\n let formTransfer = new FormTransfer(dataArr)\r\n // 由于异步,需要在外边手动调用处理方法,拿到处理结果\r\n let schemadata =await formTransfer.handleGroup()\r\n \r\n setSchema(schemadata)\r\n setConfigSchema(JSON.stringify(schemadata))\r\n \r\n } else {\r\n let fieldData = res.data\r\n setConfigSchema(fieldData.Form)\r\n\r\n // web4配置文件,用户名,用户部门\r\n const web4Config = {\r\n userName: userName,\r\n userDepart: userDepart,\r\n site: site\r\n }\r\n // 处理表单数据\r\n const testData = new ConfigSchemaClass(fieldData.ColumnConfig, fieldData.Form, web4Config)\r\n setSchema(testData.schema)\r\n }\r\n }\r\n useEffect(()=>{\r\n getData()\r\n },[])\r\n\r\n const handleArray=(arr)=> {\r\n let str = \"\"\r\n if (arr.length === 0){\r\n str = \"\"\r\n } else if (arr.length === 1) {\r\n str = arr[0] + \"#=#\"\r\n } else {\r\n str = arr.join(\"#=#\")\r\n }\r\n return str\r\n }\r\n\r\n // 处理FormRenderBaseType\r\n const handleFormRenderBaseType = (formData, configSchema)=>{\r\n let arr = []\r\n const { properties } = JSON.parse(configSchema).schema\r\n for (const key in properties) {\r\n for(const fkey in formData) {\r\n if (key === fkey) {\r\n for(const ckey in properties[key].properties){\r\n for(const cfkey in formData[fkey]) {\r\n if (ckey === cfkey) {\r\n let tempValue = formData[fkey][cfkey]\r\n if (Array.isArray(formData[fkey][cfkey])) {\r\n tempValue = handleArray(formData[fkey][cfkey])\r\n }\r\n arr.push({\r\n Type: properties[key].properties[ckey].type,\r\n Name: properties[key].properties[ckey].title,\r\n Value: tempValue,\r\n Code: properties[key].properties[ckey].hasOwnProperty(\"code\") && properties[key].properties[ckey].code ? properties[key].properties[ckey].code : \"\"\r\n })\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return arr;\r\n }\r\n\r\n const handleCondition=(formData, configSchema)=> {\r\n let arr = handleFormRenderBaseType(formData, configSchema)\r\n let obj = {}\r\n arr.forEach((item)=>{\r\n obj[item.Name] = item.Value\r\n })\r\n return obj\r\n }\r\n\r\n // 提交\r\n const handleSubmitFirst = () =>{\r\n // console.log(valid)\r\n if (valid.length > 0) {\r\n const validData = new FormDataValid(valid, configSchema)\r\n message.error(validData.validMsg)\r\n return\r\n }\r\n if(!formId){\r\n message.error(\"提交失败!原因:该表单未部署成功,请联系系统管理员!\")\r\n return\r\n }\r\n // 流程定义ID\r\n let processDefinitionId = props.location.state.FlowDefID\r\n\r\n let arr = processDefinitionId.split(\":\")\r\n\r\n // 流程名称\r\n let flowName = arr[0]\r\n // 用户ID\r\n let userId = props.location.state.userId\r\n // 事件编号\r\n let evCode = props.location.state.evCode || \"\"\r\n // 登录名\r\n let loginName = props.location.state.loginName || \"\"\r\n // flowable-engine内部鉴权使用的cookie\r\n let cookie = \"\"\r\n let winCookie = window.document.cookie\r\n let winCookieArr = winCookie.split(\";\")\r\n winCookieArr.forEach((item)=>{\r\n if (item.indexOf(\"FLOWABLE_REMEMBER_ME\") > -1) {\r\n let itemArr = item.split(\"=\")\r\n cookie = itemArr[1]\r\n }\r\n })\r\n const dateEn = [\"January\",\"February\",\"March\",\"April\",\"May\",\"June\", \"July\", \"August\", \"September\", \"October\", \"November\",\"December\"]\r\n let monthName = \"\"\r\n const date = new Date()\r\n const month = date.getMonth()\r\n dateEn.forEach((item,index)=>{\r\n if (index === month) {\r\n monthName = item\r\n }\r\n })\r\n const day = date.getDate()\r\n const year = date.getFullYear()\r\n var FormInfo=JSON.stringify({\r\n formId,\r\n values: formData\r\n })\r\n const myData = {\r\n formId,\r\n FormInfo,\r\n Config: configSchema,\r\n processDefinitionId,\r\n name: `${flowName} - ${monthName} ${day}th ${year}`,\r\n FormKey: FormKey,\r\n FormRenderBaseList: handleFormRenderBaseType(formData, configSchema),\r\n ConditionInfo: JSON.stringify(handleCondition(formData, configSchema))\r\n }\r\n GetTransferList_FirstNode(cookie, userId, evCode, myData)\r\n .then((res)=>{\r\n if (res.data.say.statusCode === \"0000\") {\r\n if (res.data.getMe.length > 0) {\r\n // 所有会签节点的候选人的数量之和\r\n let assLength = 0\r\n for(let i = 0; i < res.data.getMe.length; i++) {\r\n assLength += res.data.getMe[i].PersonInfoList.length\r\n }\r\n if (assLength === 0) {\r\n message.success(\"当前节点已完成\")\r\n } else {\r\n // 打开Modal\r\n setNextPersonVisible(true)\r\n // 拿取候选人数组\r\n // console.log(res.data.getMe)\r\n setAssigneeList(res.data.getMe)\r\n }\r\n } else {\r\n message.success(\"当前节点已完成\")\r\n setNextPersonVisible(false)\r\n }\r\n if (isShowProduct) {\r\n let sayInfoArr = res.data.say.info.split(\",\")\r\n let params = {\r\n WorkId: sayInfoArr[1],\r\n tableName: FormKey,\r\n InputPerson: myUserName,\r\n ProductModels: ProductModels\r\n }\r\n AddProduct(params)\r\n .then((response)=>{\r\n\r\n })\r\n }\r\n } else {\r\n message.error(res.data.say.errMsg)\r\n }\r\n })\r\n }\r\n\r\n // 重置按钮\r\n const handleClick = () => {\r\n formRef.current.resetData({}).then(res => {\r\n alert(JSON.stringify(res, null, 2));\r\n });\r\n };\r\n\r\n const handleGoBack=()=>{\r\n // props.history.push({\r\n // pathname: '/form-render/stpermis'\r\n // })\r\n props.history.go(-1)\r\n }\r\n\r\n // 选择候选人\r\n const hanldeAssignChange=(e)=>{\r\n // console.log(e, \"e\")\r\n // console.log(assigneeList, \"assigneeList\")\r\n actArr.push({\r\n ActID: e.target.actid,\r\n UserID: e.target.value\r\n })\r\n actArr.forEach((item)=>{\r\n if (item.ActID === e.target.actid) {\r\n item.UserID = e.target.value\r\n }\r\n })\r\n setChooseArr(actArr)\r\n // setWorkCode(e.target.value)\r\n }\r\n // 完成关闭\r\n const closeNextPersonModeler=()=>{\r\n setNextPersonVisible(false)\r\n }\r\n\r\n // 选择候选人之后,完成确定\r\n const sureNextPersonModeler=()=>{\r\n let assignArr = []\r\n assigneeList.forEach((item)=>{\r\n if (item.PersonInfoList.length > 0) {\r\n assignArr.push(item)\r\n }\r\n })\r\n if (actArr.length === 0){\r\n message.error(\"请选择移交人!\")\r\n return\r\n }\r\n var result = [];\r\n var obj = {};\r\n for(var i =0; i<chooseArr.length; i++){\r\n if(!obj[chooseArr[i].ActID]){\r\n result.push(chooseArr[i]);\r\n obj[chooseArr[i].ActID] = true;\r\n }\r\n }\r\n if (result.length !== assignArr.length) {\r\n message.error(\"请给每个节点选择移交人\")\r\n return\r\n }\r\n // 流程定义ID\r\n let processDefinitionId = props.location.state.FlowDefID\r\n\r\n let arr = processDefinitionId.split(\":\")\r\n\r\n // 流程名称\r\n let flowName = arr[0]\r\n // 用户ID\r\n let userId = props.location.state.userId\r\n // 事件编号\r\n let evCode = props.location.state.evCode || \"\"\r\n // 登录名\r\n let loginName = props.location.state.loginName || \"\"\r\n // flowable-engine内部鉴权使用的cookie\r\n let cookie = \"\"\r\n let winCookie = window.document.cookie\r\n // console.log(winCookie)\r\n let winCookieArr = winCookie.split(\";\")\r\n winCookieArr.forEach((item)=>{\r\n if (item.indexOf(\"FLOWABLE_REMEMBER_ME\") > -1) {\r\n let itemArr = item.split(\"=\")\r\n cookie = itemArr[1]\r\n }\r\n })\r\n const dateEn = [\"January\",\"February\",\"March\",\"April\",\"May\",\"June\", \"July\", \"August\", \"September\", \"October\", \"November\",\"December\"]\r\n let monthName = \"\"\r\n const date = new Date()\r\n const month = date.getMonth()\r\n dateEn.forEach((item,index)=>{\r\n if (index === month) {\r\n monthName = item\r\n }\r\n })\r\n const day = date.getDate()\r\n const year = date.getFullYear()\r\n var FormInfo=JSON.stringify({\r\n formId,\r\n values: formData\r\n })\r\n const myData = {\r\n formId,\r\n FormInfo,\r\n Config: configSchema,\r\n processDefinitionId,\r\n name: `${flowName} - ${monthName} ${day}th ${year}`,\r\n FormKey: FormKey,\r\n TranserSaveModelList: result\r\n }\r\n WorkflowStart(cookie, userId, evCode, loginName, myData)\r\n .then((res)=>{\r\n setNextPersonVisible(false)\r\n message.success(\"任务移交成功!\")\r\n })\r\n }\r\n // 搜索移交人\r\n const onTransferSearch=(e)=>{\r\n let listArr = []\r\n var ename = e\r\n assigneeList.map((item) => {\r\n let list = {\r\n ActID: item.ActID,\r\n PersonInfoList: [],\r\n PointName: item.PointName\r\n }\r\n item.PersonInfoList.map((user) => {\r\n if (user.UserName.indexOf(ename) > -1 || user.UserID.indexOf(ename) > -1) {\r\n list.PersonInfoList.push(user);\r\n }\r\n })\r\n if (list.PersonInfoList.length) {\r\n listArr.push(list);\r\n }\r\n })\r\n setAssigneeList(listArr)\r\n }\r\n\r\n return (\r\n <div className=\"startwrap-page\">\r\n <div className=\"form-info-box\">\r\n <div className=\"form-info-before\"></div>\r\n <div>{props.location.state.name}</div>\r\n </div>\r\n <div className=\"header-content-divider\"></div>\r\n {/* <FormRender\r\n ref={formRef}\r\n {...schema}\r\n formData={formData}\r\n onChange={setFormData}\r\n onValidate={onValidate}\r\n showValidate={false}\r\n widgets={{ staff: StaffSelectWidget, cascader: TreeCascader, search: SearchSelect, TableAccount: TableAccount, file:UploadFile, editSearch: EditbleSelct, \r\n mapSelect: AMapContainer,cityPicker: cityPicker, multiSelect: multiSelect, DateTimePicker: DateTimePicker,CodeGenerator:CodeGenerator }}\r\n /> */}\r\n <FormRender\r\n ref={formRef}\r\n {...schema}\r\n formData={formData}\r\n onChange={setFormData}\r\n onValidate={onValidate}\r\n showValidate={false}\r\n widgets={FormRenderWidgets}\r\n />\r\n {\r\n isShowProduct ? \r\n <div className=\"product-info-box\">\r\n <ProductInfo getProductInfo={getProductInfo} showAddProductButton={true}></ProductInfo>\r\n </div>\r\n :\r\n null\r\n }\r\n <div className=\"btngroups\">\r\n <Button type=\"primary\" style={{ marginLeft: 30 }} className=\"table-oper-btn\" onClick={handleSubmitFirst}>发起</Button>\r\n <Button style={{ marginLeft: 30 }} className=\"table-oper-btn\" onClick={handleClick}>重置</Button>\r\n <Button style={{ marginLeft: 30 }} className=\"table-oper-btn\" onClick={handleGoBack}>返回</Button>\r\n </div>\r\n <Modal title=\"请选择候选人\" visible={nextPersonVisible} onCancel={closeNextPersonModeler} onOk={sureNextPersonModeler} width={650}>\r\n <div>\r\n <Search placeholder=\"请输入姓名\" onSearch={onTransferSearch} enterButton allowClear/>\r\n {\r\n assigneeList.map((item, index)=>{\r\n return(\r\n <div key={index} className=\"radio-wrapper\">\r\n {\r\n item.PersonInfoList.length > 0 ?\r\n <div className=\"radio-content\">\r\n <div className=\"radio-title\">{item.PointName}</div>\r\n <Radio.Group name=\"assigngroup\" onChange={hanldeAssignChange}>\r\n {\r\n item.PersonInfoList.map((cItem,cIndex)=>{\r\n return(\r\n <Radio key={cIndex} actid={item.ActID} value={cItem.UserID}>{cItem.UserName}</Radio>\r\n )\r\n })\r\n }\r\n </Radio.Group>\r\n </div>\r\n :\r\n null\r\n }\r\n </div>\r\n )\r\n })\r\n }\r\n </div>\r\n \r\n </Modal>\r\n </div>\r\n );\r\n};\r\n\r\nexport default StartForm;","G:\\react-flowable\\src\\pages\\HistoryFlow\\HistoryFlow.jsx",["294","295","296","297","298","299","300","301","302","303","304","305","306","307","308","309","310","311","312","313","314","315","316","317","318","319","320","321","322","323","324","325","326","327","328","329","330","331","332","333","334","335","336","337","338","339","340","341","342","343","344","345","346","347","348","349","350","351","352","353","354","355"],"// 在办\nimport React, { useState, useEffect, useRef } from 'react';\nimport FormRender from 'form-render/lib/antd';\nimport FormTransfer from '../../libs/transform/transform'\nimport ConfigSchemaClass from '../../libs/configSchema/configSchema'\nimport { Button, message} from 'antd';\nimport { getTableName, GetFormList, GetTaskBaseInfo, GetAssemblyByTaskID} from '../../apis/process'\nimport './HistoryFlow.less'\nimport ProductInfo from '../../components/ProductInfo/ProductInfo'\nimport FormRenderWidgets from '../../libs/FormRenderWidgets/FormRenderWidgets'\n\nconst NeedToDeal = (props) => {\n // FormRender提交表单校验\n const [valid, setValid] = useState([])\n // 表单得标识key\n const [FormKey, setFormKey] = useState([])\n // FormRender的formData\n const [formData, setFormData] = useState({});\n // FormRender的schema\n const [schema, setSchema] = useState({})\n // cookie\n const [cookie, setCookie] = useState(\"\")\n // 当前节点的任务ID\n const [taskId, setTaskId] = useState(\"\")\n // 当前节点的流程定义ID\n const [processDefinitionId, setProcessDefinitionId] = useState(\"\")\n // 用户ID\n const [userId, setUserId] = useState(\"\")\n // 表单ID\n const [formId, setFormId] = useState(\"\")\n // 任务移交Modal\n const [visible, setVisible] = useState(false)\n // 会签选择候选人Modal\n const [nextPersonVisible, setNextPersonVisible] = useState(false)\n // 流程图Modal\n const [modelerVisible, setModelerVisible] = useState(false)\n // 回退Modal\n const [rebackVisible, setRebackVisible] = useState(false)\n // 催办Modal\n const [urgentVisible, setUrgentVisible] = useState(false)\n // 候选人\n const [transValue, setTransValue] = useState(null)\n // 候选移交人数组\n const [userNameArr, setUserNameArr] = useState([])\n // 用户名\n const [userName, setUserName] = useState('')\n // 用户所在部门\n const [userDepart, setUserDepart] = useState('')\n // 流程图图片地址\n const [processImgSrc, setProcessImgSrc] = useState(null)\n\n // 流程详细信息\n // 分配人\n const [Assignee, setAssignee] = useState(null)\n // 截至时间\n const [ETime, setETime] = useState(null)\n // 开始时间\n const [STime, setSTime] = useState(null)\n // 任务名称\n const [TaskName, setTaskName] = useState(null)\n // 流转信息数据表格\n const [tableData, setTableData] = useState([])\n // 回退时候查询节点流转信息\n const [goBacktableData, setGoBacktableData] = useState([])\n // 催办时候,查询节点流转信息\n const [urgentTableData, setUrgentTableData] = useState([])\n // 附件数组\n const [fileTableData, setFileTableData] = useState([])\n // 流转信息Modal\n const [flowVisible, setFlowVisible] = useState(false)\n // 附件Modal\n const [fileVisible, setFileVisible] = useState(false)\n // 上传附件Modal\n const [uploadVisible, setUploadVisible] = useState(false)\n // 流程作废Modal\n const [abolishVisible, setAbolishVisible] = useState(false)\n // 上传附件文件的名字\n const [upFileName, setUpFileName] = useState([])\n // 会签点击完成按钮,选择下一个完成人\n const [nextPerson, setNextPerson] = useState('')\n // 会签时候,点击完成,候选人列表\n const [assigneeList, setAssigneeList] = useState([])\n // 下一个移交人\n const [workCode, setWorkCode] = useState(\"\")\n // 配置schema,传递给下一个节点\n const [configSchema, setConfigSchema] = useState('')\n // 前一个节点带过来的values值\n const [prevSchemaValues, setPrevSchemaValues] = useState({})\n // 表单类型:台账或者表单\n const [formType, setFormType] = useState(\"\")\n // 加载产品信息得白名单数组\n const [isShowProduct, setIsShowProduct] = useState(false)\n // FormRender的ref\n const formRef = useRef();\n // 回退的ref\n const backRef = useRef();\n // 催办的ref\n const urgentRef = useRef();\n\n // FormRender提交表单校验\n const onValidate=(valid)=>{\n setValid(valid)\n }\n // 判断是否要加产品信息组件\n const judgeShowExtraForm=(taskIdArg)=>{\n GetAssemblyByTaskID(taskIdArg)\n .then((res)=>{\n if (res.data.say.statusCode === \"0000\") {\n if (res.data.getMe.length > 0) {\n res.data.getMe.forEach((item)=>{\n if (item.AssemblyName === '产品信息') {\n setIsShowProduct(true)\n }\n })\n }\n } else {\n message.error(res.data.say.errMsg)\n }\n })\n }\n // 子组件传值给父组件\n const getProductInfo=(data)=>{\n // console.log(data, \"产品信息\")\n }\n // 拉取数据\n const getData =()=>{\n const FormKey = props.location.state.FormKey\n \n // cookie\n let cookieScope = \"\"\n // 任务ID\n let taskIdScope = props.location.state.taskId\n judgeShowExtraForm(taskIdScope)\n setTaskId(taskIdScope)\n // 处理cookie\n let winCookie = window.document.cookie\n let winCookieArr = winCookie.split(\";\")\n winCookieArr.forEach((item)=>{\n if (item.indexOf(\"FLOWABLE_REMEMBER_ME\") > -1) {\n let itemArr = item.split(\"=\")\n cookieScope = itemArr[1]\n setCookie(cookieScope)\n }\n })\n GetFormList(cookieScope, taskIdScope)\n .then((res)=>{\n // console.log(res)\n if (res.status === 200) {\n let fieldData = res.data\n setFormType(fieldData.Type)\n if(fieldData.Type === \"台账\") {\n // 台账类型\n const tableName = fieldData.Config\n getTableName(tableName)\n .then(async(response)=>{\n const dataArr = response.data.getMe[0].Groups\n let formTransfer = new FormTransfer(dataArr)\n let schemadata =await formTransfer.handleGroup()\n setSchema(schemadata)\n setConfigSchema(JSON.stringify(schemadata))\n })\n } else {\n // 表单类型\n setConfigSchema(fieldData.Config)\n const web4Config = {\n userName: props.location.state.userName,\n userDepart: props.location.state.userDepart\n }\n // 上一个节点带过来的values\n let values = JSON.parse(fieldData.formId).values\n const testData = new ConfigSchemaClass(fieldData.ColumnConfig, fieldData.Config, web4Config, fieldData.BackFillList, values)\n setSchema(testData.schema)\n }\n }\n })\n GetTaskBaseInfo(taskIdScope)\n .then((response)=>{\n let data = response.data\n setTaskName(data.TaskName)\n setAssignee(data.Assignee)\n setSTime(data.STime)\n setETime(data.ETime)\n })\n }\n const goBack=()=>{\n props.history.go(-1)\n }\n useEffect(()=>{\n getData()\n }, [])\n\n return (\n <div className=\"needWrap\">\n <div className=\"deal-headerbox\">\n <h2 className=\"dealheaders\">{TaskName}</h2>\n <div className=\"dealdetails\">\n <p className=\"detail-items\">当前处理人:{Assignee}</p>\n <p className=\"detail-items\">起始时间:{STime}</p>\n <p className=\"detail-items\">截止时间:{ETime}</p>\n </div>\n </div>\n <div className=\"divider-box\"></div>\n {/* <FormRender\n ref={formRef}\n {...schema}\n formData={formData}\n onChange={setFormData}\n onValidate={onValidate}\n showValidate={false}\n widgets={{ staff: StaffSelectWidget, cascader: TreeCascader, search: SearchSelect, TableAccount: TableAccount, file:UploadFile, \n editSearch: EditbleSelct, mapSelect: AMapContainer,cityPicker: cityPicker,multiSelect: multiSelect, \n DateTimePicker:DateTimePicker,CodeGenerator:CodeGenerator }}\n /> */}\n <FormRender\n ref={formRef}\n {...schema}\n formData={formData}\n onChange={setFormData}\n onValidate={onValidate}\n showValidate={false}\n widgets={FormRenderWidgets}\n />\n {\n isShowProduct ? \n <div className=\"product-info-box\">\n <ProductInfo getProductInfo={getProductInfo} showAddProductButton={false} taskId={taskId}></ProductInfo>\n </div>\n :\n null\n }\n <div className=\"btngroups\">\n <Button type=\"primary\" onClick={goBack}>返回</Button>\n </div>\n </div>\n );\n};\n\nexport default NeedToDeal;","G:\\react-flowable\\src\\pages\\FlowPermission\\FlowPermission.jsx",[],"G:\\react-flowable\\src\\pages\\StartPermission\\StartPermission.jsx",["356"],"// 流程发起权限页面\r\nimport React from 'react';\r\nimport { Button, Input, Form, Row, Col, message } from 'antd';\r\nimport { GetWorkflowBaseInfo, flowableLogin } from '../../apis/process';\r\nimport './StartPermission.less';\r\nimport reactCookie from 'react-cookies'\r\nimport flowIcon from \"../../assets/flow-icon.png\"\r\nimport flowArrowIcon from \"../../assets/flow-arrow-right.png\"\r\nimport NoData from '../../components/NoData/NoData'\r\nconst { Search } = Input\r\nclass StartPermission extends React.Component {\r\n state={\r\n userName: '', // web4登录的用户名\r\n loginName: '', // 登录名\r\n flowName: '', // 流程名称\r\n flowArr: [], // isRight为1的流程数组 \r\n defaultVal: [], // 默认值\r\n keyList: [], // 选中的数组\r\n userId: '', // web4登录的用户ID\r\n site: '', // 站点\r\n userDepart: '' // web4登录的用户所在部门\r\n }\r\n // 处理监听选中的值\r\n onChange=(val)=>{\r\n this.setState({\r\n keyList: val\r\n })\r\n }\r\n // 获取输入框输入的值\r\n getInput=(e)=>{\r\n this.setState({\r\n flowName: e.target.value\r\n })\r\n }\r\n // 登录到Flowable\r\n LoginToFlowable = ()=>{\r\n let obj = reactCookie.loadAll()\r\n if (obj.FLOWABLE_REMEMBER_ME && obj.FLOWABLE_REMEMBER_ME !== 'undefined') {\r\n return\r\n }\r\n const myData = {\r\n _spring_security_remember_me:true,\r\n j_password:\"test\",\r\n j_username: this.state.loginName,\r\n submit:\"Login\"\r\n }\r\n flowableLogin(myData)\r\n .then((res)=>{\r\n if (res.data.indexOf('FLOWABLE_REMEMBER_ME') < 0) {\r\n message.error(\"流程引擎服务不可用,请联系管理员\")\r\n return\r\n }\r\n let resArr = res.data.split(';')\r\n let cookieKeyVal = resArr[0]\r\n let cookieArr = cookieKeyVal.split('=')\r\n reactCookie.save(\r\n cookieArr[0],\r\n cookieArr[1],\r\n {\r\n path: '/',\r\n expires: new Date(new Date().getTime() + 7*24 * 3600 * 1000)\r\n }\r\n )\r\n })\r\n }\r\n // 拉取数据\r\n getData=(name = \"\")=>{\r\n let deArr = []\r\n // let name = this.state.flowName || ''\r\n // GetWorkflowBaseInfo(name, '王万里', '', '', 1, 1000)\r\n GetWorkflowBaseInfo(name, this.state.userName, '', '', 1, 1000)\r\n .then((res)=>{\r\n res.data.getMe.forEach((item)=>{\r\n // AccessRight为1时,说明有此流程权限\r\n if (item.AccessRight === '1') {\r\n deArr.push(item)\r\n }\r\n })\r\n this.setState({\r\n flowArr: deArr\r\n })\r\n })\r\n }\r\n // 处理从web4的路由传递过来的参数\r\n handleRouteParams=()=>{\r\n // 用户ID\r\n let userId = \"\"\r\n // 用户名\r\n let userName = \"\"\r\n // 用户部门\r\n let userDepart = \"\"\r\n let loginName = \"\"\r\n let site = \"\"\r\n // 路由的search\r\n let hashData = \"\"\r\n let searchData = \"\"\r\n let search = \"\"\r\n if (window.location.hash) {\r\n hashData = window.location.hash\r\n searchData = hashData.split(\"?\")\r\n search = searchData[1]\r\n } else {\r\n search = window.location.search.slice(1)\r\n }\r\n const searchArr = search.split(\"&\")\r\n // 循环接续值\r\n searchArr.forEach((item)=>{\r\n if (item.indexOf(\"userId\") > -1) {\r\n userId = item.split(\"=\")[1]\r\n } else if (item.indexOf(\"userName\") > -1) {\r\n userName = decodeURI(item.split(\"=\")[1])\r\n } else if (item.indexOf(\"userDepart\") > -1) {\r\n userDepart = decodeURI(item.split(\"=\")[1])\r\n } else if (item.indexOf(\"loginName\") > -1) {\r\n loginName = item.split(\"=\")[1]\r\n } else if (item.indexOf(\"site\") > -1) {\r\n site = decodeURI(item.split(\"=\")[1])\r\n }\r\n })\r\n this.setState({\r\n userId: userId,\r\n userName: userName,\r\n userDepart: userDepart,\r\n loginName: loginName,\r\n site: site\r\n },()=>{\r\n this.getData()\r\n this.LoginToFlowable()\r\n })\r\n }\r\n // 点击发起\r\n handleStart=(name, FlowDefID)=>{\r\n return ()=>{\r\n this.props.history.push({\r\n pathname: '/form-render/start',\r\n state:{\r\n name: name,\r\n FlowDefID: FlowDefID,\r\n userId: this.state.userId,\r\n userName: this.state.userName,\r\n userDepart: this.state.userDepart,\r\n site: this.state.site\r\n }\r\n })\r\n }\r\n }\r\n componentDidMount(){\r\n this.handleRouteParams()\r\n }\r\n render(){\r\n return (\r\n <div className=\"flowpermiss-wrapper\">\r\n <div className=\"form-headerbox\">\r\n <Form layout=\"inline\">\r\n <Form.Item label=\"流程名称\">\r\n {/* <Input type=\"text\" placeholder=\"请输入流程名称\" className=\"header-search\" style={{padding:'2px 0'}} allowClear onChange={this.getInput}></Input> */}\r\n <Search placeholder=\"请输入流程名称\" allowClear className=\"input-text-content\" onSearch={this.getData} style={{ width: 200 }} />\r\n </Form.Item>\r\n {/* <Form.Item>\r\n <Button className=\"localBtnClass\" size=\"small\" type=\"primary\" onClick={this.getData}>查询</Button>\r\n </Form.Item> */}\r\n </Form>\r\n </div>\r\n <div className=\"header-content-divider\"/>\r\n {\r\n this.state.flowArr.length > 0 ?\r\n <div className=\"contentbox\">\r\n <Row gutter={[20, 10]}>\r\n {\r\n this.state.flowArr.map((item,index)=>{\r\n return(\r\n <Col span={6} key={index}>\r\n <div className=\"card-wrapper\" onClick={this.handleStart(item.WorkflowName, item.FlowID)}>\r\n <div className=\"left-card\">\r\n <img src={flowIcon} alt=\"\" className=\"flow-icon\"/>\r\n <span>{item.WorkflowName}</span>\r\n </div>\r\n <div className=\"arrow-class\">\r\n <img src={flowArrowIcon} alt=\"\"/>\r\n </div>\r\n </div>\r\n </Col>\r\n )\r\n })\r\n }\r\n </Row>\r\n </div>\r\n :\r\n <NoData></NoData>\r\n }\r\n \r\n </div>\r\n )\r\n }\r\n \r\n}\r\n\r\nexport default StartPermission\r\n","G:\\react-flowable\\src\\pages\\SetFlowForm\\SetFlowForm.jsx",["357","358","359"],"// 给流程配置需要显示的字段(此页面废弃)\r\nimport React, { useState, useEffect } from 'react'\r\nimport { Button, Input, Form, Row, Col, Tree, message, Modal, Select } from 'antd';\r\nimport { GetActList, SaveColumnConfig, GetColumnConfig } from '../../apis/process';\r\nimport './SetFlowForm.less';\r\n\r\nconst { Option } = Select;\r\n\r\nconst SetFlowForm =(props)=> {\r\n const [nodeFlow, SetNodeFlow] = useState([]) // 节点数组\r\n const [treeData, SetTreeData] = useState([]) // 节点数组\r\n const [flowId, setFlowId] = useState('')\r\n const [schema, setSchema] = useState({})\r\n const [flowName, setFlowName] = useState('')\r\n const [clickIndex, setClickIndex] = useState(1000)\r\n\r\n const [actId, setActId] = useState('')\r\n const [formKey, setFormKey] = useState('')\r\n\r\n const [expandedKeys, setExpandedKeys] = useState([]);\r\n const [checkedKeys, setCheckedKeys] = useState([]);\r\n const [selectedKeys, setSelectedKeys] = useState([]);\r\n const [autoExpandParent, setAutoExpandParent] = useState(true);\r\n\r\n const [inputVisible, setInputVisible] = useState(false)\r\n const [selectVal, setSelectVal] = useState(\"\")\r\n\r\n const [beenConfiged, setBeenConfiged] = useState([])\r\n const [curNodeKey, setCurNodeKey] = useState(\"\")\r\n const [customInput, setCustomInput] = useState(\"\")\r\n\r\n const onChange = (event) => {\r\n const value = event.target.value;\r\n let updateData = []\r\n nodeFlow.forEach((item) => {\r\n if (item.value === value) {\r\n item.checked = !item.checked\r\n }\r\n updateData.push(item)\r\n })\r\n SetNodeFlow(updateData)\r\n }\r\n\r\n const getData = () => {\r\n setFlowId(props.location.state.id)\r\n setFlowName(props.location.state.label)\r\n GetActList(props.location.state.id)\r\n .then((res) => {\r\n SetNodeFlow(res.data.childShapes)\r\n let firstNodeId = res.data.childShapes[0].resourceId\r\n let firstFormKey = res.data.childShapes[0].properties.formreference.key\r\n GetColumnConfig(firstNodeId, firstFormKey)\r\n .then((res)=>{\r\n let resData = res.data.FormJson\r\n let config = JSON.parse(resData).schema\r\n // console.log(config)\r\n setSchema(config)\r\n hanldleNodeForm(config)\r\n })\r\n })\r\n }\r\n const getNodeForm=(nodeId, index, formKey)=>{\r\n return ()=>{\r\n setClickIndex(index)\r\n setActId(nodeId)\r\n setFormKey(formKey)\r\n GetColumnConfig(nodeId, formKey)\r\n .then((res)=>{\r\n let resData = `${res.data.FormJson}`\r\n if (resData) {\r\n let config = JSON.parse(resData).schema\r\n setSchema(config)\r\n hanldleNodeForm(config)\r\n }\r\n setCheckedKeys([]);\r\n })\r\n\r\n }\r\n }\r\n // 处理返回的表单\r\n const hanldleNodeForm =() => {\r\n const { properties } = schema\r\n let propertiesArr = []\r\n for(let key in properties) {\r\n const parentNode = {\r\n title: properties[key].title,\r\n key: key,\r\n children: handleEverGroup(properties[key])\r\n }\r\n propertiesArr.push(parentNode)\r\n }\r\n SetTreeData(propertiesArr)\r\n }\r\n // 处理每一个分组的表单\r\n const handleEverGroup=(itemObj)=>{\r\n const {properties} = itemObj\r\n let arr = []\r\n for(let key in properties) {\r\n arr.push({\r\n title: properties[key].title,\r\n key: key\r\n })\r\n }\r\n return arr\r\n }\r\n\r\n const linkToModeler = () => {\r\n // console.log(beenConfiged)\r\n const keys = checkedKeys.toString()\r\n SaveColumnConfig(actId, formKey, keys)\r\n .then((res)=>{\r\n message.success(\"保存成功!\")\r\n })\r\n }\r\n const onExpand = (expandedKeys) => {\r\n // console.log('onExpand', expandedKeys); // if not set autoExpandParent to false, if children expanded, parent can not collapse.\r\n // or, you can remove all expanded children keys.\r\n\r\n setExpandedKeys(expandedKeys);\r\n setAutoExpandParent(false);\r\n };\r\n\r\n const onCheck = (checkedKeys) => {\r\n // console.log('onCheck', checkedKeys);\r\n setCheckedKeys(checkedKeys);\r\n };\r\n\r\n const onSelect = (selectedKeys, info) => {\r\n // console.log('selectedKeys', selectedKeys)\r\n if (selectedKeys) {\r\n setInputVisible(true)\r\n setCurNodeKey(info.node.key)\r\n }\r\n // console.log('onSelect', info);\r\n setSelectedKeys(selectedKeys);\r\n };\r\n\r\n const hanldeOkInput=()=>{\r\n beenConfiged.push({\r\n key: curNodeKey,\r\n defaultValue: selectVal === \"自定义值选择器\" ? customInput : selectVal\r\n })\r\n setBeenConfiged(beenConfiged)\r\n setInputVisible(false)\r\n }\r\n\r\n const closeOnCancel=()=>{\r\n setInputVisible(false)\r\n }\r\n\r\n const hanldeInputChange=(e)=>{\r\n setCustomInput(e.target.value)\r\n }\r\n\r\n const handleChange=(val)=>{\r\n setSelectVal(val)\r\n }\r\n\r\n useEffect(()=>{\r\n getData()\r\n hanldleNodeForm()\r\n }, [])\r\n \r\n return (\r\n <div className=\"setform-wrapper\">\r\n <div className=\"setform-contentheader\">\r\n <h3>{flowName}</h3>\r\n </div>\r\n <Row>\r\n <Col span={8}>\r\n <div className=\"setform-headerbox\">\r\n {\r\n nodeFlow.map((item, index) => {\r\n return (\r\n <div className=\"setform-itembox\" style={{backgroundColor: clickIndex === index ? '#dddddd': ''}} title={item.properties.name} key={index} onClick={getNodeForm(item.resourceId, index, item.properties.formreference.key)}>\r\n 节点名称:{item.properties.name}\r\n </div>\r\n )\r\n })\r\n }\r\n </div>\r\n </Col>\r\n <Col span={12}>\r\n <div className=\"setform-contentbox\">\r\n <Tree\r\n checkable\r\n onExpand={onExpand}\r\n expandedKeys={expandedKeys}\r\n autoExpandParent={autoExpandParent}\r\n onCheck={onCheck}\r\n checkedKeys={checkedKeys}\r\n onSelect={onSelect}\r\n selectedKeys={selectedKeys}\r\n treeData={treeData}\r\n />\r\n </div>\r\n </Col>\r\n </Row>\r\n <div className=\"bottom-btn\">\r\n <Row>\r\n <Col span={8}></Col>\r\n <Col span={12}>\r\n <Button type=\"primary\" style={{width:'100px'}} className=\"table-oper-btn\" onClick={linkToModeler}>保存</Button> \r\n </Col>\r\n </Row>\r\n </div>\r\n \r\n <Modal title=\"请配置默认值\" visible={inputVisible} onOk={hanldeOkInput} onCancel={closeOnCancel}>\r\n <Form layout=\"vertical\" >\r\n <Form.Item label=\"选择属性\">\r\n <Select style={{ width: '100%' }} onChange={handleChange} allowClear value={selectVal}>\r\n <Option value=\"本人姓名\">本人姓名</Option>\r\n <Option value=\"本人部门\">本人部门</Option>\r\n <Option value=\"自定义值选择器\">自定义值选择器</Option>\r\n </Select>\r\n </Form.Item>\r\n {\r\n selectVal === '自定义值选择器' ?\r\n <Form.Item label=\"自定义值选择器\">\r\n <Input type=\"text\" placeholder=\"请以逗号分隔\" onChange={hanldeInputChange}></Input>\r\n </Form.Item>\r\n :\r\n null\r\n }\r\n \r\n </Form>\r\n </Modal>\r\n </div>\r\n )\r\n}\r\n\r\nexport default SetFlowForm\r\n","G:\\react-flowable\\src\\pages\\DoneDeal\\DoneDeal.jsx",["360","361","362","363","364","365","366","367","368","369","370","371","372","373","374","375","376","377","378","379","380","381","382","383","384","385","386","387","388","389","390","391","392","393","394","395","396","397","398","399"],"// 在办\r\nimport React, { useState, useEffect, useRef } from 'react';\r\nimport FormRender from 'form-render/lib/antd';\r\nimport FormTransfer from '../../libs/transform/transform'\r\nimport ConfigSchemaClass from '../../libs/configSchema/configSchema'\r\nimport configData from '../../utils/config'\r\nimport { Button, Modal, Input, Table, Space, message} from 'antd';\r\nimport { getTableName, GetFormList, GetTaskBaseInfo, GetFlowProcessInfo, WorkflowFileOperation, GetAssemblyByTaskID} from '../../apis/process'\r\nimport './DoneDeal.less'\r\nimport ProductInfo from '../../components/ProductInfo/ProductInfo'\r\nimport FormRenderWidgets from '../../libs/FormRenderWidgets/FormRenderWidgets'\r\n\r\nconst { Search } = Input;\r\nconst { Column } = Table;\r\n\r\nconst NeedToDeal = (props) => {\r\n // FormRender提交表单校验\r\n const [valid, setValid] = useState([])\r\n // 表单得标识key\r\n const [FormKey, setFormKey] = useState([])\r\n // FormRender的formData\r\n const [formData, setFormData] = useState({});\r\n // FormRender的schema\r\n const [schema, setSchema] = useState({})\r\n // cookie\r\n const [cookie, setCookie] = useState(\"\")\r\n // 当前节点的任务ID\r\n const [taskId, setTaskId] = useState(\"\")\r\n // 当前节点的流程定义ID\r\n const [processDefinitionId, setProcessDefinitionId] = useState(\"\")\r\n // 用户ID\r\n const [userId, setUserId] = useState(\"\")\r\n // 表单ID\r\n const [formId, setFormId] = useState(\"\")\r\n // 任务移交Modal\r\n const [visible, setVisible] = useState(false)\r\n // 会签选择候选人Modal\r\n const [nextPersonVisible, setNextPersonVisible] = useState(false)\r\n // 流程图Modal\r\n const [modelerVisible, setModelerVisible] = useState(false)\r\n // 回退Modal\r\n const [rebackVisible, setRebackVisible] = useState(false)\r\n // 催办Modal\r\n const [urgentVisible, setUrgentVisible] = useState(false)\r\n // 候选人\r\n const [transValue, setTransValue] = useState(null)\r\n // 候选移交人数组\r\n const [userNameArr, setUserNameArr] = useState([])\r\n // 用户名\r\n const [userName, setUserName] = useState('')\r\n // 用户所在部门\r\n const [userDepart, setUserDepart] = useState('')\r\n // 流程图图片地址\r\n const [processImgSrc, setProcessImgSrc] = useState(null)\r\n\r\n // 流程详细信息\r\n // 分配人\r\n const [Assignee, setAssignee] = useState(null)\r\n // 截至时间\r\n const [ETime, setETime] = useState(null)\r\n // 开始时间\r\n const [STime, setSTime] = useState(null)\r\n // 任务名称\r\n const [TaskName, setTaskName] = useState(null)\r\n // 流转信息数据表格\r\n const [tableData, setTableData] = useState([])\r\n // 回退时候查询节点流转信息\r\n const [goBacktableData, setGoBacktableData] = useState([])\r\n // 催办时候,查询节点流转信息\r\n const [urgentTableData, setUrgentTableData] = useState([])\r\n // 附件数组\r\n const [fileTableData, setFileTableData] = useState([])\r\n // 流转信息Modal\r\n const [flowVisible, setFlowVisible] = useState(false)\r\n // 附件Modal\r\n const [fileVisible, setFileVisible] = useState(false)\r\n // 上传附件Modal\r\n const [uploadVisible, setUploadVisible] = useState(false)\r\n // 流程作废Modal\r\n const [abolishVisible, setAbolishVisible] = useState(false)\r\n // 上传附件文件的名字\r\n const [upFileName, setUpFileName] = useState([])\r\n // 会签点击完成按钮,选择下一个完成人\r\n const [nextPerson, setNextPerson] = useState('')\r\n // 会签时候,点击完成,候选人列表\r\n const [assigneeList, setAssigneeList] = useState([])\r\n // 下一个移交人\r\n const [workCode, setWorkCode] = useState(\"\")\r\n // 配置schema,传递给下一个节点\r\n const [configSchema, setConfigSchema] = useState('')\r\n // 前一个节点带过来的values值\r\n const [prevSchemaValues, setPrevSchemaValues] = useState({})\r\n // 加载产品信息得白名单数组\r\n const [isShowProduct, setIsShowProduct] = useState(false)\r\n // 表单类型:台账或者表单\r\n const [formType, setFormType] = useState(\"\")\r\n // FormRender的ref\r\n const formRef = useRef();\r\n // 回退的ref\r\n const backRef = useRef();\r\n // 催办的ref\r\n const urgentRef = useRef();\r\n\r\n // FormRender提交表单校验\r\n const onValidate=(valid)=>{\r\n setValid(valid)\r\n }\r\n // 判断是否要加产品信息组件\r\n const judgeShowExtraForm=(taskIdArg)=>{\r\n GetAssemblyByTaskID(taskIdArg)\r\n .then((res)=>{\r\n if (res.data.say.statusCode === \"0000\") {\r\n if (res.data.getMe.length > 0) {\r\n res.data.getMe.forEach((item)=>{\r\n if (item.AssemblyName === '产品信息') {\r\n setIsShowProduct(true)\r\n }\r\n })\r\n }\r\n } else {\r\n message.error(res.data.say.errMsg)\r\n }\r\n })\r\n }\r\n // 子组件传值给父组件\r\n const getProductInfo=(data)=>{\r\n // console.log(data, \"产品信息\")\r\n }\r\n // 拉取数据\r\n const getData =()=>{\r\n // cookie\r\n let cookieScope = \"\"\r\n // 任务ID\r\n let taskIdScope = \"\"\r\n // 处理cookie\r\n let winCookie = window.document.cookie\r\n let winCookieArr = winCookie.split(\";\")\r\n let userNameScope = \"\"\r\n let siteScope = \"\"\r\n let userDepartScope = \"\"\r\n winCookieArr.forEach((item)=>{\r\n if (item.indexOf(\"FLOWABLE_REMEMBER_ME\") > -1) {\r\n let itemArr = item.split(\"=\")\r\n cookieScope = itemArr[1]\r\n setCookie(cookieScope)\r\n }\r\n })\r\n // 处理任务ID,用户名称,用户所在部门\r\n let hashData = \"\"\r\n let searchData = \"\"\r\n let search = \"\"\r\n if (window.location.hash) {\r\n hashData = window.location.hash\r\n searchData = hashData.split(\"?\")\r\n search = searchData[1]\r\n } else {\r\n search = window.location.search.slice(1)\r\n }\r\n const searchArr = search.split(\"&\")\r\n searchArr.forEach((item)=>{\r\n if (item.indexOf(\"taskId\") > -1) {\r\n taskIdScope = decodeURI(item.split(\"=\")[1])\r\n judgeShowExtraForm(taskIdScope)\r\n setTaskId(taskIdScope)\r\n window.taskId = taskIdScope\r\n } else if (item.indexOf(\"formId\") > -1) {\r\n setFormId(decodeURI(item.split(\"=\")[1]))\r\n } else if (item.indexOf(\"userDepart\") > -1) {\r\n userDepartScope = decodeURI(item.split(\"=\")[1])\r\n setUserDepart(decodeURI(item.split(\"=\")[1]))\r\n } else if (item.indexOf(\"userName\") > -1) {\r\n userNameScope = decodeURI(item.split(\"=\")[1])\r\n setUserName(decodeURI(item.split(\"=\")[1]))\r\n } else if (item.indexOf(\"site\") > -1) {\r\n siteScope = decodeURI(item.split(\"=\")[1])\r\n }\r\n })\r\n GetFormList(cookieScope, taskIdScope)\r\n .then((res)=>{\r\n // console.log(res)\r\n if (res.status === 200) {\r\n\r\n let fieldData = res.data\r\n setFormType(fieldData.Type)\r\n if(fieldData.Type === \"台账\") {\r\n // 台账类型\r\n const tableName = fieldData.Config\r\n getTableName(tableName)\r\n .then(async(response)=>{\r\n const dataArr = response.data.getMe[0].Groups\r\n let formTransfer = new FormTransfer(dataArr)\r\n let schemadata =await formTransfer.handleGroup()\r\n setSchema(schemadata)\r\n setConfigSchema(JSON.stringify(schemadata))\r\n })\r\n } else {\r\n // 表单类型\r\n setConfigSchema(fieldData.Config)\r\n const web4Config = {\r\n userName: userNameScope,\r\n userDepart: userDepartScope,\r\n site: siteScope\r\n }\r\n // 上一个节点带过来的values\r\n let values = JSON.parse(fieldData.formId).values\r\n const testData = new ConfigSchemaClass(fieldData.ColumnConfig, fieldData.Config, web4Config, fieldData.BackFillList,values)\r\n setSchema(testData.schema)\r\n }\r\n }\r\n })\r\n GetTaskBaseInfo(taskIdScope)\r\n .then((response)=>{\r\n let data = response.data\r\n setTaskName(data.TaskName)\r\n setAssignee(data.Assignee)\r\n setSTime(data.STime)\r\n setETime(data.ETime)\r\n })\r\n }\r\n // 处理请求参数\r\n const hanldeRouterParams =()=>{\r\n // 处理Cookie\r\n let winCookie = window.document.cookie\r\n let winCookieArr = winCookie.split(\";\")\r\n winCookieArr.forEach((item)=>{\r\n if (item.indexOf(\"FLOWABLE_REMEMBER_ME\") > -1) {\r\n let itemArr = item.split(\"=\")\r\n setCookie(itemArr[1])\r\n }\r\n })\r\n\r\n // 处理任务ID,用户ID,用户名称,用户所在部门\r\n let hashData = \"\"\r\n let searchData = \"\"\r\n let search = \"\"\r\n if (window.location.hash) {\r\n hashData = window.location.hash\r\n searchData = hashData.split(\"?\")\r\n search = searchData[1]\r\n } else {\r\n search = window.location.search.slice(1)\r\n }\r\n // console.log(search)\r\n const searchArr = search.split(\"&\")\r\n searchArr.forEach((item)=>{\r\n if (item.indexOf(\"processInstanceId\") > -1) {\r\n // console.log(item)\r\n setProcessDefinitionId(item.split(\"=\")[1])\r\n } else if (item.indexOf(\"userId\") > -1) {\r\n setUserId(item.split(\"=\")[1])\r\n } else if (item.indexOf(\"loginName\") > -1) {\r\n setUserName(decodeURI(item.split(\"=\")[1]))\r\n } else if (item.indexOf(\"FormKey\") > -1) {\r\n setFormKey(decodeURI(item.split(\"=\")[1]))\r\n }\r\n })\r\n }\r\n // 处理单个文件数据\r\n const handleFileInfo=(pathname)=>{\r\n var filename = ''\r\n var pathnameArr = []\r\n if (!pathname){\r\n return\r\n }\r\n pathnameArr = pathname.split('/')\r\n filename = pathnameArr[pathnameArr.length - 1]\r\n return filename\r\n }\r\n // 附件上传\r\n const uploadFile = ()=> {\r\n WorkflowFileOperation(taskId)\r\n .then((res)=>{\r\n if (res.data.statusCode === \"0000\") {\r\n let arr = []\r\n if (res.data.info !== \"\") {\r\n if (res.data.info.indexOf(',') > -1) {\r\n var infoArr = res.data.info.split(\",\")\r\n infoArr.forEach(item=>{\r\n arr.push({\r\n path: document.referrer + 'CityTemp/熊猫智慧水务平台' + item,\r\n name: handleFileInfo(item),\r\n state: \"上传成功\"\r\n })\r\n })\r\n } else {\r\n arr.push({\r\n path: document.referrer + 'CityTemp/熊猫智慧水务平台' + res.data.info,\r\n name: handleFileInfo(res.data.info),\r\n state: \"上传成功\"\r\n })\r\n }\r\n // console.log(arr)\r\n setFileTableData(arr)\r\n }\r\n setFileVisible(true)\r\n } else {\r\n message.error(res.data.errMsg)\r\n }\r\n })\r\n }\r\n // 打开上传附件窗口\r\n const openUploadVisible=()=>{\r\n setFileVisible(false)\r\n }\r\n // 关闭上传文件的Modal\r\n const closeFileVisible=()=>{\r\n setFileVisible(false)\r\n }\r\n // 打开查询流转信息\r\n const showTransFlow=()=>{\r\n GetFlowProcessInfo(processDefinitionId)\r\n .then((res)=>{\r\n setTableData(res.data.getMe)\r\n setFlowVisible(true)\r\n })\r\n }\r\n // 关闭查询流转信息Modal\r\n const closeFlow=()=>{\r\n setFlowVisible(false)\r\n }\r\n // 查询流转信息确定\r\n const sureFlow =()=>{\r\n setFlowVisible(false)\r\n }\r\n // 查看历史节点表单\r\n const goShowHistoryForm=(taskId)=>{\r\n return ()=>{\r\n props.history.push({\r\n pathname: '/form-render/hisflow',\r\n state:{\r\n taskId: taskId,\r\n userName: userName,\r\n userDepart:userDepart,\r\n FormKey: FormKey\r\n }\r\n })\r\n }\r\n }\r\n // 获取流程图\r\n const showModeler=()=>{\r\n const imgSrc = configData.baseURL + '/rest/Services/PandaWorkflow.svc/GetWorkflowDiagram?processInstanceId=' + processDefinitionId + '&t=' + (new Date()).getTime()\r\n setProcessImgSrc(imgSrc)\r\n setModelerVisible(true)\r\n }\r\n // 关闭流程图Modal\r\n const closeModeler=()=>{\r\n setModelerVisible(false)\r\n }\r\n\r\n \r\n \r\n useEffect(()=>{\r\n getData()\r\n hanldeRouterParams()\r\n }, [])\r\n\r\n return (\r\n <div className=\"needWrap\">\r\n <div className=\"deal-headerbox\">\r\n <h2 className=\"dealheaders\">{TaskName}</h2>\r\n <div className=\"dealdetails\">\r\n <p className=\"detail-items\">当前处理人:{Assignee}</p>\r\n <p className=\"detail-items\">起始时间:{STime}</p>\r\n <p className=\"detail-items\">截止时间:{ETime}</p>\r\n </div>\r\n </div>\r\n <div className=\"divider-box\"></div>\r\n <div className=\"btnGroups\">\r\n <Button type=\"primary\" className=\"table-oper-btn\" style={{ marginRight: 15, width:80 }} onClick={uploadFile}>附件</Button>\r\n <Button type=\"primary\" className=\"table-oper-btn\" style={{ marginRight: 15, width:80 }} onClick={showTransFlow}>流转信息</Button>\r\n <Button type=\"primary\" className=\"table-oper-btn\" style={{ marginRight: 15, width:80 }} onClick={showModeler}>流程图</Button>\r\n </div>\r\n <div className=\"divider-box\"></div>\r\n <Modal title=\"流程图\" visible={modelerVisible} onCancel={closeModeler} onOk={closeModeler} width={1000}\r\n bodyStyle={{ display: 'flex',justifyContent: 'center',alignItems:'center'}}>\r\n <img src={processImgSrc} alt=\"process\"/>\r\n </Modal>\r\n\r\n\r\n <Modal title=\"流转信息\" visible={flowVisible} onCancel={closeFlow} onOk={sureFlow} width={900}\r\n bodyStyle={{ display: 'flex',justifyContent: 'center',alignItems:'center'}}>\r\n <Table bordered dataSource={tableData} pagination={false} rowClassName=\"rowClassName\">\r\n <Column title=\"操作步骤\" dataIndex=\"TaskName\" key=\"TaskName\" align=\"center\"/>\r\n <Column title=\"开始时间\" dataIndex=\"STime\" key=\"STime\" align=\"center\"/>\r\n <Column title=\"结束时间\" dataIndex=\"ETime\" key=\"ETime\" align=\"center\"/>\r\n <Column title=\"操作人账号\" dataIndex=\"OperationMan\" key=\"OperationMan\" align=\"center\"/>\r\n <Column\r\n title=\"流程状态\"\r\n key=\"state\"\r\n align=\"center\"\r\n render={(text, record) => (\r\n <Space size=\"middle\">\r\n {\r\n record.DeleteReason !== \"\" ?\r\n <span>回退</span>\r\n :\r\n <span style={{color: record.State === '进行中'? '#096dd9' : ''}}>{record.State === \"提交\" ? \"已完成\": record.State}</span>\r\n }\r\n </Space>\r\n )}\r\n />\r\n <Column\r\n width={150}\r\n title=\"操作\"\r\n key=\"action\"\r\n align=\"center\"\r\n render={(text, record) => (\r\n <Space size=\"middle\">\r\n {\r\n record.DeleteReason !== \"\" ?\r\n <div>\r\n {record.GoBackReason}\r\n </div>\r\n :\r\n <div>\r\n <Button className=\"localBtnClass\" size=\"small\" type=\"primary\" onClick={goShowHistoryForm(record.TaskID)}>查看</Button>\r\n </div>\r\n }\r\n </Space>\r\n )}\r\n />\r\n </Table>\r\n </Modal>\r\n\r\n <Modal title=\"附件\" visible={fileVisible} onCancel={closeFileVisible} okText=\"确定\" onOk={openUploadVisible} width={680}\r\n bodyStyle={{ display: 'flex',justifyContent: 'center',alignItems:'center'}}>\r\n <Table bordered dataSource={fileTableData} pagination={false} rowClassName=\"rowClassName\" style={{width:'100%'}}>\r\n <Column title=\"文件名\" dataIndex=\"name\" key=\"name\" align=\"center\"/>\r\n <Column title=\"状态\" dataIndex=\"state\" key=\"state\" align=\"center\"/>\r\n <Column\r\n title=\"操作\"\r\n align=\"center\"\r\n key=\"action\"\r\n render={(text, record) => (\r\n <Space size=\"middle\">\r\n {\r\n <div>\r\n <a href={record.path} download={upFileName.name} style={{marginRight:'10px'}}>下载</a>\r\n <a href={record.path} target=\"_blank\">预览</a>\r\n </div>\r\n }\r\n </Space>\r\n )}\r\n />\r\n </Table>\r\n </Modal>\r\n \r\n {/* <FormRender\r\n ref={formRef}\r\n {...schema}\r\n formData={formData}\r\n onChange={setFormData}\r\n onValidate={onValidate}\r\n showValidate={false}\r\n widgets={{ staff: StaffSelectWidget, cascader: TreeCascader, search: SearchSelect, TableAccount: TableAccount, file:UploadFile, \r\n editSearch: EditbleSelct, mapSelect: AMapContainer,cityPicker: cityPicker,multiSelect: multiSelect, \r\n DateTimePicker:DateTimePicker,CodeGenerator: CodeGenerator }}\r\n /> */}\r\n <FormRender\r\n ref={formRef}\r\n {...schema}\r\n formData={formData}\r\n onChange={setFormData}\r\n onValidate={onValidate}\r\n showValidate={false}\r\n widgets={FormRenderWidgets}\r\n />\r\n {\r\n isShowProduct ? \r\n <div className=\"product-info-box\">\r\n <ProductInfo getProductInfo={getProductInfo} showAddProductButton={false} taskId={taskId}></ProductInfo>\r\n </div>\r\n :\r\n null\r\n }\r\n </div>\r\n );\r\n};\r\n\r\nexport default NeedToDeal;","G:\\react-flowable\\src\\pages\\EventList\\EventList.jsx",["400","401","402","403","404","405","406","407","408","409","410","411"],"// 事件中心列表\r\nimport React, { useState, useEffect, useRef } from 'react';\r\nimport { Table, Space, Input, Button, Modal, Form, message } from 'antd';\r\nimport { GetEventList, EventOperate } from '../../apis/process'\r\nimport './EventList.less'\r\nimport NoDataImg from '../../assets/nodata.png'\r\nimport NoData from '../../components/NoData/NoData'\r\nconst { Column } = Table;\r\nconst { Search } = Input;\r\n\r\n\r\nconst EventList = (props) => {\r\n // 事件列表\r\n const [data, setData] = useState([])\r\n // 事件名称\r\n const [eventName, setEventName] = useState('')\r\n // 搜索框值\r\n const [searchName, setSearchName] = useState(\"\")\r\n // 事件编号\r\n const [EventCode, setEventCode] = useState('')\r\n // 滚动高度\r\n const [clientHeight, setClientHeight] = useState(0)\r\n //\r\n const [userName, setUserName] = useState(\"\")\r\n const [loginName, setLoginName] = useState(\"\")\r\n // 事件类型的名称输入框\r\n const eventNameRef = useRef()\r\n // 事件类型描述输入框\r\n const eventDescRef = useRef()\r\n // Modal\r\n const [isModalVisible, setIsModalVisible] = useState(false)\r\n // 删除Modal\r\n const [isDelEvent, setIsDelEvent] = useState(false)\r\n // total\r\n const [total, setTotal] = useState(0)\r\n \r\n // 设置分页属性,20条/页\r\n const [pagination, setPagination] = useState({\r\n hideOnSinglePage: false,\r\n pageSizeOptions: [20,30,50],\r\n showQuickJumper: true,\r\n total: total,\r\n showTotal: total => `总共 ${total} 条数据`,\r\n size: 'small',\r\n pageSize: 20\r\n })\r\n // 搜索按钮\r\n const onSearch =(data) =>{\r\n setEventName(data)\r\n getData(data)\r\n }\r\n // 跳转到事件权限配置\r\n const handleEventConfig=(name)=>{\r\n return ()=>{\r\n props.history.push({\r\n pathname: '/form-render/eventper',\r\n state:{\r\n name: name\r\n }\r\n })\r\n }\r\n }\r\n // 打开新增事件\r\n const goToNewEventForm=()=>{\r\n props.history.push({\r\n pathname: '/form-render/newevform'\r\n })\r\n setIsModalVisible(true)\r\n }\r\n // 点击确定新增事件类型\r\n const handleOk=()=>{\r\n setIsModalVisible(false)\r\n }\r\n // 点击取消按钮,取消新增\r\n const handleCancel=()=>{\r\n setIsModalVisible(false)\r\n eventDescRef.current.state.value = ''\r\n eventNameRef.current.state.value = ''\r\n }\r\n\r\n // 查看事件\r\n const handleShow=(name)=>{\r\n return ()=>{\r\n props.history.push({\r\n pathname: '/form-render/eventshow',\r\n state: {\r\n name: name,\r\n searchName: eventName\r\n }\r\n })\r\n }\r\n }\r\n // 确定删除\r\n const handleSureDel=()=>{\r\n EventOperate(eventName, 0, EventCode)\r\n .then((res)=>{\r\n if (res.data.statusCode === \"0000\") {\r\n getData()\r\n setIsDelEvent(false)\r\n message.success(\"删除成功\")\r\n }else {\r\n message.error(res.data.errMsg)\r\n }\r\n })\r\n }\r\n // 不删除\r\n const handleCancelDel=()=>{\r\n setIsDelEvent(false)\r\n }\r\n // 删除事件类型\r\n const handleDel=(name, code)=>{\r\n return ()=>{\r\n setEventName(name)\r\n setEventCode(code)\r\n setIsDelEvent(true)\r\n }\r\n }\r\n // 配置事件流程\r\n const handleConfig=(name) =>{\r\n return ()=>{\r\n props.history.push({\r\n pathname: '/form-render/eventconfig',\r\n state: {\r\n name: name,\r\n searchName: eventName,\r\n userName: userName\r\n }\r\n })\r\n }\r\n }\r\n\r\n // 拉取数据\r\n const getData =async(eventName = '')=>{\r\n let result = await GetEventList(eventName)\r\n result.data.getMe.forEach((item, index)=>{\r\n item.index = index+ 1\r\n item.key = item.ID\r\n })\r\n setData(result.data.getMe)\r\n setTotal(result.data.totalRcdNum)\r\n }\r\n\r\n const computeHeight=()=>{\r\n var height = document.documentElement.clientHeight;\r\n // console.log(height)\r\n setClientHeight(height - 190)\r\n }\r\n const handleOnChange=(e)=>{\r\n // console.log(e)\r\n setEventName(e.target.value)\r\n }\r\n\r\n // 处理从web4的路由传递过来的参数\r\n const handleRouteParams=()=>{\r\n let userId = \"\"\r\n let userName = \"\"\r\n // 用户部门\r\n let userDepart = \"\"\r\n let loginName= \"\"\r\n // 路由的search\r\n let hashData = \"\"\r\n let searchData = \"\"\r\n let search = \"\"\r\n if (window.location.hash) {\r\n hashData = window.location.hash\r\n searchData = hashData.split(\"?\")\r\n search = searchData[1]\r\n } else {\r\n search = window.location.search.slice(1)\r\n }\r\n const searchArr = search.split(\"&\")\r\n // 循环接续值\r\n // ?userId=${userId}&loginName=${loginName}&userName=${userName}\" \r\n searchArr.forEach((item)=>{\r\n if (item.indexOf(\"userId\") > -1) {\r\n userId = item.split(\"=\")[1]\r\n } else if (item.indexOf(\"userName\") > -1) {\r\n userName = decodeURI(item.split(\"=\")[1])\r\n } else if (item.indexOf(\"userDepart\") > -1) {\r\n userDepart = decodeURI(item.split(\"=\")[1])\r\n } else if (item.indexOf(\"loginName\") > -1) {\r\n loginName = item.split(\"=\")[1]\r\n }\r\n })\r\n setUserName(userName)\r\n }\r\n\r\n useEffect(()=>{\r\n\r\n computeHeight()\r\n let name = eventName\r\n if (props.location.state) {\r\n name = props.location.state.searchName\r\n setEventName(name)\r\n }\r\n handleRouteParams()\r\n getData(name)\r\n \r\n }, [])\r\n\r\n return (\r\n <div className=\"eventList-wrapper\">\r\n <div className=\"form-headerbox\">\r\n <Form layout=\"inline\">\r\n <Form.Item label=\"事件名称\">\r\n <Search\r\n className=\"input-text-content\"\r\n placeholder=\"请输入事件名称\"\r\n value={eventName}\r\n allowClear\r\n onChange={handleOnChange}\r\n onSearch={onSearch}\r\n style={{width: 200}}\r\n />\r\n </Form.Item>\r\n </Form>\r\n <Button type=\"primary\" className=\"rightBtn\" onClick={goToNewEventForm}>新增事件</Button>\r\n </div>\r\n <div className=\"header-content-divider\"></div>\r\n {\r\n data.length > 0 ?\r\n <Table className=\"customTable\" bordered={true} dataSource={data} pagination={pagination} rowClassName=\"rowClassName\" /**scroll={{y: clientHeight}}*/>\r\n <Column title=\"序号\" dataIndex=\"index\" key=\"index\" width={80} align=\"center\"></Column>\r\n <Column title=\"事件名称\" dataIndex=\"EventName\" key=\"EventName\" align=\"center\"/>\r\n <Column title=\"事件表\" dataIndex=\"EventTable\" key=\"EventTable\" align=\"center\"/>\r\n <Column title=\"事件编码\" dataIndex=\"EventCode\" key=\"EventCode\" align=\"center\"/>\r\n {/* <Column title=\"当前处理人\" dataIndex=\"current\" key=\"current\" />\r\n <Column title=\"描述\" dataIndex=\"lastName\" key=\"lastName\" />\r\n <Column title=\"创建时间\" dataIndex=\"age\" key=\"age\" />\r\n <Column title=\"修改时间\" dataIndex=\"address\" key=\"address\" /> */}\r\n <Column\r\n align=\"center\"\r\n title=\"操作\"\r\n key=\"action\"\r\n width={250}\r\n render={(text, record) => (\r\n <Space size=\"middle\">\r\n <Button type=\"primary\" size=\"small\" className=\"table-oper-btn\" onClick={handleShow(record.EventName)}>事件表单</Button>\r\n <Button type=\"primary\" size=\"small\" className=\"table-oper-btn\" onClick={handleDel(record.EventName, record.EventCode)}>删除</Button>\r\n <Button type=\"primary\" size=\"small\" className=\"table-oper-btn\" onClick={handleConfig(record.EventName)}>流程配置</Button>\r\n {/* <Button type=\"primary\" size=\"small\" onClick={handleEventConfig(record.EventName)}>事件权限配置</Button> */}\r\n </Space>\r\n )}\r\n />\r\n </Table>\r\n :\r\n <NoData></NoData>\r\n }\r\n \r\n <Modal title=\"新增事件\" visible={isModalVisible} onOk={handleOk} onCancel={handleCancel}>\r\n <Form layout=\"vertical\">\r\n <Form.Item label=\"事件名称\">\r\n <Input ref={eventNameRef} placeholder=\"请输入事件名称\" />\r\n </Form.Item>\r\n <Form.Item label=\"事件描述\">\r\n <Input ref={eventDescRef} placeholder=\"请输入事件描述\" />\r\n </Form.Item>\r\n </Form>\r\n </Modal>\r\n <Modal title=\"删除事件\" visible={isDelEvent} onOk={handleSureDel} onCancel={handleCancelDel}>\r\n <p>确定删除该事件吗?</p>\r\n </Modal>\r\n </div>\r\n )\r\n}\r\n\r\nexport default EventList\r\n","G:\\react-flowable\\src\\pages\\TestFrGenerator\\TestFrGenerator.jsx",["412","413","414","415"],"import React, { useState } from 'react';\r\nimport Generator, {\r\n defaultSettings,\r\n defaultCommonSettings,\r\n defaultGlobalSettings,\r\n} from 'fr-generator';\r\nimport UploadFile from '../../components/UploadFile/UploadFile'\r\n\r\nconst NewWidget = ({ value = 0, onChange }) => (\r\n <button onClick={() => onChange(value + 1)}>{value}</button>\r\n);\r\n\r\n\r\n// console.log(Object.prototype.toString.call(NewWidget))\r\n// console.log(Object.prototype.toString.call(UploadFile))\r\n\r\n\r\nconst customizeSetting = {\r\n title: '自定义组件',\r\n widgets: [\r\n {\r\n text: '服务端下拉选框',\r\n name: 'asyncSelect',\r\n schema: {\r\n title: '来自服务端',\r\n type: 'string',\r\n 'ui:widget': 'file',\r\n },\r\n widget: 'file',\r\n setting: {\r\n api: { title: 'api', type: 'string' },\r\n },\r\n },\r\n {\r\n text: 'object',\r\n name: 'object',\r\n schema: {\r\n title: '对象',\r\n type: 'object',\r\n properties: {},\r\n },\r\n widget: 'map',\r\n setting: {},\r\n },\r\n {\r\n text: '姓名',\r\n name: 'name',\r\n schema: {\r\n title: '输入框',\r\n type: 'string',\r\n },\r\n setting: {\r\n maxLength: { title: '最长字数', type: 'number' },\r\n },\r\n },\r\n ],\r\n}\r\n\r\nconst Demo = () => {\r\n\r\n const settings = defaultSettings.push(customizeSetting)\r\n\r\n // console.log(defaultSettings, \"defaultSettings\");\r\n // console.log(defaultCommonSettings, \"defaultCommonSettings\");\r\n\r\n\r\n\r\n return (\r\n <div style={{ height: '100vh' }}>\r\n <Generator\r\n widgets={{ file: UploadFile }}\r\n settings = {settings}\r\n />\r\n </div>\r\n );\r\n};\r\n\r\nexport default Demo;\r\n","G:\\react-flowable\\src\\pages\\EventTypeList\\EventTypeList.jsx",["416"],"// 事件类型列表\r\nimport React, { useState, useEffect, useRef } from 'react';\r\nimport { Table, Space, Input, Button, Modal, Form } from 'antd';\r\nimport './EventTypeList.less'\r\nconst { Column } = Table;\r\nconst { Search } = Input;\r\n\r\nlet data = []\r\nfor(let i = 0;i < 30; i++) {\r\n data.push({\r\n key: i+1,\r\n firstName: 'John',\r\n lastName: 'Brown',\r\n age: 32,\r\n address: 'New York No. 1 Lake Park',\r\n tags: ['nice', 'developer'],\r\n })\r\n}\r\n\r\n\r\nconst EventTypeList = (props) => {\r\n // 事件类型的名称输入框\r\n const eventNameRef = useRef()\r\n // 事件类型描述输入框\r\n const eventDescRef = useRef()\r\n // Modal\r\n const [isModalVisible, setIsModalVisible] = useState(false)\r\n // 设置分页属性,20条/页\r\n const [pagination, setPagination] = useState({\r\n pageSize: 20\r\n })\r\n // 搜索按钮\r\n const onSearch =(data) =>{\r\n // console.log(data)\r\n }\r\n // 打开弹框\r\n const openDialog=()=>{\r\n setIsModalVisible(true)\r\n }\r\n // 点击确定新增事件类型\r\n const handleOk=()=>{\r\n // console.log(eventDescRef.current.state.value)\r\n // console.log(eventNameRef.current.state.value)\r\n setIsModalVisible(false)\r\n }\r\n // 点击取消按钮,取消新增\r\n const handleCancel=()=>{\r\n setIsModalVisible(false)\r\n eventDescRef.current.state.value = ''\r\n eventNameRef.current.state.value = ''\r\n }\r\n\r\n // 删除事件类型\r\n const handleDel = (id) => {\r\n return ()=>{\r\n // console.log(id)\r\n }\r\n \r\n }\r\n // 编辑事件类型\r\n const handleEdit=(id, name, desc) => {\r\n return ()=>{\r\n // console.log(id, name, desc)\r\n }\r\n }\r\n // 点击配置流程\r\n const handleFlow = (id, name) => {\r\n return ()=>{\r\n props.history.push({\r\n pathname: '/form-render/eventconfig',\r\n state:{\r\n id: id,\r\n name: name\r\n }\r\n })\r\n }\r\n }\r\n // 拉取数据\r\n const getData =()=>{\r\n\r\n }\r\n\r\n useEffect(()=>{\r\n getData()\r\n })\r\n\r\n return (\r\n <div className=\"event-typeList-wrapper\">\r\n <div className=\"event-typeList-header\">\r\n <Search\r\n placeholder=\"请输入事件类型的名称\"\r\n allowClear\r\n enterButton=\"查询\"\r\n onSearch={onSearch}\r\n style={{width: '300px'}}\r\n />\r\n <Button type=\"dashed\" onClick={openDialog}>新增</Button>\r\n </div>\r\n <Table dataSource={data} pagination={pagination}>\r\n <Column title=\"事件类型\" dataIndex=\"firstName\" key=\"firstName\" />\r\n <Column title=\"描述\" dataIndex=\"lastName\" key=\"lastName\" />\r\n <Column title=\"创建时间\" dataIndex=\"age\" key=\"age\" />\r\n <Column title=\"修改时间\" dataIndex=\"address\" key=\"address\" />\r\n <Column\r\n title=\"Action\"\r\n key=\"action\"\r\n render={(text, record) => (\r\n <Space size=\"middle\">\r\n <Button type=\"primary\" size=\"small\" onClick={handleDel(record.id)}>删除</Button>\r\n <Button type=\"primary\" size=\"small\" onClick={handleEdit(record.id, record.name, record.desc)}>编辑</Button>\r\n <Button type=\"primary\" size=\"small\" onClick={handleFlow(record.id, record.name)}>流程配置</Button>\r\n </Space>\r\n )}\r\n />\r\n </Table>\r\n <Modal title=\"新增事件类型\" visible={isModalVisible} onOk={handleOk} onCancel={handleCancel}>\r\n <Form layout=\"vertical\">\r\n <Form.Item label=\"事件类型名称\">\r\n <Input ref={eventNameRef} placeholder=\"请输入事件类型名称\" />\r\n </Form.Item>\r\n <Form.Item label=\"事件类型描述\">\r\n <Input ref={eventDescRef} placeholder=\"请输入事件类型描述\" />\r\n </Form.Item>\r\n </Form>\r\n </Modal>\r\n </div>\r\n )\r\n}\r\n\r\nexport default EventTypeList","G:\\react-flowable\\src\\pages\\ExtraForm\\ExtraForm.jsx",["417","418","419","420"],"// 外接表单管理\r\nimport React, {useEffect, useState, useRef} from 'react'\r\nimport {Table, Form, Input, Button, Modal, Space, message } from 'antd'\r\nimport {GetAssemblyModel, SaveAssemblyConfig, AssemblyOperate, flowableLogin} from '../../apis/process'\r\nimport NoData from '../../components/NoData/NoData'\r\nimport {ProductInfo} from '../../libs/extraFormMapping/extraFormMapping'\r\nimport moment from 'moment'\r\nimport reactCookie from 'react-cookies'\r\nimport './ExtraForm.less'\r\nconst { Search } = Input\r\nconst { Column } = Table;\r\n\r\nconst ExtraForm=()=>{\r\n const [isModalVisible, setIsModalVisible] = useState(false) // Modal\r\n const [delModalVisible, setDelModalVisible] = useState(false) // Modal\r\n const [comModalVisible, setComModalVisible] = useState(false) // Modal\r\n const [curFormName, setCurFormName] = useState('')\r\n const [searchName, setSearchName] = useState('')\r\n const [data, setData] = useState([]) // table数据\r\n const [total, setTotal] = useState(0) // total\r\n const [userName, setUserName] = useState('') // total\r\n const formNameRef = useRef() // 表单名称\r\n const formDescRef = useRef() // 表单描述\r\n // 设置分页属性,20条/页\r\n const [pagination, setPagination] = useState({\r\n hideOnSinglePage: false,\r\n pageSizeOptions: [20,30,50],\r\n showQuickJumper: true,\r\n total: total,\r\n showTotal: total => `总共 ${total} 条数据`,\r\n size: 'small',\r\n pageSize: 20\r\n })\r\n\r\n // 拉取数据\r\n const getData =(name = '', actId = '')=>{\r\n GetAssemblyModel(name, actId)\r\n .then((res)=>{\r\n if (res.data.say.statusCode === \"0000\"){\r\n res.data.getMe.forEach((item, index)=>{\r\n item.index = index + 1\r\n item.key = index\r\n })\r\n setData(res.data.getMe)\r\n setTotal(res.data.totalRcdNum)\r\n }\r\n })\r\n }\r\n\r\n const queryDataFromWeb4=()=>{\r\n // 处理任务ID,用户名称,用户所在部门\r\n let hashData = \"\"\r\n let searchData = \"\"\r\n let search = \"\"\r\n if (window.location.hash) {\r\n hashData = window.location.hash\r\n searchData = hashData.split(\"?\")\r\n search = searchData[1]\r\n } else {\r\n search = window.location.search.slice(1)\r\n }\r\n const searchArr = search.split(\"&\")\r\n searchArr.forEach((item)=>{\r\n if (item.indexOf(\"loginName\") > -1) {\r\n // setUserName(decodeURI(item.split(\"=\")[1]))\r\n LoginToFlowable(item.split(\"=\")[1])\r\n }\r\n })\r\n }\r\n // 登录到Flowable\r\n const LoginToFlowable = (loginName)=>{\r\n let obj = reactCookie.loadAll()\r\n if (obj.FLOWABLE_REMEMBER_ME && obj.FLOWABLE_REMEMBER_ME !== 'undefined') {\r\n return\r\n }\r\n const myData = {\r\n _spring_security_remember_me:true,\r\n j_password:\"test\",\r\n j_username: loginName,\r\n submit:\"Login\"\r\n }\r\n flowableLogin(myData)\r\n .then((res)=>{\r\n if (res.data.indexOf('FLOWABLE_REMEMBER_ME') < 0) {\r\n message.error(\"流程引擎服务不可用,请联系管理员\")\r\n return\r\n }\r\n let resArr = res.data.split(';')\r\n let cookieKeyVal = resArr[0]\r\n let cookieArr = cookieKeyVal.split('=')\r\n reactCookie.save(\r\n cookieArr[0],\r\n cookieArr[1],\r\n { \r\n path: '/',\r\n expires: new Date(new Date().getTime() + 7 * 24 * 3600 * 1000)\r\n }\r\n )\r\n })\r\n }\r\n\r\n // 打开模态框\r\n const openModal=()=>{\r\n setIsModalVisible(true)\r\n }\r\n\r\n // 点击确定按钮\r\n const handleOk=()=>{\r\n const formName = formNameRef.current.state.value\r\n const formDesc = formDescRef.current.state.value\r\n const myData = {\r\n AssemblyName: formName,\r\n CreateTime: moment().format(\"YYYY-MM-DD HH:mm:ss\"),\r\n Creater: userName,\r\n Describe: formDesc,\r\n ID: '',\r\n Type: ''\r\n }\r\n AssemblyOperate(1, formName, myData)\r\n .then((res)=>{\r\n if (res.data.statusCode === \"0000\") {\r\n setIsModalVisible(false)\r\n getData()\r\n } else {\r\n message.error(res.data.errMsg)\r\n }\r\n })\r\n }\r\n\r\n // 点击取消按钮\r\n const handleCancel=()=>{\r\n setIsModalVisible(false)\r\n }\r\n\r\n // 预览第三方组件\r\n const handleShow=()=>{\r\n return ()=>{\r\n setComModalVisible(true)\r\n console.log(ProductInfo)\r\n }\r\n }\r\n\r\n // 关闭组件预览Modal\r\n const handleComOk=()=>{\r\n setComModalVisible(false)\r\n }\r\n // 关闭组件预览Modal\r\n const handleComCancel=()=>{\r\n setComModalVisible(false)\r\n }\r\n // 删除组件\r\n const handleDel=(name)=>{\r\n return ()=>{\r\n setCurFormName(name)\r\n setDelModalVisible(true)\r\n }\r\n }\r\n\r\n // 确定删除\r\n const handleDelOk=()=>{\r\n AssemblyOperate(0, curFormName, {})\r\n .then((res)=>{\r\n if (res.data.statusCode === \"0000\") {\r\n setDelModalVisible(false)\r\n getData()\r\n } else {\r\n message.error(res.data.errMsg)\r\n }\r\n })\r\n }\r\n\r\n // 取消删除\r\n const handleDelCancel=()=>{\r\n setDelModalVisible(false)\r\n setCurFormName('')\r\n }\r\n\r\n // 捕获输入框值得变化\r\n const handleChange=(e)=>{\r\n setSearchName(e.target.value)\r\n }\r\n // 点击搜索\r\n const handleSearch=(data)=>{\r\n getData(data)\r\n }\r\n\r\n const getProductInfo=(data)=>{\r\n\r\n }\r\n\r\n useEffect(()=>{\r\n queryDataFromWeb4()\r\n getData()\r\n }, [])\r\n\r\n return(\r\n <div className=\"extraform-wrapper\">\r\n <div className=\"form-headerbox\">\r\n <Form layout=\"inline\">\r\n <Form.Item label=\"表单名称\">\r\n <Search placeholder=\"请输入表单名称\" value={searchName} allowClear className=\"extra-form-content\" onChange={handleChange} onSearch={handleSearch} style={{ width: 200 }} />\r\n </Form.Item>\r\n </Form>\r\n <Button className=\"localBtnClass rightBtn\" size=\"small\" type=\"primary\" onClick={openModal}>新增</Button>\r\n </div>\r\n <div className=\"header-content-divider\"></div>\r\n {\r\n data.length > 0 ?\r\n <Table className=\"customTable\" bordered={true} dataSource={data} pagination={pagination} rowClassName=\"rowClassName\">\r\n <Column title=\"序号\" dataIndex=\"index\" key=\"index\" width={80} align=\"center\"></Column>\r\n <Column title=\"表单名称\" dataIndex=\"AssemblyName\" key=\"AssemblyName\" align=\"center\"/>\r\n <Column title=\"创建人\" dataIndex=\"Creater\" key=\"Creater\" align=\"center\"/>\r\n <Column title=\"创建时间\" dataIndex=\"CreateTime\" key=\"CreateTime\" align=\"center\"/>\r\n <Column title=\"功能描述\" dataIndex=\"Describe\" key=\"Describe\" align=\"center\"/>\r\n <Column\r\n align=\"center\"\r\n title=\"操作\"\r\n key=\"action\"\r\n width={250}\r\n render={(text, record) => (\r\n <Space size=\"middle\">\r\n <Button type=\"primary\" size=\"small\" className=\"table-oper-btn\" onClick={handleShow(record.AssemblyName)}>预览</Button>\r\n <Button type=\"primary\" size=\"small\" className=\"table-oper-btn\" onClick={handleDel(record.AssemblyName)}>删除</Button>\r\n </Space>\r\n )}\r\n />\r\n </Table>\r\n :\r\n <NoData></NoData>\r\n }\r\n \r\n <Modal title=\"新增事件\" visible={isModalVisible} onOk={handleOk} onCancel={handleCancel}>\r\n <Form layout=\"vertical\">\r\n <Form.Item label=\"表单名称\">\r\n <Input ref={formNameRef} placeholder=\"请输入表单名称\" />\r\n </Form.Item>\r\n <Form.Item label=\"表单描述\">\r\n <Input ref={formDescRef} placeholder=\"请输入表单描述\" />\r\n </Form.Item>\r\n </Form>\r\n </Modal>\r\n \r\n <Modal title=\"提示\" visible={delModalVisible} onOk={handleDelOk} onCancel={handleDelCancel}>\r\n 确定删除该表单吗?\r\n </Modal>\r\n\r\n <Modal title=\"预览\" visible={comModalVisible} onOk={handleComOk} onCancel={handleComCancel} width={1200}>\r\n <ProductInfo showAddProductButton={true} getProductInfo={getProductInfo}></ProductInfo>\r\n </Modal>\r\n </div>\r\n )\r\n}\r\n\r\nexport default ExtraForm","G:\\react-flowable\\src\\apis\\process.js",["421"],"import request from '../utils/request'\r\n\r\n// 流程列表\r\nexport function GetWorkflowBaseInfo (WorkflowName, userName, STime, ETime, pageIndex, pageSize) {\r\n return request({\r\n url: '/GetWorkflowBaseInfo?WorkflowName=' + WorkflowName +`&UserName=${userName}` + `&STime=` + STime + `&ETime=` + ETime + `&pageIndex=` + pageIndex + `&pageSize=` + pageSize + `&sortFields=created&direction=desc`,\r\n method: 'get'\r\n })\r\n}\r\n\r\n// 删除流程\r\nexport function UpdateStatus (id, type) {\r\n return request({\r\n url: `/UpdateStatus?id=${id}&type${type}`,\r\n method: 'get'\r\n })\r\n}\r\n\r\n// 登录到flowable\r\nexport function flowableLogin (data) {\r\n return request({\r\n url: `/Flowable_Login`,\r\n method: 'post',\r\n data\r\n })\r\n}\r\n\r\n// 新增流程\r\nexport function CreateModel (cookie, data) {\r\n return request({\r\n url: `/CreateModel?Cookie=${cookie}`,\r\n method: 'post',\r\n data\r\n })\r\n}\r\n\r\n// 查询表单列表\r\nexport function GetFormListInfo (FormName, pageIndex, pageSize) {\r\n return request({\r\n url: `/GetFormListInfo_WithoutForm?FormName=${FormName}&pageIndex=${pageIndex}&pageSize=${pageSize}&sortFields=created&direction=desc`,\r\n method: 'get'\r\n })\r\n}\r\n\r\n// 查询表单列表\r\nexport function GetFormJson (id) {\r\n return request({\r\n url: `/GetFormJson?FormID=${id}`,\r\n method: 'get'\r\n })\r\n}\r\n\r\n// 删除表单\r\nexport function DeleteFormLogic (name, id) {\r\n return request({\r\n url: `/DeleteFormLogic?UserName=${name}&FormID=${id}`,\r\n method: 'get'\r\n })\r\n}\r\n\r\n// 编辑表单\r\nexport function UpdateFormDef (id, data) {\r\n return request({\r\n url: `/UpdateFormDef?FormID=${id}`,\r\n method: 'post',\r\n data\r\n })\r\n}\r\n\r\n// 任务发起检查移交人\r\nexport function GetTransferList_FirstNode (cookie, userId, EventNode, data) {\r\n return request({\r\n url: `/GetTransferList_FirstNode?Cookie=${cookie}&UserID=${userId}&EventNode=${EventNode}`,\r\n method: 'post',\r\n data\r\n })\r\n}\r\n\r\n// 任务发起\r\nexport function WorkflowStart (cookie, userId, EVENTCODE, USERCODE, data) {\r\n return request({\r\n url: `/WorkflowStart?Cookie=${cookie}&UserID=${userId}&EventCode=${EVENTCODE}&UserCode=${USERCODE}`,\r\n method: 'post',\r\n data\r\n })\r\n}\r\n\r\n// 查询表单\r\nexport function GetStartForm (FlowDefID) {\r\n return request({\r\n url: `/GetStartForm?FlowDefID=${FlowDefID}`,\r\n method: 'get'\r\n })\r\n}\r\n\r\n// 查询在办表单\r\nexport function GetFormList (Cookie, taskId) {\r\n return request({\r\n url: `/GetFormList?Cookie=${Cookie}&TaskID=${taskId}`,\r\n method: 'get'\r\n })\r\n}\r\n\r\n// 在办-完成\r\nexport function SaveFormInfo (Cookie, taskId, userId, data) {\r\n return request({\r\n url: `/SaveFormInfo?Cookie=${Cookie}&TaskID=${taskId}&UserID=${userId}`,\r\n method: 'post',\r\n data\r\n })\r\n}\r\n\r\n// 在办-保存\r\nexport function TaskSave (Cookie, taskId, data) {\r\n return request({\r\n url: `/TaskSave?Cookie=${Cookie}&TaskID=${taskId}`,\r\n method: 'post',\r\n data\r\n })\r\n}\r\n\r\n// 在办-查询任务详情\r\nexport function GetTaskBaseInfo (taskId) {\r\n return request({\r\n url: `/GetTaskBaseInfo?TaskID=${taskId}`,\r\n method: 'get'\r\n })\r\n}\r\n\r\n// 在办-作废流程\r\nexport function WorkflowDelete (FLOWID, COOKIE) {\r\n return request({\r\n url: `/WorkflowDelete?FlowID=${FLOWID}&Cookie=${COOKIE}`,\r\n method: 'get'\r\n })\r\n}\r\n\r\n// 在办-任务移交\r\nexport function UpdateTaskInfo (CONDITION,TASKID) {\r\n return request({\r\n url: `/UpdateTaskInfo?Condition=${CONDITION}&TaskID=${TASKID}`,\r\n method: 'get'\r\n })\r\n}\r\n\r\n// 在办-查看流程图\r\nexport function GetWorkflowDiagram (processInstanceId) {\r\n return request({\r\n url: `/GetWorkflowDiagram?processInstanceId=${processInstanceId}`,\r\n method: 'get'\r\n })\r\n}\r\n\r\n// 在办-任务回退\r\nexport function TaskGoBack (processInstanceId,TASKID, textVal) {\r\n return request({\r\n url: `/TaskGoBack?PROC_INST_ID_=${processInstanceId}&TaskID=${TASKID}&Comment=${textVal}`,\r\n method: 'get'\r\n })\r\n}\r\n\r\n// 在办-任务催办\r\nexport function WorkflowUrging (processInstanceId, UserName, textVal) {\r\n return request({\r\n url: `/TaskGoBack?ProcInstID=${processInstanceId}&UserName=${UserName}&Content=${textVal}`,\r\n method: 'get'\r\n })\r\n}\r\n\r\n// 在办-任务流转信息\r\nexport function GetFlowProcessInfo (processInstanceId) {\r\n return request({\r\n url: `/GetFlowProcessInfo?PROC_INST_ID_=${processInstanceId}`,\r\n method: 'get'\r\n })\r\n}\r\n// 在办-附件\r\nexport function WorkflowFileOperation (TaskID) {\r\n return request({\r\n url: `/WorkflowFileOperation?TaskID=${TaskID}&Type=search`,\r\n method: 'get'\r\n })\r\n}\r\n\r\n// 在办-附件上传到服务器\r\nexport function uploadToService (TaskID, FilePath) {\r\n return request({\r\n url: `/WorkflowFileOperation?TaskID=${TaskID}&Type=add&FilePath=${FilePath}`,\r\n method: 'get'\r\n })\r\n}\r\n\r\n// 流程发起权限配置\r\nexport function UpdateWorkFlowRight (USERNAME, FORMKEYLIST) {\r\n return request({\r\n url: `/UpdateWorkFlowRight?UserName=${USERNAME}&FormKeyList=${FORMKEYLIST}`,\r\n method: 'get'\r\n })\r\n}\r\n\r\n// 查询节点信息\r\nexport function GetActList (FLOWDEFID) {\r\n return request({\r\n url: `/GetActList?FlowDefID=${FLOWDEFID}`,\r\n method: 'get'\r\n })\r\n}\r\n\r\n// 获取字段配置信息\r\nexport function GetColumnConfig (ACTID, FORMKEY) {\r\n return request({\r\n url: `/GetColumnConfig?ActID=${ACTID}&FormKey=${FORMKEY}`,\r\n method: 'get'\r\n })\r\n}\r\n\r\n// 保存字段配置信息\r\nexport function SaveColumnConfig (ACTID, FORMKEY, COLUMNCONFIG) {\r\n return request({\r\n url: `/SaveColumnConfig?ActID=${ACTID}&FormKey=${FORMKEY}&ColumnConfig=${COLUMNCONFIG}`,\r\n method: 'get'\r\n })\r\n}\r\n\r\n// 获取移交人信息\r\nexport function GetTransferList (TASKID, USERID, COOKIE, data) {\r\n return request({\r\n url: `/GetTransferList?TaskID=${TASKID}&UserID=${USERID}&Cookie=${COOKIE}`,\r\n method: 'post',\r\n data\r\n })\r\n}\r\n\r\n// 移交完成接口\r\nexport function SaveFormInfoTransfer (TASKID, USERID, COOKIE, WORKCODE, data) {\r\n return request({\r\n url: `/SaveFormInfoTransfer?TaskID=${TASKID}&UserID=${USERID}&Cookie=${COOKIE}&WorkCode=${WORKCODE}`,\r\n method: 'post',\r\n data\r\n })\r\n}\r\n\r\n// 事件中心——新增事件接口\r\nexport function SaveEvent (EVENTJSON, TABLENAME, CODE, EVENTNAME, data) {\r\n return request({\r\n url: `/SaveEvent?EventJson=${EVENTJSON}&TableName=${TABLENAME}&Code=${CODE}&EventName=${EVENTNAME}`,\r\n method: 'post',\r\n data\r\n })\r\n}\r\n\r\n// 事件中心——查询事件列表接口\r\nexport function GetEventList (EVENTNAME) {\r\n return request({\r\n url: `/GetEventList?EventName=${EVENTNAME}&pageIndex=1&pageSize=${1000}&sortFields=&direction=`,\r\n method: 'get'\r\n })\r\n}\r\n\r\n// 事件中心——事件挂接流程\r\nexport function SaveEventConfig (EVENTNAME, data) {\r\n return request({\r\n url: `/SaveEventConfig?EventName=${EVENTNAME}`,\r\n method: 'post',\r\n data\r\n })\r\n}\r\n\r\n// 事件中心——删除事件\r\nexport function EventOperate (EVENTNAME, OPERTYPE, EVENTCODE) {\r\n return request({\r\n url: `/EventOperate?EventName=${EVENTNAME}&OperType=${OPERTYPE}&EventCode=${EVENTCODE}`,\r\n method: 'get'\r\n })\r\n}\r\n\r\n// 事件中心——查看事件详情\r\nexport function GetEvent (EVENTNAME) {\r\n return request({\r\n url: `/GetEvent?EventName=${EVENTNAME}`,\r\n method: 'get'\r\n })\r\n}\r\n\r\n// 事件中心——发起事件\r\nexport function CreateEvent (EVENTNAME, TABLENAME, EVENTJSON, EVENTCODE, NAME, data) {\r\n return request({\r\n url: `/CreateEvent?EventName=${EVENTNAME}&TableName=${TABLENAME}&EventJson=${EVENTJSON}&EventCode=${EVENTCODE}&Name=${NAME}`,\r\n method: 'post',\r\n data\r\n })\r\n}\r\n\r\n// 事件中心——查询在办事件列表接口\r\nexport function GetEventDoingList (EVENTNAME, TYPE) {\r\n return request({\r\n url: `/GetEventDoingList?EventName=${EVENTNAME}&Type=${TYPE}&pageIndex=1&pageSize=${1000}&sortFields=&direction=`,\r\n method: 'get'\r\n })\r\n}\r\n\r\n// 事件中心——通过流程的key去查流程的ID\r\nexport function GetFlowIdByFlowKey (FLOWKEY) {\r\n return request({\r\n url: `/GetFlowIdByFlowKey?FlowKey=${FLOWKEY}`,\r\n method: 'get'\r\n })\r\n}\r\n\r\n// 事件中心——查询在办事件发起的流程\r\nexport function GetProcInstByEventCode (EVENTCODE) {\r\n return request({\r\n url: `/GetProcInstByEventCode?EventCode=${EVENTCODE}`,\r\n method: 'get'\r\n })\r\n}\r\n\r\n// 台账查询\r\nexport function getTableName(name){\r\n return request({\r\n url: `/GetTableGroupMetaV3?tableName=${name}`,\r\n method: 'get'\r\n })\r\n}\r\n\r\n// 选择器选项的值查询\r\nexport function getSelectName(nodeName){\r\n return request({\r\n url: `/WorkFlow/175/?nodeName=${nodeName}`,\r\n method: 'get'\r\n })\r\n}\r\n\r\n// 姓名查询\r\nexport function getUserName(name){\r\n return request({\r\n url: `/GetAllPerson_PandaWisdom?UserName=${name}`,\r\n method: 'get'\r\n })\r\n}\r\n\r\n// 人员选择器查询\r\nexport function getUserListForRole(){\r\n return request({\r\n url: `/getUserListForRole?_version=9999`,\r\n method: 'get'\r\n })\r\n}\r\n\r\n// 台账的表查询\r\nexport function GetAccountPageList(accountName, info){\r\n return request({\r\n url: `/GetAccountPageList?pageIndex=${1}&pageSize=${1000}&sortFields=录入时间&direction=desc&accountName=${accountName}&info=${info}`,\r\n method: 'get'\r\n })\r\n}\r\n\r\n// 查询产品列表\r\nexport function GetProduct(){\r\n return request({\r\n url: `/GetProduct?tableName=销售管理_产品信息表&plateName=项目`,\r\n method: 'get'\r\n })\r\n}\r\n\r\n// 查询产品信息\r\nexport function GetProductBusiness(TASKID){\r\n return request({\r\n url: `/GetProductBusiness?TaskID=${TASKID}`,\r\n method: 'get'\r\n })\r\n}\r\n\r\n// 查询台账列表\r\nexport function GetTZInfo(NAME){\r\n return request({\r\n url: `/GetTZInfo?Name=${NAME}`,\r\n method: 'get'\r\n })\r\n}\r\n\r\n// 查询台账列表\r\nexport function AddProduct(data){\r\n return request({\r\n url: `/AddProduct`,\r\n method: 'post',\r\n data\r\n })\r\n}\r\n\r\n// 组件信息查询接口\r\nexport function GetAssemblyModel(ASSEMBLYNAME, ACTID){\r\n return request({\r\n url: `/GetAssemblyModel?AssemblyName=${ASSEMBLYNAME}&pageIndex=1&pageSize=1000&sortFields=&direction=&ActID=${ACTID}`,\r\n method: 'get'\r\n })\r\n}\r\n\r\n// 保存节点视图配置\r\nexport function SaveAssemblyConfig(ACTID, data){\r\n return request({\r\n url: `/SaveAssemblyConfig?ActID=${ACTID}`,\r\n method: 'post',\r\n data\r\n })\r\n}\r\n\r\n// 组件信息操作接口\r\nexport function AssemblyOperate(OPERTYPE, ASSEMBLYNAME, data){\r\n return request({\r\n url: `/AssemblyOperate?OperType=${OPERTYPE}&AssemblyName=${ASSEMBLYNAME}`,\r\n method: 'post',\r\n data\r\n })\r\n}\r\n\r\n// 组件信息操作接口-查新\r\nexport function GetAssemblyByTaskID(TASKID){\r\n return request({\r\n url: `/GetAssemblyByTaskID?TaskID=${TASKID}`,\r\n method: 'get'\r\n })\r\n}\r\n\r\n// 流程发起得时候,根据流程ID去查询视图\r\nexport function GetAssembly_Start(FLOWDEFID){\r\n return request({\r\n url: `/GetAssembly_Start?FlowDefID=${FLOWDEFID}`,\r\n method: 'get'\r\n })\r\n}\r\n\r\n\r\n","G:\\react-flowable\\src\\utils\\config.js",["422"],"G:\\react-flowable\\src\\libs\\FormRenderWidgets\\FormRenderWidgets.js",[],"G:\\react-flowable\\src\\libs\\transform\\transform.js",["423","424"],"G:\\react-flowable\\src\\libs\\configSchema\\configSchema.js",[],"G:\\react-flowable\\src\\pages\\EventOperation\\EventOperation.jsx",["425","426","427","428","429","430","431"],"// 操作在办事件详情页面\r\n\r\n// 展示表单类型\r\nimport React, { useState, useEffect, useRef } from 'react';\r\nimport FormRender from 'form-render/lib/antd';\r\nimport { Button, Row, Col, message, Divider } from 'antd';\r\nimport reactCookie from 'react-cookies'\r\nimport { GetEvent, GetFlowIdByFlowKey, EventOperate, flowableLogin } from '../../apis/process'\r\nimport { FileDoneOutlined} from '@ant-design/icons';\r\nimport LoginNameSelect from '../../components/LoginNameSelect/LoginNameSelect';\r\nimport './EventOperation.less'\r\nimport FormRenderWidgets from '../../libs/FormRenderWidgets/FormRenderWidgets'\r\n\r\nconst EventOperation = (props) => {\r\n // 人员选择器modal\r\n const [staffVisible, setstaffVisible] = useState(false)\r\n // 事件名称\r\n const [evName, setEvName] = useState(props.location.state.name)\r\n // 事件编号\r\n const [evCode, setEvCode] = useState(props.location.state.code)\r\n const [loginName, setLoginName] = useState(props.location.state.loginName)\r\n // 流程的ID\r\n const [FlowDefID, setFlowDefID] = useState('')\r\n // 用户ID\r\n const [userId, setUserId] = useState('')\r\n // 事件挂接的流程\r\n const [FlowInfoList, setFlowInfoList] = useState([])\r\n // FormRender的formData\r\n const [formData, setFormData] = useState({});\r\n // FormRender的schema\r\n const [schema, setSchema] = useState({})\r\n // FormRender的表单提交校验\r\n const [valid, setValid] = useState([])\r\n // FormRender的组件ref\r\n const formRef = useRef();\r\n\r\n // 拉取数据\r\n const getData =async()=>{\r\n const evJson = JSON.parse(props.location.state.evJson)\r\n GetEvent(evName)\r\n .then((res)=>{\r\n setFlowInfoList(res.data.getMe[0].FlowInfoList)\r\n setSchema(evJson)\r\n setUserId(props.location.state.userId)\r\n })\r\n }\r\n\r\n const handleStaff=(loginName, userId)=>{\r\n setLoginName(loginName)\r\n setUserId(userId)\r\n }\r\n\r\n // 登录到Flowable\r\n const LoginToFlowable = ()=>{\r\n let obj = reactCookie.loadAll()\r\n if (obj.FLOWABLE_REMEMBER_ME && obj.FLOWABLE_REMEMBER_ME !== 'undefined') {\r\n return\r\n }\r\n const myData = {\r\n _spring_security_remember_me:true,\r\n j_password:\"test\",\r\n j_username: loginName,\r\n submit:\"Login\"\r\n }\r\n flowableLogin(myData)\r\n .then((res)=>{\r\n if (res.data.indexOf('FLOWABLE_REMEMBER_ME') < 0) {\r\n message.error(\"流程引擎服务不可用,请联系管理员\")\r\n return\r\n }\r\n let resArr = res.data.split(';')\r\n let cookieKeyVal = resArr[0]\r\n let cookieArr = cookieKeyVal.split('=')\r\n reactCookie.save(\r\n cookieArr[0],\r\n cookieArr[1],\r\n { \r\n path: '/',\r\n expires: new Date(new Date().getTime() + 7*24 * 3600 * 1000)\r\n }\r\n )\r\n })\r\n }\r\n \r\n useEffect(()=>{\r\n getData()\r\n LoginToFlowable()\r\n },[])\r\n\r\n // 返回列表\r\n const handleClickReback = ()=>{\r\n props.history.go(-1)\r\n }\r\n // 关闭事件\r\n const closeCurrentEvent=()=>{\r\n EventOperate(evName, 2, evCode)\r\n .then((res)=>{\r\n if (res.data.statusCode === \"0000\") {\r\n message.success(\"事件关闭成功\")\r\n props.history.push({\r\n pathname: '/form-render/eventondeal'\r\n })\r\n }else {\r\n message.error(res.data.errMsg)\r\n }\r\n })\r\n }\r\n // 打开人员选择器弹框\r\n const openStaffModal=(FlowName)=>{\r\n return ()=>{\r\n if (!loginName) {\r\n message.error(\"请选择流程承办人!\")\r\n return\r\n }\r\n GetFlowIdByFlowKey(FlowName)\r\n .then((res)=>{\r\n setFlowDefID(res.data)\r\n props.history.push({\r\n pathname: '/form-render/start',\r\n state:{\r\n FlowDefID: res.data,\r\n loginName: loginName,\r\n evCode: evCode,\r\n userId: userId\r\n }\r\n })\r\n })\r\n }\r\n }\r\n\r\n // 提交校验\r\n const onValidate=(valid)=>{\r\n setValid(valid)\r\n }\r\n\r\n return (\r\n <div className=\"eventoperation-wrapper\">\r\n <div className=\"form-info-box\">\r\n <div className=\"form-info-before\"></div>\r\n <div>{props.location.state.name}</div>\r\n </div>\r\n <div className=\"header-content-divider\"></div>\r\n <Row justify=\"start\">\r\n <Col span={24}>\r\n {/* <FormRender\r\n ref={formRef}\r\n {...schema}\r\n formData={formData}\r\n onChange={setFormData}\r\n onValidate={onValidate}\r\n widgets={{ staff: StaffSelectWidget, cascader: TreeCascader, search: SearchSelect, TableAccount: TableAccount, file:UploadFile, editSearch: EditbleSelct, \r\n mapSelect: AMapContainer,cityPicker: cityPicker,multiSelect: multiSelect, DateTimePicker:DateTimePicker,CodeGenerator:CodeGenerator }}\r\n /> */}\r\n <FormRender\r\n ref={formRef}\r\n {...schema}\r\n formData={formData}\r\n onChange={setFormData}\r\n onValidate={onValidate}\r\n widgets={FormRenderWidgets}\r\n />\r\n </Col>\r\n </Row>\r\n \r\n <div className=\"linked-flow-box\">\r\n <div className=\"btngroups\">\r\n <Button type=\"primary\" className=\"table-oper-btn\" style={{ marginLeft: 30 }} onClick={handleClickReback}>\r\n 返回列表\r\n </Button>\r\n <Button type=\"primary\" className=\"table-oper-btn\" style={{ marginLeft: 30 }} onClick={closeCurrentEvent}>\r\n 关闭事件\r\n </Button>\r\n </div>\r\n <Divider orientation=\"left\" plain>{evName}关联的流程</Divider>\r\n <Row>\r\n <Col span={24} className=\"eventflow-box\">\r\n <div className=\"eventflow-content\">\r\n {\r\n FlowInfoList.map((item,index)=>{\r\n return(\r\n <div key={index} className=\"flowNameList-box\">\r\n <div className=\"iconwrapper\">\r\n <FileDoneOutlined className=\"fileDoneIcon\"/>\r\n <span style={{marginLeft:'10px'}}>{item.FlowName}</span>\r\n </div>\r\n <div className=\"flowNameList-operBox\">\r\n <LoginNameSelect handleStaff={handleStaff}></LoginNameSelect>\r\n <Button type=\"primary\" className=\"table-oper-btn\" size=\"small\" style={{marginLeft:\"10px\"}} onClick={openStaffModal(item.FlowName)}>发起</Button>\r\n </div>\r\n </div>\r\n )\r\n })\r\n }\r\n </div>\r\n </Col>\r\n </Row>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default EventOperation;","G:\\react-flowable\\src\\components\\ProductInfo\\ProductInfo.jsx",["432","433","434","435","436","437","438","439","440"],"// 产品信息组件\r\nimport React, {useState, useEffect} from 'react'\r\nimport { GetProduct, GetProductBusiness } from '../../apis/process'\r\nimport { InputNumber, Modal, Button } from 'antd'\r\nimport \"./ProductInfo.less\"\r\n\r\nconst ProductInfo =(props)=>{\r\n const [proVisible, setProVisible] = useState(false) // 是否显示Modal\r\n const [productList, setProductList] = useState([]) // 产品列表 \r\n const [copyProductList, setCopyProductList] = useState([]) // 复制的产品列表数据\r\n const [addedProduct, setAddedProduct] = useState([]) // 已经添加的数据\r\n\r\n // 拉取数据\r\n const getData=()=>{\r\n GetProduct()\r\n .then((res)=>{\r\n // 初始化Number和Price两个值,便于操作\r\n res.data.getMe.map((item)=>{\r\n item.Productes.map(cItem=>{\r\n cItem.Number = 0\r\n cItem.Price = 0\r\n })\r\n })\r\n setProductList(res.data.getMe)\r\n setCopyProductList(res.data.getMe)\r\n })\r\n }\r\n\r\n // 获取产品列表\r\n const getProductList =()=>{\r\n GetProductBusiness(props.taskId)\r\n .then((res)=>{\r\n // console.log(res.data)\r\n const arr = res.data.getMe\r\n // 拉取去重后的分组的名称\r\n const newArr = [...new Set(arr.map(i => i.ProductTypes))]; // 去重的时候需要注意和普通数组不同\r\n let list = [];\r\n // 筛选去重后的数组,并push对象到list\r\n newArr.forEach(i => {\r\n list.push(arr.filter(t => t.ProductTypes === i));\r\n })\r\n let mlist = [];\r\n // 遍历list数组,讲分组的数据迭代到新的数组,形成需要的格式\r\n list.forEach((item, index) => {\r\n const obj = {\r\n ProductType: newArr[index],\r\n Productes: []\r\n }\r\n item.forEach((el)=>{\r\n obj.Productes.push({\r\n ProductNames: el.ProductName,\r\n Number: el.Number,\r\n Price: el.ProductPrice\r\n })\r\n })\r\n mlist.push(obj)\r\n })\r\n setAddedProduct(mlist)\r\n })\r\n }\r\n\r\n const openMadal=()=>{\r\n setProVisible(true)\r\n }\r\n\r\n const addProduct=()=>{\r\n let arr = []\r\n productList.map((item)=>{\r\n let obj = {\r\n ProductType: item.ProductType,\r\n Productes: []\r\n }\r\n // 数量和价格只要有一个大于0,则为有效数据,添加到数组中\r\n item.Productes.map(cItem=>{\r\n if (cItem.Number > 0 || cItem.Price > 0) {\r\n obj.Productes.push(cItem)\r\n }\r\n })\r\n if (obj.Productes.length > 0) {\r\n arr.push(obj)\r\n }\r\n })\r\n setAddedProduct(arr)\r\n setProVisible(false)\r\n \r\n let arrList = []\r\n arr.forEach((item)=>{\r\n let myObj = {\r\n ProductType: item.ProductType,\r\n ProductDetails: []\r\n }\r\n item.Productes.forEach((cItem)=>{\r\n \r\n myObj.ProductDetails.push({\r\n ProductName: cItem.ProductNames,\r\n ProductCode: cItem.ProductCode,\r\n Price: cItem.Price,\r\n Number: cItem.Number || 0 + \"\"\r\n })\r\n })\r\n arrList.push(myObj)\r\n })\r\n props.getProductInfo(arrList);\r\n }\r\n\r\n const closeModal=()=>{\r\n setProVisible(false)\r\n }\r\n\r\n const productNumberOnChange=(value, type, name, code)=>{\r\n copyProductList.map((item)=>{\r\n item.Productes.map(cItem=>{\r\n if (code === cItem.ProductCode) {\r\n cItem.Number = value\r\n }\r\n })\r\n })\r\n setProductList(copyProductList)\r\n }\r\n \r\n const productPriceOnChange=(value, type, name, code)=>{\r\n copyProductList.map((item)=>{\r\n item.Productes.map(cItem=>{\r\n if (code === cItem.ProductCode) {\r\n cItem.Price = value\r\n }\r\n })\r\n })\r\n setProductList(copyProductList)\r\n }\r\n\r\n useEffect(()=>{\r\n console.log(props, \"props\")\r\n getData()\r\n getProductList()\r\n }, [])\r\n\r\n\r\n return(\r\n <div className=\"productInfo-wrapper\">\r\n <div className=\"productinfo-title\">\r\n 产品信息\r\n </div>\r\n {\r\n props.showAddProductButton ?\r\n <div className=\"topbtns\">\r\n <Button type=\"primary\" onClick={openMadal}>添加产品</Button>\r\n </div>\r\n :\r\n null\r\n }\r\n <div className=\"productInfo-header\">\r\n <div className=\"header-title\">产品类型</div>\r\n <div className=\"header-title\">产品名称</div>\r\n <div className=\"header-title\">数量</div>\r\n <div className=\"header-title\">价格(万元)</div>\r\n </div>\r\n {\r\n addedProduct.length > 0 ?\r\n <div className=\"productInfo-content\">\r\n {\r\n addedProduct.map((item,index)=>{\r\n return (\r\n <div className=\"product-rows\" key={index}>\r\n <div className=\"first-column\">\r\n {item.ProductType}\r\n </div>\r\n <div className=\"other-column\">\r\n {\r\n item.Productes.map((cItem,cIndex)=>{\r\n return(\r\n <div className=\"normal-column\" key={cIndex}>\r\n <div className=\"product-name\">{cItem.ProductNames}</div>\r\n <div className=\"product-name\">\r\n {cItem.Number}\r\n </div>\r\n <div className=\"product-name\">\r\n {cItem.Price}\r\n </div>\r\n </div>\r\n )\r\n })\r\n }\r\n </div>\r\n \r\n </div>\r\n )\r\n })\r\n }\r\n </div>\r\n :\r\n <div className=\"product-nodata\">\r\n 暂无数据\r\n </div>\r\n }\r\n <Modal title=\"添加产品信息\" visible={proVisible} onOk={addProduct} onCancel={closeModal} width={1008}\r\n bodyStyle={{overflow:'auto'}} wrapClassName=\"product-wrapper\">\r\n <div className=\"modal-productInfo-header\">\r\n <div className=\"modal-header-title\">产品类型</div>\r\n <div className=\"modal-header-product\">产品名称</div>\r\n <div className=\"modal-header-product\">数量</div>\r\n <div className=\"modal-header-product\">价格(万元)</div>\r\n </div>\r\n <div className=\"modal-productInfo-content\">\r\n {\r\n productList.map((item,index)=>{\r\n return (\r\n <div className=\"modal-product-rows\" key={index}>\r\n <div className=\"modal-first-column\">\r\n {item.ProductType}\r\n </div>\r\n <div className=\"modal-other-column\">\r\n {\r\n item.Productes.map((cItem,cIndex)=>{\r\n return(\r\n <div className=\"modal-normal-column\" key={cIndex}>\r\n <div className=\"modal-product-name\">{cItem.ProductNames}</div>\r\n <div className=\"modal-product-name\">\r\n <InputNumber size=\"small\" min={0} max={99999} defaultValue={cItem.Number} onChange={value => productNumberOnChange(value,item.ProductType, cItem.ProductNames, cItem.ProductCode)} />\r\n </div>\r\n <div className=\"modal-product-name\">\r\n <InputNumber size=\"small\" min={0} max={99999} defaultValue={cItem.Price} onChange={value=> productPriceOnChange(value,item.ProductType, cItem.ProductNames, cItem.ProductCode)} />\r\n </div>\r\n </div>\r\n )\r\n })\r\n }\r\n </div>\r\n \r\n </div>\r\n )\r\n })\r\n }\r\n </div>\r\n </Modal>\r\n </div>\r\n )\r\n}\r\n\r\nexport default ProductInfo","G:\\react-flowable\\src\\components\\UploadFile\\UploadFile.jsx",["441","442","443","444","445","446","447","448","449"],"// 自定义Form Render组件——上传附件\r\nimport React, { useState, useEffect, useRef } from 'react'\r\nimport { Modal, Button, Radio, Input,message } from 'antd';\r\nimport { uploadToService } from '../../apis/process';\r\nimport { CloudUploadOutlined } from '@ant-design/icons';\r\nimport './UploadFile.less';\r\nconst { Search } = Input;\r\n\r\nconst UploadFile =(props)=> {\r\n const [upFileName, setUpFileName] = useState(null)\r\n const [taskId, setTaskId] = useState(window.taskId)\r\n\r\n const handleChange=(e)=>{\r\n \r\n setUpFileName(e.target.files[0])\r\n // console.log(upFileName)\r\n }\r\n\r\n // 确定上传附件\r\n const sureUploadVisible=()=>{\r\n if (!upFileName){\r\n message.error(\"请选择上传文件\")\r\n return false\r\n }\r\n var _url = document.referrer + \"cityinterface/rest/services/filedownload.svc/uploadfile/workflow/\"+ props.name +'/' + upFileName.name;\r\n var formData = new FormData();\r\n formData.append(\"filedata\", upFileName);\r\n var request = new XMLHttpRequest();\r\n request.open(\"POST\", encodeURI(_url));\r\n request.onreadystatechange = function() {\r\n if (request.readyState == 4) {\r\n if (request.status == 200) {\r\n try {\r\n var data = JSON.parse(request.responseText);\r\n if (data && data.success) {\r\n message.success(\"数据上传成功\");\r\n // fileuploadToService('workflow', taskId ,upFileName.name)\r\n props.onChange(props.name, upFileName)\r\n } else {\r\n message.error(\"上传失败\")\r\n }\r\n } catch (e) {\r\n message.error(\"上传失败\")\r\n }\r\n } else {\r\n message.error(\"上传失败\")\r\n }\r\n }\r\n }\r\n request.send(formData);\r\n }\r\n // 上传文件至服务器\r\n const fileuploadToService=(folderName, timeStamp, fileName)=> {\r\n const FilePath = `/${folderName}/${timeStamp}/${fileName}`\r\n uploadToService(taskId, FilePath)\r\n .then((res)=>{\r\n if (res.data.statusCode === \"0000\") {\r\n message.success(\"上传成功!\")\r\n // setUploadVisible(false)\r\n } else {\r\n message.error(res.data.errMsg)\r\n }\r\n })\r\n }\r\n useEffect(()=>{\r\n }, [])\r\n return (\r\n <div className=\"fileupload-wrapper\">\r\n <Input.Group compact>\r\n <Input size=\"small\" type=\"file\" style={{ width: '80%' }} placeholder=\"请点击选择文件\" onChange={handleChange}></Input>\r\n <CloudUploadOutlined size=\"small\" style={{ width: '20%' }} type=\"primary\" className=\"uploadBtn\" onClick={sureUploadVisible}>上传</CloudUploadOutlined>\r\n </Input.Group>\r\n </div>\r\n )\r\n \r\n}\r\n\r\nexport default UploadFile\r\n","G:\\react-flowable\\src\\components\\NoData\\NoData.jsx",[],"G:\\react-flowable\\src\\utils\\request.js",[],"G:\\react-flowable\\src\\components\\DateTimePicker\\DateTimePicker.jsx",[],"G:\\react-flowable\\src\\components\\MultiSelect\\MultiSelect.jsx",[],"G:\\react-flowable\\src\\components\\CodeGenerator\\CodeGenerator.jsx",[],"G:\\react-flowable\\src\\components\\CityPicker\\CityPicker.jsx",["450","451","452"],"// 自定义FormRender组件——可编辑的下拉选择器\r\nimport React, {useState, useEffect, useRef} from 'react'\r\nimport { Cascader } from 'antd';\r\nimport './CityPicker.less'\r\nimport ChineseDistricts from '../../libs/ChineseDistricts/ChineseDistricts';// 数据源\r\n\r\nclass CityPicker extends React.Component{\r\n state={\r\n chinaData: [],//cascader数据源\r\n address: '', // 地址\r\n }\r\n // 拉取第一层数据:省份\r\n handleData=()=>{\r\n let province = []\r\n ChineseDistricts['86'].forEach((item)=>{\r\n const obj = {\r\n label: item.address,\r\n value: item.code,\r\n children: this.handleCity(item.code)\r\n }\r\n province.push(obj)\r\n })\r\n this.setState({\r\n chinaData: province\r\n })\r\n }\r\n // 处理第二层级数据:城市\r\n handleCity=(code)=>{\r\n let city = []\r\n for(let key in ChineseDistricts) {\r\n // 判断各自的分区\r\n if (key === code) {\r\n for(let cKey in ChineseDistricts[key]) {\r\n city.push({\r\n label: ChineseDistricts[key][cKey],\r\n value: cKey,\r\n children: this.handCounty(cKey)\r\n })\r\n }\r\n }\r\n }\r\n return city\r\n }\r\n // 处理第三层级数据:区或者县\r\n handCounty=(code)=>{\r\n let country = []\r\n for(let key in ChineseDistricts) {\r\n if (key === code) {\r\n for(let cKey in ChineseDistricts[key]) {\r\n country.push({\r\n label: ChineseDistricts[key][cKey],\r\n value: cKey\r\n })\r\n }\r\n }\r\n }\r\n return country\r\n }\r\n // 监听数据改变的方法\r\n chinaChange=(data)=>{\r\n this.setState({\r\n address: data\r\n })\r\n this.props.onChange(this.props.name, data)\r\n }\r\n componentDidMount(){\r\n this.handleData()\r\n this.setState({\r\n address: this.props.value\r\n })\r\n }\r\n render(){\r\n return(\r\n <div style={{width:'100%'}}>\r\n <Cascader style={{width:'100%'}} value={this.state.address || this.props.value} options={this.state.chinaData} onChange={this.chinaChange} placeholder=\"请选择城市\"></Cascader>\r\n </div>\r\n )\r\n }\r\n}\r\n\r\nexport default CityPicker","G:\\react-flowable\\src\\components\\SearchSelect\\SearchSelect.jsx",["453","454"],"// 自定义FormRender组件——下拉搜索组件\r\nimport React, { useState, useEffect, useRef } from 'react'\r\nimport { Select } from 'antd';\r\nimport { getSelectName } from '../../apis/process';\r\nimport './SearchSelect.less';\r\nconst { Option } = Select;\r\n\r\nconst SearchSelect =(myOptions)=> {\r\n const [optionList, setOptionList] = useState([])\r\n const hanldeChange=(value)=>{\r\n myOptions.onChange(myOptions.name, value)\r\n }\r\n const onSearch=(e)=>{\r\n // console.log(e)\r\n }\r\n const getData = ()=>{\r\n let str = \"\"\r\n if (myOptions.options && myOptions.options.value) {\r\n str = myOptions.options.value\r\n } else {\r\n return\r\n }\r\n getSelectName(str)\r\n .then((res)=>{\r\n setOptionList(res.data)\r\n })\r\n }\r\n useEffect(()=>{\r\n getData()\r\n }, [])\r\n return (\r\n <div className=\"select-search-wrapper\" style={{width:'100%'}}>\r\n <Select\r\n showSearch\r\n optionFilterProp=\"children\"\r\n onChange={hanldeChange}\r\n onSearch={onSearch}\r\n style={{width:'100%'}}\r\n defaultValue={myOptions.value}\r\n filterOption={(input, option) =>option.children.toLowerCase().indexOf(input.toLowerCase()) >= 0}\r\n >\r\n {\r\n optionList.map((item,index)=>{\r\n return(\r\n <Option value={item.NODEVALUE} key={index}>{item.NODENAME}</Option>\r\n )\r\n })\r\n }\r\n </Select>\r\n </div>\r\n )\r\n \r\n}\r\n\r\nexport default SearchSelect\r\n","G:\\react-flowable\\src\\components\\AMapContainer\\AMapContainer.jsx",[],"G:\\react-flowable\\src\\components\\EditbleSelct\\EditbleSelct.jsx",[],"G:\\react-flowable\\src\\components\\LoginNameSelect\\LoginNameSelect.jsx",["455","456","457"],"// 台账的人员选择器组件(非FormRender自定义组件)\nimport React, { useState, useEffect } from 'react'\nimport { Modal, Button, Radio, Input } from 'antd';\nimport { UserAddOutlined } from '@ant-design/icons';\nimport { getUserListForRole } from '../../apis/process';\nimport './LoginNameSelect.less';\nconst { Search } = Input;\n\nconst LoginNameSelect =(props)=> {\n const [visible, setVisible] = useState(false)\n const [personArr, setPersonArr] = useState([])\n const [person, setPerson] = useState('')\n const [loginName, setLoginName] = useState('')\n const [userId ,setUserID] = useState('')\n const getData =()=>{\n getUserListForRole()\n .then((res)=>{\n let arr = []\n res.data.getMe.forEach((item)=>{\n if (item.LevelCode.indexOf('1-24') > -1) {\n arr.push(item)\n }\n })\n setPersonArr(arr)\n })\n }\n const onFocus = ()=>{\n setVisible(true)\n }\n const onOk=()=>{\n setVisible(false)\n props.handleStaff(loginName, userId);\n }\n const onCancel=()=>{\n setVisible(false)\n getData()\n }\n const onChange=(e)=>{\n setPerson(e.target.value)\n }\n const handleChange=(e)=>{\n // console.log(e)\n setPerson(e.target.value)\n setLoginName(e.target.loginName)\n setUserID(e.target.userID)\n // console.log(person)\n // console.log(loginName)\n }\n const onSearch=(e)=>{\n let arr = []\n personArr.map((item) => {\n let list = {\n OUID: item.OUID,\n OUName: item.OUName,\n userList: []\n }\n item.userList.map((user) => {\n if (user.userName.indexOf(e) > -1) {\n list.userList.push(user);\n }\n })\n if (list.userList.length) {\n arr.push(list);\n }\n })\n setPersonArr(arr)\n }\n useEffect(()=>{\n getData()\n }, [])\n return (\n <div className=\"personselect-wrapper\">\n <div>\n <span className=\"selectvalue\">{person}</span>\n <Button type=\"primary\" size=\"small\" shape=\"round\" icon={<UserAddOutlined />} onClick={onFocus}></Button>\n </div>\n <Modal title=\"人员选择器\" visible={visible} onOk={onOk} onCancel={onCancel} wrapClassName=\"personModalClass\" bodyStyle={{height:'500px',overflowY:'auto'}}>\n <Search\n placeholder=\"请输入姓名\"\n allowClear\n onSearch={onSearch}\n enterButton \n />\n {\n personArr.map((item,index)=>{\n return(\n <form key={index} className=\"fieldset-class\">\n <fieldset className=\"person-select\">\n <legend className=\"personheader\" style={{fontSize: '16px'}}>{item.OUName}</legend>\n <Radio.Group className=\"person-radio\" name=\"person\" onChange={handleChange} value={person}>\n {\n item.userList.map((child,childIndex)=>{\n return(\n <Radio value={child.userName} key={childIndex} loginName = {child.loginName} userID = {child.userID}>{child.userName}</Radio>\n )\n })\n }\n </Radio.Group>\n </fieldset>\n </form>\n )\n })\n }\n </Modal>\n </div>\n )\n \n}\n\nexport default LoginNameSelect\n","G:\\react-flowable\\src\\components\\TableAccount\\TableAccount.jsx",["458","459"],"// 自定义FormRender组件——台账选择器\r\nimport React from 'react';\r\nimport { Modal, Button, Input, Table, message, Tooltip } from 'antd';\r\nimport { GetAccountPageList } from '../../apis/process';\r\nimport './TableAccount.less';\r\nconst { Search } = Input;\r\n\r\nclass TableAccount extends React.Component {\r\n state={\r\n modalTitle: '',\r\n visible: false,\r\n pagination:{\r\n hideOnSinglePage: false,\r\n pageSizeOptions: [20,30,50],\r\n showQuickJumper: true,\r\n size: 'small',\r\n pageSize: 10\r\n },\r\n columns: [],\r\n tableData: [],\r\n tableAccountValue: this.props.options && this.props.options.value || \"\",\r\n rowSelection: {\r\n onChange: (selectedRowKeys) => {\r\n // console.log(selectedRowKeys)\r\n // console.log(this.state.tableData)\r\n let value = \"\"\r\n this.state.tableData.forEach((item)=>{\r\n if (item.ID === selectedRowKeys[0]) {\r\n if (this.props.options.accValue ) {\r\n value = item[this.props.options.accValue]\r\n } else if (this.props.schema.accValue) {\r\n value = item[this.props.schema.accValue]\r\n } else {\r\n message.error(\"台账选择器配置有误!\")\r\n }\r\n }\r\n })\r\n this.setState({\r\n tableAccountValue: value\r\n })\r\n }\r\n }\r\n }\r\n componentDidMount(){\r\n // console.log(this.props)\r\n if (this.props.options.accName) {\r\n this.setState({\r\n modalTitle: this.props.options.accName\r\n })\r\n this.getData(this.props.options.accName)\r\n } else if (this.props.schema.accName && this.props.schema.accValue) {\r\n this.setState({\r\n modalTitle: this.props.schema.accName\r\n })\r\n this.getData(this.props.schema.accName)\r\n } else {\r\n message.error(\"台账选择器配置有误!\")\r\n }\r\n \r\n // this.getData('销售合同简略版')\r\n }\r\n getData = (name = \"\", info = \"\") => {\r\n GetAccountPageList(name, info)\r\n .then((res) => {\r\n if (res.data.say.statusCode !== \"0000\") {\r\n message.error(res.data.say.errMsg)\r\n return\r\n }\r\n let resArr = []\r\n res.data.getMe.forEach((item, index)=>{\r\n let obj = {\r\n '序号': index + 1,\r\n ID: item.ID\r\n }\r\n item.WebRow.forEach((cItem)=>{\r\n let key = cItem.FieldName\r\n let value = cItem.FieldValue\r\n obj[key] = value\r\n }) \r\n resArr.push(obj)\r\n })\r\n resArr.forEach((item)=>{\r\n // if (this.props.options.accValue) {\r\n // item.key = item[this.props.options.accValue]\r\n // } else if (this.props.schema.accValue) {\r\n // item.key = item[this.props.schema.accValue]\r\n // } else {\r\n // message.error(\"台账选择器配置有误!\")\r\n // }\r\n item.key = item.ID\r\n })\r\n let columnArr = []\r\n for(let key in resArr[0]) {\r\n if (key === 'key' || key === \"ID\") {\r\n continue\r\n }\r\n columnArr.push({\r\n title: key,\r\n dataIndex: key\r\n })\r\n }\r\n this.setState({\r\n columns: columnArr,\r\n tableData: resArr\r\n })\r\n })\r\n }\r\n\r\n hanldeInputClick = () => {\r\n this.setState({\r\n visible: true\r\n })\r\n }\r\n onOk = () => {\r\n this.setState({\r\n visible: false\r\n },()=>{\r\n this.props.onChange(this.props.name, this.state.tableAccountValue)\r\n })\r\n }\r\n onCancel = () => {\r\n this.setState({\r\n visible: false\r\n })\r\n }\r\n onSearch = (val) => {\r\n this.getData(this.props.options.accName, val)\r\n }\r\n render() {\r\n return (\r\n <div className=\"tableAccount-wrapper\">\r\n <div>\r\n <span className=\"keyclass\">{this.state.tableAccountValue}</span>\r\n <Tooltip title=\"请点击选择台账\" placement=\"right\">\r\n <Button type=\"primary\" shape=\"round\" size=\"small\" onClick={this.hanldeInputClick}>台账选择器</Button>\r\n </Tooltip>\r\n </div>\r\n <Modal title={this.state.modalTitle} visible={this.state.visible} onCancel={this.onCancel} onOk={this.onOk} width={1360}\r\n bodyStyle={{ height: '600px', overflowY: 'auto' }} wrapClassName=\"personModalClass\">\r\n <Search\r\n placeholder=\"请输入名称\"\r\n allowClear\r\n onSearch={this.onSearch}\r\n enterButton\r\n className=\"tableAccountSearchClass\"\r\n />\r\n <Table\r\n className=\"tableAccountTableClass\"\r\n rowSelection={{\r\n type: 'radio',\r\n ...this.state.rowSelection,\r\n }}\r\n scroll = {{x:700,y:400}}\r\n pagination={this.state.pagination}\r\n columns={this.state.columns}\r\n dataSource={this.state.tableData}\r\n rowClassName=\"rowClassName\" style={{ width: '100%' }}>\r\n </Table>\r\n </Modal>\r\n </div>\r\n )\r\n }\r\n\r\n}\r\n\r\nexport default TableAccount\r\n","G:\\react-flowable\\src\\components\\StaffSelectWidget\\StaffSelectWidget.jsx",["460","461","462"],"// 自定义FormRender组件——人员选择器\r\nimport React, { useState, useEffect } from 'react'\r\nimport { Modal, Button, Radio, Input, Tooltip } from 'antd';\r\nimport { UserAddOutlined } from '@ant-design/icons';\r\nimport { getUserListForRole } from '../../apis/process';\r\nimport './StaffSelectWidget.less';\r\nconst { Search } = Input;\r\n\r\nconst StaffSelectWidget =(props)=> {\r\n const [visible, setVisible] = useState(false)\r\n const [personArr, setPersonArr] = useState([])\r\n const [personList, setPersonList] = useState([])\r\n const [person, setPerson] = useState(props.value)\r\n const getData =()=>{\r\n getUserListForRole()\r\n .then((res)=>{\r\n let arr = []\r\n res.data.getMe.forEach((item)=>{\r\n if (item.LevelCode.indexOf('1-24') > -1) {\r\n arr.push(item)\r\n }\r\n })\r\n setPersonArr(arr)\r\n setPersonList(arr)\r\n })\r\n }\r\n const onFocus = ()=>{\r\n setVisible(true)\r\n }\r\n const onOk=()=>{\r\n setVisible(false)\r\n props.onChange(props.name, person)\r\n }\r\n const onCancel=()=>{\r\n setVisible(false)\r\n getData()\r\n }\r\n const onChange=(e)=>{\r\n setPerson(e.target.value)\r\n }\r\n const handleChange=(e)=>{\r\n setPerson(e.target.value)\r\n }\r\n const onSearch=(e)=>{\r\n let arr = []\r\n personList.map((item) => {\r\n let list = {\r\n OUID: item.OUID,\r\n OUName: item.OUName,\r\n userList: []\r\n }\r\n item.userList.map((user) => {\r\n if (user.userName.indexOf(e) > -1) {\r\n list.userList.push(user);\r\n }\r\n })\r\n if (list.userList.length) {\r\n arr.push(list);\r\n }\r\n })\r\n setPersonArr(arr)\r\n }\r\n useEffect(()=>{\r\n getData()\r\n }, [])\r\n return (\r\n <div className=\"personselect-wrapper\">\r\n \r\n <div>\r\n <span className=\"selectvalue\">{person}</span>\r\n <Tooltip title=\"请点击选择人员\" placement=\"right\">\r\n <Button type=\"primary\" size=\"small\" shape=\"round\" icon={<UserAddOutlined />} onClick={onFocus}></Button>\r\n </Tooltip>\r\n </div>\r\n <Modal title=\"人员选择器\" visible={visible} onOk={onOk} onCancel={onCancel} wrapClassName=\"personModalClass\" bodyStyle={{height:'500px',overflowY:'auto'}}>\r\n <Search\r\n placeholder=\"请输入姓名\"\r\n allowClear\r\n className=\"personModalSearchClass\"\r\n onSearch={onSearch}\r\n enterButton \r\n />\r\n {\r\n personArr.map((item,index)=>{\r\n return(\r\n <form key={index} className=\"fieldset-class\">\r\n <fieldset className=\"person-select\">\r\n <legend className=\"personheader\">{item.OUName}</legend>\r\n <Radio.Group className=\"person-radio\" name=\"person\" onChange={handleChange} value={person}>\r\n {\r\n item.userList.map((child,childIndex)=>{\r\n return(\r\n <Radio key={childIndex} value={child.userName}>{child.userName}</Radio>\r\n )\r\n })\r\n }\r\n </Radio.Group>\r\n </fieldset>\r\n </form>\r\n )\r\n })\r\n }\r\n </Modal>\r\n </div>\r\n )\r\n \r\n}\r\n\r\nexport default StaffSelectWidget\r\n","G:\\react-flowable\\src\\components\\TreeCascader\\TreeCascader.jsx",[],"G:\\react-flowable\\src\\libs\\ChineseDistricts\\ChineseDistricts.js",[],"G:\\react-flowable\\src\\libs\\extraFormMapping\\extraFormMapping.js",[],"G:\\react-flowable\\src\\libs\\FormDataValid\\FormDataValid.js",[],"G:\\react-flowable\\src\\libs\\frGeneratorConfig\\frGeneratorConfig.js",["463","464","465","466","467","468","469","470","471","472","473","474","475","476","477","478","479","480","481","482","483","484","485","486"],"// 表单编辑器自定义组件配置文件\nimport { defaultSettings } from 'fr-generator';\nconst customizeSetting = {\n title: '自定义组件',\n widgets: [{\n text: '附件上传',\n name: 'uploadFile',\n schema: {\n title: '附件上传',\n type: 'string',\n 'ui:widget': 'file',\n },\n widget: 'file',\n setting: {\n fieldData: {\n title: \"数据字典\",\n type: 'string'\n },\n isRequired: {\n title: '必填',\n type: 'boolean'\n }\n },\n },\n {\n text: '人员选择器',\n name: 'StaffSelectWidget',\n schema: {\n title: '人员选择器',\n type: 'string',\n 'ui:widget': 'staff',\n },\n widget: 'staff',\n setting: {\n fieldData: {\n title: \"数据字典\",\n type: 'string'\n },\n isRequired: {\n title: '必填',\n type: 'boolean'\n }\n },\n },\n {\n text: '台账选择器',\n name: 'TableAccount',\n schema: {\n title: '台账选择器',\n type: 'string',\n 'ui:widget': 'TableAccount'\n },\n widget: 'TableAccount',\n setting: {\n isRequired: {\n title: '必填',\n type: 'boolean'\n },\n accName: {\n title: \"台账名称\",\n type: 'string'\n },\n accValue: {\n title: \"取值字段名称\",\n type: 'string'\n }\n },\n },\n {\n text: '可编辑值选择器',\n name: 'EditbleSelct',\n schema: {\n title: '可编辑值选择器',\n type: 'string',\n 'ui:widget': 'editSearch',\n },\n widget: 'editSearch',\n setting: {\n fieldData: {\n title: \"数据字典\",\n type: 'string'\n },\n isRequired: {\n title: '必填',\n type: 'boolean'\n }\n },\n },\n {\n text: '搜索选择器',\n name: 'SearchSelect',\n schema: {\n title: '搜索选择器',\n type: 'string',\n 'ui:widget': 'search',\n },\n widget: 'search',\n setting: {\n fieldData: {\n title: \"数据字典\",\n type: 'string'\n },\n isRequired: {\n title: '必填',\n type: 'boolean'\n }\n },\n },\n {\n text: '级联选择器',\n name: 'TreeCascader',\n schema: {\n title: '级联选择器',\n type: 'string',\n 'ui:widget': 'cascader',\n },\n widget: 'cascader',\n setting: {\n fieldData: {\n title: \"数据字典\",\n type: 'string'\n },\n isRequired: {\n title: '必填',\n type: 'boolean'\n }\n },\n },\n {\n text: '城市选择器',\n name: 'cityPicker',\n schema: {\n title: '城市选择器',\n type: 'string',\n 'ui:widget': 'cityPicker',\n },\n widget: 'cityPicker',\n setting: {\n fieldData: {\n title: \"数据字典\",\n type: 'string'\n },\n isRequired: {\n title: '必填',\n type: 'boolean'\n }\n },\n },\n {\n text: '坐标控件',\n name: 'mapSelect',\n schema: {\n title: '坐标控件',\n type: 'string',\n 'ui:widget': 'mapSelect',\n },\n widget: 'mapSelect',\n setting: {\n fieldData: {\n title: \"数据字典\",\n type: 'string'\n },\n isRequired: {\n title: '必填',\n type: 'boolean'\n }\n },\n },\n {\n text: '自定义多选',\n name: 'customizeMultiSelect',\n schema: {\n title: '自定义多选',\n type: 'string',\n 'ui:widget': 'customizeMultiSelect',\n },\n widget: 'customizeMultiSelect',\n setting: {\n fieldData: {\n title: \"数据字典\",\n type: 'string'\n },\n isRequired: {\n title: '必填',\n type: 'boolean'\n }\n },\n },\n {\n text: '编码生成器',\n name: 'CodeGenerator',\n schema: {\n title: '编码生成器',\n type: 'string',\n 'ui:widget': 'CodeGenerator',\n },\n widget: 'CodeGenerator',\n setting: {\n code: {\n title: \"编码前缀\",\n type: 'string'\n },\n isRequired: {\n title: '必填',\n type: 'boolean'\n }\n },\n },\n ],\n}\n\n// 添加校验正则\nconst validArr = [\n {\n validName: '无校验规则',\n validReg: ''\n },\n {\n validName: '数字',\n validReg: '^(\\-|\\+)?\\d+(\\.\\d+)?$'\n },\n {\n validName: '非负整数',\n validReg: '^(0|[1-9][0-9]*)$'\n },\n {\n validName: '英文或数字',\n validReg: '^[A-Za-z0-9]+$'\n },\n {\n validName: '邮箱',\n validReg: '^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$'\n },\n {\n validName: '手机号码',\n validReg: '^(13[0-9]|14[5|7]|15[0|1|2|3|4|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\\d{8}$'\n },\n {\n validName: '身份证号',\n validReg: '(^\\d{15}$)|(^\\d{18}$)|(^\\d{17}(\\d|X|x)$)'\n },\n {\n validName: 'IPv4地址',\n validReg: '((2(5[0-5]|[0-4]\\d))|[0-1]?\\d{1,2})(\\.((2(5[0-5]|[0-4]\\d))|[0-1]?\\d{1,2})){3}'\n },\n {\n validName: '邮政编码',\n validReg: '[1-9]\\d{5}(?!\\d)'\n }\n]\n\n// 处理正则校验\ndefaultSettings.forEach((item)=>{\n if (item.title === \"基础组件\") {\n item.widgets.forEach((cItem)=>{\n if (cItem.setting.hasOwnProperty('pattern')){\n let namesArr = []\n let valArr = []\n cItem.setting.pattern['ui:options'].placeholder = \"请选择校验规则\"\n for(let i=0; i<validArr.length;i++) {\n namesArr.push(validArr[i].validName)\n valArr.push(validArr[i].validReg)\n }\n cItem.setting.pattern.enumNames = namesArr\n cItem.setting.pattern.enum = valArr\n\n }\n })\n }\n})\n\ndefaultSettings.forEach((item) => {\n item.widgets.forEach((cItem) => {\n cItem.setting = {\n ...cItem.setting,\n fieldData: {\n title: \"数据字典\",\n type: 'string'\n },\n isRequired: {\n title: '必填',\n type: 'boolean'\n }\n }\n })\n})\n\nlet settings = defaultSettings.push(customizeSetting)\n\nexport default settings","G:\\react-flowable\\src\\components\\StaffSelect\\StaffSelect.jsx",["487","488","489"],"// 台账的人员选择器组件(非FormRender自定义组件)\nimport React, { useState, useEffect } from 'react'\nimport { Modal, Button, Radio, Input, Tooltip } from 'antd';\nimport { UserAddOutlined } from '@ant-design/icons';\nimport { getUserListForRole } from '../../apis/process';\nimport './StaffSelect.less';\nconst { Search } = Input;\n\nconst StaffSelect =(props)=> {\n // console.log(props)\n const [visible, setVisible] = useState(false)\n const [personArr, setPersonArr] = useState([])\n const [personList, setPersonList] = useState([])\n const [person, setPerson] = useState('')\n const getData =()=>{\n getUserListForRole()\n .then((res)=>{\n let arr = []\n res.data.getMe.forEach((item)=>{\n if (item.LevelCode.indexOf('1-24') > -1) {\n arr.push(item)\n }\n })\n setPersonArr(arr)\n setPersonList(arr)\n })\n }\n const onFocus = ()=>{\n setVisible(true)\n }\n const onOk=()=>{\n setVisible(false)\n props.handleStaff(person);\n }\n const onCancel=()=>{\n setVisible(false)\n getData()\n }\n const onChange=(e)=>{\n setPerson(e.target.value)\n }\n const handleChange=(e)=>{\n setPerson(e.target.value)\n }\n const onSearch=(e)=>{\n let arr = []\n personList.map((item) => {\n let list = {\n OUID: item.OUID,\n OUName: item.OUName,\n userList: []\n }\n item.userList.map((user) => {\n if (user.userName.indexOf(e) > -1) {\n list.userList.push(user);\n }\n })\n if (list.userList.length) {\n arr.push(list);\n }\n })\n setPersonArr(arr)\n }\n useEffect(()=>{\n getData()\n }, [])\n return (\n <div className=\"personselect-wrapper\">\n <div className=\"personselect-header\">\n {\n person ?\n <div className=\"selectvalue\">{ person }</div>\n :\n <div className=\"selectvalue\">{ props.userName }</div>\n }\n <Tooltip title=\"请点击选择人员\">\n <Button type=\"primary\" size=\"small\" shape=\"round\" icon={<UserAddOutlined />} onClick={onFocus}></Button>\n </Tooltip>\n </div>\n <Modal title=\"人员选择器\" visible={visible} onOk={onOk} onCancel={onCancel} wrapClassName=\"personModalClass\" bodyStyle={{height:'500px',overflowY:'auto'}}>\n <Search\n placeholder=\"请输入姓名\"\n allowClear\n className=\"personModalSearchClass\"\n onSearch={onSearch}\n enterButton \n />\n {\n personArr.map((item,index)=>{\n return(\n <form key={index} className=\"fieldset-class\">\n <fieldset className=\"person-select\">\n <legend className=\"personheader\" style={{fontSize: '16px'}}>{item.OUName}</legend>\n <Radio.Group className=\"person-radio\" name=\"person\" onChange={handleChange} value={person}>\n {\n item.userList.map((child,childIndex)=>{\n return(\n <Radio value={child.userName} key={childIndex}>{child.userName}</Radio>\n )\n })\n }\n </Radio.Group>\n </fieldset>\n </form>\n )\n })\n }\n </Modal>\n </div>\n )\n \n}\n\nexport default StaffSelect\n","G:\\react-flowable\\src\\components\\FormRenderTrans\\FormRenderTrans.jsx",["490","491","492"],"// 查看表单组件\r\nimport React, { useState, useEffect, useRef } from 'react';\r\nimport FormRender from 'form-render/lib/antd';\r\nimport { Button, message } from 'antd';\r\nimport FormTransfer from '../../libs/transform/transform'\r\nimport { getTableName } from '../../apis/process'\r\nimport \"./FormRenderTrans.less\"\r\nimport FormRenderWidgets from '../../libs/FormRenderWidgets/FormRenderWidgets'\r\n\r\n\r\nconst FormRenderTrans=(props)=>{\r\n const [formData, setFormData] = useState({});\r\n const [schema, setSchema] = useState({})\r\n const [valid, setValid] = useState([])\r\n const formRef = useRef();\r\n\r\n const getData = ()=>{\r\n // 台账的名称\r\n const {tableName} = props\r\n getTableName(tableName)\r\n .then(async(res)=>{\r\n if (res.data.say.statusCode === \"0000\") {\r\n const dataArr = res.data.getMe[0].Groups\r\n let formTransfer = new FormTransfer(dataArr)\r\n let schema =await formTransfer.handleGroup()\r\n setSchema(schema)\r\n props.handleSchema(schema)\r\n } else {\r\n message.error(res.data.say.errMsg)\r\n }\r\n })\r\n }\r\n\r\n const onValidate=(valid)=>{\r\n setValid(valid)\r\n }\r\n\r\n useEffect(()=>{\r\n getData()\r\n }, [])\r\n\r\n return (\r\n <div className=\"startwrap\">\r\n {/* <FormRender\r\n ref={formRef}\r\n {...schema}\r\n formData={formData}\r\n onChange={setFormData}\r\n onValidate={onValidate}\r\n showValidate={false}\r\n widgets={{ staff: StaffSelectWidget, cascader: TreeCascader, search: SearchSelect, TableAccount: TableAccount, file:UploadFile, \r\n editSearch: EditbleSelct, mapSelect: AMapContainer, cityPicker: cityPicker, multiSelect: multiSelect, \r\n DateTimePicker:DateTimePicker, CodeGenerator: CodeGenerator }}\r\n /> */}\r\n <FormRender\r\n ref={formRef}\r\n {...schema}\r\n formData={formData}\r\n onChange={setFormData}\r\n onValidate={onValidate}\r\n showValidate={false}\r\n widgets={FormRenderWidgets}\r\n />\r\n </div>\r\n );\r\n}\r\n\r\nexport default FormRenderTrans","G:\\react-flowable\\src\\pages\\Customize\\Sequelize\\Sequelize.jsx",[],"G:\\react-flowable\\src\\pages\\Customize\\Cascader\\Cascader.jsx",[],"G:\\react-flowable\\src\\pages\\EventOnDealList\\EventOnDealList.jsx",["493","494","495","496","497","498","499","500","501","502","503"],"// 事件中心——在办事件列表\r\nimport React, { useState, useEffect, useRef } from 'react';\r\nimport { Table, Space, Input, Button, Modal, Form, message, Select } from 'antd';\r\nimport { GetEventDoingList, EventOperate, GetProcInstByEventCode, GetFlowProcessInfo, flowableLogin} from '../../apis/process'\r\nimport './EventOnDealList.less'\r\nimport configData from '../../utils/config'\r\nimport reactCookie from 'react-cookies'\r\nimport moment from 'moment'\r\nimport NoDataImg from '../../assets/nodata.png'\r\nimport NoData from '../../components/NoData/NoData'\r\nconst { Column } = Table;\r\nconst { Search } = Input;\r\nconst { Option } = Select;\r\n\r\n\r\nconst EventOnDealList = (props) => {\r\n // 用户ID\r\n const [userId, setUserId] = useState('')\r\n // 事件列表\r\n const [data, setData] = useState([])\r\n // 事件名称\r\n const [eventName, setEventName] = useState('')\r\n // 事件类型\r\n const [eventType, setEventType] = useState(0)\r\n\r\n const [userName, setUserName] = useState(\"\")\r\n // 滚动高度\r\n const [clientHeight, setClientHeight] = useState(0)\r\n const [userDepart, setUserDepart] = useState(\"\")\r\n const [loginName,setLoginName] = useState(\"\")\r\n // 事件类型的名称输入框\r\n const eventNameRef = useRef()\r\n // 事件类型描述输入框\r\n const eventDescRef = useRef()\r\n // Modal\r\n const [isModalVisible, setIsModalVisible] = useState(false)\r\n // 删除Modal\r\n const [isDelEvent, setIsDelEvent] = useState(false)\r\n\r\n // 事件已发起流程列表\r\n const [flowData, setFlowData] = useState([])\r\n\r\n // 流程图Modal\r\n const [modelerVisible, setModelerVisible] = useState(false)\r\n\r\n // 流程图图片地址\r\n const [processImgSrc, setProcessImgSrc] = useState(null)\r\n\r\n // 流转信息Modal\r\n const [flowVisible, setFlowVisible] = useState(false)\r\n // 流转信息列表\r\n const [flowTableData, setFlowTableData] = useState([])\r\n // total\r\n const [total, setTotal] = useState(0)\r\n \r\n // 设置分页属性,20条/页\r\n const [pagination, setPagination] = useState({\r\n hideOnSinglePage: false,\r\n pageSizeOptions: [20,30,50],\r\n showQuickJumper: true,\r\n total: total,\r\n showTotal: total => `总共 ${total} 条数据`,\r\n size: 'small',\r\n pageSize: 20\r\n })\r\n // 搜索按钮\r\n const onSearch =(data) =>{\r\n setEventName(data)\r\n getData(data, eventType)\r\n }\r\n // 跳转到事件权限配置\r\n const handleEventConfig=(name)=>{\r\n return ()=>{\r\n props.history.push({\r\n pathname: '/form-render/eventper',\r\n state:{\r\n name: name\r\n }\r\n })\r\n }\r\n }\r\n // 打开查询以发起流程\r\n const openShowStartedFlow=(evname, evjson, evcode)=>{\r\n return ()=>{\r\n if (!evcode){\r\n message.error(\"无事件编码,请联系管理员!\")\r\n return\r\n }\r\n GetProcInstByEventCode(evcode)\r\n .then((res)=>{\r\n if (res.data.say.statusCode === \"0000\") {\r\n res.data.getMe.forEach((item,index)=>{\r\n item.index = index + 1\r\n item.StartTime = item.StartTime ? moment(item.StartTime).format(\"YYYY-MM-DD HH:mm:ss\") : \"\"\r\n item.EndTime = item.EndTime ? moment(item.EndTime).format(\"YYYY-MM-DD HH:mm:ss\") : \"\"\r\n item.key = index\r\n })\r\n setFlowData(res.data.getMe)\r\n } else {\r\n message.error(res.data.say.errMsg)\r\n }\r\n })\r\n setIsModalVisible(true)\r\n }\r\n \r\n }\r\n // 点击确定新增事件类型\r\n const handleOk=()=>{\r\n setIsModalVisible(false)\r\n }\r\n // 点击取消按钮,取消新增\r\n const handleCancel=()=>{\r\n setIsModalVisible(false)\r\n }\r\n // 打开流程图\r\n const showModelerImg = (FlowName, ProcInstID, ProcCode) =>{\r\n return ()=>{\r\n const imgSrc = configData.baseURL + '/rest/Services/PandaWorkflow.svc/GetWorkflowDiagram?processInstanceId=' + ProcInstID + '&t=' + (new Date()).getTime()\r\n setProcessImgSrc(imgSrc)\r\n setModelerVisible(true)\r\n setIsModalVisible(false)\r\n }\r\n }\r\n // 关闭流程图Modal\r\n const closeModeler=()=>{\r\n setModelerVisible(false)\r\n setIsModalVisible(true)\r\n }\r\n\r\n // 查看流转信息\r\n const showTransfer=(FlowName, ProcInstID, ProcCode)=>{\r\n return ()=>{\r\n GetFlowProcessInfo(ProcInstID)\r\n .then((res)=>{\r\n res.data.getMe.forEach((item,index)=>{\r\n item.STime = moment(item.STime).format(\"YYYY-MM-DD HH:mm:ss\")\r\n if (item.ETime) {\r\n item.ETime = moment(item.ETime).format(\"YYYY-MM-DD HH:mm:ss\")\r\n }\r\n item.key = index\r\n item.index = index +1\r\n })\r\n setFlowTableData(res.data.getMe)\r\n setFlowVisible(true)\r\n })\r\n }\r\n }\r\n // 关闭查询流转信息Modal\r\n const closeFlow=()=>{\r\n setFlowVisible(false)\r\n }\r\n // 查询流转信息确定\r\n const sureFlow =()=>{\r\n setFlowVisible(false)\r\n }\r\n // 查看历史节点表单\r\n const goShowHistoryForm=(taskId)=>{\r\n return ()=>{\r\n props.history.push({\r\n pathname: '/form-render/hisflow',\r\n state:{\r\n taskId: taskId,\r\n userName: userName,\r\n userDepart: userDepart\r\n }\r\n })\r\n }\r\n }\r\n // 操作事件\r\n const handleOperate=(name, evJson, evCode)=>{\r\n return ()=>{\r\n if (!evCode){\r\n message.error(\"无事件编码,请联系管理员!\")\r\n return\r\n }\r\n props.history.push({\r\n pathname: '/form-render/eventoper',\r\n state: {\r\n name: name,\r\n evJson: evJson,\r\n code: evCode,\r\n userId: userId,\r\n loginName: loginName,\r\n userName: userName\r\n }\r\n })\r\n }\r\n }\r\n // 确定删除\r\n const handleSureDel=()=>{\r\n EventOperate(eventName, 0)\r\n .then((res)=>{\r\n if (res.data.statusCode === \"0000\") {\r\n getData()\r\n setIsDelEvent(false)\r\n message.success(\"删除成功\")\r\n }else {\r\n message.error(res.data.errMsg)\r\n }\r\n })\r\n }\r\n // 不删除\r\n const handleCancelDel=()=>{\r\n setIsDelEvent(false)\r\n }\r\n // 删除事件类型\r\n const handleDel=(name)=>{\r\n return ()=>{\r\n setEventName(name)\r\n setIsDelEvent(true)\r\n }\r\n \r\n }\r\n // 配置事件流程\r\n const handleConfig=(name) =>{\r\n return ()=>{\r\n props.history.push({\r\n pathname: '/form-render/eventconfig',\r\n state: {\r\n name: name\r\n }\r\n })\r\n }\r\n }\r\n\r\n // 拉取数据\r\n const getData =async(eventName = '', type = 0)=>{\r\n let result = await GetEventDoingList(eventName, type)\r\n result.data.getMe.forEach((item, index)=>{\r\n item.EventIndex = index + 1\r\n item.key = index\r\n item.ReportTime = moment(item.ReportTime).format(\"YYYY-MM-DD HH:mm:ss\")\r\n })\r\n setData(result.data.getMe)\r\n setTotal(result.data.totalRcdNum)\r\n }\r\n\r\n // 筛选事件类型\r\n const handleChange = (e) => {\r\n setEventType(e)\r\n getData(eventName, eventType)\r\n }\r\n // 登录到Flowable\r\n const LoginToFlowable = (userLoginName)=>{\r\n let obj = reactCookie.loadAll()\r\n if (obj.FLOWABLE_REMEMBER_ME && obj.FLOWABLE_REMEMBER_ME !== 'undefined') {\r\n return\r\n }\r\n const myData = {\r\n _spring_security_remember_me:true,\r\n j_password:\"test\",\r\n j_username: userLoginName,\r\n submit:\"Login\"\r\n }\r\n flowableLogin(myData)\r\n .then((res)=>{\r\n if (res.data.indexOf('FLOWABLE_REMEMBER_ME') < 0) {\r\n message.error(\"流程引擎服务不可用,请联系管理员\")\r\n return\r\n }\r\n let inFifteenMinutes = new Date(new Date().getTime() + 7*24 * 3600 * 1000);//30天\r\n let resArr = res.data.split(';')\r\n let cookieKeyVal = resArr[0]\r\n let cookieArr = cookieKeyVal.split('=')\r\n reactCookie.save(\r\n cookieArr[0],\r\n cookieArr[1],\r\n {\r\n path: '/',\r\n expires: inFifteenMinutes\r\n }\r\n )\r\n })\r\n }\r\n\r\n const computeHeight=()=>{\r\n var height = document.documentElement.clientHeight;\r\n // console.log(height)\r\n setClientHeight(height - 190)\r\n }\r\n\r\n useEffect(()=>{\r\n // 用户ID\r\n let userId = \"\"\r\n let userName = \"\"\r\n let userDepart = \"\"\r\n let loginName = \"\"\r\n let hashData = \"\"\r\n let searchData = \"\"\r\n let search = \"\"\r\n if (window.location.hash) {\r\n hashData = window.location.hash\r\n searchData = hashData.split(\"?\")\r\n search = searchData[1]\r\n } else {\r\n search = window.location.search.slice(1)\r\n }\r\n const searchArr = search.split(\"&\")\r\n // 循环接续值\r\n searchArr.forEach((item)=>{\r\n if (item.indexOf(\"userId\") > -1) {\r\n userId = item.split(\"=\")[1]\r\n setUserId(userId)\r\n } else if (item.indexOf(\"userName\") > -1) {\r\n userName = decodeURI(item.split(\"=\")[1])\r\n setUserName(userName)\r\n } else if (item.indexOf(\"userDepart\") > -1) {\r\n userDepart = decodeURI(item.split(\"=\")[1])\r\n setUserDepart(userDepart)\r\n } else if (item.indexOf(\"loginName\") > -1) {\r\n loginName = item.split(\"=\")[1]\r\n // console.log(loginName, \"loginName\")\r\n setLoginName(loginName)\r\n }\r\n })\r\n computeHeight()\r\n getData()\r\n LoginToFlowable(loginName)\r\n }, [])\r\n\r\n return (\r\n <div className=\"eventList-wrapper\">\r\n <div className=\"form-headerbox\">\r\n <Form layout=\"inline\">\r\n <Form.Item label=\"事件类型\">\r\n <Select defaultValue={0} style={{ width: 200 }} onChange={handleChange}>\r\n <Option value={1}>全部</Option>\r\n <Option value={0}>在办</Option>\r\n {/* <Option value={2}>已办</Option> */}\r\n </Select>\r\n </Form.Item>\r\n <Form.Item label=\"事件名称\">\r\n <Search\r\n className=\"onlistinput\"\r\n placeholder=\"请输入事件名称\"\r\n allowClear\r\n onSearch={onSearch}\r\n style={{width: 200,height:28}}\r\n />\r\n </Form.Item>\r\n </Form>\r\n </div>\r\n <div className=\"header-content-divider\"></div>\r\n {\r\n data.length > 0 ?\r\n <Table className=\"event-ondeal-table\" bordered dataSource={data} pagination={pagination} rowClassName=\"rowClassName\">\r\n <Column title=\"序号\" width={80} dataIndex=\"EventIndex\" key=\"EventIndex\" align=\"center\"/>\r\n <Column title=\"事件名称\" dataIndex=\"EventName\" key=\"EventName\" align=\"center\"/>\r\n <Column title=\"事件编码\" dataIndex=\"EventCode\" key=\"EventCode\" align=\"center\"/>\r\n <Column title=\"事件发起人\" dataIndex=\"ReportMan\" key=\"ReportMan\" align=\"center\"/>\r\n <Column title=\"发起时间\" dataIndex=\"ReportTime\" key=\"ReportTime\" align=\"center\"/>\r\n <Column \r\n title=\"事件状态\" \r\n key=\"EventState\"\r\n align=\"center\"\r\n render={(text, record) => {\r\n return (\r\n record.EventState !== \"已关闭\"?\r\n \"进行中\"\r\n :\r\n record.EventState\r\n )\r\n }}\r\n />\r\n <Column\r\n title=\"操作\"\r\n align=\"center\"\r\n key=\"action\"\r\n width={250}\r\n render={(text, record) => {\r\n return (\r\n record.EventState !== \"已关闭\"?\r\n <Space size=\"middle\">\r\n <Button type=\"primary\" size=\"small\" className=\"table-oper-btn\" onClick={handleOperate(record.EventName, record.EventJson, record.EventCode)}>操作</Button>\r\n <Button type=\"primary\" size=\"small\" className=\"table-oper-btn\" onClick={openShowStartedFlow(record.EventName, record.EventJson, record.EventCode)}>查看已发起流程</Button>\r\n </Space>\r\n :\r\n \"\"\r\n )\r\n }}\r\n />\r\n </Table>\r\n :\r\n <NoData></NoData>\r\n }\r\n \r\n <Modal title=\"已发起流程\" visible={isModalVisible} onOk={handleOk} onCancel={handleCancel} width={1200}>\r\n {\r\n flowData.length > 0 ?\r\n <Table bordered dataSource={flowData} pagination={false} rowClassName=\"rowClassName\">\r\n <Column title=\"序号\" width={80} dataIndex=\"index\" key=\"index\" align=\"center\"/>\r\n <Column title=\"流程名称\" dataIndex=\"FlowName\" key=\"FlowName\" align=\"center\"/>\r\n <Column title=\"流程发起人\" dataIndex=\"Creater\" key=\"ReportMan\" align=\"center\"/>\r\n <Column title=\"流程发起时间\" dataIndex=\"StartTime\" key=\"StartTime\" align=\"center\"/>\r\n <Column title=\"流程结束时间\" dataIndex=\"EndTime\" key=\"EndTime\" align=\"center\"/>\r\n <Column title=\"事件流程编码\" dataIndex=\"ProcCode\" key=\"ProcCode\" align=\"center\"/>\r\n <Column\r\n title=\"操作\"\r\n key=\"action\"\r\n align=\"center\"\r\n render={(text, record) => {\r\n return (\r\n <Space size=\"middle\">\r\n <Button type=\"primary\" size=\"small\" onClick={showModelerImg(record.FlowName, record.ProcInstID, record.ProcCode)}>流程图</Button>\r\n <Button type=\"primary\" size=\"small\" onClick={showTransfer(record.FlowName, record.ProcInstID, record.ProcCode)}>流转信息</Button>\r\n </Space>\r\n )\r\n }}\r\n />\r\n </Table>\r\n :\r\n <NoData></NoData>\r\n }\r\n \r\n </Modal>\r\n <Modal title=\"流程图\" visible={modelerVisible} onCancel={closeModeler} onOk={closeModeler} width={1000}\r\n bodyStyle={{ display: 'flex',justifyContent: 'center',alignItems:'center'}}>\r\n <img src={processImgSrc} alt=\"process\"/>\r\n </Modal>\r\n <Modal title=\"流转信息\" visible={flowVisible} onCancel={closeFlow} onOk={sureFlow} width={900}\r\n bodyStyle={{ display: 'flex',justifyContent: 'center',alignItems:'center'}}>\r\n {\r\n flowTableData.length > 0 ?\r\n <Table bordered dataSource={flowTableData} pagination={false} rowClassName=\"rowClassName\">\r\n <Column title=\"序号\" width={80} dataIndex=\"index\" key=\"index\" align=\"center\"/>\r\n <Column title=\"操作步骤\" dataIndex=\"TaskName\" key=\"TaskName\" align=\"center\"/>\r\n <Column title=\"开始时间\" dataIndex=\"STime\" key=\"STime\" align=\"center\"/>\r\n <Column title=\"结束时间\" dataIndex=\"ETime\" key=\"ETime\" />\r\n <Column title=\"操作人账号\" dataIndex=\"OperationMan\" key=\"OperationMan\" align=\"center\"/>\r\n <Column\r\n title=\"流程状态\"\r\n key=\"state\"\r\n align=\"center\"\r\n render={(text, record) => (\r\n <Space size=\"middle\">\r\n {\r\n record.DeleteReason !== \"\" ?\r\n <span>回退</span>\r\n :\r\n <span style={{color: record.State === '进行中'? '#096dd9' : ''}}>{record.State === \"提交\" ? \"已完成\": record.State}</span>\r\n }\r\n </Space>\r\n )}\r\n />\r\n <Column\r\n title=\"操作\"\r\n key=\"action\"\r\n render={(text, record) => (\r\n <Space size=\"middle\">\r\n {\r\n record.DeleteReason !== \"\" ?\r\n <div>\r\n {record.GoBackReason}\r\n </div>\r\n :\r\n <div>\r\n <Button className=\"localBtnClass\" size=\"small\" type=\"primary\" onClick={goShowHistoryForm(record.TaskID)}>查看</Button>\r\n </div>\r\n }\r\n </Space>\r\n )}\r\n />\r\n </Table>\r\n :\r\n <NoData></NoData>\r\n }\r\n \r\n </Modal>\r\n </div>\r\n )\r\n}\r\n\r\nexport default EventOnDealList\r\n","G:\\react-flowable\\src\\pages\\EventStartForm\\EventStartForm.jsx",["504","505","506","507","508","509","510","511","512","513","514","515"],"// 事件发起页面\r\nimport React, { useState, useEffect, useRef } from 'react';\r\nimport FormRender from 'form-render/lib/antd';\r\nimport { Button, message } from 'antd';\r\nimport FormTransfer from '../../libs/transform/transform'\r\nimport FormDataValid from '../../libs/FormDataValid/FormDataValid'\r\nimport EventSchema from '../../libs/eventSchema/eventSchema'\r\nimport ConfigSchemaClass from '../../libs/configSchema/configSchema'\r\nimport { GetStartForm, WorkflowStart, getTableName, GetEvent, CreateEvent } from '../../apis/process'\r\nimport \"./EventStartForm.less\"\r\nimport FormRenderWidgets from '../../libs/FormRenderWidgets/FormRenderWidgets'\r\n\r\n\r\nconst StartForm = (props) => {\r\n // FormRender的formData\r\n const [formData, setFormData] = useState({})\r\n // FormRender的 schema\r\n const [schema, setSchema] = useState({})\r\n // 表单的key\r\n const [FormKey, setFormKey] = useState('')\r\n // 表单的id\r\n const [formId, setFormId] = useState('')\r\n // formRender 校验 数组\r\n const [valid, setValid] = useState([])\r\n // schema的配置文件,需要每次传递保存\r\n const [configSchema, setConfigSchema] = useState('')\r\n // form render 的ref\r\n const formRef = useRef();\r\n // 当前事件表得表名称\r\n const [tableName, setTableName] = useState('')\r\n // EventCode当前事件得事件编号\r\n const [eventCode, setEventCode] = useState('')\r\n\r\n // 校验提交表单\r\n const onValidate=(valid)=>{\r\n setValid(valid)\r\n }\r\n\r\n // 拉取事件表单\r\n const getStartData = ()=>{\r\n GetEvent(props.location.state.name)\r\n .then((res)=>{\r\n let response = res.data.getMe[0]\r\n setTableName(response.EventTable)\r\n setEventCode(response.EventCode)\r\n setSchema({...JSON.parse(response.EventJson),column: 3,labelWidth: 120})\r\n })\r\n }\r\n\r\n const handleFormRenderBaseType = (formData, configSchema)=>{\r\n let arr = []\r\n const { properties } = JSON.parse(configSchema).schema\r\n for (const key in properties) {\r\n for(const fkey in formData) {\r\n if (key === fkey) {\r\n for(const ckey in properties[key].properties){\r\n for(const cfkey in formData[fkey]) {\r\n if (ckey === cfkey) {\r\n arr.push({\r\n Type: properties[key].properties[ckey].type,\r\n Name: properties[key].properties[ckey].title,\r\n Value: formData[fkey][cfkey]\r\n })\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return arr;\r\n }\r\n\r\n useEffect(()=>{\r\n getStartData()\r\n },[])\r\n\r\n // 提交\r\n const handleSubmit = () => {\r\n if (valid.length > 0) {\r\n const validData = new FormDataValid(valid, configSchema)\r\n message.error(validData.validMsg)\r\n return\r\n }\r\n // 事件名称\r\n let evName = props.location.state.name\r\n // 当前用户名称\r\n let userName = props.location.state.userName || '王万里'\r\n \r\n let BaseTypeList = handleFormRenderBaseType(formData, JSON.stringify(schema));\r\n\r\n let evSchema = new EventSchema(JSON.stringify(schema), BaseTypeList)\r\n\r\n CreateEvent(evName, tableName, JSON.stringify(evSchema.schema), '', userName, BaseTypeList)\r\n .then((res)=>{\r\n if (res.data.statusCode === \"0000\") {\r\n message.success(\"事件发起成功\")\r\n } else {\r\n message.error(res.data.errMsg)\r\n }\r\n })\r\n };\r\n // 重置按钮\r\n const handleClick = () => {\r\n formRef.current.resetData({}).then(res => {\r\n alert(JSON.stringify(res, null, 2));\r\n });\r\n };\r\n // 返回\r\n const handleGoBack=()=>{\r\n props.history.push({\r\n pathname: '/form-render/eventstart',\r\n state:{\r\n loginName: props.location.state.loginName,\r\n }\r\n })\r\n }\r\n\r\n return (\r\n <div className=\"startwrap\">\r\n <div className=\"form-info-box\">\r\n <div className=\"form-info-before\"></div>\r\n <div>{props.location.state.name}</div>\r\n </div>\r\n <div className=\"header-content-divider\"></div>\r\n {/* <FormRender\r\n ref={formRef}\r\n {...schema}\r\n formData={formData}\r\n onChange={setFormData}\r\n onValidate={onValidate}\r\n showValidate={false}\r\n widgets={{ staff: StaffSelectWidget, cascader: TreeCascader, search: SearchSelect, TableAccount: TableAccount, file:UploadFile, \r\n editSearch: EditbleSelct, mapSelect: AMapContainer,cityPicker: cityPicker,multiSelect: multiSelect, \r\n DateTimePicker:DateTimePicker, CodeGenerator:CodeGenerator }}\r\n /> */}\r\n <FormRender\r\n ref={formRef}\r\n {...schema}\r\n formData={formData}\r\n onChange={setFormData}\r\n onValidate={onValidate}\r\n showValidate={false}\r\n widgets={FormRenderWidgets}\r\n />\r\n <div className=\"btngroups\">\r\n <Button type=\"primary\" style={{ marginLeft: 30 }} className=\"table-oper-btn\" onClick={handleSubmit}>发起</Button>\r\n <Button style={{ marginLeft: 30 }} className=\"table-oper-btn\" onClick={handleClick}>重置</Button>\r\n <Button style={{ marginLeft: 30 }} className=\"table-oper-btn\" onClick={handleGoBack}>返回</Button>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default StartForm;","G:\\react-flowable\\src\\pages\\EventStartPage\\EventStartPage.jsx",["516","517","518","519"],"// 流程发起权限页面\r\nimport React from 'react';\r\nimport { Button, Input, Form, Row, Col, message, Divider } from 'antd';\r\nimport { GetEventList, flowableLogin } from '../../apis/process';\r\nimport './EventStartPage.less';\r\nimport reactCookie from 'react-cookies'\r\nimport flowIcon from \"../../assets/flow-icon.png\"\r\nimport { FileDoneOutlined } from '@ant-design/icons';\r\nimport flowArrowIcon from \"../../assets/flow-arrow-right.png\"\r\nimport NoDataImg from '../../assets/nodata.png'\r\nimport NoData from '../../components/NoData/NoData'\r\nconst { Search } = Input\r\nclass EventStartPage extends React.Component {\r\n state={\r\n userName: '', // web4登录的用户名\r\n loginName: '', // 登录名\r\n flowName: '', // 流程名称\r\n flowArr: [], // isRight为1的流程数组 \r\n defaultVal: [], // 默认值\r\n keyList: [], // 选中的数组\r\n userId: '', // web4登录的用户ID\r\n userDepart: '' // web4登录的用户所在部门\r\n }\r\n // 处理监听选中的值\r\n onChange=(val)=>{\r\n this.setState({\r\n keyList: val\r\n })\r\n }\r\n // 获取输入框输入的值\r\n getInput=(e)=>{\r\n this.setState({\r\n flowName: e.target.value\r\n })\r\n }\r\n // 登录到Flowable\r\n LoginToFlowable = ()=>{\r\n let obj = reactCookie.loadAll()\r\n if (obj.FLOWABLE_REMEMBER_ME && obj.FLOWABLE_REMEMBER_ME !== 'undefined') {\r\n return\r\n }\r\n const myData = {\r\n _spring_security_remember_me:true,\r\n j_password:\"test\",\r\n j_username: this.state.loginName || this.props.location.state.loginName,\r\n submit:\"Login\"\r\n }\r\n flowableLogin(myData)\r\n .then((res)=>{\r\n if (res.data.indexOf('FLOWABLE_REMEMBER_ME') < 0) {\r\n message.error(\"流程引擎服务不可用,请联系管理员\")\r\n return\r\n }\r\n let resArr = res.data.split(';')\r\n let cookieKeyVal = resArr[0]\r\n let cookieArr = cookieKeyVal.split('=')\r\n reactCookie.save(\r\n cookieArr[0],\r\n cookieArr[1],\r\n { \r\n path: '/',\r\n expires: new Date(new Date().getTime() + 7*24 * 3600 * 1000)\r\n }\r\n )\r\n })\r\n }\r\n // 拉取数据\r\n getData=(name = \"\")=>{\r\n GetEventList(name)\r\n .then((res)=>{\r\n this.setState({\r\n flowArr: res.data.getMe\r\n })\r\n })\r\n }\r\n // 处理从web4的路由传递过来的参数\r\n handleRouteParams=()=>{\r\n // 用户ID\r\n let userId = \"\"\r\n // 用户名\r\n let userName = \"\"\r\n // 用户部门\r\n let userDepart = \"\"\r\n let loginName= \"\"\r\n // 路由的search\r\n let hashData = \"\"\r\n let searchData = \"\"\r\n let search = \"\"\r\n if (window.location.hash) {\r\n hashData = window.location.hash\r\n searchData = hashData.split(\"?\")\r\n search = searchData[1]\r\n } else {\r\n search = window.location.search.slice(1)\r\n }\r\n const searchArr = search.split(\"&\")\r\n // 循环接续值\r\n // ?userId=${userId}&loginName=${loginName}&userName=${userName}\" \r\n searchArr.forEach((item)=>{\r\n if (item.indexOf(\"userId\") > -1) {\r\n userId = item.split(\"=\")[1]\r\n } else if (item.indexOf(\"userName\") > -1) {\r\n userName = decodeURI(item.split(\"=\")[1])\r\n } else if (item.indexOf(\"userDepart\") > -1) {\r\n userDepart = decodeURI(item.split(\"=\")[1])\r\n } else if (item.indexOf(\"loginName\") > -1) {\r\n loginName = item.split(\"=\")[1]\r\n }\r\n })\r\n this.setState({\r\n userId: userId,\r\n userName: userName,\r\n userDepart: userDepart,\r\n loginName: loginName\r\n },()=>{\r\n this.getData()\r\n this.LoginToFlowable()\r\n })\r\n }\r\n // 点击发起\r\n handleStart=(name)=>{\r\n return ()=>{\r\n this.props.history.push({\r\n pathname: '/form-render/eventform',\r\n state:{\r\n name: name,\r\n userName: this.state.userName,\r\n userId: this.state.userId,\r\n loginName: this.state.loginName\r\n }\r\n })\r\n }\r\n }\r\n componentDidMount(){\r\n this.handleRouteParams()\r\n }\r\n render(){\r\n return (\r\n <div className=\"EventStartPage-wrapper\">\r\n <div className=\"form-headerbox\">\r\n <Form layout=\"inline\">\r\n <Form.Item label=\"事件名称\">\r\n <Search\r\n className=\"onlistinput\"\r\n placeholder=\"请输入事件名称\"\r\n allowClear\r\n onSearch={this.getData}\r\n style={{width: 200}}\r\n />\r\n </Form.Item>\r\n </Form>\r\n </div>\r\n <div className=\"header-content-divider\"></div>\r\n {\r\n this.state.flowArr.length > 0?\r\n <div className=\"contentbox\">\r\n <Row gutter={[20, 10]}>\r\n {\r\n this.state.flowArr.map((item,index)=>{\r\n return(\r\n <Col span={6} key={index}>\r\n <div className=\"card-wrapper\" onClick={this.handleStart(item.EventName)}>\r\n <div className=\"left-card\">\r\n <FileDoneOutlined className=\"fileiconstyle\"/>\r\n <span>{item.EventName}</span>\r\n </div>\r\n <div className=\"arrow-class\">\r\n <img src={flowArrowIcon} alt=\"\"/>\r\n </div>\r\n </div>\r\n </Col>\r\n )\r\n })\r\n }\r\n </Row>\r\n </div>\r\n :\r\n <NoData></NoData>\r\n }\r\n </div>\r\n )\r\n }\r\n \r\n}\r\n\r\nexport default EventStartPage\r\n","G:\\react-flowable\\src\\pages\\EventPermissionConfig\\EventPermissionConfig.jsx",["520"],"// 给事件配置流程\r\nimport React from 'react'\r\nimport { Button, Input, Form, Row, Col, Checkbox, message, Modal, Radio } from 'antd';\r\nimport { GetWorkflowBaseInfo, SaveEventConfig, GetEventList } from '../../apis/process';\r\nimport StaffSelect from '../../components/StaffSelect/StaffSelect';\r\nimport { ToolFilled } from '@ant-design/icons';\r\n\r\n\r\nclass EventConfig extends React.Component {\r\n state={\r\n eventName: '',\r\n userName: '',// 用户名\r\n flowName: '',// 流程名称\r\n flowArr: [],// 流程数组\r\n defaultVal: [],// 默认值\r\n keyList: [], // 流程key数组\r\n visible: false, // Modal\r\n EndType: \"0\", // 流程结束标志\r\n curFlowId: '',\r\n }\r\n // 与StaffSelect子组件绑定事件传值交互\r\n handleStaff=async (val)=>{\r\n this.setState({\r\n userName: val\r\n })\r\n }\r\n // 获取点击选中的checkbox值\r\n onChange=(event)=>{\r\n const value = event.target.value;\r\n let updateData = []\r\n this.state.flowArr.forEach((item)=>{\r\n if (item.value === value) {\r\n item.checked = !item.checked\r\n }\r\n updateData.push(item)\r\n })\r\n this.setState({\r\n flowArr: updateData\r\n })\r\n }\r\n // 获取输入框的值\r\n getInput=(e)=>{\r\n this.setState({\r\n flowName: e.target.value\r\n })\r\n }\r\n // 拉取数据\r\n getData=()=>{\r\n // console.log(this.props.location.state.name)\r\n let arr =[]\r\n GetEventList('')\r\n .then((res)=>{\r\n // 处理获取AccessRight为1的,有权限的值\r\n res.data.getMe.forEach((item)=>{\r\n arr.push({\r\n label: item.EventName,\r\n value: item.EventName,\r\n id: item.ID,\r\n EndType: \"0\"\r\n })\r\n })\r\n this.setState({\r\n flowArr: arr\r\n })\r\n })\r\n }\r\n // 打开Modal\r\n openModal=(id)=>{\r\n return ()=> {\r\n this.setState({\r\n visible: true,\r\n curFlowId: id\r\n })\r\n }\r\n }\r\n // 关闭Modal\r\n closeModal=()=>{\r\n this.setState({\r\n visible: false,\r\n })\r\n }\r\n // 把流程挂接到某人身上,分配流程发起的权限\r\n linkToEvent=()=>{\r\n let keyList = []\r\n this.state.flowArr.forEach((item)=>{\r\n if (item.checked) {\r\n keyList.push({\r\n EventName: this.state.eventName,\r\n FlowName: item.value,\r\n EndType: item.EndType\r\n })\r\n }\r\n })\r\n SaveEventConfig(this.state.eventName, keyList)\r\n .then((res)=>{\r\n if (res.data.statusCode === \"0000\") {\r\n message.success(\"挂接成功\")\r\n } else {\r\n message.error(res.data.errMsg)\r\n }\r\n })\r\n }\r\n // 保存流程结束之后的事件\r\n saveEndType=()=>{\r\n // console.log(this.state.flowArr)\r\n // console.log(this.state.EndType)\r\n let arr = []\r\n this.state.flowArr.forEach((item)=>{\r\n if (item.id === this.state.curFlowId) {\r\n arr.push({\r\n label: item.label,\r\n value: item.value,\r\n id: item.id,\r\n EndType: this.state.EndType\r\n })\r\n } else {\r\n arr.push(item)\r\n }\r\n })\r\n this.setState({\r\n flowArr: arr,\r\n visible: false\r\n })\r\n }\r\n // \r\n handleChangeSelect=(e)=>{\r\n this.setState({\r\n EndType: e.target.value\r\n });\r\n }\r\n // 处理web4路由传递过来的值\r\n handleRouteParams=()=>{\r\n let hashData = \"\"\r\n let searchData = \"\"\r\n let search = \"\"\r\n if (window.location.hash) {\r\n hashData = window.location.hash\r\n searchData = hashData.split(\"?\")\r\n search = searchData[1]\r\n } else {\r\n search = window.location.search.slice(1)\r\n }\r\n // console.log(search)\r\n const searchArr = search.split(\"=\")\r\n // console.log(searchArr)\r\n this.setState({\r\n userName:decodeURI(searchArr[1])\r\n },()=>{\r\n // console.log(this.state.userName)\r\n this.getData()\r\n })\r\n }\r\n // 前一个版本配置字段的默认值以及属性,此版本废弃\r\n routeGo=(id, label)=>{\r\n return ()=>{\r\n this.props.history.push({\r\n pathname: '/form-render/setform',\r\n state:{\r\n id: id,\r\n label: label\r\n }\r\n })\r\n }\r\n }\r\n componentDidMount(){\r\n // this.handleRouteParams()\r\n this.getData()\r\n }\r\n render(){\r\n const radioStyle = {\r\n display: 'block',\r\n height: '30px',\r\n lineHeight: '30px',\r\n };\r\n return (\r\n <div className=\"EventConfig-wrapper\">\r\n <div className=\"EventConfigform-headerbox\">\r\n <Form layout=\"inline\">\r\n <Form.Item label=\"人员选择\">\r\n <StaffSelect handleStaff={this.handleStaff}></StaffSelect>\r\n </Form.Item>\r\n <Form.Item label=\"流程名称\">\r\n <Input type=\"text\" placeholder=\"请输入流程名称\" className=\"input-text-content\" allowClear onChange={this.getInput}></Input>\r\n </Form.Item>\r\n <Form.Item>\r\n <Button className=\"localBtnClass\" size=\"small\" type=\"primary\" onClick={this.getData}>查询</Button>\r\n </Form.Item>\r\n <Form.Item>\r\n <Button className=\"localBtnClass\" size=\"small\" type=\"primary\" onClick={this.linkToEvent}>挂接</Button>\r\n </Form.Item>\r\n </Form>\r\n </div>\r\n <div className=\"permission-contentbox\" style={{overflow: 'hidden'}}>\r\n <Row gutter={[20, 10]}>\r\n {\r\n this.state.flowArr.map((item,index)=>{\r\n return(\r\n <Col span={6} key={index}>\r\n <Checkbox value={item.value} checked={item.checked} onChange={this.onChange} className=\"lableclass\">{item.label}</Checkbox>\r\n <ToolFilled title=\"点击配置流程结束之后配置\" className=\"set-form-class\" onClick={this.openModal(item.id)}/>\r\n </Col>\r\n )\r\n })\r\n }\r\n </Row>\r\n </div>\r\n <Modal title=\"流程结束之后\" visible={this.state.visible} onOk={this.saveEndType} onCancel={this.closeModal}>\r\n <Radio.Group onChange={this.handleChangeSelect} value={this.state.EndType}>\r\n <Radio style={radioStyle} value=\"0\">\r\n 不做任何事情\r\n </Radio>\r\n <Radio style={radioStyle} value=\"1\">\r\n 直接关闭事件\r\n </Radio>\r\n <Radio style={radioStyle} value=\"2\">\r\n 事件转为待审核\r\n </Radio>\r\n <Radio style={radioStyle} value=\"3\">\r\n 重新处理事件\r\n </Radio>\r\n </Radio.Group>\r\n </Modal>\r\n </div>\r\n )\r\n }\r\n}\r\n\r\nexport default EventConfig\r\n","G:\\react-flowable\\src\\pages\\EventShow\\EventShow.jsx",["521","522","523"],"// 展示表单类型\r\nimport React, { useState, useEffect, useRef } from 'react';\r\nimport FormRender from 'form-render/lib/antd';\r\nimport { Button } from 'antd';\r\nimport './EventShow.less'\r\nimport { GetFormJson, GetEvent } from '../../apis/process'\r\nimport FormRenderWidgets from '../../libs/FormRenderWidgets/FormRenderWidgets'\r\n\r\n\r\nconst ShowForm = (props) => {\r\n // FormRender的formData\r\n const [formData, setFormData] = useState({});\r\n // FormRender的schema\r\n const [schema, setSchema] = useState({})\r\n // FormRender的表单提交校验\r\n const [valid, setValid] = useState([])\r\n // FormRender的组件ref\r\n const formRef = useRef();\r\n\r\n // 拉取数据\r\n const getData =async()=>{\r\n const name = props.location.state.name\r\n let result = await GetEvent(name)\r\n // console.log(result.data.getMe[0].EventJson)\r\n let schema = {...JSON.parse(result.data.getMe[0].EventJson),column: 3,labelWidth: 120}\r\n setSchema(schema)\r\n }\r\n \r\n useEffect(()=>{\r\n getData()\r\n },[])\r\n\r\n // 返回列表\r\n const handleClickReback = ()=>{\r\n props.history.push({\r\n pathname: '/form-render/eventlist',\r\n state:{\r\n searchName: props.location.state.searchName\r\n }\r\n })\r\n }\r\n\r\n // 提交校验\r\n const onValidate=(valid)=>{\r\n setValid(valid)\r\n }\r\n\r\n return (\r\n <div className=\"eventshow-wrapper\">\r\n <div className=\"form-info-box\">\r\n <div className=\"form-info-before\"></div>\r\n <div>{props.location.state.name}</div>\r\n </div>\r\n <div className=\"header-content-divider\"></div>\r\n {/* <FormRender\r\n ref={formRef}\r\n {...schema}\r\n formData={formData}\r\n onChange={setFormData}\r\n onValidate={onValidate}\r\n showValidate={false}\r\n widgets={{ staff: StaffSelectWidget, cascader: TreeCascader, search: SearchSelect, TableAccount: TableAccount, file:UploadFile, \r\n editSearch: EditbleSelct, mapSelect: AMapContainer,cityPicker: cityPicker, multiSelect: multiSelect, \r\n DateTimePicker:DateTimePicker,CodeGenerator:CodeGenerator\r\n }}\r\n /> */}\r\n <FormRender\r\n ref={formRef}\r\n {...schema}\r\n formData={formData}\r\n onChange={setFormData}\r\n onValidate={onValidate}\r\n showValidate={false}\r\n widgets={FormRenderWidgets}\r\n />\r\n <div className=\"btngroups\">\r\n <Button type=\"primary\" className=\"table-oper-btn\" style={{ marginLeft: 30 }} onClick={handleClickReback}>\r\n 返回列表\r\n </Button>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default ShowForm;","G:\\react-flowable\\src\\pages\\EventConfig\\EventConfig.jsx",[],"G:\\react-flowable\\src\\pages\\NewEventForm\\NewEventForm.jsx",[],"G:\\react-flowable\\src\\libs\\eventSchema\\eventSchema.js",[],{"ruleId":"524","severity":1,"message":"525","line":9,"column":25,"nodeType":"526","messageId":"527","endLine":9,"endColumn":35},{"ruleId":"528","replacedBy":"529"},{"ruleId":"530","replacedBy":"531"},{"ruleId":"524","severity":1,"message":"532","line":2,"column":17,"nodeType":"526","messageId":"527","endLine":2,"endColumn":25},{"ruleId":"524","severity":1,"message":"533","line":16,"column":12,"nodeType":"526","messageId":"527","endLine":16,"endColumn":17},{"ruleId":"534","severity":1,"message":"535","line":35,"column":7,"nodeType":"536","endLine":35,"endColumn":9,"suggestions":"537"},{"ruleId":"524","severity":1,"message":"538","line":11,"column":23,"nodeType":"526","messageId":"527","endLine":11,"endColumn":35},{"ruleId":"534","severity":1,"message":"535","line":34,"column":8,"nodeType":"536","endLine":34,"endColumn":10,"suggestions":"539"},{"ruleId":"540","severity":1,"message":"541","line":39,"column":66,"nodeType":"542","messageId":"543","endLine":39,"endColumn":67},{"ruleId":"540","severity":1,"message":"541","line":40,"column":63,"nodeType":"542","messageId":"543","endLine":40,"endColumn":64},{"ruleId":"524","severity":1,"message":"544","line":88,"column":12,"nodeType":"526","messageId":"527","endLine":88,"endColumn":22},{"ruleId":"524","severity":1,"message":"545","line":88,"column":24,"nodeType":"526","messageId":"527","endLine":88,"endColumn":37},{"ruleId":"524","severity":1,"message":"546","line":92,"column":22,"nodeType":"526","messageId":"527","endLine":92,"endColumn":33},{"ruleId":"524","severity":1,"message":"547","line":96,"column":12,"nodeType":"526","messageId":"527","endLine":96,"endColumn":20},{"ruleId":"524","severity":1,"message":"548","line":268,"column":11,"nodeType":"526","messageId":"527","endLine":268,"endColumn":22},{"ruleId":"524","severity":1,"message":"549","line":274,"column":11,"nodeType":"526","messageId":"527","endLine":274,"endColumn":28},{"ruleId":"524","severity":1,"message":"550","line":300,"column":11,"nodeType":"526","messageId":"527","endLine":300,"endColumn":28},{"ruleId":"551","severity":1,"message":"552","line":495,"column":33,"nodeType":"553","messageId":"554","endLine":495,"endColumn":35},{"ruleId":"551","severity":1,"message":"552","line":501,"column":44,"nodeType":"553","messageId":"554","endLine":501,"endColumn":46},{"ruleId":"555","severity":1,"message":"556","line":628,"column":36,"nodeType":"542","messageId":"557","endLine":628,"endColumn":38},{"ruleId":"555","severity":1,"message":"556","line":629,"column":36,"nodeType":"542","messageId":"557","endLine":629,"endColumn":38},{"ruleId":"534","severity":1,"message":"535","line":762,"column":8,"nodeType":"536","endLine":762,"endColumn":10,"suggestions":"558"},{"ruleId":"559","severity":1,"message":"560","line":962,"column":41,"nodeType":"561","messageId":"562","endLine":962,"endColumn":79,"fix":"563"},{"ruleId":"534","severity":1,"message":"535","line":122,"column":7,"nodeType":"536","endLine":122,"endColumn":9,"suggestions":"564"},{"ruleId":"524","severity":1,"message":"565","line":198,"column":13,"nodeType":"526","messageId":"527","endLine":198,"endColumn":22},{"ruleId":"551","severity":1,"message":"552","line":392,"column":33,"nodeType":"553","messageId":"554","endLine":392,"endColumn":35},{"ruleId":"551","severity":1,"message":"552","line":398,"column":44,"nodeType":"553","messageId":"554","endLine":398,"endColumn":46},{"ruleId":"524","severity":1,"message":"533","line":14,"column":12,"nodeType":"526","messageId":"527","endLine":14,"endColumn":17},{"ruleId":"524","severity":1,"message":"566","line":16,"column":12,"nodeType":"526","messageId":"527","endLine":16,"endColumn":19},{"ruleId":"524","severity":1,"message":"567","line":16,"column":21,"nodeType":"526","messageId":"527","endLine":16,"endColumn":31},{"ruleId":"524","severity":1,"message":"568","line":22,"column":12,"nodeType":"526","messageId":"527","endLine":22,"endColumn":18},{"ruleId":"524","severity":1,"message":"569","line":26,"column":12,"nodeType":"526","messageId":"527","endLine":26,"endColumn":31},{"ruleId":"524","severity":1,"message":"570","line":26,"column":33,"nodeType":"526","messageId":"527","endLine":26,"endColumn":55},{"ruleId":"524","severity":1,"message":"571","line":28,"column":12,"nodeType":"526","messageId":"527","endLine":28,"endColumn":18},{"ruleId":"524","severity":1,"message":"572","line":28,"column":20,"nodeType":"526","messageId":"527","endLine":28,"endColumn":29},{"ruleId":"524","severity":1,"message":"573","line":30,"column":12,"nodeType":"526","messageId":"527","endLine":30,"endColumn":18},{"ruleId":"524","severity":1,"message":"574","line":30,"column":20,"nodeType":"526","messageId":"527","endLine":30,"endColumn":29},{"ruleId":"524","severity":1,"message":"575","line":32,"column":12,"nodeType":"526","messageId":"527","endLine":32,"endColumn":19},{"ruleId":"524","severity":1,"message":"576","line":32,"column":21,"nodeType":"526","messageId":"527","endLine":32,"endColumn":31},{"ruleId":"524","severity":1,"message":"577","line":34,"column":12,"nodeType":"526","messageId":"527","endLine":34,"endColumn":29},{"ruleId":"524","severity":1,"message":"578","line":34,"column":31,"nodeType":"526","messageId":"527","endLine":34,"endColumn":51},{"ruleId":"524","severity":1,"message":"579","line":36,"column":12,"nodeType":"526","messageId":"527","endLine":36,"endColumn":26},{"ruleId":"524","severity":1,"message":"580","line":36,"column":28,"nodeType":"526","messageId":"527","endLine":36,"endColumn":45},{"ruleId":"524","severity":1,"message":"581","line":38,"column":12,"nodeType":"526","messageId":"527","endLine":38,"endColumn":25},{"ruleId":"524","severity":1,"message":"582","line":38,"column":27,"nodeType":"526","messageId":"527","endLine":38,"endColumn":43},{"ruleId":"524","severity":1,"message":"583","line":40,"column":12,"nodeType":"526","messageId":"527","endLine":40,"endColumn":25},{"ruleId":"524","severity":1,"message":"584","line":40,"column":27,"nodeType":"526","messageId":"527","endLine":40,"endColumn":43},{"ruleId":"524","severity":1,"message":"585","line":42,"column":12,"nodeType":"526","messageId":"527","endLine":42,"endColumn":22},{"ruleId":"524","severity":1,"message":"586","line":42,"column":24,"nodeType":"526","messageId":"527","endLine":42,"endColumn":37},{"ruleId":"524","severity":1,"message":"587","line":44,"column":12,"nodeType":"526","messageId":"527","endLine":44,"endColumn":23},{"ruleId":"524","severity":1,"message":"588","line":44,"column":25,"nodeType":"526","messageId":"527","endLine":44,"endColumn":39},{"ruleId":"524","severity":1,"message":"589","line":46,"column":12,"nodeType":"526","messageId":"527","endLine":46,"endColumn":20},{"ruleId":"524","severity":1,"message":"590","line":46,"column":22,"nodeType":"526","messageId":"527","endLine":46,"endColumn":33},{"ruleId":"524","severity":1,"message":"591","line":48,"column":12,"nodeType":"526","messageId":"527","endLine":48,"endColumn":22},{"ruleId":"524","severity":1,"message":"592","line":48,"column":24,"nodeType":"526","messageId":"527","endLine":48,"endColumn":37},{"ruleId":"524","severity":1,"message":"593","line":50,"column":12,"nodeType":"526","messageId":"527","endLine":50,"endColumn":25},{"ruleId":"524","severity":1,"message":"594","line":50,"column":27,"nodeType":"526","messageId":"527","endLine":50,"endColumn":43},{"ruleId":"524","severity":1,"message":"595","line":62,"column":12,"nodeType":"526","messageId":"527","endLine":62,"endColumn":21},{"ruleId":"524","severity":1,"message":"596","line":62,"column":23,"nodeType":"526","messageId":"527","endLine":62,"endColumn":35},{"ruleId":"524","severity":1,"message":"597","line":64,"column":12,"nodeType":"526","messageId":"527","endLine":64,"endColumn":27},{"ruleId":"524","severity":1,"message":"598","line":64,"column":29,"nodeType":"526","messageId":"527","endLine":64,"endColumn":47},{"ruleId":"524","severity":1,"message":"599","line":66,"column":12,"nodeType":"526","messageId":"527","endLine":66,"endColumn":27},{"ruleId":"524","severity":1,"message":"600","line":66,"column":29,"nodeType":"526","messageId":"527","endLine":66,"endColumn":47},{"ruleId":"524","severity":1,"message":"601","line":68,"column":12,"nodeType":"526","messageId":"527","endLine":68,"endColumn":25},{"ruleId":"524","severity":1,"message":"602","line":68,"column":27,"nodeType":"526","messageId":"527","endLine":68,"endColumn":43},{"ruleId":"524","severity":1,"message":"603","line":70,"column":12,"nodeType":"526","messageId":"527","endLine":70,"endColumn":23},{"ruleId":"524","severity":1,"message":"604","line":70,"column":25,"nodeType":"526","messageId":"527","endLine":70,"endColumn":39},{"ruleId":"524","severity":1,"message":"605","line":72,"column":12,"nodeType":"526","messageId":"527","endLine":72,"endColumn":23},{"ruleId":"524","severity":1,"message":"606","line":72,"column":25,"nodeType":"526","messageId":"527","endLine":72,"endColumn":39},{"ruleId":"524","severity":1,"message":"607","line":74,"column":12,"nodeType":"526","messageId":"527","endLine":74,"endColumn":25},{"ruleId":"524","severity":1,"message":"608","line":74,"column":27,"nodeType":"526","messageId":"527","endLine":74,"endColumn":43},{"ruleId":"524","severity":1,"message":"609","line":76,"column":12,"nodeType":"526","messageId":"527","endLine":76,"endColumn":26},{"ruleId":"524","severity":1,"message":"610","line":76,"column":28,"nodeType":"526","messageId":"527","endLine":76,"endColumn":45},{"ruleId":"524","severity":1,"message":"611","line":78,"column":12,"nodeType":"526","messageId":"527","endLine":78,"endColumn":22},{"ruleId":"524","severity":1,"message":"612","line":78,"column":24,"nodeType":"526","messageId":"527","endLine":78,"endColumn":37},{"ruleId":"524","severity":1,"message":"544","line":80,"column":12,"nodeType":"526","messageId":"527","endLine":80,"endColumn":22},{"ruleId":"524","severity":1,"message":"545","line":80,"column":24,"nodeType":"526","messageId":"527","endLine":80,"endColumn":37},{"ruleId":"524","severity":1,"message":"613","line":82,"column":12,"nodeType":"526","messageId":"527","endLine":82,"endColumn":24},{"ruleId":"524","severity":1,"message":"614","line":82,"column":26,"nodeType":"526","messageId":"527","endLine":82,"endColumn":41},{"ruleId":"524","severity":1,"message":"615","line":84,"column":12,"nodeType":"526","messageId":"527","endLine":84,"endColumn":20},{"ruleId":"524","severity":1,"message":"546","line":84,"column":22,"nodeType":"526","messageId":"527","endLine":84,"endColumn":33},{"ruleId":"524","severity":1,"message":"616","line":86,"column":12,"nodeType":"526","messageId":"527","endLine":86,"endColumn":24},{"ruleId":"524","severity":1,"message":"617","line":88,"column":12,"nodeType":"526","messageId":"527","endLine":88,"endColumn":28},{"ruleId":"524","severity":1,"message":"618","line":88,"column":30,"nodeType":"526","messageId":"527","endLine":88,"endColumn":49},{"ruleId":"524","severity":1,"message":"547","line":90,"column":12,"nodeType":"526","messageId":"527","endLine":90,"endColumn":20},{"ruleId":"524","severity":1,"message":"619","line":96,"column":11,"nodeType":"526","messageId":"527","endLine":96,"endColumn":18},{"ruleId":"524","severity":1,"message":"620","line":98,"column":11,"nodeType":"526","messageId":"527","endLine":98,"endColumn":20},{"ruleId":"524","severity":1,"message":"566","line":127,"column":15,"nodeType":"526","messageId":"527","endLine":127,"endColumn":22},{"ruleId":"534","severity":1,"message":"535","line":190,"column":8,"nodeType":"536","endLine":190,"endColumn":10,"suggestions":"621"},{"ruleId":"524","severity":1,"message":"622","line":3,"column":10,"nodeType":"526","messageId":"527","endLine":3,"endColumn":16},{"ruleId":"524","severity":1,"message":"623","line":12,"column":12,"nodeType":"526","messageId":"527","endLine":12,"endColumn":18},{"ruleId":"524","severity":1,"message":"624","line":32,"column":11,"nodeType":"526","messageId":"527","endLine":32,"endColumn":19},{"ruleId":"534","severity":1,"message":"625","line":162,"column":8,"nodeType":"536","endLine":162,"endColumn":10,"suggestions":"626"},{"ruleId":"524","severity":1,"message":"627","line":13,"column":9,"nodeType":"526","messageId":"527","endLine":13,"endColumn":15},{"ruleId":"524","severity":1,"message":"533","line":18,"column":12,"nodeType":"526","messageId":"527","endLine":18,"endColumn":17},{"ruleId":"524","severity":1,"message":"568","line":26,"column":12,"nodeType":"526","messageId":"527","endLine":26,"endColumn":18},{"ruleId":"524","severity":1,"message":"571","line":32,"column":12,"nodeType":"526","messageId":"527","endLine":32,"endColumn":18},{"ruleId":"524","severity":1,"message":"573","line":34,"column":12,"nodeType":"526","messageId":"527","endLine":34,"endColumn":18},{"ruleId":"524","severity":1,"message":"575","line":36,"column":12,"nodeType":"526","messageId":"527","endLine":36,"endColumn":19},{"ruleId":"524","severity":1,"message":"576","line":36,"column":21,"nodeType":"526","messageId":"527","endLine":36,"endColumn":31},{"ruleId":"524","severity":1,"message":"577","line":38,"column":12,"nodeType":"526","messageId":"527","endLine":38,"endColumn":29},{"ruleId":"524","severity":1,"message":"578","line":38,"column":31,"nodeType":"526","messageId":"527","endLine":38,"endColumn":51},{"ruleId":"524","severity":1,"message":"581","line":42,"column":12,"nodeType":"526","messageId":"527","endLine":42,"endColumn":25},{"ruleId":"524","severity":1,"message":"582","line":42,"column":27,"nodeType":"526","messageId":"527","endLine":42,"endColumn":43},{"ruleId":"524","severity":1,"message":"583","line":44,"column":12,"nodeType":"526","messageId":"527","endLine":44,"endColumn":25},{"ruleId":"524","severity":1,"message":"584","line":44,"column":27,"nodeType":"526","messageId":"527","endLine":44,"endColumn":43},{"ruleId":"524","severity":1,"message":"585","line":46,"column":12,"nodeType":"526","messageId":"527","endLine":46,"endColumn":22},{"ruleId":"524","severity":1,"message":"586","line":46,"column":24,"nodeType":"526","messageId":"527","endLine":46,"endColumn":37},{"ruleId":"524","severity":1,"message":"587","line":48,"column":12,"nodeType":"526","messageId":"527","endLine":48,"endColumn":23},{"ruleId":"524","severity":1,"message":"588","line":48,"column":25,"nodeType":"526","messageId":"527","endLine":48,"endColumn":39},{"ruleId":"524","severity":1,"message":"597","line":68,"column":12,"nodeType":"526","messageId":"527","endLine":68,"endColumn":27},{"ruleId":"524","severity":1,"message":"598","line":68,"column":29,"nodeType":"526","messageId":"527","endLine":68,"endColumn":47},{"ruleId":"524","severity":1,"message":"599","line":70,"column":12,"nodeType":"526","messageId":"527","endLine":70,"endColumn":27},{"ruleId":"524","severity":1,"message":"600","line":70,"column":29,"nodeType":"526","messageId":"527","endLine":70,"endColumn":47},{"ruleId":"524","severity":1,"message":"607","line":78,"column":12,"nodeType":"526","messageId":"527","endLine":78,"endColumn":25},{"ruleId":"524","severity":1,"message":"608","line":78,"column":27,"nodeType":"526","messageId":"527","endLine":78,"endColumn":43},{"ruleId":"524","severity":1,"message":"609","line":80,"column":12,"nodeType":"526","messageId":"527","endLine":80,"endColumn":26},{"ruleId":"524","severity":1,"message":"610","line":80,"column":28,"nodeType":"526","messageId":"527","endLine":80,"endColumn":45},{"ruleId":"524","severity":1,"message":"612","line":82,"column":24,"nodeType":"526","messageId":"527","endLine":82,"endColumn":37},{"ruleId":"524","severity":1,"message":"544","line":84,"column":12,"nodeType":"526","messageId":"527","endLine":84,"endColumn":22},{"ruleId":"524","severity":1,"message":"545","line":84,"column":24,"nodeType":"526","messageId":"527","endLine":84,"endColumn":37},{"ruleId":"524","severity":1,"message":"613","line":86,"column":12,"nodeType":"526","messageId":"527","endLine":86,"endColumn":24},{"ruleId":"524","severity":1,"message":"614","line":86,"column":26,"nodeType":"526","messageId":"527","endLine":86,"endColumn":41},{"ruleId":"524","severity":1,"message":"615","line":88,"column":12,"nodeType":"526","messageId":"527","endLine":88,"endColumn":20},{"ruleId":"524","severity":1,"message":"546","line":88,"column":22,"nodeType":"526","messageId":"527","endLine":88,"endColumn":33},{"ruleId":"524","severity":1,"message":"616","line":90,"column":12,"nodeType":"526","messageId":"527","endLine":90,"endColumn":24},{"ruleId":"524","severity":1,"message":"617","line":92,"column":12,"nodeType":"526","messageId":"527","endLine":92,"endColumn":28},{"ruleId":"524","severity":1,"message":"618","line":92,"column":30,"nodeType":"526","messageId":"527","endLine":92,"endColumn":49},{"ruleId":"524","severity":1,"message":"547","line":96,"column":12,"nodeType":"526","messageId":"527","endLine":96,"endColumn":20},{"ruleId":"524","severity":1,"message":"619","line":100,"column":11,"nodeType":"526","messageId":"527","endLine":100,"endColumn":18},{"ruleId":"524","severity":1,"message":"620","line":102,"column":11,"nodeType":"526","messageId":"527","endLine":102,"endColumn":20},{"ruleId":"534","severity":1,"message":"535","line":355,"column":8,"nodeType":"536","endLine":355,"endColumn":10,"suggestions":"628"},{"ruleId":"559","severity":1,"message":"560","line":439,"column":41,"nodeType":"561","messageId":"562","endLine":439,"endColumn":79,"fix":"629"},{"ruleId":"524","severity":1,"message":"630","line":6,"column":8,"nodeType":"526","messageId":"527","endLine":6,"endColumn":17},{"ruleId":"524","severity":1,"message":"631","line":18,"column":12,"nodeType":"526","messageId":"527","endLine":18,"endColumn":22},{"ruleId":"524","severity":1,"message":"632","line":18,"column":25,"nodeType":"526","messageId":"527","endLine":18,"endColumn":38},{"ruleId":"524","severity":1,"message":"633","line":22,"column":12,"nodeType":"526","messageId":"527","endLine":22,"endColumn":24},{"ruleId":"524","severity":1,"message":"565","line":25,"column":12,"nodeType":"526","messageId":"527","endLine":25,"endColumn":21},{"ruleId":"524","severity":1,"message":"634","line":25,"column":23,"nodeType":"526","messageId":"527","endLine":25,"endColumn":35},{"ruleId":"524","severity":1,"message":"635","line":38,"column":24,"nodeType":"526","messageId":"527","endLine":38,"endColumn":37},{"ruleId":"524","severity":1,"message":"636","line":53,"column":11,"nodeType":"526","messageId":"527","endLine":53,"endColumn":28},{"ruleId":"524","severity":1,"message":"571","line":155,"column":13,"nodeType":"526","messageId":"527","endLine":155,"endColumn":19},{"ruleId":"524","severity":1,"message":"591","line":158,"column":13,"nodeType":"526","messageId":"527","endLine":158,"endColumn":23},{"ruleId":"524","severity":1,"message":"565","line":159,"column":13,"nodeType":"526","messageId":"527","endLine":159,"endColumn":22},{"ruleId":"534","severity":1,"message":"637","line":199,"column":8,"nodeType":"536","endLine":199,"endColumn":10,"suggestions":"638"},{"ruleId":"524","severity":1,"message":"532","line":1,"column":17,"nodeType":"526","messageId":"527","endLine":1,"endColumn":25},{"ruleId":"524","severity":1,"message":"639","line":4,"column":5,"nodeType":"526","messageId":"527","endLine":4,"endColumn":26},{"ruleId":"524","severity":1,"message":"640","line":5,"column":5,"nodeType":"526","messageId":"527","endLine":5,"endColumn":26},{"ruleId":"524","severity":1,"message":"641","line":9,"column":7,"nodeType":"526","messageId":"527","endLine":9,"endColumn":16},{"ruleId":"524","severity":1,"message":"635","line":29,"column":24,"nodeType":"526","messageId":"527","endLine":29,"endColumn":37},{"ruleId":"524","severity":1,"message":"642","line":4,"column":27,"nodeType":"526","messageId":"527","endLine":4,"endColumn":45},{"ruleId":"524","severity":1,"message":"590","line":21,"column":22,"nodeType":"526","messageId":"527","endLine":21,"endColumn":33},{"ruleId":"524","severity":1,"message":"635","line":25,"column":24,"nodeType":"526","messageId":"527","endLine":25,"endColumn":37},{"ruleId":"534","severity":1,"message":"643","line":194,"column":8,"nodeType":"536","endLine":194,"endColumn":10,"suggestions":"644"},{"ruleId":"540","severity":1,"message":"541","line":6,"column":91,"nodeType":"542","messageId":"543","endLine":6,"endColumn":92},{"ruleId":"524","severity":1,"message":"645","line":3,"column":7,"nodeType":"526","messageId":"527","endLine":3,"endColumn":17},{"ruleId":"524","severity":1,"message":"646","line":336,"column":17,"nodeType":"526","messageId":"527","endLine":336,"endColumn":25},{"ruleId":"524","severity":1,"message":"646","line":344,"column":17,"nodeType":"526","messageId":"527","endLine":344,"endColumn":25},{"ruleId":"524","severity":1,"message":"647","line":16,"column":12,"nodeType":"526","messageId":"527","endLine":16,"endColumn":24},{"ruleId":"524","severity":1,"message":"648","line":16,"column":26,"nodeType":"526","messageId":"527","endLine":16,"endColumn":41},{"ruleId":"524","severity":1,"message":"649","line":18,"column":20,"nodeType":"526","messageId":"527","endLine":18,"endColumn":29},{"ruleId":"524","severity":1,"message":"650","line":20,"column":20,"nodeType":"526","messageId":"527","endLine":20,"endColumn":29},{"ruleId":"524","severity":1,"message":"651","line":23,"column":12,"nodeType":"526","messageId":"527","endLine":23,"endColumn":21},{"ruleId":"524","severity":1,"message":"533","line":33,"column":12,"nodeType":"526","messageId":"527","endLine":33,"endColumn":17},{"ruleId":"534","severity":1,"message":"652","line":88,"column":7,"nodeType":"536","endLine":88,"endColumn":9,"suggestions":"653"},{"ruleId":"551","severity":1,"message":"552","line":18,"column":38,"nodeType":"553","messageId":"554","endLine":18,"endColumn":40},{"ruleId":"551","severity":1,"message":"552","line":19,"column":41,"nodeType":"553","messageId":"554","endLine":19,"endColumn":43},{"ruleId":"551","severity":1,"message":"552","line":68,"column":31,"nodeType":"553","messageId":"554","endLine":68,"endColumn":33},{"ruleId":"551","severity":1,"message":"552","line":74,"column":37,"nodeType":"553","messageId":"554","endLine":74,"endColumn":39},{"ruleId":"551","severity":1,"message":"552","line":111,"column":35,"nodeType":"553","messageId":"554","endLine":111,"endColumn":37},{"ruleId":"551","severity":1,"message":"552","line":112,"column":37,"nodeType":"553","messageId":"554","endLine":112,"endColumn":39},{"ruleId":"551","severity":1,"message":"552","line":122,"column":35,"nodeType":"553","messageId":"554","endLine":122,"endColumn":37},{"ruleId":"551","severity":1,"message":"552","line":123,"column":37,"nodeType":"553","messageId":"554","endLine":123,"endColumn":39},{"ruleId":"534","severity":1,"message":"654","line":136,"column":8,"nodeType":"536","endLine":136,"endColumn":10,"suggestions":"655"},{"ruleId":"524","severity":1,"message":"656","line":2,"column":38,"nodeType":"526","messageId":"527","endLine":2,"endColumn":44},{"ruleId":"524","severity":1,"message":"657","line":3,"column":10,"nodeType":"526","messageId":"527","endLine":3,"endColumn":15},{"ruleId":"524","severity":1,"message":"622","line":3,"column":17,"nodeType":"526","messageId":"527","endLine":3,"endColumn":23},{"ruleId":"524","severity":1,"message":"658","line":3,"column":25,"nodeType":"526","messageId":"527","endLine":3,"endColumn":30},{"ruleId":"524","severity":1,"message":"627","line":7,"column":9,"nodeType":"526","messageId":"527","endLine":7,"endColumn":15},{"ruleId":"524","severity":1,"message":"659","line":11,"column":20,"nodeType":"526","messageId":"527","endLine":11,"endColumn":29},{"ruleId":"555","severity":1,"message":"556","line":31,"column":36,"nodeType":"542","messageId":"557","endLine":31,"endColumn":38},{"ruleId":"555","severity":1,"message":"556","line":32,"column":36,"nodeType":"542","messageId":"557","endLine":32,"endColumn":38},{"ruleId":"524","severity":1,"message":"660","line":53,"column":11,"nodeType":"526","messageId":"527","endLine":53,"endColumn":30},{"ruleId":"524","severity":1,"message":"532","line":2,"column":16,"nodeType":"526","messageId":"527","endLine":2,"endColumn":24},{"ruleId":"524","severity":1,"message":"661","line":2,"column":26,"nodeType":"526","messageId":"527","endLine":2,"endColumn":35},{"ruleId":"524","severity":1,"message":"656","line":2,"column":37,"nodeType":"526","messageId":"527","endLine":2,"endColumn":43},{"ruleId":"524","severity":1,"message":"656","line":2,"column":38,"nodeType":"526","messageId":"527","endLine":2,"endColumn":44},{"ruleId":"534","severity":1,"message":"535","line":30,"column":8,"nodeType":"536","endLine":30,"endColumn":10,"suggestions":"662"},{"ruleId":"524","severity":1,"message":"624","line":38,"column":11,"nodeType":"526","messageId":"527","endLine":38,"endColumn":19},{"ruleId":"551","severity":1,"message":"552","line":51,"column":30,"nodeType":"553","messageId":"554","endLine":51,"endColumn":32},{"ruleId":"551","severity":1,"message":"552","line":57,"column":38,"nodeType":"553","messageId":"554","endLine":57,"endColumn":40},{"ruleId":"663","severity":1,"message":"664","line":21,"column":47,"nodeType":"665","messageId":"666","endLine":21,"endColumn":49},{"ruleId":"663","severity":1,"message":"664","line":21,"column":75,"nodeType":"665","messageId":"666","endLine":21,"endColumn":77},{"ruleId":"524","severity":1,"message":"624","line":38,"column":11,"nodeType":"526","messageId":"527","endLine":38,"endColumn":19},{"ruleId":"551","severity":1,"message":"552","line":46,"column":31,"nodeType":"553","messageId":"554","endLine":46,"endColumn":33},{"ruleId":"551","severity":1,"message":"552","line":52,"column":38,"nodeType":"553","messageId":"554","endLine":52,"endColumn":40},{"ruleId":"667","severity":1,"message":"668","line":220,"column":22,"nodeType":"669","messageId":"670","endLine":220,"endColumn":23,"suggestions":"671"},{"ruleId":"667","severity":1,"message":"672","line":220,"column":25,"nodeType":"669","messageId":"670","endLine":220,"endColumn":26,"suggestions":"673"},{"ruleId":"667","severity":1,"message":"674","line":220,"column":29,"nodeType":"669","messageId":"670","endLine":220,"endColumn":30,"suggestions":"675"},{"ruleId":"667","severity":1,"message":"676","line":220,"column":33,"nodeType":"669","messageId":"670","endLine":220,"endColumn":34,"suggestions":"677"},{"ruleId":"667","severity":1,"message":"674","line":220,"column":35,"nodeType":"669","messageId":"670","endLine":220,"endColumn":36,"suggestions":"678"},{"ruleId":"667","severity":1,"message":"679","line":232,"column":21,"nodeType":"669","messageId":"670","endLine":232,"endColumn":22,"suggestions":"680"},{"ruleId":"667","severity":1,"message":"679","line":232,"column":30,"nodeType":"669","messageId":"670","endLine":232,"endColumn":31,"suggestions":"681"},{"ruleId":"667","severity":1,"message":"679","line":232,"column":36,"nodeType":"669","messageId":"670","endLine":232,"endColumn":37,"suggestions":"682"},{"ruleId":"667","severity":1,"message":"679","line":232,"column":44,"nodeType":"669","messageId":"670","endLine":232,"endColumn":45,"suggestions":"683"},{"ruleId":"667","severity":1,"message":"676","line":232,"column":49,"nodeType":"669","messageId":"670","endLine":232,"endColumn":50,"suggestions":"684"},{"ruleId":"667","severity":1,"message":"679","line":232,"column":51,"nodeType":"669","messageId":"670","endLine":232,"endColumn":52,"suggestions":"685"},{"ruleId":"667","severity":1,"message":"679","line":232,"column":59,"nodeType":"669","messageId":"670","endLine":232,"endColumn":60,"suggestions":"686"},{"ruleId":"667","severity":1,"message":"674","line":236,"column":84,"nodeType":"669","messageId":"670","endLine":236,"endColumn":85,"suggestions":"687"},{"ruleId":"667","severity":1,"message":"674","line":240,"column":22,"nodeType":"669","messageId":"670","endLine":240,"endColumn":23,"suggestions":"688"},{"ruleId":"667","severity":1,"message":"674","line":240,"column":33,"nodeType":"669","messageId":"670","endLine":240,"endColumn":34,"suggestions":"689"},{"ruleId":"667","severity":1,"message":"674","line":240,"column":44,"nodeType":"669","messageId":"670","endLine":240,"endColumn":45,"suggestions":"690"},{"ruleId":"667","severity":1,"message":"674","line":240,"column":51,"nodeType":"669","messageId":"670","endLine":240,"endColumn":52,"suggestions":"691"},{"ruleId":"667","severity":1,"message":"674","line":244,"column":36,"nodeType":"669","messageId":"670","endLine":244,"endColumn":37,"suggestions":"692"},{"ruleId":"667","severity":1,"message":"674","line":244,"column":47,"nodeType":"669","messageId":"670","endLine":244,"endColumn":48,"suggestions":"693"},{"ruleId":"667","severity":1,"message":"676","line":244,"column":56,"nodeType":"669","messageId":"670","endLine":244,"endColumn":57,"suggestions":"694"},{"ruleId":"667","severity":1,"message":"674","line":244,"column":74,"nodeType":"669","messageId":"670","endLine":244,"endColumn":75,"suggestions":"695"},{"ruleId":"667","severity":1,"message":"674","line":244,"column":85,"nodeType":"669","messageId":"670","endLine":244,"endColumn":86,"suggestions":"696"},{"ruleId":"667","severity":1,"message":"674","line":248,"column":25,"nodeType":"669","messageId":"670","endLine":248,"endColumn":26,"suggestions":"697"},{"ruleId":"667","severity":1,"message":"674","line":248,"column":33,"nodeType":"669","messageId":"670","endLine":248,"endColumn":34,"suggestions":"698"},{"ruleId":"524","severity":1,"message":"624","line":39,"column":11,"nodeType":"526","messageId":"527","endLine":39,"endColumn":19},{"ruleId":"551","severity":1,"message":"552","line":47,"column":31,"nodeType":"553","messageId":"554","endLine":47,"endColumn":33},{"ruleId":"551","severity":1,"message":"552","line":53,"column":38,"nodeType":"553","messageId":"554","endLine":53,"endColumn":40},{"ruleId":"524","severity":1,"message":"622","line":4,"column":10,"nodeType":"526","messageId":"527","endLine":4,"endColumn":16},{"ruleId":"524","severity":1,"message":"533","line":14,"column":12,"nodeType":"526","messageId":"527","endLine":14,"endColumn":17},{"ruleId":"534","severity":1,"message":"535","line":40,"column":8,"nodeType":"536","endLine":40,"endColumn":10,"suggestions":"699"},{"ruleId":"524","severity":1,"message":"630","line":9,"column":8,"nodeType":"526","messageId":"527","endLine":9,"endColumn":17},{"ruleId":"524","severity":1,"message":"633","line":28,"column":12,"nodeType":"526","messageId":"527","endLine":28,"endColumn":24},{"ruleId":"524","severity":1,"message":"700","line":32,"column":11,"nodeType":"526","messageId":"527","endLine":32,"endColumn":23},{"ruleId":"524","severity":1,"message":"701","line":34,"column":11,"nodeType":"526","messageId":"527","endLine":34,"endColumn":23},{"ruleId":"524","severity":1,"message":"702","line":38,"column":12,"nodeType":"526","messageId":"527","endLine":38,"endColumn":22},{"ruleId":"524","severity":1,"message":"635","line":57,"column":24,"nodeType":"526","messageId":"527","endLine":57,"endColumn":37},{"ruleId":"524","severity":1,"message":"636","line":72,"column":11,"nodeType":"526","messageId":"527","endLine":72,"endColumn":28},{"ruleId":"524","severity":1,"message":"703","line":190,"column":11,"nodeType":"526","messageId":"527","endLine":190,"endColumn":24},{"ruleId":"524","severity":1,"message":"704","line":203,"column":11,"nodeType":"526","messageId":"527","endLine":203,"endColumn":26},{"ruleId":"524","severity":1,"message":"705","line":207,"column":11,"nodeType":"526","messageId":"527","endLine":207,"endColumn":20},{"ruleId":"524","severity":1,"message":"706","line":215,"column":11,"nodeType":"526","messageId":"527","endLine":215,"endColumn":23},{"ruleId":"524","severity":1,"message":"707","line":5,"column":8,"nodeType":"526","messageId":"527","endLine":5,"endColumn":20},{"ruleId":"524","severity":1,"message":"708","line":8,"column":8,"nodeType":"526","messageId":"527","endLine":8,"endColumn":25},{"ruleId":"524","severity":1,"message":"709","line":9,"column":10,"nodeType":"526","messageId":"527","endLine":9,"endColumn":22},{"ruleId":"524","severity":1,"message":"710","line":9,"column":24,"nodeType":"526","messageId":"527","endLine":9,"endColumn":37},{"ruleId":"524","severity":1,"message":"711","line":9,"column":39,"nodeType":"526","messageId":"527","endLine":9,"endColumn":51},{"ruleId":"524","severity":1,"message":"566","line":20,"column":12,"nodeType":"526","messageId":"527","endLine":20,"endColumn":19},{"ruleId":"524","severity":1,"message":"567","line":20,"column":21,"nodeType":"526","messageId":"527","endLine":20,"endColumn":31},{"ruleId":"524","severity":1,"message":"573","line":22,"column":12,"nodeType":"526","messageId":"527","endLine":22,"endColumn":18},{"ruleId":"524","severity":1,"message":"574","line":22,"column":20,"nodeType":"526","messageId":"527","endLine":22,"endColumn":29},{"ruleId":"524","severity":1,"message":"712","line":26,"column":26,"nodeType":"526","messageId":"527","endLine":26,"endColumn":41},{"ruleId":"524","severity":1,"message":"713","line":32,"column":12,"nodeType":"526","messageId":"527","endLine":32,"endColumn":21},{"ruleId":"534","severity":1,"message":"714","line":75,"column":7,"nodeType":"536","endLine":75,"endColumn":9,"suggestions":"715"},{"ruleId":"524","severity":1,"message":"622","line":3,"column":10,"nodeType":"526","messageId":"527","endLine":3,"endColumn":16},{"ruleId":"524","severity":1,"message":"716","line":3,"column":50,"nodeType":"526","messageId":"527","endLine":3,"endColumn":57},{"ruleId":"524","severity":1,"message":"717","line":7,"column":8,"nodeType":"526","messageId":"527","endLine":7,"endColumn":16},{"ruleId":"524","severity":1,"message":"630","line":10,"column":8,"nodeType":"526","messageId":"527","endLine":10,"endColumn":17},{"ruleId":"524","severity":1,"message":"718","line":4,"column":10,"nodeType":"526","messageId":"527","endLine":4,"endColumn":29},{"ruleId":"524","severity":1,"message":"719","line":6,"column":10,"nodeType":"526","messageId":"527","endLine":6,"endColumn":21},{"ruleId":"524","severity":1,"message":"533","line":16,"column":12,"nodeType":"526","messageId":"527","endLine":16,"endColumn":17},{"ruleId":"534","severity":1,"message":"535","line":31,"column":7,"nodeType":"536","endLine":31,"endColumn":9,"suggestions":"720"},"no-unused-vars","'HashRouter' is defined but never used.","Identifier","unusedVar","no-native-reassign",["721"],"no-negated-in-lhs",["722"],"'useState' is defined but never used.","'valid' is assigned a value but never used.","react-hooks/exhaustive-deps","React Hook useEffect has a missing dependency: 'getData'. Either include it or remove the dependency array.","ArrayExpression",["723"],"'setTemplates' is assigned a value but never used.",["724"],"no-useless-concat","Unexpected string concatenation of literals.","BinaryExpression","unexpectedConcat","'nextPerson' is assigned a value but never used.","'setNextPerson' is assigned a value but never used.","'setWorkCode' is assigned a value but never used.","'formType' is assigned a value but never used.","'handleClick' is assigned a value but never used.","'handleClickReback' is assigned a value but never used.","'revertHandleArray' is assigned a value but never used.","array-callback-return","Array.prototype.map() expects a return value from arrow function.","ArrowFunctionExpression","expectedInside","eqeqeq","Expected '===' and instead saw '=='.","unexpected",["725"],"react/jsx-no-target-blank","Using target=\"_blank\" without rel=\"noreferrer\" is a security risk: see https://html.spec.whatwg.org/multipage/links.html#link-type-noopener","JSXOpeningElement","noTargetBlank",{"range":"726","text":"727"},["728"],"'loginName' is assigned a value but never used.","'FormKey' is assigned a value but never used.","'setFormKey' is assigned a value but never used.","'cookie' is assigned a value but never used.","'processDefinitionId' is assigned a value but never used.","'setProcessDefinitionId' is assigned a value but never used.","'userId' is assigned a value but never used.","'setUserId' is assigned a value but never used.","'formId' is assigned a value but never used.","'setFormId' is assigned a value but never used.","'visible' is assigned a value but never used.","'setVisible' is assigned a value but never used.","'nextPersonVisible' is assigned a value but never used.","'setNextPersonVisible' is assigned a value but never used.","'modelerVisible' is assigned a value but never used.","'setModelerVisible' is assigned a value but never used.","'rebackVisible' is assigned a value but never used.","'setRebackVisible' is assigned a value but never used.","'urgentVisible' is assigned a value but never used.","'setUrgentVisible' is assigned a value but never used.","'transValue' is assigned a value but never used.","'setTransValue' is assigned a value but never used.","'userNameArr' is assigned a value but never used.","'setUserNameArr' is assigned a value but never used.","'userName' is assigned a value but never used.","'setUserName' is assigned a value but never used.","'userDepart' is assigned a value but never used.","'setUserDepart' is assigned a value but never used.","'processImgSrc' is assigned a value but never used.","'setProcessImgSrc' is assigned a value but never used.","'tableData' is assigned a value but never used.","'setTableData' is assigned a value but never used.","'goBacktableData' is assigned a value but never used.","'setGoBacktableData' is assigned a value but never used.","'urgentTableData' is assigned a value but never used.","'setUrgentTableData' is assigned a value but never used.","'fileTableData' is assigned a value but never used.","'setFileTableData' is assigned a value but never used.","'flowVisible' is assigned a value but never used.","'setFlowVisible' is assigned a value but never used.","'fileVisible' is assigned a value but never used.","'setFileVisible' is assigned a value but never used.","'uploadVisible' is assigned a value but never used.","'setUploadVisible' is assigned a value but never used.","'abolishVisible' is assigned a value but never used.","'setAbolishVisible' is assigned a value but never used.","'upFileName' is assigned a value but never used.","'setUpFileName' is assigned a value but never used.","'assigneeList' is assigned a value but never used.","'setAssigneeList' is assigned a value but never used.","'workCode' is assigned a value but never used.","'configSchema' is assigned a value but never used.","'prevSchemaValues' is assigned a value but never used.","'setPrevSchemaValues' is assigned a value but never used.","'backRef' is assigned a value but never used.","'urgentRef' is assigned a value but never used.",["729"],"'Button' is defined but never used.","'flowId' is assigned a value but never used.","'onChange' is assigned a value but never used.","React Hook useEffect has missing dependencies: 'getData' and 'hanldleNodeForm'. Either include them or remove the dependency array.",["730"],"'Search' is assigned a value but never used.",["731"],{"range":"732","text":"727"},"'NoDataImg' is defined but never used.","'searchName' is assigned a value but never used.","'setSearchName' is assigned a value but never used.","'clientHeight' is assigned a value but never used.","'setLoginName' is assigned a value but never used.","'setPagination' is assigned a value but never used.","'handleEventConfig' is assigned a value but never used.","React Hook useEffect has missing dependencies: 'eventName' and 'props.location.state'. Either include them or remove the dependency array.",["733"],"'defaultCommonSettings' is defined but never used.","'defaultGlobalSettings' is defined but never used.","'NewWidget' is assigned a value but never used.","'SaveAssemblyConfig' is defined but never used.","React Hook useEffect has a missing dependency: 'queryDataFromWeb4'. Either include it or remove the dependency array.",["734"],"'PRO_ORIGIN' is assigned a value but never used.","'required' is assigned a value but never used.","'staffVisible' is assigned a value but never used.","'setstaffVisible' is assigned a value but never used.","'setEvName' is assigned a value but never used.","'setEvCode' is assigned a value but never used.","'FlowDefID' is assigned a value but never used.","React Hook useEffect has missing dependencies: 'LoginToFlowable' and 'getData'. Either include them or remove the dependency array.",["735"],"React Hook useEffect has missing dependencies: 'getProductList' and 'props'. Either include them or remove the dependency array.",["736"],"'useRef' is defined but never used.","'Modal' is defined but never used.","'Radio' is defined but never used.","'setTaskId' is assigned a value but never used.","'fileuploadToService' is assigned a value but never used.","'useEffect' is defined but never used.",["737"],"no-mixed-operators","Unexpected mix of '&&' and '||'. Use parentheses to clarify the intended order of operations.","LogicalExpression","unexpectedMixedOperator","no-useless-escape","Unnecessary escape character: \\-.","Literal","unnecessaryEscape",["738","739"],"Unnecessary escape character: \\+.",["740","741"],"Unnecessary escape character: \\d.",["742","743"],"Unnecessary escape character: \\..",["744","745"],["746","747"],"Unnecessary escape character: \\w.",["748","749"],["750","751"],["752","753"],["754","755"],["756","757"],["758","759"],["760","761"],["762","763"],["764","765"],["766","767"],["768","769"],["770","771"],["772","773"],["774","775"],["776","777"],["778","779"],["780","781"],["782","783"],["784","785"],["786"],"'eventNameRef' is assigned a value but never used.","'eventDescRef' is assigned a value but never used.","'isDelEvent' is assigned a value but never used.","'handleSureDel' is assigned a value but never used.","'handleCancelDel' is assigned a value but never used.","'handleDel' is assigned a value but never used.","'handleConfig' is assigned a value but never used.","'FormTransfer' is defined but never used.","'ConfigSchemaClass' is defined but never used.","'GetStartForm' is defined but never used.","'WorkflowStart' is defined but never used.","'getTableName' is defined but never used.","'setConfigSchema' is assigned a value but never used.","'eventCode' is assigned a value but never used.","React Hook useEffect has a missing dependency: 'getStartData'. Either include it or remove the dependency array.",["787"],"'Divider' is defined but never used.","'flowIcon' is defined but never used.","'GetWorkflowBaseInfo' is defined but never used.","'GetFormJson' is defined but never used.",["788"],"no-global-assign","no-unsafe-negation",{"desc":"789","fix":"790"},{"desc":"789","fix":"791"},{"desc":"789","fix":"792"},[37323,37323]," rel=\"noreferrer\"",{"desc":"789","fix":"793"},{"desc":"789","fix":"794"},{"desc":"795","fix":"796"},{"desc":"789","fix":"797"},[17402,17402],{"desc":"798","fix":"799"},{"desc":"800","fix":"801"},{"desc":"802","fix":"803"},{"desc":"804","fix":"805"},{"desc":"789","fix":"806"},{"messageId":"807","fix":"808","desc":"809"},{"messageId":"810","fix":"811","desc":"812"},{"messageId":"807","fix":"813","desc":"809"},{"messageId":"810","fix":"814","desc":"812"},{"messageId":"807","fix":"815","desc":"809"},{"messageId":"810","fix":"816","desc":"812"},{"messageId":"807","fix":"817","desc":"809"},{"messageId":"810","fix":"818","desc":"812"},{"messageId":"807","fix":"819","desc":"809"},{"messageId":"810","fix":"820","desc":"812"},{"messageId":"807","fix":"821","desc":"809"},{"messageId":"810","fix":"822","desc":"812"},{"messageId":"807","fix":"823","desc":"809"},{"messageId":"810","fix":"824","desc":"812"},{"messageId":"807","fix":"825","desc":"809"},{"messageId":"810","fix":"826","desc":"812"},{"messageId":"807","fix":"827","desc":"809"},{"messageId":"810","fix":"828","desc":"812"},{"messageId":"807","fix":"829","desc":"809"},{"messageId":"810","fix":"830","desc":"812"},{"messageId":"807","fix":"831","desc":"809"},{"messageId":"810","fix":"832","desc":"812"},{"messageId":"807","fix":"833","desc":"809"},{"messageId":"810","fix":"834","desc":"812"},{"messageId":"807","fix":"835","desc":"809"},{"messageId":"810","fix":"836","desc":"812"},{"messageId":"807","fix":"837","desc":"809"},{"messageId":"810","fix":"838","desc":"812"},{"messageId":"807","fix":"839","desc":"809"},{"messageId":"810","fix":"840","desc":"812"},{"messageId":"807","fix":"841","desc":"809"},{"messageId":"810","fix":"842","desc":"812"},{"messageId":"807","fix":"843","desc":"809"},{"messageId":"810","fix":"844","desc":"812"},{"messageId":"807","fix":"845","desc":"809"},{"messageId":"810","fix":"846","desc":"812"},{"messageId":"807","fix":"847","desc":"809"},{"messageId":"810","fix":"848","desc":"812"},{"messageId":"807","fix":"849","desc":"809"},{"messageId":"810","fix":"850","desc":"812"},{"messageId":"807","fix":"851","desc":"809"},{"messageId":"810","fix":"852","desc":"812"},{"messageId":"807","fix":"853","desc":"809"},{"messageId":"810","fix":"854","desc":"812"},{"messageId":"807","fix":"855","desc":"809"},{"messageId":"810","fix":"856","desc":"812"},{"messageId":"807","fix":"857","desc":"809"},{"messageId":"810","fix":"858","desc":"812"},{"desc":"789","fix":"859"},{"desc":"860","fix":"861"},{"desc":"789","fix":"862"},"Update the dependencies array to be: [getData]",{"range":"863","text":"864"},{"range":"865","text":"864"},{"range":"866","text":"864"},{"range":"867","text":"864"},{"range":"868","text":"864"},"Update the dependencies array to be: [getData, hanldleNodeForm]",{"range":"869","text":"870"},{"range":"871","text":"864"},"Update the dependencies array to be: [eventName, props.location.state]",{"range":"872","text":"873"},"Update the dependencies array to be: [queryDataFromWeb4]",{"range":"874","text":"875"},"Update the dependencies array to be: [LoginToFlowable, getData]",{"range":"876","text":"877"},"Update the dependencies array to be: [getProductList, props]",{"range":"878","text":"879"},{"range":"880","text":"864"},"removeEscape",{"range":"881","text":"882"},"Remove the `\\`. This maintains the current functionality.","escapeBackslash",{"range":"883","text":"884"},"Replace the `\\` with `\\\\` to include the actual backslash character.",{"range":"885","text":"882"},{"range":"886","text":"884"},{"range":"887","text":"882"},{"range":"888","text":"884"},{"range":"889","text":"882"},{"range":"890","text":"884"},{"range":"891","text":"882"},{"range":"892","text":"884"},{"range":"893","text":"882"},{"range":"894","text":"884"},{"range":"895","text":"882"},{"range":"896","text":"884"},{"range":"897","text":"882"},{"range":"898","text":"884"},{"range":"899","text":"882"},{"range":"900","text":"884"},{"range":"901","text":"882"},{"range":"902","text":"884"},{"range":"903","text":"882"},{"range":"904","text":"884"},{"range":"905","text":"882"},{"range":"906","text":"884"},{"range":"907","text":"882"},{"range":"908","text":"884"},{"range":"909","text":"882"},{"range":"910","text":"884"},{"range":"911","text":"882"},{"range":"912","text":"884"},{"range":"913","text":"882"},{"range":"914","text":"884"},{"range":"915","text":"882"},{"range":"916","text":"884"},{"range":"917","text":"882"},{"range":"918","text":"884"},{"range":"919","text":"882"},{"range":"920","text":"884"},{"range":"921","text":"882"},{"range":"922","text":"884"},{"range":"923","text":"882"},{"range":"924","text":"884"},{"range":"925","text":"882"},{"range":"926","text":"884"},{"range":"927","text":"882"},{"range":"928","text":"884"},{"range":"929","text":"882"},{"range":"930","text":"884"},{"range":"931","text":"864"},"Update the dependencies array to be: [getStartData]",{"range":"932","text":"933"},{"range":"934","text":"864"},[1041,1043],"[getData]",[1063,1065],[25251,25253],[4230,4232],[6740,6742],[5304,5306],"[getData, hanldleNodeForm]",[12634,12636],[5730,5732],"[eventName, props.location.state]",[5744,5746],"[queryDataFromWeb4]",[2963,2965],"[LoginToFlowable, getData]",[4224,4226],"[getProductList, props]",[836,838],[5714,5715],"",[5714,5714],"\\",[5717,5718],[5717,5717],[5721,5722],[5721,5721],[5725,5726],[5725,5725],[5727,5728],[5727,5727],[5947,5948],[5947,5947],[5956,5957],[5956,5956],[5962,5963],[5962,5962],[5970,5971],[5970,5970],[5975,5976],[5975,5975],[5977,5978],[5977,5977],[5985,5986],[5985,5985],[6116,6117],[6116,6116],[6185,6186],[6185,6185],[6196,6197],[6196,6196],[6207,6208],[6207,6207],[6214,6215],[6214,6214],[6302,6303],[6302,6302],[6313,6314],[6313,6313],[6322,6323],[6322,6322],[6340,6341],[6340,6340],[6351,6352],[6351,6351],[6429,6430],[6429,6429],[6437,6438],[6437,6437],[1278,1280],[2724,2726],"[getStartData]",[1006,1008]]