myTask.jsx 92 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840
  1. import React from "react";
  2. import $ from "jquery";
  3. import moment from "moment";
  4. import Picture from "@/manageCenter/publicComponent/picture";
  5. import "@/manageCenter/financialManage/distribute/public.less";
  6. import "@/manageCenter/financialManage/distribute/shouKuan.less";
  7. import {
  8. Button,
  9. Form,
  10. Input,
  11. Select,
  12. Spin,
  13. Table,
  14. message,
  15. DatePicker,
  16. Modal,
  17. Radio,
  18. Cascader,
  19. Popconfirm,
  20. Switch,
  21. Tabs,
  22. } from "antd";
  23. import Assign from "@/manageCenter/publicComponent/assign";
  24. import { areaSelect } from "@/NewDicProvinceList";
  25. import { ChooseList } from "../../order/orderNew/chooseList";
  26. import "./table.less";
  27. import {
  28. getProcessStatus,
  29. getApproval,
  30. getTaskStatus,
  31. getLiquidationStatus,
  32. getProjectStatus,
  33. splitUrl,
  34. getboutique,
  35. ShowModal,
  36. } from "@/tools";
  37. import { taskStatus, projectStatus } from "@/dataDic.js";
  38. import ShowModalDiv from "@/showModal.jsx";
  39. const confirm = Modal.confirm;
  40. const FormItem = Form.Item;
  41. const { TabPane } = Tabs;
  42. const { MonthPicker, RangePicker } = DatePicker;
  43. const Task = React.createClass({
  44. loadData(pageNo) {
  45. this.state.data = [];
  46. this.setState({
  47. page: pageNo,
  48. loading: true
  49. });
  50. $.ajax({
  51. method: "get",
  52. dataType: "json",
  53. crossDomain: false,
  54. url: globalConfig.context + "/api/admin/orderProject/orderTaskList",
  55. data: {
  56. pageNo: pageNo || 1,
  57. pageSize: this.state.pagination.pageSize,
  58. specially: 0, //个人
  59. name: this.state.nameSearch, //客户名称
  60. depId: this.state.departmenttSearch, //订单部门
  61. orderNo: this.state.orderNoSearch, //订单编号
  62. contractNo: this.state.contractNoSearch, //合同编号
  63. taskId: this.state.taskNoSearch, //项目编号
  64. taskStatus: this.state.taskStatuSearch, //项目状态
  65. projectStatus: this.state.projectStatusSearch, //项目状态
  66. adminName: this.state.adminName //项目受理人
  67. },
  68. success: function(data) {
  69. ShowModal(this);
  70. let theArr = [];
  71. if (!data.data || !data.data.list) {
  72. if (data.error && data.error.length) {
  73. message.warning(data.error[0].message);
  74. }
  75. } else {
  76. for (let i = 0; i < data.data.list.length; i++) {
  77. let thisdata = data.data.list[i];
  78. theArr.push({
  79. key: i,
  80. orderNo: thisdata.orderNo, //订单编号
  81. id: thisdata.id, //项目ID
  82. taskName: thisdata.taskName, //名称
  83. cname: thisdata.cname, //项目品类
  84. receiverName: thisdata.receiverName, //受理人
  85. projectStatus: thisdata.projectStatus, //项目状态
  86. taskStatus: thisdata.taskStatus, //项目状态
  87. taskDate: thisdata.taskDate, //分配时间
  88. userName:
  89. thisdata.taskName.substring(0, 5) === "软件著作权"
  90. ? thisdata.userName +
  91. "(" +
  92. thisdata.commodityQuantity.toString() +
  93. "/" +
  94. thisdata.alreadyNumber +
  95. ")"
  96. : thisdata.userName, //用户名
  97. depName: thisdata.depName, //部门名称
  98. commodityQuantity: thisdata.commodityQuantity, //项目数量
  99. hours: thisdata.hours,
  100. contractNo: thisdata.contractNo
  101. });
  102. }
  103. }
  104. this.state.pagination.current = data.data.pageNo;
  105. this.state.pagination.total = data.data.totalCount;
  106. if (data.data && data.data.list && !data.data.list.length) {
  107. this.state.pagination.current = 0;
  108. this.state.pagination.total = 0;
  109. }
  110. this.setState({
  111. dataSource: theArr,
  112. pagination: this.state.pagination
  113. });
  114. }.bind(this)
  115. }).always(
  116. function() {
  117. this.setState({
  118. loading: false
  119. });
  120. }.bind(this)
  121. );
  122. },
  123. getInitialState() {
  124. return {
  125. timeVisible: false,
  126. searchMore: true,
  127. assignVisible: false,
  128. releaseDate: [],
  129. // 判断是否是退回给咨询师经理
  130. flag: false,
  131. roleName: "",
  132. testFlag: true,
  133. boHuivisible: false,
  134. selectedRowKeys: [],
  135. departmentArr: [],
  136. selectedRows: [],
  137. attachmentUrl: [],
  138. contactList: [],
  139. paginations: false,
  140. loading: false,
  141. pagination: {
  142. defaultCurrent: 1,
  143. defaultPageSize: 10,
  144. showQuickJumper: true,
  145. pageSize: 10,
  146. onChange: function(page) {
  147. this.loadData(page);
  148. }.bind(this),
  149. showTotal: function(total) {
  150. return "共" + total + "条数据";
  151. }
  152. },
  153. // 子组件改变的表格title数组
  154. changeList: undefined,
  155. columnsTime: [
  156. {
  157. title: "工作时长(小时)",
  158. dataIndex: "hours",
  159. key: "hours"
  160. },
  161. {
  162. title: "工作时间",
  163. dataIndex: "taskDays",
  164. key: "taskDays"
  165. },
  166. // {
  167. // title: "项目负责人",
  168. // dataIndex: "remarks",
  169. // key: "remarks"
  170. // },
  171. {
  172. title: "备注",
  173. dataIndex: "remarks",
  174. key: "remarks"
  175. }
  176. ],
  177. columns: [
  178. {
  179. title: "项目编号",
  180. dataIndex: "id",
  181. key: "id"
  182. },
  183. {
  184. title: "项目名称",
  185. dataIndex: "taskName",
  186. key: "taskName",
  187. render: text => {
  188. return text && text.length > 8 ? text.substr(0, 8) + "…" : text;
  189. }
  190. },
  191. {
  192. title: "订单编号",
  193. dataIndex: "orderNo",
  194. key: "orderNo"
  195. },
  196. {
  197. title: "合同编号",
  198. dataIndex: "contractNo",
  199. key: "contractNo"
  200. },
  201. {
  202. title: "业务类别",
  203. dataIndex: "cname",
  204. key: "cname"
  205. },
  206. {
  207. title: "客户名称",
  208. dataIndex: "userName",
  209. key: "userName",
  210. className: "userName"
  211. },
  212. {
  213. title: "分配状态",
  214. dataIndex: "taskStatus",
  215. key: "taskStatus",
  216. render: text => {
  217. return getTaskStatus(text);
  218. }
  219. },
  220. {
  221. title: "项目状态",
  222. dataIndex: "projectStatus",
  223. key: "projectStatus",
  224. render: text => {
  225. return getProjectStatus(text);
  226. }
  227. },
  228. {
  229. title: "分配时间",
  230. dataIndex: "taskDate",
  231. key: "taskDate"
  232. },
  233. {
  234. title: "订单部门",
  235. dataIndex: "depName",
  236. key: "depName"
  237. },
  238. {
  239. title: "累计工时(小时)",
  240. dataIndex: "hours",
  241. key: "hours"
  242. },
  243. {
  244. title: "操作",
  245. dataIndex: "caozuo",
  246. key: "caozuo",
  247. render: (text, record) => {
  248. return (
  249. <div>
  250. <Button
  251. type="primary"
  252. onClick={e => {
  253. e.stopPropagation(), this.evaluate(record, "咨询师");
  254. }}
  255. >
  256. 转交
  257. </Button>
  258. <Button
  259. type="primary"
  260. style={{ marginLeft: 10 }}
  261. onClick={e => {
  262. e.stopPropagation(),
  263. this.evaluate(record, "咨询师经理", true);
  264. }}
  265. >
  266. 回退
  267. </Button>
  268. <Button
  269. type="primary"
  270. style={{ margin: "0 10px" }}
  271. onClick={e => {
  272. e.stopPropagation(), this.okCancel(record);
  273. }}
  274. >
  275. 添加工时
  276. </Button>
  277. <Button
  278. type="primary"
  279. onClick={e => {
  280. e.stopPropagation();
  281. this.setState({
  282. timeVisible: true
  283. });
  284. this.timeDetail(record);
  285. }}
  286. >
  287. 工时记录
  288. </Button>
  289. </div>
  290. );
  291. }
  292. }
  293. ],
  294. dataSource: [],
  295. searchTime: [],
  296. columnsX: [
  297. {
  298. title: "业务项目名称",
  299. dataIndex: "commodityName",
  300. key: "commodityName"
  301. },
  302. {
  303. title: "项目类别",
  304. dataIndex: "cname",
  305. key: "cname"
  306. },
  307. {
  308. title: "项目数量",
  309. dataIndex: "commodityQuantity",
  310. key: "commodityQuantity"
  311. },
  312. {
  313. title: "金额(万元)",
  314. dataIndex: "commodityPrice",
  315. key: "commodityPrice"
  316. },
  317. {
  318. title: "负责人",
  319. dataIndex: "contacts",
  320. key: "contacts"
  321. },
  322. {
  323. title: "负责人电话",
  324. dataIndex: "contactsMobile",
  325. key: "contactsMobile"
  326. },
  327. {
  328. title: "主要项目",
  329. dataIndex: "main",
  330. key: "main",
  331. render: text => {
  332. return text ? "是" : "否";
  333. }
  334. },
  335. {
  336. title: "项目说明",
  337. dataIndex: "taskComment",
  338. key: "taskComment",
  339. render: text => {
  340. return text && text.length > 8 ? text.substr(0, 8) + "…" : text;
  341. }
  342. }
  343. ],
  344. columnsA: [
  345. {
  346. title: "流程",
  347. dataIndex: "content",
  348. key: "content",
  349. align: "center"
  350. },
  351. {
  352. title: "操作人",
  353. dataIndex: "aName",
  354. key: "aName",
  355. align: "center"
  356. },
  357. {
  358. title: "时间",
  359. dataIndex: "createTimes",
  360. key: "createTimes",
  361. align: "center"
  362. }
  363. ],
  364. dataSourceX: [],
  365. dataSourceA: [],
  366. ContactsLists: [
  367. {
  368. title: "批次",
  369. dataIndex: "num",
  370. key: "num"
  371. },
  372. {
  373. title: "下证时间",
  374. dataIndex: "licenceTimes",
  375. key: "licenceTimes",
  376. render: (text, record) => {
  377. return (
  378. <div>
  379. <DatePicker
  380. style={{ marginTop: "5px" }}
  381. showTime
  382. format="YYYY-MM-DD"
  383. onOk={() => {}}
  384. value={
  385. record.licenceTimes ? moment(record.licenceTimes) : null
  386. }
  387. onChange={(data, dataString) => {
  388. record.licenceTimes = dataString;
  389. this.setState({ contactList: this.state.contactList });
  390. }}
  391. />
  392. </div>
  393. );
  394. }
  395. },
  396. {
  397. title: "下证数量",
  398. dataIndex: "alreadyNumber",
  399. key: "alreadyNumber",
  400. render: (text, record) => {
  401. return (
  402. <div>
  403. {
  404. <Input
  405. value={record.alreadyNumber}
  406. placeholder="请输入下证数量"
  407. key={record.id}
  408. required="required"
  409. onChange={e => {
  410. record.alreadyNumber = e.target.value;
  411. this.setState({ contactList: this.state.contactList });
  412. }}
  413. style={{ width: "120px" }}
  414. />
  415. }
  416. </div>
  417. );
  418. }
  419. },
  420. {
  421. title: "未下证数量",
  422. dataIndex: "notCount",
  423. key: "notCount"
  424. },
  425. {
  426. title: "操作",
  427. dataIndex: "dels",
  428. key: "dels",
  429. render: (text, record, index) => {
  430. return (
  431. <div>
  432. {
  433. <Popconfirm
  434. title="是否删除?"
  435. onConfirm={() => {
  436. this.confirmDelet(record);
  437. }}
  438. okText="删除"
  439. cancelText="不删除"
  440. >
  441. <Button
  442. style={{
  443. marginRight: "10px",
  444. color: "#ffffff",
  445. background: "#f00",
  446. border: "none"
  447. }}
  448. >
  449. 删除
  450. </Button>
  451. </Popconfirm>
  452. }
  453. {record.flag ? (
  454. ""
  455. ) : (
  456. <Button
  457. type="primary"
  458. onClick={e => {
  459. e.stopPropagation(), this.contactSave(record, index);
  460. }}
  461. >
  462. 保存
  463. </Button>
  464. )}
  465. </div>
  466. );
  467. }
  468. }
  469. ]
  470. };
  471. },
  472. /* 分派 */
  473. evaluate(record, nub, flag) {
  474. this.setState(
  475. {
  476. nub: nub,
  477. assignData: record,
  478. flag
  479. },
  480. () => {
  481. this.setState({
  482. assignVisible: true
  483. });
  484. }
  485. );
  486. },
  487. componentWillMount() {
  488. this.departmentList();
  489. this.loadData();
  490. },
  491. componentDidMount() {
  492. this.setColor();
  493. },
  494. setColor() {
  495. $(".userName span").after(
  496. "(<span class='ruanzhu'>软著数</span>/<span class='xiazheng'>下证数</span>)"
  497. );
  498. },
  499. tableRowClick(record) {
  500. this.state.RowData = record;
  501. if (record.taskName.substring(0, 5) === "软件著作权") {
  502. this.setState({
  503. speVisible: true,
  504. id: record.id,
  505. dataArr: record,
  506. commodityQuantity: record.commodityQuantity
  507. });
  508. } else {
  509. this.setState({
  510. visible: true
  511. });
  512. }
  513. this.xiangqing(record.id, record.taskName);
  514. this.xiangqings(record.orderNo);
  515. this.xiangmu(record.orderNo);
  516. this.loaduserss(record);
  517. },
  518. //点击修改项目详情
  519. tijiaoOk() {
  520. let attachmentUrls = [];
  521. if (this.state.attachmentUrl.length) {
  522. let picArr = [];
  523. this.state.attachmentUrl.map(function(item) {
  524. if (item.response && item.response.data && item.response.data.length) {
  525. picArr.push(item.response.data);
  526. }
  527. });
  528. attachmentUrls = picArr.join(",");
  529. }
  530. this.setState({
  531. loading: true
  532. })
  533. $.ajax({
  534. method: "POST",
  535. dataType: "json",
  536. crossDomain: false,
  537. url: globalConfig.context + "/api/admin/orderProject/updateOrderTask",
  538. data: {
  539. id: this.state.id, //项目编号
  540. orderNo: this.state.orderNo, //订单编号
  541. projectStatus: this.state.projectStatus, //项目状态
  542. taskStatus: this.state.taskStatus, //项目状态
  543. taskComment: this.state.taskComment, //说明
  544. startDate: this.state.startDate, //启动日期
  545. endDate: this.state.endDate, //结束日期
  546. acceptDate: this.state.acceptDate, //受理日期
  547. reviewDate: this.state.reviewDate, //评审日期
  548. publicityDate: this.state.publicityDate, //公示日期
  549. licenceDate: this.state.licenceDate, //发证日期
  550. attachmentUrl: attachmentUrls.length ? attachmentUrls : "", //附件
  551. contacts: this.state.contacts, //联系人
  552. contactMobile: this.state.contactMobile, //联系人电话
  553. legalPerson: this.state.legalPerson, //法人
  554. legalPersonTel: this.state.legalPersonTel, //法人电话
  555. certificateNumber: this.state.certificateNumber, //证书编号
  556. status: this.state.status, //状态
  557. formRetrieve: this.state.formRetrieve, //满意度表格
  558. taskRefund: this.state.taskRefund, //退单
  559. refundContent: this.state.refundContent, //退单信息
  560. retrieveContent: this.state.retrieveContent, //回收信息
  561. locationProvince: this.state.ProvinceCity[0],
  562. locationCity: this.state.ProvinceCity[1],
  563. locationArea: this.state.ProvinceCity[2],
  564. postalAddress: this.state.postalAddress, //详细地址
  565. arrivalMoney: this.state.arrivalMoney, //是否到款
  566. setUpAmount: this.state.setUpAmount, //立项金额
  567. declareUser: this.state.declareUser, //账号
  568. declarePwd: this.state.declarePwd, //密码
  569. outsourceName: this.state.outsourceName, //外包公司
  570. outsourcePrice: this.state.outsourcePrice //外包价格
  571. }
  572. }).done(
  573. function(data) {
  574. this.setState({
  575. loading: false
  576. });
  577. if (!data.error.length) {
  578. message.success("保存成功!");
  579. this.visitCancel();
  580. } else {
  581. message.warning(data.error[0].message);
  582. }
  583. }.bind(this)
  584. );
  585. },
  586. //点击修改项目详情
  587. tianjiaOk() {
  588. if (this.state.attachmentUrl.length) {
  589. let picArr = [];
  590. this.state.attachmentUrl.map(function(item) {
  591. if (item.response && item.response.data && item.response.data.length) {
  592. picArr.push(item.response.data);
  593. }
  594. });
  595. }
  596. $.ajax({
  597. method: "POST",
  598. dataType: "json",
  599. crossDomain: false,
  600. url: globalConfig.context + "/api/admin/orderProject/addTaskHours",
  601. data: {
  602. taskId: this.state.taskId, //项目编号
  603. hours: this.state.hours, //工时
  604. remarks: this.state.remarks, //说明
  605. taskDate: this.state.taskDate, //日期
  606. taskComment: this.state.taskComment //说明
  607. }
  608. }).done(
  609. function(data) {
  610. this.setState({
  611. loading: false
  612. });
  613. if (!data.error.length) {
  614. message.success("保存成功!");
  615. this.noCancel();
  616. } else {
  617. message.warning(data.error[0].message);
  618. }
  619. }.bind(this)
  620. );
  621. },
  622. //订单详情
  623. xiangqing(id) {
  624. $.ajax({
  625. method: "get",
  626. dataType: "json",
  627. crossDomain: false,
  628. url: globalConfig.context + "/api/admin/orderProject/orderTaskDetail",
  629. data: {
  630. id: id
  631. },
  632. success: function(data) {
  633. let thisdata = data.data;
  634. if (data.error.length || data.data.list == "") {
  635. if (data.error && data.error.length) {
  636. message.warning(data.error[0].message);
  637. }
  638. } else {
  639. this.setState({
  640. id: thisdata.id, //ID
  641. orderNo: thisdata.orderNo, //订单编号
  642. userName: thisdata.userName, //客户名称
  643. taskName: thisdata.taskName, //项目名称
  644. cname: thisdata.cname, //项目品类
  645. contractNo: thisdata.contractNo, //合同编号
  646. projectStatus: thisdata.projectStatus.toString(), //项目状态
  647. taskStatus: thisdata.taskStatus.toString(), //项目状态
  648. taskDate: thisdata.taskDate, //分配时间
  649. taskComment: thisdata.taskComment, //说明
  650. attachmentUrl: thisdata.attachmentUrl
  651. ? splitUrl(
  652. thisdata.attachmentUrl,
  653. ",",
  654. globalConfig.avatarHost + "/upload"
  655. )
  656. : [], //图片地址
  657. salesmanName: thisdata.salesmanName, //订单负责人
  658. startDate: thisdata.startDate, //启动日期
  659. endDate: thisdata.endDate, //结束日期
  660. acceptDate: thisdata.acceptDate, //受理日期
  661. reviewDate: thisdata.reviewDate, //评审日期
  662. publicityDate: thisdata.publicityDate, //公示日期
  663. licenceDate: thisdata.licenceDate, //发证日期
  664. contacts: thisdata.contacts, //联系人
  665. contactMobile: thisdata.contactMobile, //联系人电话
  666. legalPerson: thisdata.legalPerson, //法人
  667. legalPersonTel: thisdata.legalPersonTel, //法人电话
  668. certificateNumber: thisdata.certificateNumber, //证书编号
  669. status: thisdata.status, //状态
  670. formRetrieve: thisdata.formRetrieve, //满意度表格
  671. taskRefund: thisdata.taskRefund, //退单
  672. refundContent: thisdata.refundContent, //退单信息
  673. retrieveContent: thisdata.retrieveContent, //回收信息
  674. arrivalMoney: thisdata.arrivalMoney, //是否到款
  675. setUpAmount: thisdata.setUpAmount, //立项金额
  676. declareUser: thisdata.declareUser, //账号
  677. declarePwd: thisdata.declarePwd, //密码
  678. outsourceName: thisdata.outsourceName, //外包公司
  679. outsourcePrice: thisdata.outsourcePrice //外包价格
  680. });
  681. }
  682. }.bind(this)
  683. }).always(
  684. function() {
  685. this.setState({
  686. loading: false
  687. });
  688. }.bind(this)
  689. );
  690. },
  691. //订单详情
  692. xiangqings(orderNos) {
  693. $.ajax({
  694. method: "get",
  695. dataType: "json",
  696. crossDomain: false,
  697. url: globalConfig.context + "/api/admin/newOrder/getOrderNewDetail",
  698. data: {
  699. orderNo: orderNos
  700. },
  701. success: function(data) {
  702. let thisdata = data.data;
  703. let ProvinceCityArr = [];
  704. let ProvinceS = thisdata.locationProvince; //省
  705. let citys = thisdata.locationCity; //市
  706. let Areas = thisdata.locationArea; //区
  707. ProvinceCityArr.push(ProvinceS, citys, Areas);
  708. if (data.error.length || data.data.list == "") {
  709. if (data.error && data.error.length) {
  710. message.warning(data.error[0].message);
  711. }
  712. } else {
  713. this.setState({
  714. processStatus: thisdata.processStatus, //流程状态
  715. liquidationStatus: thisdata.liquidationStatus, //结算状态
  716. approval: thisdata.approval, //特批状态
  717. orderRemarks: thisdata.orderRemarks, //订单留言
  718. salesmanName: thisdata.salesmanName, //营销员名称
  719. salesmanMobile: thisdata.salesmanMobile, //营销员电话
  720. financeName: thisdata.financeName, //财务名称
  721. financeMobile: thisdata.financeMobile, //财务电话
  722. oldSalesmanName: thisdata.oldSalesmanName, //营销员名称
  723. oldSalesmanMobile: thisdata.oldSalesmanMobile, //营销员电话
  724. nowFinance: thisdata.nowFinance, //财务名称
  725. nowFinanceMobile: thisdata.nowFinanceMobile, //财务电话
  726. depName: thisdata.depName, //订单部门
  727. ProvinceCity: ProvinceCityArr[0] === null ? [] : ProvinceCityArr,
  728. postalAddress: thisdata.postalAddress //详细地址
  729. });
  730. }
  731. console.log(this.state.ProvinceCity);
  732. }.bind(this)
  733. }).always(
  734. function() {
  735. this.setState({
  736. loading: false
  737. });
  738. }.bind(this)
  739. );
  740. },
  741. //项目列表
  742. xiangmu(orderNos) {
  743. $.ajax({
  744. method: "get",
  745. dataType: "json",
  746. crossDomain: false,
  747. url: globalConfig.context + "/api/admin/newOrder/getOrderTask",
  748. data: {
  749. orderNo: orderNos
  750. },
  751. success: function(data) {
  752. let theArr = [];
  753. if (data.error.length || data.data.list == "") {
  754. if (data.error && data.error.length) {
  755. message.warning(data.error[0].message);
  756. }
  757. } else {
  758. for (let i = 0; i < data.data.length; i++) {
  759. let thisdata = data.data[i];
  760. theArr.push({
  761. key: i,
  762. id: thisdata.id,
  763. orderNo: thisdata.orderNo, //订单编号
  764. commodityId: thisdata.commodityId, //项目ID
  765. commodityName: thisdata.commodityName, //项目名称
  766. cname: thisdata.cname, //项目类别
  767. commodityPrice: thisdata.commodityPrice, //项目价格
  768. commodityQuantity: thisdata.commodityQuantity, //项目数量
  769. main: thisdata.main, //是否为主要项目
  770. taskComment: thisdata.taskComment, //项目说明
  771. contacts: thisdata.contacts, //联系人
  772. contactsMobile: thisdata.contactsMobile, //联系人电话
  773. taskStatus: thisdata.taskStatus, //是否分配
  774. contractNo: thisdata.contractNo, //合同编号
  775. certificateNumber: thisdata.certificateNumber
  776. });
  777. }
  778. }
  779. this.setState({
  780. dataSourceX: theArr
  781. });
  782. }.bind(this)
  783. }).always(
  784. function() {
  785. this.setState({
  786. loading: false
  787. });
  788. }.bind(this)
  789. );
  790. },
  791. //导出
  792. exportExec() {
  793. let departmentName = "",
  794. depart = this.state.departmentArr || [];
  795. depart.map(item => {
  796. if (this.state.departmentId == item.id) {
  797. departmentName = item.name;
  798. return;
  799. }
  800. });
  801. let data = {
  802. departmentId: this.state.departmentId,
  803. departmentName: departmentName,
  804. salesName: this.state.orderRefundSearch, //订单负责人
  805. startTime: this.state.releaseDate[0],
  806. endTime: this.state.releaseDate[1],
  807. grantStatus: this.state.grantStatus
  808. };
  809. window.location.href =
  810. globalConfig.context +
  811. "/api/admin/orderProject/exportMyTaskList?" +
  812. $.param(data);
  813. },
  814. //关闭详情
  815. visitCancel() {
  816. this.setState({
  817. visible: false,
  818. speVisible: false
  819. });
  820. this.reset();
  821. },
  822. visitOk() {
  823. this.setState({
  824. visible: false,
  825. speVisible: false
  826. });
  827. this.reset();
  828. },
  829. closeDesc(e, s) {
  830. this.state.showDesc = e;
  831. if (s) {
  832. this.loadData(this.state.page);
  833. }
  834. },
  835. closeAssign(e, s) {
  836. this.state.roleName = "";
  837. this.state.assignVisible = e;
  838. if (s) {
  839. this.loadData(this.state.page);
  840. }
  841. },
  842. //添加工时
  843. okCancel(record) {
  844. this.setState({
  845. lookVisible: true,
  846. taskId: record.id
  847. });
  848. },
  849. //测试
  850. getOrgCodeUrl(e) {
  851. this.setState({ orgCodeUrl: e });
  852. },
  853. //查看下证信息
  854. loaduserss(record) {
  855. $.ajax({
  856. method: "get",
  857. dataType: "json",
  858. crossDomain: false,
  859. url: globalConfig.context + "/api/admin/orderProject/selectTaskProgress",
  860. data: {
  861. tid: record.id
  862. },
  863. success: function(data) {
  864. let theArr = [];
  865. let thisData = [];
  866. if (!thisData) {
  867. if (data.error && data.error.length) {
  868. message.warning(data.error[0].message);
  869. }
  870. thisData = {};
  871. } else {
  872. for (let i = 0; i < data.data.length; i++) {
  873. thisData = data.data[i];
  874. theArr.push({
  875. num: i + 1,
  876. key: i,
  877. id: thisData.id, //编号
  878. alreadyNumber: thisData.alreadyNumber, //下证数
  879. licenceTimes: thisData.licenceTimes, //下证时间
  880. notCount: thisData.notCount, //未下证数
  881. flag: true
  882. });
  883. }
  884. this.setState({
  885. contactList: theArr
  886. });
  887. }
  888. }.bind(this)
  889. }).always(
  890. function() {
  891. this.setState({
  892. loading: false
  893. });
  894. }.bind(this)
  895. );
  896. },
  897. //下证信息保存
  898. contactSave(record) {
  899. if (!record.licenceTimes) {
  900. message.warning("下证日期不能为空");
  901. return;
  902. }
  903. if (!record.alreadyNumber) {
  904. message.warning("下证数量不能为空");
  905. return;
  906. }
  907. this.setState({
  908. loading: true
  909. });
  910. $.ajax({
  911. url: globalConfig.context + "/api/admin/orderProject/createTaskProgress",
  912. method: "post",
  913. data: {
  914. taskId: this.state.id,
  915. licenceTimes: record.licenceTimes,
  916. alreadyNumber: record.alreadyNumber
  917. }
  918. }).done(
  919. function(data) {
  920. this.setState({
  921. loading: false
  922. });
  923. if (!data.error.length) {
  924. message.success("保存成功!");
  925. record.flag = true;
  926. this.loaduserss(this.state.dataArr);
  927. } else {
  928. message.warning(data.error[0].message);
  929. }
  930. }.bind(this)
  931. );
  932. },
  933. //下证信息删除
  934. contactDele(record) {
  935. this.setState({
  936. loading: true
  937. });
  938. $.ajax({
  939. url: globalConfig.context + "/api/admin/orderProject/delectTaskProgress",
  940. method: "post",
  941. data: {
  942. id: record.id
  943. }
  944. }).done(
  945. function(data) {
  946. this.setState({
  947. loading: false
  948. });
  949. if (!data.error.length) {
  950. this.loaduserss(this.state.dataArr);
  951. } else {
  952. message.warning(data.error[0].message);
  953. }
  954. }.bind(this)
  955. );
  956. },
  957. //点击新增下证信息
  958. addcontact() {
  959. this.state.contactList.push({
  960. num: this.state.contactList.length + 1,
  961. key: this.state.contactList.length,
  962. licenceTimes: "",
  963. alreadyNumber: "",
  964. notCount: "",
  965. dels: "",
  966. flag: false,
  967. aflag: false
  968. });
  969. this.setState({
  970. contactList: this.state.contactList
  971. });
  972. },
  973. //删除下证信息
  974. confirmDelet(record) {
  975. this.state.contactList.splice(record.key, 1);
  976. this.setState({
  977. contactList: this.state.contactList
  978. });
  979. if (record.id) {
  980. this.contactDele(record);
  981. }
  982. },
  983. caozuorizhi() {
  984. this.setState({
  985. visibleA: true
  986. });
  987. $.ajax({
  988. method: "get",
  989. dataType: "json",
  990. crossDomain: false,
  991. url: globalConfig.context + "/api/admin/orderProject/TaskLogList",
  992. data: {
  993. id: this.state.id
  994. },
  995. success: function(data) {
  996. let theArr = [];
  997. if (data.error.length || data.data.list == "") {
  998. if (data.error && data.error.length) {
  999. message.warning(data.error[0].message);
  1000. }
  1001. } else {
  1002. for (let i = 0; i < data.data.length; i++) {
  1003. let thisdata = data.data[i];
  1004. theArr.push({
  1005. key: i,
  1006. id: thisdata.id, //日志ID
  1007. content: thisdata.content, //流程
  1008. taskId: thisdata.taskId, //项目ID
  1009. aName: thisdata.aName, //负责人
  1010. createTimes: thisdata.createTimes //时间
  1011. });
  1012. }
  1013. }
  1014. this.setState({
  1015. dataSourceA: theArr
  1016. });
  1017. }.bind(this)
  1018. }).always(
  1019. function() {
  1020. this.setState({
  1021. loading: false
  1022. });
  1023. }.bind(this)
  1024. );
  1025. },
  1026. //关闭操作工时
  1027. visitCancelA() {
  1028. this.setState({
  1029. visibleA: false
  1030. });
  1031. },
  1032. nextCancel() {
  1033. this.setState({
  1034. addnextVisible: false
  1035. });
  1036. },
  1037. //点击打卡项目详情
  1038. tableRowClickX(record) {
  1039. this.setState({
  1040. jid: record.id, //项目ID
  1041. kid: record.commodityId, //商品ID
  1042. commodityName: record.commodityName, //金额
  1043. commodityPrice: record.commodityPrice, //金额
  1044. commodityQuantity: record.commodityQuantity, //数量
  1045. taskComment: record.taskComment, //备注
  1046. main: record.main.toString(), //是否为主要
  1047. addnextVisible: true,
  1048. addState: 0
  1049. });
  1050. },
  1051. //关闭添加工时
  1052. noCancel() {
  1053. this.setState({
  1054. lookVisible: false
  1055. });
  1056. this.reset();
  1057. },
  1058. search() {
  1059. this.loadData();
  1060. },
  1061. reset() {
  1062. this.state.id = ""; //项目编号
  1063. this.state.orderNo = ""; //订单编号
  1064. this.state.projectStatus = undefined; //项目状态
  1065. this.state.contractNoSearch = undefined;
  1066. this.state.projectStatusSearch = undefined; //项目状态
  1067. this.state.taskStatuSearch = undefined; //项目状态
  1068. this.state.taskComment = ""; //说明
  1069. this.state.startDate = ""; //启动日期
  1070. this.state.endDate = ""; //结束日期
  1071. this.state.acceptDate = ""; //受理日期
  1072. this.state.reviewDate = ""; //评审日期
  1073. this.state.publicityDate = ""; //公示日期
  1074. this.state.licenceDate = ""; //发证日期
  1075. attachmentUrl: []; //附件
  1076. this.state.contacts = ""; //联系人
  1077. this.state.contactMobile = ""; //联系人电话
  1078. this.state.legalPerson = ""; //法人
  1079. this.state.legalPersonTel = ""; //法人电话
  1080. this.state.taskId = ""; //项目编号
  1081. this.state.hours = ""; //工时
  1082. this.state.remarks = ""; //说明
  1083. this.state.taskDate = ""; //日期
  1084. this.state.taskComment = ""; //说明
  1085. this.state.nameSearch = "";
  1086. this.state.releaseDate = [];
  1087. this.state.orderNoSearch = "";
  1088. this.state.taskNoSearch = "";
  1089. this.state.outsourceName = "";
  1090. this.state.outsourcePrice = undefined;
  1091. this.state.distribution = undefined;
  1092. this.state.departmenttSearch = undefined;
  1093. this.loadData(this.state.page);
  1094. },
  1095. searchSwitch() {
  1096. this.setState({
  1097. searchMore: !this.state.searchMore
  1098. });
  1099. },
  1100. //部门
  1101. departmentList() {
  1102. this.setState({
  1103. loading: true
  1104. });
  1105. $.ajax({
  1106. method: "get",
  1107. dataType: "json",
  1108. crossDomain: false,
  1109. url: globalConfig.context + "/api/admin/organization/selectSuperId",
  1110. data: {},
  1111. success: function(data) {
  1112. let thedata = data.data;
  1113. let theArr = [];
  1114. if (!thedata) {
  1115. if (data.error && data.error.length) {
  1116. message.warning(data.error[0].message);
  1117. }
  1118. thedata = {};
  1119. } else {
  1120. thedata.map(function(item, index) {
  1121. theArr.push({
  1122. key: index,
  1123. name: item.name,
  1124. id: item.id
  1125. });
  1126. });
  1127. }
  1128. this.setState({
  1129. departmentArr: theArr
  1130. });
  1131. }.bind(this)
  1132. }).always(
  1133. function() {
  1134. this.setState({
  1135. loading: false
  1136. });
  1137. }.bind(this)
  1138. );
  1139. },
  1140. changeList(arr) {
  1141. const newArr = [];
  1142. this.state.columns.forEach(item => {
  1143. arr.forEach(val => {
  1144. if (val === item.title) {
  1145. newArr.push(item);
  1146. }
  1147. });
  1148. });
  1149. this.setState({
  1150. changeList: newArr
  1151. });
  1152. },
  1153. timeClose() {
  1154. this.setState({
  1155. timeVisible: false
  1156. })
  1157. },
  1158. timeDetail(record) {
  1159. console.log(record);
  1160. this.setState({
  1161. loading: true,
  1162. recordHour: record.hours
  1163. });
  1164. $.ajax({
  1165. method: "get",
  1166. dataType: "json",
  1167. crossDomain: false,
  1168. url:
  1169. globalConfig.context + "/api/admin/orderProject/taskHoursDetailsList",
  1170. data: {
  1171. taskId: record.id
  1172. },
  1173. success: function(data) {
  1174. if (data.error && data.error.length) {
  1175. message.warning(data.error[0].message);
  1176. }else {
  1177. this.setState({
  1178. dataSourceTime: data.data
  1179. });
  1180. console.log(this.state.dataSourceTime);
  1181. }
  1182. }.bind(this)
  1183. }).always(
  1184. function() {
  1185. this.setState({
  1186. loading: false
  1187. });
  1188. }.bind(this)
  1189. );
  1190. },
  1191. showDeleteConfirm(num,fn) {
  1192. let text = getProjectStatus(num)
  1193. confirm({
  1194. title: <p style={{ fontSize: 16, fontWeight: 900 }}>注意</p>,
  1195. content: <p style={{ fontWeight: 900, color: "red" }}>当前的项目状态为{text},保存后将触发对应的催款节点!!!您确定保存?</p>,
  1196. okText: '确定',
  1197. okType: 'danger',
  1198. cancelText: '取消',
  1199. onOk() {
  1200. fn();
  1201. },
  1202. onCancel() {
  1203. },
  1204. });
  1205. },
  1206. render() {
  1207. const formItemLayout = {
  1208. labelCol: { span: 8 },
  1209. wrapperCol: { span: 14 }
  1210. };
  1211. let departmentArr = this.state.departmentArr || [];
  1212. return (
  1213. <div className="user-content">
  1214. <ShowModalDiv ShowModal={this.state.showModal} />
  1215. <div className="content-title" style={{ marginBottom: 10 }}>
  1216. <span style={{ fontWeight: 900, fontSize: 16 }}>项目派单管理</span>
  1217. </div>
  1218. <Tabs defaultActiveKey="2" onChange={this.callback} className="test" bordered>
  1219. <TabPane tab="更改表格显示数据" key="1">
  1220. <div style={{ marginLeft: 10 }}>
  1221. <ChooseList
  1222. columns={this.state.columns}
  1223. changeFn={this.changeList}
  1224. changeList={this.state.changeList}
  1225. top={55}
  1226. margin={11}
  1227. />
  1228. </div>
  1229. </TabPane>
  1230. <TabPane tab="搜索" key="2">
  1231. <div className="user-search" style={{ marginLeft: 10 }}>
  1232. <Input
  1233. placeholder="客户名称"
  1234. value={this.state.nameSearch}
  1235. onChange={e => {
  1236. this.setState({ nameSearch: e.target.value });
  1237. }}
  1238. />
  1239. <Input
  1240. placeholder="订单编号"
  1241. value={this.state.orderNoSearch}
  1242. onChange={e => {
  1243. this.setState({ orderNoSearch: e.target.value });
  1244. }}
  1245. />
  1246. <Input
  1247. placeholder="合同编号"
  1248. value={this.state.contractNoSearch}
  1249. onChange={e => {
  1250. this.setState({ contractNoSearch: e.target.value });
  1251. }}
  1252. />
  1253. <Input
  1254. placeholder="项目编号"
  1255. value={this.state.taskNoSearch}
  1256. onChange={e => {
  1257. this.setState({ taskNoSearch: e.target.value });
  1258. }}
  1259. />
  1260. <Select
  1261. placeholder="选择部门"
  1262. style={{ width: 150, marginRight: "10px" }}
  1263. value={this.state.departmenttSearch}
  1264. onChange={e => {
  1265. this.setState({ departmenttSearch: e });
  1266. }}
  1267. >
  1268. {departmentArr.map(function(item) {
  1269. return (
  1270. <Select.Option key={item.id}>{item.name}</Select.Option>
  1271. );
  1272. })}
  1273. </Select>
  1274. <Select
  1275. placeholder="项目状态"
  1276. style={{ width: 150, marginRight: "10px" }}
  1277. value={this.state.projectStatusSearch}
  1278. onChange={e => {
  1279. this.setState({ projectStatusSearch: e });
  1280. console.log(this.state.projectStatusSearch);
  1281. }}
  1282. >
  1283. {projectStatus.map(function(item) {
  1284. return (
  1285. <Select.Option key={item.value}>{item.key}</Select.Option>
  1286. );
  1287. })}
  1288. </Select>
  1289. <Button type="primary" onClick={this.search}>
  1290. 搜索
  1291. </Button>
  1292. <Button onClick={this.reset}>重置</Button>
  1293. {/* <span>更多搜索<Switch defaultChecked={false} onChange={this.searchSwitch.bind(this)} /></span>
  1294. <div className="search-more" style={this.state.searchMore ? { display: 'none' } : {}}>
  1295. <span>订单时间 :</span>
  1296. <RangePicker
  1297. value={[this.state.releaseDate[0] ? moment(this.state.releaseDate[0]) : null,
  1298. this.state.releaseDate[1] ? moment(this.state.releaseDate[1]) : null]}
  1299. onChange={(data, dataString) => { this.setState({ releaseDate: dataString }); }} />
  1300. </div> */}
  1301. </div>
  1302. </TabPane>
  1303. <TabPane tab="导出Excel" key="3">
  1304. <Button
  1305. type="primary"
  1306. style={{ margin: "11px 0 10px 10px" }}
  1307. onClick={this.exportExec}
  1308. >
  1309. 导出Excel
  1310. </Button>
  1311. </TabPane>
  1312. {/* <TabPane tab="批量操作" key="6">
  1313. <Button
  1314. type="primary"
  1315. disabled={this.state.selectedRowKeys.length == 0}
  1316. style={{ margin: "0px 0px 10px 10px" }}
  1317. onClick={e => {
  1318. e.stopPropagation(),
  1319. this.evaluateY(this.state.selectedRowKeys, "财务专员");
  1320. }}
  1321. >
  1322. 转交
  1323. </Button>
  1324. </TabPane> */}
  1325. </Tabs>
  1326. {/* <div className="user-search">
  1327. <Input
  1328. placeholder="客户名称"
  1329. value={this.state.nameSearch}
  1330. onChange={e => {
  1331. this.setState({ nameSearch: e.target.value });
  1332. }}
  1333. />
  1334. <Input
  1335. placeholder="订单编号"
  1336. value={this.state.orderNoSearch}
  1337. onChange={e => {
  1338. this.setState({ orderNoSearch: e.target.value });
  1339. }}
  1340. />
  1341. <Input
  1342. placeholder="项目编号"
  1343. value={this.state.taskNoSearch}
  1344. onChange={e => {
  1345. this.setState({ taskNoSearch: e.target.value });
  1346. }}
  1347. />
  1348. <Select
  1349. placeholder="选择部门"
  1350. style={{ width: 150, marginRight: "10px" }}
  1351. value={this.state.departmenttSearch}
  1352. onChange={e => {
  1353. this.setState({ departmenttSearch: e });
  1354. }}
  1355. >
  1356. {departmentArr.map(function(item) {
  1357. return <Select.Option key={item.id}>{item.name}</Select.Option>;
  1358. })}
  1359. </Select>
  1360. <Button type="primary" onClick={this.search}>
  1361. 搜索
  1362. </Button>
  1363. <Button onClick={this.reset}>重置</Button>
  1364. <Button
  1365. type="primary"
  1366. style={{ marginLeft: "10px" }}
  1367. onClick={this.exportExec}
  1368. >
  1369. 导出Excel
  1370. </Button>
  1371. <span>更多搜索<Switch defaultChecked={false} onChange={this.searchSwitch.bind(this)} /></span>
  1372. <div className="search-more" style={this.state.searchMore ? { display: 'none' } : {}}>
  1373. <span>订单时间 :</span>
  1374. <RangePicker
  1375. value={[this.state.releaseDate[0] ? moment(this.state.releaseDate[0]) : null,
  1376. this.state.releaseDate[1] ? moment(this.state.releaseDate[1]) : null]}
  1377. onChange={(data, dataString) => { this.setState({ releaseDate: dataString }); }} />
  1378. </div>
  1379. </div> */}
  1380. <div className="patent-table">
  1381. <Spin spinning={this.state.loading}>
  1382. <Table
  1383. columns={
  1384. this.state.changeList == undefined
  1385. ? this.state.columns
  1386. : this.state.changeList
  1387. }
  1388. dataSource={this.state.dataSource}
  1389. pagination={this.state.pagination}
  1390. scroll={{ x: "max-content", y: 0 }}
  1391. onRowClick={this.tableRowClick.bind(this)}
  1392. bordered
  1393. size={"small"}
  1394. />
  1395. </Spin>
  1396. </div>
  1397. <Assign
  1398. title="项目"
  1399. selApi={"/api/admin/orderProject/projectDistribution"}
  1400. data={this.state.assignData}
  1401. showDesc={this.state.assignVisible}
  1402. closeDesc={this.closeAssign.bind(this)}
  1403. fenpaiData={8}
  1404. specially={0}
  1405. roleName={this.state.nub}
  1406. requestMethod={"post"}
  1407. flag={this.state.flag}
  1408. all={this.state}
  1409. />
  1410. <Modal
  1411. className="customeDetails"
  1412. footer=""
  1413. title="项目概况"
  1414. width="900px"
  1415. visible={this.state.visible}
  1416. onOk={this.visitOk}
  1417. onCancel={this.visitCancel}
  1418. >
  1419. <Form
  1420. layout="horizontal"
  1421. onSubmit={this.handleSubmit}
  1422. id="demand-form"
  1423. style={{ paddingBottom: "00px" }}
  1424. >
  1425. <Spin spinning={this.state.loading}>
  1426. <div className="clearfix">
  1427. <div className="clearfix">
  1428. <FormItem
  1429. className="half-item"
  1430. {...formItemLayout}
  1431. label="当前项目情况"
  1432. >
  1433. <Radio.Group
  1434. value={this.state.status}
  1435. onChange={e => {
  1436. this.setState({ status: e.target.value });
  1437. }}
  1438. >
  1439. <Radio value={0}>开启</Radio>
  1440. <Radio value={1}>暂停</Radio>
  1441. </Radio.Group>
  1442. <Button
  1443. type="primary"
  1444. size="small"
  1445. style={{ marginTop: "5px", position: "absolute" }}
  1446. onClick={this.caozuorizhi}
  1447. >
  1448. 操作日志
  1449. </Button>
  1450. </FormItem>
  1451. <FormItem
  1452. className="half-item"
  1453. {...formItemLayout}
  1454. label="合同编号"
  1455. >
  1456. <span>{this.state.contractNo}</span>
  1457. </FormItem>
  1458. </div>
  1459. <div className="clearfix">
  1460. <FormItem
  1461. className="half-item"
  1462. {...formItemLayout}
  1463. label="项目状态"
  1464. >
  1465. <Select
  1466. placeholder="选择项目状态"
  1467. style={{ width: "200px" }}
  1468. value={this.state.projectStatus}
  1469. onChange={e => {
  1470. this.setState({ projectStatus: e });
  1471. }}
  1472. >
  1473. {projectStatus.map(function(item) {
  1474. return (
  1475. <Select.Option key={item.value}>
  1476. {item.key}
  1477. </Select.Option>
  1478. );
  1479. })}
  1480. </Select>
  1481. </FormItem>
  1482. <FormItem
  1483. className="half-item"
  1484. {...formItemLayout}
  1485. label="是否特批"
  1486. >
  1487. <span>{getApproval(this.state.approval)}</span>
  1488. </FormItem>
  1489. <FormItem
  1490. className="half-item"
  1491. {...formItemLayout}
  1492. label="结算状态"
  1493. >
  1494. <span>
  1495. {getLiquidationStatus(this.state.liquidationStatus)}
  1496. </span>
  1497. </FormItem>
  1498. <FormItem
  1499. className="half-item"
  1500. {...formItemLayout}
  1501. label="流程状态"
  1502. >
  1503. <span>{getProcessStatus(this.state.processStatus)}</span>
  1504. </FormItem>
  1505. <FormItem
  1506. className="half-item"
  1507. {...formItemLayout}
  1508. label="订单编号"
  1509. >
  1510. <span>{this.state.orderNo}</span>
  1511. </FormItem>
  1512. </div>
  1513. <div className="clearfix">
  1514. <FormItem
  1515. className="half-item"
  1516. {...formItemLayout}
  1517. label="满意度表格"
  1518. >
  1519. <Radio.Group
  1520. value={this.state.formRetrieve}
  1521. onChange={e => {
  1522. this.setState({ formRetrieve: e.target.value });
  1523. }}
  1524. >
  1525. <Radio value={0}>未收回</Radio>
  1526. <Radio value={1}>已收回</Radio>
  1527. <Radio value={2}>其他</Radio>
  1528. </Radio.Group>
  1529. </FormItem>
  1530. <FormItem
  1531. className="half-item"
  1532. {...formItemLayout}
  1533. label="退单"
  1534. >
  1535. <Radio.Group
  1536. value={this.state.taskRefund}
  1537. onChange={e => {
  1538. this.setState({ taskRefund: e.target.value });
  1539. }}
  1540. >
  1541. <Radio value={0}>已完成</Radio>
  1542. <Radio value={1}>未完成</Radio>
  1543. <Radio value={2}>其他</Radio>
  1544. </Radio.Group>
  1545. </FormItem>
  1546. </div>
  1547. <div className="clearfix">
  1548. {
  1549. <FormItem
  1550. className="half-item"
  1551. {...formItemLayout}
  1552. label="(满意度)备注"
  1553. >
  1554. <Input
  1555. type="textarea"
  1556. placeholder="请输入备注"
  1557. rows={2}
  1558. value={this.state.retrieveContent}
  1559. onChange={e => {
  1560. this.setState({ retrieveContent: e.target.value });
  1561. }}
  1562. />
  1563. </FormItem>
  1564. }
  1565. {
  1566. <FormItem
  1567. className="half-item"
  1568. {...formItemLayout}
  1569. label="(退单)备注"
  1570. >
  1571. <Input
  1572. type="textarea"
  1573. placeholder="请输入备注"
  1574. rows={2}
  1575. value={this.state.refundContent}
  1576. onChange={e => {
  1577. this.setState({ refundContent: e.target.value });
  1578. }}
  1579. />
  1580. </FormItem>
  1581. }
  1582. </div>
  1583. <div className="clearfix">
  1584. <h3 className="sub-title">订单负责人信息</h3>
  1585. <FormItem
  1586. className="half-item"
  1587. {...formItemLayout}
  1588. label="负责人"
  1589. >
  1590. <span>
  1591. {this.state.salesmanName + "(" + this.state.depName + ")"}
  1592. </span>
  1593. </FormItem>
  1594. <FormItem
  1595. className="half-item"
  1596. {...formItemLayout}
  1597. label="负责人电话"
  1598. >
  1599. <span>{this.state.salesmanMobile}</span>
  1600. </FormItem>
  1601. <FormItem
  1602. className="half-item"
  1603. {...formItemLayout}
  1604. label="当前财务负责人"
  1605. >
  1606. <span>{this.state.nowFinance}</span>
  1607. </FormItem>
  1608. <FormItem
  1609. className="half-item"
  1610. {...formItemLayout}
  1611. label="当前财务负责人电话"
  1612. >
  1613. <span>{this.state.nowFinanceMobile}</span>
  1614. </FormItem>
  1615. <FormItem
  1616. className="half-item"
  1617. {...formItemLayout}
  1618. style={{ opacity: ".5" }}
  1619. label="原负责人"
  1620. >
  1621. <span>{this.state.oldSalesmanName}</span>
  1622. </FormItem>
  1623. <FormItem
  1624. className="half-item"
  1625. {...formItemLayout}
  1626. style={{ opacity: ".5" }}
  1627. label="原负责人电话"
  1628. >
  1629. <span>{this.state.oldSalesmanMobile}</span>
  1630. </FormItem>
  1631. <FormItem
  1632. className="half-item"
  1633. {...formItemLayout}
  1634. style={{ opacity: ".5" }}
  1635. label="实际财务操作人"
  1636. >
  1637. <span>{this.state.financeName}</span>
  1638. </FormItem>
  1639. <FormItem
  1640. className="half-item"
  1641. {...formItemLayout}
  1642. style={{ opacity: ".5" }}
  1643. label="实际财务操作人电话"
  1644. >
  1645. <span>{this.state.financeMobile}</span>
  1646. </FormItem>
  1647. </div>
  1648. <div className="clearfix">
  1649. <h3 className="sub-title">外包信息</h3>
  1650. <FormItem
  1651. className="half-item"
  1652. {...formItemLayout}
  1653. label="外包公司"
  1654. >
  1655. <Input
  1656. value={this.state.outsourceName}
  1657. onChange={e => {
  1658. this.setState({
  1659. outsourceName: e.target.value
  1660. });
  1661. }}
  1662. placeholder="请输入外包公司"
  1663. style={{ width: "200px" }}
  1664. />
  1665. </FormItem>
  1666. <FormItem
  1667. className="half-item"
  1668. {...formItemLayout}
  1669. label="外包成本(万元)"
  1670. >
  1671. <Input
  1672. value={this.state.outsourcePrice}
  1673. onChange={e => {
  1674. this.setState({
  1675. outsourcePrice: e.target.value
  1676. });
  1677. }}
  1678. placeholder="请输入外包成本"
  1679. style={{ width: "200px" }}
  1680. />
  1681. </FormItem>
  1682. </div>
  1683. {/*<hr style={{border:'1px dashed #aaa', width:"90%",margin:'auto'}}/>*/}
  1684. <div className="clearfix">
  1685. <h3 className="sub-title">联系信息</h3>
  1686. <FormItem
  1687. className="half-item"
  1688. {...formItemLayout}
  1689. label="客户名称"
  1690. >
  1691. <span>{this.state.userName}</span>
  1692. </FormItem>
  1693. <FormItem
  1694. className="half-item"
  1695. {...formItemLayout}
  1696. label="企业法人"
  1697. >
  1698. <Input
  1699. placeholder="请输入法人名称"
  1700. value={this.state.legalPerson}
  1701. style={{ width: "200px" }}
  1702. onChange={e => {
  1703. this.setState({ legalPerson: e.target.value });
  1704. }}
  1705. ref="commodityQuantity"
  1706. />
  1707. </FormItem>
  1708. <FormItem
  1709. className="half-item"
  1710. {...formItemLayout}
  1711. label="法人电话"
  1712. >
  1713. <Input
  1714. placeholder="请输入法人电话"
  1715. value={this.state.legalPersonTel}
  1716. style={{ width: "200px" }}
  1717. onChange={e => {
  1718. this.setState({ legalPersonTel: e.target.value });
  1719. }}
  1720. ref="commodityQuantity"
  1721. />
  1722. </FormItem>
  1723. <FormItem
  1724. className="half-item"
  1725. {...formItemLayout}
  1726. label="客户联系人"
  1727. >
  1728. <Input
  1729. placeholder="请输入联系人名称"
  1730. value={this.state.contacts}
  1731. style={{ width: "200px" }}
  1732. onChange={e => {
  1733. this.setState({ contacts: e.target.value });
  1734. }}
  1735. ref="commodityQuantity"
  1736. />
  1737. </FormItem>
  1738. <FormItem
  1739. className="half-item"
  1740. {...formItemLayout}
  1741. label="联系人电话"
  1742. >
  1743. <Input
  1744. placeholder="请输入联系人电话"
  1745. value={this.state.contactMobile}
  1746. style={{ width: "200px" }}
  1747. onChange={e => {
  1748. this.setState({ contactMobile: e.target.value });
  1749. }}
  1750. ref="commodityQuantity"
  1751. />
  1752. </FormItem>
  1753. <FormItem
  1754. className="half-item"
  1755. {...formItemLayout}
  1756. label="企业地址"
  1757. >
  1758. <Cascader
  1759. options={areaSelect()}
  1760. value={this.state.ProvinceCity}
  1761. placeholder="选择城市"
  1762. style={{ width: "200px" }}
  1763. onChange={e => {
  1764. this.setState({ ProvinceCity: e });
  1765. }}
  1766. />
  1767. </FormItem>
  1768. <FormItem
  1769. className="half-item"
  1770. {...formItemLayout}
  1771. label=""
  1772. ></FormItem>
  1773. <FormItem className="half-item" {...formItemLayout} label="">
  1774. <Input
  1775. placeholder="请输入详细地址"
  1776. value={this.state.postalAddress}
  1777. style={{ width: "200px", marginLeft: "12em" }}
  1778. onChange={e => {
  1779. this.setState({ postalAddress: e.target.value });
  1780. }}
  1781. ref="commodityQuantity"
  1782. />
  1783. </FormItem>
  1784. </div>
  1785. {/*<hr style={{border:'1px dashed #aaa', width:"90%",margin:'auto'}}/>*/}
  1786. <div className="clearfix">
  1787. <h3 className="sub-title">项目信息</h3>
  1788. <FormItem
  1789. className="half-item"
  1790. {...formItemLayout}
  1791. label="项目编号"
  1792. >
  1793. <span>{this.state.id}</span>
  1794. </FormItem>
  1795. <FormItem
  1796. className="half-item"
  1797. {...formItemLayout}
  1798. label="项目名称"
  1799. >
  1800. <span>{this.state.taskName}</span>
  1801. </FormItem>
  1802. <FormItem
  1803. className="half-item"
  1804. {...formItemLayout}
  1805. label="项目状态"
  1806. >
  1807. <Select
  1808. placeholder="选择项目状态"
  1809. style={{ width: "200px" }}
  1810. value={this.state.taskStatus}
  1811. onChange={e => {
  1812. this.setState({ taskStatus: e });
  1813. }}
  1814. >
  1815. {taskStatus.map(function(item) {
  1816. return (
  1817. <Select.Option key={item.value}>
  1818. {item.key}
  1819. </Select.Option>
  1820. );
  1821. })}
  1822. </Select>
  1823. </FormItem>
  1824. <FormItem
  1825. className="half-item"
  1826. {...formItemLayout}
  1827. label="项目类别"
  1828. >
  1829. <span>{this.state.cname}</span>
  1830. </FormItem>
  1831. <FormItem
  1832. className="half-item"
  1833. {...formItemLayout}
  1834. label="证书编号"
  1835. >
  1836. <Input
  1837. placeholder="请输入证书编号"
  1838. value={this.state.certificateNumber}
  1839. style={{ width: "200px" }}
  1840. onChange={e => {
  1841. this.setState({ certificateNumber: e.target.value });
  1842. }}
  1843. ref="commodityQuantity"
  1844. />
  1845. </FormItem>
  1846. </div>
  1847. <div className="clearfix">
  1848. <h3 className="sub-title">申报系统账户信息</h3>
  1849. {/*<span style={{color:'red'}}>注:仅技术部可见</span>*/}
  1850. <FormItem
  1851. className="half-item"
  1852. {...formItemLayout}
  1853. label="用户名"
  1854. >
  1855. <Input
  1856. placeholder="请输入用户名"
  1857. value={this.state.declareUser}
  1858. style={{ width: "200px" }}
  1859. onChange={e => {
  1860. this.setState({ declareUser: e.target.value });
  1861. }}
  1862. />
  1863. </FormItem>
  1864. <FormItem
  1865. className="half-item"
  1866. {...formItemLayout}
  1867. label="密码"
  1868. >
  1869. <Input
  1870. placeholder="请输入密码"
  1871. value={this.state.declarePwd}
  1872. style={{ width: "200px" }}
  1873. onChange={e => {
  1874. this.setState({ declarePwd: e.target.value });
  1875. }}
  1876. />
  1877. </FormItem>
  1878. </div>
  1879. <div className="clearfix">
  1880. <h3 className="sub-title">项目申报进度</h3>
  1881. <FormItem
  1882. className="half-item"
  1883. {...formItemLayout}
  1884. label="启动时间"
  1885. >
  1886. <DatePicker
  1887. style={{
  1888. marginTop: "2px",
  1889. width: "200px",
  1890. height: "32px"
  1891. }}
  1892. showTime
  1893. format="YYYY-MM-DD"
  1894. onOk={() => {}}
  1895. value={
  1896. this.state.startDate
  1897. ? moment(this.state.startDate)
  1898. : null
  1899. }
  1900. onChange={(data, dataString) => {
  1901. this.setState({ startDate: dataString });
  1902. }}
  1903. />
  1904. </FormItem>
  1905. <FormItem
  1906. className="half-item"
  1907. {...formItemLayout}
  1908. label="完成时间"
  1909. >
  1910. <DatePicker
  1911. style={{
  1912. marginTop: "2px",
  1913. width: "200px",
  1914. height: "32px"
  1915. }}
  1916. showTime
  1917. format="YYYY-MM-DD"
  1918. onOk={() => {}}
  1919. value={
  1920. this.state.endDate ? moment(this.state.endDate) : null
  1921. }
  1922. onChange={(data, dataString) => {
  1923. this.setState({ endDate: dataString });
  1924. }}
  1925. />
  1926. </FormItem>
  1927. <FormItem
  1928. className="half-item"
  1929. {...formItemLayout}
  1930. label="受理时间"
  1931. >
  1932. <DatePicker
  1933. style={{
  1934. marginTop: "2px",
  1935. width: "200px",
  1936. height: "32px"
  1937. }}
  1938. showTime
  1939. format="YYYY-MM-DD"
  1940. onOk={() => {}}
  1941. value={
  1942. this.state.acceptDate
  1943. ? moment(this.state.acceptDate)
  1944. : null
  1945. }
  1946. onChange={(data, dataString) => {
  1947. this.setState({ acceptDate: dataString });
  1948. }}
  1949. />
  1950. </FormItem>
  1951. <FormItem
  1952. className="half-item"
  1953. {...formItemLayout}
  1954. label="评审时间"
  1955. >
  1956. <DatePicker
  1957. style={{
  1958. marginTop: "2px",
  1959. width: "200px",
  1960. height: "32px"
  1961. }}
  1962. showTime
  1963. format="YYYY-MM-DD"
  1964. onOk={() => {}}
  1965. value={
  1966. this.state.reviewDate
  1967. ? moment(this.state.reviewDate)
  1968. : null
  1969. }
  1970. onChange={(data, dataString) => {
  1971. this.setState({ reviewDate: dataString });
  1972. }}
  1973. />
  1974. </FormItem>
  1975. <FormItem
  1976. className="half-item"
  1977. {...formItemLayout}
  1978. label="公示时间"
  1979. >
  1980. <DatePicker
  1981. style={{
  1982. marginTop: "2px",
  1983. width: "200px",
  1984. height: "32px"
  1985. }}
  1986. showTime
  1987. format="YYYY-MM-DD"
  1988. onOk={() => {}}
  1989. value={
  1990. this.state.publicityDate
  1991. ? moment(this.state.publicityDate)
  1992. : null
  1993. }
  1994. onChange={(data, dataString) => {
  1995. this.setState({ publicityDate: dataString });
  1996. }}
  1997. />
  1998. </FormItem>
  1999. <FormItem
  2000. className="half-item"
  2001. {...formItemLayout}
  2002. label="发证时间"
  2003. >
  2004. <DatePicker
  2005. style={{
  2006. marginTop: "2px",
  2007. width: "200px",
  2008. height: "32px"
  2009. }}
  2010. showTime
  2011. format="YYYY-MM-DD"
  2012. onOk={() => {}}
  2013. value={
  2014. this.state.licenceDate
  2015. ? moment(this.state.licenceDate)
  2016. : null
  2017. }
  2018. onChange={(data, dataString) => {
  2019. this.setState({ licenceDate: dataString });
  2020. }}
  2021. />
  2022. </FormItem>
  2023. <FormItem
  2024. className="half-item"
  2025. {...formItemLayout}
  2026. label="立项金额(万元)"
  2027. >
  2028. <Input
  2029. placeholder="请输入立项金额"
  2030. value={this.state.setUpAmount}
  2031. style={{ width: "200px" }}
  2032. onChange={e => {
  2033. this.setState({ setUpAmount: e.target.value });
  2034. }}
  2035. ref="commodityQuantity"
  2036. />
  2037. </FormItem>
  2038. <FormItem
  2039. className="half-item"
  2040. {...formItemLayout}
  2041. label="是否到款"
  2042. >
  2043. <Radio.Group
  2044. value={this.state.arrivalMoney}
  2045. onChange={e => {
  2046. this.setState({ arrivalMoney: e.target.value });
  2047. }}
  2048. >
  2049. <Radio value={0}>未到企业</Radio>
  2050. <Radio value={1}>已到企业</Radio>
  2051. </Radio.Group>
  2052. </FormItem>
  2053. </div>
  2054. <div className="clearfix">
  2055. <FormItem
  2056. labelCol={{ span: 3 }}
  2057. wrapperCol={{ span: 16 }}
  2058. label="附件"
  2059. >
  2060. <Picture
  2061. fileList={e => {
  2062. this.setState({ attachmentUrl: e });
  2063. }}
  2064. pictureUrl={this.state.attachmentUrl}
  2065. visible={this.props.visible}
  2066. data={{
  2067. sign: "order_task_file",
  2068. url: "/api/admin/orderProject/uploadOrderTaskFile",
  2069. number: 8
  2070. }}
  2071. />
  2072. </FormItem>
  2073. </div>
  2074. <div className="clearfix">
  2075. <FormItem
  2076. labelCol={{ span: 3 }}
  2077. wrapperCol={{ span: 16 }}
  2078. label="备注"
  2079. >
  2080. <Input
  2081. type="textarea"
  2082. placeholder="请输入备注"
  2083. rows={4}
  2084. value={this.state.taskComment}
  2085. onChange={e => {
  2086. this.setState({ taskComment: e.target.value });
  2087. }}
  2088. />
  2089. </FormItem>
  2090. </div>
  2091. <div>
  2092. <h3 className="sub-title">项目业务</h3>
  2093. {this.state.processStatus == 0 ? (
  2094. <Button
  2095. type="primary"
  2096. onClick={this.addDetailed}
  2097. style={{
  2098. float: "right",
  2099. marginRight: "50px",
  2100. marginBottom: "15px"
  2101. }}
  2102. >
  2103. 添加项目明细
  2104. </Button>
  2105. ) : (
  2106. ""
  2107. )}
  2108. </div>
  2109. <div className="patent-table">
  2110. <Spin spinning={this.state.loading}>
  2111. <Table
  2112. columns={this.state.columnsX}
  2113. dataSource={this.state.dataSourceX}
  2114. pagination={this.state.paginations}
  2115. onRowClick={this.tableRowClickX}
  2116. bordered
  2117. size="small"
  2118. />
  2119. </Spin>
  2120. </div>
  2121. <div className="clearfix">
  2122. <Button
  2123. className="cancel"
  2124. type="primary"
  2125. // onClick={this.tijiaoOk}
  2126. onClick={() => {
  2127. let num = this.state.projectStatus
  2128. if(num != 0 && num != 10 && num != 11 && num != 12 && num != 2 && num != 5 && num != 6) {
  2129. this.showDeleteConfirm(num, this.tijiaoOk)
  2130. }else {
  2131. this.tijiaoOk()
  2132. }
  2133. }}
  2134. style={{ marginLeft: "200px", marginTop: "10px" }}
  2135. htmlType="submit"
  2136. >
  2137. 保存
  2138. </Button>
  2139. <Button
  2140. className="cancel"
  2141. type="ghost"
  2142. onClick={this.visitCancel}
  2143. style={{ marginLeft: "50px", marginTop: "10px" }}
  2144. >
  2145. 取消
  2146. </Button>
  2147. </div>
  2148. </div>
  2149. </Spin>
  2150. </Form>
  2151. </Modal>
  2152. <Modal
  2153. maskClosable={false}
  2154. visible={this.state.lookVisible}
  2155. onOk={this.noCancel}
  2156. onCancel={this.noCancel}
  2157. width="500px"
  2158. title={"添加工时"}
  2159. footer=""
  2160. className="admin-desc-content"
  2161. >
  2162. <Form layout="horizontal" id="demand-form">
  2163. <Spin spinning={this.state.loading}>
  2164. <div className="clearfix">
  2165. <FormItem {...formItemLayout} label="工作日期">
  2166. <DatePicker
  2167. style={{ marginTop: "2px", width: "200px", height: "32px" }}
  2168. showTime
  2169. format="YYYY-MM-DD"
  2170. onOk={() => {}}
  2171. value={
  2172. this.state.taskDate ? moment(this.state.taskDate) : null
  2173. }
  2174. onChange={(data, dataString) => {
  2175. this.setState({ taskDate: dataString });
  2176. }}
  2177. />
  2178. </FormItem>
  2179. </div>
  2180. <div className="clearfix">
  2181. <FormItem {...formItemLayout} label="工作时长">
  2182. <Input
  2183. placeholder="请输入工作时长"
  2184. value={this.state.hours}
  2185. style={{ width: "200px" }}
  2186. onChange={e => {
  2187. this.setState({ hours: e.target.value });
  2188. }}
  2189. ref="commodityQuantity"
  2190. />
  2191. </FormItem>
  2192. </div>
  2193. <div className="clearfix">
  2194. <FormItem {...formItemLayout} label="工作内容">
  2195. <Input
  2196. type="textarea"
  2197. placeholder="请输入备注"
  2198. rows={4}
  2199. value={this.state.remarks}
  2200. onChange={e => {
  2201. this.setState({ remarks: e.target.value });
  2202. }}
  2203. />
  2204. </FormItem>
  2205. </div>
  2206. <div className="clearfix">
  2207. <Button
  2208. className="cancel"
  2209. type="primary"
  2210. onClick={this.tianjiaOk}
  2211. style={{ marginLeft: "100px" }}
  2212. htmlType="submit"
  2213. >
  2214. 确定
  2215. </Button>
  2216. <Button
  2217. className="cancel"
  2218. type="ghost"
  2219. onClick={this.noCancel}
  2220. style={{ marginLeft: "50px" }}
  2221. >
  2222. 取消
  2223. </Button>
  2224. </div>
  2225. </Spin>
  2226. </Form>
  2227. </Modal>
  2228. <Modal
  2229. maskClosable={false}
  2230. visible={this.state.addnextVisible}
  2231. onOk={this.nextCancel}
  2232. onCancel={this.nextCancel}
  2233. width="800px"
  2234. title="项目详情"
  2235. footer=""
  2236. className="admin-desc-content"
  2237. >
  2238. <Form layout="horizontal" onSubmit={this.nextSubmit} id="demand-form">
  2239. <Spin spinning={this.state.loading}>
  2240. <div className="clearfix">
  2241. <FormItem
  2242. className="half-item"
  2243. {...formItemLayout}
  2244. label="项目名称"
  2245. >
  2246. <span>{this.state.commodityName}</span>
  2247. </FormItem>
  2248. <FormItem
  2249. className="half-item"
  2250. {...formItemLayout}
  2251. label="项目数量"
  2252. >
  2253. <span>{this.state.commodityQuantity}</span>
  2254. </FormItem>
  2255. <FormItem
  2256. className="half-item"
  2257. {...formItemLayout}
  2258. label="金额(万元)"
  2259. >
  2260. <span>{this.state.commodityPrice ? "***" : 0}</span>
  2261. </FormItem>
  2262. <FormItem
  2263. className="half-item"
  2264. {...formItemLayout}
  2265. label="主要项目"
  2266. >
  2267. <span>{getboutique(this.state.main)}</span>
  2268. </FormItem>
  2269. <div className="clearfix">
  2270. <FormItem
  2271. labelCol={{ span: 3 }}
  2272. wrapperCol={{ span: 18 }}
  2273. label="服务说明"
  2274. >
  2275. <span>{this.state.taskComment}</span>
  2276. </FormItem>
  2277. </div>
  2278. </div>
  2279. </Spin>
  2280. </Form>
  2281. </Modal>
  2282. <Modal
  2283. maskClosable={false}
  2284. visible={this.state.speVisible}
  2285. onOk={this.visitOk}
  2286. onCancel={this.visitCancel}
  2287. width="900px"
  2288. title="项目概况"
  2289. footer=""
  2290. className="admin-desc-content"
  2291. >
  2292. <div className="clearfix">
  2293. <FormItem
  2294. className="half-item"
  2295. {...formItemLayout}
  2296. label="当前项目情况"
  2297. >
  2298. <Radio.Group
  2299. value={this.state.status}
  2300. onChange={e => {
  2301. this.setState({ status: e.target.value });
  2302. }}
  2303. >
  2304. <Radio value={0}>开启</Radio>
  2305. <Radio value={1}>暂停</Radio>
  2306. </Radio.Group>
  2307. <Button
  2308. type="primary"
  2309. size="small"
  2310. style={{ marginTop: "5px", position: "absolute" }}
  2311. onClick={this.caozuorizhi}
  2312. >
  2313. 操作日志
  2314. </Button>
  2315. </FormItem>
  2316. <FormItem
  2317. className="half-item"
  2318. {...formItemLayout}
  2319. label="合同编号"
  2320. >
  2321. <span>{this.state.contractNo}</span>
  2322. </FormItem>
  2323. </div>
  2324. <div className="clearfix">
  2325. <FormItem
  2326. className="half-item"
  2327. {...formItemLayout}
  2328. label="项目状态"
  2329. >
  2330. <Select
  2331. placeholder="选择项目状态"
  2332. style={{ width: "200px" }}
  2333. value={this.state.projectStatus}
  2334. onChange={e => {
  2335. this.setState({ projectStatus: e });
  2336. }}
  2337. >
  2338. {projectStatus.map(function(item) {
  2339. return (
  2340. <Select.Option key={item.value}>{item.key}</Select.Option>
  2341. );
  2342. })}
  2343. </Select>
  2344. </FormItem>
  2345. <FormItem
  2346. className="half-item"
  2347. {...formItemLayout}
  2348. label="是否特批"
  2349. >
  2350. <span>{getApproval(this.state.approval)}</span>
  2351. </FormItem>
  2352. <FormItem
  2353. className="half-item"
  2354. {...formItemLayout}
  2355. label="结算状态"
  2356. >
  2357. <span>{getLiquidationStatus(this.state.liquidationStatus)}</span>
  2358. </FormItem>
  2359. <FormItem
  2360. className="half-item"
  2361. {...formItemLayout}
  2362. label="流程状态"
  2363. >
  2364. <span>{getProcessStatus(this.state.processStatus)}</span>
  2365. </FormItem>
  2366. <FormItem
  2367. className="half-item"
  2368. {...formItemLayout}
  2369. label="订单编号"
  2370. >
  2371. <span>{this.state.orderNo}</span>
  2372. </FormItem>
  2373. </div>
  2374. <div className="clearfix">
  2375. <FormItem
  2376. className="half-item"
  2377. {...formItemLayout}
  2378. label="满意度表格"
  2379. >
  2380. <Radio.Group
  2381. value={this.state.formRetrieve}
  2382. onChange={e => {
  2383. this.setState({ formRetrieve: e.target.value });
  2384. }}
  2385. >
  2386. <Radio value={0}>未收回</Radio>
  2387. <Radio value={1}>已收回</Radio>
  2388. <Radio value={2}>其他</Radio>
  2389. </Radio.Group>
  2390. </FormItem>
  2391. <FormItem className="half-item" {...formItemLayout} label="退单">
  2392. <Radio.Group
  2393. value={this.state.taskRefund}
  2394. onChange={e => {
  2395. this.setState({ taskRefund: e.target.value });
  2396. }}
  2397. >
  2398. <Radio value={0}>已完成</Radio>
  2399. <Radio value={1}>未完成</Radio>
  2400. <Radio value={2}>其他</Radio>
  2401. </Radio.Group>
  2402. </FormItem>
  2403. </div>
  2404. <div className="clearfix">
  2405. {
  2406. <FormItem
  2407. className="half-item"
  2408. {...formItemLayout}
  2409. label="(满意度)备注"
  2410. >
  2411. <Input
  2412. type="textarea"
  2413. placeholder="请输入备注"
  2414. rows={2}
  2415. value={this.state.retrieveContent}
  2416. onChange={e => {
  2417. this.setState({ retrieveContent: e.target.value });
  2418. }}
  2419. />
  2420. </FormItem>
  2421. }
  2422. {
  2423. <FormItem
  2424. className="half-item"
  2425. {...formItemLayout}
  2426. label="(退单)备注"
  2427. >
  2428. <Input
  2429. type="textarea"
  2430. placeholder="请输入备注"
  2431. rows={2}
  2432. value={this.state.refundContent}
  2433. onChange={e => {
  2434. this.setState({ refundContent: e.target.value });
  2435. }}
  2436. />
  2437. </FormItem>
  2438. }
  2439. </div>
  2440. <div className="clearfix">
  2441. <h3 className="sub-title">订单负责人信息</h3>
  2442. <FormItem className="half-item" {...formItemLayout} label="负责人">
  2443. <span>
  2444. {this.state.salesmanName + "(" + this.state.depName + ")"}
  2445. </span>
  2446. </FormItem>
  2447. <FormItem
  2448. className="half-item"
  2449. {...formItemLayout}
  2450. label="负责人电话"
  2451. >
  2452. <span>{this.state.salesmanMobile}</span>
  2453. </FormItem>
  2454. <FormItem
  2455. className="half-item"
  2456. {...formItemLayout}
  2457. label="当前财务负责人"
  2458. >
  2459. <span>{this.state.nowFinance}</span>
  2460. </FormItem>
  2461. <FormItem
  2462. className="half-item"
  2463. {...formItemLayout}
  2464. label="当前财务负责人电话"
  2465. >
  2466. <span>{this.state.nowFinanceMobile}</span>
  2467. </FormItem>
  2468. <FormItem
  2469. className="half-item"
  2470. {...formItemLayout}
  2471. style={{ opacity: ".5" }}
  2472. label="原负责人"
  2473. >
  2474. <span>{this.state.oldSalesmanName}</span>
  2475. </FormItem>
  2476. <FormItem
  2477. className="half-item"
  2478. {...formItemLayout}
  2479. style={{ opacity: ".5" }}
  2480. label="原负责人电话"
  2481. >
  2482. <span>{this.state.oldSalesmanMobile}</span>
  2483. </FormItem>
  2484. <FormItem
  2485. className="half-item"
  2486. {...formItemLayout}
  2487. style={{ opacity: ".5" }}
  2488. label="实际财务操作人"
  2489. >
  2490. <span>{this.state.financeName}</span>
  2491. </FormItem>
  2492. <FormItem
  2493. className="half-item"
  2494. {...formItemLayout}
  2495. style={{ opacity: ".5" }}
  2496. label="实际财务操作人电话"
  2497. >
  2498. <span>{this.state.financeMobile}</span>
  2499. </FormItem>
  2500. </div>
  2501. {/*<hr style={{border:'1px dashed #aaa', width:"90%",margin:'auto'}}/>*/}
  2502. <div className="clearfix">
  2503. <h3 className="sub-title">联系信息</h3>
  2504. <FormItem
  2505. className="half-item"
  2506. {...formItemLayout}
  2507. label="客户名称"
  2508. >
  2509. <span>{this.state.userName}</span>
  2510. </FormItem>
  2511. <FormItem
  2512. className="half-item"
  2513. {...formItemLayout}
  2514. label="企业法人"
  2515. >
  2516. <Input
  2517. placeholder="请输入法人名称"
  2518. value={this.state.legalPerson}
  2519. style={{ width: "200px" }}
  2520. onChange={e => {
  2521. this.setState({ legalPerson: e.target.value });
  2522. }}
  2523. ref="commodityQuantity"
  2524. />
  2525. </FormItem>
  2526. <FormItem
  2527. className="half-item"
  2528. {...formItemLayout}
  2529. label="法人电话"
  2530. >
  2531. <Input
  2532. placeholder="请输入法人电话"
  2533. value={this.state.legalPersonTel}
  2534. style={{ width: "200px" }}
  2535. onChange={e => {
  2536. this.setState({ legalPersonTel: e.target.value });
  2537. }}
  2538. ref="commodityQuantity"
  2539. />
  2540. </FormItem>
  2541. <FormItem
  2542. className="half-item"
  2543. {...formItemLayout}
  2544. label="客户联系人"
  2545. >
  2546. <Input
  2547. placeholder="请输入联系人名称"
  2548. value={this.state.contacts}
  2549. style={{ width: "200px" }}
  2550. onChange={e => {
  2551. this.setState({ contacts: e.target.value });
  2552. }}
  2553. ref="commodityQuantity"
  2554. />
  2555. </FormItem>
  2556. <FormItem
  2557. className="half-item"
  2558. {...formItemLayout}
  2559. label="联系人电话"
  2560. >
  2561. <Input
  2562. placeholder="请输入联系人电话"
  2563. value={this.state.contactMobile}
  2564. style={{ width: "200px" }}
  2565. onChange={e => {
  2566. this.setState({ contactMobile: e.target.value });
  2567. }}
  2568. ref="commodityQuantity"
  2569. />
  2570. </FormItem>
  2571. <FormItem
  2572. className="half-item"
  2573. {...formItemLayout}
  2574. label="企业地址"
  2575. >
  2576. <Cascader
  2577. options={areaSelect()}
  2578. value={this.state.ProvinceCity}
  2579. placeholder="选择城市"
  2580. style={{ width: "200px" }}
  2581. onChange={e => {
  2582. this.setState({ ProvinceCity: e });
  2583. }}
  2584. />
  2585. </FormItem>
  2586. <FormItem
  2587. className="half-item"
  2588. {...formItemLayout}
  2589. label=""
  2590. ></FormItem>
  2591. <FormItem className="half-item" {...formItemLayout} label="">
  2592. <Input
  2593. placeholder="请输入详细地址"
  2594. value={this.state.postalAddress}
  2595. style={{ width: "200px", marginLeft: "12em" }}
  2596. onChange={e => {
  2597. this.setState({ postalAddress: e.target.value });
  2598. }}
  2599. ref="commodityQuantity"
  2600. />
  2601. </FormItem>
  2602. </div>
  2603. {/*<hr style={{border:'1px dashed #aaa', width:"90%",margin:'auto'}}/>*/}
  2604. <div className="clearfix">
  2605. <h3 className="sub-title">项目信息</h3>
  2606. <FormItem
  2607. className="half-item"
  2608. {...formItemLayout}
  2609. label="项目编号"
  2610. >
  2611. <span>{this.state.id}</span>
  2612. </FormItem>
  2613. <FormItem
  2614. className="half-item"
  2615. {...formItemLayout}
  2616. label="项目名称"
  2617. >
  2618. <span>{this.state.taskName}</span>
  2619. </FormItem>
  2620. <FormItem
  2621. className="half-item"
  2622. {...formItemLayout}
  2623. label="项目状态"
  2624. >
  2625. <Select
  2626. placeholder="选择项目状态"
  2627. style={{ width: "200px" }}
  2628. value={this.state.taskStatus}
  2629. onChange={e => {
  2630. this.setState({ taskStatus: e });
  2631. }}
  2632. >
  2633. {taskStatus.map(function(item) {
  2634. return (
  2635. <Select.Option key={item.value}>{item.key}</Select.Option>
  2636. );
  2637. })}
  2638. </Select>
  2639. </FormItem>
  2640. <FormItem
  2641. className="half-item"
  2642. {...formItemLayout}
  2643. label="项目类别"
  2644. >
  2645. <span>{this.state.cname}</span>
  2646. </FormItem>
  2647. <FormItem
  2648. className="half-item"
  2649. {...formItemLayout}
  2650. label="证书编号"
  2651. >
  2652. <Input
  2653. placeholder="请输入证书编号"
  2654. value={this.state.certificateNumber}
  2655. style={{ width: "200px" }}
  2656. onChange={e => {
  2657. this.setState({ certificateNumber: e.target.value });
  2658. }}
  2659. ref="commodityQuantity"
  2660. />
  2661. </FormItem>
  2662. </div>
  2663. <div className="clearfix" style={{ marginTop: "10px" }}>
  2664. <FormItem
  2665. labelCol={{ span: 3 }}
  2666. wrapperCol={{ span: 14 }}
  2667. label="附件"
  2668. >
  2669. <Picture
  2670. fileList={e => {
  2671. this.setState({ attachmentUrl: e });
  2672. }}
  2673. pictureUrl={this.state.attachmentUrl}
  2674. visible={this.props.visible}
  2675. data={{
  2676. sign: "order_task_file",
  2677. url: "/api/admin/orderProject/uploadOrderTaskFile",
  2678. number: 8
  2679. }}
  2680. />
  2681. </FormItem>
  2682. </div>
  2683. <div className="clearfix">
  2684. <FormItem
  2685. labelCol={{ span: 3 }}
  2686. wrapperCol={{ span: 16 }}
  2687. label="备注"
  2688. >
  2689. <Input
  2690. type="textarea"
  2691. placeholder="请输入备注"
  2692. rows={4}
  2693. value={this.state.taskComment}
  2694. onChange={e => {
  2695. this.setState({ taskComment: e.target.value });
  2696. }}
  2697. />
  2698. </FormItem>
  2699. </div>
  2700. <div className="clearfix">
  2701. <h3 className="sub-title">项目申报进度</h3>
  2702. <FormItem
  2703. className="half-item"
  2704. {...formItemLayout}
  2705. label="启动时间"
  2706. >
  2707. <DatePicker
  2708. style={{ marginTop: "5px" }}
  2709. showTime
  2710. format="YYYY-MM-DD"
  2711. onOk={() => {}}
  2712. value={
  2713. this.state.startDate ? moment(this.state.startDate) : null
  2714. }
  2715. onChange={(data, dataString) => {
  2716. this.setState({ startDate: dataString });
  2717. }}
  2718. />
  2719. </FormItem>
  2720. <FormItem
  2721. className="half-item"
  2722. {...formItemLayout}
  2723. label="软著派单数量"
  2724. >
  2725. <span>{this.state.commodityQuantity}</span>
  2726. <Button
  2727. type="primary"
  2728. size="small"
  2729. style={{ marginLeft: "45px" }}
  2730. onClick={this.addcontact}
  2731. >
  2732. +增加下证信息
  2733. </Button>
  2734. </FormItem>
  2735. <div className="patent-table">
  2736. <Spin spinning={this.state.loading}>
  2737. <Table
  2738. columns={this.state.ContactsLists}
  2739. dataSource={this.state.contactList}
  2740. pagination={false}
  2741. bordered
  2742. size="small"
  2743. />
  2744. </Spin>
  2745. </div>
  2746. </div>
  2747. <div className="clearfix">
  2748. <h3 className="sub-title">项目业务</h3>
  2749. <div className="patent-table">
  2750. <Spin spinning={this.state.loading}>
  2751. <Table
  2752. columns={this.state.columnsX}
  2753. dataSource={this.state.dataSourceX}
  2754. pagination={this.state.paginations}
  2755. onRowClick={this.tableRowClickX}
  2756. bordered
  2757. size="small"
  2758. />
  2759. </Spin>
  2760. </div>
  2761. </div>
  2762. <div className="clearfix">
  2763. <Button
  2764. className="cancel"
  2765. type="primary"
  2766. onClick={this.tijiaoOk}
  2767. style={{ marginLeft: "200px", marginTop: "10px" }}
  2768. htmlType="submit"
  2769. >
  2770. 保存
  2771. </Button>
  2772. <Button
  2773. className="cancel"
  2774. type="ghost"
  2775. onClick={this.visitCancel}
  2776. style={{ marginLeft: "50px", marginTop: "10px" }}
  2777. >
  2778. 取消
  2779. </Button>
  2780. </div>
  2781. </Modal>
  2782. <Modal
  2783. width="800px"
  2784. visible={this.state.visibleA}
  2785. onCancel={this.visitCancelA}
  2786. title="操作日志"
  2787. footer=""
  2788. className="admin-desc-content"
  2789. >
  2790. <div className="patent-table patent-table-center">
  2791. <Spin spinning={this.state.loading}>
  2792. <Table
  2793. columns={this.state.columnsA}
  2794. dataSource={this.state.dataSourceA}
  2795. pagination={false}
  2796. bordered
  2797. size="small"
  2798. />
  2799. </Spin>
  2800. </div>
  2801. </Modal>
  2802. <Modal
  2803. title="工时记录"
  2804. visible={this.state.timeVisible}
  2805. onCancel={this.timeClose}
  2806. width={800}
  2807. footer={null}
  2808. >
  2809. <Spin spinning={this.state.loading}>
  2810. <Table
  2811. columns={this.state.columnsTime}
  2812. dataSource={this.state.dataSourceTime}
  2813. pagination={false}
  2814. scroll={{ x: "max-content", y: 0 }}
  2815. bordered
  2816. size={"small"}
  2817. />
  2818. <p style={{ marginTop: 10, color: "red" }}>
  2819. 累计工时(小时):{this.state.recordHour}
  2820. </p>
  2821. </Spin>
  2822. </Modal>
  2823. </div>
  2824. );
  2825. }
  2826. });
  2827. export default Task;