myTaskOutsource.jsx 127 KB

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