myTaskOutsource.jsx 128 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852
  1. import React from "react";
  2. import $ from "jquery";
  3. import moment from "moment";
  4. import Picture from "@/manageCenter/publicComponent/picture";
  5. import ResolutionDetail from "@/resolutionDetail";
  6. import "@/manageCenter/financialManage/distribute/public.less";
  7. import "@/manageCenter/financialManage/distribute/shouKuan.less";
  8. import {cuiJieDian } from '@/dataDic.js'
  9. import OrderDetail from "../../order/orderNew/changeComponent/orderDetail";
  10. import {
  11. Button,
  12. Form,
  13. Input,
  14. Select,
  15. Spin,
  16. Table,
  17. message,
  18. DatePicker,
  19. Modal,
  20. Radio,
  21. Cascader,
  22. Popconfirm,
  23. Tabs,
  24. Tag,
  25. notification
  26. } from "antd";
  27. import Assign from "@/manageCenter/publicComponent/assign";
  28. import { areaSelect } from "@/NewDicProvinceList";
  29. import { ChooseList } from "../../order/orderNew/chooseList";
  30. import OrderRiZi from "@/orderRiZi.jsx";
  31. import "./table.less";
  32. import {
  33. getProcessStatus,
  34. getApproval,
  35. getTaskStatus,
  36. getLiquidationStatus,
  37. getProjectStatus,
  38. splitUrl,
  39. getboutique,
  40. getprovince,
  41. moneyVerify,
  42. ShowModal
  43. } from "@/tools";
  44. import { taskStatus, projectStatus } from "@/dataDic.js";
  45. import ShowModalDiv from "@/showModal.jsx";
  46. import CheckProject from "../../components/checkProject";
  47. const FormItem = Form.Item;
  48. const { TabPane } = Tabs;
  49. const { Option } = Select;
  50. const { MonthPicker, RangePicker } = DatePicker;
  51. const MyTaskOutsource = React.createClass({
  52. loadData(pageNo) {
  53. this.state.data = [];
  54. this.setState({
  55. page: pageNo,
  56. loading: true,
  57. });
  58. $.ajax({
  59. method: "get",
  60. dataType: "json",
  61. crossDomain: false,
  62. url: globalConfig.context + "/api/admin/orderProject/orderTaskList",
  63. data: {
  64. pageNo: pageNo || this.state.page || 1,
  65. pageSize: this.state.pagination.pageSize,
  66. specially: 0, //个人
  67. name: this.state.nameSearch, //客户名称
  68. depId: this.state.departmenttSearch, //订单部门
  69. orderNo: this.state.orderNoSearch, //订单编号
  70. contractNo: this.state.contractNoSearch, //合同编号
  71. taskId: this.state.taskNoSearch, //项目编号
  72. taskStatus: this.state.taskStatuSearch, //项目状态
  73. projectStatus: this.state.projectStatusSearch, //项目状态
  74. adminName: this.state.adminName, //项目受理人
  75. outsource: 1,
  76. approval: this.state.approvalSearch, //特批状态搜索
  77. },
  78. success: function (data) {
  79. ShowModal(this);
  80. let theArr = [];
  81. if (!data.data || !data.data.list) {
  82. if (data.error && data.error.length) {
  83. message.warning(data.error[0].message);
  84. }
  85. } else {
  86. for (let i = 0; i < data.data.list.length; i++) {
  87. let thisdata = data.data.list[i];
  88. theArr.push({
  89. key: i,
  90. orderNo: thisdata.orderNo, //订单编号
  91. id: thisdata.id, //项目ID
  92. taskName: thisdata.taskName, //名称
  93. cname: thisdata.cname, //项目品类
  94. receiverName: thisdata.receiverName, //受理人
  95. projectStatus: thisdata.projectStatus, //项目状态
  96. taskStatus: thisdata.taskStatus, //项目状态
  97. taskDate: thisdata.taskDate, //分配时间
  98. userName:
  99. thisdata.taskName.substring(0, 5) === "软件著作权"
  100. ? thisdata.userName +
  101. "(" +
  102. thisdata.commodityQuantity.toString() +
  103. "/" +
  104. thisdata.alreadyNumber +
  105. ")"
  106. : thisdata.userName, //用户名
  107. depName: thisdata.depName, //部门名称
  108. commodityQuantity: thisdata.commodityQuantity, //项目数量
  109. outsourceName: thisdata.outsourceName,
  110. hours: thisdata.hours,
  111. contractNo: thisdata.contractNo,
  112. approval: thisdata.approval, //特批状态
  113. outsourceStatus: thisdata.outsourceStatus, //外包审核状态
  114. splitStatus: thisdata.splitStatus, //是否为子项目 2是 1主项目
  115. splitSuper: thisdata.splitSuper,
  116. splitId: thisdata.splitId,
  117. projectType: thisdata.projectType,//项目类型
  118. patentNameType: thisdata.patentNameType,
  119. patentName: thisdata.patentName,
  120. });
  121. }
  122. }
  123. this.state.pagination.current = data.data.pageNo;
  124. this.state.pagination.total = data.data.totalCount;
  125. if (data.data && data.data.list && !data.data.list.length) {
  126. this.state.pagination.current = 0;
  127. this.state.pagination.total = 0;
  128. }
  129. this.setState({
  130. dataSource: theArr,
  131. pagination: this.state.pagination,
  132. });
  133. }.bind(this),
  134. }).always(
  135. function () {
  136. this.setState({
  137. loading: false,
  138. });
  139. }.bind(this)
  140. );
  141. },
  142. waiDetail() {
  143. let url = window.location.href.substring(7)
  144. this.setState({
  145. loading: true,
  146. })
  147. $.ajax({
  148. method: 'get',
  149. dataType: 'json',
  150. crossDomain: false,
  151. url:
  152. globalConfig.context + '/api/admin/outsourceOrg/orderOutsourceDtails',
  153. data: {
  154. tid: this.state.id,
  155. orderNo: this.state.orderNo,
  156. },
  157. }).done(
  158. function (data) {
  159. this.setState({
  160. loading: false,
  161. })
  162. if (!data.error.length && data.data) {
  163. this.setState({
  164. startType: data.data.startType, //类型
  165. patentType: data.data.patentType, //专利类型
  166. patentNameType: data.data.patentNameType, //专利名称类型
  167. patentName: data.data.patentName, //专利名称
  168. outsourceRemarks: data.data.outsourceRemarks,
  169. remarks: data.data.remarks,
  170. companyName: data.data.companyName,
  171. amount: data.data.amount,
  172. mid: data.data.id,
  173. unitPrice: data.data.unitPrice,
  174. refundStatus: data.data.refundStatus,
  175. unitNumber: data.data.unitNumber,
  176. pictureUrl: data.data.pictureUrl
  177. ? splitUrl(
  178. data.data.pictureUrl,
  179. ',',
  180. globalConfig.avatarHost + '/upload',
  181. url
  182. )
  183. : [], //图片地址
  184. createTimes: data.data.createTimes,
  185. auditTimes: data.data.auditTimes,
  186. })
  187. } else if (data.error && data.error.length) {
  188. message.warning(data.error[0].message)
  189. } else if (!data.data) {
  190. this.setState({
  191. refundStatus: undefined,
  192. })
  193. }
  194. }.bind(this)
  195. )
  196. },
  197. getInitialState() {
  198. return {
  199. paySubject: [],
  200. orderData: [],
  201. orderNo: "",
  202. jiedian: [],
  203. jiedianNew: [],
  204. page: 1,
  205. timeVisible: false,
  206. searchMore: true,
  207. assignVisible: false,
  208. releaseDate: [],
  209. // 判断是否是退回给咨询师经理
  210. flag: false,
  211. roleName: "",
  212. modKey: "1",
  213. testFlag: true,
  214. boHuivisible: false,
  215. companyProvinceArr: [],
  216. selectedRowKeys: [],
  217. departmentArr: [],
  218. selectedRows: [],
  219. attachmentUrl: [],
  220. contactList: [],
  221. //特批状态搜索
  222. approvalSearch: undefined,
  223. paginations: false,
  224. loading: false,
  225. pagination: {
  226. defaultCurrent: 1,
  227. defaultPageSize: 10,
  228. showQuickJumper: true,
  229. pageSize: 10,
  230. onChange: function (page) {
  231. this.loadData(page);
  232. this.setState({
  233. page,
  234. });
  235. }.bind(this),
  236. showTotal: function (total) {
  237. return "共" + total + "条数据";
  238. },
  239. },
  240. // 子组件改变的表格title数组
  241. changeList: undefined,
  242. columnsTime: [
  243. {
  244. title: "工作时长(小时)",
  245. dataIndex: "hours",
  246. key: "hours",
  247. },
  248. {
  249. title: "工作时间",
  250. dataIndex: "taskDays",
  251. key: "taskDays",
  252. },
  253. // {
  254. // title: "项目负责人",
  255. // dataIndex: "remarks",
  256. // key: "remarks"
  257. // },
  258. {
  259. title: "备注",
  260. dataIndex: "remarks",
  261. key: "remarks",
  262. },
  263. ],
  264. columns: [
  265. {
  266. title: "项目编号",
  267. dataIndex: "id",
  268. key: "id",
  269. render: (text, record) => {
  270. if (record.splitStatus == 2) {
  271. return <span>{record.splitSuper + "-" + record.splitId}</span>;
  272. } else {
  273. return text;
  274. }
  275. },
  276. },
  277. {
  278. title: "项目名称",
  279. dataIndex: "taskName",
  280. key: "taskName",
  281. render: (text) => {
  282. return text && text.length > 8 ? text.substr(0, 8) + "…" : text;
  283. },
  284. },
  285. {
  286. title: "项目数量",
  287. dataIndex: "commodityQuantity",
  288. key: "commodityQuantity",
  289. },
  290. {
  291. title: "订单编号",
  292. dataIndex: "orderNo",
  293. key: "orderNo",
  294. },
  295. {
  296. title: "合同编号",
  297. dataIndex: "contractNo",
  298. key: "contractNo",
  299. },
  300. {
  301. title: "业务类别",
  302. dataIndex: "cname",
  303. key: "cname",
  304. },
  305. {
  306. title: "客户名称",
  307. dataIndex: "userName",
  308. key: "userName",
  309. className: "userName",
  310. },
  311. // {
  312. // title: "外包公司",
  313. // dataIndex: "outsourceName",
  314. // key: "outsourceName",
  315. // },
  316. {
  317. title: "分配状态",
  318. dataIndex: "taskStatus",
  319. key: "taskStatus",
  320. render: (text) => {
  321. return getTaskStatus(text);
  322. },
  323. },
  324. {
  325. title: "项目状态",
  326. dataIndex: "projectStatus",
  327. key: "projectStatus",
  328. render: (text) => {
  329. return getProjectStatus(text);
  330. },
  331. },
  332. {
  333. title: "特批状态",
  334. dataIndex: "approval",
  335. key: "approval",
  336. render: (text) => {
  337. return getApproval(text, true);
  338. },
  339. },
  340. {
  341. title: "分配时间",
  342. dataIndex: "taskDate",
  343. key: "taskDate",
  344. },
  345. {
  346. title: "订单部门",
  347. dataIndex: "depName",
  348. key: "depName",
  349. },
  350. {
  351. title: "累计工时(小时)",
  352. dataIndex: "hours",
  353. key: "hours",
  354. },
  355. {
  356. title: "操作",
  357. dataIndex: "caozuo",
  358. key: "caozuo",
  359. render: (text, record) => {
  360. return (
  361. <div>
  362. <Button
  363. type="primary"
  364. onClick={(e) => {
  365. e.stopPropagation(), this.evaluate(record, "咨询师");
  366. }}
  367. >
  368. 转交
  369. </Button>
  370. <Button
  371. type="primary"
  372. style={{ marginLeft: 10 }}
  373. onClick={(e) => {
  374. e.stopPropagation(),
  375. this.evaluate(record, "咨询师经理", true);
  376. }}
  377. >
  378. 回退
  379. </Button>
  380. <Button
  381. type="primary"
  382. style={{ margin: "0 10px" }}
  383. onClick={(e) => {
  384. e.stopPropagation(), this.okCancel(record);
  385. }}
  386. >
  387. 添加工时
  388. </Button>
  389. <Button
  390. type="primary"
  391. onClick={(e) => {
  392. e.stopPropagation();
  393. this.setState({
  394. timeVisible: true,
  395. });
  396. this.timeDetail(record);
  397. }}
  398. >
  399. 工时记录
  400. </Button>
  401. </div>
  402. );
  403. },
  404. },
  405. ],
  406. dataSource: [],
  407. searchTime: [],
  408. columnsX: [
  409. {
  410. title: "业务项目名称",
  411. dataIndex: "commodityName",
  412. key: "commodityName",
  413. },
  414. {
  415. title: "项目类别",
  416. dataIndex: "cname",
  417. key: "cname",
  418. },
  419. {
  420. title: "项目数量",
  421. dataIndex: "commodityQuantity",
  422. key: "commodityQuantity",
  423. render: (text, record) => {
  424. if (record.splitStatus == 1) {
  425. return (
  426. <span>
  427. {text}{" "}
  428. <Tag
  429. color="#108ee9"
  430. onClick={(e) => {
  431. e.stopPropagation();
  432. this.showRes(record);
  433. }}
  434. >
  435. 已拆
  436. </Tag>
  437. </span>
  438. );
  439. } else {
  440. return text;
  441. }
  442. },
  443. },
  444. {
  445. title: "金额(万元)",
  446. dataIndex: "commodityPrice",
  447. key: "commodityPrice",
  448. },
  449. {
  450. title: "负责人",
  451. dataIndex: "contacts",
  452. key: "contacts",
  453. },
  454. {
  455. title: "负责人电话",
  456. dataIndex: "contactsMobile",
  457. key: "contactsMobile",
  458. },
  459. {
  460. title: "主要项目",
  461. dataIndex: "main",
  462. key: "main",
  463. render: (text) => {
  464. return text ? "是" : "否";
  465. },
  466. },
  467. {
  468. title: "项目说明",
  469. dataIndex: "taskComment",
  470. key: "taskComment",
  471. render: (text) => {
  472. return text && text.length > 8 ? text.substr(0, 8) + "…" : text;
  473. },
  474. },
  475. ],
  476. columnsA: [
  477. {
  478. title: "流程",
  479. dataIndex: "content",
  480. key: "content",
  481. align: "center",
  482. },
  483. {
  484. title: "操作人",
  485. dataIndex: "aName",
  486. key: "aName",
  487. align: "center",
  488. },
  489. {
  490. title: "时间",
  491. dataIndex: "createTimes",
  492. key: "createTimes",
  493. align: "center",
  494. },
  495. ],
  496. dataSourceX: [],
  497. dataSourceA: [],
  498. companys: [],
  499. ContactsLists: [
  500. {
  501. title: "批次",
  502. dataIndex: "num",
  503. key: "num",
  504. },
  505. {
  506. title: "下证时间",
  507. dataIndex: "licenceTimes",
  508. key: "licenceTimes",
  509. render: (text, record) => {
  510. return (
  511. <div>
  512. <DatePicker
  513. style={{ marginTop: "5px" }}
  514. showTime
  515. format="YYYY-MM-DD"
  516. onOk={() => {}}
  517. value={
  518. record.licenceTimes ? moment(record.licenceTimes) : null
  519. }
  520. onChange={(data, dataString) => {
  521. record.licenceTimes = dataString;
  522. this.setState({ contactList: this.state.contactList });
  523. }}
  524. />
  525. </div>
  526. );
  527. },
  528. },
  529. {
  530. title: "下证数量",
  531. dataIndex: "alreadyNumber",
  532. key: "alreadyNumber",
  533. render: (text, record) => {
  534. return (
  535. <div>
  536. {
  537. <Input
  538. value={record.alreadyNumber}
  539. placeholder="请输入下证数量"
  540. key={record.id}
  541. required="required"
  542. onChange={(e) => {
  543. record.alreadyNumber = e.target.value;
  544. this.setState({ contactList: this.state.contactList });
  545. }}
  546. style={{ width: "120px" }}
  547. />
  548. }
  549. </div>
  550. );
  551. },
  552. },
  553. {
  554. title: "未下证数量",
  555. dataIndex: "notCount",
  556. key: "notCount",
  557. },
  558. {
  559. title: "操作",
  560. dataIndex: "dels",
  561. key: "dels",
  562. render: (text, record, index) => {
  563. return (
  564. <div>
  565. {
  566. <Popconfirm
  567. title="是否删除?"
  568. onConfirm={() => {
  569. this.confirmDelet(record);
  570. }}
  571. okText="删除"
  572. cancelText="不删除"
  573. >
  574. <Button
  575. style={{
  576. marginRight: "10px",
  577. color: "#ffffff",
  578. background: "#f00",
  579. border: "none",
  580. }}
  581. >
  582. 删除
  583. </Button>
  584. </Popconfirm>
  585. }
  586. {record.flag ? (
  587. ""
  588. ) : (
  589. <Button
  590. type="primary"
  591. onClick={(e) => {
  592. e.stopPropagation(), this.contactSave(record, index);
  593. }}
  594. >
  595. 保存
  596. </Button>
  597. )}
  598. </div>
  599. );
  600. },
  601. },
  602. ],
  603. companyColumns: [
  604. {
  605. title: "公司",
  606. dataIndex: "name",
  607. key: "name",
  608. //fixed:'left',
  609. width: 160,
  610. },
  611. {
  612. title: "联系人",
  613. dataIndex: "contacts",
  614. key: "contacts",
  615. },
  616. {
  617. title: "联系人电话",
  618. dataIndex: "contactsMobile",
  619. key: "contactsMobile",
  620. },
  621. {
  622. title: "地址",
  623. dataIndex: "companyProvinceArr",
  624. key: "companyProvinceArr",
  625. width: 140,
  626. render: (test) => {
  627. return test[0] === null
  628. ? ""
  629. : getprovince(test[0]) +
  630. "/" +
  631. getprovince(test[1]) +
  632. "/" +
  633. getprovince(test[2]);
  634. },
  635. },
  636. {
  637. title: "详细地址",
  638. dataIndex: "address",
  639. key: "address",
  640. },
  641. {
  642. title: "操作",
  643. width: 160,
  644. render: (text, record) => {
  645. return (
  646. <div>
  647. <Button
  648. type="primary"
  649. onClick={() => {
  650. this.setState({
  651. companyId: record.id,
  652. updataSwicth: true,
  653. cName: record.name,
  654. companyContacts: record.contacts,
  655. companyContactsMobile: record.contactsMobile,
  656. companyProvinceArr: record.companyProvinceArr,
  657. companyAddress: record.address,
  658. companyRemarks: record.remarks,
  659. });
  660. this.openNotification();
  661. }}
  662. >
  663. 修改
  664. </Button>
  665. <Popconfirm
  666. title="是否确认删除?"
  667. okText="确定"
  668. onConfirm={() => {
  669. this.deleteCompany(record.id);
  670. }}
  671. cancelText="取消"
  672. >
  673. <Button type="danger" style={{ marginLeft: "10px" }}>
  674. 删除
  675. </Button>
  676. </Popconfirm>
  677. </div>
  678. );
  679. },
  680. },
  681. ],
  682. };
  683. },
  684. /* 分派 */
  685. evaluate(record, nub, flag) {
  686. this.state.assignData = record;
  687. this.setState(
  688. {
  689. nub,
  690. assignData: record,
  691. flag,
  692. },
  693. () => {
  694. this.setState({
  695. assignVisible: true,
  696. });
  697. }
  698. );
  699. },
  700. componentWillMount() {
  701. this.departmentList();
  702. this.loadData();
  703. },
  704. componentDidMount() {
  705. this.setColor();
  706. },
  707. setColor() {
  708. $(".userName span").after(
  709. "(<span class='ruanzhu'>软著数</span>/<span class='xiazheng'>下证数</span>)"
  710. );
  711. },
  712. tableRowClick(record) {
  713. this.state.RowData = record;
  714. let str = record.taskName;
  715. let test = str.indexOf("会员");
  716. if (test == -1) {
  717. this.setState({
  718. isHuiyuan: false,
  719. });
  720. } else {
  721. this.setState({
  722. isHuiyuan: true,
  723. });
  724. }
  725. if (record.taskName.substring(0, 5) === "软件著作权") {
  726. this.setState({
  727. speVisible: true,
  728. id: record.id,
  729. splitStatus: record.splitStatus,
  730. splitSuper: record.splitSuper,
  731. splitId: record.splitId,
  732. dataArr: record,
  733. commodityQuantity: record.commodityQuantity,
  734. });
  735. } else {
  736. this.setState({
  737. visible: true,
  738. splitStatus: record.splitStatus,
  739. splitSuper: record.splitSuper,
  740. splitId: record.splitId,
  741. projectType: record.projectType,
  742. patentNameType: record.patentNameType,
  743. patentName: record.patentName,
  744. });
  745. }
  746. this.xiangqing(record.id, record.taskName);
  747. this.xiangqings(record.orderNo);
  748. this.xiangmu(record.orderNo);
  749. this.loaduserss(record);
  750. // 获取第三方信息表格
  751. this.thirdTable(record.id)
  752. //获取支付节点信息表格
  753. this.payNodeTable(record.id)
  754. // 获取Csort
  755. this.getCsortData(localStorage.getItem('cSort'))
  756. console.log('项目类型',record.projectType)
  757. },
  758. //点击修改项目详情
  759. tijiaoOk() {
  760. if (moneyVerify(this.state.setUpAmount)) {
  761. return;
  762. }
  763. let attachmentUrls = [];
  764. if (this.state.attachmentUrl.length) {
  765. let picArr = [];
  766. this.state.attachmentUrl.map(function (item) {
  767. if (item.response && item.response.data && item.response.data.length) {
  768. picArr.push(item.response.data);
  769. }
  770. });
  771. attachmentUrls = picArr.join(",");
  772. }
  773. this.setState({
  774. loading: true,
  775. });
  776. $.ajax({
  777. method: "POST",
  778. dataType: "json",
  779. crossDomain: false,
  780. url: globalConfig.context + "/api/admin/orderProject/updateOrderTask",
  781. data: {
  782. id: this.state.id, //项目编号
  783. orderNo: this.state.orderNo, //订单编号
  784. projectStatus: this.state.projectStatus, //项目状态
  785. taskStatus: this.state.taskStatus, //项目状态
  786. taskComment: this.state.taskComment, //说明
  787. startDate: this.state.startDate, //启动日期
  788. endDate: this.state.endDate, //结束日期
  789. acceptDate: this.state.acceptDate, //受理日期
  790. reviewDate: this.state.reviewDate, //评审日期
  791. publicityDate: this.state.publicityDate, //公示日期
  792. licenceDate: this.state.licenceDate, //发证日期
  793. attachmentUrl: attachmentUrls.length ? attachmentUrls : "", //附件
  794. contacts: this.state.contacts, //联系人
  795. contactMobile: this.state.contactMobile, //联系人电话
  796. legalPerson: this.state.legalPerson, //法人
  797. legalPersonTel: this.state.legalPersonTel, //法人电话
  798. certificateNumber: this.state.certificateNumber, //证书编号
  799. status: this.state.status, //状态
  800. formRetrieve: this.state.formRetrieve, //满意度表格
  801. taskRefund: this.state.taskRefund, //退单
  802. refundContent: this.state.refundContent, //退单信息
  803. retrieveContent: this.state.retrieveContent, //回收信息
  804. locationProvince: this.state.ProvinceCity[0],
  805. locationCity: this.state.ProvinceCity[1],
  806. locationArea: this.state.ProvinceCity[2],
  807. postalAddress: this.state.postalAddress, //详细地址
  808. arrivalMoney: this.state.arrivalMoney, //是否到款
  809. setUpAmount: this.state.setUpAmount, //立项金额
  810. declareUser: this.state.declareUser, //账号
  811. declarePwd: this.state.declarePwd, //密码
  812. outsourceName: this.state.outsourceName, //外包公司名称
  813. outsourcePrice: this.state.outsourcePrice, //外包价格
  814. declarationBatch: this.state.declarationBatch,
  815. },
  816. }).done(
  817. function (data) {
  818. this.setState({
  819. loading: false,
  820. });
  821. if (!data.error.length) {
  822. message.success("保存成功!");
  823. this.visitCancel();
  824. } else {
  825. message.warning(data.error[0].message);
  826. }
  827. }.bind(this)
  828. );
  829. },
  830. //点击修改项目详情
  831. tianjiaOk() {
  832. if (this.state.attachmentUrl.length) {
  833. let picArr = [];
  834. this.state.attachmentUrl.map(function (item) {
  835. if (item.response && item.response.data && item.response.data.length) {
  836. picArr.push(item.response.data);
  837. }
  838. });
  839. }
  840. $.ajax({
  841. method: "POST",
  842. dataType: "json",
  843. crossDomain: false,
  844. url: globalConfig.context + "/api/admin/orderProject/addTaskHours",
  845. data: {
  846. taskId: this.state.taskId, //项目编号
  847. hours: this.state.hours, //工时
  848. remarks: this.state.remarks, //说明
  849. taskDate: this.state.taskDate, //日期
  850. taskComment: this.state.taskComment, //说明
  851. },
  852. }).done(
  853. function (data) {
  854. this.setState({
  855. loading: false,
  856. });
  857. if (!data.error.length) {
  858. message.success("保存成功!");
  859. this.noCancel();
  860. } else {
  861. message.warning(data.error[0].message);
  862. }
  863. }.bind(this)
  864. );
  865. },
  866. //订单详情
  867. xiangqing(id) {
  868. $.ajax({
  869. method: "get",
  870. dataType: "json",
  871. crossDomain: false,
  872. url: globalConfig.context + "/api/admin/orderProject/orderTaskDetail",
  873. data: {
  874. id: id,
  875. },
  876. success: function (data) {
  877. let thisdata = data.data;
  878. if (data.error.length || data.data.list == "") {
  879. if (data.error && data.error.length) {
  880. message.warning(data.error[0].message);
  881. }
  882. } else {
  883. this.setState({
  884. id: thisdata.id, //ID
  885. orderNo: thisdata.orderNo, //订单编号
  886. userName: thisdata.userName, //客户名称
  887. taskName: thisdata.taskName, //项目名称
  888. cname: thisdata.cname, //项目品类
  889. contractNo: thisdata.contractNo, //合同编号
  890. projectStatus: thisdata.projectStatus.toString(), //项目状态
  891. taskStatus: thisdata.taskStatus.toString(), //项目状态
  892. taskDate: thisdata.taskDate, //分配时间
  893. taskComment: thisdata.taskComment, //说明
  894. attachmentUrl: thisdata.attachmentUrl
  895. ? splitUrl(
  896. thisdata.attachmentUrl,
  897. ",",
  898. globalConfig.avatarHost + "/upload"
  899. )
  900. : [], //图片地址
  901. salesmanName: thisdata.salesmanName, //订单负责人
  902. startDate: thisdata.startDate, //启动日期
  903. endDate: thisdata.endDate, //结束日期
  904. acceptDate: thisdata.acceptDate, //受理日期
  905. reviewDate: thisdata.reviewDate, //评审日期
  906. publicityDate: thisdata.publicityDate, //公示日期
  907. licenceDate: thisdata.licenceDate, //发证日期
  908. contacts: thisdata.contacts, //联系人
  909. contactMobile: thisdata.contactMobile, //联系人电话
  910. legalPerson: thisdata.legalPerson, //法人
  911. legalPersonTel: thisdata.legalPersonTel, //法人电话
  912. certificateNumber: thisdata.certificateNumber, //证书编号
  913. status: thisdata.status, //状态
  914. formRetrieve: thisdata.formRetrieve, //满意度表格
  915. taskRefund: thisdata.taskRefund, //退单
  916. refundContent: thisdata.refundContent, //退单信息
  917. retrieveContent: thisdata.retrieveContent, //回收信息
  918. arrivalMoney: thisdata.arrivalMoney, //是否到款
  919. setUpAmount: thisdata.setUpAmount, //立项金额
  920. declareUser: thisdata.declareUser, //账号
  921. declarePwd: thisdata.declarePwd, //密码
  922. outsourceName: thisdata.outsourceName, //外包公司名称
  923. outsourcePrice: thisdata.outsourcePrice, //外包价格
  924. declarationBatch: thisdata.declarationBatch,
  925. });
  926. }
  927. }.bind(this),
  928. }).always(
  929. function () {
  930. this.setState({
  931. loading: false,
  932. });
  933. }.bind(this)
  934. );
  935. },
  936. //订单详情
  937. xiangqings(orderNos) {
  938. $.ajax({
  939. method: "get",
  940. dataType: "json",
  941. crossDomain: false,
  942. url: globalConfig.context + "/api/admin/newOrder/getOrderNewDetail",
  943. data: {
  944. orderNo: orderNos,
  945. },
  946. success: function (data) {
  947. let thisdata = data.data;
  948. let ProvinceCityArr = [];
  949. let ProvinceS = thisdata.locationProvince; //省
  950. let citys = thisdata.locationCity; //市
  951. let Areas = thisdata.locationArea; //区
  952. ProvinceCityArr.push(ProvinceS, citys, Areas);
  953. if (data.error.length || data.data.list == "") {
  954. if (data.error && data.error.length) {
  955. message.warning(data.error[0].message);
  956. }
  957. } else {
  958. this.setState({
  959. processStatus: thisdata.processStatus, //流程状态
  960. liquidationStatus: thisdata.liquidationStatus, //结算状态
  961. approval: thisdata.approval, //特批状态
  962. orderRemarks: thisdata.orderRemarks, //订单留言
  963. salesmanName: thisdata.salesmanName, //营销员名称
  964. salesmanMobile: thisdata.salesmanMobile, //营销员电话
  965. oldSalesmanName: thisdata.oldSalesmanName, //营销员名称
  966. oldSalesmanMobile: thisdata.oldSalesmanMobile, //营销员电话
  967. financeName: thisdata.financeName, //财务名称
  968. financeMobile: thisdata.financeMobile, //财务电话
  969. nowFinance: thisdata.nowFinance, //财务名称
  970. nowFinanceMobile: thisdata.nowFinanceMobile, //财务电话
  971. depName: thisdata.depName, //订单部门
  972. ProvinceCity: ProvinceCityArr[0] === null ? [] : ProvinceCityArr,
  973. postalAddress: thisdata.postalAddress, //详细地址
  974. });
  975. }
  976. }.bind(this),
  977. }).always(
  978. function () {
  979. this.setState({
  980. loading: false,
  981. });
  982. }.bind(this)
  983. );
  984. },
  985. //项目列表
  986. xiangmu(orderNos) {
  987. $.ajax({
  988. method: "get",
  989. dataType: "json",
  990. crossDomain: false,
  991. url: globalConfig.context + "/api/admin/newOrder/getOrderTask",
  992. data: {
  993. orderNo: orderNos,
  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,
  1007. orderNo: thisdata.orderNo, //订单编号
  1008. commodityId: thisdata.commodityId, //项目ID
  1009. commodityName: thisdata.commodityName, //项目名称
  1010. cname: thisdata.cname, //项目类别
  1011. commodityPrice: thisdata.commodityPrice, //项目价格
  1012. commodityQuantity: thisdata.commodityQuantity, //项目数量
  1013. main: thisdata.main, //是否为主要项目
  1014. taskComment: thisdata.taskComment, //项目说明
  1015. contacts: thisdata.contacts, //联系人
  1016. contactsMobile: thisdata.contactsMobile, //联系人电话
  1017. taskStatus: thisdata.taskStatus, //是否分配
  1018. contractNo: thisdata.contractNo, //合同编号
  1019. certificateNumber: thisdata.certificateNumber,
  1020. splitStatus: thisdata.splitStatus, //是否为子项目 2是 1主项目
  1021. splitSuper: thisdata.splitSuper,
  1022. splitId: thisdata.splitId,
  1023. });
  1024. }
  1025. }
  1026. this.setState({
  1027. dataSourceX: theArr,
  1028. });
  1029. }.bind(this),
  1030. }).always(
  1031. function () {
  1032. this.setState({
  1033. loading: false,
  1034. });
  1035. }.bind(this)
  1036. );
  1037. },
  1038. //导出
  1039. exportExec() {
  1040. let departmentName = "",
  1041. depart = this.state.departmentArr || [];
  1042. depart.map((item) => {
  1043. if (this.state.departmentId == item.id) {
  1044. departmentName = item.name;
  1045. return;
  1046. }
  1047. });
  1048. let data = {
  1049. departmentId: this.state.departmentId,
  1050. departmentName: departmentName,
  1051. salesName: this.state.orderRefundSearch, //订单负责人
  1052. startTime: this.state.releaseDate[0],
  1053. endTime: this.state.releaseDate[1],
  1054. grantStatus: this.state.grantStatus,
  1055. };
  1056. window.location.href =
  1057. globalConfig.context +
  1058. "/api/admin/orderProject/exporProjectList?" +
  1059. $.param(data);
  1060. },
  1061. //关闭详情
  1062. visitCancel() {
  1063. this.setState({
  1064. visible: false,
  1065. speVisible: false,
  1066. modKey: "1",
  1067. updataSwicth: false,
  1068. });
  1069. this.companyReset();
  1070. this.reset();
  1071. },
  1072. visitOk() {
  1073. this.setState({
  1074. visible: false,
  1075. speVisible: false,
  1076. });
  1077. this.reset();
  1078. },
  1079. closeDesc(e, s) {
  1080. this.state.showDesc = e;
  1081. if (s) {
  1082. this.loadData(this.state.page);
  1083. }
  1084. },
  1085. closeAssign(e, s) {
  1086. this.state.roleName = "";
  1087. this.state.assignVisible = e;
  1088. if (s) {
  1089. this.loadData(this.state.page);
  1090. }
  1091. },
  1092. //添加工时
  1093. okCancel(record) {
  1094. this.setState({
  1095. lookVisible: true,
  1096. taskId: record.id,
  1097. });
  1098. },
  1099. //测试
  1100. getOrgCodeUrl(e) {
  1101. this.setState({ orgCodeUrl: e });
  1102. },
  1103. //查看下证信息
  1104. loaduserss(record) {
  1105. $.ajax({
  1106. method: "get",
  1107. dataType: "json",
  1108. crossDomain: false,
  1109. url: globalConfig.context + "/api/admin/orderProject/selectTaskProgress",
  1110. data: {
  1111. tid: record.id,
  1112. },
  1113. success: function (data) {
  1114. let theArr = [];
  1115. let thisData = [];
  1116. if (!thisData) {
  1117. if (data.error && data.error.length) {
  1118. message.warning(data.error[0].message);
  1119. }
  1120. thisData = {};
  1121. } else {
  1122. for (let i = 0; i < data.data.length; i++) {
  1123. thisData = data.data[i];
  1124. theArr.push({
  1125. num: i + 1,
  1126. key: i,
  1127. id: thisData.id, //编号
  1128. alreadyNumber: thisData.alreadyNumber, //下证数
  1129. licenceTimes: thisData.licenceTimes, //下证时间
  1130. notCount: thisData.notCount, //未下证数
  1131. flag: true,
  1132. });
  1133. }
  1134. this.setState({
  1135. contactList: theArr,
  1136. });
  1137. }
  1138. }.bind(this),
  1139. }).always(
  1140. function () {
  1141. this.setState({
  1142. loading: false,
  1143. });
  1144. }.bind(this)
  1145. );
  1146. },
  1147. //下证信息保存
  1148. contactSave(record) {
  1149. if (!record.licenceTimes) {
  1150. message.warning("下证日期不能为空");
  1151. return;
  1152. }
  1153. if (!record.alreadyNumber) {
  1154. message.warning("下证数量不能为空");
  1155. return;
  1156. }
  1157. this.setState({
  1158. loading: true,
  1159. });
  1160. $.ajax({
  1161. url: globalConfig.context + "/api/admin/orderProject/createTaskProgress",
  1162. method: "post",
  1163. data: {
  1164. taskId: this.state.id,
  1165. licenceTimes: record.licenceTimes,
  1166. alreadyNumber: record.alreadyNumber,
  1167. },
  1168. }).done(
  1169. function (data) {
  1170. this.setState({
  1171. loading: false,
  1172. });
  1173. if (!data.error.length) {
  1174. message.success("保存成功!");
  1175. record.flag = true;
  1176. this.loaduserss(this.state.dataArr);
  1177. } else {
  1178. message.warning(data.error[0].message);
  1179. }
  1180. }.bind(this)
  1181. );
  1182. },
  1183. //下证信息删除
  1184. contactDele(record) {
  1185. this.setState({
  1186. loading: true,
  1187. });
  1188. $.ajax({
  1189. url: globalConfig.context + "/api/admin/orderProject/delectTaskProgress",
  1190. method: "post",
  1191. data: {
  1192. id: record.id,
  1193. },
  1194. }).done(
  1195. function (data) {
  1196. this.setState({
  1197. loading: false,
  1198. });
  1199. if (!data.error.length) {
  1200. this.loaduserss(this.state.dataArr);
  1201. } else {
  1202. message.warning(data.error[0].message);
  1203. }
  1204. }.bind(this)
  1205. );
  1206. },
  1207. //点击新增下证信息
  1208. addcontact() {
  1209. this.state.contactList.push({
  1210. num: this.state.contactList.length + 1,
  1211. key: this.state.contactList.length,
  1212. licenceTimes: "",
  1213. alreadyNumber: "",
  1214. notCount: "",
  1215. dels: "",
  1216. flag: false,
  1217. aflag: false,
  1218. });
  1219. this.setState({
  1220. contactList: this.state.contactList,
  1221. });
  1222. },
  1223. //删除下证信息
  1224. confirmDelet(record) {
  1225. this.state.contactList.splice(record.key, 1);
  1226. this.setState({
  1227. contactList: this.state.contactList,
  1228. });
  1229. if (record.id) {
  1230. this.contactDele(record);
  1231. }
  1232. },
  1233. caozuorizhi() {
  1234. this.setState({
  1235. visibleA: true,
  1236. });
  1237. $.ajax({
  1238. method: "get",
  1239. dataType: "json",
  1240. crossDomain: false,
  1241. url: globalConfig.context + "/api/admin/orderProject/TaskLogList",
  1242. data: {
  1243. id: this.state.id,
  1244. },
  1245. success: function (data) {
  1246. let theArr = [];
  1247. if (data.error.length || data.data.list == "") {
  1248. if (data.error && data.error.length) {
  1249. message.warning(data.error[0].message);
  1250. }
  1251. } else {
  1252. for (let i = 0; i < data.data.length; i++) {
  1253. let thisdata = data.data[i];
  1254. theArr.push({
  1255. key: i,
  1256. id: thisdata.id, //日志ID
  1257. content: thisdata.content, //流程
  1258. taskId: thisdata.taskId, //项目ID
  1259. aName: thisdata.aName, //负责人
  1260. createTimes: thisdata.createTimes, //时间
  1261. });
  1262. }
  1263. }
  1264. this.setState({
  1265. dataSourceA: theArr,
  1266. });
  1267. }.bind(this),
  1268. }).always(
  1269. function () {
  1270. this.setState({
  1271. loading: false,
  1272. });
  1273. }.bind(this)
  1274. );
  1275. },
  1276. //通知提醒
  1277. openNotification() {
  1278. notification.open({
  1279. message: "提醒",
  1280. description: "请在输入框中重新输入需要修改的选项!",
  1281. });
  1282. },
  1283. //关闭操作工时
  1284. visitCancelA() {
  1285. this.setState({
  1286. visibleA: false,
  1287. });
  1288. },
  1289. callBack(e) {
  1290. this.setState({
  1291. modKey: e,
  1292. });
  1293. this.loadCompany();
  1294. if (e == 2) {
  1295. this.waiDetail()
  1296. this.thirdTable(this.state.tid);
  1297. this.payNodeTable(this.state.tid)
  1298. }
  1299. if (e == 3) {
  1300. this.orderDetailData(this.state.orderNo);
  1301. this.xiangmu(this.state.orderNo);
  1302. this.jiedian(this.state.orderNo);
  1303. this.jiedianNew(this.state.orderNo);
  1304. }
  1305. },
  1306. //添加公司
  1307. addCompany() {
  1308. this.setState({
  1309. switch: true,
  1310. });
  1311. },
  1312. //保存和修改公司
  1313. saveCompany(id) {
  1314. if (this.companyJugle()) {
  1315. let upAndde = this.state.updataSwicth
  1316. ? {
  1317. api: "/api/admin/outsourceOrg/updateOutsourceOrg",
  1318. warn: "修改成功",
  1319. data: {
  1320. id: id,
  1321. name: this.state.cName,
  1322. contacts: this.state.companyContacts,
  1323. contactsMobile: this.state.companyContactsMobile,
  1324. province: this.state.companyProvinceArr[0],
  1325. city: this.state.companyProvinceArr[1],
  1326. area: this.state.companyProvinceArr[2],
  1327. address: this.state.companyAddress,
  1328. remarks: this.state.companyRemarks,
  1329. },
  1330. }
  1331. : {
  1332. api: "/api/admin/outsourceOrg/addOutsourceOrg",
  1333. warn: "保存成功",
  1334. data: {
  1335. name: this.state.cName,
  1336. tid: this.state.RowData.id,
  1337. contacts: this.state.companyContacts,
  1338. contactsMobile: this.state.companyContactsMobile,
  1339. orderNo: this.state.orderNo,
  1340. province: this.state.companyProvinceArr[0],
  1341. city: this.state.companyProvinceArr[1],
  1342. area: this.state.companyProvinceArr[2],
  1343. address: this.state.companyAddress,
  1344. remarks: this.state.companyRemarks,
  1345. },
  1346. };
  1347. this.setState({
  1348. loading: true,
  1349. });
  1350. $.ajax({
  1351. method: "post",
  1352. dataType: "json",
  1353. crossDomain: false,
  1354. url: globalConfig.context + upAndde.api,
  1355. data: upAndde.data,
  1356. success: function (data) {
  1357. if (data.error.length || data.data.list == "") {
  1358. if (data.error && data.error.length) {
  1359. message.warning(data.error[0].message);
  1360. }
  1361. }
  1362. }.bind(this),
  1363. }).done(
  1364. function () {
  1365. this.setState({
  1366. loading: false,
  1367. updataSwicth: false,
  1368. });
  1369. this.companyReset();
  1370. message.success(upAndde.warn);
  1371. this.loadCompany();
  1372. }.bind(this)
  1373. );
  1374. }
  1375. },
  1376. //判断
  1377. companyJugle() {
  1378. if (this.state.cName === undefined) {
  1379. console.log(2345);
  1380. message.warning("公司名称不能为空!");
  1381. return;
  1382. }
  1383. if (this.state.companyContacts === undefined) {
  1384. message.warning("联系人不能为空!");
  1385. return;
  1386. }
  1387. if (this.state.companyContactsMobile === undefined) {
  1388. message.warning("联系人电话不能为空!");
  1389. return;
  1390. }
  1391. return true;
  1392. },
  1393. //删除外包
  1394. deleteCompany(id) {
  1395. $.ajax({
  1396. method: "post",
  1397. dataType: "json",
  1398. crossDomain: false,
  1399. url: globalConfig.context + "/api/admin/outsourceOrg/deleteOutsourceOrg",
  1400. data: {
  1401. id: id,
  1402. },
  1403. success: function () {}.bind(this),
  1404. }).done(
  1405. function () {
  1406. this.setState({
  1407. loading: false,
  1408. });
  1409. message.warning("删除成功");
  1410. this.loadCompany();
  1411. }.bind(this)
  1412. );
  1413. },
  1414. //重置外包
  1415. companyReset() {
  1416. this.setState({
  1417. cName: undefined,
  1418. companyContacts: undefined,
  1419. companyContactsMobile: undefined,
  1420. companyProvinceArr: [],
  1421. companyAddress: undefined,
  1422. companyRemarks: undefined,
  1423. });
  1424. },
  1425. //加载外包
  1426. loadCompany() {
  1427. this.setState({
  1428. loading: true,
  1429. });
  1430. $.ajax({
  1431. method: "get",
  1432. dataType: "json",
  1433. crossDomain: false,
  1434. url: globalConfig.context + "/api/admin/outsourceOrg/selectOutsourceOrg",
  1435. data: {
  1436. orderNo: this.state.RowData.orderNo,
  1437. tid: this.state.RowData.id,
  1438. },
  1439. success: function (data) {
  1440. let theArr = [];
  1441. if (data.error.length || data.data.list == "") {
  1442. if (data.error && data.error.length) {
  1443. message.warning(data.error[0].message);
  1444. }
  1445. } else {
  1446. for (let i = 0; i < data.data.length; i++) {
  1447. let thisdata = data.data[i];
  1448. let ProvinceCityArr = [];
  1449. let ProvinceS = thisdata.province; //省
  1450. let citys = thisdata.city; //市
  1451. let Areas = thisdata.area; //区
  1452. ProvinceCityArr.push(ProvinceS, citys, Areas);
  1453. theArr.push({
  1454. key: i,
  1455. id: thisdata.id, //外包Id
  1456. name: thisdata.name, //名称
  1457. contacts: thisdata.contacts, //联系人
  1458. contactsMobile: thisdata.contactsMobile, //联系人电话
  1459. companyProvinceArr: ProvinceCityArr,
  1460. address: thisdata.address,
  1461. remarks: thisdata.remarks,
  1462. });
  1463. }
  1464. }
  1465. this.setState({
  1466. companys: theArr,
  1467. });
  1468. }.bind(this),
  1469. }).always(
  1470. function () {
  1471. this.setState({
  1472. loading: false,
  1473. });
  1474. }.bind(this)
  1475. );
  1476. },
  1477. foo2() {
  1478. this.setState({
  1479. testFlag1: false,
  1480. });
  1481. },
  1482. foo1() {
  1483. this.setState({
  1484. testFlag1: true,
  1485. });
  1486. },
  1487. foo() {
  1488. this.setState({
  1489. testFlag: false,
  1490. });
  1491. },
  1492. nextCancel() {
  1493. this.setState({
  1494. addnextVisible: false,
  1495. });
  1496. },
  1497. //点击打卡项目详情
  1498. tableRowClickX(record) {
  1499. this.setState({
  1500. jid: record.id, //项目ID
  1501. kid: record.commodityId, //商品ID
  1502. commodityName: record.commodityName, //金额
  1503. commodityPrice: record.commodityPrice, //金额
  1504. commodityQuantity: record.commodityQuantity, //数量
  1505. taskComment: record.taskComment, //备注
  1506. main: record.main.toString(), //是否为主要
  1507. addnextVisible: true,
  1508. addState: 0,
  1509. });
  1510. },
  1511. //关闭添加工时
  1512. noCancel() {
  1513. this.setState({
  1514. lookVisible: false,
  1515. });
  1516. this.reset();
  1517. },
  1518. search() {
  1519. this.loadData();
  1520. },
  1521. reset() {
  1522. this.state.id = ""; //项目编号
  1523. this.state.orderNo = ""; //订单编号
  1524. this.state.contractNoSearch = undefined; //订单编号
  1525. this.state.projectStatus = undefined; //项目状态
  1526. this.state.projectStatusSearch = undefined; //项目状态
  1527. this.state.taskStatuSearch = undefined; //项目状态
  1528. this.state.taskComment = ""; //说明
  1529. this.state.startDate = ""; //启动日期
  1530. this.state.endDate = ""; //结束日期
  1531. this.state.acceptDate = ""; //受理日期
  1532. this.state.reviewDate = ""; //评审日期
  1533. this.state.publicityDate = ""; //公示日期
  1534. this.state.licenceDate = ""; //发证日期
  1535. attachmentUrl: []; //附件
  1536. this.state.contacts = ""; //联系人
  1537. this.state.contactMobile = ""; //联系人电话
  1538. this.state.legalPerson = ""; //法人
  1539. this.state.legalPersonTel = ""; //法人电话
  1540. this.state.taskId = ""; //项目编号
  1541. this.state.hours = ""; //工时
  1542. this.state.remarks = ""; //说明
  1543. this.state.taskDate = ""; //日期
  1544. this.state.taskComment = ""; //说明
  1545. this.state.nameSearch = "";
  1546. this.state.releaseDate = [];
  1547. this.state.orderNoSearch = "";
  1548. this.state.taskNoSearch = "";
  1549. this.state.distribution = undefined;
  1550. this.state.departmenttSearch = undefined;
  1551. this.state.outsourceName = ""; //外包公司名称
  1552. this.state.outsourcePrice = ""; //外包价格
  1553. this.loadData(this.state.page);
  1554. this.state.approvalSearch = undefined;
  1555. },
  1556. searchSwitch() {
  1557. this.setState({
  1558. searchMore: !this.state.searchMore,
  1559. });
  1560. },
  1561. // 拆分详细
  1562. showRes(record) {
  1563. this.setState({
  1564. resVisible: true,
  1565. resRecord: record,
  1566. });
  1567. },
  1568. resCancel() {
  1569. this.setState({
  1570. resVisible: false,
  1571. });
  1572. },
  1573. //部门
  1574. departmentList() {
  1575. this.setState({
  1576. loading: true,
  1577. });
  1578. $.ajax({
  1579. method: "get",
  1580. dataType: "json",
  1581. crossDomain: false,
  1582. url: globalConfig.context + "/api/admin/organization/selectSuperId",
  1583. data: {},
  1584. success: function (data) {
  1585. let thedata = data.data;
  1586. let theArr = [];
  1587. if (!thedata) {
  1588. if (data.error && data.error.length) {
  1589. message.warning(data.error[0].message);
  1590. }
  1591. thedata = {};
  1592. } else {
  1593. thedata.map(function (item, index) {
  1594. theArr.push({
  1595. key: index,
  1596. name: item.name,
  1597. id: item.id,
  1598. });
  1599. });
  1600. }
  1601. this.setState({
  1602. departmentArr: theArr,
  1603. });
  1604. }.bind(this),
  1605. }).always(
  1606. function () {
  1607. this.setState({
  1608. loading: false,
  1609. });
  1610. }.bind(this)
  1611. );
  1612. },
  1613. changeList(arr) {
  1614. const newArr = [];
  1615. this.state.columns.forEach((item) => {
  1616. arr.forEach((val) => {
  1617. if (val === item.title) {
  1618. newArr.push(item);
  1619. }
  1620. });
  1621. });
  1622. this.setState({
  1623. changeList: newArr,
  1624. });
  1625. },
  1626. timeClose() {
  1627. this.setState({
  1628. timeVisible: false,
  1629. });
  1630. },
  1631. timeDetail(record) {
  1632. console.log(record);
  1633. this.setState({
  1634. loading: true,
  1635. recordHour: record.hours,
  1636. });
  1637. $.ajax({
  1638. method: "get",
  1639. dataType: "json",
  1640. crossDomain: false,
  1641. url:
  1642. globalConfig.context + "/api/admin/orderProject/taskHoursDetailsList",
  1643. data: {
  1644. taskId: record.id,
  1645. },
  1646. success: function (data) {
  1647. if (data.error && data.error.length) {
  1648. message.warning(data.error[0].message);
  1649. } else {
  1650. this.setState({
  1651. dataSourceTime: data.data,
  1652. });
  1653. console.log(this.state.dataSourceTime);
  1654. }
  1655. }.bind(this),
  1656. }).always(
  1657. function () {
  1658. this.setState({
  1659. loading: false,
  1660. });
  1661. }.bind(this)
  1662. );
  1663. },
  1664. rizhi() {
  1665. this.setState({
  1666. loading: true,
  1667. });
  1668. $.ajax({
  1669. method: "get",
  1670. dataType: "json",
  1671. crossDomain: false,
  1672. url: "/api/admin/newOrder/selectOrderLog",
  1673. data: {
  1674. orderNo: this.state.orderNo,
  1675. },
  1676. success: function (data) {
  1677. let theArr = [];
  1678. let thisData = data.data;
  1679. if (!thisData.length) {
  1680. if (data.error && data.error.length) {
  1681. message.warning(data.error[0].message);
  1682. }
  1683. thisData = {};
  1684. } else {
  1685. for (let i = 0; i < data.data.length; i++) {
  1686. let thisdata = data.data[i];
  1687. theArr.push({
  1688. processName: thisdata.processName,
  1689. adminName: thisdata.adminName,
  1690. createDate: thisdata.createDate,
  1691. remarks: thisdata.remarks,
  1692. });
  1693. }
  1694. }
  1695. this.setState({
  1696. dataSourceY: theArr,
  1697. });
  1698. }.bind(this),
  1699. }).always(
  1700. function () {
  1701. this.setState({
  1702. loading: false,
  1703. });
  1704. }.bind(this)
  1705. );
  1706. },
  1707. closeOrderLog() {
  1708. this.setState({
  1709. avisible: false,
  1710. });
  1711. },
  1712. getOrderLog() {
  1713. this.setState({
  1714. avisible: true,
  1715. });
  1716. this.rizhi();
  1717. },
  1718. orderChange(key) {
  1719. this.setState({
  1720. activeKey: key,
  1721. });
  1722. if (key == 2) {
  1723. this.orderDetailData(this.state.orderNo);
  1724. this.xiangmu(this.state.orderNo);
  1725. this.jiedian(this.state.orderNo);
  1726. this.jiedianNew(this.state.orderNo);
  1727. }
  1728. },
  1729. //节点列表
  1730. jiedian(orderNos) {
  1731. $.ajax({
  1732. method: "get",
  1733. dataType: "json",
  1734. crossDomain: false,
  1735. url: globalConfig.context + "/api/admin/newOrder/selectOrderDun",
  1736. data: {
  1737. orderNo: orderNos,
  1738. },
  1739. success: function (data) {
  1740. let theArr = [];
  1741. let thisData = [];
  1742. if (data.error.length || data.data.list == "") {
  1743. if (data.error && data.error.length) {
  1744. message.warning(data.error[0].message);
  1745. }
  1746. } else {
  1747. for (let i = 0; i < data.data.length; i++) {
  1748. thisData = data.data[i];
  1749. theArr.push({
  1750. key: i,
  1751. dunSubject: thisData.dunSubject
  1752. ? thisData.dunSubject.toString()
  1753. : "", //催款科目
  1754. id: thisData.id, //节点Id
  1755. money: thisData.money, //催款金额
  1756. dunStatus: thisData.dunStatus, //催款状态
  1757. });
  1758. }
  1759. this.setState({
  1760. jiedian: theArr,
  1761. });
  1762. }
  1763. }.bind(this),
  1764. });
  1765. },
  1766. // 获取csort下的数据
  1767. getCsortData(cSort) {
  1768. cuiJieDian.map((item) => {
  1769. if (item.value == cSort) {
  1770. this.setState({
  1771. paySubject: item.children,
  1772. })
  1773. }
  1774. })
  1775. },
  1776. jiedianNew(orderNos) {
  1777. $.ajax({
  1778. method: "get",
  1779. dataType: "json",
  1780. crossDomain: false,
  1781. url:
  1782. globalConfig.context + "/api/admin/newOrderDun/selectListNewOrderDun",
  1783. data: {
  1784. orderNo: orderNos,
  1785. },
  1786. success: function (data) {
  1787. if (data.error && data.error.length) {
  1788. message.warning(data.error[0].message);
  1789. } else {
  1790. let theArr = [];
  1791. let thisData = [];
  1792. let arr = data.data || [];
  1793. let totalCui = 0;
  1794. for (let i = 0; i < arr.length; i++) {
  1795. thisData = arr[i];
  1796. totalCui += +thisData.money;
  1797. theArr.push({
  1798. key: i,
  1799. dunSubject: thisData.dunSubject
  1800. ? thisData.dunSubject.toString()
  1801. : "", //催款科目
  1802. id: thisData.id, //节点Id
  1803. money: thisData.money, //催款金额
  1804. // orderNo: record ? record.orderNo : this.props.datauser.orderNo,
  1805. commodityName: thisData.commodityName,
  1806. projectType: thisData.projectType,
  1807. dunTypeName: thisData.dunTypeName,
  1808. status: thisData.status,
  1809. waitDay: thisData.waitDay,
  1810. effectiveCount: thisData.effectiveCount,
  1811. startDate: thisData.startDate,
  1812. dunType: thisData.dunType,
  1813. appropriationRatio: thisData.appropriationRatio,
  1814. customizeName: thisData.customizeName,
  1815. customizeTimes: thisData.customizeTimes,
  1816. });
  1817. }
  1818. if (!totalCui) {
  1819. totalCui = 0;
  1820. }
  1821. totalCui = (Math.round(totalCui * 1000000) / 1000000).toFixed(6);
  1822. this.setState({
  1823. jiedianNew: theArr,
  1824. totalCui,
  1825. });
  1826. }
  1827. }.bind(this),
  1828. }).always(
  1829. function () {
  1830. this.setState({
  1831. loading: false,
  1832. });
  1833. }.bind(this)
  1834. );
  1835. },
  1836. //查看第三方信息表格
  1837. thirdTable(id) {
  1838. this.setState({
  1839. loadData: true,
  1840. })
  1841. $.ajax({
  1842. method: 'get',
  1843. dataType: 'json',
  1844. crossDomain: false,
  1845. url: globalConfig.context + '/api/admin/company/selectCompany',
  1846. data: {
  1847. tid: id,
  1848. },
  1849. success: function (data) {
  1850. if (data.error && data.error.length) {
  1851. message.warning(data.error[0].message)
  1852. } else {
  1853. let companyNameArr = []
  1854. let theArr = []
  1855. let thisData = []
  1856. let arr = data.data || []
  1857. let allTotalAmount = 0
  1858. for (let i = 0; i < arr.length; i++) {
  1859. thisData = arr[i]
  1860. allTotalAmount =
  1861. (allTotalAmount * 10000 + thisData.totalAmount * 10000) / 10000
  1862. companyNameArr.push(thisData.companyName)
  1863. thisData.key = i;
  1864. theArr.push(thisData);
  1865. }
  1866. if (!allTotalAmount) {
  1867. allTotalAmount = 0
  1868. }
  1869. this.setState({
  1870. tid: id,
  1871. thirdInfoList: theArr,
  1872. allTotalAmount: allTotalAmount,
  1873. })
  1874. }
  1875. }.bind(this),
  1876. }).always(
  1877. function () {
  1878. this.setState({
  1879. loading: false,
  1880. })
  1881. }.bind(this)
  1882. )
  1883. },
  1884. payNodeTable(id) {
  1885. this.setState({
  1886. loadData: true,
  1887. })
  1888. $.ajax({
  1889. method: 'get',
  1890. dataType: 'json',
  1891. crossDomain: false,
  1892. url: globalConfig.context + '/api/admin/company/selectPaymentNode',
  1893. data: {
  1894. tid: id,
  1895. },
  1896. success: function (data) {
  1897. if (data.error && data.error.length) {
  1898. message.warning(data.error[0].message)
  1899. } else {
  1900. let payNodeArr = []
  1901. let thisData = []
  1902. let arr = data.data || []
  1903. // console.log('this.state.paySubject', this.state.paySubject)
  1904. //对#5283自定义的补充展示
  1905. this.state.paySubject.push({ key: '自定义', value: '0' })
  1906. for (let i = 0; i < arr.length; i++) {
  1907. thisData = arr[i]
  1908. //遍历paySubject,获取当前dunType对应的key
  1909. this.state.paySubject.map((item) => {
  1910. if (item.value == thisData.dunType) {
  1911. thisData.dunType = item.key
  1912. }
  1913. })
  1914. payNodeArr.push({
  1915. key: i,
  1916. id: thisData.id, //付款节点Id
  1917. tid: thisData.tid,
  1918. nodeId: thisData.id, //付款节点Id
  1919. companyName: thisData.companyName, //供应商名称
  1920. projectType: thisData.projectType, //项目分类
  1921. dunType: thisData.dunType, //催款分类
  1922. unitPrice: thisData.unitPrice, //单价
  1923. quantity: thisData.quantity, //数量
  1924. totalAmount: thisData.totalAmount, //总价
  1925. partyAmount: thisData.partyAmount, //付款
  1926. partyTimes: thisData.partyTimes, //付款时间
  1927. cid: thisData.cid, //机构id
  1928. status: thisData.status, //催款状态 0-未支付 1-待全款 ,2已全款 status=2的时候已经全款,申请付款按钮可以去掉了
  1929. })
  1930. }
  1931. console.log(payNodeArr,'payNodeArr:')
  1932. // console.log('paySubject:', this.state.paySubject)
  1933. this.setState({
  1934. tid: id,
  1935. payNodeList: payNodeArr,
  1936. })
  1937. }
  1938. }.bind(this),
  1939. }).always(
  1940. function () {
  1941. this.setState({
  1942. loading: false,
  1943. })
  1944. }.bind(this)
  1945. )
  1946. },
  1947. orderDetailData(orderNos) {
  1948. this.setState({
  1949. loading: true,
  1950. });
  1951. $.ajax({
  1952. method: "get",
  1953. dataType: "json",
  1954. crossDomain: false,
  1955. url: globalConfig.context + "/api/admin/newOrder/getOrderNewDetail",
  1956. data: {
  1957. orderNo: orderNos,
  1958. },
  1959. success: function (data) {
  1960. if (data.error.length || data.data.list == "") {
  1961. if (data.error && data.error.length) {
  1962. message.warning(data.error[0].message);
  1963. this.setState({
  1964. loading: false,
  1965. });
  1966. }
  1967. } else {
  1968. let thisdata = data.data;
  1969. this.setState({
  1970. loading: false,
  1971. userName: thisdata.userName,
  1972. primaryOrderNo: thisdata.primaryOrder,
  1973. additionalOrder: thisdata.additionalOrder,
  1974. contractNo: thisdata.contractNo,
  1975. orderData: thisdata,
  1976. isAddition: thisdata.additionalOrder ? true : false,
  1977. contractPictureUrl: thisdata.contractPictureUrl
  1978. ? splitUrl(
  1979. thisdata.contractPictureUrl,
  1980. ",",
  1981. globalConfig.avatarHost + "/upload"
  1982. )
  1983. : [],
  1984. });
  1985. }
  1986. }.bind(this),
  1987. });
  1988. },
  1989. render() {
  1990. const { TabPane } = Tabs;
  1991. const formItemLayout = {
  1992. labelCol: { span: 8 },
  1993. wrapperCol: { span: 14 },
  1994. };
  1995. let departmentArr = this.state.departmentArr || [];
  1996. return (
  1997. <div className="user-content">
  1998. {this.state.resVisible ? (
  1999. <ResolutionDetail
  2000. cancel={this.resCancel}
  2001. detail={this.state.resRecord}
  2002. visible={this.state.resVisible}
  2003. id={this.state.resRecord.orderNo}
  2004. />
  2005. ) : (
  2006. ""
  2007. )}
  2008. <ShowModalDiv ShowModal={this.state.showModal} />
  2009. <div className="content-title" style={{ marginBottom: 10 }}>
  2010. <span style={{ fontWeight: 900, fontSize: 16 }}>我的外包项目</span>
  2011. </div>
  2012. <Tabs defaultActiveKey="2" onChange={this.callback} className="test">
  2013. <TabPane tab="更改表格显示数据" key="1">
  2014. <div style={{ marginLeft: 10 }}>
  2015. <ChooseList
  2016. columns={this.state.columns}
  2017. changeFn={this.changeList}
  2018. changeList={this.state.changeList}
  2019. top={55}
  2020. margin={11}
  2021. />
  2022. </div>
  2023. </TabPane>
  2024. <TabPane tab="搜索" key="2">
  2025. <div className="user-search" style={{ marginLeft: 10 }}>
  2026. <Input
  2027. placeholder="客户名称"
  2028. value={this.state.nameSearch}
  2029. onChange={(e) => {
  2030. this.setState({ nameSearch: e.target.value });
  2031. }}
  2032. />
  2033. <Input
  2034. placeholder="订单编号"
  2035. value={this.state.orderNoSearch}
  2036. onChange={(e) => {
  2037. this.setState({ orderNoSearch: e.target.value });
  2038. }}
  2039. />
  2040. <Input
  2041. placeholder="合同编号"
  2042. value={this.state.contractNoSearch}
  2043. onChange={(e) => {
  2044. this.setState({ contractNoSearch: e.target.value });
  2045. }}
  2046. />
  2047. <Input
  2048. placeholder="项目编号"
  2049. value={this.state.taskNoSearch}
  2050. onChange={(e) => {
  2051. this.setState({ taskNoSearch: e.target.value });
  2052. }}
  2053. />
  2054. <Select
  2055. placeholder="选择部门"
  2056. style={{ width: 150, marginRight: "10px" }}
  2057. value={this.state.departmenttSearch}
  2058. onChange={(e) => {
  2059. this.setState({ departmenttSearch: e });
  2060. }}
  2061. >
  2062. {departmentArr.map(function (item) {
  2063. return (
  2064. <Select.Option key={item.id}>{item.name}</Select.Option>
  2065. );
  2066. })}
  2067. </Select>
  2068. <Select
  2069. placeholder="项目状态"
  2070. style={{ width: 150, marginRight: "10px" }}
  2071. value={this.state.projectStatusSearch}
  2072. onChange={(e) => {
  2073. this.setState({ projectStatusSearch: e });
  2074. console.log(this.state.projectStatusSearch);
  2075. }}
  2076. >
  2077. {projectStatus.map(function (item) {
  2078. return (
  2079. <Select.Option key={item.value}>{item.key}</Select.Option>
  2080. );
  2081. })}
  2082. </Select>
  2083. <Select
  2084. placeholder="特批状态"
  2085. style={{ width: 150, marginRight: "10px" }}
  2086. value={this.state.approvalSearch}
  2087. onChange={(e) => {
  2088. this.setState({ approvalSearch: e });
  2089. console.log(this.state.approvalSearch);
  2090. }}
  2091. >
  2092. <Select.Option key={0}>非特批</Select.Option>
  2093. <Select.Option key={1}>特批</Select.Option>
  2094. </Select>
  2095. <Button type="primary" onClick={this.search}>
  2096. 搜索
  2097. </Button>
  2098. <Button onClick={this.reset}>重置</Button>
  2099. {/* <span>更多搜索<Switch defaultChecked={false} onChange={this.searchSwitch.bind(this)} /></span>
  2100. <div className="search-more" style={this.state.searchMore ? { display: 'none' } : {}}>
  2101. <span>订单时间 :</span>
  2102. <RangePicker
  2103. value={[this.state.releaseDate[0] ? moment(this.state.releaseDate[0]) : null,
  2104. this.state.releaseDate[1] ? moment(this.state.releaseDate[1]) : null]}
  2105. onChange={(data, dataString) => { this.setState({ releaseDate: dataString }); }} />
  2106. </div> */}
  2107. </div>
  2108. </TabPane>
  2109. <TabPane tab="导出Excel" key="3">
  2110. <Button
  2111. type="primary"
  2112. style={{ margin: "11px 0 10px 10px" }}
  2113. onClick={this.exportExec}
  2114. >
  2115. 导出Excel
  2116. </Button>
  2117. </TabPane>
  2118. {/* <TabPane tab="批量操作" key="6">
  2119. <Button
  2120. type="primary"
  2121. disabled={this.state.selectedRowKeys.length == 0}
  2122. style={{ margin: "0px 0px 10px 10px" }}
  2123. onClick={e => {
  2124. e.stopPropagation(),
  2125. this.evaluateY(this.state.selectedRowKeys, "财务专员");
  2126. }}
  2127. >
  2128. 转交
  2129. </Button>
  2130. </TabPane> */}
  2131. </Tabs>
  2132. <div className="patent-table">
  2133. <Spin spinning={this.state.loading}>
  2134. <Table
  2135. columns={
  2136. this.state.changeList == undefined
  2137. ? this.state.columns
  2138. : this.state.changeList
  2139. }
  2140. dataSource={this.state.dataSource}
  2141. pagination={this.state.pagination}
  2142. onRowClick={this.tableRowClick.bind(this)}
  2143. scroll={{ x: "max-content", y: 0 }}
  2144. bordered
  2145. size={"small"}
  2146. />
  2147. </Spin>
  2148. </div>
  2149. <Assign
  2150. title="项目"
  2151. selApi={"/api/admin/orderProject/projectDistribution"}
  2152. data={this.state.assignData}
  2153. showDesc={this.state.assignVisible}
  2154. closeDesc={this.closeAssign.bind(this)}
  2155. fenpaiData={8}
  2156. specially={0}
  2157. roleName={this.state.nub}
  2158. requestMethod={"post"}
  2159. flag={this.state.flag}
  2160. isZhuan={this.state.isZhuan} //是否转交
  2161. />
  2162. <Modal
  2163. className="customeDetails"
  2164. footer=""
  2165. title=""
  2166. width="900px"
  2167. visible={this.state.visible}
  2168. onOk={this.visitOk}
  2169. onCancel={this.visitCancel}
  2170. >
  2171. <Tabs onChange={this.callBack} activeKey={this.state.modKey}>
  2172. <TabPane tab="项目概况" key="1">
  2173. <Form
  2174. layout="horizontal"
  2175. onSubmit={this.handleSubmit}
  2176. id="demand-form"
  2177. style={{ paddingBottom: "00px" }}
  2178. >
  2179. <Spin spinning={this.state.loading}>
  2180. <div className="clearfix">
  2181. <div className="clearfix">
  2182. <FormItem
  2183. className="half-item"
  2184. {...formItemLayout}
  2185. label="当前项目情况"
  2186. >
  2187. <Radio.Group
  2188. value={this.state.status}
  2189. onChange={(e) => {
  2190. this.setState({ status: e.target.value });
  2191. }}
  2192. >
  2193. <Radio value={0}>开启</Radio>
  2194. <Radio value={1}>暂停</Radio>
  2195. </Radio.Group>
  2196. <Button
  2197. type="primary"
  2198. size="small"
  2199. style={{ marginTop: "5px", position: "absolute" }}
  2200. onClick={this.caozuorizhi}
  2201. >
  2202. 操作日志
  2203. </Button>
  2204. </FormItem>
  2205. <FormItem
  2206. className="half-item"
  2207. {...formItemLayout}
  2208. label="合同编号"
  2209. >
  2210. <span>{this.state.contractNo}</span>
  2211. </FormItem>
  2212. </div>
  2213. <div className="clearfix">
  2214. <FormItem
  2215. className="half-item"
  2216. {...formItemLayout}
  2217. label="项目状态"
  2218. >
  2219. <Select
  2220. placeholder="选择项目状态"
  2221. style={{ width: "200px" }}
  2222. value={this.state.projectStatus}
  2223. onChange={(e) => {
  2224. this.setState({ projectStatus: e });
  2225. }}
  2226. >
  2227. {projectStatus.map(function (item) {
  2228. return (
  2229. <Select.Option key={item.value}>
  2230. {item.key}
  2231. </Select.Option>
  2232. );
  2233. })}
  2234. </Select>
  2235. </FormItem>
  2236. <FormItem
  2237. className="half-item"
  2238. {...formItemLayout}
  2239. label="是否特批"
  2240. >
  2241. <span>{getApproval(this.state.approval)}</span>
  2242. </FormItem>
  2243. <FormItem
  2244. className="half-item"
  2245. {...formItemLayout}
  2246. label="结算状态"
  2247. >
  2248. <span>
  2249. {getLiquidationStatus(this.state.liquidationStatus)}
  2250. </span>
  2251. </FormItem>
  2252. <FormItem
  2253. className="half-item"
  2254. {...formItemLayout}
  2255. label="流程状态"
  2256. >
  2257. <span>
  2258. {getProcessStatus(this.state.processStatus)}
  2259. </span>
  2260. </FormItem>
  2261. <FormItem
  2262. className="half-item"
  2263. {...formItemLayout}
  2264. label="订单编号"
  2265. >
  2266. <span>{this.state.orderNo}</span>
  2267. </FormItem>
  2268. </div>
  2269. <div className="clearfix">
  2270. <FormItem
  2271. className="half-item"
  2272. {...formItemLayout}
  2273. label="满意度表格"
  2274. >
  2275. <Radio.Group
  2276. value={this.state.formRetrieve}
  2277. onChange={(e) => {
  2278. this.setState({ formRetrieve: e.target.value });
  2279. }}
  2280. >
  2281. <Radio value={0}>未收回</Radio>
  2282. <Radio value={1}>已收回</Radio>
  2283. <Radio value={2}>其他</Radio>
  2284. </Radio.Group>
  2285. </FormItem>
  2286. <FormItem
  2287. className="half-item"
  2288. {...formItemLayout}
  2289. label="退单"
  2290. >
  2291. <Radio.Group
  2292. value={this.state.taskRefund}
  2293. onChange={(e) => {
  2294. this.setState({ taskRefund: e.target.value });
  2295. }}
  2296. >
  2297. <Radio value={0}>已完成</Radio>
  2298. <Radio value={1}>未完成</Radio>
  2299. <Radio value={2}>其他</Radio>
  2300. </Radio.Group>
  2301. </FormItem>
  2302. </div>
  2303. <div className="clearfix">
  2304. {
  2305. <FormItem
  2306. className="half-item"
  2307. {...formItemLayout}
  2308. label="(满意度)备注"
  2309. >
  2310. <Input
  2311. type="textarea"
  2312. placeholder="请输入备注"
  2313. rows={2}
  2314. value={this.state.retrieveContent}
  2315. onChange={(e) => {
  2316. this.setState({
  2317. retrieveContent: e.target.value,
  2318. });
  2319. }}
  2320. />
  2321. </FormItem>
  2322. }
  2323. {
  2324. <FormItem
  2325. className="half-item"
  2326. {...formItemLayout}
  2327. label="(退单)备注"
  2328. >
  2329. <Input
  2330. type="textarea"
  2331. placeholder="请输入备注"
  2332. rows={2}
  2333. value={this.state.refundContent}
  2334. onChange={(e) => {
  2335. this.setState({ refundContent: e.target.value });
  2336. }}
  2337. />
  2338. </FormItem>
  2339. }
  2340. </div>
  2341. <div className="clearfix">
  2342. <h3 className="sub-title">订单负责人信息</h3>
  2343. <FormItem
  2344. className="half-item"
  2345. {...formItemLayout}
  2346. label="负责人"
  2347. >
  2348. <span>
  2349. {this.state.salesmanName +
  2350. "(" +
  2351. this.state.depName +
  2352. ")"}
  2353. </span>
  2354. </FormItem>
  2355. <FormItem
  2356. className="half-item"
  2357. {...formItemLayout}
  2358. label="负责人电话"
  2359. >
  2360. <span>{this.state.salesmanMobile}</span>
  2361. </FormItem>
  2362. <FormItem
  2363. className="half-item"
  2364. {...formItemLayout}
  2365. label="当前财务负责人"
  2366. >
  2367. <span>{this.state.nowFinance}</span>
  2368. </FormItem>
  2369. <FormItem
  2370. className="half-item"
  2371. {...formItemLayout}
  2372. label="当前财务负责人电话"
  2373. >
  2374. <span>{this.state.nowFinanceMobile}</span>
  2375. </FormItem>
  2376. <FormItem
  2377. className="half-item"
  2378. {...formItemLayout}
  2379. style={{ opacity: ".5" }}
  2380. label="原负责人"
  2381. >
  2382. <span>{this.state.oldSalesmanName}</span>
  2383. </FormItem>
  2384. <FormItem
  2385. className="half-item"
  2386. {...formItemLayout}
  2387. style={{ opacity: ".5" }}
  2388. label="原负责人电话"
  2389. >
  2390. <span>{this.state.oldSalesmanMobile}</span>
  2391. </FormItem>
  2392. <FormItem
  2393. className="half-item"
  2394. {...formItemLayout}
  2395. style={{ opacity: ".5" }}
  2396. label="实际财务操作人"
  2397. >
  2398. <span>{this.state.financeName}</span>
  2399. </FormItem>
  2400. <FormItem
  2401. className="half-item"
  2402. {...formItemLayout}
  2403. style={{ opacity: ".5" }}
  2404. label="实际财务操作人电话"
  2405. >
  2406. <span>{this.state.financeMobile}</span>
  2407. </FormItem>
  2408. <FormItem
  2409. className="half-item"
  2410. {...formItemLayout}
  2411. label="订单留言"
  2412. >
  2413. <span>{this.state.orderRemarks}</span>
  2414. </FormItem>
  2415. <FormItem
  2416. className="half-item"
  2417. {...formItemLayout}
  2418. label=""
  2419. >
  2420. <Button onClick={this.getOrderLog}>查看订单日志</Button>
  2421. </FormItem>
  2422. <OrderRiZi
  2423. dataSourcerizhi={this.state.dataSourceY}
  2424. closeOrderLog={this.closeOrderLog}
  2425. visible={this.state.avisible}
  2426. loading={this.state.loading}
  2427. />
  2428. </div>
  2429. {/*<hr style={{border:'1px dashed #aaa', width:"90%",margin:'auto'}}/>*/}
  2430. <div className="clearfix">
  2431. <h3 className="sub-title">联系信息</h3>
  2432. <FormItem
  2433. className="half-item"
  2434. {...formItemLayout}
  2435. label="客户名称"
  2436. >
  2437. <span>{this.state.userName}</span>
  2438. </FormItem>
  2439. <FormItem
  2440. className="half-item"
  2441. {...formItemLayout}
  2442. label="企业法人"
  2443. >
  2444. <Input
  2445. placeholder="请输入法人名称"
  2446. value={this.state.legalPerson}
  2447. style={{ width: "200px" }}
  2448. onChange={(e) => {
  2449. this.setState({ legalPerson: e.target.value });
  2450. }}
  2451. ref="commodityQuantity"
  2452. />
  2453. </FormItem>
  2454. <FormItem
  2455. className="half-item"
  2456. {...formItemLayout}
  2457. label="法人电话"
  2458. >
  2459. <Input
  2460. placeholder="请输入法人电话"
  2461. value={this.state.legalPersonTel}
  2462. style={{ width: "200px" }}
  2463. onChange={(e) => {
  2464. this.setState({ legalPersonTel: e.target.value });
  2465. }}
  2466. ref="commodityQuantity"
  2467. />
  2468. </FormItem>
  2469. <FormItem
  2470. className="half-item"
  2471. {...formItemLayout}
  2472. label="客户联系人"
  2473. >
  2474. <Input
  2475. placeholder="请输入联系人名称"
  2476. value={this.state.contacts}
  2477. style={{ width: "200px" }}
  2478. onChange={(e) => {
  2479. this.setState({ contacts: e.target.value });
  2480. }}
  2481. ref="commodityQuantity"
  2482. />
  2483. </FormItem>
  2484. <FormItem
  2485. className="half-item"
  2486. {...formItemLayout}
  2487. label="联系人电话"
  2488. >
  2489. <Input
  2490. placeholder="请输入联系人电话"
  2491. value={this.state.contactMobile}
  2492. style={{ width: "200px" }}
  2493. onChange={(e) => {
  2494. this.setState({ contactMobile: e.target.value });
  2495. }}
  2496. ref="commodityQuantity"
  2497. />
  2498. </FormItem>
  2499. <FormItem
  2500. className="half-item"
  2501. {...formItemLayout}
  2502. label="企业地址"
  2503. >
  2504. <Cascader
  2505. options={areaSelect()}
  2506. value={this.state.ProvinceCity}
  2507. placeholder="选择城市"
  2508. style={{ width: "200px" }}
  2509. onChange={(e) => {
  2510. this.setState({ ProvinceCity: e });
  2511. }}
  2512. />
  2513. </FormItem>
  2514. <FormItem
  2515. className="half-item"
  2516. {...formItemLayout}
  2517. label=""
  2518. ></FormItem>
  2519. <FormItem
  2520. className="half-item"
  2521. {...formItemLayout}
  2522. label=""
  2523. >
  2524. <Input
  2525. placeholder="请输入详细地址"
  2526. value={this.state.postalAddress}
  2527. style={{ width: "200px", marginLeft: "12em" }}
  2528. onChange={(e) => {
  2529. this.setState({ postalAddress: e.target.value });
  2530. }}
  2531. ref="commodityQuantity"
  2532. />
  2533. </FormItem>
  2534. </div>
  2535. {/*<hr style={{border:'1px dashed #aaa', width:"90%",margin:'auto'}}/>*/}
  2536. <div className="clearfix">
  2537. <h3 className="sub-title">项目信息</h3>
  2538. <FormItem
  2539. className="half-item"
  2540. {...formItemLayout}
  2541. label="项目编号"
  2542. >
  2543. <span>
  2544. {this.state.splitStatus == 2
  2545. ? this.state.splitSuper + "-" + this.state.splitId
  2546. : this.state.id}
  2547. </span>
  2548. </FormItem>
  2549. <FormItem
  2550. className="half-item"
  2551. {...formItemLayout}
  2552. label="项目名称"
  2553. >
  2554. <span>{this.state.taskName}</span>
  2555. </FormItem>
  2556. <FormItem
  2557. className="half-item"
  2558. {...formItemLayout}
  2559. label="项目状态"
  2560. >
  2561. <Select
  2562. placeholder="选择项目状态"
  2563. style={{ width: "200px" }}
  2564. value={this.state.taskStatus}
  2565. onChange={(e) => {
  2566. this.setState({ taskStatus: e });
  2567. }}
  2568. >
  2569. {taskStatus.map(function (item) {
  2570. return (
  2571. <Select.Option key={item.value}>
  2572. {item.key}
  2573. </Select.Option>
  2574. );
  2575. })}
  2576. </Select>
  2577. </FormItem>
  2578. <FormItem
  2579. className="half-item"
  2580. {...formItemLayout}
  2581. label="项目类别"
  2582. >
  2583. <span>{this.state.cname}</span>
  2584. </FormItem>
  2585. <FormItem
  2586. className="half-item"
  2587. {...formItemLayout}
  2588. label="证书编号"
  2589. >
  2590. <Input
  2591. placeholder="请输入证书编号"
  2592. value={this.state.certificateNumber}
  2593. style={{ width: "200px" }}
  2594. onChange={(e) => {
  2595. this.setState({
  2596. certificateNumber: e.target.value,
  2597. });
  2598. }}
  2599. ref="commodityQuantity"
  2600. />
  2601. </FormItem>
  2602. </div>
  2603. <div className="clearfix">
  2604. <h3 className="sub-title">申报系统账户信息</h3>
  2605. {/*<span style={{color:'red'}}>注:仅技术部可见</span>*/}
  2606. <FormItem
  2607. className="half-item"
  2608. {...formItemLayout}
  2609. label="用户名"
  2610. >
  2611. <Input
  2612. placeholder="请输入用户名"
  2613. value={this.state.declareUser}
  2614. style={{ width: "200px" }}
  2615. onChange={(e) => {
  2616. this.setState({ declareUser: e.target.value });
  2617. }}
  2618. />
  2619. </FormItem>
  2620. <FormItem
  2621. className="half-item"
  2622. {...formItemLayout}
  2623. label="密码"
  2624. >
  2625. <Input
  2626. placeholder="请输入密码"
  2627. value={this.state.declarePwd}
  2628. style={{ width: "200px" }}
  2629. onChange={(e) => {
  2630. this.setState({ declarePwd: e.target.value });
  2631. }}
  2632. />
  2633. </FormItem>
  2634. </div>
  2635. <div className="clearfix">
  2636. <h3 className="sub-title">项目申报进度</h3>
  2637. <FormItem
  2638. className="half-item"
  2639. {...formItemLayout}
  2640. label="申报批次"
  2641. >
  2642. <Select
  2643. value={
  2644. this.state.declarationBatch
  2645. ? this.state.declarationBatch
  2646. : undefined
  2647. }
  2648. placeholder="请选择批次"
  2649. style={{ width: 200 }}
  2650. onChange={(e) => {
  2651. this.setState({
  2652. declarationBatch: e,
  2653. });
  2654. }}
  2655. >
  2656. <Option value={1}>第一批</Option>
  2657. <Option value={2}>第二批</Option>
  2658. <Option value={3}>第三批</Option>
  2659. <Option value={4}>第四批</Option>
  2660. </Select>
  2661. </FormItem>
  2662. <FormItem
  2663. className="half-item"
  2664. {...formItemLayout}
  2665. label="启动时间"
  2666. >
  2667. <DatePicker
  2668. style={{
  2669. marginTop: "2px",
  2670. width: "200px",
  2671. height: "32px",
  2672. }}
  2673. showTime
  2674. format="YYYY-MM-DD"
  2675. onOk={() => {}}
  2676. value={
  2677. this.state.startDate
  2678. ? moment(this.state.startDate)
  2679. : null
  2680. }
  2681. onChange={(data, dataString) => {
  2682. this.setState({ startDate: dataString });
  2683. }}
  2684. />
  2685. </FormItem>
  2686. <FormItem
  2687. className="half-item"
  2688. {...formItemLayout}
  2689. label="完成时间"
  2690. >
  2691. <DatePicker
  2692. style={{
  2693. marginTop: "2px",
  2694. width: "200px",
  2695. height: "32px",
  2696. }}
  2697. showTime
  2698. format="YYYY-MM-DD"
  2699. onOk={() => {}}
  2700. value={
  2701. this.state.endDate
  2702. ? moment(this.state.endDate)
  2703. : null
  2704. }
  2705. onChange={(data, dataString) => {
  2706. this.setState({ endDate: dataString });
  2707. }}
  2708. />
  2709. </FormItem>
  2710. <FormItem
  2711. className="half-item"
  2712. {...formItemLayout}
  2713. label="受理时间"
  2714. >
  2715. <DatePicker
  2716. style={{
  2717. marginTop: "2px",
  2718. width: "200px",
  2719. height: "32px",
  2720. }}
  2721. showTime
  2722. format="YYYY-MM-DD"
  2723. onOk={() => {}}
  2724. value={
  2725. this.state.acceptDate
  2726. ? moment(this.state.acceptDate)
  2727. : null
  2728. }
  2729. onChange={(data, dataString) => {
  2730. this.setState({ acceptDate: dataString });
  2731. }}
  2732. />
  2733. </FormItem>
  2734. <FormItem
  2735. className="half-item"
  2736. {...formItemLayout}
  2737. label="评审时间"
  2738. >
  2739. <DatePicker
  2740. style={{
  2741. marginTop: "2px",
  2742. width: "200px",
  2743. height: "32px",
  2744. }}
  2745. showTime
  2746. format="YYYY-MM-DD"
  2747. onOk={() => {}}
  2748. value={
  2749. this.state.reviewDate
  2750. ? moment(this.state.reviewDate)
  2751. : null
  2752. }
  2753. onChange={(data, dataString) => {
  2754. this.setState({ reviewDate: dataString });
  2755. }}
  2756. />
  2757. </FormItem>
  2758. <FormItem
  2759. className="half-item"
  2760. {...formItemLayout}
  2761. label="公示时间"
  2762. >
  2763. <DatePicker
  2764. style={{
  2765. marginTop: "2px",
  2766. width: "200px",
  2767. height: "32px",
  2768. }}
  2769. showTime
  2770. format="YYYY-MM-DD"
  2771. onOk={() => {}}
  2772. value={
  2773. this.state.publicityDate
  2774. ? moment(this.state.publicityDate)
  2775. : null
  2776. }
  2777. onChange={(data, dataString) => {
  2778. this.setState({ publicityDate: dataString });
  2779. }}
  2780. />
  2781. </FormItem>
  2782. <FormItem
  2783. className="half-item"
  2784. {...formItemLayout}
  2785. label="发证时间"
  2786. >
  2787. <DatePicker
  2788. style={{
  2789. marginTop: "2px",
  2790. width: "200px",
  2791. height: "32px",
  2792. }}
  2793. showTime
  2794. format="YYYY-MM-DD"
  2795. onOk={() => {}}
  2796. value={
  2797. this.state.licenceDate
  2798. ? moment(this.state.licenceDate)
  2799. : null
  2800. }
  2801. onChange={(data, dataString) => {
  2802. this.setState({ licenceDate: dataString });
  2803. }}
  2804. />
  2805. </FormItem>
  2806. <FormItem
  2807. className="half-item"
  2808. {...formItemLayout}
  2809. label="立项金额(万元)"
  2810. >
  2811. <Input
  2812. placeholder="请输入立项金额"
  2813. value={this.state.setUpAmount}
  2814. style={{ width: "200px" }}
  2815. onChange={(e) => {
  2816. this.setState({ setUpAmount: e.target.value });
  2817. }}
  2818. ref="commodityQuantity"
  2819. />
  2820. </FormItem>
  2821. <FormItem
  2822. className="half-item"
  2823. {...formItemLayout}
  2824. label="是否到款"
  2825. >
  2826. <Radio.Group
  2827. value={this.state.arrivalMoney}
  2828. onChange={(e) => {
  2829. this.setState({ arrivalMoney: e.target.value });
  2830. }}
  2831. >
  2832. <Radio value={0}>未到企业</Radio>
  2833. <Radio value={1}>已到企业</Radio>
  2834. </Radio.Group>
  2835. </FormItem>
  2836. </div>
  2837. <div className="clearfix">
  2838. <FormItem
  2839. labelCol={{ span: 3 }}
  2840. wrapperCol={{ span: 16 }}
  2841. label="附件"
  2842. >
  2843. <Picture
  2844. fileList={(e) => {
  2845. this.setState({ attachmentUrl: e });
  2846. }}
  2847. pictureUrl={this.state.attachmentUrl}
  2848. visible={this.props.visible}
  2849. data={{
  2850. sign: "order_task_file",
  2851. url: "/api/admin/orderProject/uploadOrderTaskFile",
  2852. number: 8,
  2853. }}
  2854. />
  2855. </FormItem>
  2856. </div>
  2857. <div className="clearfix">
  2858. <FormItem
  2859. labelCol={{ span: 3 }}
  2860. wrapperCol={{ span: 16 }}
  2861. label="备注"
  2862. >
  2863. <Input
  2864. type="textarea"
  2865. placeholder="请输入备注"
  2866. rows={4}
  2867. value={this.state.taskComment}
  2868. onChange={(e) => {
  2869. this.setState({ taskComment: e.target.value });
  2870. }}
  2871. />
  2872. </FormItem>
  2873. </div>
  2874. <div>
  2875. <h3 className="sub-title">项目业务</h3>
  2876. {this.state.processStatus == 0 ? (
  2877. <Button
  2878. type="primary"
  2879. onClick={this.addDetailed}
  2880. style={{
  2881. float: "right",
  2882. marginRight: "50px",
  2883. marginBottom: "15px",
  2884. }}
  2885. >
  2886. 添加项目明细
  2887. </Button>
  2888. ) : (
  2889. ""
  2890. )}
  2891. </div>
  2892. <div className="patent-table">
  2893. <Spin spinning={this.state.loading}>
  2894. <Table
  2895. columns={this.state.columnsX}
  2896. dataSource={this.state.dataSourceX}
  2897. pagination={this.state.paginations}
  2898. onRowClick={this.tableRowClickX}
  2899. bordered
  2900. size="small"
  2901. />
  2902. </Spin>
  2903. </div>
  2904. <div className="clearfix">
  2905. <Button
  2906. className="cancel"
  2907. type="primary"
  2908. onClick={this.tijiaoOk}
  2909. style={{ marginLeft: "200px", marginTop: "10px" }}
  2910. htmlType="submit"
  2911. >
  2912. 保存
  2913. </Button>
  2914. <Button
  2915. className="cancel"
  2916. type="ghost"
  2917. onClick={this.visitCancel}
  2918. style={{ marginLeft: "50px", marginTop: "10px" }}
  2919. >
  2920. 取消
  2921. </Button>
  2922. </div>
  2923. </div>
  2924. </Spin>
  2925. </Form>
  2926. </TabPane>
  2927. <TabPane tab="外包接单公司信息" key="2">
  2928. {this.state.visible && this.state.modKey === '2'?<CheckProject
  2929. {...this.props}
  2930. tid={this.state.tid}
  2931. status={this.state.refundStatus}
  2932. projectType={this.state.projectType}
  2933. patentNameType={this.state.patentNameType}
  2934. patentName={this.state.patentName}
  2935. patentType={this.state.patentType}
  2936. isPreviewPay={true}
  2937. thirdInfoList={this.state.thirdInfoList}
  2938. dataSource={this.state.payNodeList}
  2939. outsourceRemarks={this.state.outsourceRemarks}
  2940. fileList={this.state.pictureUrl}
  2941. startType={this.state.startType}
  2942. projectStatus={this.state.projectStatus}
  2943. onRefresh={()=>{
  2944. this.waiDetail();
  2945. this.thirdTable(this.state.tid);
  2946. this.payNodeTable(this.state.tid)
  2947. this.loadData(this.state.page)
  2948. }}
  2949. />:<div/>}
  2950. </TabPane>
  2951. {!this.props.isZxs || (this.state.isHuiyuan && this.props.isZxs) ? (
  2952. <TabPane tab="订单详情" key="3">
  2953. <Spin spinning={this.state.loading}>
  2954. <OrderDetail
  2955. orderData={this.state.orderData}
  2956. getOrderLog={this.getOrderLog}
  2957. dataSourceX={this.state.dataSourceX}
  2958. contactList={this.state.jiedian}
  2959. orderNo={this.state.orderNo}
  2960. totalCui={this.state.totalCui}
  2961. contactListNew={this.state.jiedianNew}
  2962. pictureUrl={this.state.contractPictureUrl}
  2963. />
  2964. </Spin>
  2965. </TabPane>
  2966. ) : (
  2967. ""
  2968. )}
  2969. </Tabs>
  2970. </Modal>
  2971. <Modal
  2972. maskClosable={false}
  2973. visible={this.state.lookVisible}
  2974. onOk={this.noCancel}
  2975. onCancel={this.noCancel}
  2976. width="500px"
  2977. title={"添加工时"}
  2978. footer=""
  2979. className="admin-desc-content"
  2980. >
  2981. <Form layout="horizontal" id="demand-form">
  2982. <Spin spinning={this.state.loading}>
  2983. <div className="clearfix">
  2984. <FormItem {...formItemLayout} label="工作日期">
  2985. <DatePicker
  2986. style={{ marginTop: "2px", width: "200px", height: "32px" }}
  2987. showTime
  2988. format="YYYY-MM-DD"
  2989. onOk={() => {}}
  2990. value={
  2991. this.state.taskDate ? moment(this.state.taskDate) : null
  2992. }
  2993. onChange={(data, dataString) => {
  2994. this.setState({ taskDate: dataString });
  2995. }}
  2996. />
  2997. </FormItem>
  2998. </div>
  2999. <div className="clearfix">
  3000. <FormItem {...formItemLayout} label="工作时长">
  3001. <Input
  3002. placeholder="请输入工作时长"
  3003. value={this.state.hours}
  3004. style={{ width: "200px" }}
  3005. onChange={(e) => {
  3006. this.setState({ hours: e.target.value });
  3007. }}
  3008. ref="commodityQuantity"
  3009. />
  3010. </FormItem>
  3011. </div>
  3012. <div className="clearfix">
  3013. <FormItem {...formItemLayout} label="工作内容">
  3014. <Input
  3015. type="textarea"
  3016. placeholder="请输入备注"
  3017. rows={4}
  3018. value={this.state.remarks}
  3019. onChange={(e) => {
  3020. this.setState({ remarks: e.target.value });
  3021. }}
  3022. />
  3023. </FormItem>
  3024. </div>
  3025. <div className="clearfix">
  3026. <Button
  3027. className="cancel"
  3028. type="primary"
  3029. onClick={this.tianjiaOk}
  3030. style={{ marginLeft: "100px", marginTop: "10px" }}
  3031. htmlType="submit"
  3032. >
  3033. 确定
  3034. </Button>
  3035. <Button
  3036. className="cancel"
  3037. type="ghost"
  3038. onClick={this.noCancel}
  3039. style={{ marginLeft: "50px" }}
  3040. >
  3041. 取消
  3042. </Button>
  3043. </div>
  3044. </Spin>
  3045. </Form>
  3046. </Modal>
  3047. <Modal
  3048. maskClosable={false}
  3049. visible={this.state.addnextVisible}
  3050. onOk={this.nextCancel}
  3051. onCancel={this.nextCancel}
  3052. width="800px"
  3053. title="项目项目详情"
  3054. footer=""
  3055. className="admin-desc-content"
  3056. >
  3057. <Form layout="horizontal" onSubmit={this.nextSubmit} id="demand-form">
  3058. <Spin spinning={this.state.loading}>
  3059. <div className="clearfix">
  3060. <FormItem
  3061. className="half-item"
  3062. {...formItemLayout}
  3063. label="项目名称"
  3064. >
  3065. <span>{this.state.commodityName}</span>
  3066. </FormItem>
  3067. <FormItem
  3068. className="half-item"
  3069. {...formItemLayout}
  3070. label="项目数量"
  3071. >
  3072. <span>{this.state.commodityQuantity}</span>
  3073. </FormItem>
  3074. <FormItem
  3075. className="half-item"
  3076. {...formItemLayout}
  3077. label="金额(万元)"
  3078. >
  3079. <span>{this.state.commodityPrice}</span>
  3080. </FormItem>
  3081. <FormItem
  3082. className="half-item"
  3083. {...formItemLayout}
  3084. label="主要项目"
  3085. >
  3086. <span>{getboutique(this.state.main)}</span>
  3087. </FormItem>
  3088. <div className="clearfix">
  3089. <FormItem
  3090. labelCol={{ span: 3 }}
  3091. wrapperCol={{ span: 18 }}
  3092. label="服务说明"
  3093. >
  3094. <span>{this.state.taskComment}</span>
  3095. </FormItem>
  3096. </div>
  3097. </div>
  3098. </Spin>
  3099. </Form>
  3100. </Modal>
  3101. <Modal
  3102. maskClosable={false}
  3103. visible={this.state.speVisible}
  3104. onOk={this.visitOk}
  3105. onCancel={this.visitCancel}
  3106. width="900px"
  3107. title=""
  3108. footer=""
  3109. className="admin-desc-content"
  3110. >
  3111. <Tabs
  3112. activeKey={this.state.modKey}
  3113. onChange={this.callBack}
  3114. type="card"
  3115. >
  3116. <TabPane tab="项目概况" key="1">
  3117. <div className="clearfix">
  3118. <FormItem
  3119. className="half-item"
  3120. {...formItemLayout}
  3121. label="当前项目情况"
  3122. >
  3123. <Radio.Group
  3124. value={this.state.status}
  3125. onChange={(e) => {
  3126. this.setState({ status: e.target.value });
  3127. }}
  3128. >
  3129. <Radio value={0}>开启</Radio>
  3130. <Radio value={1}>暂停</Radio>
  3131. </Radio.Group>
  3132. <Button
  3133. type="primary"
  3134. size="small"
  3135. style={{ marginTop: "5px", position: "absolute" }}
  3136. onClick={this.caozuorizhi}
  3137. >
  3138. 操作日志
  3139. </Button>
  3140. </FormItem>
  3141. <FormItem
  3142. className="half-item"
  3143. {...formItemLayout}
  3144. label="合同编号"
  3145. >
  3146. <span>{this.state.contractNo}</span>
  3147. </FormItem>
  3148. </div>
  3149. <div className="clearfix">
  3150. <FormItem
  3151. className="half-item"
  3152. {...formItemLayout}
  3153. label="项目状态"
  3154. >
  3155. <Select
  3156. placeholder="选择项目状态"
  3157. style={{ width: "200px" }}
  3158. value={this.state.projectStatus}
  3159. onChange={(e) => {
  3160. this.setState({ projectStatus: e });
  3161. }}
  3162. >
  3163. {projectStatus.map(function (item) {
  3164. return (
  3165. <Select.Option key={item.value}>
  3166. {item.key}
  3167. </Select.Option>
  3168. );
  3169. })}
  3170. </Select>
  3171. </FormItem>
  3172. <FormItem
  3173. className="half-item"
  3174. {...formItemLayout}
  3175. label="是否特批"
  3176. >
  3177. <span>{getApproval(this.state.approval)}</span>
  3178. </FormItem>
  3179. <FormItem
  3180. className="half-item"
  3181. {...formItemLayout}
  3182. label="结算状态"
  3183. >
  3184. <span>
  3185. {getLiquidationStatus(this.state.liquidationStatus)}
  3186. </span>
  3187. </FormItem>
  3188. <FormItem
  3189. className="half-item"
  3190. {...formItemLayout}
  3191. label="流程状态"
  3192. >
  3193. <span>{getProcessStatus(this.state.processStatus)}</span>
  3194. </FormItem>
  3195. <FormItem
  3196. className="half-item"
  3197. {...formItemLayout}
  3198. label="订单编号"
  3199. >
  3200. <span>{this.state.orderNo}</span>
  3201. </FormItem>
  3202. </div>
  3203. <div className="clearfix">
  3204. <FormItem
  3205. className="half-item"
  3206. {...formItemLayout}
  3207. label="满意度表格"
  3208. >
  3209. <Radio.Group
  3210. value={this.state.formRetrieve}
  3211. onChange={(e) => {
  3212. this.setState({ formRetrieve: e.target.value });
  3213. }}
  3214. >
  3215. <Radio value={0}>未收回</Radio>
  3216. <Radio value={1}>已收回</Radio>
  3217. <Radio value={2}>其他</Radio>
  3218. </Radio.Group>
  3219. </FormItem>
  3220. <FormItem
  3221. className="half-item"
  3222. {...formItemLayout}
  3223. label="退单"
  3224. >
  3225. <Radio.Group
  3226. value={this.state.taskRefund}
  3227. onChange={(e) => {
  3228. this.setState({ taskRefund: e.target.value });
  3229. }}
  3230. >
  3231. <Radio value={0}>已完成</Radio>
  3232. <Radio value={1}>未完成</Radio>
  3233. <Radio value={2}>其他</Radio>
  3234. </Radio.Group>
  3235. </FormItem>
  3236. </div>
  3237. <div className="clearfix">
  3238. {
  3239. <FormItem
  3240. className="half-item"
  3241. {...formItemLayout}
  3242. label="(满意度)备注"
  3243. >
  3244. <Input
  3245. type="textarea"
  3246. placeholder="请输入备注"
  3247. rows={2}
  3248. value={this.state.retrieveContent}
  3249. onChange={(e) => {
  3250. this.setState({ retrieveContent: e.target.value });
  3251. }}
  3252. />
  3253. </FormItem>
  3254. }
  3255. {
  3256. <FormItem
  3257. className="half-item"
  3258. {...formItemLayout}
  3259. label="(退单)备注"
  3260. >
  3261. <Input
  3262. type="textarea"
  3263. placeholder="请输入备注"
  3264. rows={2}
  3265. value={this.state.refundContent}
  3266. onChange={(e) => {
  3267. this.setState({ refundContent: e.target.value });
  3268. }}
  3269. />
  3270. </FormItem>
  3271. }
  3272. </div>
  3273. <div className="clearfix">
  3274. <h3 className="sub-title">订单负责人信息</h3>
  3275. <FormItem
  3276. className="half-item"
  3277. {...formItemLayout}
  3278. label="负责人"
  3279. >
  3280. <span>
  3281. {this.state.salesmanName + "(" + this.state.depName + ")"}
  3282. </span>
  3283. </FormItem>
  3284. <FormItem
  3285. className="half-item"
  3286. {...formItemLayout}
  3287. label="负责人电话"
  3288. >
  3289. <span>{this.state.salesmanMobile}</span>
  3290. </FormItem>
  3291. <FormItem
  3292. className="half-item"
  3293. {...formItemLayout}
  3294. label="财务负责人"
  3295. >
  3296. <span>{this.state.financeName}</span>
  3297. </FormItem>
  3298. <FormItem
  3299. className="half-item"
  3300. {...formItemLayout}
  3301. label="财务负责人电话"
  3302. >
  3303. <span>{this.state.financeMobile}</span>
  3304. </FormItem>
  3305. </div>
  3306. {/*<hr style={{border:'1px dashed #aaa', width:"90%",margin:'auto'}}/>*/}
  3307. <div className="clearfix">
  3308. <h3 className="sub-title">联系信息</h3>
  3309. <FormItem
  3310. className="half-item"
  3311. {...formItemLayout}
  3312. label="客户名称"
  3313. >
  3314. <span>{this.state.userName}</span>
  3315. </FormItem>
  3316. <FormItem
  3317. className="half-item"
  3318. {...formItemLayout}
  3319. label="企业法人"
  3320. >
  3321. <Input
  3322. placeholder="请输入法人名称"
  3323. value={this.state.legalPerson}
  3324. style={{ width: "200px" }}
  3325. onChange={(e) => {
  3326. this.setState({ legalPerson: e.target.value });
  3327. }}
  3328. ref="commodityQuantity"
  3329. />
  3330. </FormItem>
  3331. <FormItem
  3332. className="half-item"
  3333. {...formItemLayout}
  3334. label="法人电话"
  3335. >
  3336. <Input
  3337. placeholder="请输入法人电话"
  3338. value={this.state.legalPersonTel}
  3339. style={{ width: "200px" }}
  3340. onChange={(e) => {
  3341. this.setState({ legalPersonTel: e.target.value });
  3342. }}
  3343. ref="commodityQuantity"
  3344. />
  3345. </FormItem>
  3346. <FormItem
  3347. className="half-item"
  3348. {...formItemLayout}
  3349. label="客户联系人"
  3350. >
  3351. <Input
  3352. placeholder="请输入联系人名称"
  3353. value={this.state.contacts}
  3354. style={{ width: "200px" }}
  3355. onChange={(e) => {
  3356. this.setState({ contacts: e.target.value });
  3357. }}
  3358. ref="commodityQuantity"
  3359. />
  3360. </FormItem>
  3361. <FormItem
  3362. className="half-item"
  3363. {...formItemLayout}
  3364. label="联系人电话"
  3365. >
  3366. <Input
  3367. placeholder="请输入联系人电话"
  3368. value={this.state.contactMobile}
  3369. style={{ width: "200px" }}
  3370. onChange={(e) => {
  3371. this.setState({ contactMobile: e.target.value });
  3372. }}
  3373. ref="commodityQuantity"
  3374. />
  3375. </FormItem>
  3376. <FormItem
  3377. className="half-item"
  3378. {...formItemLayout}
  3379. label="企业地址"
  3380. >
  3381. <Cascader
  3382. options={areaSelect()}
  3383. value={this.state.ProvinceCity}
  3384. placeholder="选择城市"
  3385. style={{ width: "200px" }}
  3386. onChange={(e) => {
  3387. this.setState({ ProvinceCity: e });
  3388. }}
  3389. />
  3390. </FormItem>
  3391. <FormItem
  3392. className="half-item"
  3393. {...formItemLayout}
  3394. label=""
  3395. ></FormItem>
  3396. <FormItem className="half-item" {...formItemLayout} label="">
  3397. <Input
  3398. placeholder="请输入详细地址"
  3399. value={this.state.postalAddress}
  3400. style={{ width: "200px", marginLeft: "12em" }}
  3401. onChange={(e) => {
  3402. this.setState({ postalAddress: e.target.value });
  3403. }}
  3404. ref="commodityQuantity"
  3405. />
  3406. </FormItem>
  3407. </div>
  3408. {/*<hr style={{border:'1px dashed #aaa', width:"90%",margin:'auto'}}/>*/}
  3409. <div className="clearfix">
  3410. <h3 className="sub-title">项目信息</h3>
  3411. <FormItem
  3412. className="half-item"
  3413. {...formItemLayout}
  3414. label="项目编号"
  3415. >
  3416. <span>{this.state.id}</span>
  3417. </FormItem>
  3418. <FormItem
  3419. className="half-item"
  3420. {...formItemLayout}
  3421. label="项目名称"
  3422. >
  3423. <span>{this.state.taskName}</span>
  3424. </FormItem>
  3425. <FormItem
  3426. className="half-item"
  3427. {...formItemLayout}
  3428. label="项目状态"
  3429. >
  3430. <Select
  3431. placeholder="选择项目状态"
  3432. style={{ width: "200px" }}
  3433. value={this.state.taskStatus}
  3434. onChange={(e) => {
  3435. this.setState({ taskStatus: e });
  3436. }}
  3437. >
  3438. {taskStatus.map(function (item) {
  3439. return (
  3440. <Select.Option key={item.value}>
  3441. {item.key}
  3442. </Select.Option>
  3443. );
  3444. })}
  3445. </Select>
  3446. </FormItem>
  3447. <FormItem
  3448. className="half-item"
  3449. {...formItemLayout}
  3450. label="项目类别"
  3451. >
  3452. <span>{this.state.cname}</span>
  3453. </FormItem>
  3454. <FormItem
  3455. className="half-item"
  3456. {...formItemLayout}
  3457. label="证书编号"
  3458. >
  3459. <Input
  3460. placeholder="请输入证书编号"
  3461. value={this.state.certificateNumber}
  3462. style={{ width: "200px" }}
  3463. onChange={(e) => {
  3464. this.setState({ certificateNumber: e.target.value });
  3465. }}
  3466. ref="commodityQuantity"
  3467. />
  3468. </FormItem>
  3469. </div>
  3470. <div className="clearfix" style={{ marginTop: "10px" }}>
  3471. <FormItem
  3472. labelCol={{ span: 3 }}
  3473. wrapperCol={{ span: 14 }}
  3474. label="附件"
  3475. >
  3476. <Picture
  3477. fileList={(e) => {
  3478. this.setState({ attachmentUrl: e });
  3479. }}
  3480. pictureUrl={this.state.attachmentUrl}
  3481. visible={this.props.visible}
  3482. data={{
  3483. sign: "order_task_file",
  3484. url: "/api/admin/orderProject/uploadOrderTaskFile",
  3485. number: 8,
  3486. }}
  3487. />
  3488. </FormItem>
  3489. </div>
  3490. <div className="clearfix">
  3491. <FormItem
  3492. labelCol={{ span: 3 }}
  3493. wrapperCol={{ span: 16 }}
  3494. label="备注"
  3495. >
  3496. <Input
  3497. type="textarea"
  3498. placeholder="请输入备注"
  3499. rows={4}
  3500. value={this.state.taskComment}
  3501. onChange={(e) => {
  3502. this.setState({ taskComment: e.target.value });
  3503. }}
  3504. />
  3505. </FormItem>
  3506. </div>
  3507. <div className="clearfix">
  3508. <h3 className="sub-title">项目申报进度</h3>
  3509. <FormItem
  3510. className="half-item"
  3511. {...formItemLayout}
  3512. label="申报批次"
  3513. >
  3514. <Select
  3515. value={
  3516. this.state.declarationBatch
  3517. ? this.state.declarationBatch
  3518. : undefined
  3519. }
  3520. placeholder="请选择批次"
  3521. style={{ width: 200 }}
  3522. onChange={(e) => {
  3523. this.setState({
  3524. declarationBatch: e,
  3525. });
  3526. }}
  3527. >
  3528. <Option value={1}>第一批</Option>
  3529. <Option value={2}>第二批</Option>
  3530. <Option value={3}>第三批</Option>
  3531. <Option value={4}>第四批</Option>
  3532. </Select>
  3533. </FormItem>
  3534. <FormItem
  3535. className="half-item"
  3536. {...formItemLayout}
  3537. label="启动时间"
  3538. >
  3539. <DatePicker
  3540. style={{ marginTop: "5px" }}
  3541. showTime
  3542. format="YYYY-MM-DD"
  3543. onOk={() => {}}
  3544. value={
  3545. this.state.startDate ? moment(this.state.startDate) : null
  3546. }
  3547. onChange={(data, dataString) => {
  3548. this.setState({ startDate: dataString });
  3549. }}
  3550. />
  3551. </FormItem>
  3552. <FormItem
  3553. className="half-item"
  3554. {...formItemLayout}
  3555. label="软著派单数量"
  3556. >
  3557. <span>{this.state.commodityQuantity}</span>
  3558. <Button
  3559. type="primary"
  3560. size="small"
  3561. style={{ marginLeft: "45px" }}
  3562. onClick={this.addcontact}
  3563. >
  3564. +增加下证信息
  3565. </Button>
  3566. </FormItem>
  3567. <div className="patent-table">
  3568. <Spin spinning={this.state.loading}>
  3569. <Table
  3570. columns={this.state.ContactsLists}
  3571. dataSource={this.state.contactList}
  3572. pagination={false}
  3573. bordered
  3574. size="small"
  3575. />
  3576. </Spin>
  3577. </div>
  3578. </div>
  3579. <div className="clearfix">
  3580. <h3 className="sub-title">项目业务</h3>
  3581. <div className="patent-table">
  3582. <Spin spinning={this.state.loading}>
  3583. <Table
  3584. columns={this.state.columnsX}
  3585. dataSource={this.state.dataSourceX}
  3586. pagination={this.state.paginations}
  3587. onRowClick={this.tableRowClickX}
  3588. bordered
  3589. size="small"
  3590. />
  3591. </Spin>
  3592. </div>
  3593. </div>
  3594. <div className="clearfix">
  3595. <Button
  3596. className="cancel"
  3597. type="primary"
  3598. onClick={this.tijiaoOk}
  3599. style={{ marginLeft: "200px", marginTop: "10px" }}
  3600. htmlType="submit"
  3601. >
  3602. 保存
  3603. </Button>
  3604. <Button
  3605. className="cancel"
  3606. type="ghost"
  3607. onClick={this.visitCancel}
  3608. style={{ marginLeft: "50px", marginTop: "10px" }}
  3609. >
  3610. 取消
  3611. </Button>
  3612. </div>
  3613. </TabPane>
  3614. <TabPane tab="外包接单公司信息" key="2">
  3615. {/*<Button type="primary" onClick={this.addCompany} style={{float:'right',marginBottom:'10px'}}>+新增接单公司</Button>*/}
  3616. {
  3617. <div className="clearfix">
  3618. <h3 className="sub-title" style={{ marginBottom: "10px" }}>
  3619. 新增(编辑)接单公司
  3620. </h3>
  3621. <FormItem
  3622. className="three-item"
  3623. {...formItemLayout}
  3624. label={
  3625. <span>
  3626. <strong style={{ color: "#f00" }}>*</strong>公司名称
  3627. </span>
  3628. }
  3629. >
  3630. <Input
  3631. placeholder="请输入公司名称"
  3632. value={this.state.cName}
  3633. style={{ width: "200px" }}
  3634. onChange={(e) => {
  3635. this.setState({ cName: e.target.value });
  3636. }}
  3637. className="height-input"
  3638. />
  3639. </FormItem>
  3640. <FormItem
  3641. className="three-item"
  3642. {...formItemLayout}
  3643. label={
  3644. <span>
  3645. <strong style={{ color: "#f00" }}>*</strong>联系人
  3646. </span>
  3647. }
  3648. >
  3649. <Input
  3650. placeholder="请输入联系人名称"
  3651. value={this.state.companyContacts}
  3652. style={{ width: "200px" }}
  3653. onChange={(e) => {
  3654. this.setState({ companyContacts: e.target.value });
  3655. }}
  3656. className="height-input"
  3657. />
  3658. </FormItem>
  3659. <FormItem
  3660. className="three-item"
  3661. {...formItemLayout}
  3662. label={
  3663. <span>
  3664. <strong style={{ color: "#f00" }}>*</strong>联系人电话
  3665. </span>
  3666. }
  3667. >
  3668. <Input
  3669. placeholder="请输入联系人电话"
  3670. value={this.state.companyContactsMobile}
  3671. style={{ width: "200px" }}
  3672. onChange={(e) => {
  3673. this.setState({
  3674. companyContactsMobile: e.target.value,
  3675. });
  3676. }}
  3677. className="height-input"
  3678. />
  3679. </FormItem>
  3680. <FormItem
  3681. className="three-item"
  3682. {...formItemLayout}
  3683. label="企业地址"
  3684. >
  3685. <Cascader
  3686. options={areaSelect()}
  3687. value={this.state.companyProvinceArr}
  3688. placeholder="选择城市"
  3689. style={{ width: "200px" }}
  3690. onChange={(e) => {
  3691. this.setState({ companyProvinceArr: e });
  3692. }}
  3693. />
  3694. </FormItem>
  3695. <FormItem className="three-item" {...formItemLayout} label="">
  3696. <Input
  3697. placeholder="请输入详细地址"
  3698. value={this.state.companyAddress}
  3699. style={{ width: "200px", marginLeft: "12em" }}
  3700. onChange={(e) => {
  3701. this.setState({ companyAddress: e.target.value });
  3702. }}
  3703. className="height-input"
  3704. />
  3705. </FormItem>
  3706. <FormItem
  3707. className="three-item"
  3708. {...formItemLayout}
  3709. label=""
  3710. ></FormItem>
  3711. <div className="clearfix">
  3712. <FormItem
  3713. labelCol={{ span: 3 }}
  3714. wrapperCol={{ span: 16 }}
  3715. label="备注"
  3716. >
  3717. <Input
  3718. type="textarea"
  3719. placeholder="请输入备注"
  3720. rows={4}
  3721. value={this.state.companyRemarks}
  3722. onChange={(e) => {
  3723. this.setState({ companyRemarks: e.target.value });
  3724. }}
  3725. />
  3726. </FormItem>
  3727. </div>
  3728. <Button
  3729. type="primary"
  3730. style={{
  3731. float: "right",
  3732. marginTop: "10px",
  3733. marginRight: "50px",
  3734. }}
  3735. onClick={() => {
  3736. this.saveCompany(this.state.companyId);
  3737. }}
  3738. >
  3739. 保存
  3740. </Button>
  3741. </div>
  3742. }
  3743. <p style={{ color: "red" }}>
  3744. 提示:查看备注请点击表格左侧加号按钮~
  3745. </p>
  3746. <div className="patent-table" style={{ marginTop: "10px" }}>
  3747. <Spin spinning={this.state.loading}>
  3748. <Table
  3749. columns={this.state.companyColumns}
  3750. dataSource={this.state.companys}
  3751. scroll={{ x: 300, y: 0 }}
  3752. expandedRowRender={(record) => {
  3753. return <p>{record.remarks}</p>;
  3754. }}
  3755. bordered
  3756. size="small"
  3757. pagination={false}
  3758. />
  3759. </Spin>
  3760. </div>
  3761. </TabPane>
  3762. {!this.props.isZxs || (this.state.isHuiyuan && this.props.isZxs) ? (
  3763. <TabPane tab="订单详情" key="3">
  3764. <Spin spinning={this.state.loading}>
  3765. <OrderDetail
  3766. orderData={this.state.orderData}
  3767. getOrderLog={this.getOrderLog}
  3768. dataSourceX={this.state.dataSourceX}
  3769. contactList={this.state.jiedian}
  3770. orderNo={this.state.orderNo}
  3771. totalCui={this.state.totalCui}
  3772. contactListNew={this.state.jiedianNew}
  3773. pictureUrl={this.state.contractPictureUrl}
  3774. />
  3775. </Spin>
  3776. <OrderRiZi
  3777. dataSourcerizhi={this.state.dataSourceY}
  3778. closeOrderLog={this.closeOrderLog}
  3779. visible={this.state.avisible}
  3780. loading={this.state.loading}
  3781. />
  3782. </TabPane>
  3783. ) : (
  3784. ""
  3785. )}
  3786. </Tabs>
  3787. </Modal>
  3788. {/* <Modal
  3789. width="800px"
  3790. visible={this.state.visibleA}
  3791. onCancel={this.visitCancelA}
  3792. title="操作日志"
  3793. footer=""
  3794. className="admin-desc-content"
  3795. >
  3796. <div className="patent-table patent-table-center">
  3797. <Spin spinning={this.state.loading}>
  3798. <Table
  3799. columns={this.state.columnsA}
  3800. dataSource={this.state.dataSourceA}
  3801. pagination={false}
  3802. />
  3803. </Spin>
  3804. </div>
  3805. </Modal> */}
  3806. <OrderRiZi
  3807. dataSourcerizhi={this.state.dataSourceA}
  3808. closeOrderLog={this.visitCancelA}
  3809. visible={this.state.visibleA}
  3810. loading={this.state.loading}
  3811. />
  3812. <Modal
  3813. title="工时记录"
  3814. visible={this.state.timeVisible}
  3815. onCancel={this.timeClose}
  3816. width={800}
  3817. footer={null}
  3818. >
  3819. <Spin spinning={this.state.loading}>
  3820. <Table
  3821. columns={this.state.columnsTime}
  3822. dataSource={this.state.dataSourceTime}
  3823. pagination={false}
  3824. scroll={{ x: "max-content", y: 0 }}
  3825. bordered
  3826. size={"small"}
  3827. />
  3828. <p style={{ marginTop: 10, color: "red" }}>
  3829. 累计工时(小时):{this.state.recordHour}
  3830. </p>
  3831. </Spin>
  3832. </Modal>
  3833. </div>
  3834. );
  3835. },
  3836. });
  3837. export default MyTaskOutsource;