index.vue 200 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968
  1. <template>
  2. <normalLayout style="background: #f8f8f8;">
  3. <template #refresh>
  4. <div style="margin-right:15px">
  5. <el-button style="font-size:14px !important;color: #3874f6" type="text" size="small" @click="$refs.scroll.wrap.scrollTop=0">返回顶部</el-button>
  6. </div>
  7. <!-- <i class="el-icon-refresh-right" @click="refresh" v-loading.fullscreen.lock="fullscreenLoading"></i> -->
  8. </template>
  9. <template #content>
  10. <div style="padding: 16px;">
  11. <el-scrollbar ref="scroll">
  12. <div style="height:calc(100vh - 230px);padding:5rem">
  13. <div style="display: flex;justify-content: space-between">
  14. <div>
  15. <div class=" inline-16">
  16. <label class="search__label" >部门:</label>
  17. <el-cascader
  18. ref="selectdep"
  19. placement="bottom"
  20. size="small"
  21. v-model="depment"
  22. :options="deplist"
  23. :props="{emitPath:true,expandTrigger:'hover',checkStrictly:true,label:'label',value:'departmentid',children:'children'}"
  24. @change="selectDep"
  25. clearable
  26. ></el-cascader>
  27. </div>
  28. <div class="inline-16">
  29. <label class="search__label" >业务员:</label>
  30. <el-select v-model="person" filterable placeholder="请选择" size="small" clearable @change="selectPerson">
  31. <el-option
  32. v-for="item in personnelList"
  33. :key="item.index"
  34. :label="item.name"
  35. :value="item.userid">
  36. </el-option>
  37. </el-select>
  38. </div>
  39. <div class="inline-16">
  40. <p class="search__label">状态:</p>
  41. <el-select v-model="isleave" clearable style="margin-right:10px" size="small" placeholder="请选择状态" @change="leaveChange" >
  42. <el-option label="在职" value="1"></el-option>
  43. <el-option label="离职" value="2"></el-option>
  44. </el-select>
  45. </div>
  46. </div>
  47. <div>
  48. <btnSelect :btn-title="['全部','本年','本季','本月','去年']" :date-type="dateType" @btnClick="btnClick"></btnSelect>
  49. </div>
  50. </div>
  51. <div class="data-all">
  52. <div style="margin-bottom:20px">项目数据概况</div>
  53. <div class="data-all-wrapper">
  54. <div class="data-left">
  55. <div class="data-item" @click="onClick('项目总数')">
  56. <p>{{ tool.formatAmount(dataAll.totalqty) }}</p>
  57. <p>项目总数</p>
  58. </div>
  59. <div class="data-item" @click="onClick('报备项目数')">
  60. <p>{{ tool.formatAmount(dataAll.reportProject)}}</p>
  61. <p >
  62. 报备项目数
  63. <el-tooltip class="item" effect="dark" content="报备项目数:统计已报备的项目数量" placement="top">
  64. <img style="vertical-align: middle" src="@/assets/icons/prompt_icon.svg" alt="">
  65. </el-tooltip>
  66. </p>
  67. </div>
  68. <div class="data-item" @click="onClick('进行中项目数')">
  69. <p>{{ dataAll.startproject?tool.formatAmount(dataAll.startproject):0 }}</p>
  70. <p>
  71. 进行中项目数
  72. <el-tooltip class="item" effect="dark" content="进行中项目数:进行中状态的项目数量" placement="top">
  73. <img style="vertical-align: middle" src="@/assets/icons/prompt_icon.svg" alt="">
  74. </el-tooltip>
  75. </p>
  76. </div>
  77. <div class="data-item" @click="onClick('项目成交数')">
  78. <p>{{ tool.formatAmount(dataAll.dealProject) }}</p>
  79. <p>
  80. 项目成交数
  81. <el-tooltip class="item" effect="dark" content="项目成交数:统计有关联审核过的订单的项目数量" placement="top">
  82. <img style="vertical-align: middle" src="@/assets/icons/prompt_icon.svg" alt="">
  83. </el-tooltip>
  84. </p>
  85. </div>
  86. <div class="data-item">
  87. <p>{{ dataAll.cjl }}%</p>
  88. <p>
  89. 项目成交率
  90. <el-tooltip class="item" effect="dark" content="项目成交率=有关联审核订单的项目数÷项目总数×100%" placement="top">
  91. <img style="vertical-align: middle" src="@/assets/icons/prompt_icon.svg" alt="">
  92. </el-tooltip>
  93. </p>
  94. </div>
  95. <div class="data-item" @click="onClick('项目失败数')">
  96. <p>{{ dataAll.failedproject?tool.formatAmount(dataAll.failedproject):0 }}</p>
  97. <p>
  98. 项目失败数
  99. <el-tooltip class="item" effect="dark" content="项目失败数:已失败状态的项目数量" placement="top">
  100. <img style="vertical-align: middle" src="@/assets/icons/prompt_icon.svg" alt="">
  101. </el-tooltip>
  102. </p>
  103. </div>
  104. <div class="data-item">
  105. <p>{{ dataAll.sbl }}%</p>
  106. <p>
  107. 项目失败率
  108. <el-tooltip class="item" effect="dark" content="项目失败率=已失败项目数÷项目总数×100%" placement="top">
  109. <img style="vertical-align: middle" src="@/assets/icons/prompt_icon.svg" alt="">
  110. </el-tooltip>
  111. </p>
  112. </div>
  113. <div class="data-item" @click="onClick('参与项目数')">
  114. <p>{{ dataAll.joinProject }}</p>
  115. <p>
  116. 参与项目数
  117. <el-tooltip class="item" effect="dark" content="参与项目数:参与的并且至少有一次跟进的项目数量" placement="top">
  118. <img style="vertical-align: middle" src="@/assets/icons/prompt_icon.svg" alt="">
  119. </el-tooltip>
  120. </p>
  121. </div>
  122. <div class="data-item" @click="onClick('参与项目成交数')">
  123. <p>{{ dataAll.joinDealProject }}</p>
  124. <p>
  125. 参与项目成交数
  126. <el-tooltip class="item" effect="dark" content="参与项目成交数:参与的并且至少有一次跟进的项目的成交数量" placement="top">
  127. <img style="vertical-align: middle" src="@/assets/icons/prompt_icon.svg" alt="">
  128. </el-tooltip>
  129. </p>
  130. </div>
  131. <div class="data-item">
  132. <p>{{ dataAll.joinDealProjectcjl }}%</p>
  133. <p>
  134. 参与项目成交率
  135. <el-tooltip class="item" effect="dark" content="参与项目成交率=参与项目成交数 ÷ 参与项目数 ×100%" placement="top">
  136. <img style="vertical-align: middle" src="@/assets/icons/prompt_icon.svg" alt="">
  137. </el-tooltip>
  138. </p>
  139. </div>
  140. </div>
  141. <div class="data-right">
  142. <div class="data-item" v-for="item in dataAll.projecttype" :key="item.rowindex" @click="onClick(item.value)">
  143. <p>{{ tool.formatAmount(item.qty) }}</p>
  144. <p>
  145. {{ item.value }}
  146. <el-tooltip class="item" effect="dark" content="无分类客户数:统计没有客户分类信息的客户数量" placement="top" v-if="item.value == '无分类客户'">
  147. <img style="vertical-align: middle" src="@/assets/icons/prompt_icon.svg" alt="">
  148. </el-tooltip>
  149. <el-tooltip class="item" effect="dark" content="A核心客户:客户分类为A核心客户的数量" placement="top" v-else-if="item.value == 'A核心客户'">
  150. <img style="vertical-align: middle" src="@/assets/icons/prompt_icon.svg" alt="">
  151. </el-tooltip>
  152. <el-tooltip class="item" effect="dark" content="B重要客户:客户分类为B重要客户的数量" placement="top" v-else-if="item.value == 'B重要客户'">
  153. <img style="vertical-align: middle" src="@/assets/icons/prompt_icon.svg" alt="">
  154. </el-tooltip>
  155. <el-tooltip class="item" effect="dark" content="C普通客户:客户分类为C普通客户的数量" placement="top" v-else-if="item.value == 'C普通客户'">
  156. <img style="vertical-align: middle" src="@/assets/icons/prompt_icon.svg" alt="">
  157. </el-tooltip>
  158. <el-tooltip class="item" effect="dark" content="D一般客户:客户分类为D一般客户的数量" placement="top" v-else-if="item.value == 'D一般客户'">
  159. <img style="vertical-align: middle" src="@/assets/icons/prompt_icon.svg" alt="">
  160. </el-tooltip>
  161. </p>
  162. </div>
  163. </div>
  164. </div>
  165. </div>
  166. <!--项目类型-->
  167. <div class="data-panel" id="projectType">
  168. <div class="panel-content-wrapper" >
  169. <div class="panel-header">
  170. <div class="title">项目类型分析</div>
  171. <div class="panel-select">
  172. <div class="mt-10 inline-16">
  173. <label class="search__label" >部门:</label>
  174. <el-cascader
  175. :append-to-body="false"
  176. placement="bottom"
  177. ref="selectdep"
  178. size="small"
  179. v-model="typeTableParam.content.dataid"
  180. :options="deplist"
  181. :props="{emitPath:true,expandTrigger:'hover',checkStrictly:true,label:'label',value:'departmentid',children:'children'}"
  182. @change="$event => {if($event.length) {typeMapParam.content.type=1;typeMapParam.content.dataid=$event[$event.length - 1];typeTableParam.content.type=1;typeTableParam.content.username='';typeTableParam.content.pageNumber = 1;$refs.typeTable.listData();typeInit()} else {typeMapParam.content.type='';typeMapParam.content.dataid='';typeTableParam.content.dataid='';typeTableParam.content.type='';typeTableParam.content.username='';typeTableParam.content.pageNumber = 1;$refs.typeTable.listData();typeInit()}}">
  183. </el-cascader>
  184. </div>
  185. <div class="mt-10 inline-16">
  186. <label class="search__label" >业务员:</label>
  187. <el-select v-model="typeTableParam.content.username" filterable placeholder="请选择" size="small"
  188. :popper-append-to-body="false"
  189. @change="$event => {if($event) {typeMapParam.content.type=0;typeMapParam.content.dataid=$event;typeTableParam.content.type=0;typeTableParam.content.dataid=$event;typeTableParam.content.depname='';typeTableParam.content.pageNumber = 1;$refs.typeTable.listData();typeInit()} else {typeMapParam.content.type='';typeMapParam.content.dataid='';typeTableParam.content.dataid='';typeTableParam.content.type='';typeTableParam.content.depname='';typeTableParam.content.pageNumber = 1;$refs.typeTable.listData();typeInit()}}"
  190. >
  191. <el-option
  192. v-for="item in typeMapParamSalesman"
  193. :key="item.index"
  194. :label="item.name"
  195. :value="item.userid">
  196. </el-option>
  197. </el-select>
  198. </div>
  199. <div class="mt-10 inline-16">
  200. <p class="search__label">状态:</p>
  201. <el-select v-model="typeTableParam.content.where.isleave" clearable style="margin-right:10px" size="small" placeholder="请选择状态" @change="typeMapParam.content.where.isleave = typeTableParam.content.where.isleave;typeTableParam.content.username = '';typeTableParam.content.pageNumber = 1;$refs.typeTable.listData(null,'状态');typeInit(null,'状态')" >
  202. <el-option label="在职" value="1"></el-option>
  203. <el-option label="离职" value="2"></el-option>
  204. </el-select>
  205. </div>
  206. <div class="mt-10 inline-16">
  207. <el-button-group>
  208. <el-button :type="typeTableParam.content.dateType === '全部'?'primary':''" size="small" @click="typeMapParam.content.dateType = '全部';typeTableParam.content.dateType = '全部';
  209. typeMapParam.content.where.begdate = '';typeMapParam.content.where.enddate = '';typeTableParam.content.where.begdate = '';typeTableParam.content.where.enddate = '';typeDate = []
  210. typeTableParam.content.pageNumber = 1;$refs.typeTable.listData();typeInit()">全部</el-button>
  211. <el-button :type="typeTableParam.content.dateType === '本年'?'primary':''" size="small" @click="typeMapParam.content.dateType = '本年';typeTableParam.content.dateType = '本年';
  212. typeDate = [new Date().getFullYear() + '-01',new Date().getFullYear() + '-12'];typeMapParam.content.where.begdate = new Date().getFullYear() + '-01';typeMapParam.content.where.enddate = new Date().getFullYear() + '-12';
  213. typeTableParam.content.where.begdate = new Date().getFullYear() + '-01';typeTableParam.content.where.enddate = new Date().getFullYear() + '-12';
  214. typeTableParam.content.pageNumber = 1;$refs.typeTable.listData();typeInit()">本年</el-button>
  215. </el-button-group>
  216. </div>
  217. <div class="mt-10 inline-16">
  218. <el-date-picker
  219. v-show="isFull"
  220. :append-to-body="false"
  221. v-model="typeDate"
  222. :clearable="false"
  223. @change="typeMapParam.content.dateType = '';typeMapParam.content.where.begdate = typeDate[0];typeMapParam.content.where.enddate = typeDate[1];typeTableParam.content.dateType = '';typeTableParam.content.where.begdate = typeDate[0];typeTableParam.content.where.enddate = typeDate[1];
  224. typeTableParam.content.pageNumber = 1;$refs.typeTable.listData();typeInit()"
  225. size="small"
  226. format="yyyy-MM"
  227. value-format="yyyy-MM"
  228. type="monthrange"
  229. range-separator="至"
  230. start-placeholder="开始月份"
  231. end-placeholder="结束月份">
  232. </el-date-picker>
  233. <el-date-picker
  234. v-show="!isFull"
  235. v-model="typeDate"
  236. :clearable="false"
  237. @change="typeMapParam.content.dateType = '';typeMapParam.content.where.begdate = typeDate[0];typeMapParam.content.where.enddate = typeDate[1];typeTableParam.content.dateType = '';typeTableParam.content.where.begdate = typeDate[0];typeTableParam.content.where.enddate = typeDate[1];
  238. typeTableParam.content.pageNumber = 1;$refs.typeTable.listData();typeInit()"
  239. size="small"
  240. format="yyyy-MM"
  241. value-format="yyyy-MM"
  242. type="monthrange"
  243. range-separator="至"
  244. start-placeholder="开始月份"
  245. end-placeholder="结束月份">
  246. </el-date-picker>
  247. </div>
  248. <div class="mt-10 inline-16">
  249. <el-checkbox true-label="0" false-label="1" v-model="typeMapParam.content.where.unfinish" @change="typeTableParam.content.where.unfinish = typeMapParam.content.where.unfinish;typeTableParam.content.pageNumber = 1;$refs.typeTable.listData();typeInit()">包含失败、结案项目</el-checkbox>
  250. </div>
  251. <div class="mt-10 inline-15">
  252. <exportFile :param="typeTableParam" :columns="tool.tabelCol($route.name).projectTable.tablecols" fileName="项目类型分析" :dataid="typeMapParam.content.dataid"></exportFile>
  253. </div>
  254. <div style="display: inline-block;vertical-align: middle">
  255. <FullScroll domId="projectType" @onFull="onFull" @backFull="backFull"></FullScroll>
  256. </div>
  257. </div>
  258. </div>
  259. <div class="panel-content" :style="windowWidth<1335?'height:calc(100% - 140px)':windowWidth<2006?'height:calc(100% - 93px)':windowWidth<2037?'height:calc(100% - 83px)':'height:calc(100% - 53px)'">
  260. <div ref="typeEl" :style="windowWidth<1505?'width:54%;height:calc(100%)':windowWidth<1805?'width:54%;height:calc(100%)':windowWidth<2500?'width:45%':'width:30%'"></div>
  261. <!-- <div ref="typeEl" style="width:30%"></div>-->
  262. <div class="panel-table" :style="windowWidth<1505?'width:46%;height:calc(100%)':windowWidth<1805?'width:46%;height:calc(100%)':windowWidth<2500?'width:55%':'width:70%'">
  263. <!-- <div class="panel-table" style="width:70%">-->
  264. <pageTable
  265. ref="typeTable"
  266. :tablecols="tool.tabelCol($route.name).projectTable.tablecols"
  267. :param="typeTableParam"
  268. :custom="true"
  269. fixedName="operation"
  270. >
  271. <template v-slot:custom="scope">
  272. <div v-if="scope.data.columnname == 'sys_tag'">
  273. <el-tag size="small" v-for="(item,index) in scope.data.data.sys_tag" :key="index" style="margin-right: 5px">{{ item }}</el-tag>
  274. </div>
  275. <div v-else-if="scope.data.columnname == 'operation'">
  276. <el-button type="text" size="small" @click="goDetail(scope.data.data,'typeTable',typeTableParam,'sa_projectid')" :disabled="isFull">详情</el-button>
  277. </div>
  278. <div v-else-if="scope.data.columnname == 'signamount_due'">
  279. {{ tool.formatAmount(scope.data.data.signamount_due,2,'¥') }}
  280. </div>
  281. <div v-else-if="scope.data.columnname === 'industry'">
  282. <el-tag size="small" v-for="(item,index) in scope.data.data.industry" :key="index" style="margin-right: 5px">{{ item }}</el-tag>
  283. </div>
  284. <div v-else-if="scope.data.columnname === 'tradingstatus'">
  285. <span style="color:#3874f6" v-if="scope.data.data[[scope.data.columnname]] == '未成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
  286. <span style="color:#fa8c16" v-else-if="scope.data.data[[scope.data.columnname]] == '已成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
  287. <span style="color:#333333" v-else-if="scope.data.data[[scope.data.columnname]] == '多次成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
  288. </div>
  289. <div v-else-if="scope.data.columnname === 'status'">
  290. <span style="color:rgb(250, 140, 22)" v-if="scope.data.data[[scope.data.columnname]] == '已成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
  291. <span style="color:#52c41a" v-else-if="scope.data.data[[scope.data.columnname]] == '跟进中'">{{scope.data.data[[scope.data.columnname]]}}</span>
  292. <span style="color:#999999" v-else-if="scope.data.data[[scope.data.columnname]] == '已失败' || scope.data.data[[scope.data.columnname]] == '已结案'">{{scope.data.data[[scope.data.columnname]]}}</span>
  293. </div>
  294. <div v-else-if="scope.data.columnname == 'scale'">
  295. {{scope.data.data.scale ? scope.data.data.scale + scope.data.data.unitname : '' }}
  296. </div>
  297. <div v-else>
  298. {{ scope.data.data[scope.data.columnname] }}
  299. </div>
  300. </template>
  301. </pageTable>
  302. </div>
  303. </div>
  304. </div>
  305. </div>
  306. <!--项目等级分析-->
  307. <div class="data-panel" id="projectGrad">
  308. <div class="panel-content-wrapper" >
  309. <div class="panel-header">
  310. <div class="title">项目等级分析</div>
  311. <div class="panel-select">
  312. <div class="mt-10 inline-16">
  313. <label class="search__label" >部门:</label>
  314. <el-cascader
  315. :append-to-body="false"
  316. placement="bottom"
  317. ref="selectdep"
  318. size="small"
  319. v-model="gradTableParam.content.dataid"
  320. :options="deplist"
  321. :props="{emitPath:true,expandTrigger:'hover',checkStrictly:true,label:'label',value:'departmentid',children:'children'}"
  322. @change="$event => {if($event.length) {gradMapParam.content.type=1;gradMapParam.content.dataid=$event[$event.length - 1];gradTableParam.content.type=1;gradTableParam.content.username='';gradTableParam.content.pageNumber = 1;$refs.gradTable.listData();gradInit()} else {gradMapParam.content.type='';gradMapParam.content.dataid='';gradTableParam.content.dataid='';gradTableParam.content.type='';gradTableParam.content.username='';gradTableParam.content.pageNumber = 1;$refs.gradTable.listData();gradInit()}}"></el-cascader>
  323. </div>
  324. <div class="mt-10 inline-16">
  325. <label class="search__label" >业务员:</label>
  326. <el-select v-model="gradTableParam.content.username" filterable placeholder="请选择" size="small"
  327. :popper-append-to-body="false"
  328. @change="$event => {if($event) {gradMapParam.content.type=0;gradMapParam.content.dataid=$event;gradTableParam.content.type=0;gradTableParam.content.dataid=$event;gradTableParam.content.depname='';gradTableParam.content.pageNumber = 1;$refs.gradTable.listData();gradInit()} else {gradMapParam.content.type='';gradMapParam.content.dataid='';gradTableParam.content.dataid='';gradTableParam.content.type='';gradTableParam.content.depname='';gradTableParam.content.pageNumber = 1;$refs.gradTable.listData();gradInit()}}"
  329. >
  330. <el-option
  331. v-for="item in gradMapParamSalesman"
  332. :key="item.index"
  333. :label="item.name"
  334. :value="item.userid">
  335. </el-option>
  336. </el-select>
  337. </div>
  338. <div class="mt-10 inline-16">
  339. <p class="search__label">状态:</p>
  340. <el-select v-model="gradTableParam.content.where.isleave" clearable style="margin-right:10px" size="small" placeholder="请选择状态" @change="gradMapParam.content.where.isleave = gradTableParam.content.where.isleave;gradTableParam.content.username = '';gradTableParam.content.pageNumber = 1;$refs.gradTable.listData(null,'状态');gradInit(null,'状态')" >
  341. <el-option label="在职" value="1"></el-option>
  342. <el-option label="离职" value="2"></el-option>
  343. </el-select>
  344. </div>
  345. <div class="mt-10 inline-16">
  346. <el-button-group>
  347. <el-button :type="gradTableParam.content.dateType === '全部'?'primary':''" size="small" @click="gradMapParam.content.dateType = '全部';gradTableParam.content.dateType = '全部';
  348. gradMapParam.content.where.begdate = '';gradMapParam.content.where.enddate = '';gradTableParam.content.where.begdate = '';gradTableParam.content.where.enddate = '';gradDate = []
  349. gradTableParam.content.pageNumber = 1;$refs.gradTable.listData();gradInit()">全部</el-button>
  350. <el-button :type="gradTableParam.content.dateType === '本年'?'primary':''" size="small" @click="gradMapParam.content.dateType = '本年';gradTableParam.content.dateType = '本年';
  351. gradDate = [new Date().getFullYear() + '-01',new Date().getFullYear() + '-12'];gradMapParam.content.where.begdate = new Date().getFullYear() + '-01';gradMapParam.content.where.enddate = new Date().getFullYear() + '-12';
  352. gradTableParam.content.where.begdate = new Date().getFullYear() + '-01';gradTableParam.content.where.enddate = new Date().getFullYear() + '-12';
  353. gradTableParam.content.pageNumber = 1;$refs.gradTable.listData();gradInit()">本年</el-button>
  354. </el-button-group>
  355. </div>
  356. <div class="mt-10 inline-16">
  357. <el-date-picker
  358. v-show="isFull"
  359. :append-to-body="false"
  360. v-model="gradDate"
  361. :clearable="false"
  362. @change="gradMapParam.content.dateType = '';gradMapParam.content.where.begdate = gradDate[0];gradMapParam.content.where.enddate = gradDate[1];gradTableParam.content.dateType = '';gradTableParam.content.where.begdate = gradDate[0];gradTableParam.content.where.enddate = gradDate[1];
  363. gradTableParam.content.pageNumber = 1;$refs.gradTable.listData();gradInit()"
  364. size="small"
  365. format="yyyy-MM"
  366. value-format="yyyy-MM"
  367. type="monthrange"
  368. range-separator="至"
  369. start-placeholder="开始月份"
  370. end-placeholder="结束月份">
  371. </el-date-picker>
  372. <el-date-picker
  373. v-show="!isFull"
  374. v-model="gradDate"
  375. :clearable="false"
  376. @change="gradMapParam.content.dateType = '';gradMapParam.content.where.begdate = gradDate[0];gradMapParam.content.where.enddate = gradDate[1];gradTableParam.content.dateType = '';gradTableParam.content.where.begdate = gradDate[0];gradTableParam.content.where.enddate = gradDate[1];
  377. gradTableParam.content.pageNumber = 1;$refs.gradTable.listData();gradInit()"
  378. size="small"
  379. format="yyyy-MM"
  380. value-format="yyyy-MM"
  381. type="monthrange"
  382. range-separator="至"
  383. start-placeholder="开始月份"
  384. end-placeholder="结束月份">
  385. </el-date-picker>
  386. </div>
  387. <div class="mt-10 inline-16">
  388. <el-checkbox true-label="0" false-label="1" v-model="gradMapParam.content.where.unfinish" @change="gradTableParam.content.where.unfinish = gradMapParam.content.where.unfinish;gradTableParam.content.pageNumber = 1;$refs.gradTable.listData();gradInit()">包含失败、结案项目</el-checkbox>
  389. </div>
  390. <div class="mt-10 inline-15">
  391. <exportFile :param="gradTableParam" :columns="tool.tabelCol($route.name).projectTable.tablecols" fileName="项目等级分析" :dataid="gradMapParam.content.dataid"></exportFile>
  392. </div>
  393. <div style="display: inline-block;vertical-align: middle">
  394. <FullScroll domId="projectGrad" @onFull="onFull" @backFull="backFull"></FullScroll>
  395. </div>
  396. </div>
  397. </div>
  398. <div class="panel-content" :style="windowWidth<1335?'height:calc(100% - 140px)':windowWidth<2006?'height:calc(100% - 93px)':windowWidth<2037?'height:calc(100% - 83px)':'height:calc(100% - 53px)'">
  399. <div ref="gradEl" :style="windowWidth<1505?'width:54%;height:calc(100%)':windowWidth<1805?'width:54%;height:calc(100%)':windowWidth<2500?'width:45%':'width:30%'"></div>
  400. <div class="panel-table" :style="windowWidth<1505?'width:46%;height:calc(100%)':windowWidth<1805?'width:46%;height:calc(100%)':windowWidth<2500?'width:55%':'width:70%'">
  401. <pageTable
  402. ref="gradTable"
  403. :tablecols="tool.tabelCol($route.name).projectTable.tablecols"
  404. :param="gradTableParam"
  405. :custom="true"
  406. fixedName="operation"
  407. >
  408. <template v-slot:custom="scope">
  409. <div v-if="scope.data.columnname == 'sys_tag'">
  410. <el-tag size="small" v-for="(item,index) in scope.data.data.sys_tag" :key="index" style="margin-right: 5px">{{ item }}</el-tag>
  411. </div>
  412. <div v-else-if="scope.data.columnname == 'operation'">
  413. <el-button type="text" size="small" @click="goDetail(scope.data.data,'gradTable',gradTableParam,'sa_projectid')" :disabled="isFull">详情</el-button>
  414. </div>
  415. <div v-else-if="scope.data.columnname == 'signamount_due'">
  416. {{ tool.formatAmount(scope.data.data.signamount_due,2,'¥') }}
  417. </div>
  418. <div v-else-if="scope.data.columnname === 'industry'">
  419. <el-tag size="small" v-for="(item,index) in scope.data.data.industry" :key="index" style="margin-right: 5px">{{ item }}</el-tag>
  420. </div>
  421. <div v-else-if="scope.data.columnname === 'tradingstatus'">
  422. <span style="color:#3874f6" v-if="scope.data.data[[scope.data.columnname]] == '未成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
  423. <span style="color:#fa8c16" v-else-if="scope.data.data[[scope.data.columnname]] == '已成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
  424. <span style="color:#333333" v-else-if="scope.data.data[[scope.data.columnname]] == '多次成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
  425. </div>
  426. <div v-else-if="scope.data.columnname === 'status'">
  427. <span style="color:rgb(250, 140, 22)" v-if="scope.data.data[[scope.data.columnname]] == '已成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
  428. <span style="color:#52c41a" v-else-if="scope.data.data[[scope.data.columnname]] == '跟进中'">{{scope.data.data[[scope.data.columnname]]}}</span>
  429. <span style="color:#999999" v-else-if="scope.data.data[[scope.data.columnname]] == '已失败' || scope.data.data[[scope.data.columnname]] == '已结案'">{{scope.data.data[[scope.data.columnname]]}}</span>
  430. </div>
  431. <div v-else-if="scope.data.columnname == 'scale'">
  432. {{scope.data.data.scale ? scope.data.data.scale + scope.data.data.unitname : '' }}
  433. </div>
  434. <div v-else>
  435. {{ scope.data.data[scope.data.columnname] }}
  436. </div>
  437. </template>
  438. </pageTable>
  439. </div>
  440. </div>
  441. </div>
  442. </div>
  443. <!--项目评估分析-->
  444. <div class="data-panel" style="height:800px" id="projectScore1">
  445. <div class="panel-content-wrapper" >
  446. <div class="panel-header">
  447. <div class="title">
  448. 项目评估分析
  449. <el-tooltip class="item" effect="dark" placement="top">
  450. <template #content>
  451. 项目指标分类比例:
  452. <div v-for="(item,index) in projectScoreDescript" :key="index">
  453. <span>{{ item.name }}:</span>
  454. <span>{{ item.range }}</span>
  455. </div>
  456. </template>
  457. <img style="vertical-align: middle" src="@/assets/icons/prompt_icon.svg" alt="">
  458. </el-tooltip>
  459. </div>
  460. <div class="panel-select">
  461. <div class="mt-10 inline-16">
  462. <label class="search__label" >部门:</label>
  463. <el-cascader
  464. ref="selectdep"
  465. placement="bottom"
  466. :append-to-body="false"
  467. size="small"
  468. v-model="scoreTableParam1.content.dataid"
  469. :options="deplist"
  470. :props="{emitPath:true,expandTrigger:'hover',checkStrictly:true,label:'label',value:'departmentid',children:'children'}"
  471. @change="$event => {if($event.length) {scoreMapParam1.content.type=1;scoreMapParam1.content.dataid=$event[$event.length - 1];scoreTableParam1.content.type=1;scoreTableParam1.content.username='';scoreTableParam1.content.pageNumber = 1;$refs.scoreTable.listData();scoreInit()} else {scoreMapParam1.content.type='';scoreMapParam1.content.dataid='';scoreTableParam1.content.dataid='';scoreTableParam1.content.type='';scoreTableParam1.content.username='';scoreTableParam1.content.pageNumber = 1;$refs.scoreTable.listData();scoreInit()}}"></el-cascader>
  472. </div>
  473. <div class="mt-10 inline-16">
  474. <label class="search__label" >业务员:</label>
  475. <el-select v-model="scoreTableParam1.content.username" filterable placeholder="请选择" size="small"
  476. @change="$event => {if($event) {scoreMapParam1.content.type=0;scoreMapParam1.content.dataid=$event;scoreTableParam1.content.type=0;scoreTableParam1.content.dataid=$event;scoreTableParam1.content.depname='';scoreTableParam1.content.pageNumber = 1;$refs.scoreTable.listData();scoreInit()} else {scoreMapParam1.content.type='';gradMapParam.content.dataid='';scoreTableParam1.content.dataid='';scoreTableParam1.content.type='';scoreTableParam1.content.depname='';scoreTableParam1.content.pageNumber = 1;$refs.scoreTable.listData();scoreInit()}}"
  477. >
  478. <el-option
  479. v-for="item in scoreMapParam1Salesman"
  480. :key="item.index"
  481. :label="item.name"
  482. :value="item.userid">
  483. </el-option>
  484. </el-select>
  485. </div>
  486. <div class="mt-10 inline-16">
  487. <p class="search__label">状态:</p>
  488. <el-select v-model="scoreTableParam1.content.where.isleave" clearable style="margin-right:10px" size="small" placeholder="请选择状态" @change="scoreMapParam1.content.where.isleave = scoreTableParam1.content.where.isleave;scoreTableParam1.content.username = '';scoreTableParam1.content.pageNumber = 1;$refs.scoreTable.listData(null,'状态');scoreInit(null,'状态')" >
  489. <el-option label="在职" value="1"></el-option>
  490. <el-option label="离职" value="2"></el-option>
  491. </el-select>
  492. </div>
  493. <div class="mt-10 inline-16">
  494. <el-checkbox true-label="0" false-label="1" v-model="scoreMapParam1.content.where.unfinish" @change="scoreTableParam1.content.where.unfinish = scoreMapParam1.content.where.unfinish;scoreTableParam1.content.pageNumber = 1;$refs.scoreTable.listData();scoreInit()">包含失败、结案项目</el-checkbox>
  495. </div>
  496. <div class="mt-10 inline-15">
  497. <exportFile :param="scoreTableParam1" :columns="tool.tabelCol($route.name).projectTable2.tablecols.splice(0,tool.tabelCol($route.name).projectTable2.tablecols.length - 1)" fileName="项目评估分析" :dataid="scoreMapParam1.content.dataid"></exportFile>
  498. </div>
  499. <div style="display: inline-block;vertical-align: middle">
  500. <FullScroll domId="projectScore1"></FullScroll>
  501. </div>
  502. </div>
  503. </div>
  504. <div style="height:calc(100% - 44px)">
  505. <div ref="scoreEl" style="height:30%"></div>
  506. <div class="panel-table" style="height:70%">
  507. <div class="mt-10 inline-16" style="margin:10px 0;display:flex !important;justify-content:space-between">
  508. <span style="font-size:16px;color:#333333">{{ scoreStatus ? scoreStatus : '全部' }}</span>
  509. <div style="display:flex;align-items:center">
  510. <div>
  511. <label class="search__label" >评估分档位:</label>
  512. <el-select v-model="scoreTableParam1.content.where.taskType" filterable placeholder="请选择" size="small"
  513. :popper-append-to-body="false"
  514. @change="$refs.scoreTable.listData()"
  515. >
  516. <el-option label="全部" value="" />
  517. <el-option label="高分档" value="高分档" />
  518. <el-option label="中分档" value="中分档" />
  519. <el-option label="低分档" value="低分档" />
  520. </el-select>
  521. </div>
  522. <el-tooltip class="item" effect="dark" placement="top">
  523. <template #content>
  524. <div>高分档: 200分以上</div>
  525. <div>中分档:100-200分</div>
  526. <div>低分档:100分以下</div>
  527. </template>
  528. <img style="vertical-align: middle;margin-left:10px" src="@/assets/icons/prompt_icon.svg" alt="">
  529. </el-tooltip>
  530. </div>
  531. </div>
  532. <pageTable
  533. :style="windowWidth<1574?'height:calc(100% - 100px)':windowWidth<1593?'height:calc(100% - 90px)':'height:calc(100% - 60px)'"
  534. ref="scoreTable"
  535. :tablecols="tool.tabelCol($route.name).projectTable2.tablecols.splice(0,tool.tabelCol($route.name).projectTable2.tablecols.length - 1)"
  536. :param="scoreTableParam1"
  537. :custom="true"
  538. fixedName="operation"
  539. >
  540. <template v-slot:custom="scope">
  541. <div v-if="scope.data.columnname == 'sys_tag'">
  542. <el-tag size="small" v-for="(item,index) in scope.data.data.sys_tag" :key="index" style="margin-right: 5px">{{ item }}</el-tag>
  543. </div>
  544. <div v-else-if="scope.data.columnname == 'operation'">
  545. <el-button type="text" size="small" @click="goDetail(scope.data.data,'scoreTable',scoreTableParam1,'sa_projectid')">详情</el-button>
  546. </div>
  547. <div v-else-if="scope.data.columnname == 'signamount_due'">
  548. {{ tool.formatAmount(scope.data.data.signamount_due,2,'¥') }}
  549. </div>
  550. <div v-else-if="scope.data.columnname == 'dealamount'">
  551. {{ tool.formatAmount(scope.data.data.dealamount,2,'¥') }}
  552. </div>
  553. <div v-else-if="scope.data.columnname === 'industry'">
  554. <el-tag size="small" v-for="(item,index) in scope.data.data.industry" :key="index" style="margin-right: 5px">{{ item }}</el-tag>
  555. </div>
  556. <div v-else-if="scope.data.columnname === 'tradingstatus'">
  557. <span style="color:#3874f6" v-if="scope.data.data[[scope.data.columnname]] == '未成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
  558. <span style="color:#fa8c16" v-else-if="scope.data.data[[scope.data.columnname]] == '已成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
  559. <span style="color:#333333" v-else-if="scope.data.data[[scope.data.columnname]] == '多次成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
  560. </div>
  561. <div v-else-if="scope.data.columnname === 'status'">
  562. <span style="color:rgb(250, 140, 22)" v-if="scope.data.data[[scope.data.columnname]] == '已成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
  563. <span style="color:#52c41a" v-else-if="scope.data.data[[scope.data.columnname]] == '跟进中'">{{scope.data.data[[scope.data.columnname]]}}</span>
  564. <span style="color:#999999" v-else-if="scope.data.data[[scope.data.columnname]] == '已失败' || scope.data.data[[scope.data.columnname]] == '已结案'">{{scope.data.data[[scope.data.columnname]]}}</span>
  565. </div>
  566. <div v-else-if="scope.data.columnname == 'scale'">
  567. {{scope.data.data.scale ? scope.data.data.scale + scope.data.data.unitname : '' }}
  568. </div>
  569. <div v-else>
  570. {{ scope.data.data[scope.data.columnname] }}
  571. </div>
  572. </template>
  573. </pageTable>
  574. </div>
  575. </div>
  576. </div>
  577. </div>
  578. <!--12月项目新增-->
  579. <div class="data-panel" id="projectAdd">
  580. <div class="panel-content-wrapper" >
  581. <div class="panel-header">
  582. <div class="title">近12月项目新增分析</div>
  583. <div class="panel-select">
  584. <div class="mt-10 inline-16">
  585. <label class="search__label" >部门:</label>
  586. <el-cascader
  587. ref="selectdep"
  588. size="small"
  589. :append-to-body="false"
  590. placement="bottom"
  591. v-model="addParam.content.dataid"
  592. :options="deplist"
  593. :props="{emitPath:true,expandTrigger:'hover',checkStrictly:true,label:'label',value:'departmentid',children:'children'}"
  594. @change="$event => {if($event.length) {addParam.content.type=1;addParam.content.username='';addFun()} else {addParam.content.dataid='';addParam.content.type='';addParam.content.username='';addFun()}}"></el-cascader>
  595. </div>
  596. <div class="mt-10 inline-16">
  597. <label class="search__label" >业务员:</label>
  598. <el-select v-model="addParam.content.username" filterable placeholder="请选择" size="small"
  599. :popper-append-to-body="false"
  600. @change="$event => {if($event) {addParam.content.type=0;addParam.content.dataid=$event;addParam.content.depname='';addFun()} else {addParam.content.dataid='';addParam.content.type='';addParam.content.depname='';addFun()}}"
  601. >
  602. <el-option
  603. v-for="item in addParamSalesman"
  604. :key="item.index"
  605. :label="item.name"
  606. :value="item.userid">
  607. </el-option>
  608. </el-select>
  609. </div>
  610. <div class="mt-10 inline-16">
  611. <p class="search__label">状态:</p>
  612. <el-select v-model="addParam.content.where.isleave" clearable style="margin-right:10px" size="small" placeholder="请选择状态" @change="addFun(null,'状态')" >
  613. <el-option label="在职" value="1"></el-option>
  614. <el-option label="离职" value="2"></el-option>
  615. </el-select>
  616. </div>
  617. <div class="mt-10 inline-15">
  618. <label class="search__label" >分析日期:</label>
  619. <el-date-picker
  620. :append-to-body="false"
  621. v-model="addParam.content.enddate"
  622. format="yyyy-MM-dd"
  623. value-format="yyyy-MM-dd"
  624. type="date"
  625. size="small"
  626. placeholder="选择日期"
  627. @change="addFun()">
  628. </el-date-picker>
  629. </div>
  630. <div style="display: inline-block;vertical-align: middle">
  631. <FullScroll domId="projectAdd"></FullScroll>
  632. </div>
  633. </div>
  634. </div>
  635. <div ref="addEl":style="windowWidth<1574?'height:calc(100% - 100px)':windowWidth<1593?'height:calc(100% - 90px)':'height:calc(100% - 55px)'"></div>
  636. </div>
  637. </div>
  638. <!--12月项目报备-->
  639. <div class="data-panel" id="projectBaobei">
  640. <div class="panel-content-wrapper" >
  641. <div class="panel-header">
  642. <div class="title">近12月项目报备分析</div>
  643. <div class="panel-select">
  644. <div class="mt-10 inline-16">
  645. <label class="search__label" >部门:</label>
  646. <el-cascader
  647. :append-to-body="false"
  648. placement="bottom"
  649. ref="selectdep"
  650. size="small"
  651. v-model="baobeiParam.content.dataid"
  652. :options="deplist"
  653. :props="{emitPath:true,expandTrigger:'hover',checkStrictly:true,label:'label',value:'departmentid',children:'children'}"
  654. @change="$event => {if($event.length) {baobeiParam.content.type=1;baobeiParam.content.username='';baobeiFun()} else {baobeiParam.content.dataid='';baobeiParam.content.type='';baobeiParam.content.username='';baobeiFun()}}"></el-cascader>
  655. </div>
  656. <div class="mt-10 inline-16">
  657. <label class="search__label" >业务员:</label>
  658. <el-select v-model="baobeiParam.content.username" filterable placeholder="请选择" size="small"
  659. :popper-append-to-body="false"
  660. @change="$event => {if($event) {baobeiParam.content.type=0;baobeiParam.content.dataid=$event;baobeiParam.content.depname='';baobeiFun()} else {baobeiParam.content.dataid='';baobeiParam.content.type='';baobeiParam.content.depname='';baobeiFun()}}"
  661. >
  662. <el-option
  663. v-for="item in baobeiParamSalesman"
  664. :key="item.index"
  665. :label="item.name"
  666. :value="item.userid">
  667. </el-option>
  668. </el-select>
  669. </div>
  670. <div class="mt-10 inline-16">
  671. <p class="search__label">状态:</p>
  672. <el-select v-model="baobeiParam.content.where.isleave" clearable style="margin-right:10px" size="small" placeholder="请选择状态" @change="baobeiFun(null,'状态')" >
  673. <el-option label="在职" value="1"></el-option>
  674. <el-option label="离职" value="2"></el-option>
  675. </el-select>
  676. </div>
  677. <div class="mt-10 inline-15">
  678. <label class="search__label" >分析日期:</label>
  679. <el-date-picker
  680. :append-to-body="false"
  681. v-model="baobeiParam.content.enddate"
  682. format="yyyy-MM-dd"
  683. value-format="yyyy-MM-dd"
  684. type="date"
  685. size="small"
  686. placeholder="选择日期"
  687. @change="baobeiFun()">
  688. </el-date-picker>
  689. </div>
  690. <div style="display: inline-block;vertical-align: middle">
  691. <FullScroll domId="projectBaobei"></FullScroll>
  692. </div>
  693. </div>
  694. </div>
  695. <div ref="baobeiEl" :style="windowWidth<1574?'height:calc(100% - 100px)':windowWidth<1593?'height:calc(100% - 90px)':'height:calc(100% - 55px)'"></div>
  696. </div>
  697. </div>
  698. <!--12月项目报价-->
  699. <div class="data-panel" id="projectBaojia">
  700. <div class="panel-content-wrapper" >
  701. <div class="panel-header">
  702. <div class="title">近12月项目报价分析</div>
  703. <div class="panel-select">
  704. <div class="mt-10 inline-16">
  705. <label class="search__label" >部门:</label>
  706. <el-cascader
  707. :append-to-body="false"
  708. placement="bottom"
  709. ref="selectdep"
  710. size="small"
  711. v-model="baojiaParam.content.dataid"
  712. :options="deplist"
  713. :props="{emitPath:true,expandTrigger:'hover',checkStrictly:true,label:'label',value:'departmentid',children:'children'}"
  714. @change="$event => {if($event.length) {baojiaParam.content.type=1;baojiaParam.content.username='';baojiaFun()} else {baojiaParam.content.dataid='';baojiaParam.content.type='';baojiaParam.content.username='';baojiaFun()}}"></el-cascader>
  715. </div>
  716. <div class="mt-10 inline-16">
  717. <label class="search__label" >业务员:</label>
  718. <el-select v-model="baojiaParam.content.username" filterable placeholder="请选择" size="small"
  719. :popper-append-to-body="false"
  720. @change="$event => {if($event) {baojiaParam.content.type=0;baojiaParam.content.dataid=$event;baojiaParam.content.depname='';baojiaFun()} else {baojiaParam.content.dataid='';baojiaParam.content.type='';baojiaParam.content.depname='';baojiaFun()}}"
  721. >
  722. <el-option
  723. v-for="item in baojiaParamSalesman"
  724. :key="item.index"
  725. :label="item.name"
  726. :value="item.userid">
  727. </el-option>
  728. </el-select>
  729. </div>
  730. <div class="mt-10 inline-16">
  731. <p class="search__label">状态:</p>
  732. <el-select v-model="baojiaParam.content.where.isleave" clearable style="margin-right:10px" size="small" placeholder="请选择状态" @change="baojiaFun(null,'状态')" >
  733. <el-option label="在职" value="1"></el-option>
  734. <el-option label="离职" value="2"></el-option>
  735. </el-select>
  736. </div>
  737. <div class="mt-10 inline-15">
  738. <label class="search__label" >分析日期:</label>
  739. <el-date-picker
  740. :append-to-body="false"
  741. v-model="baojiaParam.content.enddate"
  742. format="yyyy-MM-dd"
  743. value-format="yyyy-MM-dd"
  744. type="date"
  745. size="small"
  746. placeholder="选择日期"
  747. @change="baojiaFun()">
  748. </el-date-picker>
  749. </div>
  750. <div style="display: inline-block;vertical-align: middle">
  751. <FullScroll domId="projectBaojia"></FullScroll>
  752. </div>
  753. </div>
  754. </div>
  755. <div ref="baojiaEl" :style="windowWidth<1574?'height:calc(100% - 100px)':windowWidth<1593?'height:calc(100% - 90px)':'height:calc(100% - 55px)'"></div>
  756. </div>
  757. </div>
  758. <!--12月项目跟进-->
  759. <div class="data-panel" id="projectFllow">
  760. <div class="panel-content-wrapper" >
  761. <div class="panel-header">
  762. <div class="title">近12月项目跟进分析</div>
  763. <div class="panel-select">
  764. <div class="mt-10 inline-16">
  765. <label class="search__label" >部门:</label>
  766. <el-cascader
  767. :append-to-body="false"
  768. placement="bottom"
  769. ref="selectdep"
  770. size="small"
  771. v-model="fllowParam.content.dataid"
  772. :options="deplist"
  773. :props="{emitPath:true,expandTrigger:'hover',checkStrictly:true,label:'label',value:'departmentid',children:'children'}"
  774. @change="$event => {if($event.length) {fllowParam.content.type=1;fllowParam.content.username='';fllowFun()} else {fllowParam.content.dataid='';fllowParam.content.type='';fllowParam.content.username='';fllowFun()}}"></el-cascader>
  775. </div>
  776. <div class="mt-10 inline-16">
  777. <label class="search__label" >业务员:</label>
  778. <el-select v-model="fllowParam.content.username" filterable placeholder="请选择" size="small"
  779. :popper-append-to-body="false"
  780. @change="$event => {if($event) {fllowParam.content.type=0;fllowParam.content.dataid=$event;fllowParam.content.depname='';fllowFun()} else {fllowParam.content.dataid='';fllowParam.content.type='';fllowParam.content.depname='';fllowFun()}}"
  781. >
  782. <el-option
  783. v-for="item in fllowParamSalesman"
  784. :key="item.index"
  785. :label="item.name"
  786. :value="item.userid">
  787. </el-option>
  788. </el-select>
  789. </div>
  790. <div class="mt-10 inline-16">
  791. <p class="search__label">状态:</p>
  792. <el-select v-model="fllowParam.content.where.isleave" clearable style="margin-right:10px" size="small" placeholder="请选择状态" @change="fllowFun(null,'状态')" >
  793. <el-option label="在职" value="1"></el-option>
  794. <el-option label="离职" value="2"></el-option>
  795. </el-select>
  796. </div>
  797. <div class="mt-10 inline-15">
  798. <label class="search__label" >分析日期:</label>
  799. <el-date-picker
  800. :append-to-body="false"
  801. v-model="fllowParam.content.enddate"
  802. format="yyyy-MM-dd"
  803. value-format="yyyy-MM-dd"
  804. type="date"
  805. size="small"
  806. placeholder="选择日期"
  807. @change="fllowFun()">
  808. </el-date-picker>
  809. </div>
  810. <div style="display: inline-block;vertical-align: middle">
  811. <FullScroll domId="projectFllow"></FullScroll>
  812. </div>
  813. </div>
  814. </div>
  815. <div ref="fllowEl" :style="windowWidth<1574?'height:calc(100% - 100px)':windowWidth<1593?'height:calc(100% - 90px)':'height:calc(100% - 55px)'"></div>
  816. </div>
  817. </div>
  818. <!--项目跟进情况-->
  819. <div class="data-panel" id="projectFllow1">
  820. <div class="panel-content-wrapper" >
  821. <div class="panel-header">
  822. <div class="title">项目跟进情况统计</div>
  823. <div class="panel-select">
  824. <div class="mt-10 inline-16">
  825. <label class="search__label" >部门:</label>
  826. <el-cascader
  827. :append-to-body="false"
  828. placement="bottom"
  829. ref="selectdep"
  830. size="small"
  831. v-model="fllowTableParam.content.dataid"
  832. :options="deplist"
  833. :props="{emitPath:true,expandTrigger:'hover',checkStrictly:true,label:'label',value:'departmentid',children:'children'}"
  834. @change="$event => {if($event.length) {fllowMapParam.content.type=1;fllowMapParam.content.dataid=$event[$event.length - 1];fllowTableParam.content.type=1;fllowTableParam.content.username='';fllowTableParam.content.pageNumber = 1;$refs.projectFllowTable.listData();fllowInit()} else {fllowMapParam.content.type='';fllowMapParam.content.dataid='';fllowTableParam.content.dataid='';fllowTableParam.content.type='';fllowTableParam.content.username='';fllowTableParam.content.pageNumber = 1;$refs.projectFllowTable.listData();fllowInit()}}"></el-cascader>
  835. </div>
  836. <div class="mt-10 inline-16">
  837. <label class="search__label" >业务员:</label>
  838. <el-select v-model="fllowTableParam.content.username" filterable placeholder="请选择" size="small"
  839. :popper-append-to-body="false"
  840. @change="$event => {if($event) {fllowMapParam.content.type=0;fllowMapParam.content.dataid=$event;fllowTableParam.content.type=0;fllowTableParam.content.dataid=$event;fllowTableParam.content.depname='';
  841. fllowTableParam.content.pageNumber = 1;$refs.projectFllowTable.listData();fllowInit()} else {fllowMapParam.content.type='';fllowMapParam.content.dataid='';fllowTableParam.content.dataid='';fllowTableParam.content.type='';
  842. fllowTableParam.content.depname='';fllowTableParam.content.pageNumber = 1;$refs.projectFllowTable.listData();fllowInit()}}"
  843. >
  844. <el-option
  845. v-for="item in fllowMapParamSalesman"
  846. :key="item.index"
  847. :label="item.name"
  848. :value="item.userid">
  849. </el-option>
  850. </el-select>
  851. </div>
  852. <div class="mt-10 inline-16">
  853. <p class="search__label">状态:</p>
  854. <el-select v-model="fllowTableParam.content.where.isleave" clearable style="margin-right:10px" size="small" placeholder="请选择状态" @change="fllowMapParam.content.where.isleave = fllowTableParam.content.where.isleave;fllowTableParam.content.username = '';fllowTableParam.content.pageNumber = 1;$refs.projectFllowTable.listData(null,'状态');fllowInit(null,'状态')" >
  855. <el-option label="在职" value="1"></el-option>
  856. <el-option label="离职" value="2"></el-option>
  857. </el-select>
  858. </div>
  859. <div class="mt-10 inline-16">
  860. <el-button-group>
  861. <el-button :type="fllowTableParam.content.dateType === '全部'?'primary':''" size="small" @click="fllowMapParam.content.dateType = '全部';fllowTableParam.content.dateType = '全部';
  862. fllowMapParam.content.where.begdate = '';fllowMapParam.content.where.enddate = '';fllowTableParam.content.where.begdate = '';fllowTableParam.content.where.enddate = '';fllowDate = []
  863. fllowTableParam.content.pageNumber = 1;$refs.projectFllowTable.listData();fllowInit()">全部</el-button>
  864. <el-button :type="fllowTableParam.content.dateType === '本年'?'primary':''" size="small" @click="fllowMapParam.content.dateType = '本年';fllowTableParam.content.dateType = '本年';
  865. fllowDate = [new Date().getFullYear() + '-01',new Date().getFullYear() + '-12'];fllowMapParam.content.where.begdate = new Date().getFullYear() + '-01';fllowMapParam.content.where.enddate = new Date().getFullYear() + '-12';
  866. fllowTableParam.content.where.begdate = new Date().getFullYear() + '-01';fllowTableParam.content.where.enddate = new Date().getFullYear() + '-12';
  867. fllowTableParam.content.pageNumber = 1;$refs.projectFllowTable.listData();fllowInit()">本年</el-button>
  868. </el-button-group>
  869. </div>
  870. <div class="mt-10 inline-16">
  871. <el-date-picker
  872. v-show="isFull"
  873. :append-to-body="false"
  874. v-model="fllowDate"
  875. :clearable="false"
  876. @change="fllowMapParam.content.dateType = '';fllowMapParam.content.where.begdate = fllowDate[0];fllowMapParam.content.where.enddate = fllowDate[1];fllowTableParam.content.dateType = '';fllowTableParam.content.where.begdate = fllowDate[0];fllowTableParam.content.where.enddate = fllowDate[1];
  877. fllowTableParam.content.pageNumber = 1;$refs.projectFllowTable.listData();fllowInit()"
  878. size="small"
  879. format="yyyy-MM"
  880. value-format="yyyy-MM"
  881. type="monthrange"
  882. range-separator="至"
  883. start-placeholder="开始月份"
  884. end-placeholder="结束月份">
  885. </el-date-picker>
  886. <el-date-picker
  887. v-show="!isFull"
  888. v-model="fllowDate"
  889. :clearable="false"
  890. @change="fllowMapParam.content.dateType = '';fllowMapParam.content.where.begdate = fllowDate[0];fllowMapParam.content.where.enddate = fllowDate[1];fllowTableParam.content.dateType = '';fllowTableParam.content.where.begdate = fllowDate[0];fllowTableParam.content.where.enddate = fllowDate[1];
  891. fllowTableParam.content.pageNumber = 1;$refs.projectFllowTable.listData();fllowInit()"
  892. size="small"
  893. format="yyyy-MM"
  894. value-format="yyyy-MM"
  895. type="monthrange"
  896. range-separator="至"
  897. start-placeholder="开始月份"
  898. end-placeholder="结束月份">
  899. </el-date-picker>
  900. </div>
  901. <div class="mt-10 inline-16">
  902. <el-checkbox true-label="0" false-label="1" v-model="fllowMapParam.content.where.unfinish" @change="fllowTableParam.content.where.unfinish = fllowMapParam.content.where.unfinish;fllowTableParam.content.pageNumber = 1;$refs.projectFllowTable.listData();fllowInit()">包含失败、结案项目</el-checkbox>
  903. </div>
  904. <div class="mt-10 inline-15">
  905. <exportFile :param="fllowTableParam" :columns="tool.tabelCol($route.name).projectTable.tablecols" fileName="项目跟进情况统计" :dataid="fllowMapParam.content.dataid"></exportFile>
  906. </div>
  907. <div style="display: inline-block;vertical-align: middle">
  908. <FullScroll domId="projectFllow1" @onFull="onFull" @backFull="backFull"></FullScroll>
  909. </div>
  910. </div>
  911. </div>
  912. <div class="panel-content" :style="windowWidth<1335?'height:calc(100% - 140px)':windowWidth<2006?'height:calc(100% - 93px)':windowWidth<2037?'height:calc(100% - 83px)':'height:calc(100% - 53px)'">
  913. <div ref="projectFllowEl" :style="windowWidth<1505?'width:54%;height:calc(100%)':windowWidth<1805?'width:54%;height:calc(100%)':windowWidth<2500?'width:45%':'width:30%'"></div>
  914. <div class="panel-table" :style="windowWidth<1505?'width:46%;height:calc(100%)':windowWidth<1805?'width:46%;height:calc(100%)':windowWidth<2500?'width:55%':'width:70%'">
  915. <pageTable
  916. ref="projectFllowTable"
  917. :tablecols="tool.tabelCol($route.name).projectTable.tablecols"
  918. :param="fllowTableParam"
  919. :custom="true"
  920. fixedName="operation"
  921. >
  922. <template v-slot:custom="scope">
  923. <div v-if="scope.data.columnname == 'sys_tag'">
  924. <el-tag size="small" v-for="(item,index) in scope.data.data.sys_tag" :key="index" style="margin-right: 5px">{{ item }}</el-tag>
  925. </div>
  926. <div v-else-if="scope.data.columnname == 'operation'">
  927. <el-button type="text" size="small" @click="goDetail(scope.data.data,'projectFllowTable',fllowTableParam,'sa_projectid')" :disabled="isFull">详情</el-button>
  928. </div>
  929. <div v-else-if="scope.data.columnname == 'signamount_due'">
  930. {{ tool.formatAmount(scope.data.data.signamount_due,2,'¥') }}
  931. </div>
  932. <div v-else-if="scope.data.columnname === 'industry'">
  933. <el-tag size="small" v-for="(item,index) in scope.data.data.industry" :key="index" style="margin-right: 5px">{{ item }}</el-tag>
  934. </div>
  935. <div v-else-if="scope.data.columnname === 'tradingstatus'">
  936. <span style="color:#3874f6" v-if="scope.data.data[[scope.data.columnname]] == '未成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
  937. <span style="color:#fa8c16" v-else-if="scope.data.data[[scope.data.columnname]] == '已成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
  938. <span style="color:#333333" v-else-if="scope.data.data[[scope.data.columnname]] == '多次成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
  939. </div>
  940. <div v-else-if="scope.data.columnname === 'status'">
  941. <span style="color:rgb(250, 140, 22)" v-if="scope.data.data[[scope.data.columnname]] == '已成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
  942. <span style="color:#52c41a" v-else-if="scope.data.data[[scope.data.columnname]] == '跟进中'">{{scope.data.data[[scope.data.columnname]]}}</span>
  943. <span style="color:#999999" v-else-if="scope.data.data[[scope.data.columnname]] == '已失败' || scope.data.data[[scope.data.columnname]] == '已结案'">{{scope.data.data[[scope.data.columnname]]}}</span>
  944. </div>
  945. <div v-else-if="scope.data.columnname == 'scale'">
  946. {{scope.data.data.scale ? scope.data.data.scale + scope.data.data.unitname : '' }}
  947. </div>
  948. <div v-else>
  949. {{ scope.data.data[scope.data.columnname] }}
  950. </div>
  951. </template>
  952. </pageTable>
  953. </div>
  954. </div>
  955. </div>
  956. </div>
  957. <!--项目联系人情况-->
  958. <div class="data-panel" id="projectContact">
  959. <div class="panel-content-wrapper" >
  960. <div class="panel-header">
  961. <div class="title">项目联系人情况统计</div>
  962. <div class="panel-select">
  963. <div class="mt-10 inline-16">
  964. <label class="search__label" >部门:</label>
  965. <el-cascader
  966. :append-to-body="false"
  967. placement="bottom"
  968. ref="selectdep"
  969. size="small"
  970. v-model="contactTableParam.content.dataid"
  971. :options="deplist"
  972. :props="{emitPath:true,expandTrigger:'hover',checkStrictly:true,label:'label',value:'departmentid',children:'children'}"
  973. @change="$event => {if($event.length) {contactMapParam.content.type=1;contactMapParam.content.dataid=$event[$event.length - 1];contactTableParam.content.type=1;contactTableParam.content.username='';contactTableParam.content.pageNumber = 1;$refs.projectContactTable.listData();contactInit()} else {contactMapParam.content.type='';contactMapParam.content.dataid='';contactTableParam.content.dataid='';contactTableParam.content.type='';contactTableParam.content.username='';contactTableParam.content.pageNumber = 1;$refs.projectContactTable.listData();contactInit()}}"></el-cascader>
  974. </div>
  975. <div class="mt-10 inline-16">
  976. <label class="search__label" >业务员:</label>
  977. <el-select v-model="contactTableParam.content.username" filterable placeholder="请选择" size="small"
  978. :popper-append-to-body="false"
  979. @change="$event => {if($event) {contactMapParam.content.type=0;contactMapParam.content.dataid=$event;contactTableParam.content.type=0;contactTableParam.content.dataid=$event;contactTableParam.content.depname='';contactTableParam.content.pageNumber = 1;$refs.projectContactTable.listData();contactInit()} else {contactMapParam.content.type='';contactMapParam.content.dataid='';contactTableParam.content.dataid='';contactTableParam.content.type='';contactTableParam.content.depname='';contactTableParam.content.pageNumber = 1;$refs.projectContactTable.listData();contactInit()}}"
  980. >
  981. <el-option
  982. v-for="item in contactMapParamSalesman"
  983. :key="item.index"
  984. :label="item.name"
  985. :value="item.userid">
  986. </el-option>
  987. </el-select>
  988. </div>
  989. <div class="mt-10 inline-16">
  990. <p class="search__label">状态:</p>
  991. <el-select v-model="contactTableParam.content.where.isleave" clearable style="margin-right:10px" size="small" placeholder="请选择状态" @change="contactMapParam.content.where.isleave = contactTableParam.content.where.isleave;contactTableParam.content.username = '';contactTableParam.content.pageNumber = 1;$refs.projectContactTable.listData(null,'状态');contactInit(null,'状态')" >
  992. <el-option label="在职" value="1"></el-option>
  993. <el-option label="离职" value="2"></el-option>
  994. </el-select>
  995. </div>
  996. <div class="mt-10 inline-16">
  997. <el-button-group>
  998. <el-button :type="contactTableParam.content.dateType === '全部'?'primary':''" size="small" @click="contactMapParam.content.dateType = '全部';contactTableParam.content.dateType = '全部';
  999. contactMapParam.content.where.begdate = '';contactMapParam.content.where.enddate = '';contactTableParam.content.where.begdate = '';contactTableParam.content.where.enddate = '';contactDate = []
  1000. contactTableParam.content.pageNumber = 1;$refs.projectContactTable.listData();contactInit()">全部</el-button>
  1001. <el-button :type="contactTableParam.content.dateType === '本年'?'primary':''" size="small" @click="contactMapParam.content.dateType = '本年';contactTableParam.content.dateType = '本年';
  1002. contactDate = [new Date().getFullYear() + '-01',new Date().getFullYear() + '-12'];contactMapParam.content.where.begdate = new Date().getFullYear() + '-01';contactMapParam.content.where.enddate = new Date().getFullYear() + '-12';
  1003. contactTableParam.content.where.begdate = new Date().getFullYear() + '-01';contactTableParam.content.where.enddate = new Date().getFullYear() + '-12';
  1004. contactTableParam.content.pageNumber = 1;$refs.projectContactTable.listData();contactInit()">本年</el-button>
  1005. </el-button-group>
  1006. </div>
  1007. <div class="mt-10 inline-16">
  1008. <el-date-picker
  1009. v-show="isFull"
  1010. :append-to-body="false"
  1011. v-model="contactDate"
  1012. :clearable="false"
  1013. @change="contactMapParam.content.dateType = '';contactMapParam.content.where.begdate = contactDate[0];contactMapParam.content.where.enddate = contactDate[1];contactTableParam.content.dateType = '';contactTableParam.content.where.begdate = contactDate[0];contactTableParam.content.where.enddate = contactDate[1];
  1014. contactTableParam.content.pageNumber = 1;$refs.projectContactTable.listData();contactInit()"
  1015. size="small"
  1016. format="yyyy-MM"
  1017. value-format="yyyy-MM"
  1018. type="monthrange"
  1019. range-separator="至"
  1020. start-placeholder="开始月份"
  1021. end-placeholder="结束月份">
  1022. </el-date-picker>
  1023. <el-date-picker
  1024. v-show="!isFull"
  1025. v-model="contactDate"
  1026. :clearable="false"
  1027. @change="contactMapParam.content.dateType = '';contactMapParam.content.where.begdate = contactDate[0];contactMapParam.content.where.enddate = contactDate[1];contactTableParam.content.dateType = '';contactTableParam.content.where.begdate = contactDate[0];contactTableParam.content.where.enddate = contactDate[1];
  1028. contactTableParam.content.pageNumber = 1;$refs.projectContactTable.listData();contactInit()"
  1029. size="small"
  1030. format="yyyy-MM"
  1031. value-format="yyyy-MM"
  1032. type="monthrange"
  1033. range-separator="至"
  1034. start-placeholder="开始月份"
  1035. end-placeholder="结束月份">
  1036. </el-date-picker>
  1037. </div>
  1038. <div class="mt-10 inline-16">
  1039. <el-checkbox true-label="0" false-label="1" v-model="contactMapParam.content.where.unfinish" @change="contactTableParam.content.where.unfinish = contactMapParam.content.where.unfinish;contactTableParam.content.pageNumber = 1;$refs.projectContactTable.listData();contactInit()">包含失败、结案项目</el-checkbox>
  1040. </div>
  1041. <div class="mt-10 inline-15">
  1042. <exportFile :param="contactTableParam" :columns="tool.tabelCol($route.name).projectTable.tablecols" fileName="项目联系人情况统计" :dataid="contactMapParam.content.dataid"></exportFile>
  1043. </div>
  1044. <div style="display: inline-block;vertical-align: middle">
  1045. <FullScroll domId="projectContact" @onFull="onFull" @backFull="backFull"></FullScroll>
  1046. </div>
  1047. </div>
  1048. </div>
  1049. <div class="panel-content" :style="windowWidth<1335?'height:calc(100% - 140px)':windowWidth<2006?'height:calc(100% - 93px)':windowWidth<2037?'height:calc(100% - 83px)':'height:calc(100% - 53px)'">
  1050. <div ref="projectContactEl" :style="windowWidth<1505?'width:54%;height:calc(100%)':windowWidth<1805?'width:54%;height:calc(100%)':windowWidth<2500?'width:45%':'width:30%'"></div>
  1051. <div class="panel-table" :style="windowWidth<1505?'width:46%;height:calc(100%)':windowWidth<1805?'width:46%;height:calc(100%)':windowWidth<2500?'width:55%':'width:70%'">
  1052. <pageTable
  1053. ref="projectContactTable"
  1054. :tablecols="tool.tabelCol($route.name).projectTable.tablecols"
  1055. :param="contactTableParam"
  1056. :custom="true"
  1057. fixedName="operation"
  1058. >
  1059. <template v-slot:custom="scope">
  1060. <div v-if="scope.data.columnname == 'sys_tag'">
  1061. <el-tag size="small" v-for="(item,index) in scope.data.data.sys_tag" :key="index" style="margin-right: 5px">{{ item }}</el-tag>
  1062. </div>
  1063. <div v-else-if="scope.data.columnname == 'operation'">
  1064. <el-button type="text" size="small" @click="goDetail(scope.data.data,'projectContactTable',contactTableParam,'sa_projectid')" :disabled="isFull">详情</el-button>
  1065. </div>
  1066. <div v-else-if="scope.data.columnname == 'signamount_due'">
  1067. {{ tool.formatAmount(scope.data.data.signamount_due,2,'¥') }}
  1068. </div>
  1069. <div v-else-if="scope.data.columnname === 'industry'">
  1070. <el-tag size="small" v-for="(item,index) in scope.data.data.industry" :key="index" style="margin-right: 5px">{{ item }}</el-tag>
  1071. </div>
  1072. <div v-else-if="scope.data.columnname === 'tradingstatus'">
  1073. <span style="color:#3874f6" v-if="scope.data.data[[scope.data.columnname]] == '未成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
  1074. <span style="color:#fa8c16" v-else-if="scope.data.data[[scope.data.columnname]] == '已成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
  1075. <span style="color:#333333" v-else-if="scope.data.data[[scope.data.columnname]] == '多次成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
  1076. </div>
  1077. <div v-else-if="scope.data.columnname === 'status'">
  1078. <span style="color:rgb(250, 140, 22)" v-if="scope.data.data[[scope.data.columnname]] == '已成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
  1079. <span style="color:#52c41a" v-else-if="scope.data.data[[scope.data.columnname]] == '跟进中'">{{scope.data.data[[scope.data.columnname]]}}</span>
  1080. <span style="color:#999999" v-else-if="scope.data.data[[scope.data.columnname]] == '已失败' || scope.data.data[[scope.data.columnname]] == '已结案'">{{scope.data.data[[scope.data.columnname]]}}</span>
  1081. </div>
  1082. <div v-else-if="scope.data.columnname == 'scale'">
  1083. {{scope.data.data.scale ? scope.data.data.scale + scope.data.data.unitname : '' }}
  1084. </div>
  1085. <div v-else>
  1086. {{ scope.data.data[scope.data.columnname] }}
  1087. </div>
  1088. </template>
  1089. </pageTable>
  1090. </div>
  1091. </div>
  1092. </div>
  1093. </div>
  1094. <!--项目关联客户情况-->
  1095. <div class="data-panel" id="projectCustomer">
  1096. <div class="panel-content-wrapper" >
  1097. <div class="panel-header">
  1098. <div class="title">项目关联客户情况统计</div>
  1099. <div class="panel-select">
  1100. <div class="mt-10 inline-16">
  1101. <label class="search__label" >部门:</label>
  1102. <el-cascader
  1103. :append-to-body="false"
  1104. placement="bottom"
  1105. ref="selectdep"
  1106. size="small"
  1107. v-model="customerTableParam.content.dataid"
  1108. :options="deplist"
  1109. :props="{emitPath:true,expandTrigger:'hover',checkStrictly:true,label:'label',value:'departmentid',children:'children'}"
  1110. @change="$event => {if($event.length) {customerMapParam.content.type=1;customerMapParam.content.dataid=$event[$event.length - 1];customerTableParam.content.type=1;customerTableParam.content.username='';customerTableParam.content.pageNumber = 1;$refs.projectCustomerTable.listData();customerInit()} else {customerMapParam.content.type='';customerMapParam.content.dataid='';customerTableParam.content.dataid='';customerTableParam.content.type='';customerTableParam.content.username='';customerTableParam.content.pageNumber = 1;$refs.projectCustomerTable.listData();customerInit()}}"></el-cascader>
  1111. </div>
  1112. <div class="mt-10 inline-16">
  1113. <label class="search__label" >业务员:</label>
  1114. <el-select v-model="customerTableParam.content.username" filterable placeholder="请选择" size="small"
  1115. :popper-append-to-body="false"
  1116. @change="$event => {if($event) {customerMapParam.content.type=0;customerMapParam.content.dataid=$event;customerTableParam.content.type=0;customerTableParam.content.dataid=$event;customerTableParam.content.depname='';customerTableParam.content.pageNumber = 1;$refs.projectCustomerTable.listData();customerInit()} else {customerMapParam.content.type='';customerMapParam.content.dataid='';customerTableParam.content.dataid='';customerTableParam.content.type='';customerTableParam.content.depname='';customerTableParam.content.pageNumber = 1;$refs.projectCustomerTable.listData();customerInit()}}"
  1117. >
  1118. <el-option
  1119. v-for="item in customerMapParamSalesman"
  1120. :key="item.index"
  1121. :label="item.name"
  1122. :value="item.userid">
  1123. </el-option>
  1124. </el-select>
  1125. </div>
  1126. <div class="mt-10 inline-16">
  1127. <p class="search__label">状态:</p>
  1128. <el-select v-model="customerTableParam.content.where.isleave" clearable style="margin-right:10px" size="small" placeholder="请选择状态" @change="customerMapParam.content.where.isleave = customerTableParam.content.where.isleave;customerTableParam.content.username = '';customerTableParam.content.pageNumber = 1;$refs.projectCustomerTable.listData(null,'状态');customerInit(null,'状态')" >
  1129. <el-option label="在职" value="1"></el-option>
  1130. <el-option label="离职" value="2"></el-option>
  1131. </el-select>
  1132. </div>
  1133. <div class="mt-10 inline-16">
  1134. <el-button-group>
  1135. <el-button :type="customerTableParam.content.dateType === '全部'?'primary':''" size="small" @click="customerMapParam.content.dateType = '全部';customerTableParam.content.dateType = '全部';
  1136. customerMapParam.content.where.begdate = '';customerMapParam.content.where.enddate = '';customerTableParam.content.where.begdate = '';customerTableParam.content.where.enddate = '';customerDate = []
  1137. customerTableParam.content.pageNumber = 1;$refs.projectCustomerTable.listData();customerInit()">全部</el-button>
  1138. <el-button :type="customerTableParam.content.dateType === '本年'?'primary':''" size="small" @click="customerMapParam.content.dateType = '本年';customerTableParam.content.dateType = '本年';
  1139. customerDate = [new Date().getFullYear() + '-01',new Date().getFullYear() + '-12'];customerMapParam.content.where.begdate = new Date().getFullYear() + '-01';customerMapParam.content.where.enddate = new Date().getFullYear() + '-12';
  1140. customerTableParam.content.where.begdate = new Date().getFullYear() + '-01';customerTableParam.content.where.enddate = new Date().getFullYear() + '-12';
  1141. customerTableParam.content.pageNumber = 1;$refs.projectCustomerTable.listData();customerInit()">本年</el-button>
  1142. </el-button-group>
  1143. </div>
  1144. <div class="mt-10 inline-16">
  1145. <el-date-picker
  1146. v-show="isFull"
  1147. :append-to-body="false"
  1148. v-model="customerDate"
  1149. :clearable="false"
  1150. @change="customerMapParam.content.dateType = '';customerMapParam.content.where.begdate = customerDate[0];customerMapParam.content.where.enddate = customerDate[1];customerTableParam.content.dateType = '';customerTableParam.content.where.begdate = customerDate[0];customerTableParam.content.where.enddate = customerDate[1];
  1151. customerTableParam.content.pageNumber = 1;$refs.projectCustomerTable.listData();customerInit()"
  1152. size="small"
  1153. format="yyyy-MM"
  1154. value-format="yyyy-MM"
  1155. type="monthrange"
  1156. range-separator="至"
  1157. start-placeholder="开始月份"
  1158. end-placeholder="结束月份">
  1159. </el-date-picker>
  1160. <el-date-picker
  1161. v-show="!isFull"
  1162. v-model="customerDate"
  1163. :clearable="false"
  1164. @change="customerMapParam.content.dateType = '';customerMapParam.content.where.begdate = customerDate[0];customerMapParam.content.where.enddate = customerDate[1];customerTableParam.content.dateType = '';customerTableParam.content.where.begdate = customerDate[0];customerTableParam.content.where.enddate = customerDate[1];
  1165. customerTableParam.content.pageNumber = 1;$refs.projectCustomerTable.listData();customerInit()"
  1166. size="small"
  1167. format="yyyy-MM"
  1168. value-format="yyyy-MM"
  1169. type="monthrange"
  1170. range-separator="至"
  1171. start-placeholder="开始月份"
  1172. end-placeholder="结束月份">
  1173. </el-date-picker>
  1174. </div>
  1175. <div class="mt-10 inline-16">
  1176. <el-checkbox true-label="0" false-label="1" v-model="customerMapParam.content.where.unfinish" @change="customerTableParam.content.where.unfinish = customerMapParam.content.where.unfinish;customerTableParam.content.pageNumber = 1;$refs.projectCustomerTable.listData();customerInit()">包含失败、结案项目</el-checkbox>
  1177. </div>
  1178. <div class="mt-10 inline-15">
  1179. <exportFile :param="customerTableParam" :columns="tool.tabelCol($route.name).projectTable.tablecols" fileName="项目关联客户情况统计" :dataid="customerMapParam.content.dataid"></exportFile>
  1180. </div>
  1181. <div style="display: inline-block;vertical-align: middle">
  1182. <FullScroll domId="projectCustomer" @onFull="onFull" @backFull="backFull"></FullScroll>
  1183. </div>
  1184. </div>
  1185. </div>
  1186. <div class="panel-content" :style="windowWidth<1335?'height:calc(100% - 140px)':windowWidth<2006?'height:calc(100% - 93px)':windowWidth<2037?'height:calc(100% - 83px)':'height:calc(100% - 53px)'">
  1187. <div ref="projectCustomerEl" :style="windowWidth<1505?'width:54%;height:calc(100%)':windowWidth<1805?'width:54%;height:calc(100%)':windowWidth<2500?'width:45%':'width:30%'"></div>
  1188. <div class="panel-table" :style="windowWidth<1505?'width:46%;height:calc(100%)':windowWidth<1805?'width:46%;height:calc(100%)':windowWidth<2500?'width:55%':'width:70%'">
  1189. <pageTable
  1190. ref="projectCustomerTable"
  1191. :tablecols="tool.tabelCol($route.name).projectTable.tablecols"
  1192. :param="customerTableParam"
  1193. :custom="true"
  1194. fixedName="operation"
  1195. >
  1196. <template v-slot:custom="scope">
  1197. <div v-if="scope.data.columnname == 'sys_tag'">
  1198. <el-tag size="small" v-for="(item,index) in scope.data.data.sys_tag" :key="index" style="margin-right: 5px">{{ item }}</el-tag>
  1199. </div>
  1200. <div v-else-if="scope.data.columnname == 'operation'">
  1201. <el-button type="text" size="small" @click="goDetail(scope.data.data,'projectCustomerTable',customerTableParam,'sa_projectid')" :disabled="isFull">详情</el-button>
  1202. </div>
  1203. <div v-else-if="scope.data.columnname == 'signamount_due'">
  1204. {{ tool.formatAmount(scope.data.data.signamount_due,2,'¥') }}
  1205. </div>
  1206. <div v-else-if="scope.data.columnname === 'industry'">
  1207. <el-tag size="small" v-for="(item,index) in scope.data.data.industry" :key="index" style="margin-right: 5px">{{ item }}</el-tag>
  1208. </div>
  1209. <div v-else-if="scope.data.columnname === 'tradingstatus'">
  1210. <span style="color:#3874f6" v-if="scope.data.data[[scope.data.columnname]] == '未成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
  1211. <span style="color:#fa8c16" v-else-if="scope.data.data[[scope.data.columnname]] == '已成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
  1212. <span style="color:#333333" v-else-if="scope.data.data[[scope.data.columnname]] == '多次成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
  1213. </div>
  1214. <div v-else-if="scope.data.columnname === 'status'">
  1215. <span style="color:rgb(250, 140, 22)" v-if="scope.data.data[[scope.data.columnname]] == '已成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
  1216. <span style="color:#52c41a" v-else-if="scope.data.data[[scope.data.columnname]] == '跟进中'">{{scope.data.data[[scope.data.columnname]]}}</span>
  1217. <span style="color:#999999" v-else-if="scope.data.data[[scope.data.columnname]] == '已失败' || scope.data.data[[scope.data.columnname]] == '已结案'">{{scope.data.data[[scope.data.columnname]]}}</span>
  1218. </div>
  1219. <div v-else-if="scope.data.columnname == 'scale'">
  1220. {{scope.data.data.scale ? scope.data.data.scale + scope.data.data.unitname : '' }}
  1221. </div>
  1222. <div v-else>
  1223. {{ scope.data.data[scope.data.columnname] }}
  1224. </div>
  1225. </template>
  1226. </pageTable>
  1227. </div>
  1228. </div>
  1229. </div>
  1230. </div>
  1231. <!--项目评估情况-->
  1232. <div class="data-panel" id="projectScore">
  1233. <div class="panel-content-wrapper" >
  1234. <div class="panel-header">
  1235. <div class="title">项目评估情况统计</div>
  1236. <div class="panel-select">
  1237. <div class="mt-10 inline-16">
  1238. <label class="search__label" >部门:</label>
  1239. <el-cascader
  1240. :append-to-body="false"
  1241. placement="bottom"
  1242. ref="selectdep"
  1243. size="small"
  1244. v-model="scoreTableParam.content.dataid"
  1245. :options="deplist"
  1246. :props="{emitPath:true,expandTrigger:'hover',checkStrictly:true,label:'label',value:'departmentid',children:'children'}"
  1247. @change="$event => {if($event.length) {scoreMapParam.content.type=1;scoreMapParam.content.dataid=$event[$event.length - 1];scoreTableParam.content.type=1;scoreTableParam.content.username='';scoreTableParam.content.pageNumber = 1;$refs.projectScoreTable.listData();projectScoreInit()} else {scoreMapParam.content.type='';scoreMapParam.content.dataid='';scoreTableParam.content.dataid='';scoreTableParam.content.type='';scoreTableParam.content.username='';scoreTableParam.content.pageNumber = 1;$refs.projectScoreTable.listData();projectScoreInit()}}"></el-cascader>
  1248. </div>
  1249. <div class="mt-10 inline-16">
  1250. <label class="search__label" >业务员:</label>
  1251. <el-select v-model="scoreTableParam.content.username" filterable placeholder="请选择" size="small"
  1252. :popper-append-to-body="false"
  1253. @change="$event => {if($event) {scoreMapParam.content.type=0;scoreMapParam.content.dataid=$event;scoreTableParam.content.type=0;scoreTableParam.content.dataid=$event;scoreTableParam.content.depname='';scoreTableParam.content.pageNumber = 1;$refs.projectScoreTable.listData();projectScoreInit()} else {scoreMapParam.content.type='';scoreMapParam.content.dataid='';scoreTableParam.content.dataid='';scoreTableParam.content.type='';scoreTableParam.content.depname='';scoreTableParam.content.pageNumber = 1;$refs.projectScoreTable.listData();projectScoreInit()}}"
  1254. >
  1255. <el-option
  1256. v-for="item in scoreMapParamSalesman"
  1257. :key="item.index"
  1258. :label="item.name"
  1259. :value="item.userid">
  1260. </el-option>
  1261. </el-select>
  1262. </div>
  1263. <div class="mt-10 inline-16">
  1264. <p class="search__label">状态:</p>
  1265. <el-select v-model="scoreTableParam.content.where.isleave" clearable style="margin-right:10px" size="small" placeholder="请选择状态" @change="scoreMapParam.content.where.isleave = scoreTableParam.content.where.isleave;scoreTableParam.content.username = '';scoreTableParam.content.pageNumber = 1;$refs.projectScoreTable.listData(null,'状态');projectScoreInit(null,'状态')" >
  1266. <el-option label="在职" value="1"></el-option>
  1267. <el-option label="离职" value="2"></el-option>
  1268. </el-select>
  1269. </div>
  1270. <div class="mt-10 inline-16">
  1271. <el-button-group>
  1272. <el-button :type="scoreTableParam.content.dateType === '全部'?'primary':''" size="small" @click="scoreMapParam.content.dateType = '全部';scoreTableParam.content.dateType = '全部';
  1273. scoreMapParam.content.where.begdate = '';scoreMapParam.content.where.enddate = '';scoreTableParam.content.where.begdate = '';scoreTableParam.content.where.enddate = '';scoreDate = []
  1274. scoreTableParam.content.pageNumber = 1;$refs.projectScoreTable.listData();projectScoreInit()">全部</el-button>
  1275. <el-button :type="scoreTableParam.content.dateType === '本年'?'primary':''" size="small" @click="scoreMapParam.content.dateType = '本年';scoreTableParam.content.dateType = '本年';
  1276. scoreDate = [new Date().getFullYear() + '-01',new Date().getFullYear() + '-12'];scoreMapParam.content.where.begdate = new Date().getFullYear() + '-01';scoreMapParam.content.where.enddate = new Date().getFullYear() + '-12';
  1277. scoreTableParam.content.where.begdate = new Date().getFullYear() + '-01';scoreTableParam.content.where.enddate = new Date().getFullYear() + '-12';
  1278. scoreTableParam.content.pageNumber = 1;$refs.projectScoreTable.listData();projectScoreInit()">本年</el-button>
  1279. </el-button-group>
  1280. </div>
  1281. <div class="mt-10 inline-16">
  1282. <el-date-picker
  1283. v-show="isFull"
  1284. :append-to-body="false"
  1285. v-model="scoreDate"
  1286. :clearable="false"
  1287. @change="scoreMapParam.content.dateType = '';scoreMapParam.content.where.begdate = scoreDate[0];scoreMapParam.content.where.enddate = scoreDate[1];scoreTableParam.content.dateType = '';scoreTableParam.content.where.begdate = scoreDate[0];scoreTableParam.content.where.enddate = scoreDate[1];
  1288. scoreTableParam.content.pageNumber = 1;$refs.projectScoreTable.listData();projectScoreInit()"
  1289. size="small"
  1290. format="yyyy-MM"
  1291. value-format="yyyy-MM"
  1292. type="monthrange"
  1293. range-separator="至"
  1294. start-placeholder="开始月份"
  1295. end-placeholder="结束月份">
  1296. </el-date-picker>
  1297. <el-date-picker
  1298. v-show="!isFull"
  1299. v-model="scoreDate"
  1300. :clearable="false"
  1301. @change="scoreMapParam.content.dateType = '';scoreMapParam.content.where.begdate = scoreDate[0];scoreMapParam.content.where.enddate = scoreDate[1];scoreTableParam.content.dateType = '';scoreTableParam.content.where.begdate = scoreDate[0];scoreTableParam.content.where.enddate = scoreDate[1];
  1302. scoreTableParam.content.pageNumber = 1;$refs.projectScoreTable.listData();projectScoreInit()"
  1303. size="small"
  1304. format="yyyy-MM"
  1305. value-format="yyyy-MM"
  1306. type="monthrange"
  1307. range-separator="至"
  1308. start-placeholder="开始月份"
  1309. end-placeholder="结束月份">
  1310. </el-date-picker>
  1311. </div>
  1312. <div class="mt-10 inline-16">
  1313. <el-checkbox true-label="0" false-label="1" v-model="scoreMapParam.content.where.unfinish" @change="scoreTableParam.content.where.unfinish = scoreMapParam.content.where.unfinish;scoreTableParam.content.pageNumber = 1;$refs.projectScoreTable.listData();projectScoreInit()">包含失败、结案项目</el-checkbox>
  1314. </div>
  1315. <div class="mt-10 inline-15">
  1316. <exportFile :param="scoreTableParam" :columns="tool.tabelCol($route.name).projectTable.tablecols" fileName="项目评估情况统计" :dataid="scoreMapParam.content.dataid"></exportFile>
  1317. </div>
  1318. <div style="display: inline-block;vertical-align: middle">
  1319. <FullScroll domId="projectScore" @onFull="onFull" @backFull="backFull"></FullScroll>
  1320. </div>
  1321. </div>
  1322. </div>
  1323. <div class="panel-content" :style="windowWidth<1335?'height:calc(100% - 140px)':windowWidth<2006?'height:calc(100% - 93px)':windowWidth<2037?'height:calc(100% - 83px)':'height:calc(100% - 53px)'">
  1324. <div ref="projectScoreEl" :style="windowWidth<1505?'width:54%;height:calc(100%)':windowWidth<1805?'width:54%;height:calc(100%)':windowWidth<2500?'width:45%':'width:30%'"></div>
  1325. <div class="panel-table" :style="windowWidth<1505?'width:46%;height:calc(100%)':windowWidth<1805?'width:46%;height:calc(100%)':windowWidth<2500?'width:55%':'width:70%'">
  1326. <pageTable
  1327. ref="projectScoreTable"
  1328. :tablecols="tool.tabelCol($route.name).projectTable.tablecols"
  1329. :param="scoreTableParam"
  1330. :custom="true"
  1331. fixedName="operation"
  1332. >
  1333. <template v-slot:custom="scope">
  1334. <div v-if="scope.data.columnname == 'sys_tag'">
  1335. <el-tag size="small" v-for="(item,index) in scope.data.data.sys_tag" :key="index" style="margin-right: 5px">{{ item }}</el-tag>
  1336. </div>
  1337. <div v-else-if="scope.data.columnname == 'operation'">
  1338. <el-button type="text" size="small" @click="goDetail(scope.data.data,'projectScoreTable',scoreTableParam,'sa_projectid')" :disabled="isFull">详情</el-button>
  1339. </div>
  1340. <div v-else-if="scope.data.columnname == 'signamount_due'">
  1341. {{ tool.formatAmount(scope.data.data.signamount_due,2,'¥') }}
  1342. </div>
  1343. <div v-else-if="scope.data.columnname === 'industry'">
  1344. <el-tag size="small" v-for="(item,index) in scope.data.data.industry" :key="index" style="margin-right: 5px">{{ item }}</el-tag>
  1345. </div>
  1346. <div v-else-if="scope.data.columnname === 'tradingstatus'">
  1347. <span style="color:#3874f6" v-if="scope.data.data[[scope.data.columnname]] == '未成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
  1348. <span style="color:#fa8c16" v-else-if="scope.data.data[[scope.data.columnname]] == '已成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
  1349. <span style="color:#333333" v-else-if="scope.data.data[[scope.data.columnname]] == '多次成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
  1350. </div>
  1351. <div v-else-if="scope.data.columnname === 'status'">
  1352. <span style="color:rgb(250, 140, 22)" v-if="scope.data.data[[scope.data.columnname]] == '已成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
  1353. <span style="color:#52c41a" v-else-if="scope.data.data[[scope.data.columnname]] == '跟进中'">{{scope.data.data[[scope.data.columnname]]}}</span>
  1354. <span style="color:#999999" v-else-if="scope.data.data[[scope.data.columnname]] == '已失败' || scope.data.data[[scope.data.columnname]] == '已结案'">{{scope.data.data[[scope.data.columnname]]}}</span>
  1355. </div>
  1356. <div v-else-if="scope.data.columnname == 'scale'">
  1357. {{scope.data.data.scale ? scope.data.data.scale + scope.data.data.unitname : '' }}
  1358. </div>
  1359. <div v-else>
  1360. {{ scope.data.data[scope.data.columnname] }}
  1361. </div>
  1362. </template>
  1363. </pageTable>
  1364. </div>
  1365. </div>
  1366. </div>
  1367. </div>
  1368. <!--有效项目未跟进情况-->
  1369. <div class="data-panel" style="height:800px" id="projectUnfllow">
  1370. <div class="panel-content-wrapper" >
  1371. <div class="panel-header">
  1372. <div class="title">有效项目未跟进天数分析</div>
  1373. <div class="panel-select">
  1374. <div class="mt-10 inline-16">
  1375. <label class="search__label" >部门:</label>
  1376. <el-cascader
  1377. :append-to-body="false"
  1378. placement="bottom"
  1379. ref="selectdep"
  1380. size="small"
  1381. v-model="unfllowTableParam.content.dataid"
  1382. :options="deplist"
  1383. :props="{emitPath:true,expandTrigger:'hover',checkStrictly:true,label:'label',value:'departmentid',children:'children'}"
  1384. @change="$event => {if($event.length) {unfllowMapParam.content.type=1;unfllowMapParam.content.dataid=$event[$event.length - 1];unfllowTableParam.content.type=1;unfllowTableParam.content.username='';unfllowTableParam.content.pageNumber = 1;$refs.customerUnfllowTable.listData();customerUnfllowInit()} else {unfllowMapParam.content.type='';unfllowMapParam.content.dataid='';unfllowTableParam.content.dataid='';unfllowTableParam.content.type='';unfllowTableParam.content.username='';unfllowTableParam.content.pageNumber = 1;$refs.customerUnfllowTable.listData();customerUnfllowInit()}}"></el-cascader>
  1385. </div>
  1386. <div class="mt-10 inline-16">
  1387. <label class="search__label" >业务员:</label>
  1388. <el-select v-model="unfllowTableParam.content.username" filterable placeholder="请选择" size="small"
  1389. :popper-append-to-body="false"
  1390. @change="$event => {if($event) {unfllowMapParam.content.type=0;unfllowMapParam.content.dataid=$event;unfllowTableParam.content.type=0;unfllowTableParam.content.dataid=$event;unfllowTableParam.content.depname='';unfllowTableParam.content.pageNumber = 1;$refs.customerUnfllowTable.listData();customerUnfllowInit()} else {unfllowMapParam.content.type='';unfllowMapParam.content.dataid='';unfllowTableParam.content.dataid='';unfllowTableParam.content.type='';unfllowTableParam.content.depname='';unfllowTableParam.content.pageNumber = 1;$refs.customerUnfllowTable.listData();customerUnfllowInit()}}"
  1391. >
  1392. <el-option
  1393. v-for="item in unfllowMapParamSalesman"
  1394. :key="item.index"
  1395. :label="item.name"
  1396. :value="item.userid">
  1397. </el-option>
  1398. </el-select>
  1399. </div>
  1400. <div class="mt-10 inline-16">
  1401. <p class="search__label">状态:</p>
  1402. <el-select v-model="unfllowTableParam.content.where.isleave" clearable style="margin-right:10px" size="small" placeholder="请选择状态" @change="unfllowMapParam.content.where.isleave = unfllowTableParam.content.where.isleave;unfllowTableParam.content.username = '';unfllowTableParam.content.pageNumber = 1;$refs.customerUnfllowTable.listData(null,'状态');customerUnfllowInit(null,'状态')" >
  1403. <el-option label="在职" value="1"></el-option>
  1404. <el-option label="离职" value="2"></el-option>
  1405. </el-select>
  1406. </div>
  1407. <div class="mt-10 inline-16">
  1408. <label class="search__label">项目类型:</label>
  1409. <el-select
  1410. v-model="unfllowMapParam.content.where.projecttype"
  1411. placeholder="请选择项目类型"
  1412. :popper-append-to-body="false"
  1413. @change="$event => {if($event.length) {unfllowTableParam.content.where.projecttype=$event;unfllowTableParam.content.pageNumber = 1;$refs.customerUnfllowTable.listData();customerUnfllowInit()} else {unfllowTableParam.content.where.projecttype='';$refs.customerUnfllowTable.listData();customerUnfllowInit()}}"
  1414. size="small" clearable>
  1415. <el-option
  1416. v-for="item in projectType"
  1417. :key="item.value"
  1418. :label="item.value"
  1419. :value="item.value">
  1420. <span style="float: left">{{ item.value }}</span>
  1421. <span style="float: right; color: #8492a6; font-size: 12px">{{ item.remarks?item.remarks:'暂无描述' }}</span>
  1422. </el-option>
  1423. </el-select>
  1424. </div>
  1425. <div class="mt-10 inline-16">
  1426. <label class="search__label" >分析日期:</label>
  1427. <el-date-picker
  1428. :append-to-body="false"
  1429. v-model="unfllowMapParam.content.enddate"
  1430. format="yyyy-MM-dd"
  1431. value-format="yyyy-MM-dd"
  1432. type="date"
  1433. size="small"
  1434. placeholder="选择日期"
  1435. @change="unfllowTableParam.content.enddate=unfllowMapParam.content.enddate;unfllowTableParam.content.pageNumber = 1;customerUnfllowInit();$refs.customerUnfllowTable.listData()">
  1436. </el-date-picker>
  1437. </div>
  1438. <div class="mt-10 inline-16">
  1439. <el-checkbox true-label="0" false-label="1" v-model="unfllowMapParam.content.where.unfinish" @change="unfllowTableParam.content.where.unfinish = unfllowMapParam.content.where.unfinish;unfllowTableParam.content.pageNumber = 1;customerUnfllowInit();$refs.customerUnfllowTable.listData()">包含失败、结案项目</el-checkbox>
  1440. </div>
  1441. <div class="mt-10 inline-15">
  1442. <exportFile :param="unfllowTableParam" :columns="tool.tabelCol($route.name).projectTable1.tablecols.splice(0,tool.tabelCol($route.name).projectTable1.tablecols.length - 1)" fileName="有效项目未跟进天数分析" :dataid="unfllowMapParam.content.dataid"></exportFile>
  1443. </div>
  1444. <div style="display: inline-block;vertical-align: middle">
  1445. <FullScroll domId="projectUnfllow"></FullScroll>
  1446. </div>
  1447. </div>
  1448. </div>
  1449. <div style="height:calc(100% - 55px)">
  1450. <div ref="customerUnfllowEl" style="height:30%"></div>
  1451. <div style="font-size:16px;color:#333333;margin:10px 0">{{ unfllowStatus ? unfllowStatus : '全部' }}</div>
  1452. <div :style="{height:windowWidth<1359?'60%':windowWidth<1372?'62%':windowWidth<2110?'66%':'71%'}">
  1453. <pageTable
  1454. style="height:calc(100% - 50px)"
  1455. v-if="projectType[0].value != ''"
  1456. ref="customerUnfllowTable"
  1457. :tablecols="tool.tabelCol($route.name).projectTable1.tablecols.splice(0,tool.tabelCol($route.name).projectTable1.tablecols.length - 1)"
  1458. :param="unfllowTableParam"
  1459. :custom="true"
  1460. @handleParam="handleUnfllowParam"
  1461. >
  1462. <template v-slot:custom="scope">
  1463. <div v-if="scope.data.columnname == 'sys_tag'">
  1464. <el-tag size="small" v-for="(item,index) in scope.data.data.sys_tag" :key="index" style="margin-right: 5px">{{ item }}</el-tag>
  1465. </div>
  1466. <div v-else-if="scope.data.columnname == 'operation'">
  1467. <el-button type="text" size="small" @click="goDetail(scope.data.data,'customerUnfllowTable',unfllowTableParam,'sa_projectid')">详情</el-button>
  1468. </div>
  1469. <div v-else-if="scope.data.columnname == 'signamount_due'">
  1470. {{ tool.formatAmount(scope.data.data.signamount_due,2,'¥') }}
  1471. </div>
  1472. <div v-else-if="scope.data.columnname === 'industry'">
  1473. <el-tag size="small" v-for="(item,index) in scope.data.data.industry" :key="index" style="margin-right: 5px">{{ item }}</el-tag>
  1474. </div>
  1475. <div v-else-if="scope.data.columnname === 'tradingstatus'">
  1476. <span style="color:#3874f6" v-if="scope.data.data[[scope.data.columnname]] == '未成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
  1477. <span style="color:#fa8c16" v-else-if="scope.data.data[[scope.data.columnname]] == '已成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
  1478. <span style="color:#333333" v-else-if="scope.data.data[[scope.data.columnname]] == '多次成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
  1479. </div>
  1480. <div v-else-if="scope.data.columnname === 'status'">
  1481. <span style="color:rgb(250, 140, 22)" v-if="scope.data.data[[scope.data.columnname]] == '已成交'">{{scope.data.data[[scope.data.columnname]]}}</span>
  1482. <span style="color:#52c41a" v-else-if="scope.data.data[[scope.data.columnname]] == '跟进中'">{{scope.data.data[[scope.data.columnname]]}}</span>
  1483. <span style="color:#999999" v-else-if="scope.data.data[[scope.data.columnname]] == '已失败' || scope.data.data[[scope.data.columnname]] == '已结案'">{{scope.data.data[[scope.data.columnname]]}}</span>
  1484. </div>
  1485. <div v-else>
  1486. {{ scope.data.data[scope.data.columnname] }}
  1487. </div>
  1488. </template>
  1489. </pageTable>
  1490. </div>
  1491. </div>
  1492. </div>
  1493. </div>
  1494. <!--项目生命周期分析-->
  1495. <div style="margin-top:16px" class="data-all">
  1496. <div class="panel-header">
  1497. <div class="title">
  1498. 项目生命周期分析
  1499. <el-tooltip class="item" effect="dark" content="统计项目生命周期中的各个关键节点之间平均周期" placement="top">
  1500. <img style="vertical-align: middle" src="@/assets/icons/prompt_icon.svg" alt="">
  1501. </el-tooltip>
  1502. </div>
  1503. </div>
  1504. <div class="progress" v-if="dateList.length">
  1505. <div class="progress-item" :style="[{'--bg':colorArr[index]},{'--width':item.avg}]" v-for="(item,index) in dateList" :key="index">
  1506. <div class="day">平均周期:{{ item.dateavg.toFixed(2) }}天</div>
  1507. <div class="start" v-if="index == 0">
  1508. <span>{{ item.start }}</span>
  1509. <span v-if="item.end == '立项'">项目立项</span>
  1510. <span v-else-if="item.end == '报备'">项目报备审核</span>
  1511. <span v-else-if="item.end == '报价'">项目报价审核</span>
  1512. <span v-else-if="item.end == '合同'">项目合同审核</span>
  1513. <span v-else-if="item.end == '订单'">项目订单审核</span>
  1514. <span v-else-if="item.end == '结案'">项目结案</span>
  1515. </div>
  1516. <div class="end">
  1517. <span>{{ item.end }}</span>
  1518. <span v-if="item.end == '立项'">项目立项</span>
  1519. <span v-else-if="item.end == '报备'">项目报备审核</span>
  1520. <span v-else-if="item.end == '报价'">项目报价审核</span>
  1521. <span v-else-if="item.end == '合同'">项目合同审核</span>
  1522. <span v-else-if="item.end == '订单'">项目订单审核</span>
  1523. <span v-else-if="item.end == '结案'">项目结案</span>
  1524. </div>
  1525. </div>
  1526. </div>
  1527. <el-empty class="progress-item" description="暂无数据" :image-size="80" v-else></el-empty>
  1528. <div class="panel-select" :style="{marginTop:dateList.length?'90px':'30px'}">
  1529. <div class="mt-10 inline-16">
  1530. <label class="search__label" >部门:</label>
  1531. <el-cascader
  1532. clearable
  1533. :append-to-body="false"
  1534. ref="selectdep"
  1535. size="small"
  1536. placement="bottom"
  1537. v-model="dateParam.content.dataid"
  1538. :options="deplist"
  1539. :props="{emitPath:true,expandTrigger:'hover',checkStrictly:true,label:'label',value:'departmentid',children:'children'}"
  1540. @change="$event => {if($event.length) {[$event.length - 1];dateParam.content.type=1;dateParam.content.username='';getDate()} else {dateParam.content.dataid='';dateParam.content.type='';dateParam.content.username='';getDate()}}"></el-cascader>
  1541. </div>
  1542. <div class="mt-10 inline-16">
  1543. <label class="search__label" >业务员:</label>
  1544. <el-select v-model="dateParam.content.username" filterable placeholder="请选择" size="small"
  1545. :popper-append-to-body="false"
  1546. @change="$event => {if($event) {dateParam.content.type=0;dateParam.content.dataid=$event;dateParam.content.depname='';getDate()} else {dateParam.content.type='';dateParam.content.dataid='';dateParam.content.depname='';getDate()}}"
  1547. >
  1548. <el-option
  1549. v-for="item in dateParamSalesman"
  1550. :key="item.index"
  1551. :label="item.name"
  1552. :value="item.userid">
  1553. </el-option>
  1554. </el-select>
  1555. </div>
  1556. <div class="mt-10 inline-16">
  1557. <p class="search__label">状态:</p>
  1558. <el-select v-model="dateParam.content.where.isleave" clearable style="margin-right:10px" size="small" placeholder="请选择状态" @change="getDate(null,'状态')" >
  1559. <el-option label="在职" value="1"></el-option>
  1560. <el-option label="离职" value="2"></el-option>
  1561. </el-select>
  1562. </div>
  1563. <div class="mt-10 inline-16">
  1564. <label class="search__label">项目类型:</label>
  1565. <el-select v-model="dateParam.content.where.projecttype" placeholder="请选择项目类型" @change="getDate" size="small" clearable>
  1566. <el-option
  1567. v-for="item in projectType"
  1568. :key="item.value"
  1569. :label="item.value"
  1570. :value="item.value">
  1571. <span style="float: left">{{ item.value }}</span>
  1572. <span style="float: right; color: #8492a6; font-size: 12px">{{ item.remarks?item.remarks:'暂无描述' }}</span>
  1573. </el-option>
  1574. </el-select>
  1575. </div>
  1576. <div class="mt-10 inline-16">
  1577. <label class="search__label">项目等级:</label>
  1578. <el-select v-model="dateParam.content.where.grade" placeholder="请选择项目等级" @change="getDate" size="small" clearable>
  1579. <el-option
  1580. v-for="item in projectLead"
  1581. :key="item.value"
  1582. :label="item.value"
  1583. :value="item.value">
  1584. <span style="float: left">{{ item.value }}</span>
  1585. <span style="float: right; color: #8492a6; font-size: 12px">{{ item.remarks?item.remarks:'暂无描述' }}</span>
  1586. </el-option>
  1587. </el-select>
  1588. </div>
  1589. <div class="mt-10 inline-16">
  1590. <label class="search__label">领域:</label>
  1591. <el-select v-model="dateParam.content.where.tradefield" placeholder="请选择领域" @change="getDate" size="small" clearable>
  1592. <el-option
  1593. v-for="item in tradefieldSelect"
  1594. :key="item.value"
  1595. :label="item.value"
  1596. :value="item.value">
  1597. <span style="float: left">{{ item.value }}</span>
  1598. <span style="float: right; color: #8492a6; font-size: 12px">{{ item.remarks?item.remarks:'暂无描述' }}</span>
  1599. </el-option>
  1600. </el-select>
  1601. </div>
  1602. </div>
  1603. <div class="mt-10 inline-16" style="margin-top:10px">
  1604. <label class="search__label" >项目名称:</label>
  1605. <selectProject :projectType="projectType" :projectLead="projectLead" :tradefieldSelect="tradefieldSelect" @selectRow="selectRow" ref="selectProject">
  1606. <div slot="input" style="display:flex;align-items:center">
  1607. <el-input v-model="projectname" style="width:300px" size="small" placeholder="请选择项目" @focus="$refs.selectProject.visible=true"></el-input>
  1608. <el-button style="margin-left:10px" @click="clearSelect" size="mini" type="text" v-if="dateParam.content.where.sa_projectid">清空</el-button>
  1609. </div>
  1610. </selectProject>
  1611. </div>
  1612. <div style="margin-top:10px">
  1613. <div class="mt-10 inline-16">
  1614. <label class="search__label">开始节点:</label>
  1615. <el-select v-model="dateParam.content.begnode" placeholder="开始节点" @change="getDate" size="small" clearable>
  1616. <el-option label="立项" value="立项"></el-option>
  1617. <el-option label="报备" value="报备"></el-option>
  1618. <el-option label="报价" value="报价"></el-option>
  1619. <el-option label="合同" value="合同"></el-option>
  1620. <el-option label="订单" value="订单"></el-option>
  1621. <el-option label="结案" value="结案"></el-option>
  1622. </el-select>
  1623. </div>
  1624. <span style="margin:0 35px 0 25px">至</span>
  1625. <div class="mt-10 inline-16">
  1626. <label class="search__label">结束节点:</label>
  1627. <el-select v-model="dateParam.content.endnode" placeholder="结束节点" @change="getDate" size="small" clearable>
  1628. <el-option label="立项" value="立项"></el-option>
  1629. <el-option label="报备" value="报备"></el-option>
  1630. <el-option label="报价" value="报价"></el-option>
  1631. <el-option label="合同" value="合同"></el-option>
  1632. <el-option label="订单" value="订单"></el-option>
  1633. <el-option label="结案" value="结案"></el-option>
  1634. </el-select>
  1635. </div>
  1636. </div>
  1637. </div>
  1638. </div>
  1639. </el-scrollbar>
  1640. <dataDetail ref="detailRef" :title="title" :param="paramDetail" :person="person" :departmentid="depment" :isleave="isleave" :layout="tablecols" height="calc(100vh - 250px)">
  1641. <template #custom>
  1642. <div class="mt-10 inline-16">
  1643. <label class="search__label">项目阶段:</label>
  1644. <el-select class="inline-24" v-model="paramDetail.content.where.stagename" placeholder="请选择项目阶段" @change="selectChange" size="small" clearable>
  1645. <el-option
  1646. v-for="item in option.stageList"
  1647. :key="item.stagename"
  1648. :label="item.stagename"
  1649. :value="item.stagename">
  1650. </el-option>
  1651. </el-select>
  1652. </div>
  1653. <div class="mt-10 inline-16">
  1654. <label class="search__label">报备进度:</label>
  1655. <el-select class="inline-24" v-model="paramDetail.content.where.reportstatus" placeholder="请选择报备进度" @change="selectChange" size="small" clearable>
  1656. <el-option
  1657. v-for="item in option.reportstatus"
  1658. :key="item.value"
  1659. :label="item.label"
  1660. :value="item.value">
  1661. </el-option>
  1662. </el-select>
  1663. </div>
  1664. <div class="mt-10 inline-16">
  1665. <label class="search__label">项目类型:</label>
  1666. <el-select class="inline-24" v-model="paramDetail.content.where.projecttype" placeholder="请选择项目类型" @change="selectChange" size="small" clearable>
  1667. <el-option
  1668. v-for="item in projectType"
  1669. :key="item.value"
  1670. :label="item.value"
  1671. :value="item.value">
  1672. <span style="float: left">{{ item.value }}</span>
  1673. <span style="float: right; color: #8492a6; font-size: 12px">{{ item.remarks?item.remarks:'暂无描述' }}</span>
  1674. </el-option>
  1675. </el-select>
  1676. </div>
  1677. <div class="mt-10 inline-16">
  1678. <label class="search__label">领域:</label>
  1679. <el-select class="inline-24" v-model="paramDetail.content.where.tradefield" placeholder="请选择领域" @change="selectChange" size="small" clearable>
  1680. <el-option
  1681. v-for="item in tradefieldSelect"
  1682. :key="item.value"
  1683. :label="item.value"
  1684. :value="item.value">
  1685. <span style="float: left">{{ item.value }}</span>
  1686. <span style="float: right; color: #8492a6; font-size: 12px">{{ item.remarks?item.remarks:'暂无描述' }}</span>
  1687. </el-option>
  1688. </el-select>
  1689. </div>
  1690. <div class="mt-10 inline-16">
  1691. <label class="search__label">标签:</label>
  1692. <el-select class="inline-24" v-model="paramDetail.content.where.tag" size="small" placeholder="请选择" @change="selectChange" clearable multiple>
  1693. <el-option
  1694. v-for="item in option.tagData"
  1695. :key="item.tag"
  1696. :label="item.tag"
  1697. :value="item.tag">
  1698. </el-option>
  1699. </el-select>
  1700. </div>
  1701. <div class="mt-10 inline-16">
  1702. <label class="search__label">项目状态:</label>
  1703. <el-select class="inline-24" v-model="paramDetail.content.where.status" placeholder="请选择项目状态" @change="selectChange" size="small" clearable>
  1704. <el-option
  1705. v-for="item in option.statusTab"
  1706. :key="item.value"
  1707. :label="item.label"
  1708. :value="item.value">
  1709. </el-option>
  1710. </el-select>
  1711. </div>
  1712. </template>
  1713. </dataDetail>
  1714. </div>
  1715. </template>
  1716. </normalLayout>
  1717. </template>
  1718. <script>
  1719. import { DualAxes,Pie,measureTextWidth,Column,Line,Bar } from '@antv/g2plot'
  1720. import pageTable from './components/pageTable.vue'
  1721. import selectProject from './components/selectProject.vue'
  1722. import borderTemp from '@/HDrpManagement/dataanalysis/components/border.vue'
  1723. import FullScroll from '@/components/fullScroll/index.vue'
  1724. import exportFile from '@/components/export_file/index'
  1725. import btnSelect from "@/components/btn_select/btnSelect";
  1726. import dataDetail from '@/template/dataDetail/index'
  1727. export default {
  1728. name:'projectData',
  1729. components:{borderTemp,pageTable,selectProject,FullScroll,exportFile,btnSelect,dataDetail},
  1730. provide () {
  1731. return {
  1732. projectType:() => this.projectType,
  1733. }
  1734. },
  1735. data () {
  1736. return {
  1737. dateType:'全部',
  1738. isFull:false,
  1739. isAppend:true,
  1740. colorArr:['#3874f6','#00b32b','#ffae02','#f53f3f','#f2f2f2'],
  1741. windowWidth: document.documentElement.clientWidth, //实时屏幕宽度
  1742. deplist:[],
  1743. personnelList:[],
  1744. depmentParam:{
  1745. "id": 20230620102004,
  1746. "content": {
  1747. }
  1748. },
  1749. projectType:[{value:''}],
  1750. projectLead:[],
  1751. tradefieldSelect:[],
  1752. projectname:'',
  1753. projectScoreDescript:[],
  1754. depment:'',
  1755. dataAll:{
  1756. data:{}
  1757. },
  1758. scoreStatus:'',
  1759. unfllowStatus:'',
  1760. person:'',
  1761. isleave:'1',
  1762. //项目类型分析
  1763. typeMap:'',
  1764. typeDate:[],
  1765. typeMapParam: {
  1766. "id": 20231018140404,
  1767. "content": {
  1768. "type": '',
  1769. "username":JSON.parse(sessionStorage.getItem('accountinfo')).name,
  1770. "dataid": '',
  1771. "dateType":'全部',
  1772. "where":{
  1773. "projecttype":"",
  1774. "begdate":"",
  1775. "enddate":"",
  1776. "unfinish":'0',
  1777. "isleave":'1'
  1778. }
  1779. }
  1780. },
  1781. typeTableParam:{
  1782. "id": 20231019090104,
  1783. "content": {
  1784. "type": '',
  1785. "dataid": '',
  1786. "username":JSON.parse(sessionStorage.getItem('accountinfo')).name,
  1787. "dateType":'全部',
  1788. "where": {
  1789. // "isfollowup": "", // 有跟进 无跟进 ------项目跟进情况统计列表使用该字段
  1790. // "grade": "", // 项目等级统计列表使用该字段
  1791. // "iscontacts": "", //无联系人 有联系人 ------项目联系人情况统计列表使用该字段
  1792. // "iscustomers": "", //无关联客户 有关联客户 ------项目关联客户情况统计列表使用该字段
  1793. // "istask":"",// 有评估记录 无评估记录 ------ 项目评估情况统计列表使用该字段
  1794. "projecttype":"",// 项目类型分析统计列表使用该最低端
  1795. "begdate":"",
  1796. "enddate":"",
  1797. "unfinish":'0',
  1798. "isleave":'1'
  1799. }
  1800. }
  1801. },
  1802. typeData:{
  1803. map:[],
  1804. },
  1805. //项目等级分析
  1806. gradMap:'',
  1807. gradDate:[],
  1808. gradMapParam: {
  1809. "id": 20231018141804,
  1810. "content": {
  1811. "type": '',
  1812. "dataid": '',
  1813. "username":JSON.parse(sessionStorage.getItem('accountinfo')).name,
  1814. "dateType":'全部',
  1815. "where":{
  1816. "grade":"",
  1817. "begdate":"",
  1818. "enddate":"",
  1819. "unfinish":'0',
  1820. "isleave":"1"
  1821. }
  1822. }
  1823. },
  1824. gradTableParam:{
  1825. "id": 20231019090104,
  1826. "content": {
  1827. "type": '',
  1828. "dataid": '',
  1829. "username":JSON.parse(sessionStorage.getItem('accountinfo')).name,
  1830. "dateType":'全部',
  1831. "where": {
  1832. "grade": "", // 项目等级统计列表使用该字段
  1833. "begdate":"",
  1834. "enddate":"",
  1835. "unfinish":'0',
  1836. "isleave":"1"
  1837. }
  1838. }
  1839. },
  1840. gradData:{
  1841. map:[],
  1842. },
  1843. //项目评估分析
  1844. scoreMap:'',
  1845. scoreMapParam1: {
  1846. "id": 20231024103104,
  1847. "content": {
  1848. "type": '',
  1849. "dataid": '',
  1850. "username":JSON.parse(sessionStorage.getItem('accountinfo')).name,
  1851. "where":{
  1852. "unfinish":'0',
  1853. "isleave":'1'
  1854. }
  1855. }
  1856. },
  1857. scoreTableParam1:{
  1858. "id": 20231024112004,
  1859. "content": {
  1860. "type": "",
  1861. "dataid": "",
  1862. "occupancyratio":"",
  1863. "username":JSON.parse(sessionStorage.getItem('accountinfo')).name,
  1864. "where":{
  1865. "taskType":"",
  1866. "unfinish":'0',
  1867. "isleave":"1"
  1868. },
  1869. "pageSize":20,
  1870. "pageNumber":1
  1871. }
  1872. },
  1873. scoreData:{
  1874. map:[],
  1875. },
  1876. //项目12月新增分析
  1877. addMap:'',
  1878. addParam: {
  1879. "id": 20231018155804,
  1880. "content": {
  1881. "username":JSON.parse(sessionStorage.getItem('accountinfo')).name,
  1882. "type": '',
  1883. "dataid": '',
  1884. "enddate":`${new Date().getFullYear()}-${new Date().getMonth() + 1}-${new Date().getDate()}`,
  1885. "where":{
  1886. "isleave":'1'
  1887. }
  1888. }
  1889. },
  1890. addData: {
  1891. arr1:[],
  1892. arr2:[]
  1893. },
  1894. //项目12月报备分析
  1895. baobeiMap:'',
  1896. baobeiParam: {
  1897. "id": 20231018160504,
  1898. "content": {
  1899. "type": '',
  1900. "enddate":`${new Date().getFullYear()}-${new Date().getMonth() + 1}-${new Date().getDate()}`,
  1901. "username":JSON.parse(sessionStorage.getItem('accountinfo')).name,
  1902. "dataid": '',
  1903. "where":{
  1904. "isleave":'1'
  1905. }
  1906. }
  1907. },
  1908. baobeiData: {
  1909. arr1:[],
  1910. arr2:[]
  1911. },
  1912. //项目12月跟进分析
  1913. fllowMap:'',
  1914. fllowParam: {
  1915. "id": 20231018163004,
  1916. "content": {
  1917. "type": '',
  1918. "username":JSON.parse(sessionStorage.getItem('accountinfo')).name,
  1919. "enddate":`${new Date().getFullYear()}-${new Date().getMonth() + 1}-${new Date().getDate()}`,
  1920. "dataid": '',
  1921. "where":{
  1922. "isleave":'1'
  1923. }
  1924. }
  1925. },
  1926. fllowData: {
  1927. },
  1928. //项目12月报价分析
  1929. baojiaMap:'',
  1930. baojiaParam: {
  1931. "id": 20231018161604,
  1932. "content": {
  1933. "type": '',
  1934. "username":JSON.parse(sessionStorage.getItem('accountinfo')).name,
  1935. "enddate":`${new Date().getFullYear()}-${new Date().getMonth() + 1}-${new Date().getDate()}`,
  1936. "dataid": '',
  1937. "where":{
  1938. "isleave":'1'
  1939. }
  1940. }
  1941. },
  1942. baojiaData: {
  1943. },
  1944. //项目跟进分析
  1945. /* projectFllowMap:'',*/
  1946. fllowDate:[],
  1947. fllowMapParam: {
  1948. "id": 20231019085304,
  1949. "content": {
  1950. "type": '',
  1951. "username":JSON.parse(sessionStorage.getItem('accountinfo')).name,
  1952. "dataid": '',
  1953. "dateType":'全部',
  1954. // "enddate":`${new Date().getFullYear()}-${new Date().getMonth() + 1}-${new Date().getDate()}`,
  1955. "where":{
  1956. "grade":"",
  1957. "begdate":"",
  1958. "enddate":"",
  1959. "unfinish":'0',
  1960. "isleave":"1"
  1961. }
  1962. }
  1963. },
  1964. fllowTableParam:{
  1965. "id": 20231019090104,
  1966. "content": {
  1967. "type": '',
  1968. "username":JSON.parse(sessionStorage.getItem('accountinfo')).name,
  1969. "dataid": '',
  1970. "dateType":'全部',
  1971. "where": {
  1972. "isfollowup": "", // 有跟进 无跟进 ------项目跟进情况统计列表使用该字段
  1973. "begdate":"",
  1974. "enddate":"",
  1975. "unfinish":'0',
  1976. "isleave":"1"
  1977. }
  1978. }
  1979. },
  1980. projectFllowData:{
  1981. map:[],
  1982. },
  1983. //项目联系人分析
  1984. projectFllowMap:'',
  1985. contactDate:[],
  1986. contactMapParam: {
  1987. "id": 20231019085404,
  1988. "content": {
  1989. "type": '',
  1990. "dataid": '',
  1991. "username":JSON.parse(sessionStorage.getItem('accountinfo')).name,
  1992. "dateType":'全部',
  1993. "where":{
  1994. "grade":"",
  1995. "begdate":"",
  1996. "enddate":"",
  1997. "unfinish":'0',
  1998. "isleave":'1'
  1999. }
  2000. }
  2001. },
  2002. contactTableParam:{
  2003. "id": 20231019090104,
  2004. "content": {
  2005. "type": '',
  2006. "dataid": '',
  2007. "username":JSON.parse(sessionStorage.getItem('accountinfo')).name,
  2008. "dateType":'全部',
  2009. "where": {
  2010. "iscontacts": "", //无联系人 有联系人 ------项目联系人情况统计列表使用该字段
  2011. "begdate":"",
  2012. "enddate":"",
  2013. "unfinish":'0',
  2014. "isleave":'1'
  2015. }
  2016. }
  2017. },
  2018. projectContactData:{
  2019. map:[],
  2020. },
  2021. //项目关联客户分析
  2022. projectCustomerMap:'',
  2023. customerDate:[],
  2024. customerMapParam: {
  2025. "id": 20231019085504,
  2026. "content": {
  2027. "type": '',
  2028. "dataid": '',
  2029. "username":JSON.parse(sessionStorage.getItem('accountinfo')).name,
  2030. "dateType":"全部",
  2031. "where":{
  2032. "iscustomers":"",
  2033. "begdate":"",
  2034. "enddate":"",
  2035. "unfinish":'0',
  2036. "isleave":'1'
  2037. }
  2038. }
  2039. },
  2040. customerTableParam:{
  2041. "id": 20231019090104,
  2042. "content": {
  2043. "type": '',
  2044. "dataid": '',
  2045. "username":JSON.parse(sessionStorage.getItem('accountinfo')).name,
  2046. "dateType":"全部",
  2047. "where": {
  2048. "iscustomers": "", //无关联客户 有关联客户 ------项目关联客户情况统计列表使用该字段
  2049. "begdate":"",
  2050. "enddate":"",
  2051. "unfinish":'0',
  2052. "isleave":'1'
  2053. }
  2054. }
  2055. },
  2056. projectCustomerData:{
  2057. map:[],
  2058. },
  2059. //项目评估分析
  2060. projectScoreMap:'',
  2061. scoreDate:[],
  2062. scoreMapParam: {
  2063. "id": 20231019085604,
  2064. "content": {
  2065. "type": '',
  2066. "dataid": '',
  2067. "username":JSON.parse(sessionStorage.getItem('accountinfo')).name,
  2068. "dateType":"全部",
  2069. "where":{
  2070. "istask":"",
  2071. "begdate":"",
  2072. "enddate":"",
  2073. "unfinish":'0',
  2074. "isleave":"1"
  2075. }
  2076. }
  2077. },
  2078. scoreTableParam:{
  2079. "id": 20231019090104,
  2080. "content": {
  2081. "type": '',
  2082. "username":JSON.parse(sessionStorage.getItem('accountinfo')).name,
  2083. "dateType":"全部",
  2084. "dataid": '',
  2085. "where": {
  2086. "istask":"",// 有评估记录 无评估记录 ------ 项目评估情况统计列表使用该字段
  2087. "begdate":"",
  2088. "enddate":"",
  2089. "unfinish":'0',
  2090. "isleave":"1"
  2091. }
  2092. }
  2093. },
  2094. projectScoreData:{
  2095. map:[],
  2096. },
  2097. //未跟进情况
  2098. customerUnfllowMap:'',
  2099. unfllowMapParam: {
  2100. "id": 20231019095804,
  2101. "content": {
  2102. "type": '',
  2103. "username":JSON.parse(sessionStorage.getItem('accountinfo')).name,
  2104. "dataid": '',
  2105. "enddate":new Date().getFullYear() + '-' + (new Date().getMonth() + 1) + '-' + new Date().getDate(),
  2106. "where": {
  2107. "projecttype":"",
  2108. "unfinish":'0',
  2109. "isleave":'1'
  2110. }
  2111. }
  2112. },
  2113. unfllowTableParam:{
  2114. "id": 20231019095904,
  2115. "content": {
  2116. "type": '',
  2117. "dataid": '',
  2118. "username":JSON.parse(sessionStorage.getItem('accountinfo')).name,
  2119. "enddate":new Date().getFullYear() + '-' + (new Date().getMonth() + 1) + '-' + new Date().getDate(),
  2120. "where": {
  2121. "projecttype":"",
  2122. "dateType":"",
  2123. "unfinish":'0',
  2124. "isleave":'1'
  2125. }
  2126. }
  2127. },
  2128. customerUnfllowData:{
  2129. map:[],
  2130. },
  2131. //项目周期分析
  2132. dateParam: {
  2133. "id": 20231023092304,
  2134. "content": {
  2135. "type": 1,
  2136. "dataid": '',
  2137. "username":JSON.parse(sessionStorage.getItem('accountinfo')).name,
  2138. "begnode":"",//开始节点
  2139. "endnode":"",//结束节点
  2140. "where": {
  2141. "projecttype": "",//项目类型
  2142. "grade":"",//项目等级
  2143. "tradefield":"",//领域
  2144. "sa_projectid":"",//项目id
  2145. "isleave":'1'
  2146. }
  2147. }
  2148. },
  2149. dateList:{},
  2150. dataAllParam:{
  2151. "id": 20231018110404,
  2152. "content" :{
  2153. "dataid": '',
  2154. "type":"",
  2155. "username":JSON.parse(sessionStorage.getItem('accountinfo')).name,
  2156. "dateType":'',
  2157. "where":{
  2158. "isleave":'1'
  2159. }
  2160. }
  2161. },
  2162. /*业务员列表*/
  2163. typeMapParamSalesman:[],
  2164. gradMapParamSalesman:[],
  2165. scoreMapParam1Salesman:[],
  2166. addParamSalesman:[],
  2167. baobeiParamSalesman:[],
  2168. fllowParamSalesman:[],
  2169. baojiaParamSalesman:[],
  2170. fllowMapParamSalesman:[],
  2171. contactMapParamSalesman:[],
  2172. customerMapParamSalesman:[],
  2173. scoreMapParamSalesman:[],
  2174. unfllowMapParamSalesman:[],
  2175. dateParamSalesman:[],
  2176. paramDetail:{
  2177. "id": 20241008152904,
  2178. "content": {
  2179. "dataid": '',
  2180. "type": '',
  2181. "typemx": "",
  2182. "dateType":"",
  2183. "where": {
  2184. "isleave": "1",
  2185. "condition":"",
  2186. "stagename":"",
  2187. "projecttype":"",
  2188. "tradefield":"",
  2189. "status":"",
  2190. "tag":[],
  2191. "reportstatus":""
  2192. }
  2193. },
  2194. },
  2195. title:'',
  2196. userName:JSON.parse(window.sessionStorage.getItem('active_account')).name,
  2197. tablecols:'',
  2198. option:{
  2199. statusTab:[
  2200. {
  2201. value:"跟进中",
  2202. label:"跟进中"
  2203. },
  2204. {
  2205. value:"已成交",
  2206. label:"已成交"
  2207. },
  2208. {
  2209. value:"已失败",
  2210. label:"已失败"
  2211. },
  2212. {
  2213. value:"已结案",
  2214. label:"已结案"
  2215. }
  2216. ],
  2217. stageList:[
  2218. ],
  2219. tagData:[],
  2220. reportstatus:[
  2221. {
  2222. value:"未报备",
  2223. label:"未报备"
  2224. },
  2225. {
  2226. value:"报备中",
  2227. label:"报备中"
  2228. },
  2229. {
  2230. value:"已报备",
  2231. label:"已报备"
  2232. },
  2233. ],
  2234. },
  2235. }
  2236. },
  2237. methods:{
  2238. btnClick(data){
  2239. this.dateType = data
  2240. this.dataAllParam.content.dateType = data
  2241. this.getdataAll()
  2242. },
  2243. goDetail (data,refData,paramData,fieldname) {
  2244. sessionStorage.setItem('listqueryid',this.$refs[refData].listqueryid)
  2245. sessionStorage.setItem('isGo','1')
  2246. this.$router.push({
  2247. path:'/projectChangeDetail',
  2248. query:{
  2249. id:data.sa_projectid,
  2250. rowindex:data.rowindex,
  2251. listqueryid:this.$refs[refData].listqueryid,
  2252. fieldname:fieldname
  2253. }
  2254. })
  2255. this.$store.dispatch('saveListData',{listData:this.$refs[refData].list2,param:paramData,pageTotal:this.$refs[refData].pageTotal})
  2256. this.$store.dispatch('changeDetailDrawer',true)
  2257. },
  2258. //获取数据总览
  2259. async getdataAll () {
  2260. let res = await this.$api.requested(this.dataAllParam)
  2261. this.dataAll = res.data
  2262. console.log(this.dataAll,'数据总览');
  2263. },
  2264. async departmentrtment() {
  2265. const res = await this.$api.requested(this.depmentParam)
  2266. this.deplist = this.createMenu(res.data.dep)
  2267. this.personnelList = res.data.hr
  2268. this.typeMapParamSalesman = res.data.hr
  2269. this.gradMapParamSalesman = res.data.hr
  2270. this.scoreMapParam1Salesman = res.data.hr
  2271. this.addParamSalesman = res.data.hr
  2272. this.baobeiParamSalesman = res.data.hr
  2273. this.fllowParamSalesman = res.data.hr
  2274. this.baojiaParamSalesman = res.data.hr
  2275. this.fllowMapParamSalesman = res.data.hr
  2276. this.contactMapParamSalesman = res.data.hr
  2277. this.customerMapParamSalesman = res.data.hr
  2278. this.scoreMapParamSalesman = res.data.hr
  2279. this.unfllowMapParamSalesman = res.data.hr
  2280. this.dateParamSalesman = res.data.hr
  2281. this.person = JSON.parse(sessionStorage.getItem('accountinfo')).name
  2282. },
  2283. //12月跟进初始化
  2284. async chart2Fun (init) {
  2285. let res = await this.$api.requested(this.chartParam2)
  2286. console.log(res.data,'近12月跟进');
  2287. this.chartMapData = res.data
  2288. if (init) {
  2289. this.chartMap = new DualAxes(this.$refs.chart2, {
  2290. data: [this.chartMapData.followup, this.chartMapData.tbzzl],
  2291. xField: 'date',
  2292. yField: ['value', 'value'],
  2293. geometryOptions: [
  2294. {
  2295. geometry: 'line',
  2296. seriesField:'key',
  2297. color: '#5B8FF9',
  2298. },
  2299. {
  2300. geometry: 'line',
  2301. seriesField:'key',
  2302. color: '#5AD8A6',
  2303. },
  2304. ],
  2305. });
  2306. this.chartMap.render();
  2307. } else {
  2308. this.chartMap.changeData([this.chartMapData.followup, this.chartMapData.tbzzl])
  2309. }
  2310. },
  2311. //项目类型图初始化
  2312. async typeInit (init,state) {
  2313. if (state == '状态'){
  2314. this.personData('typeMapParamSalesman',this.typeMapParam.content.where.isleave)
  2315. this.typeMapParam.content.dataid = this.typeMapParam.content.type == 0 || this.typeMapParam.content.type == '' ? -1:this.typeMapParam.content.dataid
  2316. }
  2317. let res = await this.$api.requested(this.typeMapParam)
  2318. this.typeData.map = res.data
  2319. console.log(this.typeData.map,'项目类型数据');
  2320. if (init) {
  2321. this.typeMap = new Pie(this.$refs.typeEl, {
  2322. appendPadding: 10,
  2323. data:this.typeData.map,
  2324. angleField: 'ratio',
  2325. colorField: 'key',
  2326. radius: 1,
  2327. innerRadius: 0.64,
  2328. label:{
  2329. /*type: 'inner',
  2330. offset: '-50%',
  2331. style: {
  2332. textAlign: 'center',
  2333. },
  2334. autoRotate: false,*/
  2335. formatter: (datum) => `${datum.ratio}%`
  2336. },
  2337. tooltip:{
  2338. formatter: (datum) => {
  2339. return { name: datum.key, value: datum.ratio + '%' };
  2340. },
  2341. },
  2342. statistic: {
  2343. title: {
  2344. offsetY: -4,
  2345. style: {
  2346. fontSize:'16px'
  2347. },
  2348. content:'项目总数'
  2349. },
  2350. content: {
  2351. offsetY: 4,
  2352. style: {
  2353. whiteSpace: 'pre-wrap',
  2354. overflow: 'hidden',
  2355. textOverflow: 'ellipsis',
  2356. fontSize:'16px'
  2357. },
  2358. customHtml: (container, view, datum, data) => {
  2359. const text = data[0].totalqty
  2360. return text
  2361. },
  2362. },
  2363. },
  2364. legend: {
  2365. position:'bottom'
  2366. },
  2367. // 添加 中心统计文本 交互
  2368. interactions: [{ type: 'element-single-selected' },{ type: 'element-active' }],
  2369. });
  2370. this.typeMap.on('element:click',(v) => {
  2371. if (v.data.data.value != this.typeTableParam.content.where.projecttype) {
  2372. this.typeTableParam.content.where.projecttype = v.data.data.value
  2373. this.typeTableParam.content.pageNumber = 1
  2374. this.$refs.typeTable.listData()
  2375. } else {
  2376. this.typeTableParam.content.where.projecttype = ''
  2377. this.typeTableParam.content.pageNumber = 1
  2378. this.$refs.typeTable.listData()
  2379. }
  2380. })
  2381. this.typeMap.render();
  2382. } else {
  2383. this.typeMap.changeData(this.typeData.map)
  2384. }
  2385. },
  2386. //项目等级图初始化
  2387. async gradInit (init,state) {
  2388. if (state == '状态'){
  2389. this.personData('gradMapParamSalesman',this.gradMapParam.content.where.isleave)
  2390. this.gradMapParam.content.dataid = this.gradMapParam.content.type == 0 || this.gradMapParam.content.type == '' ? -1:this.gradMapParam.content.dataid
  2391. }
  2392. let res = await this.$api.requested(this.gradMapParam)
  2393. this.gradData.map = res.data
  2394. console.log(this.gradData.map,'项目等级数据');
  2395. if (init) {
  2396. this.gradMap = new Pie(this.$refs.gradEl, {
  2397. appendPadding: 10,
  2398. data:this.gradData.map,
  2399. angleField: 'ratio',
  2400. colorField: 'key',
  2401. radius: 1,
  2402. innerRadius: 0.64,
  2403. label:{
  2404. formatter: (datum) => `${datum.ratio}%`
  2405. },
  2406. tooltip:{
  2407. formatter: (datum) => {
  2408. return { name: datum.key, value: datum.ratio + '%' };
  2409. },
  2410. },
  2411. statistic: {
  2412. title: {
  2413. offsetY: -4,
  2414. style: {
  2415. fontSize:'16px'
  2416. },
  2417. content:'项目总数'
  2418. },
  2419. content: {
  2420. offsetY: 4,
  2421. style: {
  2422. whiteSpace: 'pre-wrap',
  2423. overflow: 'hidden',
  2424. textOverflow: 'ellipsis',
  2425. fontSize:'16px'
  2426. },
  2427. customHtml: (container, view, datum, data) => {
  2428. const text = data[0].totalqty
  2429. return text
  2430. },
  2431. },
  2432. },
  2433. legend: {
  2434. position:'bottom'
  2435. },
  2436. // 添加 中心统计文本 交互
  2437. interactions: [{ type: 'element-selected' },{ type: 'element-active' }],
  2438. });
  2439. this.gradMap.on('element:click',(v) => {
  2440. if (v.data.data.key != this.gradTableParam.content.where.grade) {
  2441. this.gradTableParam.content.where.grade = v.data.data.key
  2442. this.gradTableParam.content.pageNumber = 1
  2443. this.$refs.gradTable.listData()
  2444. } else {
  2445. this.gradTableParam.content.where.grade = ''
  2446. this.gradTableParam.content.pageNumber = 1
  2447. this.$refs.gradTable.listData()
  2448. }
  2449. })
  2450. this.gradMap.render();
  2451. } else {
  2452. this.gradMap.changeData(this.gradData.map)
  2453. }
  2454. },
  2455. //项目评估图初始化
  2456. async scoreInit (init,state) {
  2457. if (state == '状态'){
  2458. this.personData('scoreMapParam1Salesman',this.scoreMapParam1.content.where.isleave)
  2459. this.scoreMapParam1.content.dataid = this.scoreMapParam1.content.type == 0 || this.scoreMapParam1.content.type == '' ? -1:this.scoreMapParam1.content.dataid
  2460. }
  2461. let res = await this.$api.requested(this.scoreMapParam1)
  2462. this.scoreData.map = res.data
  2463. if (init) {
  2464. this.scoreMap = new Bar(this.$refs.scoreEl, {
  2465. data:this.scoreData.map,
  2466. xField: 'value',
  2467. yField: 'key',
  2468. seriesField: 'key',
  2469. minBarWidth: 20,
  2470. maxBarWidth: 40,
  2471. label:{
  2472. position:top
  2473. },
  2474. legend: {
  2475. position: 'top-left',
  2476. },
  2477. interactions: [{ type: 'element-single-selected' }],
  2478. });
  2479. this.scoreMap.on('element:click',(v) => {
  2480. if (v.data.data.key != this.scoreTableParam1.content.occupancyratio) {
  2481. this.scoreStatus = v.data.data.key
  2482. this.scoreTableParam1.content.occupancyratio = v.data.data.key
  2483. this.scoreTableParam1.content.pageNumber = 1
  2484. this.$refs.scoreTable.listData()
  2485. } else {
  2486. this.scoreStatus = ''
  2487. this.scoreTableParam1.content.occupancyratio = ''
  2488. this.scoreTableParam1.content.pageNumber = 1
  2489. this.$refs.scoreTable.listData()
  2490. }
  2491. })
  2492. this.scoreMap.render();
  2493. } else {
  2494. this.scoreMap.changeData(this.scoreData.map)
  2495. }
  2496. },
  2497. //12月新增初始化
  2498. async addFun (init,state) {
  2499. let param = JSON.parse(JSON.stringify(this.addParam))
  2500. if (state == '状态'){
  2501. this.personData('addParamSalesman',this.addParam.content.where.isleave)
  2502. param.content.dataid = param.content.type == 0 || param.content.type == '' ? -1:param.content.dataid
  2503. }
  2504. if (param.content.dataid instanceof Array) {
  2505. param.content.dataid = param.content.dataid[param.content.dataid.length - 1]
  2506. }
  2507. let res = await this.$api.requested(param)
  2508. /*this.addData.arr1 = res.data.histogram*/
  2509. let lastYear = []
  2510. let nowYear = []
  2511. let k=0
  2512. for (var i=0;i<res.data.histogram.length;i++){
  2513. if (res.data.histogram[i].key === '去年同期新增'){
  2514. lastYear[k]=res.data.histogram[i]
  2515. k++
  2516. }
  2517. }
  2518. let x=0
  2519. for (var i=0;i<res.data.histogram.length;i++){
  2520. if (res.data.histogram[i].key === '本期新增'){
  2521. nowYear[x]=res.data.histogram[i]
  2522. x++
  2523. }
  2524. }
  2525. this.addData.arr1 = lastYear.concat(nowYear)
  2526. res.data.lineChart.forEach(item => item[`同比增长率`] = item.value)
  2527. this.addData.arr2 = res.data.lineChart
  2528. if (init) {
  2529. this.addMap = new DualAxes(this.$refs.addEl, {
  2530. data: [this.addData.arr1,this.addData.arr2],
  2531. xField: 'date',
  2532. yField: ['value', '同比增长率'],
  2533. geometryOptions: [
  2534. {
  2535. geometry: 'column',
  2536. isGroup: true,
  2537. seriesField: 'key',
  2538. color:['#62daab','#6395fa'],
  2539. label:{
  2540. position:top
  2541. }
  2542. },
  2543. {
  2544. geometry: 'line',
  2545. lineStyle: {
  2546. lineWidth: 2,
  2547. },
  2548. color: '#F6903D',
  2549. smooth: true,
  2550. label:{
  2551. position:top,
  2552. formatter: (datum) =>{
  2553. return datum.value + '%'
  2554. }
  2555. }
  2556. },
  2557. ],
  2558. tooltip: {
  2559. formatter: (datum) => {
  2560. return { name: datum.key?datum.key:'同比增长率', value: datum.key? datum.value : datum.同比增长率 + '%'};
  2561. },
  2562. },
  2563. });
  2564. this.addMap.render()
  2565. } else {
  2566. this.addMap.changeData([this.addData.arr1,this.addData.arr2])
  2567. }
  2568. },
  2569. //12月报备初始化
  2570. async baobeiFun (init,state) {
  2571. let param = JSON.parse(JSON.stringify(this.baobeiParam))
  2572. if (state == '状态'){
  2573. this.personData('baobeiParamSalesman',this.baobeiParam.content.where.isleave)
  2574. param.content.dataid = param.content.type == 0 || param.content.type == '' ? -1:param.content.dataid
  2575. }
  2576. if (param.content.dataid instanceof Array) {
  2577. param.content.dataid = param.content.dataid[param.content.dataid.length - 1]
  2578. }
  2579. let res = await this.$api.requested(param)
  2580. /*this.baobeiData.arr1 = res.data.histogram*/
  2581. let lastYear = []
  2582. let nowYear = []
  2583. let k=0
  2584. for (var i=0;i<res.data.histogram.length;i++){
  2585. if (res.data.histogram[i].key === '去年同期报备'){
  2586. lastYear[k]=res.data.histogram[i]
  2587. k++
  2588. }
  2589. }
  2590. let x=0
  2591. for (var i=0;i<res.data.histogram.length;i++){
  2592. if (res.data.histogram[i].key === '本期报备'){
  2593. nowYear[x]=res.data.histogram[i]
  2594. x++
  2595. }
  2596. }
  2597. this.baobeiData.arr1 = lastYear.concat(nowYear)
  2598. res.data.lineChart.forEach(item => item[`同比增长率`] = item.value)
  2599. this.baobeiData.arr2 = res.data.lineChart
  2600. if (init) {
  2601. this.baobeiMap = new DualAxes(this.$refs.baobeiEl, {
  2602. data: [this.baobeiData.arr1,this.baobeiData.arr2],
  2603. xField: 'date',
  2604. yField: ['value', '同比增长率'],
  2605. geometryOptions: [
  2606. {
  2607. geometry: 'column',
  2608. isGroup: true,
  2609. seriesField: 'key',
  2610. color:['#62daab','#6395fa'],
  2611. label:{
  2612. position:top
  2613. }
  2614. },
  2615. {
  2616. geometry: 'line',
  2617. lineStyle: {
  2618. lineWidth: 2,
  2619. },
  2620. color: '#F6903D',
  2621. smooth: true,
  2622. label:{
  2623. position:top,
  2624. formatter: (datum) =>{
  2625. return datum.value + '%'
  2626. }
  2627. }
  2628. },
  2629. ],
  2630. tooltip: {
  2631. formatter: (datum) => {
  2632. return { name: datum.key?datum.key:'同比增长率', value: datum.key? datum.value : datum.同比增长率 + '%'};
  2633. },
  2634. },
  2635. });
  2636. this.baobeiMap.render()
  2637. } else {
  2638. this.baobeiMap.changeData([this.baobeiData.arr1,this.baobeiData.arr2])
  2639. }
  2640. },
  2641. //12月跟进初始化
  2642. async fllowFun (init,state) {
  2643. let param = JSON.parse(JSON.stringify(this.fllowParam))
  2644. if (state == '状态'){
  2645. this.personData('fllowParamSalesman',this.fllowParam.content.where.isleave)
  2646. param.content.dataid = param.content.type == 0 || param.content.type == '' ? -1:param.content.dataid
  2647. }
  2648. if (param.content.dataid instanceof Array) {
  2649. param.content.dataid = param.content.dataid[param.content.dataid.length - 1]
  2650. }
  2651. let res = await this.$api.requested(param)
  2652. this.fllowData = res.data
  2653. let lastYear = []
  2654. let nowYear = []
  2655. let k=0
  2656. for (var i=0;i<res.data.followup.length;i++){
  2657. if (res.data.followup[i].key === '去年同期跟进'){
  2658. lastYear[k]=res.data.followup[i]
  2659. k++
  2660. }
  2661. }
  2662. let x=0
  2663. for (var i=0;i<res.data.followup.length;i++){
  2664. if (res.data.followup[i].key === '本期跟进'){
  2665. nowYear[x]=res.data.followup[i]
  2666. x++
  2667. }
  2668. }
  2669. this.fllowData.followup = lastYear.concat(nowYear)
  2670. this.fllowData.tbzzl.forEach(item => item.key = '同比增长率')
  2671. console.log(res.data,'跟进数据');
  2672. if (init) {
  2673. this.fllowMap = new DualAxes(this.$refs.fllowEl, {
  2674. data: [this.fllowData.followup, this.fllowData.tbzzl],
  2675. xField: 'date',
  2676. yField: ['value', 'value'],
  2677. geometryOptions: [
  2678. {
  2679. geometry: 'column',
  2680. seriesField:'key',
  2681. isGroup: 'true',
  2682. color:['#62daab','#6395fa'],
  2683. label:{
  2684. position:top
  2685. }
  2686. },
  2687. {
  2688. geometry: 'line',
  2689. seriesField:'key',
  2690. color: '#F6903D',
  2691. smooth: true,
  2692. label:{
  2693. formatter: (datum) =>{
  2694. return datum.value + '%'
  2695. }
  2696. }
  2697. },
  2698. ],
  2699. tooltip: {
  2700. formatter: (datum) => {
  2701. return { name: datum.key, value: datum.key == '同比增长率'? datum.value + '%' : datum.value };
  2702. },
  2703. },
  2704. })
  2705. this.fllowMap.render()
  2706. } else {
  2707. this.fllowMap.changeData([this.fllowData.followup, this.fllowData.tbzzl])
  2708. }
  2709. },
  2710. //12月报价初始化
  2711. async baojiaFun (init,state) {
  2712. let param = JSON.parse(JSON.stringify(this.baojiaParam))
  2713. if (state == '状态'){
  2714. this.personData('baojiaParamSalesman',this.baojiaParam.content.where.isleave)
  2715. param.content.dataid = param.content.type == 0 || param.content.type == '' ? -1:param.content.dataid
  2716. }
  2717. if (param.content.dataid instanceof Array) {
  2718. param.content.dataid = param.content.dataid[param.content.dataid.length - 1]
  2719. }
  2720. let res = await this.$api.requested(param)
  2721. this.baojiaData = res.data
  2722. if (init) {
  2723. this.baojiaMap = new Line(this.$refs.baojiaEl, {
  2724. data:this.baojiaData,
  2725. xField: 'date',
  2726. yField: 'value',
  2727. seriesField: 'key',
  2728. label:{
  2729. layout: [],
  2730. },
  2731. xAxis: {
  2732. /*type: 'time',*/
  2733. },
  2734. yAxis: {
  2735. // label: {
  2736. // // 数值格式化为千分位
  2737. // formatter: (v) => `${v}`.replace(/\d{1,3}(?=(\d{3})+$)/g, (s) => `${s},`),
  2738. // },
  2739. },
  2740. smooth: true,
  2741. })
  2742. this.baojiaMap.render()
  2743. } else {
  2744. this.baojiaMap.changeData(this.baojiaData)
  2745. }
  2746. },
  2747. //项目跟进图初始化
  2748. async fllowInit (init,state) {
  2749. if (state == '状态'){
  2750. this.personData('fllowMapParamSalesman',this.fllowMapParam.content.where.isleave)
  2751. this.fllowMapParam.content.dataid = this.fllowMapParam.content.type == 0 || this.fllowMapParam.content.type == '' ? -1:this.fllowMapParam.content.dataid
  2752. }
  2753. let res = await this.$api.requested(this.fllowMapParam)
  2754. this.projectFllowData.map = res.data
  2755. if (init) {
  2756. this.projectFllowMap = new Pie(this.$refs.projectFllowEl, {
  2757. appendPadding: 10,
  2758. data:this.projectFllowData.map,
  2759. angleField: 'ratio',
  2760. colorField: 'key',
  2761. radius: 1,
  2762. innerRadius: 0.64,
  2763. label:{
  2764. formatter: (datum) => `${datum.ratio}%`
  2765. },
  2766. tooltip:{
  2767. formatter: (datum) => {
  2768. return { name: datum.key, value: datum.ratio + '%' };
  2769. },
  2770. },
  2771. statistic: {
  2772. title: {
  2773. offsetY: -4,
  2774. style: {
  2775. fontSize:'16px'
  2776. },
  2777. content:'项目总数'
  2778. },
  2779. content: {
  2780. offsetY: 4,
  2781. style: {
  2782. whiteSpace: 'pre-wrap',
  2783. overflow: 'hidden',
  2784. textOverflow: 'ellipsis',
  2785. fontSize:'16px'
  2786. },
  2787. customHtml: (container, view, datum, data) => {
  2788. const text = data[0].totalqty
  2789. return text
  2790. },
  2791. },
  2792. },
  2793. legend: {
  2794. position:'bottom'
  2795. },
  2796. // 添加 中心统计文本 交互
  2797. interactions: [{ type: 'element-selected' },{ type: 'element-active' }],
  2798. });
  2799. this.projectFllowMap.on('element:click',(v) => {
  2800. if (v.data.data.value != this.fllowTableParam.content.where.isfollowup) {
  2801. this.fllowTableParam.content.where.isfollowup = v.data.data.value
  2802. this.fllowTableParam.content.pageNumber = 1
  2803. this.$refs.projectFllowTable.listData()
  2804. } else {
  2805. this.fllowTableParam.content.where.isfollowup = ''
  2806. this.fllowTableParam.content.pageNumber = 1
  2807. this.$refs.projectFllowTable.listData()
  2808. }
  2809. })
  2810. this.projectFllowMap.render();
  2811. } else {
  2812. this.projectFllowMap.changeData(this.projectFllowData.map)
  2813. }
  2814. },
  2815. //项目联系人图初始化
  2816. async contactInit (init,state) {
  2817. if (state == '状态'){
  2818. this.personData('contactMapParamSalesman',this.contactMapParam.content.where.isleave)
  2819. this.contactMapParam.content.dataid = this.contactMapParam.content.type == 0 || this.contactMapParam.content.type == '' ? -1:this.contactMapParam.content.dataid
  2820. }
  2821. let res = await this.$api.requested(this.contactMapParam)
  2822. this.projectContactData.map = res.data
  2823. console.log(this.projectContactData.map,'项目联系人数据');
  2824. if (init) {
  2825. this.projectContactMap = new Pie(this.$refs.projectContactEl, {
  2826. appendPadding: 10,
  2827. data:this.projectContactData.map,
  2828. angleField: 'ratio',
  2829. colorField: 'key',
  2830. radius: 1,
  2831. innerRadius: 0.64,
  2832. label:{
  2833. formatter: (datum) => `${datum.ratio}%`
  2834. },
  2835. tooltip:{
  2836. formatter: (datum) => {
  2837. return { name: datum.key, value: datum.ratio + '%' };
  2838. },
  2839. },
  2840. statistic: {
  2841. title: {
  2842. offsetY: -4,
  2843. style: {
  2844. fontSize:'16px'
  2845. },
  2846. content:'项目总数'
  2847. },
  2848. content: {
  2849. offsetY: 4,
  2850. style: {
  2851. whiteSpace: 'pre-wrap',
  2852. overflow: 'hidden',
  2853. textOverflow: 'ellipsis',
  2854. fontSize:'16px'
  2855. },
  2856. customHtml: (container, view, datum, data) => {
  2857. const text = data[0].totalqty
  2858. return text
  2859. },
  2860. },
  2861. },
  2862. legend: {
  2863. position:'bottom'
  2864. },
  2865. // 添加 中心统计文本 交互
  2866. interactions: [{ type: 'element-selected' },{ type: 'element-active' }],
  2867. });
  2868. this.projectContactMap.on('element:click',(v) => {
  2869. if (v.data.data.key != this.contactTableParam.content.where.iscontacts) {
  2870. this.contactTableParam.content.where.iscontacts = v.data.data.key
  2871. this.contactTableParam.content.pageNumber = 1
  2872. this.$refs.projectContactTable.listData()
  2873. } else {
  2874. this.contactTableParam.content.where.iscontacts = ''
  2875. this.contactTableParam.content.pageNumber = 1
  2876. this.$refs.projectContactTable.listData()
  2877. }
  2878. })
  2879. this.projectContactMap.render();
  2880. } else {
  2881. this.projectContactMap.changeData(this.projectContactData.map)
  2882. }
  2883. },
  2884. //项目关联客户图初始化
  2885. async customerInit (init,state) {
  2886. if (state == '状态'){
  2887. this.personData('customerMapParamSalesman',this.customerMapParam.content.where.isleave)
  2888. this.customerMapParam.content.dataid = this.customerMapParam.content.type == 0 || this.customerMapParam.content.type == '' ? -1:this.customerMapParam.content.dataid
  2889. }
  2890. let res = await this.$api.requested(this.customerMapParam)
  2891. this.projectCustomerData.map = res.data
  2892. console.log(this.projectCustomerData.map,'项目关联客户数据');
  2893. if (init) {
  2894. this.projectCustomerMap = new Pie(this.$refs.projectCustomerEl, {
  2895. appendPadding: 10,
  2896. data:this.projectCustomerData.map,
  2897. angleField: 'ratio',
  2898. colorField: 'key',
  2899. radius: 1,
  2900. innerRadius: 0.64,
  2901. label:{
  2902. formatter: (datum) => `${datum.ratio}%`
  2903. },
  2904. tooltip:{
  2905. formatter: (datum) => {
  2906. return { name: datum.key, value: datum.ratio + '%' };
  2907. },
  2908. },
  2909. statistic: {
  2910. title: {
  2911. offsetY: -4,
  2912. style: {
  2913. fontSize:'16px'
  2914. },
  2915. content:'项目总数'
  2916. },
  2917. content: {
  2918. offsetY: 4,
  2919. style: {
  2920. whiteSpace: 'pre-wrap',
  2921. overflow: 'hidden',
  2922. textOverflow: 'ellipsis',
  2923. fontSize:'16px'
  2924. },
  2925. customHtml: (container, view, datum, data) => {
  2926. const text = data[0].totalqty
  2927. return text
  2928. },
  2929. },
  2930. },
  2931. legend: {
  2932. position:'bottom'
  2933. },
  2934. // 添加 中心统计文本 交互
  2935. interactions: [{ type: 'element-selected' },{ type: 'element-active' }],
  2936. });
  2937. this.projectCustomerMap.on('element:click',(v) => {
  2938. if (v.data.data.key != this.customerTableParam.content.where.iscustomers) {
  2939. this.customerTableParam.content.where.iscustomers = v.data.data.key
  2940. this.customerTableParam.content.pageNumber = 1
  2941. this.$refs.projectCustomerTable.listData()
  2942. } else {
  2943. this.customerTableParam.content.where.iscustomers = ''
  2944. this.customerTableParam.content.pageNumber = 1
  2945. this.$refs.projectCustomerTable.listData()
  2946. }
  2947. })
  2948. this.projectCustomerMap.render();
  2949. } else {
  2950. this.projectCustomerMap.changeData(this.projectCustomerData.map)
  2951. }
  2952. },
  2953. //项目评估图初始化
  2954. async projectScoreInit (init,state) {
  2955. if (state == '状态'){
  2956. this.personData('scoreMapParamSalesman',this.scoreMapParam.content.where.isleave)
  2957. this.scoreMapParam.content.dataid = this.scoreMapParam.content.type == 0 || this.scoreMapParam.content.type == '' ? -1:this.scoreMapParam.content.dataid
  2958. }
  2959. let res = await this.$api.requested(this.scoreMapParam)
  2960. this.projectScoreData.map = res.data
  2961. console.log(this.projectScoreData.map,'项目评估数据');
  2962. if (init) {
  2963. this.projectScoreMap = new Pie(this.$refs.projectScoreEl, {
  2964. appendPadding: 10,
  2965. data:this.projectScoreData.map,
  2966. angleField: 'ratio',
  2967. colorField: 'key',
  2968. radius: 1,
  2969. innerRadius: 0.64,
  2970. label:{
  2971. formatter: (datum) => `${datum.ratio}%`
  2972. },
  2973. tooltip:{
  2974. formatter: (datum) => {
  2975. return { name: datum.key, value: datum.ratio + '%' };
  2976. },
  2977. },
  2978. statistic: {
  2979. title: {
  2980. offsetY: -4,
  2981. style: {
  2982. fontSize:'16px'
  2983. },
  2984. content:'项目总数'
  2985. },
  2986. content: {
  2987. offsetY: 4,
  2988. style: {
  2989. whiteSpace: 'pre-wrap',
  2990. overflow: 'hidden',
  2991. textOverflow: 'ellipsis',
  2992. fontSize:'16px'
  2993. },
  2994. customHtml: (container, view, datum, data) => {
  2995. const text = data[0].totalqty
  2996. return text
  2997. },
  2998. },
  2999. },
  3000. legend: {
  3001. position:'bottom'
  3002. },
  3003. // 添加 中心统计文本 交互
  3004. interactions: [{ type: 'element-highlight-by-x ' },{ type: 'element-active' }],
  3005. });
  3006. this.projectScoreMap.on('element:click',(v) => {
  3007. if (v.data.data.key != this.scoreTableParam.content.where.istask) {
  3008. this.scoreTableParam.content.where.istask = v.data.data.key
  3009. this.scoreTableParam.content.pageNumber = 1
  3010. this.$refs.projectScoreTable.listData()
  3011. } else {
  3012. this.scoreTableParam.content.where.istask = ''
  3013. this.scoreTableParam.content.pageNumber = 1
  3014. this.$refs.projectScoreTable.listData()
  3015. }
  3016. })
  3017. this.projectScoreMap.render();
  3018. } else {
  3019. this.projectScoreMap.changeData(this.projectScoreData.map)
  3020. }
  3021. },
  3022. async getDate (init,state) {
  3023. if(init === true) this.dateParam.content.where.projecttype = this.projectType.length ? this.projectType[0].value : ''
  3024. let param = JSON.parse(JSON.stringify(this.dateParam))
  3025. if (state == '状态'){
  3026. this.personData('dateParamSalesman',this.dateParam.content.where.isleave)
  3027. param.content.dataid = param.content.type == 0 || param.content.type == '' ? -1:param.content.dataid
  3028. }
  3029. if (param.content.dataid instanceof Array) {
  3030. param.content.dataid = param.content.dataid[param.content.dataid.length - 1]
  3031. }
  3032. let res = await this.$api.requested(param)
  3033. this.dateList = res.data
  3034. console.log(this.dateList,'周期数据');
  3035. },
  3036. //项目未跟进情况图初始化
  3037. async customerUnfllowInit (init,state) {
  3038. if (state == '状态'){
  3039. this.personData('unfllowMapParamSalesman',this.unfllowMapParam.content.where.isleave)
  3040. this.unfllowMapParam.content.dataid = this.unfllowMapParam.content.type == 0 || this.unfllowMapParam.content.type == '' ? -1:this.unfllowMapParam.content.dataid
  3041. }
  3042. let res = await this.$api.requested(this.unfllowMapParam)
  3043. this.customerUnfllowData.map = res.data
  3044. if (init) {
  3045. this.customerUnfllowMap = new Column(this.$refs.customerUnfllowEl, {
  3046. data:this.customerUnfllowData.map,
  3047. isGroup: true,
  3048. xField: 'datetype',
  3049. yField: 'value',
  3050. seriesField: 'key',
  3051. label:{
  3052. position:top
  3053. },
  3054. /** 设置颜色 */
  3055. //color: ['#1ca9e6', '#f88c24'],
  3056. /** 设置间距 */
  3057. // marginRatio: 0.1,
  3058. /*label: {
  3059. // 可手动配置 label 数据标签位置
  3060. position: 'top', // 'top', 'middle', 'bottom'
  3061. // 可配置附加的布局方法
  3062. layout: [
  3063. // 柱形图数据标签位置自动调整
  3064. { type: 'interval-adjust-position' },
  3065. // 数据标签防遮挡
  3066. { type: 'interval-hide-overlap' },
  3067. // 数据标签文颜色自动调整
  3068. { type: 'adjust-color' },
  3069. ],
  3070. },*/
  3071. interactions: [{ type: 'element-highlight-by-x' }],
  3072. });
  3073. this.customerUnfllowMap.on('element:click',(v) => {
  3074. console.log(v);
  3075. if (v.data.data.datetype == this.unfllowTableParam.content.where.dateType) {
  3076. this.unfllowStatus = ''
  3077. this.unfllowTableParam.content.where.dateType = ''
  3078. this.unfllowTableParam.content.pageNumber = 1
  3079. } else {
  3080. this.unfllowStatus = v.data.data.datetype
  3081. this.unfllowTableParam.content.where.dateType = v.data.data.datetype
  3082. this.unfllowTableParam.content.pageNumber = 1
  3083. }
  3084. this.$refs.customerUnfllowTable.listData()
  3085. })
  3086. this.customerUnfllowMap.render()
  3087. } else {
  3088. this.customerUnfllowMap.changeData(this.customerUnfllowData.map)
  3089. }
  3090. },
  3091. renderStatistic(containerWidth, text, style) {
  3092. const textWidth = measureTextWidth(text, style);
  3093. const textHeight = style.lineHeight || style.fontSize
  3094. const R = containerWidth / 2;
  3095. // r^2 = (w / 2)^2 + (h - offsetY)^2
  3096. let scale = 1;
  3097. if (containerWidth < textWidth) {
  3098. scale = Math.min(Math.sqrt(Math.abs(Math.pow(R, 2) / (Math.pow(textWidth / 2, 2) + Math.pow(textHeight, 2)))), 1);
  3099. }
  3100. const textStyleStr = `width:${containerWidth}px;`;
  3101. return `<div style="${textStyleStr};font-size:${scale}em;line-height:${scale < 1 ? 1 : 'inherit'};">${text}</div>`;
  3102. },
  3103. async getProjectScoreDescript () {
  3104. let res = await this.$api.requested({
  3105. "id": 20231101091904,
  3106. "content": {}
  3107. })
  3108. this.projectScoreDescript = res.data
  3109. console.log(this.projectScoreDescript,'评估描述');
  3110. },
  3111. createMenu (array) {
  3112. var that = this
  3113. let arr = []
  3114. function convertToElementTree(node) {
  3115. // 新节点
  3116. if (node.subdep.length === 0){
  3117. var elNode = {
  3118. label: node["depname"],
  3119. parentid:node['parentid'],
  3120. parentname:node['parentname'],
  3121. departmentid:node["departmentid"],
  3122. value:node["departmentid"],
  3123. remarks:node["remarks"],
  3124. isused:node["isused"],
  3125. changedate:node['changedate'],
  3126. changeby:node['changeby'],
  3127. createdate:node['createdate'],
  3128. createby:node['createby'],
  3129. depno:node['depno'],
  3130. disabled:that.pageOnlyRead,
  3131. }
  3132. }else {
  3133. var elNode = {
  3134. label: node["depname"],
  3135. parentid:node['parentid'],
  3136. parentname:node['parentname'],
  3137. departmentid:node["departmentid"],
  3138. value:node["departmentid"],
  3139. remarks:node["remarks"],
  3140. isused:node["isused"],
  3141. changedate:node['changedate'],
  3142. changeby:node['changeby'],
  3143. createdate:node['createdate'],
  3144. createby:node['createby'],
  3145. depno:node['depno'],
  3146. disabled:that.pageOnlyRead,
  3147. children: []
  3148. }
  3149. }
  3150. if (node.subdep && node.subdep.length > 0) {
  3151. // 如果存在子节点
  3152. for (var index = 0; index < node.subdep.length; index++) {
  3153. // 遍历子节点, 把每个子节点看做一颗独立的树, 传入递归构造子树, 并把结果放回到新node的children中
  3154. elNode.children.push(convertToElementTree(node.subdep[index]));
  3155. }
  3156. }
  3157. return elNode;
  3158. }
  3159. array.forEach((element) => {
  3160. arr.push(convertToElementTree(element))
  3161. });
  3162. return arr
  3163. },
  3164. selectDep (val) {
  3165. this.person = ''
  3166. let id = val[val.length - 1]
  3167. if (val.length) {
  3168. /*数据总览*/
  3169. this.dataAllParam.content.dataid = id
  3170. this.dataAllParam.content.type = 1
  3171. this.dataAllParam.content.username = ''
  3172. this.dataAllParam.content.dateType = this.dateType
  3173. this.getdataAll()
  3174. /*项目类型分析*/
  3175. this.typeMapParam.content.dataid = id
  3176. this.typeMapParam.content.type = 1
  3177. this.typeInit()
  3178. this.typeTableParam.content.dataid = id
  3179. this.typeTableParam.content.type = 1
  3180. this.typeTableParam.content.username = ''
  3181. this.$refs.typeTable.listData()
  3182. /*项目等级分析*/
  3183. this.gradMapParam.content.dataid = id
  3184. this.gradMapParam.content.type = 1
  3185. this.gradInit()
  3186. this.gradTableParam.content.dataid = id
  3187. this.gradTableParam.content.type = 1
  3188. this.gradTableParam.content.username = ''
  3189. this.$refs.gradTable.listData()
  3190. /*项目评估分析*/
  3191. this.scoreMapParam1.content.dataid = id
  3192. this.scoreMapParam1.content.type = 1
  3193. this.scoreInit()
  3194. this.scoreTableParam1.content.dataid = id
  3195. this.scoreTableParam1.content.type = 1
  3196. this.scoreTableParam1.content.username = ''
  3197. this.$refs.scoreTable.listData()
  3198. /*近12月项目新增分析*/
  3199. this.addParam.content.dataid = id
  3200. this.addParam.content.type = 1
  3201. this.addParam.content.username = ''
  3202. this.addFun()
  3203. /*近12月项目报备分析*/
  3204. this.baobeiParam.content.dataid = id
  3205. this.baobeiParam.content.type = 1
  3206. this.baobeiParam.content.username = ''
  3207. this.baobeiFun()
  3208. /*近12月项目跟进分析*/
  3209. this.fllowParam.content.dataid = id
  3210. this.fllowParam.content.type = 1
  3211. this.fllowParam.content.username = ''
  3212. this.fllowFun()
  3213. /*近12月项目报价分析*/
  3214. this.baojiaParam.content.dataid = id
  3215. this.baojiaParam.content.type = 1
  3216. this.baojiaParam.content.username = ''
  3217. this.baojiaFun()
  3218. /*近12月项目跟进分析*/
  3219. this.fllowMapParam.content.dataid = id
  3220. this.fllowMapParam.content.type = 1
  3221. this.fllowInit()
  3222. this.fllowTableParam.content.dataid = id
  3223. this.fllowTableParam.content.type = 1
  3224. this.fllowTableParam.content.username = ''
  3225. this.$refs.projectFllowTable.listData()
  3226. /*项目联系人情况统计*/
  3227. this.contactMapParam.content.dataid = id
  3228. this.contactMapParam.content.type = 1
  3229. this.contactInit()
  3230. this.contactTableParam.content.dataid = id
  3231. this.contactTableParam.content.type = 1
  3232. this.contactTableParam.content.username = ''
  3233. this.$refs.projectContactTable.listData()
  3234. /*项目关联客户情况统计*/
  3235. this.customerMapParam.content.dataid = id
  3236. this.customerMapParam.content.type = 1
  3237. this.customerInit()
  3238. this.customerTableParam.content.dataid = id
  3239. this.customerTableParam.content.type = 1
  3240. this.customerTableParam.content.username = ''
  3241. this.$refs.projectCustomerTable.listData()
  3242. /*项目评估情况统计*/
  3243. this.scoreMapParam.content.dataid = id
  3244. this.scoreMapParam.content.type = 1
  3245. this.projectScoreInit()
  3246. this.scoreTableParam.content.dataid = id
  3247. this.scoreTableParam.content.type = 1
  3248. this.scoreTableParam.content.username = ''
  3249. this.$refs.projectScoreTable.listData()
  3250. /*有效项目未跟进天数分析*/
  3251. this.unfllowMapParam.content.dataid = id
  3252. this.unfllowMapParam.content.type = 1
  3253. this.customerUnfllowInit()
  3254. this.unfllowTableParam.content.dataid = id
  3255. this.unfllowTableParam.content.type = 1
  3256. this.unfllowTableParam.content.username = ''
  3257. this.$refs.customerUnfllowTable.listData()
  3258. /*项目生命周期分析*/
  3259. this.dateParam.content.dataid = id
  3260. this.dateParam.content.type = 1
  3261. this.dateParam.content.username = ''
  3262. this.getDate()
  3263. } else {
  3264. /*项目类型分析*/
  3265. let name = JSON.parse(sessionStorage.getItem('accountinfo')).name
  3266. /*数据总览*/
  3267. this.dataAllParam.content.dataid = ''
  3268. this.dataAllParam.content.type = ''
  3269. this.dataAllParam.content.username = name
  3270. this.dataAllParam.content.dateType = this.dateType
  3271. this.getdataAll()
  3272. this.typeMapParam.content.dataid = ''
  3273. this.typeMapParam.content.type = ''
  3274. this.typeInit()
  3275. this.typeTableParam.content.dataid = ''
  3276. this.typeTableParam.content.type = ''
  3277. this.typeTableParam.content.username = name
  3278. this.$refs.typeTable.listData()
  3279. /*项目等级分析*/
  3280. this.gradMapParam.content.dataid = ''
  3281. this.gradMapParam.content.type = ''
  3282. this.gradInit()
  3283. this.gradTableParam.content.dataid = ''
  3284. this.gradTableParam.content.type = ''
  3285. this.gradTableParam.content.username = name
  3286. this.$refs.gradTable.listData()
  3287. /*项目评估分析*/
  3288. this.scoreMapParam1.content.dataid = ''
  3289. this.scoreMapParam1.content.type = ''
  3290. this.scoreInit()
  3291. this.scoreTableParam1.content.dataid = ''
  3292. this.scoreTableParam1.content.type = ''
  3293. this.scoreTableParam1.content.username = name
  3294. this.$refs.scoreTable.listData()
  3295. /*近12月项目新增分析*/
  3296. this.addParam.content.dataid = ''
  3297. this.addParam.content.type = ''
  3298. this.addParam.content.username = name
  3299. this.addFun()
  3300. /*近12月项目报备分析*/
  3301. this.baobeiParam.content.dataid = ''
  3302. this.baobeiParam.content.type = ''
  3303. this.baobeiParam.content.username = name
  3304. this.baobeiFun()
  3305. /*近12月项目跟进分析*/
  3306. this.fllowParam.content.dataid = ''
  3307. this.fllowParam.content.type = ''
  3308. this.fllowParam.content.username = name
  3309. this.fllowFun()
  3310. /*近12月项目报价分析*/
  3311. this.baojiaParam.content.dataid = ''
  3312. this.baojiaParam.content.type = ''
  3313. this.baojiaParam.content.username = name
  3314. this.baojiaFun()
  3315. /*近12月项目跟进分析*/
  3316. this.fllowMapParam.content.dataid = ''
  3317. this.fllowMapParam.content.type = ''
  3318. this.fllowInit()
  3319. this.fllowTableParam.content.dataid = ''
  3320. this.fllowTableParam.content.type = ''
  3321. this.fllowTableParam.content.username = name
  3322. this.$refs.projectFllowTable.listData()
  3323. /*项目联系人情况统计*/
  3324. this.contactMapParam.content.dataid = ''
  3325. this.contactMapParam.content.type = ''
  3326. this.contactInit()
  3327. this.contactTableParam.content.dataid = ''
  3328. this.contactTableParam.content.type = ''
  3329. this.contactTableParam.content.username = name
  3330. this.$refs.projectContactTable.listData()
  3331. /*项目关联客户情况统计*/
  3332. this.customerMapParam.content.dataid = ''
  3333. this.customerMapParam.content.type = ''
  3334. this.customerInit()
  3335. this.customerTableParam.content.dataid = ''
  3336. this.customerTableParam.content.type = ''
  3337. this.customerTableParam.content.username = name
  3338. this.$refs.projectCustomerTable.listData()
  3339. /*项目评估情况统计*/
  3340. this.scoreMapParam.content.dataid = ''
  3341. this.scoreMapParam.content.type = ''
  3342. this.projectScoreInit()
  3343. this.scoreTableParam.content.dataid = ''
  3344. this.scoreTableParam.content.type = ''
  3345. this.scoreTableParam.content.username = name
  3346. this.$refs.projectScoreTable.listData()
  3347. /*有效项目未跟进天数分析*/
  3348. this.unfllowMapParam.content.dataid = ''
  3349. this.unfllowMapParam.content.type = ''
  3350. this.customerUnfllowInit()
  3351. this.unfllowTableParam.content.dataid = ''
  3352. this.unfllowTableParam.content.type = ''
  3353. this.unfllowTableParam.content.username = name
  3354. this.$refs.customerUnfllowTable.listData()
  3355. /*项目生命周期分析*/
  3356. this.dateParam.content.dataid = ''
  3357. this.dateParam.content.type = ''
  3358. this.dateParam.content.username = name
  3359. this.getDate()
  3360. }
  3361. },
  3362. selectPerson(id){
  3363. this.depment = ''
  3364. /*数据总览*/
  3365. this.dataAllParam.content.dataid = id
  3366. this.dataAllParam.content.type = 0
  3367. this.dataAllParam.content.username = this.person
  3368. this.dataAllParam.content.dateType = this.dateType
  3369. this.getdataAll()
  3370. /*项目类型分析*/
  3371. this.typeMapParam.content.dataid = id
  3372. this.typeMapParam.content.type = 0
  3373. this.typeInit()
  3374. this.typeTableParam.content.dataid = id
  3375. this.typeTableParam.content.type = 0
  3376. this.typeTableParam.content.username = this.person
  3377. this.$refs.typeTable.listData()
  3378. /*项目等级分析*/
  3379. this.gradMapParam.content.dataid = id
  3380. this.gradMapParam.content.type = 0
  3381. this.gradInit()
  3382. this.gradTableParam.content.dataid = id
  3383. this.gradTableParam.content.type = 0
  3384. this.gradTableParam.content.username = this.person
  3385. this.$refs.gradTable.listData()
  3386. /*项目评估分析*/
  3387. this.scoreMapParam1.content.dataid = id
  3388. this.scoreMapParam1.content.type = 0
  3389. this.scoreInit()
  3390. this.scoreTableParam1.content.dataid = id
  3391. this.scoreTableParam1.content.type = 0
  3392. this.scoreTableParam1.content.username = this.person
  3393. this.$refs.scoreTable.listData()
  3394. /*近12月项目新增分析*/
  3395. this.addParam.content.dataid = id
  3396. this.addParam.content.type = 0
  3397. this.addParam.content.username = this.person
  3398. this.addFun()
  3399. /*近12月项目报备分析*/
  3400. this.baobeiParam.content.dataid = id
  3401. this.baobeiParam.content.type = 0
  3402. this.baobeiParam.content.username = this.person
  3403. this.baobeiFun()
  3404. /*近12月项目跟进分析*/
  3405. this.fllowParam.content.dataid = id
  3406. this.fllowParam.content.type = 0
  3407. this.fllowParam.content.username = this.person
  3408. this.fllowFun()
  3409. /*近12月项目报价分析*/
  3410. this.baojiaParam.content.dataid = id
  3411. this.baojiaParam.content.type = 0
  3412. this.baojiaParam.content.username = this.person
  3413. this.baojiaFun()
  3414. /*近12月项目跟进分析*/
  3415. this.fllowMapParam.content.dataid = id
  3416. this.fllowMapParam.content.type = 0
  3417. this.fllowInit()
  3418. this.fllowTableParam.content.dataid = id
  3419. this.fllowTableParam.content.type = 0
  3420. this.fllowTableParam.content.username = this.person
  3421. this.$refs.projectFllowTable.listData()
  3422. /*项目联系人情况统计*/
  3423. this.contactMapParam.content.dataid = id
  3424. this.contactMapParam.content.type = 0
  3425. this.contactInit()
  3426. this.contactTableParam.content.dataid = id
  3427. this.contactTableParam.content.type = 0
  3428. this.contactTableParam.content.username = this.person
  3429. this.$refs.projectContactTable.listData()
  3430. /*项目关联客户情况统计*/
  3431. this.customerMapParam.content.dataid = id
  3432. this.customerMapParam.content.type = 0
  3433. this.customerInit()
  3434. this.customerTableParam.content.dataid = id
  3435. this.customerTableParam.content.type = 0
  3436. this.customerTableParam.content.username = this.person
  3437. this.$refs.projectCustomerTable.listData()
  3438. /*项目评估情况统计*/
  3439. this.scoreMapParam.content.dataid = id
  3440. this.scoreMapParam.content.type = 0
  3441. this.projectScoreInit()
  3442. this.scoreTableParam.content.dataid = id
  3443. this.scoreTableParam.content.type = 0
  3444. this.scoreTableParam.content.username = this.person
  3445. this.$refs.projectScoreTable.listData()
  3446. /*有效项目未跟进天数分析*/
  3447. this.unfllowMapParam.content.dataid = id
  3448. this.unfllowMapParam.content.type = 0
  3449. this.customerUnfllowInit()
  3450. this.unfllowTableParam.content.dataid = id
  3451. this.unfllowTableParam.content.type = 0
  3452. this.unfllowTableParam.content.username = this.person
  3453. this.$refs.customerUnfllowTable.listData()
  3454. /*项目生命周期分析*/
  3455. this.dateParam.content.dataid = id
  3456. this.dateParam.content.type = 0
  3457. this.dateParam.content.username = this.person
  3458. this.getDate()
  3459. },
  3460. leaveChange(){
  3461. /*数据总览*/
  3462. this.dataAllParam.content.where.isleave = this.isleave
  3463. this.dataAllParam.content.dateType = this.dateType
  3464. this.person = ''
  3465. this.dataAllParam.content.dataid = this.dataAllParam.content.type == 0?-1:this.dataAllParam.content.dataid
  3466. this.getdataAll()
  3467. /*项目类型分析*/
  3468. this.typeMapParam.content.where.isleave = this.isleave
  3469. this.typeMapParam.content.username = ''
  3470. this.typeMapParam.content.dataid = this.typeMapParam.content.type == 0?-1:this.typeMapParam.content.dataid
  3471. this.typeInit()
  3472. this.typeTableParam.content.where.isleave = this.isleave
  3473. this.typeTableParam.content.username = ''
  3474. this.typeTableParam.content.dataid = this.typeTableParam.content.type == 0?-1:this.typeTableParam.content.dataid
  3475. this.$refs.typeTable.listData()
  3476. /*项目等级分析*/
  3477. this.gradMapParam.content.where.isleave = this.isleave
  3478. this.gradMapParam.content.username = ''
  3479. this.gradMapParam.content.dataid = this.gradMapParam.content.type == 0?-1:this.gradMapParam.content.dataid
  3480. this.gradInit()
  3481. this.gradTableParam.content.where.isleave = this.isleave
  3482. this.gradTableParam.content.username = ''
  3483. this.gradTableParam.content.dataid = this.gradTableParam.content.type == 0?-1:this.gradTableParam.content.dataid
  3484. this.$refs.gradTable.listData()
  3485. /*项目评估分析*/
  3486. this.scoreMapParam1.content.where.isleave = this.isleave
  3487. this.scoreMapParam1.content.username = ''
  3488. this.scoreMapParam1.content.dataid = this.scoreMapParam1.content.type == 0?-1:this.scoreMapParam1.content.dataid
  3489. this.scoreInit()
  3490. this.scoreTableParam1.content.where.isleave = this.isleave
  3491. this.scoreTableParam1.content.username = ''
  3492. this.scoreTableParam1.content.dataid = this.scoreTableParam1.content.type == 0?-1:this.scoreTableParam1.content.dataid
  3493. this.$refs.scoreTable.listData()
  3494. /*近12月项目新增分析*/
  3495. this.addParam.content.where.isleave = this.isleave
  3496. this.addParam.content.username = ''
  3497. this.addParam.content.dataid = this.addParam.content.type == 0?-1:this.addParam.content.dataid
  3498. this.addFun()
  3499. /*近12月项目报备分析*/
  3500. this.baobeiParam.content.where.isleave = this.isleave
  3501. this.baobeiParam.content.username = ''
  3502. this.baobeiParam.content.dataid = this.baobeiParam.content.type == 0?-1:this.baobeiParam.content.dataid
  3503. this.baobeiFun()
  3504. /*近12月项目跟进分析*/
  3505. this.fllowParam.content.where.isleave = this.isleave
  3506. this.fllowParam.content.username = ''
  3507. this.fllowParam.content.dataid = this.fllowParam.content.type == 0?-1:this.fllowParam.content.dataid
  3508. this.fllowFun()
  3509. /*近12月项目报价分析*/
  3510. this.baojiaParam.content.where.isleave = this.isleave
  3511. this.baojiaParam.content.username = ''
  3512. this.baojiaParam.content.dataid = this.baojiaParam.content.type == 0?-1:this.baojiaParam.content.dataid
  3513. this.baojiaFun()
  3514. /*近12月项目跟进分析*/
  3515. this.fllowMapParam.content.where.isleave = this.isleave
  3516. this.fllowMapParam.content.username = ''
  3517. this.fllowMapParam.content.dataid = this.fllowMapParam.content.type == 0?-1:this.fllowMapParam.content.dataid
  3518. this.fllowInit()
  3519. this.fllowTableParam.content.where.isleave = this.isleave
  3520. this.fllowTableParam.content.username = ''
  3521. this.fllowTableParam.content.dataid = this.fllowTableParam.content.type == 0?-1:this.fllowTableParam.content.dataid
  3522. this.$refs.projectFllowTable.listData()
  3523. /*项目联系人情况统计*/
  3524. this.contactMapParam.content.where.isleave = this.isleave
  3525. this.contactMapParam.content.username = ''
  3526. this.contactMapParam.content.dataid = this.contactMapParam.content.type == 0?-1:this.contactMapParam.content.dataid
  3527. this.contactInit()
  3528. this.contactTableParam.content.where.isleave = this.isleave
  3529. this.contactTableParam.content.username = ''
  3530. this.contactTableParam.content.dataid = this.contactTableParam.content.type == 0?-1:this.contactTableParam.content.dataid
  3531. this.$refs.projectContactTable.listData()
  3532. /*项目关联客户情况统计*/
  3533. this.customerMapParam.content.where.isleave = this.isleave
  3534. this.customerMapParam.content.username = ''
  3535. this.customerMapParam.content.dataid = this.customerMapParam.content.type == 0?-1:this.customerMapParam.content.dataid
  3536. this.customerInit()
  3537. this.customerTableParam.content.where.isleave = this.isleave
  3538. this.customerTableParam.content.username = ''
  3539. this.customerTableParam.content.dataid = this.customerTableParam.content.type == 0?-1:this.customerTableParam.content.dataid
  3540. this.$refs.projectCustomerTable.listData()
  3541. /*项目评估情况统计*/
  3542. this.scoreMapParam.content.where.isleave = this.isleave
  3543. this.scoreMapParam.content.username = ''
  3544. this.scoreMapParam.content.dataid = this.scoreMapParam.content.type == 0?-1:this.scoreMapParam.content.dataid
  3545. this.projectScoreInit()
  3546. this.scoreTableParam.content.where.isleave = this.isleave
  3547. this.scoreTableParam.content.username = ''
  3548. this.scoreTableParam.content.dataid = this.scoreTableParam.content.type == 0?-1:this.scoreTableParam.content.dataid
  3549. this.$refs.projectScoreTable.listData()
  3550. /*有效项目未跟进天数分析*/
  3551. this.unfllowMapParam.content.where.isleave = this.isleave
  3552. this.unfllowMapParam.content.username = ''
  3553. this.unfllowMapParam.content.dataid = this.unfllowMapParam.content.type == 0?-1:this.unfllowMapParam.content.dataid
  3554. this.customerUnfllowInit()
  3555. this.unfllowTableParam.content.where.isleave = this.isleave
  3556. this.unfllowTableParam.content.username = ''
  3557. this.unfllowTableParam.content.dataid = this.unfllowTableParam.content.type == 0?-1:this.unfllowTableParam.content.dataid
  3558. this.$refs.customerUnfllowTable.listData()
  3559. /*项目生命周期分析*/
  3560. this.dateParam.content.where.isleave = this.isleave
  3561. this.dateParam.content.username = ''
  3562. this.dateParam.content.dataid = this.dateParam.content.type == 0?-1:this.dateParam.content.dataid
  3563. this.getDate()
  3564. this.personDataAll()
  3565. },
  3566. selectRow (data) {
  3567. this.projectname = data.projectname
  3568. this.dateParam.content.where.sa_projectid = data.sa_projectid
  3569. this.dateParam.content.type = ''
  3570. this.dateParam.content.dataid = ''
  3571. this.dateParam.content.where.projecttype = ''
  3572. this.dateParam.content.where.grade = ''
  3573. this.dateParam.content.where.tradefield = ''
  3574. this.getDate()
  3575. },
  3576. clearSelect () {
  3577. this.projectname=''
  3578. this.dateParam.content.where.sa_projectid=''
  3579. this.dateParam.content.where.projecttype = this.projectType.length ? this.projectType[0].value : ''
  3580. this.getDate()
  3581. },
  3582. handleUnfllowParam (param) {
  3583. console.log('触发',param,this.projectType);
  3584. param.content.where.projecttype = this.projectType.length ? this.projectType[0].value : ''
  3585. this.unfllowMapParam.content.where.projecttype = this.projectType.length ? this.projectType[0].value : ''
  3586. },
  3587. /*获取新的业务员列表*/
  3588. async personDataAll(){
  3589. let param = {
  3590. id: 20230620102004,
  3591. content: {
  3592. isleave:this.isleave
  3593. },
  3594. }
  3595. const res = await this.$api.requested(param)
  3596. this.personnelList = res.data.hr
  3597. this.typeMapParamSalesman = res.data.hr
  3598. this.gradMapParamSalesman = res.data.hr
  3599. this.scoreMapParam1Salesman = res.data.hr
  3600. this.addParamSalesman = res.data.hr
  3601. this.baobeiParamSalesman = res.data.hr
  3602. this.fllowParamSalesman = res.data.hr
  3603. this.baojiaParamSalesman = res.data.hr
  3604. this.fllowMapParamSalesman = res.data.hr
  3605. this.contactMapParamSalesman = res.data.hr
  3606. this.customerMapParamSalesman = res.data.hr
  3607. this.scoreMapParamSalesman = res.data.hr
  3608. this.unfllowMapParamSalesman = res.data.hr
  3609. this.dateParamSalesman = res.data.hr
  3610. },
  3611. /*获取新的业务员列表*/
  3612. async personData(keyName,isleave){
  3613. let param = {
  3614. id: 20230620102004,
  3615. content: {
  3616. isleave:isleave
  3617. },
  3618. }
  3619. const res = await this.$api.requested(param)
  3620. this[keyName] = res.data.hr
  3621. },
  3622. /*全屏*/
  3623. onFull(){
  3624. this.isFull = true
  3625. this.isAppend = false
  3626. },
  3627. /*退出全屏*/
  3628. backFull(){
  3629. this.isFull = false
  3630. this.isAppend = true
  3631. },
  3632. /*级联*/
  3633. format (labels, selectedData) {
  3634. const index = labels.length - 1;
  3635. return labels[index];
  3636. },
  3637. onClick(title){
  3638. this.title = this.dateType + '_' + title
  3639. this.paramDetail.content.dataid = this.person?this.person == this.userName?JSON.parse(sessionStorage.getItem('active_account')).userid:this.person:this.depment[0]
  3640. this.paramDetail.content.type = this.person?'0':'1'
  3641. this.paramDetail.content.typemx = title
  3642. this.paramDetail.content.where.isleave = this.isleave
  3643. this.paramDetail.content.dateType = this.dateType
  3644. this.$refs.detailRef.onShow()
  3645. },
  3646. /*获取阶段*/
  3647. async stageData(){
  3648. const res = await this.$api.requested({
  3649. "id": 20221128143604,
  3650. "content": {
  3651. "pageNumber": 1,
  3652. "pageSize": 99,
  3653. "where": {
  3654. "condition": "",
  3655. "allprojecttype":"",
  3656. "projecttype":""
  3657. }
  3658. }
  3659. })
  3660. this.option.stageList = res.data
  3661. },
  3662. /*标签列表*/
  3663. async tagList(){
  3664. const res = await this.$api.requested({
  3665. "id":20221013104401,
  3666. "content":{
  3667. "isExport":1,
  3668. "pageNumber":1,
  3669. "pageSize":100,
  3670. "sys_systemtagid":1,
  3671. "where":{
  3672. "condition":""
  3673. }
  3674. }
  3675. })
  3676. this.option.tagData = this.unique(res.data)
  3677. },
  3678. /*去重*/
  3679. unique(arr) {
  3680. const res = new Map();
  3681. return arr.filter((arr) => !res.has(arr.tag) && res.set(arr.tag, 1));
  3682. },
  3683. selectChange(){
  3684. this.paramDetail.content.pageNumber = 1
  3685. this.$refs.detailRef.listData()
  3686. },
  3687. },
  3688. async mounted () {
  3689. this.tagList()
  3690. this.stageData()
  3691. this.getProjectScoreDescript()
  3692. this.departmentrtment()
  3693. this.getdataAll()
  3694. this.typeInit(true)
  3695. this.gradInit(true)
  3696. this.scoreInit(true)
  3697. this.addFun(true)
  3698. this.baobeiFun(true)
  3699. this.fllowFun(true)
  3700. this.baojiaFun(true)
  3701. this.fllowInit(true)
  3702. this.contactInit(true)
  3703. this.projectScoreInit(true)
  3704. this.customerInit(true)
  3705. this.customerUnfllowInit(true)
  3706. let baseWidth = 1920
  3707. document.querySelector('html').style.fontSize = `${100 / baseWidth}vw`
  3708. /* 获取项目类型 */
  3709. let res = await this.$store.dispatch('optiontypeselect','projecttype')
  3710. this.projectType = res.data
  3711. this.getDate(true)
  3712. /* 获取项目等级 */
  3713. let res2 = await this.$store.dispatch('optiontypeselect','projectgrade')
  3714. this.projectLead = res2.data
  3715. let res3 = await this.$store.dispatch('optiontypeselect','tradefield')
  3716. this.tradefieldSelect = res3.data
  3717. var that = this;
  3718. // <!--把window.onresize事件挂在到mounted函数上-->
  3719. window.onresize = () => {
  3720. return (() => {
  3721. window.fullWidth = document.documentElement.clientWidth;
  3722. that.windowWidth = window.fullWidth; // 宽
  3723. console.log(that.windowWidth,'屏幕宽度')
  3724. })()
  3725. };
  3726. },
  3727. created() {
  3728. this.tablecols = this.tool.tabelCol(this.$route.name).projectDetail.tablecols
  3729. }
  3730. }
  3731. </script>
  3732. <style>
  3733. .basic__layout__panel {
  3734. height: 100% !important;
  3735. }
  3736. </style>
  3737. <style scoped>
  3738. *{
  3739. box-sizing: border-box;
  3740. }
  3741. .data-all {
  3742. padding: 16px;
  3743. width: 100%;
  3744. border-radius: 5rem;
  3745. border: 1rem;
  3746. box-shadow: 0rem 2rem 5rem 0rem rgba(0, 0, 0, 0.15);
  3747. background: #FFFFFF;
  3748. margin-top: 16px;
  3749. }
  3750. .data-all .data-left {
  3751. border-right: 1rem solid rgb(136,136,146);
  3752. display: flex;
  3753. flex-wrap: wrap;
  3754. }
  3755. .data-all .data-right {
  3756. padding-left: 100rem;
  3757. display: flex;
  3758. flex-wrap: wrap;
  3759. }
  3760. .data-all .data-left,.data-right {
  3761. display: flex;
  3762. }
  3763. .data-all .data-item {
  3764. width: 186rem;
  3765. margin-bottom: 20px;
  3766. }
  3767. .data-all .data-item p:nth-child(1) {
  3768. font-size: 26px;
  3769. font-weight: 5px;
  3770. font-family: 'ArialMT', 'Arial', sans-serif;
  3771. color: rgba(0, 0, 0, 0.85);
  3772. }
  3773. .data-all .data-item p:nth-child(2) {
  3774. font-size: 14px;
  3775. font-weight: 5px;
  3776. font-family: 'PingFangSC-Regular', 'PingFang SC', sans-serif;
  3777. color: rgba(0, 0, 0, 0.65)
  3778. }
  3779. .data-all .data-all-wrapper {
  3780. display: flex;
  3781. }
  3782. .data-panel {
  3783. padding: 16px;
  3784. margin-top: 16px;
  3785. height: 500px;
  3786. border-radius: 5rem;
  3787. border: 1rem;
  3788. box-shadow: 0rem 2rem 5rem 0rem rgba(0, 0, 0, 0.15);
  3789. background: #FFFFFF;
  3790. }
  3791. .panel-header {
  3792. display: flex;
  3793. justify-content: space-between;
  3794. align-items: center;
  3795. margin-bottom: 10px;
  3796. }
  3797. .title {
  3798. min-width: 220px;
  3799. }
  3800. .title::before {
  3801. content:'';
  3802. border-left: 4px #3874f6 solid;
  3803. padding-right: 10px;
  3804. }
  3805. .panel-content {
  3806. display: flex;
  3807. align-items: center;
  3808. justify-content: space-between;
  3809. background:#ffffff;
  3810. height: calc(100% - 55px);
  3811. }
  3812. .panel-content-wrapper {
  3813. height: 100%;
  3814. background:#ffffff;
  3815. }
  3816. .panel-content div:first-child {
  3817. padding: 0 5px;
  3818. }
  3819. .progress {
  3820. display: flex;
  3821. width: 100%;
  3822. padding: 40rem 100rem;
  3823. height: 50rem;
  3824. margin-bottom: 60rem;
  3825. }
  3826. .progress::after {
  3827. content:'';
  3828. display: block;
  3829. clear:both;
  3830. }
  3831. .progress .progress-item {
  3832. flex:var(--width);
  3833. min-width: 150rem;
  3834. height: 50rem;
  3835. position: relative;
  3836. background:var(--bg);
  3837. }
  3838. .progress .progress-item .day {
  3839. position: absolute;
  3840. top: -40rem;
  3841. left: 50%;
  3842. font-size: 14rem;
  3843. transform: translateX(-50%);
  3844. white-space: nowrap;
  3845. }
  3846. .progress .progress-item .start {
  3847. position: absolute;
  3848. left: 0;
  3849. bottom:-50rem;
  3850. transform: translateX(-50%);
  3851. }
  3852. .progress .progress-item .end {
  3853. position: absolute;
  3854. right:0;
  3855. bottom:-50rem;
  3856. transform: translateX(50%);
  3857. }
  3858. .progress .progress-item .start,.end {
  3859. display: flex;
  3860. flex-direction: column;
  3861. }
  3862. .progress .progress-item .start,.end span {
  3863. text-align: center;
  3864. }
  3865. .progress .progress-item .start span:first-child,.end span:first-child {
  3866. font-size: 14rem;
  3867. }
  3868. .progress .progress-item .start span:last-child,.end span:last-child {
  3869. margin-top: 10rem;
  3870. color: #aaaaaa;
  3871. font-size: 12rem;
  3872. }
  3873. .search__label {
  3874. margin-right: 5px !important;
  3875. }
  3876. .mt-10 {
  3877. margin-right: 16px !important;
  3878. }
  3879. .el-empty {
  3880. padding: 0 !important;
  3881. }
  3882. .panel-table {
  3883. height: 100%;
  3884. }
  3885. </style>