index.vue 147 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928
  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">{{$t(`返回顶部`)}}</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" >{{$t('部门')}}:</label>
  17. <el-cascader
  18. ref="selectdep"
  19. size="small"
  20. placement="bottom"
  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" >{{$t('业务员')}}:</label>
  30. <el-select v-model="person" filterable :placeholder="$t('请选择')" size="small" clearable @change="selectPerson">
  31. <el-option
  32. v-for="item in personnelList"
  33. :key="item.index"
  34. :label="$t(item.name)"
  35. :value="item.userid">
  36. </el-option>
  37. </el-select>
  38. </div>
  39. <div class="inline-16">
  40. <p class="search__label">{{$t('状态')}}:</p>
  41. <el-select v-model="isleave" clearable style="margin-right:10px" size="small" :placeholder="$t('请选择状态')" @change="leaveChange" >
  42. <el-option :label="$t('在职')" value="1"></el-option>
  43. <el-option :label="$t('离职')" 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">{{$t(`客户数据概况`)}}</div>
  53. <div class="data-all-wrapper">
  54. <div class="data-left">
  55. <div class="data-item div-hover-click" @click="onClick('客户总数')">
  56. <p>{{ tool.formatAmount(dataAll.total)|| 0 }}</p>
  57. <p>
  58. {{$t(`客户总数`)}}
  59. <el-tooltip class="item" effect="dark" :content="$t(`客户总数:包含我的客户、公海客户数量`)" placement="top">
  60. <img style="vertical-align: middle" src="@/assets/icons/prompt_icon.svg" alt="">
  61. </el-tooltip>
  62. </p>
  63. </div>
  64. <div class="data-item div-hover-click" @click="onClick('公海客户数')">
  65. <p>{{ tool.formatAmount(dataAll.customerpoolqty)}}</p>
  66. <p>
  67. {{$t(`公海客户数`)}}
  68. </p>
  69. </div>
  70. <div class="data-item div-hover-click" @click="onClick('成交客户数')">
  71. <p>{{ tool.formatAmount(dataAll.tradedCustomers)}}</p>
  72. <p>
  73. {{$t(`成交客户数`)}}
  74. <el-tooltip class="item div-click" effect="dark" :content="$t(`成交客户:已成交、多次成交状态的客户数量`)" placement="top">
  75. <img style="vertical-align: middle" src="@/assets/icons/prompt_icon.svg" alt="">
  76. </el-tooltip>
  77. </p>
  78. </div>
  79. <div class="data-item div-hover-click" @click="onClick('参与项目客户数')">
  80. <p>{{ tool.formatAmount(dataAll.participateProject) }}</p>
  81. <p>
  82. {{$t(`参与项目客户数`)}}
  83. <el-tooltip class="item" effect="dark" :content="$t(`参与项目客户数:参与有下订单的项目的关联客户数`)" placement="top">
  84. <img style="vertical-align: middle" src="@/assets/icons/prompt_icon.svg" alt="">
  85. </el-tooltip>
  86. </p>
  87. </div>
  88. </div>
  89. <div class="data-right">
  90. <div class="data-item div-hover-click" v-for="item in dataAll.data" :key="item.rowindex" @click="onClick(item.value)">
  91. <p>{{ tool.formatAmount(item.qty) }}</p>
  92. <p>
  93. {{ $t(item.value)}}
  94. <el-tooltip class="item" effect="dark" :content="$t(`统计没有客户分类信息的客户数量`)" placement="top" v-if="item.value == '无分类客户'">
  95. <img style="vertical-align: middle" src="@/assets/icons/prompt_icon.svg" alt="">
  96. </el-tooltip>
  97. <el-tooltip class="item" effect="dark" :content="$t(`客户分类为A核心客户的数量`)" placement="top" v-else-if="item.value == 'A核心客户'">
  98. <img style="vertical-align: middle" src="@/assets/icons/prompt_icon.svg" alt="">
  99. </el-tooltip>
  100. <el-tooltip class="item" effect="dark" :content="$t(`客户分类为B重要客户的数量`)" placement="top" v-else-if="item.value == 'B重要客户'">
  101. <img style="vertical-align: middle" src="@/assets/icons/prompt_icon.svg" alt="">
  102. </el-tooltip>
  103. <el-tooltip class="item" effect="dark" :content="$t(`客户分类为C普通客户的数量`)" placement="top" v-else-if="item.value == 'C普通客户'">
  104. <img style="vertical-align: middle" src="@/assets/icons/prompt_icon.svg" alt="">
  105. </el-tooltip>
  106. <el-tooltip class="item" effect="dark" :content="$t(`客户分类为D一般客户的数量`)" placement="top" v-else-if="item.value == 'D一般客户'">
  107. <img style="vertical-align: middle" src="@/assets/icons/prompt_icon.svg" alt="">
  108. </el-tooltip>
  109. </p>
  110. </div>
  111. </div>
  112. </div>
  113. </div>
  114. <!--12月客户新增-->
  115. <div class="data-panel" id="customerAdd">
  116. <div class="panel-content-wrapper" >
  117. <div class="panel-header">
  118. <div class="title">{{$t(`近12月客户新增分析`)}}</div>
  119. <div class="panel-select">
  120. <div class="mt-10 inline-16">
  121. <label class="search__label" >{{$t('部门')}}:</label>
  122. <el-cascader
  123. :append-to-body="false"
  124. placement="bottom"
  125. ref="selectdep"
  126. size="small"
  127. v-model="chartParam1.content.dataid"
  128. :options="deplist"
  129. :props="{emitPath:true,expandTrigger:'hover',checkStrictly:true,label:'label',value:'departmentid',children:'children'}"
  130. @change="$event => {if($event.length) {chartParam1.content.type=1;chartParam1.content.username='';chart1Fun()} else {chartParam1.content.dataid='';chartParam1.content.type='';chartParam1.content.username='';chart1Fun()}}"></el-cascader>
  131. </div>
  132. <div class="mt-10 inline-16">
  133. <label class="search__label" >{{$t('业务员')}}:</label>
  134. <el-select v-model="chartParam1.content.username" filterable :placeholder="$t('请选择')" size="small"
  135. :popper-append-to-body="false"
  136. @change="$event => {if($event) {chartParam1.content.type=0;chartParam1.content.dataid=$event;chartParam1.content.depname='';chart1Fun()} else {chartParam1.content.dataid='';chartParam1.content.type='';chartParam1.content.depname='';chart1Fun()}}"
  137. >
  138. <el-option
  139. v-for="item in chartParam1Salesman"
  140. :key="item.index"
  141. :label="$t(item.name)"
  142. :value="item.userid">
  143. </el-option>
  144. </el-select>
  145. </div>
  146. <div class="mt-10 inline-16">
  147. <p class="search__label">{{$t('状态')}}:</p>
  148. <el-select v-model="chartParam1.content.where.isleave" clearable style="margin-right:10px" size="small" :placeholder="$t('请选择状态')" @change="chart1Fun(null,'状态')" >
  149. <el-option :label="$t('在职')" value="1"></el-option>
  150. <el-option :label="$t('离职')" value="2"></el-option>
  151. </el-select>
  152. </div>
  153. <div class="mt-10 inline-15">
  154. <label class="search__label" >{{$t('分析日期')}}:</label>
  155. <el-date-picker
  156. :append-to-body="false"
  157. v-model="chartParam1.content.enddate"
  158. format="yyyy-MM-dd"
  159. value-format="yyyy-MM-dd"
  160. type="date"
  161. size="small"
  162. :placeholder="$t(`选择日期`)"
  163. @change="chart1Fun()">
  164. </el-date-picker>
  165. </div>
  166. <div style="display: inline-block;vertical-align: middle" >
  167. <FullScroll domId="customerAdd"></FullScroll>
  168. </div>
  169. </div>
  170. </div>
  171. <div ref="chart1" :style="windowWidth<1574?'height:calc(100% - 100px)':windowWidth<1593?'height:calc(100% - 90px)':'height:calc(100% - 55px)'"></div>
  172. </div>
  173. </div>
  174. <!--客户类型-->
  175. <div class="data-panel" id="customerType">
  176. <div class="panel-content-wrapper" >
  177. <div class="panel-header">
  178. <div class="title">{{$t(`客户类型情况统计`)}}</div>
  179. <div class="panel-select">
  180. <div class="mt-10 inline-16">
  181. <label class="search__label" >{{$t('部门')}}:</label>
  182. <el-cascader
  183. :append-to-body="false"
  184. placement="bottom"
  185. ref="selectdep"
  186. size="small"
  187. v-model="typeTableParam.content.dataid"
  188. :options="deplist"
  189. :props="{emitPath:true,expandTrigger:'hover',checkStrictly:true,label:'label',value:'departmentid',children:'children'}"
  190. @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.customerTypeTable.listData();customerTypeInit()} else {typeMapParam.content.type='';typeMapParam.content.dataid='';typeTableParam.content.dataid='';typeTableParam.content.type='';typeTableParam.content.username='';typeTableParam.content.pageNumber=1;$refs.customerTypeTable.listData();customerTypeInit()}}"></el-cascader>
  191. </div>
  192. <div class="mt-10 inline-16">
  193. <label class="search__label" >{{$t('业务员')}}:</label>
  194. <el-select v-model="typeTableParam.content.username" filterable :placeholder="$t('请选择')" size="small"
  195. :popper-append-to-body="false"
  196. @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.customerTypeTable.listData();customerTypeInit()} else {typeMapParam.content.type='';typeMapParam.content.dataid='';typeTableParam.content.dataid='';typeTableParam.content.type='';typeTableParam.content.depname='';typeTableParam.content.pageNumber=1;$refs.customerTypeTable.listData();customerTypeInit()}}"
  197. >
  198. <el-option
  199. v-for="item in typeMapParamSalesman"
  200. :key="item.index"
  201. :label="$t(item.name)"
  202. :value="item.userid">
  203. </el-option>
  204. </el-select>
  205. </div>
  206. <div class="mt-10 inline-16">
  207. <p class="search__label">{{$t('状态')}}:</p>
  208. <el-select v-model="typeTableParam.content.where.isleave" clearable style="margin-right:10px" size="small" :placeholder="$t('请选择状态')" @change="typeMapParam.content.where.isleave = typeTableParam.content.where.isleave;typeTableParam.content.username = '';typeTableParam.content.pageNumber=1;$refs.customerTypeTable.listData(null,'状态');customerTypeInit(null,'状态')" >
  209. <el-option :label="$t('在职')" value="1"></el-option>
  210. <el-option :label="$t('离职')" value="2"></el-option>
  211. </el-select>
  212. </div>
  213. <div class="mt-10 inline-16">
  214. <el-button-group>
  215. <el-button :type="typeTableParam.content.dateType === '全部'?'primary':''" size="small" @click="typeMapParam.content.dateType = '全部';typeTableParam.content.dateType = '全部';
  216. typeMapParam.content.where.begdate = '';typeMapParam.content.where.enddate = '';typeTableParam.content.where.begdate = '';typeTableParam.content.where.enddate = '';typeDate = []
  217. typeTableParam.content.pageNumber = 1;$refs.customerTypeTable.listData();customerTypeInit()">{{$t(`全部`)}}</el-button>
  218. <el-button :type="typeTableParam.content.dateType === '本年'?'primary':''" size="small" @click="typeMapParam.content.dateType = '本年';typeTableParam.content.dateType = '本年';
  219. 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';
  220. typeTableParam.content.where.begdate = new Date().getFullYear() + '-01';typeTableParam.content.where.enddate = new Date().getFullYear() + '-12';
  221. typeTableParam.content.pageNumber = 1;$refs.customerTypeTable.listData();customerTypeInit()">{{$t(`本年`)}}</el-button>
  222. </el-button-group>
  223. </div>
  224. <div class="mt-10 inline-16">
  225. <el-date-picker
  226. v-show="isFull"
  227. :append-to-body="false"
  228. v-model="typeDate"
  229. :clearable="false"
  230. @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];
  231. typeTableParam.content.pageNumber = 1;$refs.customerTypeTable.listData();customerTypeInit()"
  232. size="small"
  233. format="yyyy-MM"
  234. value-format="yyyy-MM"
  235. type="monthrange"
  236. :range-separator="$t('至')"
  237. :start-placeholder="$t('开始月份')"
  238. :end-placeholder="$t('结束月份')">
  239. </el-date-picker>
  240. <el-date-picker
  241. v-show="!isFull"
  242. v-model="typeDate"
  243. :clearable="false"
  244. @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];
  245. typeTableParam.content.pageNumber = 1;$refs.customerTypeTable.listData();customerTypeInit()"
  246. size="small"
  247. format="yyyy-MM"
  248. value-format="yyyy-MM"
  249. type="monthrange"
  250. :range-separator="$t('至')"
  251. :start-placeholder="$t('开始月份')"
  252. :end-placeholder="$t('结束月份')">
  253. </el-date-picker>
  254. </div>
  255. <div class="mt-10 inline-15">
  256. <exportFile :param="typeTableParam" :columns="tool.tabelCol($route.name).typeTable.tablecols" fileName="客户类型情况统计" :dataid="typeMapParam.content.dataid"></exportFile>
  257. </div>
  258. <div style="display: inline-block;vertical-align: middle">
  259. <FullScroll domId="customerType" @onFull="onFull" @backFull="backFull"></FullScroll>
  260. </div>
  261. </div>
  262. </div>
  263. <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)'">
  264. <div ref="customerTypeEl" :style="windowWidth<1505?'width:54%;height:calc(100%)':windowWidth<1805?'width:54%;height:calc(100%)':windowWidth<2500?'width:45%':'width:30%'"></div>
  265. <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%'">
  266. <pageTable
  267. ref="customerTypeTable"
  268. :tablecols="tool.tabelCol($route.name).typeTable.tablecols"
  269. :param="typeTableParam"
  270. setName="typeTable"
  271. :custom="true"
  272. @detailSet="detailSet"
  273. >
  274. <template v-slot:custom="scope">
  275. <div v-if="scope.data.columnname == 'sys_tag'">
  276. <el-tag size="small" v-for="(item,index) in scope.data.data.sys_tag" :key="index" style="margin-right: 5px">{{ $t(item) }}</el-tag>
  277. </div>
  278. <div v-else-if="scope.data.columnname == 'operation'">
  279. <!-- <el-button type="text" size="small" @click="goDetail(scope.data.data,'customerTypeTable',typeTableParam,'sa_customersid')" :disabled="isFull">{{$t('详情')}}</el-button>-->
  280. <drawerTemp class="inline-16" v-if="detailPath" :data="scope.data.data" :detailPath="detailPath" :idName="idName" :disabled="isFull"
  281. :listqueryid="detailDataSet.typeTable.listqueryid" :total="detailDataSet.typeTable.total" :overview="true"></drawerTemp>
  282. </div>
  283. <div v-else-if="scope.data.columnname === 'industry'">
  284. <el-tag size="small" v-for="(item,index) in scope.data.data.industry" :key="index" style="margin-right: 5px">{{ $t(item) }}</el-tag>
  285. </div>
  286. <div v-else-if="scope.data.columnname === 'tradingstatus'">
  287. <span style="color:#3874f6" v-if="scope.data.data[[scope.data.columnname]] == '未成交'">{{$t(scope.data.data[[scope.data.columnname]])}}</span>
  288. <span style="color:#fa8c16" v-else-if="scope.data.data[[scope.data.columnname]] == '已成交'">{{$t(scope.data.data[[scope.data.columnname]])}}</span>
  289. <span style="color:#333333" v-else-if="scope.data.data[[scope.data.columnname]] == '多次成交'">{{$t(scope.data.data[[scope.data.columnname]])}}</span>
  290. </div>
  291. <div v-else-if="scope.data.columnname === 'status'">
  292. <span style="color:#3874f6" v-if="scope.data.data[[scope.data.columnname]] == '潜在'">{{$t(scope.data.data[[scope.data.columnname]])}}</span>
  293. <span style="color:#52c41a" v-else-if="scope.data.data[[scope.data.columnname]] == '合作中'">{{$t(scope.data.data[[scope.data.columnname]])}}</span>
  294. <span style="color:#999999" v-else-if="scope.data.data[[scope.data.columnname]] == '已终止'">{{$t(scope.data.data[[scope.data.columnname]])}}</span>
  295. </div>
  296. <div v-else-if="scope.data.columnname == 'scale'">
  297. {{scope.data.data.scale ? scope.data.data.scale + scope.data.data.unitname : '' }}
  298. </div>
  299. <div v-else>
  300. {{ $t(scope.data.data[scope.data.columnname]) }}
  301. </div>
  302. </template>
  303. </pageTable>
  304. </div>
  305. </div>
  306. </div>
  307. </div>
  308. <!--客户等级-->
  309. <!-- <div class="data-panel" id="customerGrad">-->
  310. <!-- <div class="panel-content-wrapper" >-->
  311. <!-- <div class="panel-header">-->
  312. <!-- <div class="title">{{$t(`客户等级情况统计`)}}</div>-->
  313. <!-- <div class="panel-select">-->
  314. <!-- <div class="mt-10 inline-16">-->
  315. <!-- <label class="search__label" >{{$t('部门')}}:</label>-->
  316. <!-- <el-cascader-->
  317. <!-- :append-to-body="false"-->
  318. <!-- placement="bottom"-->
  319. <!-- ref="selectdep"-->
  320. <!-- size="small"-->
  321. <!-- v-model="gradTableParam.content.dataid"-->
  322. <!-- :options="deplist"-->
  323. <!-- :props="{emitPath:true,expandTrigger:'hover',checkStrictly:true,label:'label',value:'departmentid',children:'children'}"-->
  324. <!-- @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.customerGradTable.listData();customerGradInit()} else {gradMapParam.content.type='';gradMapParam.content.dataid='';gradTableParam.content.dataid='';gradTableParam.content.type='';gradTableParam.content.username='';gradTableParam.content.pageNumber = 1;$refs.customerGradTable.listData();customerGradInit()}}"></el-cascader>-->
  325. <!-- </div>-->
  326. <!-- <div class="mt-10 inline-16">-->
  327. <!-- <label class="search__label" >{{$t('业务员')}}:</label>-->
  328. <!-- <el-select v-model="gradTableParam.content.username" filterable :placeholder="$t('请选择')" size="small"-->
  329. <!-- :popper-append-to-body="false"-->
  330. <!-- @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.customerGradTable.listData();customerGradInit()} else {gradMapParam.content.type='';gradMapParam.content.dataid='';gradTableParam.content.dataid='';gradTableParam.content.type='';gradTableParam.content.depname='';gradTableParam.content.pageNumber = 1;$refs.customerGradTable.listData();customerGradInit()}}"-->
  331. <!-- >-->
  332. <!-- <el-option-->
  333. <!-- v-for="item in gradMapParamSalesman"-->
  334. <!-- :key="item.index"-->
  335. <!-- :label="$t(item.name)"-->
  336. <!-- :value="item.userid">-->
  337. <!-- </el-option>-->
  338. <!-- </el-select>-->
  339. <!-- </div>-->
  340. <!-- <div class="mt-10 inline-16">-->
  341. <!-- <p class="search__label">{{$t('状态')}}:</p>-->
  342. <!-- <el-select v-model="gradTableParam.content.where.isleave" clearable style="margin-right:10px" size="small" :placeholder="$t('请选择状态')" @change="gradMapParam.content.where.isleave = gradTableParam.content.where.isleave;gradTableParam.content.username = '';gradTableParam.content.pageNumber = 1;$refs.customerGradTable.listData(null,'状态');customerGradInit(null,'状态')" >-->
  343. <!-- <el-option :label="$t('在职')" value="1"></el-option>-->
  344. <!-- <el-option :label="$t('离职')" value="2"></el-option>-->
  345. <!-- </el-select>-->
  346. <!-- </div>-->
  347. <!-- <div class="mt-10 inline-16">-->
  348. <!-- <el-button-group>-->
  349. <!-- <el-button :type="gradTableParam.content.dateType === '全部'?'primary':''" size="small" @click="gradMapParam.content.dateType = '全部';gradTableParam.content.dateType = '全部';-->
  350. <!-- gradMapParam.content.where.begdate = '';gradMapParam.content.where.enddate = '';gradTableParam.content.where.begdate = '';gradTableParam.content.where.enddate = '';gradDate = []-->
  351. <!-- gradTableParam.content.pageNumber = 1;$refs.customerGradTable.listData();customerGradInit()">{{$t(`全部`)}}</el-button>-->
  352. <!-- <el-button :type="gradTableParam.content.dateType === '本年'?'primary':''" size="small" @click="gradMapParam.content.dateType = '本年';gradTableParam.content.dateType = '本年';-->
  353. <!-- 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';-->
  354. <!-- gradTableParam.content.where.begdate = new Date().getFullYear() + '-01';gradTableParam.content.where.enddate = new Date().getFullYear() + '-12';-->
  355. <!-- gradTableParam.content.pageNumber = 1;$refs.customerGradTable.listData();customerGradInit()">{{$t(`本年`)}}</el-button>-->
  356. <!-- </el-button-group>-->
  357. <!-- </div>-->
  358. <!-- <div class="mt-10 inline-16">-->
  359. <!-- <el-date-picker-->
  360. <!-- v-show="isFull"-->
  361. <!-- :append-to-body="false"-->
  362. <!-- v-model="gradDate"-->
  363. <!-- :clearable="false"-->
  364. <!-- @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];-->
  365. <!-- gradTableParam.content.pageNumber = 1;$refs.customerGradTable.listData();customerGradInit()"-->
  366. <!-- size="small"-->
  367. <!-- format="yyyy-MM"-->
  368. <!-- value-format="yyyy-MM"-->
  369. <!-- type="monthrange"-->
  370. <!-- :range-separator="$t('至')"-->
  371. <!-- :start-placeholder="$t('开始月份')"-->
  372. <!-- :end-placeholder="$t('结束月份')">-->
  373. <!-- </el-date-picker>-->
  374. <!-- <el-date-picker-->
  375. <!-- v-show="!isFull"-->
  376. <!-- v-model="gradDate"-->
  377. <!-- :clearable="false"-->
  378. <!-- @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];-->
  379. <!-- gradTableParam.content.pageNumber = 1;$refs.customerGradTable.listData();customerGradInit()"-->
  380. <!-- size="small"-->
  381. <!-- format="yyyy-MM"-->
  382. <!-- value-format="yyyy-MM"-->
  383. <!-- type="monthrange"-->
  384. <!-- :range-separator="$t('至')"-->
  385. <!-- :start-placeholder="$t('开始月份')"-->
  386. <!-- :end-placeholder="$t('结束月份')">-->
  387. <!-- </el-date-picker>-->
  388. <!-- </div>-->
  389. <!-- <div class="mt-10 inline-15">-->
  390. <!-- <exportFile :param="gradTableParam" :columns="tool.tabelCol($route.name).typeTable.tablecols" fileName="客户等级情况统计" :dataid="gradMapParam.content.dataid"></exportFile>-->
  391. <!-- </div>-->
  392. <!-- <div style="display: inline-block;vertical-align: middle">-->
  393. <!-- <FullScroll domId="customerGrad" @onFull="onFull" @backFull="backFull"></FullScroll>-->
  394. <!-- </div>-->
  395. <!-- </div>-->
  396. <!-- </div>-->
  397. <!-- <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)'">-->
  398. <!-- <div ref="customerGradEl" :style="windowWidth<1505?'width:54%;height:calc(100%)':windowWidth<1805?'width:54%;height:calc(100%)':windowWidth<2500?'width:45%':'width:30%'"></div>-->
  399. <!-- <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%'">-->
  400. <!-- <pageTable-->
  401. <!-- ref="customerGradTable"-->
  402. <!-- :tablecols="tool.tabelCol($route.name).typeTable.tablecols"-->
  403. <!-- :param="gradTableParam"-->
  404. <!-- setName="gradTable"-->
  405. <!-- :custom="true"-->
  406. <!-- @detailSet="detailSet"-->
  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">{{ $t(item) }}</el-tag>-->
  411. <!-- </div>-->
  412. <!-- <div v-else-if="scope.data.columnname == 'operation'">-->
  413. <!--&lt;!&ndash; <el-button type="text" size="small" @click="goDetail(scope.data.data,'customerGradTable',gradTableParam,'sa_customersid')" :disabled="isFull">{{$t('详情')}}</el-button>&ndash;&gt;-->
  414. <!-- <drawerTemp class="inline-16" v-if="detailPath" :data="scope.data.data" :detailPath="detailPath" :idName="idName" :disabled="isFull"-->
  415. <!-- :listqueryid="detailDataSet.gradTable.listqueryid" :total="detailDataSet.gradTable.total" :overview="true"></drawerTemp>-->
  416. <!-- </div>-->
  417. <!-- <div v-else-if="scope.data.columnname === 'industry'">-->
  418. <!-- <el-tag size="small" v-for="(item,index) in scope.data.data.industry" :key="index" style="margin-right: 5px">{{ $t(item) }}</el-tag>-->
  419. <!-- </div>-->
  420. <!-- <div v-else-if="scope.data.columnname === 'tradingstatus'">-->
  421. <!-- <span style="color:#3874f6" v-if="scope.data.data[[scope.data.columnname]] == '未成交'">{{$t(scope.data.data[[scope.data.columnname]])}}</span>-->
  422. <!-- <span style="color:#fa8c16" v-else-if="scope.data.data[[scope.data.columnname]] == '已成交'">{{$t(scope.data.data[[scope.data.columnname]])}}</span>-->
  423. <!-- <span style="color:#333333" v-else-if="scope.data.data[[scope.data.columnname]] == '多次成交'">{{$t(scope.data.data[[scope.data.columnname]])}}</span>-->
  424. <!-- </div>-->
  425. <!-- <div v-else-if="scope.data.columnname === 'status'">-->
  426. <!-- <span style="color:#3874f6" v-if="scope.data.data[[scope.data.columnname]] == '潜在'">{{$t(scope.data.data[[scope.data.columnname]])}}</span>-->
  427. <!-- <span style="color:#52c41a" v-else-if="scope.data.data[[scope.data.columnname]] == '合作中'">{{$t(scope.data.data[[scope.data.columnname]])}}</span>-->
  428. <!-- <span style="color:#999999" v-else-if="scope.data.data[[scope.data.columnname]] == '已终止'">{{$t(scope.data.data[[scope.data.columnname]])}}</span>-->
  429. <!-- </div>-->
  430. <!-- <div v-else>-->
  431. <!-- {{ $t(scope.data.data[scope.data.columnname]) }}-->
  432. <!-- </div>-->
  433. <!-- </template>-->
  434. <!-- </pageTable>-->
  435. <!-- </div>-->
  436. <!-- </div>-->
  437. <!-- </div>-->
  438. <!-- </div>-->
  439. <!--客户联系人-->
  440. <div class="data-panel" id="customerContact">
  441. <div class="panel-content-wrapper" >
  442. <div class="panel-header">
  443. <div class="title">{{$t(`客户联系人情况统计`)}}</div>
  444. <div class="panel-select">
  445. <div class="mt-10 inline-16">
  446. <label class="search__label" >{{$t('部门')}}:</label>
  447. <el-cascader
  448. :append-to-body="false"
  449. placement="bottom"
  450. ref="selectdep"
  451. size="small"
  452. v-model="contactTableParam.content.dataid"
  453. :options="deplist"
  454. :props="{emitPath:true,expandTrigger:'hover',checkStrictly:true,label:'label',value:'departmentid',children:'children'}"
  455. @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.customerContactTable.listData();customerContactInit()} else {contactMapParam.content.type='';contactMapParam.content.dataid='';contactTableParam.content.dataid='';contactTableParam.content.type='';contactTableParam.content.username='';contactTableParam.content.pageNumber = 1;$refs.customerContactTable.listData();customerContactInit()}}"></el-cascader>
  456. </div>
  457. <div class="mt-10 inline-16">
  458. <label class="search__label" >{{$t('业务员')}}:</label>
  459. <el-select v-model="contactTableParam.content.username" filterable :placeholder="$t('请选择')" size="small"
  460. :popper-append-to-body="false"
  461. @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.customerContactTable.listData();customerContactInit()} else {contactMapParam.content.type='';contactMapParam.content.dataid='';contactTableParam.content.dataid='';contactTableParam.content.type='';contactTableParam.content.depname='';contactTableParam.content.pageNumber = 1;$refs.customerContactTable.listData();customerContactInit()}}"
  462. >
  463. <el-option
  464. v-for="item in contactMapParamSalesman"
  465. :key="item.index"
  466. :label="$t(item.name)"
  467. :value="item.userid">
  468. </el-option>
  469. </el-select>
  470. </div>
  471. <div class="mt-10 inline-16">
  472. <p class="search__label">{{$t('状态')}}:</p>
  473. <el-select v-model="contactTableParam.content.where.isleave" clearable style="margin-right:10px" size="small" :placeholder="$t('请选择状态')" @change="contactMapParam.content.where.isleave = contactTableParam.content.where.isleave;contactTableParam.content.username = '';contactTableParam.content.pageNumber = 1;$refs.customerContactTable.listData(null,'状态');customerContactInit(null,'状态')" >
  474. <el-option :label="$t('在职')" value="1"></el-option>
  475. <el-option :label="$t('离职')" value="2"></el-option>
  476. </el-select>
  477. </div>
  478. <div class="mt-10 inline-16">
  479. <el-button-group>
  480. <el-button :type="contactTableParam.content.dateType === '全部'?'primary':''" size="small" @click="contactMapParam.content.dateType = '全部';contactTableParam.content.dateType = '全部';
  481. contactMapParam.content.where.begdate = '';contactMapParam.content.where.enddate = '';contactTableParam.content.where.begdate = '';contactTableParam.content.where.enddate = '';contactDate = []
  482. contactTableParam.content.pageNumber = 1;$refs.customerContactTable.listData();customerContactInit()">{{$t(`全部`)}}</el-button>
  483. <el-button :type="contactTableParam.content.dateType === '本年'?'primary':''" size="small" @click="contactMapParam.content.dateType = '本年';contactTableParam.content.dateType = '本年';
  484. 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';
  485. contactTableParam.content.where.begdate = new Date().getFullYear() + '-01';contactTableParam.content.where.enddate = new Date().getFullYear() + '-12';
  486. contactTableParam.content.pageNumber = 1;$refs.customerContactTable.listData();customerContactInit()">{{$t(`本年`)}}</el-button>
  487. </el-button-group>
  488. </div>
  489. <div class="mt-10 inline-16">
  490. <el-date-picker
  491. v-show="isFull"
  492. :append-to-body="false"
  493. v-model="contactDate"
  494. :clearable="false"
  495. @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];
  496. contactTableParam.content.pageNumber = 1;$refs.customerContactTable.listData();customerContactInit()"
  497. size="small"
  498. format="yyyy-MM"
  499. value-format="yyyy-MM"
  500. type="monthrange"
  501. :range-separator="$t('至')"
  502. :start-placeholder="$t('开始月份')"
  503. :end-placeholder="$t('结束月份')">
  504. </el-date-picker>
  505. <el-date-picker
  506. v-show="!isFull"
  507. v-model="contactDate"
  508. :clearable="false"
  509. @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];
  510. contactTableParam.content.pageNumber = 1;$refs.customerContactTable.listData();customerContactInit()"
  511. size="small"
  512. format="yyyy-MM"
  513. value-format="yyyy-MM"
  514. type="monthrange"
  515. :range-separator="$t('至')"
  516. :start-placeholder="$t('开始月份')"
  517. :end-placeholder="$t('结束月份')">
  518. </el-date-picker>
  519. </div>
  520. <div class="mt-10 inline-15">
  521. <exportFile :param="contactTableParam" :columns="tool.tabelCol($route.name).typeTable.tablecols" fileName="客户联系人情况统计" :dataid="contactMapParam.content.dataid"></exportFile>
  522. </div>
  523. <div style="display: inline-block;vertical-align: middle">
  524. <FullScroll domId="customerContact" @onFull="onFull" @backFull="backFull"></FullScroll>
  525. </div>
  526. </div>
  527. </div>
  528. <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)'">
  529. <div ref="customerContactEl" :style="windowWidth<1505?'width:54%;height:calc(100%)':windowWidth<1805?'width:54%;height:calc(100%)':windowWidth<2500?'width:45%':'width:30%'"></div>
  530. <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%'">
  531. <pageTable
  532. ref="customerContactTable"
  533. :tablecols="tool.tabelCol($route.name).typeTable.tablecols"
  534. :param="contactTableParam"
  535. setName="contactTable"
  536. :custom="true"
  537. @detailSet="detailSet"
  538. >
  539. <template v-slot:custom="scope">
  540. <div v-if="scope.data.columnname == 'sys_tag'">
  541. <el-tag size="small" v-for="(item,index) in scope.data.data.sys_tag" :key="index" style="margin-right: 5px">{{ $t(item) }}</el-tag>
  542. </div>
  543. <div v-else-if="scope.data.columnname == 'operation'">
  544. <!-- <el-button type="text" size="small" @click="goDetail(scope.data.data,'customerContactTable',contactTableParam,'sa_customersid')" :disabled="isFull">{{$t('详情')}}</el-button>-->
  545. <drawerTemp class="inline-16" v-if="detailPath" :data="scope.data.data" :detailPath="detailPath" :idName="idName" :disabled="isFull"
  546. :listqueryid="detailDataSet.contactTable.listqueryid" :total="detailDataSet.contactTable.total" :overview="true"></drawerTemp>
  547. </div>
  548. <div v-else-if="scope.data.columnname === 'industry'">
  549. <el-tag size="small" v-for="(item,index) in scope.data.data.industry" :key="index" style="margin-right: 5px">{{ $t(item) }}</el-tag>
  550. </div>
  551. <div v-else-if="scope.data.columnname === 'tradingstatus'">
  552. <span style="color:#3874f6" v-if="scope.data.data[[scope.data.columnname]] == '未成交'">{{$t(scope.data.data[[scope.data.columnname]])}}</span>
  553. <span style="color:#fa8c16" v-else-if="scope.data.data[[scope.data.columnname]] == '已成交'">{{$t(scope.data.data[[scope.data.columnname]])}}</span>
  554. <span style="color:#333333" v-else-if="scope.data.data[[scope.data.columnname]] == '多次成交'">{{$t(scope.data.data[[scope.data.columnname]])}}</span>
  555. </div>
  556. <div v-else-if="scope.data.columnname === 'status'">
  557. <span style="color:#3874f6" v-if="scope.data.data[[scope.data.columnname]] == '潜在'">{{$t(scope.data.data[[scope.data.columnname]])}}</span>
  558. <span style="color:#52c41a" v-else-if="scope.data.data[[scope.data.columnname]] == '合作中'">{{$t(scope.data.data[[scope.data.columnname]])}}</span>
  559. <span style="color:#999999" v-else-if="scope.data.data[[scope.data.columnname]] == '已终止'">{{$t(scope.data.data[[scope.data.columnname]])}}</span>
  560. </div>
  561. <div v-else>
  562. {{ $t(scope.data.data[scope.data.columnname]) }}
  563. </div>
  564. </template>
  565. </pageTable>
  566. </div>
  567. </div>
  568. </div>
  569. </div>
  570. <!--客户关联项目-->
  571. <div class="data-panel" id="customerProject">
  572. <div class="panel-content-wrapper" >
  573. <div class="panel-header">
  574. <div class="title">{{$t(`客户关联项目情况统计`)}}</div>
  575. <div class="panel-select">
  576. <div class="mt-10 inline-16">
  577. <label class="search__label" >{{$t('部门')}}:</label>
  578. <el-cascader
  579. :append-to-body="false"
  580. placement="bottom"
  581. ref="selectdep"
  582. size="small"
  583. v-model="projectTableParam.content.dataid"
  584. :options="deplist"
  585. :props="{emitPath:true,expandTrigger:'hover',checkStrictly:true,label:'label',value:'departmentid',children:'children'}"
  586. @change="$event => {if($event.length) {projectMapParam.content.type=1;projectMapParam.content.dataid=$event[$event.length - 1];projectTableParam.content.type=1;projectTableParam.content.username='';projectTableParam.content.pageNumber = 1;$refs.customerProjectTable.listData();customerProjectInit()} else {projectMapParam.content.type='';projectMapParam.content.dataid='';projectTableParam.content.dataid='';projectTableParam.content.type='';projectTableParam.content.username='';projectTableParam.content.pageNumber = 1;$refs.customerProjectTable.listData();customerProjectInit()}}"></el-cascader>
  587. </div>
  588. <div class="mt-10 inline-16">
  589. <label class="search__label" >{{$t('业务员')}}:</label>
  590. <el-select v-model="projectTableParam.content.username" filterable :placeholder="$t('请选择')" size="small"
  591. :popper-append-to-body="false"
  592. @change="$event => {if($event) {projectMapParam.content.type=0;projectMapParam.content.dataid=$event;projectTableParam.content.type=0;projectTableParam.content.dataid=$event;projectTableParam.content.depname='';projectTableParam.content.pageNumber = 1;$refs.customerProjectTable.listData();customerProjectInit()} else {projectMapParam.content.type='';projectMapParam.content.dataid='';projectTableParam.content.dataid='';projectTableParam.content.type='';projectTableParam.content.depname='';projectTableParam.content.pageNumber = 1;$refs.customerProjectTable.listData();customerProjectInit()}}"
  593. >
  594. <el-option
  595. v-for="item in projectMapParamSalesman"
  596. :key="item.index"
  597. :label="$t(item.name)"
  598. :value="item.userid">
  599. </el-option>
  600. </el-select>
  601. </div>
  602. <div class="mt-10 inline-16">
  603. <p class="search__label">{{$t('状态')}}:</p>
  604. <el-select v-model="projectTableParam.content.where.isleave" clearable style="margin-right:10px" size="small" :placeholder="$t('请选择状态')" @change="projectMapParam.content.where.isleave = projectTableParam.content.where.isleave;projectTableParam.content.username = '';projectTableParam.content.pageNumber = 1;$refs.customerProjectTable.listData(null,'状态');customerProjectInit(null,'状态')" >
  605. <el-option :label="$t('在职')" value="1"></el-option>
  606. <el-option :label="$t('离职')" value="2"></el-option>
  607. </el-select>
  608. </div>
  609. <div class="mt-10 inline-16">
  610. <el-button-group>
  611. <el-button :type="projectTableParam.content.dateType === '全部'?'primary':''" size="small" @click="projectMapParam.content.dateType = '全部';projectTableParam.content.dateType = '全部';
  612. projectMapParam.content.where.begdate = '';projectMapParam.content.where.enddate = '';projectTableParam.content.where.begdate = '';projectTableParam.content.where.enddate = '';projectDate = []
  613. projectTableParam.content.pageNumber = 1;$refs.customerProjectTable.listData();customerProjectInit()">{{$t(`全部`)}}</el-button>
  614. <el-button :type="projectTableParam.content.dateType === '本年'?'primary':''" size="small" @click="projectMapParam.content.dateType = '本年';projectTableParam.content.dateType = '本年';
  615. projectDate = [new Date().getFullYear() + '-01',new Date().getFullYear() + '-12'];projectMapParam.content.where.begdate = new Date().getFullYear() + '-01';projectMapParam.content.where.enddate = new Date().getFullYear() + '-12';
  616. projectTableParam.content.where.begdate = new Date().getFullYear() + '-01';projectTableParam.content.where.enddate = new Date().getFullYear() + '-12';
  617. projectTableParam.content.pageNumber = 1;$refs.customerProjectTable.listData();customerProjectInit()">{{$t(`本年`)}}</el-button>
  618. </el-button-group>
  619. </div>
  620. <div class="mt-10 inline-16">
  621. <el-date-picker
  622. v-show="isFull"
  623. :append-to-body="false"
  624. v-model="projectDate"
  625. :clearable="false"
  626. @change="projectMapParam.content.dateType = '';projectMapParam.content.where.begdate = projectDate[0];projectMapParam.content.where.enddate = projectDate[1];projectTableParam.content.dateType = '';projectTableParam.content.where.begdate = projectDate[0];projectTableParam.content.where.enddate = projectDate[1];
  627. projectTableParam.content.pageNumber = 1;$refs.customerProjectTable.listData();customerProjectInit()"
  628. size="small"
  629. format="yyyy-MM"
  630. value-format="yyyy-MM"
  631. type="monthrange"
  632. :range-separator="$t('至')"
  633. :start-placeholder="$t('开始月份')"
  634. :end-placeholder="$t('结束月份')">
  635. </el-date-picker>
  636. <el-date-picker
  637. v-show="!isFull"
  638. v-model="projectDate"
  639. :clearable="false"
  640. @change="projectMapParam.content.dateType = '';projectMapParam.content.where.begdate = projectDate[0];projectMapParam.content.where.enddate = projectDate[1];projectTableParam.content.dateType = '';projectTableParam.content.where.begdate = projectDate[0];projectTableParam.content.where.enddate = projectDate[1];
  641. projectTableParam.content.pageNumber = 1;$refs.customerProjectTable.listData();customerProjectInit()"
  642. size="small"
  643. format="yyyy-MM"
  644. value-format="yyyy-MM"
  645. type="monthrange"
  646. :range-separator="$t('至')"
  647. :start-placeholder="$t('开始月份')"
  648. :end-placeholder="$t('结束月份')">
  649. </el-date-picker>
  650. </div>
  651. <div class="mt-10 inline-15">
  652. <exportFile :param="projectTableParam" :columns="tool.tabelCol($route.name).typeTable.tablecols" fileName="客户关联项目情况统计" :dataid="projectMapParam.content.dataid"></exportFile>
  653. </div>
  654. <div style="display: inline-block;vertical-align: middle">
  655. <FullScroll domId="customerProject" @onFull="onFull" @backFull="backFull"></FullScroll>
  656. </div>
  657. </div>
  658. </div>
  659. <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)'">
  660. <div ref="customerProjectEl" :style="windowWidth<1505?'width:54%;height:calc(100%)':windowWidth<1805?'width:54%;height:calc(100%)':windowWidth<2500?'width:45%':'width:30%'"></div>
  661. <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%'">
  662. <pageTable
  663. ref="customerProjectTable"
  664. :tablecols="tool.tabelCol($route.name).typeTable.tablecols"
  665. :param="projectTableParam"
  666. setName="projectTable"
  667. :custom="true"
  668. @detailSet="detailSet"
  669. >
  670. <template v-slot:custom="scope">
  671. <div v-if="scope.data.columnname == 'sys_tag'">
  672. <el-tag size="small" v-for="(item,index) in scope.data.data.sys_tag" :key="index" style="margin-right: 5px">{{ $t(item) }}</el-tag>
  673. </div>
  674. <div v-else-if="scope.data.columnname == 'operation'">
  675. <!-- <el-button type="text" size="small" @click="goDetail(scope.data.data,'customerProjectTable',projectTableParam,'sa_customersid')" :disabled="isFull">{{$t('详情')}}</el-button>-->
  676. <drawerTemp class="inline-16" v-if="detailPath" :data="scope.data.data" :detailPath="detailPath" :idName="idName" :disabled="isFull"
  677. :listqueryid="detailDataSet.projectTable.listqueryid" :total="detailDataSet.projectTable.total" :overview="true"></drawerTemp>
  678. </div>
  679. <div v-else-if="scope.data.columnname === 'industry'">
  680. <el-tag size="small" v-for="(item,index) in scope.data.data.industry" :key="index" style="margin-right: 5px">{{ $t(item) }}</el-tag>
  681. </div>
  682. <div v-else-if="scope.data.columnname === 'tradingstatus'">
  683. <span style="color:#3874f6" v-if="scope.data.data[[scope.data.columnname]] == '未成交'">{{$t(scope.data.data[[scope.data.columnname]])}}</span>
  684. <span style="color:#fa8c16" v-else-if="scope.data.data[[scope.data.columnname]] == '已成交'">{{$t(scope.data.data[[scope.data.columnname]])}}</span>
  685. <span style="color:#333333" v-else-if="scope.data.data[[scope.data.columnname]] == '多次成交'">{{$t(scope.data.data[[scope.data.columnname]])}}</span>
  686. </div>
  687. <div v-else-if="scope.data.columnname === 'status'">
  688. <span style="color:#3874f6" v-if="scope.data.data[[scope.data.columnname]] == '潜在'">{{$t(scope.data.data[[scope.data.columnname]])}}</span>
  689. <span style="color:#52c41a" v-else-if="scope.data.data[[scope.data.columnname]] == '合作中'">{{$t(scope.data.data[[scope.data.columnname]])}}</span>
  690. <span style="color:#999999" v-else-if="scope.data.data[[scope.data.columnname]] == '已终止'">{{$t(scope.data.data[[scope.data.columnname]])}}</span>
  691. </div>
  692. <div v-else>
  693. {{ $t(scope.data.data[scope.data.columnname]) }}
  694. </div>
  695. </template>
  696. </pageTable>
  697. </div>
  698. </div>
  699. </div>
  700. </div>
  701. <!--客户跟进情况-->
  702. <div class="data-panel" id="customerFllow">
  703. <div class="panel-content-wrapper" >
  704. <div class="panel-header">
  705. <div class="title">{{$t(`客户跟进情况统计`)}}</div>
  706. <div class="panel-select">
  707. <div class="mt-10 inline-16">
  708. <label class="search__label" >{{$t('部门')}}:</label>
  709. <el-cascader
  710. :append-to-body="false"
  711. placement="bottom"
  712. ref="selectdep"
  713. size="small"
  714. v-model="fllowTableParam.content.dataid"
  715. :options="deplist"
  716. :props="{emitPath:true,expandTrigger:'hover',checkStrictly:true,label:'label',value:'departmentid',children:'children'}"
  717. @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.customerFllowTable.listData();customerFllowInit()} else {fllowMapParam.content.type='';fllowMapParam.content.dataid='';fllowTableParam.content.dataid='';fllowTableParam.content.type='';fllowTableParam.content.username='';fllowTableParam.content.pageNumber = 1;$refs.customerFllowTable.listData();customerFllowInit()}}"></el-cascader>
  718. </div>
  719. <div class="mt-10 inline-16">
  720. <label class="search__label" >{{$t('业务员')}}:</label>
  721. <el-select v-model="fllowTableParam.content.username" filterable :placeholder="$t('请选择')" size="small"
  722. :popper-append-to-body="false"
  723. @change="$event => {if($event) {fllowMapParam.content.type=0;fllowMapParam.content.dataid=$event;fllowTableParam.content.type=0;fllowTableParam.content.dataid=$event;fllowTableParam.content.depname='';fllowTableParam.content.pageNumber = 1;$refs.customerFllowTable.listData();customerFllowInit()} else {fllowMapParam.content.type='';fllowMapParam.content.dataid='';fllowTableParam.content.dataid='';fllowTableParam.content.type='';fllowTableParam.content.depname='';fllowTableParam.content.pageNumber = 1;$refs.customerFllowTable.listData();customerFllowInit()}}"
  724. >
  725. <el-option
  726. v-for="item in fllowMapParamSalesman"
  727. :key="item.index"
  728. :label="$t(item.name)"
  729. :value="item.userid">
  730. </el-option>
  731. </el-select>
  732. </div>
  733. <div class="mt-10 inline-16">
  734. <p class="search__label">{{$t('状态')}}:</p>
  735. <el-select v-model="fllowTableParam.content.where.isleave" clearable style="margin-right:10px" size="small" :placeholder="$t('请选择状态')" @change="fllowMapParam.content.where.isleave = fllowTableParam.content.where.isleave;fllowTableParam.content.username = '';fllowTableParam.content.pageNumber = 1;$refs.customerFllowTable.listData(null,'状态');customerFllowInit(null,'状态')" >
  736. <el-option :label="$t('在职')" value="1"></el-option>
  737. <el-option :label="$t('离职')" value="2"></el-option>
  738. </el-select>
  739. </div>
  740. <div class="mt-10 inline-16">
  741. <el-button-group>
  742. <el-button :type="fllowTableParam.content.dateType === '全部'?'primary':''" size="small" @click="fllowMapParam.content.dateType = '全部';fllowTableParam.content.dateType = '全部';
  743. fllowMapParam.content.where.begdate = '';fllowMapParam.content.where.enddate = '';fllowTableParam.content.where.begdate = '';fllowTableParam.content.where.enddate = '';fllowDate = []
  744. fllowTableParam.content.pageNumber = 1;$refs.customerFllowTable.listData();customerFllowInit()">{{$t(`全部`)}}</el-button>
  745. <el-button :type="fllowTableParam.content.dateType === '本年'?'primary':''" size="small" @click="fllowMapParam.content.dateType = '本年';fllowTableParam.content.dateType = '本年';
  746. 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';
  747. fllowTableParam.content.where.begdate = new Date().getFullYear() + '-01';fllowTableParam.content.where.enddate = new Date().getFullYear() + '-12';
  748. fllowTableParam.content.pageNumber = 1;$refs.customerFllowTable.listData();customerFllowInit()">{{$t(`本年`)}}</el-button>
  749. </el-button-group>
  750. </div>
  751. <div class="mt-10 inline-16">
  752. <el-date-picker
  753. v-show="isFull"
  754. :append-to-body="false"
  755. v-model="fllowDate"
  756. :clearable="false"
  757. @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];
  758. fllowTableParam.content.pageNumber = 1;$refs.customerFllowTable.listData();customerFllowInit()"
  759. size="small"
  760. format="yyyy-MM"
  761. value-format="yyyy-MM"
  762. type="monthrange"
  763. :range-separator="$t('至')"
  764. :start-placeholder="$t('开始月份')"
  765. :end-placeholder="$t('结束月份')">
  766. </el-date-picker>
  767. <el-date-picker
  768. v-show="!isFull"
  769. v-model="fllowDate"
  770. :clearable="false"
  771. @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];
  772. fllowTableParam.content.pageNumber = 1;$refs.customerFllowTable.listData();customerFllowInit()"
  773. size="small"
  774. format="yyyy-MM"
  775. value-format="yyyy-MM"
  776. type="monthrange"
  777. :range-separator="$t('至')"
  778. :start-placeholder="$t('开始月份')"
  779. :end-placeholder="$t('结束月份')">
  780. </el-date-picker>
  781. </div>
  782. <div class="mt-10 inline-15">
  783. <exportFile :param="fllowTableParam" :columns="tool.tabelCol($route.name).typeTable.tablecols" fileName="客户跟进情况统计" :dataid="fllowMapParam.content.dataid"></exportFile>
  784. </div>
  785. <div style="display: inline-block;vertical-align: middle">
  786. <FullScroll domId="customerFllow" @onFull="onFull" @backFull="backFull"></FullScroll>
  787. </div>
  788. </div>
  789. </div>
  790. <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)'">
  791. <div ref="customerFllowEl" :style="windowWidth<1505?'width:54%;height:calc(100%)':windowWidth<1805?'width:54%;height:calc(100%)':windowWidth<2500?'width:45%':'width:30%'"></div>
  792. <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%'">
  793. <pageTable
  794. ref="customerFllowTable"
  795. :tablecols="tool.tabelCol($route.name).typeTable.tablecols"
  796. :param="fllowTableParam"
  797. :custom="true"
  798. setName="fllowTable"
  799. @detailSet="detailSet"
  800. >
  801. <template v-slot:custom="scope">
  802. <div v-if="scope.data.columnname == 'sys_tag'">
  803. <el-tag size="small" v-for="(item,index) in scope.data.data.sys_tag" :key="index" style="margin-right: 5px">{{ $t(item) }}</el-tag>
  804. </div>
  805. <div v-else-if="scope.data.columnname == 'operation'">
  806. <!-- <el-button type="text" size="small" @click="goDetail(scope.data.data,'customerFllowTable',fllowTableParam,'sa_customersid')" :disabled="isFull">{{$t('详情')}}</el-button>-->
  807. <drawerTemp class="inline-16" v-if="detailPath" :data="scope.data.data" :detailPath="detailPath" :idName="idName" :disabled="isFull"
  808. :listqueryid="detailDataSet.fllowTable.listqueryid" :total="detailDataSet.fllowTable.total" :overview="true"></drawerTemp>
  809. </div>
  810. <div v-else-if="scope.data.columnname === 'industry'">
  811. <el-tag size="small" v-for="(item,index) in scope.data.data.industry" :key="index" style="margin-right: 5px">{{ $t(item) }}</el-tag>
  812. </div>
  813. <div v-else-if="scope.data.columnname === 'tradingstatus'">
  814. <span style="color:#3874f6" v-if="scope.data.data[[scope.data.columnname]] == '未成交'">{{$t(scope.data.data[[scope.data.columnname]])}}</span>
  815. <span style="color:#fa8c16" v-else-if="scope.data.data[[scope.data.columnname]] == '已成交'">{{$t(scope.data.data[[scope.data.columnname]])}}</span>
  816. <span style="color:#333333" v-else-if="scope.data.data[[scope.data.columnname]] == '多次成交'">{{$t(scope.data.data[[scope.data.columnname]])}}</span>
  817. </div>
  818. <div v-else-if="scope.data.columnname === 'status'">
  819. <span style="color:#3874f6" v-if="scope.data.data[[scope.data.columnname]] == '潜在'">{{$t(scope.data.data[[scope.data.columnname]])}}</span>
  820. <span style="color:#52c41a" v-else-if="scope.data.data[[scope.data.columnname]] == '合作中'">{{$t(scope.data.data[[scope.data.columnname]])}}</span>
  821. <span style="color:#999999" v-else-if="scope.data.data[[scope.data.columnname]] == '已终止'">{{$t(scope.data.data[[scope.data.columnname]])}}</span>
  822. </div>
  823. <div v-else>
  824. {{ $t(scope.data.data[scope.data.columnname]) }}
  825. </div>
  826. </template>
  827. </pageTable>
  828. </div>
  829. </div>
  830. </div>
  831. </div>
  832. <!--12月客户跟进分析-->
  833. <div class="data-panel" id="customerFllow1">
  834. <div class="panel-content-wrapper" >
  835. <div class="panel-header">
  836. <div class="title">{{$t(`近12月客户跟进分析`)}}</div>
  837. <div class="panel-select">
  838. <div class="mt-10 inline-16">
  839. <label class="search__label" >{{$t('部门')}}:</label>
  840. <el-cascader
  841. :append-to-body="false"
  842. placement="bottom"
  843. ref="selectdep"
  844. size="small"
  845. v-model="chartParam2.content.dataid"
  846. :options="deplist"
  847. :props="{emitPath:true,expandTrigger:'hover',checkStrictly:true,label:'label',value:'departmentid',children:'children'}"
  848. @change="$event => {if($event.length) {chartParam2.content.type=1;chartParam2.content.username='';chart2Fun()} else {chartParam2.content.dataid='';chartParam2.content.type='';chartParam2.content.username='';chart2Fun()}}"></el-cascader>
  849. </div>
  850. <div class="mt-10 inline-16">
  851. <label class="search__label" >{{$t('业务员')}}:</label>
  852. <el-select v-model="chartParam2.content.username" filterable :placeholder="$t('请选择')" size="small"
  853. :popper-append-to-body="false"
  854. @change="$event => {if($event) {chartParam2.content.type=0;chartParam2.content.dataid=$event;chartParam2.content.depname='';chart2Fun()} else {chartParam2.content.dataid='';chartParam2.content.type='';chartParam2.content.depname='';chart2Fun()}}"
  855. >
  856. <el-option
  857. v-for="item in chartParam2Salesman"
  858. :key="item.index"
  859. :label="$t(item.name)"
  860. :value="item.userid">
  861. </el-option>
  862. </el-select>
  863. </div>
  864. <div class="mt-10 inline-16">
  865. <p class="search__label">{{$t('状态')}}:</p>
  866. <el-select v-model="chartParam2.content.where.isleave" clearable style="margin-right:10px" size="small" :placeholder="$t('请选择状态')" @change="chart2Fun(null,'状态')" >
  867. <el-option :label="$t('在职')" value="1"></el-option>
  868. <el-option :label="$t('离职')" value="2"></el-option>
  869. </el-select>
  870. </div>
  871. <div class="mt-10 inline-15">
  872. <label class="search__label" >{{$t('分析日期')}}:</label>
  873. <el-date-picker
  874. :append-to-body="false"
  875. v-model="chartParam2.content.enddate"
  876. format="yyyy-MM-dd"
  877. value-format="yyyy-MM-dd"
  878. type="date"
  879. size="small"
  880. placeholder="选择日期"
  881. @change="chart2Fun()">
  882. </el-date-picker>
  883. </div>
  884. <div style="display: inline-block;vertical-align: middle">
  885. <FullScroll domId="customerFllow1"></FullScroll>
  886. </div>
  887. </div>
  888. </div>
  889. <div ref="chart2" :style="windowWidth<1574?'height:calc(100% - 100px)':windowWidth<1593?'height:calc(100% - 90px)':'height:calc(100% - 55px)'"></div>
  890. </div>
  891. </div>
  892. <!--有效客户未跟进情况-->
  893. <div class="data-panel" style="height:800px" id="projectUnfllow">
  894. <div class="panel-content-wrapper" >
  895. <div class="panel-header">
  896. <div class="title">{{$t(`有效客户未跟进天数分析`)}}</div>
  897. <div class="panel-select">
  898. <div class="mt-10 inline-16">
  899. <label class="search__label" >{{$t('部门')}}:</label>
  900. <el-cascader
  901. :append-to-body="false"
  902. placement="bottom"
  903. ref="selectdep"
  904. size="small"
  905. v-model="unfllowTableParam.content.dataid"
  906. :options="deplist"
  907. :props="{emitPath:true,expandTrigger:'hover',checkStrictly:true,label:'label',value:'departmentid',children:'children'}"
  908. @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>
  909. </div>
  910. <div class="mt-10 inline-16">
  911. <label class="search__label" >{{$t('业务员')}}:</label>
  912. <el-select v-model="unfllowTableParam.content.username" filterable :placeholder="$t('请选择')" size="small"
  913. :popper-append-to-body="false"
  914. @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()}}"
  915. >
  916. <el-option
  917. v-for="item in unfllowMapParamSalesman"
  918. :key="item.index"
  919. :label="$t(item.name)"
  920. :value="item.userid">
  921. </el-option>
  922. </el-select>
  923. </div>
  924. <div class="mt-10 inline-16">
  925. <p class="search__label">{{$t('状态')}}:</p>
  926. <el-select v-model="unfllowTableParam.content.where.isleave" clearable style="margin-right:10px" size="small" :placeholder="$t('请选择状态')" @change="unfllowMapParam.content.where.isleave = unfllowTableParam.content.where.isleave;unfllowTableParam.content.username = '';unfllowTableParam.content.pageNumber = 1;$refs.customerUnfllowTable.listData(null,'状态');customerUnfllowInit(null,'状态')" >
  927. <el-option :label="$t('在职')" value="1"></el-option>
  928. <el-option :label="$t('离职')" value="2"></el-option>
  929. </el-select>
  930. </div>
  931. <div class="mt-10 inline-16">
  932. <label class="search__label" >{{$t('客户类型')}}:</label>
  933. <el-select v-model="unfllowTableParam.content.where.type" :placeholder="$t('请选择')" size="small"
  934. :popper-append-to-body="false"
  935. @change="$event => {if($event) {unfllowMapParam.content.where.type=$event;unfllowTableParam.content.pageNumber = 1;$refs.customerUnfllowTable.listData();customerUnfllowInit()} else {unfllowMapParam.content.where.type='';unfllowTableParam.content.pageNumber = 1;$refs.customerUnfllowTable.listData();customerUnfllowInit()}}"
  936. clearable>
  937. <el-option
  938. v-for="item in customerTypeList"
  939. :key="item.rowindex"
  940. :label="$t(item.value)"
  941. :value="item.value">
  942. </el-option>
  943. </el-select>
  944. </div>
  945. <div class="mt-10 inline-16">
  946. <label class="search__label" >{{$t('客户等级')}}:</label>
  947. <el-select v-model="unfllowTableParam.content.where.grade" :placeholder="$t('请选择')" size="small"
  948. :popper-append-to-body="false"
  949. @change="$event => {if($event) {unfllowMapParam.content.where.grade=$event;unfllowTableParam.content.pageNumber = 1;$refs.customerUnfllowTable.listData();customerUnfllowInit()} else {unfllowMapParam.content.where.grade='';unfllowTableParam.content.pageNumber = 1;$refs.customerUnfllowTable.listData();customerUnfllowInit()}}"
  950. clearable>
  951. <el-option
  952. v-for="item in customerGrade"
  953. :key="item.rowindex"
  954. :label="$t(item.value)"
  955. :value="item.value">
  956. </el-option>
  957. </el-select>
  958. </div>
  959. <div class="mt-10 inline-16">
  960. <label class="search__label" >{{$t('成交状态')}}:</label>
  961. <el-select v-model="unfllowTableParam.content.where.tradingstatus" :placeholder="$t('请选择')" size="small"
  962. :popper-append-to-body="false"
  963. @change="$event => {if($event) {unfllowMapParam.content.where.tradingstatus=$event;unfllowTableParam.content.pageNumber = 1;$refs.customerUnfllowTable.listData();customerUnfllowInit()} else {unfllowMapParam.content.where.tradingstatus='';unfllowTableParam.content.pageNumber = 1;$refs.customerUnfllowTable.listData();customerUnfllowInit()}}"
  964. clearable>
  965. <el-option
  966. v-for="item in tradingstatus"
  967. :key="item.rowindex"
  968. :label="$t(item.value)"
  969. :value="item.value">
  970. </el-option>
  971. </el-select>
  972. </div>
  973. <div class="mt-10 inline-16">
  974. <label class="search__label" >{{$t('分析日期')}}:</label>
  975. <el-date-picker
  976. :append-to-body="false"
  977. v-model="unfllowMapParam.content.enddate"
  978. format="yyyy-MM-dd"
  979. value-format="yyyy-MM-dd"
  980. type="date"
  981. size="small"
  982. placeholder="选择日期"
  983. @change="$event => {unfllowTableParam.content.enddate=unfllowMapParam.content.enddate;unfllowTableParam.content.pageNumber = 1;customerUnfllowInit();$refs.customerUnfllowTable.listData()}">
  984. </el-date-picker>
  985. </div>
  986. <div class="mt-10 inline-15">
  987. <exportFile :param="unfllowTableParam" :columns="tool.tabelCol($route.name).typeTable1.tablecols.splice(0,tool.tabelCol($route.name).typeTable1.tablecols.length - 1)" fileName="有效客户未跟进天数分析" :dataid="unfllowMapParam.content.dataid"></exportFile>
  988. </div>
  989. <div style="display: inline-block;vertical-align: middle">
  990. <FullScroll domId="projectUnfllow"></FullScroll>
  991. </div>
  992. </div>
  993. </div>
  994. <div style="height:calc(100% - 55px)">
  995. <div ref="customerUnfllowEl" style="height:30%"></div>
  996. <div style="font-size:16px;color:#333333;margin:10px 0">{{ $t(unfllowStatus ? unfllowStatus : '全部') }}</div>
  997. <div :style="{height:windowWidth>1521 || isFull?'calc(72% - 100px)':'calc(61% - 100px)'}">
  998. <pageTable
  999. ref="customerUnfllowTable"
  1000. :tablecols="tool.tabelCol($route.name).typeTable1.tablecols"
  1001. :param="unfllowTableParam"
  1002. :custom="true"
  1003. setName="customerUnfllow"
  1004. @detailSet="detailSet"
  1005. >
  1006. <template v-slot:custom="scope">
  1007. <div v-if="scope.data.columnname == 'sys_tag'">
  1008. <el-tag size="small" v-for="(item,index) in scope.data.data.sys_tag" :key="index" style="margin-right: 5px">{{ $t(item) }}</el-tag>
  1009. </div>
  1010. <div v-else-if="scope.data.columnname === 'industry'">
  1011. <el-tag size="small" v-for="(item,index) in scope.data.data.industry" :key="index" style="margin-right: 5px">{{ $t(item) }}</el-tag>
  1012. </div>
  1013. <div v-else-if="scope.data.columnname === 'tradingstatus'">
  1014. <span style="color:#3874f6" v-if="scope.data.data[[scope.data.columnname]] == '未成交'">{{$t(scope.data.data[[scope.data.columnname]])}}</span>
  1015. <span style="color:#fa8c16" v-else-if="scope.data.data[[scope.data.columnname]] == '已成交'">{{$t(scope.data.data[[scope.data.columnname]])}}</span>
  1016. <span style="color:#333333" v-else-if="scope.data.data[[scope.data.columnname]] == '多次成交'">{{$t(scope.data.data[[scope.data.columnname]])}}</span>
  1017. </div>
  1018. <div v-else-if="scope.data.columnname === 'status'">
  1019. <span style="color:#3874f6" v-if="scope.data.data[[scope.data.columnname]] == '潜在'">{{$t(scope.data.data[[scope.data.columnname]])}}</span>
  1020. <span style="color:#52c41a" v-else-if="scope.data.data[[scope.data.columnname]] == '合作中'">{{$t(scope.data.data[[scope.data.columnname]])}}</span>
  1021. <span style="color:#999999" v-else-if="scope.data.data[[scope.data.columnname]] == '已终止'">{{$t(scope.data.data[[scope.data.columnname]])}}</span>
  1022. </div>
  1023. <div v-else-if="scope.data.columnname == 'operation'">
  1024. <drawerTemp class="inline-16" v-if="detailPath" :data="scope.data.data" :detailPath="detailPath" :idName="idName" :disabled="isFull"
  1025. :listqueryid="detailDataSet.gradTable.listqueryid" :total="detailDataSet.gradTable.total" :overview="false"></drawerTemp>
  1026. </div>
  1027. <div v-else>
  1028. {{ $t(scope.data.data[scope.data.columnname]) }}
  1029. </div>
  1030. </template>
  1031. </pageTable>
  1032. </div>
  1033. </div>
  1034. </div>
  1035. </div>
  1036. <!--12月客户报价分析-->
  1037. <div class="data-panel" id="customerBaojia">
  1038. <div class="panel-content-wrapper" >
  1039. <div class="panel-header">
  1040. <div class="title">{{$t(`近12月客户报价分析`)}}</div>
  1041. <div class="panel-select">
  1042. <div class="mt-10 inline-16">
  1043. <label class="search__label" >{{$t('部门')}}:</label>
  1044. <el-cascader
  1045. :append-to-body="false"
  1046. placement="bottom"
  1047. ref="selectdep"
  1048. size="small"
  1049. v-model="projectParam.content.dataid"
  1050. :options="deplist"
  1051. :props="{emitPath:true,expandTrigger:'hover',checkStrictly:true,label:'label',value:'departmentid',children:'children'}"
  1052. @change="$event => {if($event.length) {projectParam.content.type=1;projectParam.content.username='';chart3Fun()} else {projectParam.content.dataid='';projectParam.content.type='';projectParam.content.username='';chart3Fun()}}"></el-cascader>
  1053. </div>
  1054. <div class="mt-10 inline-16">
  1055. <label class="search__label" >{{$t('业务员')}}:</label>
  1056. <el-select v-model="projectParam.content.username" filterable :placeholder="$t('请选择')" size="small"
  1057. :popper-append-to-body="false"
  1058. @change="$event => {if($event) {projectParam.content.type=0;projectParam.content.dataid=$event;projectParam.content.depname='';chart3Fun()} else {projectParam.content.dataid='';projectParam.content.type='';projectParam.content.depname='';chart3Fun()}}"
  1059. >
  1060. <el-option
  1061. v-for="item in projectParamSalesman"
  1062. :key="item.index"
  1063. :label="$t(item.name)"
  1064. :value="item.userid">
  1065. </el-option>
  1066. </el-select>
  1067. </div>
  1068. <div class="mt-10 inline-16">
  1069. <p class="search__label">{{$t('状态')}}:</p>
  1070. <el-select v-model="projectParam.content.where.isleave" clearable style="margin-right:10px" size="small" :placeholder="$t('请选择状态')" @change="chart3Fun(null,'状态')" >
  1071. <el-option :label="$t('在职')" value="1"></el-option>
  1072. <el-option :label="$t('离职')" value="2"></el-option>
  1073. </el-select>
  1074. </div>
  1075. <div class="mt-10 inline-15">
  1076. <label class="search__label" >{{$t('分析日期')}}:</label>
  1077. <el-date-picker
  1078. :append-to-body="false"
  1079. v-model="projectParam.content.enddate"
  1080. format="yyyy-MM-dd"
  1081. value-format="yyyy-MM-dd"
  1082. type="date"
  1083. size="small"
  1084. placeholder="选择日期"
  1085. @change="chart3Fun()">
  1086. </el-date-picker>
  1087. </div>
  1088. <div style="display: inline-block;vertical-align: middle">
  1089. <FullScroll domId="customerBaojia"></FullScroll>
  1090. </div>
  1091. </div>
  1092. </div>
  1093. <div ref="chart3" :style="windowWidth<1574?'height:calc(100% - 100px)':windowWidth<1593?'height:calc(100% - 90px)':'height:calc(100% - 55px)'"></div>
  1094. </div>
  1095. </div>
  1096. </div>
  1097. </el-scrollbar>
  1098. <dataDetail ref="detailRef" :title="title" :param="paramDetail" :person="person" :departmentid="depment" :isleave="isleave" :layout="tablecols" height="calc(100vh - 250px)">
  1099. <template #custom>
  1100. <div class="mt-10 inline-16">
  1101. <label class="search__label">{{$t('客户类型')}}:</label>
  1102. <el-select class="inline-16" v-model="paramDetail.content.where.type" size="small" :placeholder="$t('请选择')" @change="selectChange" clearable>
  1103. <el-option
  1104. v-for="item in option.typeData"
  1105. :key="item.value"
  1106. :label="$t(item.value)"
  1107. :value="item.value">
  1108. </el-option>
  1109. </el-select>
  1110. </div>
  1111. <div class="mt-10 inline-16">
  1112. <label class="search__label">{{$t(`合作状态`)}}:</label>
  1113. <el-select class="inline-16" v-model="paramDetail.content.where.status" size="small" :placeholder="$t('请选择')" @change="selectChange" clearable>
  1114. <el-option
  1115. v-for="item in option.status"
  1116. :key="item.value"
  1117. :label="$t(item.value)"
  1118. :value="item.value">
  1119. </el-option>
  1120. </el-select>
  1121. </div>
  1122. <div class="mt-10 inline-16">
  1123. <label class="search__label">{{$t('成交状态')}}:</label>
  1124. <el-select class="inline-16" v-model="paramDetail.content.where.tradingstatus" size="small" :placeholder="$t('请选择')" @change="selectChange" clearable>
  1125. <el-option
  1126. v-for="item in option.tradingstatus"
  1127. :key="item.value"
  1128. :label="$t(item.value)"
  1129. :value="item.value">
  1130. </el-option>
  1131. </el-select>
  1132. </div>
  1133. <div class="mt-10 inline-16">
  1134. <label class="search__label">{{$t('标签')}}:</label>
  1135. <el-select class="inline-16" v-model="paramDetail.content.where.tag" size="small" :placeholder="$t('请选择')" @change="selectChange" clearable multiple>
  1136. <el-option
  1137. v-for="item in option.tagData"
  1138. :key="item.tag"
  1139. :label="$t(item.tag)"
  1140. :value="item.tag">
  1141. </el-option>
  1142. </el-select>
  1143. </div>
  1144. </template>
  1145. </dataDetail>
  1146. </div>
  1147. </template>
  1148. </normalLayout>
  1149. </template>
  1150. <script>
  1151. import { DualAxes,Pie,measureTextWidth,Column,Line } from '@antv/g2plot'
  1152. import pageTable from './components/pageTable.vue'
  1153. import borderTemp from '@/HDrpManagement/dataanalysis/components/border.vue'
  1154. import FullScroll from '@/components/fullScroll/index.vue'
  1155. import exportFile from '@/components/export_file/index'
  1156. import btnSelect from "@/components/btn_select/btnSelect";
  1157. import dataDetail from '@/template/dataDetail/index'
  1158. export default {
  1159. name:'customerData',
  1160. components:{
  1161. borderTemp,pageTable,FullScroll,exportFile,btnSelect,dataDetail,
  1162. drawerTemp:() => import('@/components/normal-basic-layout/drawerDetail/index'),
  1163. },
  1164. data () {
  1165. return {
  1166. detailPath:{
  1167. path:'/customerCustomerDetail'
  1168. },
  1169. idName:'sa_customersid',
  1170. detailDataSet:{
  1171. fllowTable:{
  1172. listqueryid:'',
  1173. total:'',
  1174. },
  1175. projectTable:{
  1176. listqueryid:'',
  1177. total:'',
  1178. },
  1179. contactTable:{
  1180. listqueryid:'',
  1181. total:'',
  1182. },
  1183. gradTable:{
  1184. listqueryid:'',
  1185. total:'',
  1186. },
  1187. typeTable:{
  1188. listqueryid:'',
  1189. total:'',
  1190. },
  1191. unfllowTable:{
  1192. listqueryid:'',
  1193. total:'',
  1194. }
  1195. },
  1196. dateType:'本年',
  1197. isFull:false,
  1198. deplist:[],
  1199. personnelList:[],
  1200. windowWidth: document.documentElement.clientWidth, //实时屏幕宽度
  1201. depmentParam:{
  1202. "id": 20230620102004,
  1203. "content": {
  1204. "isleave":'1'
  1205. }
  1206. },
  1207. customerLead:[],
  1208. depment:'',
  1209. dataAll:{
  1210. data:{}
  1211. },
  1212. unfllowStatus:'',
  1213. person:'',
  1214. isleave:'1',
  1215. dualAxes:'',
  1216. customerTypeMap:'',
  1217. uvBillData:[],
  1218. transformData:[],
  1219. tradingstatus:[
  1220. {
  1221. value:'未成交'
  1222. },
  1223. {
  1224. value:'已成交'
  1225. },
  1226. {
  1227. value:'多次成交'
  1228. }
  1229. ],
  1230. customerTypeList:[],
  1231. customerGrade:[],
  1232. //近12月客户新增
  1233. chartParam1: {
  1234. "id": 20231015202504,
  1235. "content": {
  1236. "depname":'',
  1237. "username":JSON.parse(sessionStorage.getItem('accountinfo')).name,
  1238. "type": '',
  1239. "dataid": '',
  1240. "enddate": `${new Date().getFullYear()}-${new Date().getMonth() + 1}-${new Date().getDate()}`,
  1241. "where":{
  1242. "isleave":"1"
  1243. }
  1244. }
  1245. },
  1246. //近12月跟进分析
  1247. chartMap:'',
  1248. chartMapData:[],
  1249. chartParam2: {
  1250. "id": 20231017152704,
  1251. "content": {
  1252. "depname":'',
  1253. "username":JSON.parse(sessionStorage.getItem('accountinfo')).name,
  1254. "type": '',
  1255. "dataid": '',
  1256. "enddate": `${new Date().getFullYear()}-${new Date().getMonth() + 1}-${new Date().getDate()}`,
  1257. "where":{
  1258. "isleave":'1'
  1259. }
  1260. }
  1261. },
  1262. //近12月客户报价
  1263. projectMap:'',
  1264. projectMapData:[],
  1265. projectParam: {
  1266. "id": 20231018131604,
  1267. "content": {
  1268. "depname":'',
  1269. "username":JSON.parse(sessionStorage.getItem('accountinfo')).name,
  1270. "type": '',
  1271. "dataid": '',
  1272. "enddate": `${new Date().getFullYear()}-${new Date().getMonth() + 1}-${new Date().getDate()}`,
  1273. "where":{
  1274. "isleave":"1"
  1275. }
  1276. }
  1277. },
  1278. //客户类型
  1279. typeDate:[new Date().getFullYear() + '-1',new Date().getFullYear() + '-12'],
  1280. typeMapParam: {
  1281. "id": 20231015203704,
  1282. "content": {
  1283. "depname":'',
  1284. "username":JSON.parse(sessionStorage.getItem('accountinfo')).name,
  1285. "type": '',
  1286. "dataid": '',
  1287. "dateType":"本年",
  1288. "where":{
  1289. "begdate":"",
  1290. "enddate":"",
  1291. "isleave":"1"
  1292. }
  1293. }
  1294. },
  1295. typeTableParam:{
  1296. "id": 20231018164504,
  1297. "content": {
  1298. "type": '',
  1299. "dataid": '',
  1300. "username":JSON.parse(sessionStorage.getItem('accountinfo')).name,
  1301. "pageSize":20,
  1302. "pageNumber":1,
  1303. "dateType":"本年",
  1304. "where": {
  1305. "customerstype":"",// 客户各种类型 以及 无类型 ------ 客户类型情况统计列表使用该字段
  1306. "begdate":"",
  1307. "enddate":"",
  1308. "isleave":"1"
  1309. }
  1310. }
  1311. },
  1312. customerTypeData:{
  1313. map:[],
  1314. table:[]
  1315. },
  1316. //客户等级
  1317. customerGradMap:'',
  1318. gradDate:[new Date().getFullYear() + '-1',new Date().getFullYear() + '-12'],
  1319. gradMapParam: {
  1320. "id": 20231017140904,
  1321. "content": {
  1322. "depname":'',
  1323. "username":JSON.parse(sessionStorage.getItem('accountinfo')).name,
  1324. "type": '',
  1325. "dataid": '',
  1326. "dateType":"本年",
  1327. "where":{
  1328. "begdate":"",
  1329. "enddate":"",
  1330. "isleave":"1"
  1331. }
  1332. }
  1333. },
  1334. gradTableParam:{
  1335. "id": 20231018164504,
  1336. "content": {
  1337. "type": '',
  1338. "dataid": '',
  1339. "pageSize":20,
  1340. "username":JSON.parse(sessionStorage.getItem('accountinfo')).name,
  1341. "pageNumber":1,
  1342. "dateType":"本年",
  1343. "where": {
  1344. "grade": "", // 1 2 3 4 5 无等级 ------客户等级统计列表使用该字段
  1345. "begdate":"",
  1346. "enddate":"",
  1347. "isleave":"1"
  1348. }
  1349. }
  1350. },
  1351. customerGradData:{
  1352. map:[],
  1353. table:[]
  1354. },
  1355. //客户联系人
  1356. customerContactMap:'',
  1357. contactDate:[new Date().getFullYear() + '-1',new Date().getFullYear() + '-12'],
  1358. contactMapParam: {
  1359. "id": 20231017141904,
  1360. "content": {
  1361. "depname":'',
  1362. "username":JSON.parse(sessionStorage.getItem('accountinfo')).name,
  1363. "type": '',
  1364. "dataid": '',
  1365. "dateType":"本年",
  1366. "where":{
  1367. "begdate":"",
  1368. "enddate":"",
  1369. "isleave":"1"
  1370. }
  1371. }
  1372. },
  1373. contactTableParam:{
  1374. "id": 20231018164504,
  1375. "content": {
  1376. "type": '',
  1377. "dataid": '',
  1378. "username":JSON.parse(sessionStorage.getItem('accountinfo')).name,
  1379. "pageSize":20,
  1380. "pageNumber":1,
  1381. "dateType":"本年",
  1382. "where": {
  1383. "iscontacts": "", //无联系人 有联系人 ------客户联系人情况统计列表使用该字段
  1384. "begdate":"",
  1385. "enddate":"",
  1386. "isleave":"1"
  1387. }
  1388. }
  1389. },
  1390. customerContactData:{
  1391. map:[],
  1392. table:[]
  1393. },
  1394. //客户关联项目
  1395. customerProjectMap:'',
  1396. projectDate:[new Date().getFullYear() + '-1',new Date().getFullYear() + '-12'],
  1397. projectMapParam: {
  1398. "id": 20231017143504,
  1399. "content": {
  1400. "depname":'',
  1401. "username":JSON.parse(sessionStorage.getItem('accountinfo')).name,
  1402. "type": '',
  1403. "dataid": '',
  1404. "dateType":"本年",
  1405. "where":{
  1406. "begdate":"",
  1407. "enddate":"",
  1408. "isleave":"1"
  1409. }
  1410. }
  1411. },
  1412. projectTableParam:{
  1413. "id": 20231018164504,
  1414. "content": {
  1415. "type": '',
  1416. "dataid": '',
  1417. "pageSize":20,
  1418. "username":JSON.parse(sessionStorage.getItem('accountinfo')).name,
  1419. "pageNumber":1,
  1420. "dateType":"本年",
  1421. "where": {
  1422. "isproject": "", //无关联项目 有关联项目 ------客户关联项目情况统计列表使用该字段
  1423. "begdate":"",
  1424. "enddate":"",
  1425. "isleave":"1"
  1426. }
  1427. }
  1428. },
  1429. customerProjectData:{
  1430. map:[],
  1431. table:[]
  1432. },
  1433. //客户跟进情况
  1434. customerFllowMap:'',
  1435. fllowDate:[new Date().getFullYear() + '-1',new Date().getFullYear() + '-12'],
  1436. fllowMapParam: {
  1437. "id": 20231017151304,
  1438. "content": {
  1439. "depname":'',
  1440. "username":JSON.parse(sessionStorage.getItem('accountinfo')).name,
  1441. "type": '',
  1442. "dataid": '',
  1443. "dateType":"本年",
  1444. "where":{
  1445. "begdate":"",
  1446. "enddate":"",
  1447. "isleave":"1"
  1448. }
  1449. }
  1450. },
  1451. fllowTableParam:{
  1452. "id": 20231018164504,
  1453. "content": {
  1454. "type": '',
  1455. "dataid": '',
  1456. "username":JSON.parse(sessionStorage.getItem('accountinfo')).name,
  1457. "pageSize":20,
  1458. "pageNumber":1,
  1459. "dateType":"本年",
  1460. "where": {
  1461. "isfollowup": "", // 有跟进 无跟进------客户跟进情况统计列表使用该字段
  1462. "begdate":"",
  1463. "enddate":"",
  1464. "isleave":"1"
  1465. }
  1466. }
  1467. },
  1468. customerFllowData:{
  1469. map:[],
  1470. table:[]
  1471. },
  1472. //未跟进情况
  1473. customerUnfllowMap:'',
  1474. unfllowMapParam: {
  1475. "id": 20231017162504,
  1476. "content": {
  1477. "type": '',
  1478. "dataid": '',
  1479. "username":JSON.parse(sessionStorage.getItem('accountinfo')).name,
  1480. "enddate":new Date().getFullYear() + '-' + (new Date().getMonth() + 1) + '-' + new Date().getDate(),
  1481. "dataType":"",// 默认为 客户类型
  1482. "where": {
  1483. "tradingstatus": "",//成交状态
  1484. "type": "",//客户类型
  1485. "grade": "",//客户等级
  1486. "isleave":"1"
  1487. }
  1488. }
  1489. },
  1490. unfllowTableParam:{
  1491. "id": 20231018093704,
  1492. "content": {
  1493. "type": '',
  1494. "dataid": '',
  1495. "username":JSON.parse(sessionStorage.getItem('accountinfo')).name,
  1496. "enddate":new Date().getFullYear() + '-' + (new Date().getMonth() + 1) + '-' + new Date().getDate(),
  1497. "pageSize":20,
  1498. "pageNumber":1,
  1499. "where": {
  1500. "tradingstatus": "",//成交状态
  1501. "type": "",//客户类型
  1502. "grade": "",//客户等级
  1503. "dateType": "",// 时间阶段
  1504. "isleave":"1"
  1505. }
  1506. }
  1507. },
  1508. customerUnfllowData:{
  1509. map:[],
  1510. table:[]
  1511. },
  1512. dataAllParam:{
  1513. "id": 20231015170504,
  1514. "content" :{
  1515. "dataid": '',
  1516. "type":"",
  1517. "username":JSON.parse(sessionStorage.getItem('accountinfo')).name,
  1518. "dateType":'本年',
  1519. "where":{
  1520. "isleave":"1"
  1521. }
  1522. }
  1523. },
  1524. newFollowup:[],
  1525. /*业务员列表*/
  1526. chartParam1Salesman:[],
  1527. chartParam2Salesman:[],
  1528. projectParamSalesman:[],
  1529. typeMapParamSalesman:[],
  1530. gradMapParamSalesman:[],
  1531. contactMapParamSalesman:[],
  1532. projectMapParamSalesman:[],
  1533. fllowMapParamSalesman:[],
  1534. unfllowMapParamSalesman:[],
  1535. paramDetail:{
  1536. "id": 20241008144104,
  1537. "content": {
  1538. "dataid": '',
  1539. "type": '',
  1540. "username": "",
  1541. "typemx": "",
  1542. "dateType":"",
  1543. "where": {
  1544. "isleave": "",
  1545. "condition": "",
  1546. "status": "",
  1547. "tradingstatus": "",
  1548. "type": "",
  1549. "tag": []
  1550. }
  1551. },
  1552. },
  1553. title:'',
  1554. userName:JSON.parse(window.sessionStorage.getItem('active_account')).name,
  1555. tablecols:'',
  1556. option:{
  1557. typeData:[],
  1558. customerGrade:[],
  1559. tagData:[],
  1560. status:[
  1561. {
  1562. value:'潜在'
  1563. },
  1564. {
  1565. value:'合作中'
  1566. },
  1567. {
  1568. value:'已终止'
  1569. }
  1570. ],
  1571. tradingstatus:[
  1572. {
  1573. value:'未成交'
  1574. },
  1575. {
  1576. value:'已成交'
  1577. },
  1578. {
  1579. value:'多次成交'
  1580. }
  1581. ]
  1582. },
  1583. }
  1584. },
  1585. methods:{
  1586. btnClick(data){
  1587. this.dateType = data
  1588. this.dataAllParam.content.dateType = data
  1589. this.getdataAll()
  1590. },
  1591. detailSet(listqueryid,total,setName){
  1592. this.detailDataSet[setName].listqueryid = listqueryid
  1593. this.detailDataSet[setName].total = total
  1594. },
  1595. goDetail (data,refData,paramData,fieldname) {
  1596. sessionStorage.setItem('listqueryid',this.$refs[refData].listqueryid)
  1597. sessionStorage.setItem('isGo','1')
  1598. this.$router.push({
  1599. path:'/customerDetail',
  1600. query:{
  1601. id:data.sa_customersid,
  1602. rowindex:data.rowindex,
  1603. listqueryid:this.$refs[refData].listqueryid,
  1604. fieldname:fieldname
  1605. }
  1606. })
  1607. this.$store.dispatch('saveListData',{listData:this.$refs[refData].list2,param:paramData,pageTotal:this.$refs[refData].pageTotal})
  1608. this.$store.dispatch('changeDetailDrawer',true)
  1609. },
  1610. //获取数据总览
  1611. async getdataAll () {
  1612. let res = await this.$api.requested(this.dataAllParam)
  1613. this.dataAll = res.data
  1614. },
  1615. async departmentrtment() {
  1616. const res = await this.$api.requested(this.depmentParam)
  1617. this.deplist = this.createMenu(res.data.dep)
  1618. this.personnelList = res.data.hr
  1619. this.chartParam1Salesman = res.data.hr
  1620. this.chartParam2Salesman = res.data.hr
  1621. this.projectParamSalesman = res.data.hr
  1622. this.typeMapParamSalesman = res.data.hr
  1623. this.gradMapParamSalesman = res.data.hr
  1624. this.contactMapParamSalesman = res.data.hr
  1625. this.projectMapParamSalesman = res.data.hr
  1626. this.fllowMapParamSalesman = res.data.hr
  1627. this.unfllowMapParamSalesman = res.data.hr
  1628. this.person = JSON.parse(sessionStorage.getItem('accountinfo')).name
  1629. },
  1630. //12月新增初始化
  1631. async chart1Fun (init,state) {
  1632. let param = JSON.parse(JSON.stringify(this.chartParam1))
  1633. if (state == '状态'){
  1634. this.personData('chartParam1Salesman',this.chartParam1.content.where.isleave)
  1635. this.chartParam1.content.username = ''
  1636. param.content.dataid = param.content.type == 0 || param.content.type == '' ? -1:param.content.dataid
  1637. }
  1638. if (param.content.dataid instanceof Array) {
  1639. param.content.dataid = param.content.dataid[param.content.dataid.length - 1]
  1640. }
  1641. let res = await this.$api.requested(param)
  1642. /*this.uvBillData = res.data.histogram*/
  1643. let lastYear = []
  1644. let nowYear = []
  1645. let k=0
  1646. for (var i=0;i<res.data.histogram.length;i++){
  1647. if (res.data.histogram[i].key === '去年同期新增'){
  1648. lastYear[k]=res.data.histogram[i]
  1649. k++
  1650. }
  1651. }
  1652. let x=0
  1653. for (var i=0;i<res.data.histogram.length;i++){
  1654. if (res.data.histogram[i].key === '本期新增'){
  1655. nowYear[x]=res.data.histogram[i]
  1656. x++
  1657. }
  1658. }
  1659. this.uvBillData = lastYear.concat(nowYear)
  1660. this.uvBillData = this.uvBillData.map(item=>{
  1661. return {
  1662. date: item.date,
  1663. key:this.$t(item.key),
  1664. value: item.value
  1665. }
  1666. })
  1667. /*res.data.lineChart.forEach(item => item[`同比增长率`] = item.value)*/
  1668. this.transformData = res.data.lineChart
  1669. this.transformData = this.transformData.map(item=>{
  1670. return {
  1671. date: item.date,
  1672. key:this.$t(item.key),
  1673. value: item.value
  1674. }
  1675. })
  1676. if (init) {
  1677. this.dualAxes = new DualAxes(this.$refs.chart1, {
  1678. data: [this.uvBillData,this.transformData],
  1679. xField: 'date',
  1680. yField: ['value', 'value'],
  1681. geometryOptions: [
  1682. {
  1683. geometry: 'column',
  1684. isGroup: true,
  1685. seriesField: 'key',
  1686. color:['#62daab','#6395fa'],
  1687. label:{
  1688. position:top
  1689. }
  1690. },
  1691. {
  1692. geometry: 'line',
  1693. lineStyle: {
  1694. lineWidth: 2,
  1695. },
  1696. seriesField: 'key',
  1697. color: '#F6903D',
  1698. smooth: true,
  1699. label:{
  1700. formatter: (datum) =>{
  1701. return datum.value + '%'
  1702. }
  1703. }
  1704. },
  1705. ],
  1706. tooltip: {
  1707. formatter: (datum) => {
  1708. return { name: datum.key, value: datum.key == this.$t('同比增长率')? datum.value + '%' : datum.value };
  1709. },
  1710. },
  1711. });
  1712. this.dualAxes.render()
  1713. } else {
  1714. this.dualAxes.changeData([this.uvBillData,this.transformData])
  1715. }
  1716. },
  1717. //12月跟进初始化
  1718. async chart2Fun (init,state) {
  1719. let param = JSON.parse(JSON.stringify(this.chartParam2))
  1720. if (state == '状态'){
  1721. this.personData('chartParam2Salesman',this.chartParam2.content.where.isleave)
  1722. this.chartParam2.content.username = ''
  1723. param.content.dataid = param.content.type == 0 || param.content.type == '' ? -1:param.content.dataid
  1724. }
  1725. if (param.content.dataid instanceof Array) {
  1726. param.content.dataid = param.content.dataid[param.content.dataid.length - 1]
  1727. }
  1728. let res = await this.$api.requested(param)
  1729. console.log(res.data,'近12月跟进');
  1730. this.chartMapData = res.data
  1731. let lastYear = []
  1732. let nowYear = []
  1733. let k=0
  1734. for (var i=0;i< this.chartMapData .followup.length;i++){
  1735. if ( this.chartMapData .followup[i].key === '去年同期跟进'){
  1736. lastYear[k]= this.chartMapData .followup[i]
  1737. k++
  1738. }
  1739. }
  1740. let x=0
  1741. for (var i=0;i< this.chartMapData .followup.length;i++){
  1742. if ( this.chartMapData .followup[i].key === '本期跟进'){
  1743. nowYear[x] = this.chartMapData .followup[i]
  1744. x++
  1745. }
  1746. }
  1747. this.newFollowup = lastYear.concat(nowYear)
  1748. this.newFollowup = this.newFollowup.map(item=>{
  1749. return {
  1750. key:this.$t(item.key),
  1751. value: item.value,
  1752. date: item.date
  1753. }
  1754. })
  1755. this.chartMapData.tbzzl = res.data.tbzzl.map(item=>{
  1756. return {
  1757. date: item.date,
  1758. key:this.$t("同比增长率"),
  1759. value: item.value
  1760. }
  1761. })
  1762. /* this.chartMapData.tbzzl.forEach(item => item.key = '同比增长率(%)')*/
  1763. if (init) {
  1764. this.chartMap = new DualAxes(this.$refs.chart2, {
  1765. data: [this.newFollowup, this.chartMapData.tbzzl],
  1766. xField: 'date',
  1767. yField: ['value', 'value'],
  1768. geometryOptions: [
  1769. {
  1770. geometry: 'column',
  1771. seriesField:'key',
  1772. isGroup: true,
  1773. color:['#62daab','#6395fa'],
  1774. label:{
  1775. position:top
  1776. }
  1777. },
  1778. {
  1779. geometry: 'line',
  1780. seriesField:'key',
  1781. color: '#F6903D',
  1782. smooth: true,
  1783. label:{
  1784. position:top,
  1785. formatter: (datum) =>{
  1786. return datum.value + '%'
  1787. }
  1788. }
  1789. },
  1790. ],
  1791. tooltip: {
  1792. formatter: (datum) => {
  1793. return { name: datum.key, value: datum.key == this.$t('同比增长率')? datum.value + '%' : datum.value };
  1794. },
  1795. },
  1796. });
  1797. this.chartMap.render();
  1798. } else {
  1799. this.chartMap.changeData([this.newFollowup, this.chartMapData.tbzzl])
  1800. }
  1801. },
  1802. //客户类型图初始化
  1803. async customerTypeInit (init,state) {
  1804. if (state == '状态'){
  1805. this.personData('typeMapParamSalesman',this.typeMapParam.content.where.isleave)
  1806. this.typeMapParam.content.username = ''
  1807. this.typeMapParam.content.dataid = this.typeMapParam.content.type == 0 || this.typeMapParam.content.type == '' ? -1:this.typeMapParam.content.dataid
  1808. }
  1809. let res = await this.$api.requested(this.typeMapParam)
  1810. this.customerTypeData.map = res.data
  1811. this.customerTypeData.map = this.customerTypeData.map.map(item=>{
  1812. return {
  1813. ratio: item.ratio,
  1814. key:this.$t(item.key),
  1815. value: item.value,
  1816. totalqty: item.totalqty
  1817. }
  1818. })
  1819. if (init) {
  1820. this.customerTypeMap = new Pie(this.$refs.customerTypeEl, {
  1821. appendPadding: 10,
  1822. data:this.customerTypeData.map,
  1823. angleField: 'ratio',
  1824. colorField: 'key',
  1825. radius: 1,
  1826. innerRadius: 0.64,
  1827. label:{
  1828. formatter: (datum) => `${datum.ratio}%`
  1829. },
  1830. tooltip:{
  1831. formatter: (datum) => {
  1832. return { name: datum.key, value: datum.ratio + '%' };
  1833. },
  1834. },
  1835. statistic: {
  1836. title: {
  1837. offsetY: -4,
  1838. style: {
  1839. fontSize:'16px'
  1840. },
  1841. content:this.$t('客户总数')
  1842. },
  1843. content: {
  1844. offsetY: 4,
  1845. style: {
  1846. whiteSpace: 'pre-wrap',
  1847. overflow: 'hidden',
  1848. textOverflow: 'ellipsis',
  1849. fontSize:'16px'
  1850. },
  1851. customHtml: (container, view, datum, data) => {
  1852. const text = data[0].totalqty
  1853. return text
  1854. },
  1855. },
  1856. },
  1857. legend: {
  1858. position:'bottom'
  1859. },
  1860. // 添加 中心统计文本 交互
  1861. interactions: [{ type: 'element-single-selected' },{ type: 'element-active' }],
  1862. });
  1863. this.customerTypeMap.on('element:click',(v) => {
  1864. if (v.data.data.key != this.typeTableParam.content.where.customerstype) {
  1865. this.typeTableParam.content.pageNumber = 1
  1866. this.typeTableParam.content.where.customerstype = v.data.data.key
  1867. this.$refs.customerTypeTable.listData()
  1868. } else {
  1869. this.typeTableParam.content.pageNumber = 1
  1870. this.typeTableParam.content.where.customerstype = ''
  1871. this.$refs.customerTypeTable.listData()
  1872. }
  1873. })
  1874. this.customerTypeMap.render();
  1875. } else {
  1876. this.customerTypeMap.changeData(this.customerTypeData.map)
  1877. }
  1878. },
  1879. //客户等级图初始化
  1880. async customerGradInit (init,state) {
  1881. if (state == '状态'){
  1882. this.personData('gradMapParamSalesman',this.gradMapParam.content.where.isleave)
  1883. this.gradMapParam.content.username = ''
  1884. this.gradMapParam.content.dataid = this.gradMapParam.content.type == 0 || this.gradMapParam.content.type == '' ? -1:this.gradMapParam.content.dataid
  1885. }
  1886. let res = await this.$api.requested(this.gradMapParam)
  1887. this.customerGradData.map = res.data
  1888. console.log(this.customerGradData,'客户数据');
  1889. if (init) {
  1890. this.customerGradMap = new Pie(this.$refs.customerGradEl, {
  1891. appendPadding: 10,
  1892. data:this.customerGradData.map,
  1893. angleField: 'ratio',
  1894. colorField: 'key',
  1895. radius: 1,
  1896. innerRadius: 0.64,
  1897. meta: {
  1898. value: {
  1899. formatter: (v) => `${v} ¥`,
  1900. },
  1901. },
  1902. label:{
  1903. formatter: (datum) => `${datum.ratio}%`
  1904. },
  1905. tooltip:{
  1906. formatter: (datum) => {
  1907. return { name: datum.key, value: datum.ratio + '%' };
  1908. },
  1909. },
  1910. statistic: {
  1911. title: {
  1912. offsetY: -4,
  1913. style: {
  1914. fontSize:'16px'
  1915. },
  1916. content:'客户总数'
  1917. },
  1918. content: {
  1919. offsetY: 4,
  1920. style: {
  1921. whiteSpace: 'pre-wrap',
  1922. overflow: 'hidden',
  1923. textOverflow: 'ellipsis',
  1924. fontSize:'16px'
  1925. },
  1926. customHtml: (container, view, datum, data) => {
  1927. const text = data[0].totalqty
  1928. return text
  1929. },
  1930. },
  1931. },
  1932. legend: {
  1933. position:'bottom'
  1934. },
  1935. // 添加 中心统计文本 交互
  1936. interactions: [{ type: 'element-single-selected' }, { type: 'element-active' }],
  1937. });
  1938. this.customerGradMap.on('element:click',(v) => {
  1939. if (v.data.data.key != this.gradTableParam.content.where.grade) {
  1940. this.gradTableParam.content.where.grade = v.data.data.key
  1941. this.gradTableParam.content.pageNumber = 1
  1942. this.$refs.customerGradTable.listData()
  1943. } else {
  1944. this.gradTableParam.content.where.grade = ''
  1945. this.gradTableParam.content.pageNumber = 1
  1946. this.$refs.customerGradTable.listData()
  1947. }
  1948. })
  1949. this.customerGradMap.render();
  1950. } else {
  1951. this.customerGradMap.changeData(this.customerGradData.map)
  1952. }
  1953. },
  1954. //客户联系人图初始化
  1955. async customerContactInit (init,state) {
  1956. if (state == '状态'){
  1957. this.personData('contactMapParamSalesman',this.contactMapParam.content.where.isleave)
  1958. this.contactMapParam.content.username = ''
  1959. this.contactMapParam.content.dataid = this.contactMapParam.content.type == 0 || this.contactMapParam.content.type == '' ? -1:this.contactMapParam.content.dataid
  1960. }
  1961. let res = await this.$api.requested(this.contactMapParam)
  1962. this.customerContactData.map = res.data
  1963. this.customerContactData.map = this.customerContactData.map.map(item=>{
  1964. return {
  1965. ratio: item.ratio,
  1966. key:this.$t(item.key),
  1967. value: item.value,
  1968. totalqty: item.totalqty
  1969. }
  1970. })
  1971. console.log(this.customerContactData,'客户数据');
  1972. if (init) {
  1973. this.customerContactMap = new Pie(this.$refs.customerContactEl, {
  1974. appendPadding: 10,
  1975. data:this.customerContactData.map,
  1976. angleField: 'ratio',
  1977. colorField: 'key',
  1978. radius: 1,
  1979. innerRadius: 0.64,
  1980. label:{
  1981. formatter: (datum) => `${datum.ratio}%`
  1982. },
  1983. tooltip:{
  1984. formatter: (datum) => {
  1985. return { name: datum.key, value: datum.ratio + '%' };
  1986. },
  1987. },
  1988. statistic: {
  1989. title: {
  1990. offsetY: -4,
  1991. style: {
  1992. fontSize:'16px'
  1993. },
  1994. content:this.$t('客户总数')
  1995. },
  1996. content: {
  1997. offsetY: 4,
  1998. style: {
  1999. whiteSpace: 'pre-wrap',
  2000. overflow: 'hidden',
  2001. textOverflow: 'ellipsis',
  2002. fontSize:'16px'
  2003. },
  2004. customHtml: (container, view, datum, data) => {
  2005. const text = data[0].totalqty
  2006. return text
  2007. },
  2008. },
  2009. },
  2010. legend: {
  2011. position:'bottom'
  2012. },
  2013. // 添加 中心统计文本 交互
  2014. interactions: [{ type: 'element-single-selected' }, { type: 'element-active' }],
  2015. });
  2016. this.customerContactMap.on('element:click',(v) => {
  2017. if (v.data.data.key != this.contactTableParam.content.where.iscontacts) {
  2018. this.contactTableParam.content.where.iscontacts = v.data.data.key
  2019. this.contactTableParam.content.pageNumber = 1
  2020. this.$refs.customerContactTable.listData()
  2021. } else {
  2022. this.contactTableParam.content.where.iscontacts = ''
  2023. this.contactTableParam.content.pageNumber = 1
  2024. this.$refs.customerContactTable.listData()
  2025. }
  2026. })
  2027. this.customerContactMap.render();
  2028. } else {
  2029. this.customerContactMap.changeData(this.customerContactData.map)
  2030. }
  2031. },
  2032. //客户关联项目图初始化
  2033. async customerProjectInit (init,state) {
  2034. if (state == '状态'){
  2035. this.personData('projectMapParamSalesman',this.projectMapParam.content.where.isleave)
  2036. this.projectMapParam.content.username = ''
  2037. this.projectMapParam.content.dataid = this.projectMapParam.content.type == 0 || this.projectMapParam.content.type == '' ? -1:this.projectMapParam.content.dataid
  2038. }
  2039. let res = await this.$api.requested(this.projectMapParam)
  2040. this.customerProjectData.map = res.data
  2041. this.customerProjectData.map = this.customerProjectData.map.map(item=>{
  2042. return {
  2043. ratio: item.ratio,
  2044. key:this.$t(item.key),
  2045. value: item.value,
  2046. totalqty: item.totalqty
  2047. }
  2048. })
  2049. console.log(this.customerProjectData,'关联项目数据');
  2050. if (init) {
  2051. this.customerProjectMap = new Pie(this.$refs.customerProjectEl, {
  2052. appendPadding: 10,
  2053. data:this.customerProjectData.map,
  2054. angleField: 'ratio',
  2055. colorField: 'key',
  2056. radius: 1,
  2057. innerRadius: 0.64,
  2058. label:{
  2059. formatter: (datum) => `${datum.ratio}%`
  2060. },
  2061. tooltip:{
  2062. formatter: (datum) => {
  2063. return { name: datum.key, value: datum.ratio + '%' };
  2064. },
  2065. },
  2066. statistic: {
  2067. title: {
  2068. offsetY: -4,
  2069. style: {
  2070. fontSize:'16px'
  2071. },
  2072. content:this.$t('客户总数')
  2073. },
  2074. content: {
  2075. offsetY: 4,
  2076. style: {
  2077. whiteSpace: 'pre-wrap',
  2078. overflow: 'hidden',
  2079. textOverflow: 'ellipsis',
  2080. fontSize:'16px'
  2081. },
  2082. customHtml: (container, view, datum, data) => {
  2083. const text = data[0].totalqty
  2084. return text
  2085. },
  2086. },
  2087. },
  2088. legend: {
  2089. position:'bottom'
  2090. },
  2091. // 添加 中心统计文本 交互
  2092. interactions: [{ type: 'element-single-selected' }, { type: 'element-active' }],
  2093. });
  2094. this.customerProjectMap.on('element:click',(v) => {
  2095. if (v.data.data.key != this.projectTableParam.content.where.isproject) {
  2096. this.projectTableParam.content.where.isproject = v.data.data.key
  2097. this.projectTableParam.content.pageNumber = 1
  2098. this.$refs.customerProjectTable.listData()
  2099. } else {
  2100. this.projectTableParam.content.where.isproject = ''
  2101. this.projectTableParam.content.pageNumber = 1
  2102. this.$refs.customerProjectTable.listData()
  2103. }
  2104. })
  2105. this.customerProjectMap.render();
  2106. } else {
  2107. this.customerProjectMap.changeData(this.customerProjectData.map)
  2108. }
  2109. },
  2110. //客户跟进情况图初始化
  2111. async customerFllowInit (init,state) {
  2112. let param = JSON.parse(JSON.stringify(this.fllowMapParam))
  2113. if (state == '状态'){
  2114. this.personData('fllowMapParamSalesman',this.fllowMapParam.content.where.isleave)
  2115. this.fllowMapParam.content.username = ''
  2116. param.content.dataid = param.content.type == 0 || param.content.type == '' ? -1:param.content.dataid
  2117. }
  2118. if (param.content.dataid instanceof Array) {
  2119. param.content.dataid = param.content.dataid[param.content.dataid.length - 1]
  2120. }
  2121. let res = await this.$api.requested(param)
  2122. this.customerFllowData.map = res.data
  2123. this.customerFllowData.map = this.customerFllowData.map.map(item=>{
  2124. return {
  2125. ratio: item.ratio,
  2126. key:this.$t(item.key),
  2127. value: item.value,
  2128. totalqty: item.totalqty
  2129. }
  2130. })
  2131. if (init) {
  2132. this.customerFllowMap = new Pie(this.$refs.customerFllowEl, {
  2133. appendPadding: 10,
  2134. data:this.customerFllowData.map,
  2135. angleField: 'ratio',
  2136. colorField: 'key',
  2137. radius: 1,
  2138. innerRadius: 0.64,
  2139. label:{
  2140. formatter: (datum) => `${datum.ratio}%`
  2141. },
  2142. tooltip:{
  2143. formatter: (datum) => {
  2144. return { name: datum.key, value: datum.ratio + '%' };
  2145. },
  2146. },
  2147. statistic: {
  2148. title: {
  2149. offsetY: -4,
  2150. style: {
  2151. fontSize:'16px'
  2152. },
  2153. content:this.$t('客户总数')
  2154. },
  2155. content: {
  2156. offsetY: 4,
  2157. style: {
  2158. whiteSpace: 'pre-wrap',
  2159. overflow: 'hidden',
  2160. textOverflow: 'ellipsis',
  2161. fontSize:'16px'
  2162. },
  2163. customHtml: (container, view, datum, data) => {
  2164. const text = data[0].totalqty
  2165. return text
  2166. },
  2167. },
  2168. },
  2169. legend: {
  2170. position:'bottom'
  2171. },
  2172. // 添加 中心统计文本 交互
  2173. interactions: [{ type: 'element-single-selected' }, { type: 'element-active' }],
  2174. });
  2175. this.customerFllowMap.on('element:click',(v) => {
  2176. if (v.data.data.key != this.fllowTableParam.content.where.isfollowup) {
  2177. this.fllowTableParam.content.where.isfollowup = v.data.data.key
  2178. this.fllowTableParam.content.pageNumber = 1
  2179. this.$refs.customerFllowTable.listData()
  2180. } else {
  2181. this.fllowTableParam.content.where.isfollowup = ''
  2182. this.fllowTableParam.content.pageNumber = 1
  2183. this.$refs.customerFllowTable.listData()
  2184. }
  2185. })
  2186. this.customerFllowMap.render();
  2187. } else {
  2188. this.customerFllowMap.changeData(this.customerFllowData.map)
  2189. }
  2190. },
  2191. //客户未跟进情况图初始化
  2192. async customerUnfllowInit (init,state) {
  2193. if (state == '状态'){
  2194. this.personData('unfllowMapParamSalesman',this.unfllowMapParam.content.where.isleave)
  2195. this.unfllowMapParam.content.username = ''
  2196. this.unfllowMapParam.content.dataid = this.unfllowMapParam.content.type == 0 || this.unfllowMapParam.content.type == '' ? -1:this.unfllowMapParam.content.dataid
  2197. }
  2198. this.unfllowMapParam.content.date = new Date().getTime()
  2199. let res = await this.$api.requested(this.unfllowMapParam)
  2200. this.customerUnfllowData.map = res.data
  2201. this.customerUnfllowData.map = this.customerUnfllowData.map.map(item=>{
  2202. return {
  2203. datetype: this.$t(item.datetype),
  2204. key:this.$t(item.key),
  2205. value: item.value,
  2206. sequence: item.sequence
  2207. }
  2208. })
  2209. if (init) {
  2210. this.customerUnfllowMap = new Column(this.$refs.customerUnfllowEl, {
  2211. data:this.customerUnfllowData.map,
  2212. isGroup: true,
  2213. xField: 'datetype',
  2214. yField: 'value',
  2215. seriesField: 'key',
  2216. /** 设置颜色 */
  2217. //color: ['#1ca9e6', '#f88c24'],
  2218. /** 设置间距 */
  2219. // marginRatio: 0.1,
  2220. label: {
  2221. // 可手动配置 label 数据标签位置
  2222. position: 'middle', // 'top', 'middle', 'bottom'
  2223. // 可配置附加的布局方法
  2224. layout: [
  2225. // 柱形图数据标签位置自动调整
  2226. { type: 'interval-adjust-position' },
  2227. // 数据标签防遮挡
  2228. { type: 'interval-hide-overlap' },
  2229. // 数据标签文颜色自动调整
  2230. { type: 'adjust-color' },
  2231. ],
  2232. },
  2233. interactions: [{ type: 'element-highlight-by-x' }],
  2234. });
  2235. this.customerUnfllowMap.on('element:click',(v) => {
  2236. console.log(v);
  2237. if (v.data.data.datetype == this.unfllowTableParam.content.where.dateType) {
  2238. this.unfllowStatus = ''
  2239. this.unfllowTableParam.content.where.dateType = ''
  2240. this.unfllowTableParam.content.pageNumber = 1
  2241. } else {
  2242. this.unfllowStatus = v.data.data.datetype
  2243. this.unfllowTableParam.content.where.dateType = v.data.data.datetype
  2244. this.unfllowTableParam.content.pageNumber = 1
  2245. }
  2246. this.$refs.customerUnfllowTable.listData()
  2247. })
  2248. this.customerUnfllowMap.render()
  2249. } else {
  2250. this.customerUnfllowMap.changeData(this.customerUnfllowData.map)
  2251. }
  2252. },
  2253. //客户报价情况图初始化
  2254. async chart3Fun (init,state) {
  2255. let param = JSON.parse(JSON.stringify(this.projectParam))
  2256. if (state == '状态'){
  2257. this.personData('projectParamSalesman',this.projectParam.content.where.isleave)
  2258. this.projectParam.content.username = ''
  2259. param.content.dataid =param.content.type == 0 || param.content.type == '' ? -1:param.content.dataid
  2260. }
  2261. if (param.content.dataid instanceof Array) {
  2262. param.content.dataid = param.content.dataid[param.content.dataid.length - 1]
  2263. }
  2264. let res = await this.$api.requested(param)
  2265. this.projectMapData = res.data
  2266. this.projectMapData = res.data.map(item=>{
  2267. return {
  2268. date: item.date,
  2269. key:this.$t(item.key),
  2270. value: Math.round((item.value * 100)*100)/100
  2271. }
  2272. })
  2273. if (init) {
  2274. this.projectMap = new Line(this.$refs.chart3, {
  2275. data:this.projectMapData,
  2276. xField: 'date',
  2277. yField: 'value',
  2278. seriesField: 'key',
  2279. xAxis: {
  2280. /*type: 'time',*/
  2281. },
  2282. yAxis: {
  2283. // label: {
  2284. // // 数值格式化为千分位
  2285. // formatter: (v) => `${v}`.replace(/\d{1,3}(?=(\d{3})+$)/g, (s) => `${s},`),
  2286. // },
  2287. },
  2288. label:{
  2289. layout: [],
  2290. },
  2291. smooth: true,
  2292. });
  2293. this.projectMap.render()
  2294. } else {
  2295. this.projectMap.changeData(this.projectMapData)
  2296. }
  2297. },
  2298. renderStatistic(containerWidth, text, style) {
  2299. const textWidth = measureTextWidth(text, style);
  2300. const textHeight = style.lineHeight || style.fontSize
  2301. const R = containerWidth / 2;
  2302. // r^2 = (w / 2)^2 + (h - offsetY)^2
  2303. let scale = 1;
  2304. if (containerWidth < textWidth) {
  2305. scale = Math.min(Math.sqrt(Math.abs(Math.pow(R, 2) / (Math.pow(textWidth / 2, 2) + Math.pow(textHeight, 2)))), 1);
  2306. }
  2307. const textStyleStr = `width:${containerWidth}px;`;
  2308. return `<div style="${textStyleStr};font-size:${scale}em;line-height:${scale < 1 ? 1 : 'inherit'};">${text}</div>`;
  2309. },
  2310. createMenu (array) {
  2311. var that = this
  2312. let arr = []
  2313. function convertToElementTree(node) {
  2314. // 新节点
  2315. if (node.subdep.length === 0){
  2316. var elNode = {
  2317. label: node["depname"],
  2318. parentid:node['parentid'],
  2319. parentname:node['parentname'],
  2320. departmentid:node["departmentid"],
  2321. value:node["departmentid"],
  2322. remarks:node["remarks"],
  2323. isused:node["isused"],
  2324. changedate:node['changedate'],
  2325. changeby:node['changeby'],
  2326. createdate:node['createdate'],
  2327. createby:node['createby'],
  2328. depno:node['depno'],
  2329. disabled:that.pageOnlyRead,
  2330. }
  2331. }else {
  2332. var elNode = {
  2333. label: node["depname"],
  2334. parentid:node['parentid'],
  2335. parentname:node['parentname'],
  2336. departmentid:node["departmentid"],
  2337. value:node["departmentid"],
  2338. remarks:node["remarks"],
  2339. isused:node["isused"],
  2340. changedate:node['changedate'],
  2341. changeby:node['changeby'],
  2342. createdate:node['createdate'],
  2343. createby:node['createby'],
  2344. depno:node['depno'],
  2345. disabled:that.pageOnlyRead,
  2346. children: []
  2347. }
  2348. }
  2349. if (node.subdep && node.subdep.length > 0) {
  2350. // 如果存在子节点
  2351. for (var index = 0; index < node.subdep.length; index++) {
  2352. // 遍历子节点, 把每个子节点看做一颗独立的树, 传入递归构造子树, 并把结果放回到新node的children中
  2353. elNode.children.push(convertToElementTree(node.subdep[index]));
  2354. }
  2355. }
  2356. return elNode;
  2357. }
  2358. array.forEach((element) => {
  2359. arr.push(convertToElementTree(element))
  2360. });
  2361. return arr
  2362. },
  2363. selectDep (val) {
  2364. this.person = ''
  2365. let id = val[val.length - 1]
  2366. if (val.length) {
  2367. /*数据总览*/
  2368. this.dataAllParam.content.dataid = id
  2369. this.dataAllParam.content.type = 1
  2370. this.dataAllParam.content.username = ''
  2371. this.dataAllParam.content.dateType = this.dateType
  2372. this.getdataAll()
  2373. this.chartParam1.content.dataid = id
  2374. this.chartParam1.content.type = 1
  2375. this.chartParam1.content.username = ''
  2376. this.chartParam1.content.depname = ''
  2377. this.chart1Fun()
  2378. this.chartParam2.content.dataid = id
  2379. this.chartParam2.content.type = 1
  2380. this.chartParam2.content.username = ''
  2381. this.chart2Fun()
  2382. this.projectParam.content.dataid = id
  2383. this.projectParam.content.type = 1
  2384. this.projectParam.content.username = ''
  2385. this.chart3Fun()
  2386. this.typeMapParam.content.dataid = id
  2387. this.typeMapParam.content.type = 1
  2388. this.customerTypeInit()
  2389. this.typeTableParam.content.dataid = id
  2390. this.typeTableParam.content.type = 1
  2391. this.typeTableParam.content.username = ''
  2392. this.$refs.customerTypeTable.listData()
  2393. this.gradMapParam.content.dataid = id
  2394. this.gradMapParam.content.type = 1
  2395. this.customerGradInit()
  2396. this.gradTableParam.content.dataid = id
  2397. this.gradTableParam.content.type = 1
  2398. this.gradTableParam.content.username = ''
  2399. this.contactMapParam.content.dataid = id
  2400. this.contactMapParam.content.type = 1
  2401. this.customerContactInit()
  2402. this.contactTableParam.content.dataid = id
  2403. this.contactTableParam.content.type = 1
  2404. this.contactTableParam.content.username = ''
  2405. this.$refs.customerContactTable.listData()
  2406. this.projectMapParam.content.dataid = id
  2407. this.projectMapParam.content.type = 1
  2408. this.customerProjectInit()
  2409. this.projectTableParam.content.dataid = id
  2410. this.projectTableParam.content.type = 1
  2411. this.projectTableParam.content.username = ''
  2412. this.$refs.customerProjectTable.listData()
  2413. this.fllowMapParam.content.dataid = id
  2414. this.fllowMapParam.content.type = 1
  2415. this.customerFllowInit()
  2416. this.fllowTableParam.content.dataid = id
  2417. this.fllowTableParam.content.type = 1
  2418. this.fllowTableParam.content.username = ''
  2419. this.$refs.customerFllowTable.listData()
  2420. this.unfllowMapParam.content.dataid = id
  2421. this.unfllowMapParam.content.type = 1
  2422. this.customerUnfllowInit()
  2423. this.unfllowTableParam.content.dataid = id
  2424. this.unfllowTableParam.content.type = 1
  2425. this.unfllowTableParam.content.username = ''
  2426. this.$refs.customerUnfllowTable.listData()
  2427. } else {
  2428. let name = JSON.parse(sessionStorage.getItem('accountinfo')).name
  2429. /*数据总览*/
  2430. this.dataAllParam.content.dataid = ''
  2431. this.dataAllParam.content.type = ''
  2432. this.dataAllParam.content.username =name
  2433. this.dataAllParam.content.dateType = this.dateType
  2434. this.getdataAll()
  2435. this.chartParam1.content.dataid = ''
  2436. this.chartParam1.content.type =''
  2437. this.chartParam1.content.username =name
  2438. this.chartParam1.content.depname = ''
  2439. this.chart1Fun()
  2440. this.chartParam2.content.dataid = ''
  2441. this.chartParam2.content.type =''
  2442. this.chartParam2.content.username =name
  2443. this.chart2Fun()
  2444. this.projectParam.content.dataid = ''
  2445. this.projectParam.content.type =''
  2446. this.projectParam.content.username =name
  2447. this.chart3Fun()
  2448. this.typeMapParam.content.dataid = ''
  2449. this.typeMapParam.content.type =''
  2450. this.customerTypeInit()
  2451. this.typeTableParam.content.dataid = ''
  2452. this.typeTableParam.content.type =''
  2453. this.typeTableParam.content.username = name
  2454. this.$refs.customerTypeTable.listData()
  2455. this.gradMapParam.content.dataid = ''
  2456. this.gradMapParam.content.type =''
  2457. this.customerGradInit()
  2458. this.gradTableParam.content.dataid = ''
  2459. this.gradTableParam.content.type =''
  2460. this.gradTableParam.content.username = name
  2461. console.log(this.gradTableParam.content.username,'除非');
  2462. this.contactMapParam.content.dataid = ''
  2463. this.contactMapParam.content.type =''
  2464. this.customerContactInit()
  2465. this.contactTableParam.content.dataid = ''
  2466. this.contactTableParam.content.type =''
  2467. this.contactTableParam.content.username = name
  2468. this.$refs.customerContactTable.listData()
  2469. this.projectMapParam.content.dataid = ''
  2470. this.projectMapParam.content.type =''
  2471. this.customerProjectInit()
  2472. this.projectTableParam.content.dataid = ''
  2473. this.projectTableParam.content.type =''
  2474. this.projectTableParam.content.username = name
  2475. this.$refs.customerProjectTable.listData()
  2476. this.fllowMapParam.content.dataid = ''
  2477. this.fllowMapParam.content.type =''
  2478. this.customerFllowInit()
  2479. this.fllowTableParam.content.dataid = ''
  2480. this.fllowTableParam.content.type =''
  2481. this.fllowTableParam.content.username = name
  2482. this.$refs.customerFllowTable.listData()
  2483. this.unfllowMapParam.content.dataid = ''
  2484. this.unfllowMapParam.content.type =''
  2485. this.customerUnfllowInit()
  2486. this.unfllowTableParam.content.dataid = ''
  2487. this.unfllowTableParam.content.type =''
  2488. this.unfllowTableParam.content.username = name
  2489. this.$refs.customerUnfllowTable.listData()
  2490. }
  2491. },
  2492. selectPerson(id){
  2493. this.depment = ''
  2494. this.dataAllParam.content.dataid = id
  2495. this.dataAllParam.content.type = 0
  2496. this.dataAllParam.content.username = this.person
  2497. this.dataAllParam.content.dateType = this.dateType
  2498. this.getdataAll()
  2499. this.chartParam1.content.dataid = id
  2500. this.chartParam1.content.type = 0
  2501. this.chartParam1.content.username = this.person
  2502. this.chartParam1.content.depname = ''
  2503. this.chart1Fun()
  2504. this.chartParam2.content.dataid = id
  2505. this.chartParam2.content.type = 0
  2506. this.chartParam2.content.username = this.person
  2507. this.chart2Fun()
  2508. this.projectParam.content.dataid = id
  2509. this.projectParam.content.type = 0
  2510. this.projectParam.content.username = this.person
  2511. this.chart3Fun()
  2512. this.typeMapParam.content.dataid = id
  2513. this.typeMapParam.content.type = 0
  2514. this.customerTypeInit()
  2515. this.typeTableParam.content.dataid = id
  2516. this.typeTableParam.content.type = 0
  2517. this.typeTableParam.content.username = this.person
  2518. this.$refs.customerTypeTable.listData()
  2519. this.gradMapParam.content.dataid = id
  2520. this.gradMapParam.content.type = 0
  2521. this.customerGradInit()
  2522. this.gradTableParam.content.dataid = id
  2523. this.gradTableParam.content.type = 0
  2524. this.gradTableParam.content.username = this.person
  2525. this.contactMapParam.content.dataid = id
  2526. this.contactMapParam.content.type = 0
  2527. this.customerContactInit()
  2528. this.contactTableParam.content.dataid = id
  2529. this.contactTableParam.content.type = 0
  2530. this.contactTableParam.content.username = this.person
  2531. this.$refs.customerContactTable.listData()
  2532. this.projectMapParam.content.dataid = id
  2533. this.projectMapParam.content.type = 0
  2534. this.customerProjectInit()
  2535. this.projectTableParam.content.dataid = id
  2536. this.projectTableParam.content.type = 0
  2537. this.projectTableParam.content.username = this.person
  2538. this.$refs.customerProjectTable.listData()
  2539. this.fllowMapParam.content.dataid = id
  2540. this.fllowMapParam.content.type = 0
  2541. this.customerFllowInit()
  2542. this.fllowTableParam.content.dataid = id
  2543. this.fllowTableParam.content.type = 0
  2544. this.fllowTableParam.content.username = this.person
  2545. this.$refs.customerFllowTable.listData()
  2546. this.unfllowMapParam.content.dataid = id
  2547. this.unfllowMapParam.content.type = 0
  2548. this.customerUnfllowInit()
  2549. this.unfllowTableParam.content.dataid = id
  2550. this.unfllowTableParam.content.type = 0
  2551. this.unfllowTableParam.content.username = this.person
  2552. this.$refs.customerUnfllowTable.listData()
  2553. },
  2554. leaveChange(){
  2555. this.dataAllParam.content.where.isleave = this.isleave
  2556. this.dataAllParam.content.dateType = this.dateType
  2557. this.person = ''
  2558. this.dataAllParam.content.dataid = this.dataAllParam.content.type == 0?-1:this.dataAllParam.content.dataid
  2559. this.getdataAll()
  2560. this.chartParam1.content.where.isleave = this.isleave
  2561. this.chartParam1.content.username = ''
  2562. this.chartParam1.content.dataid = this.chartParam1.content.type == 0?-1:this.chartParam1.content.dataid
  2563. this.chart1Fun()
  2564. this.chartParam2.content.where.isleave = this.isleave
  2565. this.chartParam2.content.username = ''
  2566. this.chartParam2.content.dataid = this.chartParam2.content.type == 0?-1:this.chartParam2.content.dataid
  2567. this.chart2Fun()
  2568. this.projectParam.content.where.isleave = this.isleave
  2569. this.projectParam.content.username = ''
  2570. this.projectParam.content.dataid = this.projectParam.content.type == 0?-1:this.projectParam.content.dataid
  2571. this.chart3Fun()
  2572. this.typeTableParam.content.where.isleave = this.isleave
  2573. this.typeTableParam.content.username = ''
  2574. this.typeTableParam.content.dataid = this.typeTableParam.content.type == 0?-1:this.typeTableParam.content.dataid
  2575. this.$refs.customerTypeTable.listData()
  2576. this.typeMapParam.content.where.isleave = this.isleave
  2577. this.typeMapParam.content.username = ''
  2578. this.typeMapParam.content.dataid = this.typeMapParam.content.type == 0?-1:this.typeMapParam.content.dataid
  2579. this.customerTypeInit()
  2580. this.gradMapParam.content.where.isleave = this.isleave
  2581. this.gradMapParam.content.username = ''
  2582. this.gradMapParam.content.dataid = this.gradMapParam.content.type == 0?-1:this.gradMapParam.content.dataid
  2583. this.customerGradInit()
  2584. this.gradTableParam.content.where.isleave = this.isleave
  2585. this.gradTableParam.content.username = ''
  2586. this.gradTableParam.content.dataid = this.gradTableParam.content.type == 0?-1:this.gradTableParam.content.dataid
  2587. this.$refs.customerGradTable.listData()
  2588. this.contactMapParam.content.where.isleave = this.isleave
  2589. this.contactMapParam.content.username = ''
  2590. this.contactMapParam.content.dataid = this.contactMapParam.content.type == 0?-1:this.contactMapParam.content.dataid
  2591. this.customerContactInit()
  2592. this.contactTableParam.content.where.isleave = this.isleave
  2593. this.contactTableParam.content.username = ''
  2594. this.contactTableParam.content.dataid = this.contactTableParam.content.type == 0?-1:this.contactTableParam.content.dataid
  2595. this.$refs.customerContactTable.listData()
  2596. this.projectMapParam.content.where.isleave = this.isleave
  2597. this.projectMapParam.content.username = ''
  2598. this.projectMapParam.content.dataid = this.projectMapParam.content.type == 0?-1:this.projectMapParam.content.dataid
  2599. this.customerProjectInit()
  2600. this.projectTableParam.content.where.isleave = this.isleave
  2601. this.projectTableParam.content.username = ''
  2602. this.projectTableParam.content.dataid = this.projectTableParam.content.type == 0?-1:this.projectTableParam.content.dataid
  2603. this.$refs.customerProjectTable.listData()
  2604. this.fllowMapParam.content.where.isleave = this.isleave
  2605. this.fllowMapParam.content.username = ''
  2606. this.fllowMapParam.content.dataid = this.fllowMapParam.content.type == 0?-1:this.fllowMapParam.content.dataid
  2607. this.customerFllowInit()
  2608. this.fllowTableParam.content.where.isleave = this.isleave
  2609. this.fllowTableParam.content.username = ''
  2610. this.fllowTableParam.content.dataid = this.fllowTableParam.content.type == 0?-1:this.fllowTableParam.content.dataid
  2611. this.$refs.customerFllowTable.listData()
  2612. this.unfllowMapParam.content.where.isleave = this.isleave
  2613. this.unfllowMapParam.content.username = ''
  2614. this.unfllowMapParam.content.dataid = this.unfllowMapParam.content.type == 0?-1:this.unfllowMapParam.content.dataid
  2615. this.customerUnfllowInit()
  2616. this.unfllowTableParam.content.where.isleave = this.isleave
  2617. this.unfllowTableParam.content.username = ''
  2618. this.unfllowTableParam.content.dataid = this.unfllowTableParam.content.type == 0?-1:this.unfllowTableParam.content.dataid
  2619. this.$refs.customerUnfllowTable.listData()
  2620. this.personDataAll()
  2621. },
  2622. async getCustomerType () {
  2623. const siteid = JSON.parse(sessionStorage.getItem('active_account')).siteid
  2624. const res = await this.$api.requested({
  2625. "classname": "sysmanage.develop.optiontype.optiontype",
  2626. "method": "optiontypeselect",
  2627. "content": {
  2628. "pageNumber": 1,
  2629. "pageSize": 20,
  2630. "typename": "customertypemx",
  2631. "parameter": {
  2632. "siteid": siteid
  2633. }
  2634. }
  2635. })
  2636. this.customerTypeList = res.data
  2637. console.log(this.customerTypeList,'客户类型');
  2638. this.$store.dispatch('optiontypeselect','agentgrade').then(res=>{
  2639. this.customerGrade = res.data
  2640. })
  2641. },
  2642. /*获取新的业务员列表*/
  2643. async personDataAll(){
  2644. let param = {
  2645. id: 20230620102004,
  2646. content: {
  2647. isleave:this.isleave
  2648. },
  2649. }
  2650. const res = await this.$api.requested(param)
  2651. this.personnelList = res.data.hr
  2652. this.chartParam1Salesman = res.data.hr
  2653. this.chartParam2Salesman = res.data.hr
  2654. this.projectParamSalesman = res.data.hr
  2655. this.typeMapParamSalesman = res.data.hr
  2656. this.gradMapParamSalesman = res.data.hr
  2657. this.contactMapParamSalesman = res.data.hr
  2658. this.projectMapParamSalesman = res.data.hr
  2659. this.fllowMapParamSalesman = res.data.hr
  2660. this.unfllowMapParamSalesman = res.data.hr
  2661. },
  2662. /*获取新的业务员列表*/
  2663. async personData(keyName,isleave){
  2664. let param = {
  2665. id: 20230620102004,
  2666. content: {
  2667. isleave:isleave
  2668. },
  2669. }
  2670. const res = await this.$api.requested(param)
  2671. this[keyName] = res.data.hr
  2672. },
  2673. /*全屏*/
  2674. onFull(){
  2675. this.isFull = true
  2676. },
  2677. /*退出全屏*/
  2678. backFull(){
  2679. this.isFull = false
  2680. },
  2681. onClick(title){
  2682. this.title = this.dateType + '_' + title
  2683. this.paramDetail.content.dataid = this.person?this.person == this.userName?JSON.parse(sessionStorage.getItem('active_account')).userid:this.person:this.depment[0]
  2684. this.paramDetail.content.type = this.person?'0':'1'
  2685. this.paramDetail.content.typemx = title
  2686. this.paramDetail.content.where.isleave = this.isleave
  2687. this.paramDetail.content.dateType = this.dateType
  2688. this.$refs.detailRef.onShow()
  2689. },
  2690. /*标签列表*/
  2691. async tagList(){
  2692. const res = await this.$api.requested({
  2693. "id":20221013104401,
  2694. "content":{
  2695. "isExport":1,
  2696. "pageNumber":1,
  2697. "pageSize":100,
  2698. "sys_systemtagid":2,
  2699. "where":{
  2700. "condition":""
  2701. }
  2702. }
  2703. })
  2704. this.option.tagData = this.unique(res.data)
  2705. },
  2706. /*去重*/
  2707. unique(arr) {
  2708. const res = new Map();
  2709. return arr.filter((arr) => !res.has(arr.tag) && res.set(arr.tag, 1));
  2710. },
  2711. selectChange(){
  2712. this.paramDetail.content.pageNumber = 1
  2713. this.$refs.detailRef.listData()
  2714. },
  2715. },
  2716. async mounted () {
  2717. this.departmentrtment()
  2718. this.getdataAll()
  2719. this.chart1Fun(true)
  2720. this.chart2Fun(true)
  2721. this.customerTypeInit(true)
  2722. this.customerGradInit(true)
  2723. this.customerContactInit(true)
  2724. this.customerProjectInit(true)
  2725. this.customerFllowInit(true)
  2726. this.customerUnfllowInit(true)
  2727. this.chart3Fun(true)
  2728. this.getCustomerType()
  2729. this.tagList()
  2730. let baseWidth = 1920
  2731. document.querySelector('html').style.fontSize = `${100 / baseWidth}vw`
  2732. /* 获取客户等级 */
  2733. let res2 = await this.$store.dispatch('optiontypeselect','customergrade')
  2734. this.customerLead = res2.data
  2735. console.log(this.customerLead,'客户等级');
  2736. /*客户类型*/
  2737. let res3 = await this.$store.dispatch('optiontypeselect','customertypemx')
  2738. this.option.typeData = res3.data
  2739. console.log(`${new Date().getFullYear()}-${new Date().getMonth() + 1}-${new Date().getDate()}`);
  2740. var that = this;
  2741. // <!--把window.onresize事件挂在到mounted函数上-->
  2742. window.onresize = () => {
  2743. return (() => {
  2744. window.fullWidth = document.documentElement.clientWidth;
  2745. that.windowWidth = window.fullWidth; // 宽
  2746. console.log(that.windowWidth,'屏幕宽度')
  2747. })()
  2748. };
  2749. },
  2750. created() {
  2751. this.tablecols = this.tool.tabelCol(this.$route.name).customerDetail.tablecols
  2752. }
  2753. }
  2754. </script>
  2755. <style>
  2756. .basic__layout__panel {
  2757. height: 100% !important;
  2758. }
  2759. </style>
  2760. <style scoped>
  2761. *{
  2762. box-sizing: border-box;
  2763. }
  2764. .data-all {
  2765. padding: 16px;
  2766. width: 100%;
  2767. border-radius: 5rem;
  2768. border: 1rem;
  2769. box-shadow: 0rem 2rem 5rem 0rem rgba(0, 0, 0, 0.15);
  2770. background: #FFFFFF;
  2771. margin-top: 16px;
  2772. }
  2773. .data-all .data-left {
  2774. border-right: 1rem solid rgb(136,136,146);
  2775. display: flex;
  2776. flex-wrap: wrap;
  2777. }
  2778. .data-all .data-right {
  2779. padding-left: 50rem;
  2780. display: flex;
  2781. flex-wrap: wrap;
  2782. }
  2783. .data-all .data-left,.data-right {
  2784. display: flex;
  2785. }
  2786. .data-all .data-item {
  2787. width: 186rem;
  2788. margin-bottom: 20px;
  2789. }
  2790. .data-all .data-item p:nth-child(1) {
  2791. font-size: 26px;
  2792. font-weight: 5px;
  2793. font-family: 'ArialMT', 'Arial', sans-serif;
  2794. /*color: rgba(0, 0, 0, 0.85);*/
  2795. }
  2796. .data-all .data-item p:nth-child(2) {
  2797. font-size: 14px;
  2798. font-weight: 5px;
  2799. font-family: 'PingFangSC-Regular', 'PingFang SC', sans-serif;
  2800. color: rgba(0, 0, 0, 0.65)
  2801. }
  2802. .data-all .data-all-wrapper {
  2803. display: flex;
  2804. }
  2805. .data-panel {
  2806. padding: 16px;
  2807. margin-top: 16px;
  2808. height: 500px;
  2809. border-radius: 5rem;
  2810. border: 1rem;
  2811. box-shadow: 0rem 2rem 5rem 0rem rgba(0, 0, 0, 0.15);
  2812. background: #FFFFFF;
  2813. }
  2814. .data-panel .panel-header {
  2815. display: flex;
  2816. justify-content: space-between;
  2817. align-items: center;
  2818. margin-bottom: 10px;
  2819. }
  2820. .title {
  2821. min-width: 220px;
  2822. }
  2823. .title::before {
  2824. content:'';
  2825. border-left: 4px #3874f6 solid;
  2826. padding-right: 10px;
  2827. }
  2828. .panel-content-wrapper {
  2829. background:#ffffff;
  2830. height: 100%;
  2831. }
  2832. .panel-content {
  2833. display: flex;
  2834. align-items: center;
  2835. justify-content: space-between;
  2836. height: calc(100% - 53px);
  2837. }
  2838. .panel-content div:first-child {
  2839. padding: 0 5px;
  2840. }
  2841. .search__label {
  2842. margin-right: 5px !important;
  2843. }
  2844. .mt-10 {
  2845. margin-right: 15px !important;
  2846. }
  2847. .panel-table {
  2848. height: 100%;
  2849. }
  2850. .div-hover-click:hover {
  2851. color: #3874f6;
  2852. }
  2853. </style>