pointHome.vue 69 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303
  1. <template>
  2. <div>
  3. <div style="width: 100%;">
  4. <div v-if="noticeRole&&pastdueDate&&user_infos.try_user==0">
  5. <div style="z-index:1;width:100%;margin-bottom: 10px;">
  6. <div style="width: 100%;overflow: hidden;">
  7. <marquee scrollamount="5" onmouseover="this.stop()" onmouseout="this.start()">
  8. <div style="color:#ff880e;font-size:16px;">
  9. {{ pastdueDate }}&nbsp;&nbsp;&nbsp;
  10. <a class="vtRenew" @click="innerVisible = true">立即续费>></a>
  11. </div>
  12. </marquee>
  13. </div>
  14. </div>
  15. </div>
  16. <div style="margin: 0 auto;width: 100%;margin-bottom: 10px;" v-if="experience_data">
  17. <el-carousel trigger="click" :interval="6000" height="125px">
  18. <el-carousel-item v-for="(item, index) in banner" :key="index">
  19. <div class="bacimg" :style="{backgroundImage: returnImgIndex(item.image)}" style="no-repeat center;" @click="bannerImagePush(item.key)"></div>
  20. </el-carousel-item>
  21. </el-carousel>
  22. </div>
  23. <el-row style="width: 100%;">
  24. <el-col :span="18">
  25. <div class="flex-box-ce br-5" style="background-color: #fff;padding:20px;">
  26. <div class="flex-box-ce flex-1" v-loading="send_site_info_loading">
  27. <div style="margin-right: 10px;cursor:pointer;" v-if="noticeRole" @click="$router.push({ path: '/company_info', params: { activeName: 'second' } })">
  28. <userImage :id="user_info.id" :img_url="user_info.img_url" :user_name="user_info.name" width="50px" height="50px"></userImage>
  29. </div>
  30. <div style="margin-right: 10px;" v-else>
  31. <userImage :id="user_info.id" :img_url="user_info.img_url" :user_name="user_info.name" width="50px" height="50px"></userImage>
  32. </div>
  33. <div>
  34. <div class="flex-box-ce" style="margin-bottom: 6px;font-size: 14px;color: #666;font-weight: 700;">
  35. <div style="font-size: 16px;font-weight: 700;padding-right:15px;" class="black">{{ user_info.name }}</div>
  36. <!-- <span v-show="time <= 4">夜深了</span>
  37. <span v-show="time > 4 && time <= 11">早上好</span>
  38. <span v-show="time > 11 && time <= 14">中午好</span>
  39. <span v-show="time > 14 && time <= 19">下午好</span>
  40. <span v-show="time > 19 && time <= 24">晚上好</span> -->
  41. </div>
  42. <!-- <div class="fontColorC">
  43. <span v-show="time <= 4">烦恼尽退散</span>
  44. <span v-show="time > 4 && time <= 11">又是美好的一天</span>
  45. <span v-show="time > 11 && time <= 14">吃饱睡好更有动力</span>
  46. <span v-show="time > 14 && time <= 19">致敬奋斗中的自己</span>
  47. <span v-show="time > 19 && time <= 24">该养精蓄锐了</span>
  48. </div> -->
  49. </div>
  50. </div>
  51. <div class="flex-box-ce flex-3" v-if="supAuthority=='creator'">
  52. <div class="bsItem flex-box-ce flex-1" v-for="(item, index) in fits" :key="index" @click="openGzd(item.url)">
  53. <img :src="item.img" @click="openGzd(item.url)" style="width:46px;height:46px;margin-right:5px;" />
  54. <div>
  55. <b style="color:#303133;font-size:16px;">{{ item.name }} <span v-if="item.num" class="el-badge__content">{{item.num}}</span></b>
  56. <br />
  57. <span style="color:#606266;font-size:12px;display: inline-block;margin-top:8px;">{{ item.value }}</span>
  58. </div>
  59. </div>
  60. </div>
  61. <div class="flex-box-ce flex-3 cursor" v-else v-loading="authorityManagerHeaderLoad" style="text-align: center;">
  62. <div class="flex-2 flex-box-ce" style="border-right: 1px #cecccc solid;" @click="openUrl">
  63. <div class="flex-1">
  64. <div class="blue-num">{{ authorityManagerHeaders.b_today}}</div>
  65. <div class="blue-text">今日B分</div>
  66. </div>
  67. <div class="flex-1">
  68. <div class="blue-num">{{ authorityManagerHeaders.b_week}}</div>
  69. <div class="blue-text">本周B分</div>
  70. </div>
  71. <div class="flex-1">
  72. <div class="blue-num">{{ authorityManagerHeaders.b}}</div>
  73. <div class="blue-text">本月B分</div>
  74. </div>
  75. <div class="flex-1">
  76. <div class="blue-num">{{ authorityManagerHeaders.a}}</div>
  77. <div class="blue-text">本月A分</div>
  78. </div>
  79. </div>
  80. <div class="flex-1" @click="$router.push({ path: '/total_rank' })">
  81. <div class="blue-num">{{ authorityManagerHeaders.b_total}}</div>
  82. <div class="blue-text">累计B分</div>
  83. </div>
  84. </div>
  85. </div>
  86. <div class="raiders_box">
  87. <div class="flex-box-ce">
  88. <div class="flex-1"><b class="title">排行榜</b></div>
  89. <div><span class="noremind" @click="$router.push({ path: RankingPush })">查看详情</span></div>
  90. </div>
  91. <div v-loading="tabPositionLoad">
  92. <div style="width:100%;height:30px;margin:20px 0;" class="flex-box-ce">
  93. <div class="group-name clamp2" :class="tabPosition==index?'activeGroup':''" v-for="(item, index) in rankingList" :key="index" @click="tabPosition=index;tabPositions(item)">{{item.group_name}}</div>
  94. </div>
  95. <div style="padding-top:30px;height:100%;" class="flex-box-ce" v-loading="addUpRankingLoad">
  96. <div style="text-align: center;" class="flex-1" v-if="rankingListDetails.length == 0">
  97. <NoData content="暂无积分数据"></NoData>
  98. </div>
  99. <div v-else v-for="(item, index) in rankingListDetails" :key="index" style="text-align:center;width:80px;cursor:pointer;margin:0 20px;">
  100. <div class="" style="cursor:pointer;position: relative;">
  101. <img
  102. v-if="item.rank <= 3"
  103. :src="item.rank == 1 ? 'static/images/statistics_NO1.png' : item.rank == 2 ? 'static/images/statistics_NO2.png' : item.rank == 3 ? 'static/images/statistics_NO3.png' : ''"
  104. style="z-index:1;position: absolute;right: 50%;top: -18px;font-size:28px;margin-right:-16px"
  105. />
  106. <div
  107. v-if="item.rank == 4 || item.rank == 5"
  108. style="z-index:1;position: absolute;left: 28px;top: -14px;width:24px;height:24px;border:1px solid #C0C4CC;border-radius:50%;background-color:#fff;font-size:12px;text-align-center;line-height:24px;color:#303133;"
  109. >
  110. <b style="">{{ item.rank }}</b>
  111. </div>
  112. <div
  113. v-if="item.employee_id == user_infos.id && index == 0 && item.rank > 3"
  114. style="z-index:1;position: absolute;left: 28px;top: -14px;width:24px;height:24px;border:1px solid #C0C4CC;border-radius:50%;background-color:#fff;font-size:12px;text-align-center;line-height:24px;color:#303133;"
  115. >
  116. <b>{{ item.rank }}</b>
  117. </div>
  118. <div style="position: absolute;left: 10px;top: -16px;z-index:2;">
  119. <div
  120. v-if="index == 5 || index == 6"
  121. style="width:60px;height:24px;border:1px solid #C0C4CC;background-color:#fff;border-radius:20px;font-size:12px;color:#303133;text-align:center;line-height:24px"
  122. >
  123. <b>{{ index == 5 ? '倒数第2' : index == 6 ? '倒数第1' : '' }}</b>
  124. </div>
  125. </div>
  126. <userImage :id="item.employee_id" :img_url="item.employee_img_url" fontSize="16" :user_name="item.employee_name" width="60px" height="60px"></userImage>
  127. </div>
  128. <span
  129. style="color:#303133;font-size:14px;text-align:center;margin-top:10px;display: inline-block;width:100%;display: block;text-overflow: ellipsis;white-space: nowrap;overflow: hidden;"
  130. >
  131. {{ item.employee_name }}
  132. <span v-if="item.employee_id == user_infos.id">(我)</span>
  133. </span>
  134. </div>
  135. </div>
  136. </div>
  137. </div>
  138. <div class="raiders_box">
  139. <div style="position: relative;">
  140. <div><b class="title" style="margin-bottom:15px;display:block">积分构成
  141. <el-tooltip placement="top">
  142. <div slot="content">饼图仅统计B分占比较多的前8种规则分类</div>
  143. <i class="el-icon-question fontColorC"></i>
  144. </el-tooltip>
  145. </b></div>
  146. <div v-if="this.supAuthority!='employee'">
  147. <el-cascader v-model="dept_name1" :options="dept_tree" @change="dept1_null" ref="dept1" filterable change-on-select placeholder="请选择部门" clearable></el-cascader>
  148. </div>
  149. <div v-loading="IntegralFormChartLoad">
  150. <NoData v-show="IntegralFormnone" :isSolt="true">
  151. <span class="title1">
  152. 暂无积分数据
  153. <span v-if="supAuthority!='employee'" @click="$router.push({ path: '/award_punish' })" style="color:#409EFF;cursor:pointer;">,去奖扣积分></span>
  154. </span>
  155. </NoData>
  156. <div v-show="!IntegralFormnone"><div ref="IntegralFormChart" :style="{ width: '100%', height: '400px' }"></div></div>
  157. </div>
  158. </div>
  159. </div>
  160. <div class="raiders_box">
  161. <div style="position: relative;">
  162. <div style="display:flex">
  163. <b class="title" style="margin:0 20px 15px 0;display:block">本月积分情况</b>
  164. <el-checkbox v-model="exclusiveMonthChecked">不包含自动积分加分项</el-checkbox>
  165. </div>
  166. <div v-loading="monthlyIntegralloading">
  167. <div v-if="this.supAuthority!='employee'">
  168. <el-cascader
  169. v-model="dept_name2"
  170. :options="dept_tree"
  171. @change="monthlyIntegralchange"
  172. ref="dept2"
  173. filterable
  174. change-on-select
  175. placeholder="请选择部门"
  176. clearable
  177. ></el-cascader>
  178. </div>
  179. <NoData v-if="monthlyIntegralnone" content="暂无积分数据"></NoData>
  180. <div v-show="!monthlyIntegralnone">
  181. <div ref="monthlyIntegralChart" :style="{ width: '100%', height: '350px' }"></div>
  182. <div class="flex-box-ce flex-dv-center" style="margin-top: 30px;">
  183. <p v-for="(item, index) in monthlyIntegralList" :key="index" style="text-align:center">
  184. <b style="display:block;color:#303133;font-size:18px;" v-if="index < 3">
  185. {{ index == 0 ? item.total_point : index == 1 ? item.reward_point : index == 2 ? item.deduction_point : '' }}
  186. </b>
  187. <b style="display:block;color:#303133;font-size:18px;" v-else-if="index == 3">{{ item.ratio == -1 ? '—' : item.ratio + ':1' }}</b>
  188. <b style="display:block;color:#303133;font-size:18px;" v-else>
  189. {{ item.toRatio.ratio + '%' }}
  190. <i class="el-icon-top green" v-if="item.toRatio.type == 1"></i>
  191. <i class="el-icon-bottom orange" v-if="item.toRatio.type == 2"></i>
  192. </b>
  193. <span style="color:rgb(48, 49, 51);font-size:14px;margin-top:5px;display:block;">{{ item.name }}</span>
  194. </p>
  195. </div>
  196. </div>
  197. </div>
  198. </div>
  199. </div>
  200. <div class="raiders_box" v-if="false">
  201. <div style="position: relative;">
  202. <div><b class="title" style="margin-bottom:15px;display:block">管理者奖扣任务执行情况</b></div>
  203. <div v-loading="ManagerSAwardloading">
  204. <div>
  205. <el-cascader
  206. v-model="dept_name3"
  207. :options="dept_tree"
  208. @change="ManagerSAwardlchange"
  209. ref="dept3"
  210. filterable
  211. change-on-select
  212. placeholder="请选择部门"
  213. clearable
  214. ></el-cascader>
  215. </div>
  216. <NoData content="暂无积分数据" v-if="ManagerSAwardnone"></NoData>
  217. <div v-show="!ManagerSAwardnone">
  218. <div ref="ManagerSAwardChart" :style="{ width: '100%', height: '400px' }"></div>
  219. <div style="width:100%;display:flex;justify-content: space-around;padding-left:40px">
  220. <p v-for="(item, index) in ManagerSAwardlList" :key="index" style="z-index:1;" class="ManagerSAwardlStyle" @click="$router.push({ path: '/manager_statistics' })">
  221. <b class="ManagerSAwardlStyleB" v-if="index != 2">{{ item.val }}</b>
  222. <b class="ManagerSAwardlStyleB" v-else-if="index == 2">{{ item.val == -1 ? '—' : item.val + ':1' }}</b>
  223. <span class="ManagerSAwardlStyleSpan">{{ item.name }}</span>
  224. </p>
  225. </div>
  226. </div>
  227. </div>
  228. </div>
  229. </div>
  230. </el-col>
  231. <el-col :span="6">
  232. <div v-if="supAuthority!='employee'&&supAuthority!='dept_manager'" class="readyapprove_box" style="background-color:#fff;text-align:left;margin-bottom: 10px;">
  233. <div>
  234. <span class="title">数据大屏</span>
  235. <div class="cursor" @click="$router.push({path:'screenSet'})"><img src="static/images/321.jpg" style="width: 100%;"/></div>
  236. </div>
  237. </div>
  238. <div v-if="supAuthority!='creator'" class="readyapprove_box" style="background-color:#fff;text-align:left;margin-bottom: 10px;">
  239. <div>
  240. <span class="title">常用</span>
  241. <div>
  242. <span v-show="item.isShow" v-for="(item, index) in inCommonUse" :key="index" @click="$router.push({ path: item.push })" class="inCommonUseStyle flex-box-ce">
  243. <img :src="item.image" style="width:31px;height:31px;margin-right: 10px;" />
  244. <div class="flex-box-ce flex-1">
  245. <b class="flex-1">{{ item.name }}</b><span v-if="item.num" class="el-badge__content">{{item.num}}</span>
  246. </div>
  247. </span>
  248. </div>
  249. </div>
  250. </div>
  251. <div class="pointsevent_box">
  252. <div class="grid-content bg-purple" v-loading="highestPrizeBuckleloading" style="padding: 20px 20px 0;">
  253. <span class="title">本周奖分最高</span>
  254. <NoData style="padding-bottom: 20px;" content="暂无积分数据" v-if="!prize.id"></NoData>
  255. <div v-else style="display:flex;padding-bottom:20px;">
  256. <userImage width="45px" height="45px" :id="prize.id" :user_name="prize.name" fontSize="16" style="margin-right:8px"></userImage>
  257. <div class="rightexamineAndApproveList" style="border:0px">
  258. <p style="width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#73767c;font-size:16px;display:flex;justify-content: space-between;">
  259. <b style="color:#303133;font-size:16px;">{{ prize.name }}</b>
  260. <span style="color:#409EFF;font-size:16px;">
  261. <span v-if="prize.point > 0">+</span>
  262. {{ prize.point }} B分
  263. </span>
  264. </p>
  265. <p class="task-remark">{{ prize.remark ? prize.remark.customize : '' }}</p>
  266. </div>
  267. </div>
  268. </div>
  269. </div>
  270. <div class="pointsevent_box">
  271. <div class="grid-content bg-purple" v-loading="highestPrizeBuckleloading" style="padding: 20px 20px 0;">
  272. <span class="title">本周扣分最多</span>
  273. <NoData style="padding-bottom: 20px;" content="暂无积分数据" v-if="!buckle.id"></NoData>
  274. <div v-else style="display:flex;padding-bottom:20px;">
  275. <userImage width="45px" height="45px" :id="buckle.id" :user_name="buckle.name" style="margin-right:8px"></userImage>
  276. <div class="rightexamineAndApproveList">
  277. <p style="width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#73767c;font-size:16px;display:flex;justify-content: space-between;">
  278. <b style="color:#303133;font-size:16px;">{{ buckle.name }}</b>
  279. <span style="color:#FF9600;font-size:16px;">{{ buckle.point }} B分</span>
  280. </p>
  281. <p class="task-remark">
  282. {{ buckle.remark ? buckle.remark.customize : '' }}
  283. </p>
  284. </div>
  285. </div>
  286. </div>
  287. </div>
  288. <!-- 本周考勤模块 -->
  289. <!-- <div class="pointsevent_box" v-if="supAuthority!='employee'">
  290. <div class="grid-content bg-purple" v-loading="weekChecking_inloading" style="padding: 20px 20px 0;">
  291. <span class="title">本周考勤</span>
  292. <div style="display:flex;flex-wrap:wrap;justify-content: space-around;padding-bottom:20px">
  293. <div v-for="(item, index) in weekChecking_ins" :key="index" style="width:45%;">
  294. <p class="weekChecking_inStyle">
  295. <b style="font-size:20px;">{{ item.val }}</b>
  296. <br />
  297. {{ item.name }}
  298. </p>
  299. </div>
  300. </div>
  301. </div>
  302. </div> -->
  303. <div v-if="advertisingImage != ''" class="pointsevent_box" style="width:280px;height:200px;">
  304. <img :src="advertisingImage" style="width:100%;height:100%;" alt="" />
  305. </div>
  306. </el-col>
  307. </el-row>
  308. </div>
  309. <el-dialog :visible.sync="innerVisible" width="400px" append-to-body class="innerVisible" :close-on-click-modal="false">
  310. <p style="font-size:21px;">续费/升级</p>
  311. <p style="margin:0;">请在功道云积分服务群中联系客服顾问或微信扫码添加功道云客服进行续费</p>
  312. <img src="static/images/lADPDhmOve9UdT3NAa7NAa4_430_430.jpg" style="width:100%" />
  313. <p style="font-size:20px;">电话咨询:400-6877-880</p>
  314. </el-dialog>
  315. </div>
  316. </template>
  317. <script>
  318. import QRCode from 'qrcodejs2';
  319. import { mapGetters, mapState } from 'vuex';
  320. import axios from 'axios';
  321. import ECharts from 'echarts';
  322. export default {
  323. components: {
  324. QRCode
  325. },
  326. data() {
  327. return {
  328. noticeRole: !this.$supremeAuthority('dept_manager')&&!this.$supremeAuthority('employee'),
  329. innerVisible: false,
  330. experience_data: false, //是否体验账号
  331. banner: [
  332. //首页轮播
  333. { image: 'static/images/banner1.jpg', key: 1 },
  334. { image: 'static/images/banner2.jpg', key: 2 }
  335. ],
  336. exclusiveMonthBranch: 0, //本月积分情况--部门
  337. exclusiveMonthChecked: true, //本月积分情况--不包含自动积分加分项
  338. rollOne: true,
  339. advertisingImage: '', //广告位图片
  340. inCommonUse: [
  341. { name: '审批', image: 'static/images/att_review.png', push: '/approval_list',num:0,isShow:false},
  342. { name: '任务', image: 'static/images/indexPTTask.png', push: '/my_task',num:0,isShow:false },
  343. { name: '奖分&扣分', image: 'static/images/entry_list.png', push: '/award_punish',isShow:false },
  344. { name: '任务下达', image: 'static/images/my_publish.png', push: '/my_issue',isShow:false },
  345. { name: '申请积分', image: 'static/images/a_apply.png', push: '/apply_list',isShow:false },
  346. { name: '领任务', image: 'static/images/task_hall.png', push: '/get_task',isShow:false }
  347. ],
  348. authorityManagerHeaderLoad: false, //除了管理员 的头部 -- loading
  349. authorityManagerHeaders: {}, //除了管理员 的头部 --数据
  350. highestPrizeBuckleloading: false, //奖扣最高loading
  351. prize: {}, //奖分最高
  352. buckle: {}, //扣分最高
  353. //本周考勤
  354. weekChecking_inloading: false, //本周考勤loading
  355. weekChecking_ins: [
  356. //本周考勤
  357. { val: 0, name: '迟到人数' },
  358. { val: 0, name: '早退人数' },
  359. { val: 0, name: '缺卡人数' },
  360. { val: 0, name: '旷工人数' },
  361. { val: 0, name: '外勤人数' },
  362. { val: 0, name: '加班人数' }
  363. ],
  364. //隐藏的积分构成
  365. IntegralFormnone: false, //积分构成为空或报错,展示的开关
  366. dept_name1: [], //积分构成--部门
  367. IntegralFormChartLoad: false, //积分构成loading
  368. ManagerSAwardloading: false, //管理者统计 loading
  369. ManagerSAwardlList: [
  370. //管理者统计数据
  371. { val: '0', name: '总奖分' },
  372. { val: '0', name: '总扣分' },
  373. { val: '0', name: '奖扣分比例' },
  374. { val: '0', name: '奖扣人次' },
  375. { val: '0', name: '奖扣执行人数' },
  376. { val: '0', name: '达标人数' },
  377. { val: '0', name: '未达标人数' }
  378. ],
  379. monthlyIntegralList: [
  380. //本月积分情况数据
  381. { total_point: '0', name: '本月总积分' },
  382. { reward_point: '0', name: '本月总奖分' },
  383. { deduction_point: '0', name: '本月总扣分' },
  384. { ratio: '0', name: '奖扣分比例' },
  385. { toRatio: { ratio: '0', type: 0 }, name: '对比上月总分' },
  386. { toRatio: { ratio: '0', type: 0 }, name: '对比上月奖分' },
  387. { toRatio: { ratio: '0', type: 0 }, name: '对比上月扣分' }
  388. ],
  389. monthlyIntegralloading: false, //本月积分情况loading
  390. monthlyIntegralnone: false, //本月积分情况为空或报错,展示的开关
  391. ManagerSAwardnone: false, //管理者奖扣执行情况为空或报错,展示的开关
  392. dept_name2: [], //本月积分情况--部门
  393. dept_name3: [], //管理者统计数据--部门
  394. dept_tree: [], //部门
  395. RankingPush: '',
  396. tabPositionLoad: false, //排名分类loading
  397. addUpRankingLoad: false, //排名人员loading
  398. tabPosition: '0',
  399. rankingList: [], //排行榜数据
  400. rankingListDetails: [], //排行榜人员列表
  401. detail_id: null, //审批组件传入的ID
  402. detailShow: false, //审批组件显示隐藏
  403. examineAndApproveloading: false, //审批loading
  404. examineAndApproveList: [], //审批列表
  405. examineAndApproveindex: 0, //审批列表数量
  406. supAuthority:this.$supremeAuthority(),//当前员工最高权限
  407. user_infos: this.$store.getters.user_info, //拿到当前登录人员信息,隐藏部门管理者等
  408. fits: [
  409. {
  410. name: '奖扣A/B分',
  411. value: '表现好坏,有奖有罚',
  412. img: 'static/images/prizeBuckle.png',
  413. url: '/award_punish',
  414. num:0,
  415. },
  416. {
  417. name: '任务下达',
  418. value: '认可积极完成任务的人',
  419. img: 'static/images/task.png',
  420. url: '/my_issue',
  421. num:0,
  422. },
  423. {
  424. name: '审批',
  425. value: '工作目标与价值的体现',
  426. img: 'static/images/performance.png',
  427. url: '/approval_list',
  428. num:0,
  429. },
  430. ],
  431. pointsevent: 0,
  432. send_site_info_loading: false,
  433. // 7.0
  434. time: this.$moment().format('HH'),
  435. site_info: {},
  436. pastdueDate: null,
  437. spTotal:0,//审批数量
  438. rwTotal:0,//任务数量
  439. };
  440. },
  441. watch: {
  442. spTotal(val){
  443. this.fits[2].num=val
  444. this.inCommonUse[0].num=val
  445. },
  446. rwTotal(val){
  447. this.inCommonUse[1].num=val
  448. },
  449. exclusiveMonthChecked() {
  450. this.monthlyIntegral();
  451. }
  452. },
  453. computed: {
  454. ...mapState({
  455. user_info: state => state.user.user_info
  456. })
  457. },
  458. methods: {
  459. openUrl(){
  460. if(this.supAuthority!='employee'){
  461. this.$router.push({ path: '/integral_statistics' })
  462. }
  463. },
  464. returnImgIndex(url) {
  465. return 'url('+url+')';
  466. },
  467. //echarts自适应
  468. selfAdaption() {
  469. var myChart1 =ECharts.init(this.$refs.monthlyIntegralChart);
  470. var myChart2 =ECharts.init(this.$refs.IntegralFormChart);
  471. myChart1.resize();
  472. myChart2.resize();
  473. },
  474. //点击轮播图
  475. bannerImagePush(item) {
  476. if (item == 1) {
  477. window.open('https://www.g107.net/integral.html');
  478. } else {
  479. window.open('https://www.g107.net/book.html');
  480. }
  481. },
  482. handleScrolls(e) {
  483. this.monthlyIntegral(); //月度积分
  484. this.highestPrizeBuckle()//奖扣分最高积分事件
  485. },
  486. //广告位
  487. advertising() {
  488. this.$axiosUser('get', '/api/pro/pc_admin')
  489. .then(res => {
  490. if (res.data.code == 1) {
  491. this.advertisingImage = res.data.data.advertising_img;
  492. }
  493. })
  494. },
  495. //管理员头部
  496. authorityManagerHeader() {
  497. this.authorityManagerHeaderLoad = true;
  498. let params = {
  499. employee_id: this.user_infos.id,
  500. month: this.$moment().format('YYYY-MM')
  501. };
  502. this.$axiosUser('get', '/api/pro/integral/statistics/', params, 'v3').then(res => {
  503. this.authorityManagerHeaders = res.data.data;
  504. }).finally(() => {
  505. this.authorityManagerHeaderLoad = false;
  506. });
  507. },
  508. //奖扣分最高积分事件
  509. highestPrizeBuckle() {
  510. this.highestPrizeBuckleloading = true;
  511. let params = {
  512. time_type: '1',
  513. pt_id: '3',
  514. page: '1',
  515. page_size: '1'
  516. };
  517. this.$axiosUser('get', '/api/pro/integral/statistics/prize/buckle/ranking', params).then(res => {
  518. if (res.data.data.prize.length != 0) {
  519. this.prize = res.data.data.prize[0];
  520. } else {
  521. this.prize = [];
  522. }
  523. if (res.data.data.buckle.length != 0) {
  524. this.buckle = res.data.data.buckle[0];
  525. } else {
  526. this.buckle = [];
  527. }
  528. }).finally(() => {
  529. this.highestPrizeBuckleloading = false;
  530. });
  531. },
  532. //本周考勤
  533. //格式化日期:yyyy-MM-dd
  534. formatDate(date) {
  535. var myyear = date.getFullYear();
  536. var mymonth = date.getMonth() + 1;
  537. var myweekday = date.getDate();
  538. if (mymonth < 10) {
  539. mymonth = '0' + mymonth;
  540. }
  541. if (myweekday < 10) {
  542. myweekday = '0' + myweekday;
  543. }
  544. return myyear + '-' + mymonth + '-' + myweekday;
  545. },
  546. weekChecking_in() {
  547. this.weekChecking_inloading = true;
  548. var now = new Date();
  549. var nowTime = now.getTime();
  550. var day = now.getDay() || 7;
  551. var oneDayTime = 24 * 60 * 60 * 1000;
  552. var MondayTime = nowTime - (day - 1) * oneDayTime; //显示周一
  553. var SundayTime = nowTime + (7 - day) * oneDayTime; //显示周日
  554. var params = {
  555. start_date: this.formatDate(new Date(MondayTime)),
  556. end_date: this.formatDate(new Date(SundayTime))
  557. };
  558. this.$axiosKq('get','/ad/statistics/department/weekly',params)
  559. .then(res => {
  560. let datas = res.data.data;
  561. this.weekChecking_ins[0].val = datas.late_count;
  562. this.weekChecking_ins[1].val = datas.leave_early_count;
  563. this.weekChecking_ins[2].val = datas.sign_absent_count;
  564. this.weekChecking_ins[3].val = datas.absent_count;
  565. this.weekChecking_ins[4].val = datas.range_count;
  566. this.weekChecking_ins[5].val = datas.ot_count;
  567. })
  568. .finally(() => {
  569. this.weekChecking_inloading = false;
  570. });
  571. },
  572. //管理者奖扣统计
  573. ManagerSAwardCharts(Name, Award, Deduct) {
  574. //管理着奖扣统计表
  575. const chart = this.$refs.ManagerSAwardChart;
  576. if (chart) {
  577. const myChart = ECharts.init(chart);
  578. const option = {
  579. tooltip: {
  580. trigger: 'axis',
  581. axisPointer: {
  582. // type: 'cross',
  583. crossStyle: {
  584. color: '#999'
  585. }
  586. }
  587. },
  588. grid: {
  589. //表格偏移量
  590. // top: '5% '
  591. left: '5%',
  592. right: '0%'
  593. },
  594. toolbox: {
  595. feature: {
  596. // dataView: {show: false, readOnly: true},
  597. // magicType: {show: false, type: ['line', 'bar']},
  598. // restore: {show: false},
  599. // saveAsImage: {show: false}
  600. }
  601. },
  602. color: ['#409EFF', '#FFC100'],
  603. legend: {
  604. right: '0%', //设置位置
  605. data: ['奖分', '扣分']
  606. },
  607. xAxis: [
  608. {
  609. type: 'category',
  610. data: Name,
  611. axisPointer: {
  612. type: 'shadow'
  613. },
  614. axisLabel: {
  615. interval: 0 //横轴信息全部显示
  616. // rotate:-30,//-30度角倾斜显示
  617. },
  618. axisLine: {
  619. //去掉X轴线
  620. show: false
  621. },
  622. axisTick: {
  623. //去掉X轴刻度
  624. show: false
  625. }
  626. }
  627. ],
  628. yAxis: [
  629. {
  630. type: 'value',
  631. axisLabel: {
  632. formatter: '{value}'
  633. },
  634. axisLine: {
  635. //去掉Y轴线
  636. show: false
  637. },
  638. axisTick: {
  639. //去掉Y轴刻度
  640. show: false
  641. }
  642. }
  643. ],
  644. series: [
  645. {
  646. name: '奖分',
  647. type: 'bar',
  648. barWidth: 14, //柱图宽度
  649. barGap: '0%', //柱图间距
  650. data: Award
  651. },
  652. {
  653. name: '扣分',
  654. type: 'bar',
  655. barWidth: 14, //柱图宽度
  656. barGap: '0%', //柱图间距
  657. data: Deduct
  658. }
  659. ]
  660. };
  661. myChart.setOption(option);
  662. }
  663. },
  664. ManagerSAwardlchange(val) {
  665. //选中规则
  666. let valItem = 0;
  667. for (let i in val) {
  668. valItem = val[i];
  669. }
  670. // this.ManagerSAward(valItem);
  671. this.$nextTick(() => {
  672. this.$refs.dept3.dropDownVisible = false;
  673. });
  674. },
  675. ManagerSAward(item) {
  676. //管理者奖扣请求
  677. this.ManagerSAwardloading = true;
  678. let params = {};
  679. let listslength = [];
  680. if (item) {
  681. (params.dept_id = item), (params.month = this.$moment().format('YYYY-MM'));
  682. } else {
  683. (params.dept_id = 0), (params.month = this.$moment().format('YYYY-MM'));
  684. }
  685. this.$axiosUser('get', '/api/pro/integral/statistics/task/pie', params, 'v2')
  686. .then(res => {
  687. let datas = res.data.data;
  688. listslength = datas.list;
  689. let histogramName = [];
  690. let histogramAward = [];
  691. let histogramDeduct = [];
  692. for (let i in datas.list) {
  693. histogramName.push(datas.list[i].name);
  694. histogramAward.push(datas.list[i].reward_point);
  695. histogramDeduct.push(datas.list[i].deduction_point);
  696. }
  697. this.ManagerSAwardlList[0].val = datas.reward_point;
  698. this.ManagerSAwardlList[1].val = datas.deduction_point;
  699. this.ManagerSAwardlList[2].val = datas.ratio;
  700. this.ManagerSAwardlList[3].val = datas.exec_count;
  701. this.ManagerSAwardlList[4].val = datas.manager_count;
  702. this.ManagerSAwardlList[5].val = datas.pass_count;
  703. this.ManagerSAwardlList[6].val = datas.fail_count;
  704. this.ManagerSAwardCharts(histogramName, histogramAward, histogramDeduct);
  705. })
  706. .finally(() => {
  707. if (listslength.length == 0) {
  708. this.ManagerSAwardnone = true;
  709. } else {
  710. this.ManagerSAwardnone = false;
  711. }
  712. this.ManagerSAwardloading = false;
  713. });
  714. },
  715. //月度积分
  716. monthlyIntegralRanking(date, total, reward, deduction) {
  717. const chart = this.$refs.monthlyIntegralChart;
  718. if (chart) {
  719. const myChart = ECharts.init(chart);
  720. const option = {
  721. tooltip: {
  722. trigger: 'axis'
  723. },
  724. color: ['#F56C6C', '#409EFF', '#FFC100'],
  725. legend: {
  726. // selectedMode: 'single',
  727. right: '4%',
  728. data: ['总积分', '奖分', '扣分']
  729. },
  730. grid: {
  731. left: '3%',
  732. right: '4%',
  733. bottom: '3%',
  734. containLabel: true
  735. },
  736. toolbox: {
  737. feature: {}
  738. },
  739. xAxis: {
  740. type: 'category',
  741. boundaryGap: false,
  742. data: date
  743. },
  744. yAxis: {
  745. type: 'value',
  746. axisLine: {
  747. show: false
  748. },
  749. axisTick: {
  750. show: false
  751. }
  752. },
  753. series: [
  754. {
  755. name: '总积分',
  756. type: 'line',
  757. data: total
  758. },
  759. {
  760. name: '奖分',
  761. type: 'line',
  762. data: reward
  763. },
  764. {
  765. name: '扣分',
  766. type: 'line',
  767. data: deduction
  768. }
  769. ]
  770. };
  771. myChart.setOption(option);
  772. }
  773. },
  774. //月度积分
  775. monthlyIntegralchange(val) {
  776. if (val.length == 0) {
  777. this.exclusiveMonthBranch = 0;
  778. } else {
  779. let valItem = 0;
  780. for (let i in val) {
  781. valItem = val[i];
  782. }
  783. this.exclusiveMonthBranch = valItem;
  784. }
  785. this.monthlyIntegral();
  786. this.$nextTick(() => {
  787. this.$refs.dept2.dropDownVisible = false;
  788. });
  789. },
  790. monthlyIntegral() {
  791. this.monthlyIntegralloading = true;
  792. let params = {};
  793. let listslength = [];
  794. if(this.supAuthority=='employee'){
  795. params.employee_id = this.$store.getters.user_info.id;
  796. }else{
  797. params.dept_id = this.exclusiveMonthBranch
  798. }
  799. params.month = this.$moment().format('YYYY-MM')
  800. if (this.exclusiveMonthChecked) {
  801. params.include_fixed = 1;
  802. } else {
  803. params.include_fixed = 0;
  804. }
  805. this.$axiosUser('get', '/api/pro/integral/statistics/curve', params)
  806. .then(res => {
  807. if (res.data.code == 1) {
  808. let lists = res.data.data;
  809. listslength = lists;
  810. this.monthlyIntegralList[0].total_point = lists.total_point;
  811. this.monthlyIntegralList[1].reward_point = lists.reward_point;
  812. this.monthlyIntegralList[2].deduction_point = lists.deduction_point;
  813. this.monthlyIntegralList[3].ratio = lists.ratio;
  814. this.monthlyIntegralList[4].toRatio = lists.contrast_total;
  815. this.monthlyIntegralList[5].toRatio = lists.contrast_reward;
  816. this.monthlyIntegralList[6].toRatio = lists.contrast_deduction;
  817. let dates = []; //日期
  818. let totals = []; //总积分
  819. let rewards = []; //奖分
  820. let deductions = []; //扣分
  821. for (let i in lists.total) {
  822. dates.push(lists.total[i].date);
  823. totals.push(lists.total[i].point);
  824. }
  825. for (let i in lists.reward) {
  826. rewards.push(lists.reward[i].point);
  827. }
  828. for (let i in lists.deduction) {
  829. deductions.push(lists.deduction[i].point);
  830. }
  831. this.monthlyIntegralRanking(dates, totals, rewards, deductions);
  832. }
  833. })
  834. .finally(() => {
  835. if (listslength.total.length == 0) {
  836. this.monthlyIntegralnone = true;
  837. } else {
  838. this.monthlyIntegralnone = false;
  839. }
  840. this.monthlyIntegralloading = false;
  841. });
  842. },
  843. //积分构成
  844. dept1_null(val) {
  845. let valItem = 0;
  846. for (let i in val) {
  847. valItem = val[i];
  848. }
  849. this.integralForm(valItem);
  850. this.$nextTick(() => {
  851. this.$refs.dept1.dropDownVisible = false;
  852. });
  853. },
  854. //分为两列展示,多传legendDataTwo
  855. drawLine(legendDataOne, legendDataTwo, dadalist) {
  856. // drawLine(legendDataOne,dadalist){
  857. const chart = this.$refs.IntegralFormChart;
  858. //此处可给固定颜色,不给就所有颜色随机
  859. let colors = ['rgb(38, 162, 255)', '#f36f2a', '#fecb09', '#00b6bd', '#e85d53', '#fecb09', '#725197', '#fcb814', '#41a08d', '#425a95', '#ea8b84', '#9d1d62', '#fcb814'];
  860. // let colors = [];
  861. let legendDataLeng = legendDataOne.length + legendDataTwo.length;
  862. if (legendDataLeng > colors.length) {
  863. //当列表大于固定颜色时,给随机颜色
  864. let colorsLeng = colors.length;
  865. for (let i = 0; i <= legendDataLeng - colorsLeng; i++) {
  866. // colors.push('#' + Math.random().toString(16).substr(2, 6).toUpperCase());//也是随机色
  867. colors.push('rgb(' + Math.round(Math.random() * 255) + ',' + Math.round(Math.random() * 255) + ',' + Math.round(Math.random() * 255) + ')');
  868. }
  869. }
  870. //只显示 N 条标题,多余隐藏,但是饼图不会隐藏
  871. let DataLengths = [];
  872. for (let i in legendDataTwo) {
  873. if (i < 8) {
  874. DataLengths.push(legendDataTwo[i]);
  875. }
  876. }
  877. let left1 = '45%';
  878. let left2 = '45%';
  879. let leftBT = '25%';
  880. if (legendDataTwo.length != 0) {
  881. left1 = '33%';
  882. leftBT = '19%';
  883. }
  884. if (chart) {
  885. const myChart = ECharts.init(chart);
  886. var legendData1 = legendDataOne;
  887. var legendData2 = DataLengths;
  888. const option = {
  889. tooltip: {
  890. trigger: 'item',
  891. formatter: '{b}'
  892. },
  893. legend: [
  894. {
  895. type: 'scroll',
  896. orient: 'vertical',
  897. icon: 'square',
  898. left: left1,
  899. align: 'left',
  900. top: '23%',
  901. itemGap: 20,
  902. // bottom:'50%',
  903. textStyle: {
  904. fontSize: 14,
  905. color: 'rgb(48, 49, 51)'
  906. },
  907. data: legendData1
  908. },
  909. //分为两列展示
  910. {
  911. type: 'scroll',
  912. orient: 'vertical',
  913. icon: 'square',
  914. left: '68%',
  915. align: 'left',
  916. top: '23%',
  917. itemGap: 20,
  918. // bottom:'50%',
  919. textStyle: {
  920. fontSize: 14,
  921. color: 'rgb(48, 49, 51)'
  922. },
  923. data: legendData2
  924. }
  925. ],
  926. color: colors,
  927. grid: {
  928. x: 25,
  929. y: 45,
  930. x2: 5,
  931. y2: 20,
  932. borderWidth: 1
  933. },
  934. toolbox: {
  935. show: true,
  936. feature: {
  937. mark: { show: true },
  938. magicType: {
  939. show: true,
  940. type: ['pie', 'funnel']
  941. }
  942. }
  943. },
  944. series: [
  945. {
  946. name: '',
  947. type: 'pie',
  948. radius: [20, 110],
  949. center: [leftBT, '50%'],
  950. roseType: 'radius',
  951. label: {
  952. show: false
  953. },
  954. emphasis: {
  955. label: {
  956. show: false
  957. }
  958. },
  959. data: dadalist
  960. }
  961. ]
  962. };
  963. myChart.setOption(option);
  964. }
  965. },
  966. integralForm(item) {
  967. this.IntegralFormChartLoad = true;
  968. let listslength = [];
  969. let params = {};
  970. if (item) {
  971. (params.dept_id = item), (params.month = this.$moment().format('YYYY-MM'));
  972. } else {
  973. (params.dept_id = 0), (params.month = this.$moment().format('YYYY-MM'));
  974. }
  975. if(this.supAuthority=='employee'){
  976. params.employee_id = this.$store.getters.user_info.id;
  977. }
  978. this.$axiosUser('get', '/api/pro/integral/statistics/pie/b', params, 'v2')
  979. .then(res => {
  980. let lists = res.data.data.list;
  981. listslength = lists;
  982. let legendData1 = [];
  983. let legendData2 = [];
  984. let dadalist = [];
  985. //分为两列展示
  986. for (let i in lists) {
  987. if (lists[i].name.length > 10) {
  988. lists[i].name = lists[i].name.slice(0, 10) + '...';
  989. }
  990. let str=`${lists[i].name} ${lists[i].ratio}% ${lists[i].reward-Math.abs(lists[i].deduction)}分 (奖${lists[i].reward}分 扣${lists[i].deduction}分)`
  991. // let str=`${lists[i].name} 奖${lists[i].reward}分 扣${lists[i].deduction}分 合计得${lists[i].reward-Math.abs(lists[i].deduction)}分 占比${lists[i].ratio}%`
  992. //分为两列展示
  993. if (i < 8) {
  994. legendData1.push(str);
  995. } else {
  996. legendData2.push(str);
  997. }
  998. let dataListDx = {};
  999. if (lists[i].ratio < 0) {
  1000. dataListDx.value = 0;
  1001. } else {
  1002. dataListDx.value = lists[i].ratio;
  1003. }
  1004. dataListDx.name =str ;
  1005. // dataListDx.name = lists[i].name + ' ' + '奖' + lists[i].reward + ' ' + '扣' + lists[i].deduction + ' ' + lists[i].ratio + '%';
  1006. dadalist.push(dataListDx);
  1007. }
  1008. //分为两列展示,多传legendData2
  1009. if(dadalist.length>8){
  1010. dadalist = dadalist.slice(0,8);
  1011. legendData2=[];
  1012. }
  1013. this.drawLine(legendData1, legendData2, dadalist); //图表
  1014. })
  1015. .finally(() => {
  1016. if (listslength.length == 0) {
  1017. this.IntegralFormnone = true;
  1018. } else {
  1019. this.IntegralFormnone = false;
  1020. }
  1021. this.IntegralFormChartLoad = false;
  1022. });
  1023. },
  1024. customRanking(item) {
  1025. let data = {
  1026. group_id: item.target_id,
  1027. start_date:'',
  1028. end_date:'',
  1029. page_size:7,
  1030. page:1,
  1031. };
  1032. if(item.date_interval==1){//本月
  1033. data.start_date=this.$moment().startOf('month').format('YYYY-MM-DD');
  1034. data.end_date=this.$moment().endOf('month').format('YYYY-MM-DD');
  1035. }else if(item.date_interval==2){ //季
  1036. data.start_date=this.$moment().startOf('quarters').format('YYYY-MM-DD');
  1037. data.end_date=this.$moment().endOf('quarters').format('YYYY-MM-DD');
  1038. }else if(item.date_interval==3){ //年
  1039. data.start_date=this.$moment().startOf('year').format('YYYY-MM-DD');
  1040. data.end_date=this.$moment().endOf('year').format('YYYY-MM-DD');
  1041. }else if(item.date_interval==0){ //自定义
  1042. data.start_date=item.start_date;
  1043. data.end_date=item.end_date;
  1044. }else if(item.date_interval==4){ //周
  1045. data.start_date=this.$moment().week(this.$moment().week()).startOf('isoweek').format('YYYY-MM-DD');
  1046. data.end_date=this.$moment().week(this.$moment().week()).endOf('isoweek').format('YYYY-MM-DD');
  1047. }
  1048. this.$axiosUser('get', '/api/pro/integral/statistics/ranking', data,'v3').then(res => {
  1049. let lists = res.data.data.list;
  1050. let rankingList = [];
  1051. let arr = false;
  1052. for (let i in lists) {
  1053. let rankingJson = {};
  1054. if (lists[i].employee_name) {
  1055. arr = true;
  1056. } else {
  1057. arr = false;
  1058. rankingJson.employee_id = lists[i].employee_id;
  1059. rankingJson.employee_img_url = lists[i].img_url;
  1060. rankingJson.employee_name = lists[i].name;
  1061. rankingJson.point = lists[i].point;
  1062. rankingJson.rank = lists[i].rank;
  1063. rankingJson.status_remark = '';
  1064. rankingList.push(rankingJson);
  1065. }
  1066. }
  1067. if (arr) {
  1068. this.rankingListDetails = lists;
  1069. } else {
  1070. this.rankingListDetails = rankingList;
  1071. }
  1072. })
  1073. .finally(() => {
  1074. this.addUpRankingLoad = false;
  1075. });
  1076. },
  1077. addUpRanking() {
  1078. //累计B分排名
  1079. let params = {
  1080. dept_id: 0,
  1081. sort: 'DESC',
  1082. page: 1,
  1083. page_size: 10,
  1084. pt_id: 3,
  1085. type: 'all',
  1086. index_ranking: 1
  1087. };
  1088. this.$axiosUser('get', '/api/pro/integral/statistics/ranking', params, 'v3')
  1089. .then(res => {
  1090. this.rankingListDetails = res.data.data.list;
  1091. })
  1092. .finally(() => {
  1093. this.addUpRankingLoad = false;
  1094. });
  1095. },
  1096. departmentOfRanking() {
  1097. //部门B分排名
  1098. this.RankingPush = '/dept_rank';
  1099. let params = {
  1100. dept_id: 0,
  1101. sort: 'DESC',
  1102. pt_id: 3,
  1103. time_type: 1,
  1104. page: 1,
  1105. page_size: 10,
  1106. position: 'all',
  1107. month: this.$moment().format('YYYY-MM'),
  1108. index_ranking: 1
  1109. };
  1110. this.$axiosUser('get', '/api/pro/integral/statistics/ranking', params, 'v3')
  1111. .then(res => {
  1112. this.rankingListDetails = res.data.data.list;
  1113. })
  1114. .finally(() => {
  1115. this.addUpRankingLoad = false;
  1116. });
  1117. },
  1118. rankingListname() {
  1119. //获取排名列表
  1120. this.tabPositionLoad = true;
  1121. let params = {
  1122. page: 1,
  1123. page_size: 7
  1124. };
  1125. this.$axiosUser('get', '/api/pro/integral/statistics/ranking/list', params)
  1126. .then(res => {
  1127. if (res.data.code == 1) {
  1128. let lists = res.data.data.list;
  1129. for (let i in lists) {
  1130. lists[i].val = i;
  1131. if (lists[i].type == 'normal') {
  1132. lists[i].group_name = '阶段排名(月)';
  1133. }
  1134. if (lists[i].type == 'all') {
  1135. lists[i].group_name = '累计B分排名';
  1136. }
  1137. this.rankingList.push(lists[i]);
  1138. }
  1139. this.addUpRankingLoad = true;
  1140. this.departmentOfRanking(); //进入获取部门B分排名数据
  1141. } else {
  1142. self.$message.error(res.data.data.msg);
  1143. }
  1144. })
  1145. .finally(() => {
  1146. this.tabPositionLoad = false;
  1147. });
  1148. },
  1149. tabPositions(item) {
  1150. if (item) {
  1151. this.addUpRankingLoad = true;
  1152. }
  1153. if (item.type == 'normal') {
  1154. this.RankingPush = '/dept_rank';
  1155. this.departmentOfRanking();
  1156. } else if (item.type == 'all') {
  1157. this.RankingPush = '/total_rank';
  1158. this.addUpRanking();
  1159. } else if (item.type == 'custom') {
  1160. this.RankingPush = '/custom_rank';
  1161. this.customRanking(item);
  1162. }
  1163. },
  1164. //审批
  1165. openDetail(item) {
  1166. this.detail_id = item.id;
  1167. this.detailShow = true;
  1168. },
  1169. get_list() {
  1170. this.examineAndApproveloading = true;
  1171. let params = {
  1172. type: 'waiting',
  1173. source_type: 0,
  1174. pt_id: 0,
  1175. page_size: 3,
  1176. page: 1
  1177. };
  1178. this.$axiosUser('get', '/api/pro/integral/review/list', params)
  1179. .then(res => {
  1180. if (res.data.code == 1) {
  1181. this.examineAndApproveList = res.data.data.list;
  1182. this.examineAndApproveindex = res.data.data.total;
  1183. } else {
  1184. this.$message.error(res.data.data.msg);
  1185. }
  1186. this.examineAndApproveloading = false;
  1187. })
  1188. .catch(e => {
  1189. this.examineAndApproveloading = false;
  1190. });
  1191. },
  1192. get_new_employee() {
  1193. let self = this;
  1194. this.$axiosUser('get', '/api/pro/join/index').then(res => {
  1195. const list = res.data.data.list;
  1196. let item = list.find(item => item.status == 0);
  1197. if (item !== undefined) {
  1198. this.notify_close = this.$notify({
  1199. showClose: false,
  1200. dangerouslyUseHTMLString: true,
  1201. offset: 64,
  1202. onClick: function() {
  1203. this.close();
  1204. self.$router.push({
  1205. path: '/employee_table',
  1206. query: { is: true }
  1207. });
  1208. },
  1209. message: "<div style='height: 50px;display: block;'><div>" + item.account_name + '申请加入企业</div><p><a>点击处理</a></p></div>',
  1210. duration: 0
  1211. });
  1212. }
  1213. })
  1214. },
  1215. renew() {
  1216. window.open('http://p.qiao.baidu.com/cps/chat?siteId=10793815&userId=3040844', '_blank');
  1217. },
  1218. // 生成二维码
  1219. qrcode() {
  1220. let self = this;
  1221. let code = window.location.href.substring(0, window.location.href.length - 5) + 'android';
  1222. let qrcode = new QRCode('secancode', {
  1223. width: 110,
  1224. height: 110, // 高度
  1225. text: code // 二维码内容
  1226. });
  1227. },
  1228. openPage(index) {
  1229. switch (index) {
  1230. case 1:
  1231. this.$router.push({
  1232. path: '/company_info'
  1233. });
  1234. break;
  1235. case 2:
  1236. this.$router.push({
  1237. path: '/set_basics'
  1238. });
  1239. break;
  1240. case 3:
  1241. this.$router.push({
  1242. path: '/employee_table'
  1243. });
  1244. break;
  1245. case 4:
  1246. this.$router.push({
  1247. path: '/rule_manage'
  1248. });
  1249. break;
  1250. case 5:
  1251. this.$router.push({
  1252. path: '/attendance_classnew'
  1253. });
  1254. break;
  1255. }
  1256. },
  1257. openGzd(val) {
  1258. val ? this.$router.push({ path: val }) : '';
  1259. },
  1260. // 递归判断列表,把最后的children设为undefined
  1261. getTreeData(data) {
  1262. for (var i = 0; i < data.length; i++) {
  1263. if (data[i].children.length < 1) {
  1264. // children若为空数组,则将children设为undefined
  1265. data[i].children = undefined;
  1266. } else {
  1267. // children若不为空数组,则继续 递归调用 本方法
  1268. this.getTreeData(data[i].children);
  1269. }
  1270. }
  1271. return data;
  1272. },
  1273. site_infoTIme(site_info) {
  1274. let moment = this.$moment;
  1275. let create_time = site_info;
  1276. let pastdueTime = moment(create_time.toString().length == 10 ? create_time * 1000 : create_time).format('YYYY-MM-DD');
  1277. let atpresentDate = moment().format('YYYY-MM-DD');
  1278. let date = moment(pastdueTime).diff(moment(atpresentDate), 'days');
  1279. if (date >= 0 && date <= 30) {
  1280. this.pastdueDate = '您的积分软件即将到期,有效期至' + pastdueTime + ',请及时续费以免影响使用';
  1281. } else if (date < 0) {
  1282. this.pastdueDate = '您的积分软件已到期,有效期:' + pastdueTime + ',请及时续费以免影响使用';
  1283. } else {
  1284. this.pastdueDate = null;
  1285. }
  1286. },
  1287. // 获取审批和任务数量
  1288. getNum(){
  1289. let axios=this.$axiosUser('get', '/api/pro/integral/review/list', {type: 'waiting',page: 1,pt_id: 0,source_type: 0});
  1290. let axios2=this.$axiosUser('get', '/api/pro/integral/work/list', {status: 'running',page: 1,pt_id: 0});
  1291. Promise.all([axios,axios2]).then(res => {
  1292. this.spTotal=res[0].data.data.total;//审批数量
  1293. this.rwTotal=res[1].data.data.total;//任务数量
  1294. })
  1295. },
  1296. },
  1297. created() {
  1298. this.$store.dispatch('get_dept_tree',true).then(res => {
  1299. this.$nextTick(() => {
  1300. this.dept_tree = this.getTreeData(this.$getCache('dept_tree'));
  1301. });
  1302. });
  1303. // this.$removeCache('site_info');
  1304. // this.$store.dispatch('get_site_info').then(res => {
  1305. // if (this.$getCache('site_info')) {
  1306. // this.site_infoTIme(this.$getCache('site_info').expire_time);
  1307. // } else {
  1308. // this.site_infoTIme(res.expire_time);
  1309. // }
  1310. // });
  1311. this.handleScrolls();
  1312. },
  1313. mounted() {
  1314. this.inCommonUse.forEach((item,index)=>{
  1315. if(this.supAuthority=='employee'&&(index==1||index==4||index==5)){
  1316. item.isShow=true;
  1317. }else if(this.supAuthority!='employee'&&(index==0||index==2||index==3||index==4||index==1)){
  1318. item.isShow=true;
  1319. }
  1320. })
  1321. if (this.$getCache('Experience_data')) {
  1322. this.experience_data =this.$getCache('Experience_data').if; //是否体验账号
  1323. }
  1324. window.addEventListener('resize', this.selfAdaption);
  1325. // 修改请求接口顺序
  1326. this.getNum();// 获取审批和任务数量
  1327. this.authorityManagerHeader(); //管理员header
  1328. this.rankingListname(); //获取自定义排行榜名
  1329. this.integralForm(); //积分构成
  1330. this.weekChecking_in(); //本周考勤
  1331. this.advertising(); //广告位
  1332. // this.get_site_info()//获取公司详情----当前页面没有用到,先别删
  1333. // this.qrcode(); //生成二维码,可能无用
  1334. // this.get_list(); //待我审批的
  1335. this.$nextTick(() => {
  1336. this.$router.afterEach(() => {
  1337. //切换到此路由时让滚动条回到顶部
  1338. document.getElementsByClassName('main-content')[0].scrollTop = 0;
  1339. document.documentElement.scrollTop = 0;
  1340. });
  1341. });
  1342. // if (!this.$supremeAuthority('dept_manager')&&!this.$supremeAuthority('employee')) {
  1343. // this.get_new_employee(); //申请加入弹窗
  1344. // }
  1345. },
  1346. beforeDestroy() {
  1347. //销毁滚动条事件
  1348. window.removeEventListener('resize', this.selfAdaption); //取消echarts自适应
  1349. },
  1350. destroyed() {
  1351. if (this.notify_close) {
  1352. this.notify_close.close();
  1353. }
  1354. }
  1355. };
  1356. </script>
  1357. <style scoped>
  1358. .task-remark{
  1359. max-height: 40px;
  1360. word-break: break-all;
  1361. font-size:13px;
  1362. line-height:20px;
  1363. color:rgb(48, 49, 51);
  1364. overflow:hidden;
  1365. text-overflow:ellipsis;
  1366. display:-webkit-box;
  1367. -webkit-box-orient:vertical;
  1368. -webkit-line-clamp:2;
  1369. }
  1370. .group-name{
  1371. width:120px;
  1372. color:#606266;
  1373. margin-right: 16px;
  1374. border: 1px solid #f1f1f1;
  1375. border-radius: 5px;
  1376. padding: 5px 10px;
  1377. height: 49px;
  1378. cursor: pointer;
  1379. }
  1380. .activeGroup{
  1381. background-color: #409EFF;
  1382. color: #fff;
  1383. border: 1px solid #409EFF;
  1384. }
  1385. .blue-num{
  1386. color:#409EFF;
  1387. font-size:27px;
  1388. font-weight: 700;
  1389. }
  1390. .blue-text{
  1391. color:#606266;
  1392. font-size:14px;
  1393. padding-top:8px;
  1394. }
  1395. .bacimg{
  1396. background-repeat: no-repeat;
  1397. height: 125px;
  1398. background-position: center;
  1399. }
  1400. .el-badge__content {
  1401. background-color: #f56c6c;
  1402. border-radius: 10px;
  1403. color: #fff;
  1404. display: inline-block;
  1405. font-size: 12px;
  1406. height: 18px;
  1407. line-height: 18px;
  1408. padding: 0 6px;
  1409. text-align: center;
  1410. white-space: nowrap;
  1411. border: 1px solid #fff;
  1412. }
  1413. /deep/ .el-carousel__button {
  1414. background-color: #dadada;
  1415. }
  1416. .time-box .past {
  1417. color: #999;
  1418. }
  1419. .mask-falsh {
  1420. position: fixed;
  1421. top: 0;
  1422. left: 0;
  1423. background-color: rgba(0, 0, 0, 0.5);
  1424. width: 100%;
  1425. height: 100%;
  1426. z-index: 9999;
  1427. display: none;
  1428. }
  1429. .flash .closeBtn {
  1430. width: 35px;
  1431. z-index: 100;
  1432. height: 35px;
  1433. position: absolute;
  1434. right: 0;
  1435. padding: 5px;
  1436. cursor: pointer;
  1437. }
  1438. .flash {
  1439. display: none;
  1440. position: fixed;
  1441. top: 50%;
  1442. left: 50%;
  1443. transform: translate(-50%, -50%);
  1444. z-index: 99;
  1445. }
  1446. @media screen and (max-width: 1366px) {
  1447. .index-admin-right {
  1448. width: 100%;
  1449. }
  1450. .index-admin-left {
  1451. width: 100%;
  1452. }
  1453. .index-admin-right .div-lg-8 {
  1454. width: 16.66667%;
  1455. }
  1456. }
  1457. @media screen and (max-width: 960px) {
  1458. .card-panel-right {
  1459. width: 100%;
  1460. }
  1461. .card-panel-left {
  1462. width: 100%;
  1463. }
  1464. }
  1465. .index-admin .el-tabs {
  1466. background-color: #fff;
  1467. }
  1468. .el-tabs__item {
  1469. height: 50px;
  1470. line-height: 50px;
  1471. }
  1472. .el-tabs__item {
  1473. font-size: 16px;
  1474. }
  1475. .div {
  1476. padding: 0;
  1477. & :last-child {
  1478. margin-bottom: 0;
  1479. }
  1480. }
  1481. .index-admin .el-tabs__header {
  1482. padding: 0;
  1483. position: relative;
  1484. margin: 0 0 15px !important;
  1485. }
  1486. .top_user_info {
  1487. position: relative;
  1488. padding-top: 0;
  1489. background: #fff;
  1490. }
  1491. .top_user_info .userinfo_box {
  1492. border-right: 1px #cecccc solid;
  1493. margin: 34px 0;
  1494. }
  1495. .top_user_info .user_box {
  1496. padding-left: 0 !important;
  1497. border-right: 1px #333 solid;
  1498. }
  1499. .top_user_info .headimg_box {
  1500. padding-left: 0 !important;
  1501. }
  1502. .top_user_info .headimg_box .headimg {
  1503. width: 50px;
  1504. height: 50px;
  1505. background: #909399;
  1506. border-radius: 50px;
  1507. }
  1508. .top_user_info .user_info {
  1509. padding: 0 !important;
  1510. line-height: 25px;
  1511. }
  1512. .top_user_info .user_info .greetings {
  1513. margin: 0 auto;
  1514. font-size: 16px;
  1515. font-weight: bold;
  1516. }
  1517. .top_user_info .user_info .greetings div {
  1518. max-width: 95px;
  1519. display: inline-block;
  1520. overflow: hidden;
  1521. white-space: nowrap;
  1522. text-overflow: ellipsis;
  1523. vertical-align: top;
  1524. }
  1525. .top_user_info .user_info .greetings span {
  1526. font-size: 14px;
  1527. color: #666;
  1528. display: inline-block;
  1529. vertical-align: top;
  1530. }
  1531. .top_user_info .user_info span:nth-child(1) {
  1532. display: block;
  1533. font-size: 16px;
  1534. overflow: hidden;
  1535. white-space: nowrap;
  1536. text-overflow: ellipsis;
  1537. }
  1538. .top_user_info .person {
  1539. display: block;
  1540. font-size: 14px;
  1541. padding: 32px 0 18px 0;
  1542. color: #606266;
  1543. }
  1544. /*
  1545. padding: 18px 0 16px 0;
  1546. color: #606266;
  1547. height: 32px;
  1548. box-sizing: content-box;
  1549. */
  1550. .top_user_info .time {
  1551. font-size: 14px;
  1552. padding-right: 10px;
  1553. position: relative;
  1554. }
  1555. .hong {
  1556. position: relative;
  1557. }
  1558. .hong:before {
  1559. position: absolute;
  1560. content: '';
  1561. width: 0.4rem;
  1562. height: 0.4rem;
  1563. border-radius: 25px;
  1564. background-color: #f56c6c;
  1565. left: -0.8rem;
  1566. animation: theanimation 1s infinite alternate;
  1567. }
  1568. @keyframes theanimation {
  1569. 0% {
  1570. width: 0.4rem;
  1571. height: 0.4rem;
  1572. opacity: 0.1;
  1573. }
  1574. 100% {
  1575. width: 0.6rem;
  1576. height: 0.6rem;
  1577. opacity: 1;
  1578. }
  1579. }
  1580. .top_user_info .el-button--info {
  1581. margin-left: 40px;
  1582. }
  1583. .quick_button_box .title {
  1584. font-family: Microsoft Yahei;
  1585. font-size: 16px;
  1586. font-weight: normal;
  1587. padding-left: 20px;
  1588. }
  1589. .readyapprove_box {
  1590. text-align: center;
  1591. margin-left: 10px;
  1592. background-color: #fff;
  1593. border-radius: 5px;
  1594. padding: 20px;
  1595. /* border: 1px #e1e4e7 solid; */
  1596. }
  1597. .readyapprove_box .title {
  1598. font-family: Microsoft Yahei;
  1599. display: block;
  1600. font-size: 16px;
  1601. font-weight: normal;
  1602. text-align: left;
  1603. margin: 0px 20px 11px 0;
  1604. padding: 2px 0 0 10px;
  1605. border-left: 2px solid #409EFF;
  1606. }
  1607. .readyapprove_box #secancode {
  1608. display: inline-block;
  1609. margin: 8px auto 10px;
  1610. }
  1611. .readyapprove_box .secantitle {
  1612. display: block;
  1613. text-align: center;
  1614. font-size: 12px;
  1615. line-height: 18px;
  1616. color: #909399;
  1617. }
  1618. .raiders_box {
  1619. margin-top: 10px;
  1620. padding: 20px;
  1621. background: #fff;
  1622. border-radius: 5px;
  1623. }
  1624. .bsItem{
  1625. background-color: #ecf5ff;
  1626. border-radius: 5px;
  1627. margin: 0px 5px;
  1628. cursor: pointer;
  1629. padding: 12px;
  1630. }
  1631. .raiders_box .title {
  1632. font-family: Microsoft Yahei;
  1633. padding-left: 10px;
  1634. font-size: 16px;
  1635. font-weight: normal;
  1636. border-left: 2px solid #409EFF;
  1637. }
  1638. .raiders_box .titledes {
  1639. display: block;
  1640. padding-top: 10px;
  1641. font-size: 14px;
  1642. color: #909399;
  1643. }
  1644. .raiders_box .noremind {
  1645. display: block;
  1646. text-align: right;
  1647. font-size: 12px;
  1648. color: #909399;
  1649. cursor: pointer;
  1650. }
  1651. .raiders_box .noremind:hover {
  1652. color: #409EFF;
  1653. }
  1654. .raiders_box .noremind:active {
  1655. color: #409EFF;
  1656. }
  1657. .pointsevent_box {
  1658. display: block;
  1659. text-align: center;
  1660. margin-bottom: 10px;
  1661. margin-left: 10px;
  1662. padding-right: 0 !important;
  1663. background-color: #fff;
  1664. border-radius: 5px;
  1665. }
  1666. .pointsevent_box .title {
  1667. font-family: Microsoft Yahei;
  1668. display: block;
  1669. text-align: left;
  1670. margin-bottom: 20px;
  1671. padding: 0 0 0 10px;
  1672. font-size: 16px;
  1673. font-weight: normal;
  1674. border-left: 2px solid #409EFF;
  1675. }
  1676. .pointsevent_box .more:hover {
  1677. color: #409EFF !important;
  1678. }
  1679. .title1 {
  1680. display: block;
  1681. text-align: center;
  1682. color: #909399 !important;
  1683. padding: 0;
  1684. }
  1685. .pointsevent_box /deep/ .el-timeline {
  1686. padding-left: 0;
  1687. }
  1688. .pointsevent_box /deep/ .el-timeline .el-timeline-item:hover .el-timeline-item__node {
  1689. background: #409EFF;
  1690. }
  1691. .pointsevent_box /deep/ .el-timeline .el-timeline-item__wrapper {
  1692. text-align: left;
  1693. font-size: 14px;
  1694. color: #303133;
  1695. padding-left: 24px;
  1696. }
  1697. .pointsevent_box /deep/ .el-timeline .el-timeline-item__wrapper span {
  1698. display: block;
  1699. font-size: 14px;
  1700. color: #303133;
  1701. margin-bottom: 8px;
  1702. }
  1703. .pointsevent_box /deep/ .el-timeline .el-timeline-item__wrapper:hover span {
  1704. color: #409EFF;
  1705. cursor: pointer;
  1706. }
  1707. .pointsevent_box /deep/ .el-timeline .el-timeline-item__wrapper span:nth-child(2) {
  1708. font-size: 12px;
  1709. color: #909399;
  1710. }
  1711. .prizebuckle_box {
  1712. margin: 20px auto 20px !important;
  1713. padding: 0;
  1714. }
  1715. .prizebuckle_box .manager_box {
  1716. width: 49%;
  1717. margin-left: 1%;
  1718. height: 570px;
  1719. padding: 20px;
  1720. background: #fff;
  1721. border: 1px #e1e4e7 solid;
  1722. box-shadow: 0 2px 4px rgba(140, 140, 140, 0.1);
  1723. }
  1724. .prizebuckle_box .manager_box .title {
  1725. font-family: Microsoft Yahei;
  1726. font-size: 16px;
  1727. color: #303133;
  1728. font-weight: normal;
  1729. padding-left: 10px;
  1730. border-left: 2px solid #409EFF;
  1731. }
  1732. .prizebuckle_box .manager_box .list {
  1733. position: relative;
  1734. margin-top: 25px;
  1735. padding-bottom: 22px;
  1736. }
  1737. .prizebuckle_box .manager_box .list:hover .point:before {
  1738. box-shadow: 0 2px 4px rgba(140, 140, 140, 0.1);
  1739. cursor: pointer;
  1740. }
  1741. .prizebuckle_box .manager_box .list:hover .point {
  1742. cursor: pointer;
  1743. }
  1744. .prizebuckle_box .manager_box .list:hover:before {
  1745. background: #409EFF;
  1746. border-bottom: 1px #409EFF solid;
  1747. box-shadow: 0 2px 4px rgba(140, 140, 140, 0.25);
  1748. transition: 0.5s ease-in-out;
  1749. cursor: pointer;
  1750. }
  1751. .prizebuckle_box .manager_box .list .headimg_box {
  1752. display: block;
  1753. }
  1754. .prizebuckle_box .manager_box .list:before {
  1755. display: block;
  1756. position: absolute;
  1757. bottom: 0;
  1758. left: 20px;
  1759. width: 350px;
  1760. border-bottom: 1px #efefef solid;
  1761. content: ' ';
  1762. z-index: 1;
  1763. }
  1764. .prizebuckle_box .manager_box .list .headimg_box .headimg {
  1765. display: inline-block;
  1766. text-align: center;
  1767. width: 40px;
  1768. height: 40px;
  1769. font-size: 12px;
  1770. color: #fff;
  1771. line-height: 40px;
  1772. background: #606266;
  1773. border-radius: 40px;
  1774. }
  1775. .prizebuckle_box .manager_box .list .headimg_box span {
  1776. display: inline-block;
  1777. vertical-align: middle;
  1778. font-size: 16px;
  1779. padding-left: 6px;
  1780. }
  1781. .prizebuckle_box .manager_box .list .item {
  1782. position: relative;
  1783. text-align: center;
  1784. margin-top: 15px;
  1785. }
  1786. .prizebuckle_box .manager_box .list .item:before {
  1787. display: none;
  1788. position: absolute;
  1789. content: ' ';
  1790. top: 0;
  1791. left: 0;
  1792. width: 90%;
  1793. height: 100%;
  1794. background: #f8f8f8;
  1795. border-radius: 8px;
  1796. z-index: 1;
  1797. transition: 0.5s ease-in-out;
  1798. }
  1799. .prizebuckle_box .manager_box .list .item .point {
  1800. font-size: 20px;
  1801. color: #606266;
  1802. }
  1803. .prizebuckle_box .manager_box .list .item .describe {
  1804. font-size: 12px;
  1805. color: #606266;
  1806. padding: 10px 0;
  1807. }
  1808. /*
  1809. .prizebuckle_box .manager_box .list .point .record {
  1810. position: relative;
  1811. display: block;
  1812. width: 90px;
  1813. font-size: 20px;
  1814. color: #1c1c1c;
  1815. padding-bottom: 10px;
  1816. z-index: 2;
  1817. }
  1818. .prizebuckle_box .manager_box .list .point .name {
  1819. position: relative;
  1820. display: block;
  1821. width: 90px;
  1822. font-size: 12px;
  1823. color: #606266;
  1824. padding-bottom: 6px;
  1825. z-index: 2;
  1826. }
  1827. .prizebuckle_box .manager_box .list .point .object {
  1828. position: relative;
  1829. display: block;
  1830. width: 90px;
  1831. font-size: 12px;
  1832. color: #606266;
  1833. z-index: 2;
  1834. }
  1835. */
  1836. .prizebuckle_box .manager_box .list .more a {
  1837. display: block;
  1838. text-align: center;
  1839. font-size: 14px;
  1840. color: #909399;
  1841. margin-top: 42px;
  1842. }
  1843. .prizebuckle_box .remeber_box {
  1844. width: 49%;
  1845. height: 570px;
  1846. margin-right: 1%;
  1847. padding: 20px;
  1848. background: #fff;
  1849. border: 1px #e1e4e7 solid;
  1850. box-shadow: 0 2px 4px rgba(140, 140, 140, 0.1);
  1851. }
  1852. .prizebuckle_box .remeber_box .team_data_item {
  1853. position: relative;
  1854. }
  1855. .prizebuckle_box .remeber_box .team_data_item:before {
  1856. display: block;
  1857. position: absolute;
  1858. top: 52px;
  1859. left: 0px;
  1860. width: 390px;
  1861. border-bottom: 1px #efefef solid;
  1862. content: ' ';
  1863. z-index: 1;
  1864. }
  1865. .prizebuckle_box .remeber_box .team_data_item:hover {
  1866. cursor: pointer;
  1867. }
  1868. .prizebuckle_box .remeber_box .title {
  1869. font-family: Microsoft Yahei;
  1870. font-size: 16px;
  1871. color: #303133;
  1872. font-weight: normal;
  1873. padding-left: 10px;
  1874. border-left: 2px solid #409EFF;
  1875. }
  1876. .prizebuckle_box .remeber_box .name {
  1877. text-align: center;
  1878. font-size: 14px;
  1879. color: #606266;
  1880. padding: 28px 0 20px;
  1881. }
  1882. .prizebuckle_box .remeber_box .name:nth-child(1) {
  1883. text-align: left;
  1884. }
  1885. .prizebuckle_box .remeber_box .name:last-nth-child(1) {
  1886. text-align: right;
  1887. }
  1888. .prizebuckle_box .remeber_box .list {
  1889. position: relative;
  1890. margin-bottom: 20px;
  1891. border-bottom: none;
  1892. }
  1893. .prizebuckle_box .remeber_box .list:before {
  1894. display: none;
  1895. position: absolute;
  1896. top: -6px;
  1897. left: 20px;
  1898. right: 20px;
  1899. width: 400px;
  1900. height: 50px;
  1901. background: #f8f8f8;
  1902. border-radius: 40px 0 0 40px;
  1903. box-shadow: none;
  1904. transition: 0.35s ease-in-out;
  1905. z-index: 1;
  1906. }
  1907. .prizebuckle_box .remeber_box .list:hover:before {
  1908. background: #409EFF;
  1909. box-shadow: 1px 2px 4px rgba(51, 51, 51, 0.2);
  1910. transition: 0.35s ease-in-out;
  1911. }
  1912. .prizebuckle_box .remeber_box .list:hover .point {
  1913. color: #1c1c1c;
  1914. }
  1915. .prizebuckle_box .remeber_box .team_data_item:hover:before {
  1916. border-bottom: 1px #409EFF solid;
  1917. }
  1918. .prizebuckle_box .remeber_box .list .headimg_box {
  1919. position: relative;
  1920. display: block;
  1921. padding-right: 0 !important;
  1922. z-index: 2;
  1923. }
  1924. .prizebuckle_box .remeber_box .list .headimg_box .headimg {
  1925. display: inline-block;
  1926. text-align: center;
  1927. vertical-align: middle;
  1928. width: 40px;
  1929. height: 40px;
  1930. font-size: 12px;
  1931. color: #fff;
  1932. line-height: 40px;
  1933. background: #909399;
  1934. border-radius: 40px;
  1935. }
  1936. .prizebuckle_box .remeber_box .list .headimg_box span.headname {
  1937. width: 98px;
  1938. float: right;
  1939. display: block;
  1940. font-size: 16px;
  1941. margin-left: 4px;
  1942. line-height: 40px;
  1943. vertical-align: bottom;
  1944. overflow: hidden;
  1945. white-space: nowrap;
  1946. text-overflow: ellipsis;
  1947. }
  1948. .prizebuckle_box .remeber_box .list .point {
  1949. position: relative;
  1950. text-align: center;
  1951. padding-top: 10px;
  1952. font-size: 16px;
  1953. z-index: 2;
  1954. }
  1955. .prizebuckle_box .remeber_box .list .point .record {
  1956. display: block;
  1957. font-size: 14px;
  1958. padding-bottom: 10px;
  1959. }
  1960. .prizebuckle_box .remeber_box .list .point .name {
  1961. display: block;
  1962. font-size: 12px;
  1963. padding-bottom: 6px;
  1964. }
  1965. .prizebuckle_box .remeber_box .list .point .object {
  1966. display: block;
  1967. font-size: 12px;
  1968. }
  1969. .prizebuckle_box .remeber_box .more span {
  1970. display: block;
  1971. text-align: center;
  1972. font-size: 14px;
  1973. color: #909399;
  1974. margin-top: 0px;
  1975. }
  1976. .prizebuckle_box .more:hover span {
  1977. color: #409EFF !important;
  1978. cursor: pointer;
  1979. }
  1980. .joinin_box {
  1981. display: block;
  1982. text-align: left;
  1983. margin: 20px 0 0 20px !important;
  1984. padding-right: 0 !important;
  1985. }
  1986. .joinin_box .title {
  1987. display: block;
  1988. font-size: 16px;
  1989. color: #303133;
  1990. padding: 18px 20px 0px;
  1991. }
  1992. .joinin_box .join_name {
  1993. display: block;
  1994. font-size: 12px;
  1995. color: #909399;
  1996. padding: 10px 20px 18px;
  1997. }
  1998. .statistics_box {
  1999. margin: 0 auto 20px !important;
  2000. padding: 20px;
  2001. background: #fff;
  2002. border: 1px #e1e4e7 solid;
  2003. box-shadow: 0 2px 4px rgba(140, 140, 140, 0.1);
  2004. }
  2005. .statistics_box .title {
  2006. font-family: Microsoft Yahei;
  2007. font-size: 16px;
  2008. margin: 0 0 20px 0;
  2009. padding: 0 0 0px 10px !important;
  2010. font-weight: normal;
  2011. border-left: 2px solid #409EFF;
  2012. }
  2013. .statistics_box .num {
  2014. font-size: 20px;
  2015. color: #409EFF;
  2016. }
  2017. .statistics_box .num span {
  2018. font-size: 12px;
  2019. color: #606266;
  2020. padding-right: 10px;
  2021. }
  2022. .case_box {
  2023. margin: 20px auto 0 !important;
  2024. padding: 20px 20px 30px 20px;
  2025. background: #fff;
  2026. }
  2027. .case_box .title {
  2028. font-size: 16px;
  2029. padding: 0 0 20px 0 !important;
  2030. }
  2031. .case_box .noremind {
  2032. display: block;
  2033. text-align: right;
  2034. font-size: 12px;
  2035. padding-right: 20px;
  2036. color: #909399;
  2037. }
  2038. .case_box .newslist {
  2039. padding: 0 !important;
  2040. }
  2041. .case_box .newslist .imgbox {
  2042. width: 196px;
  2043. height: 110px;
  2044. background: #909399;
  2045. }
  2046. .case_box .newslist .listtitle {
  2047. display: block;
  2048. font-size: 14px;
  2049. color: #606266;
  2050. padding: 6px 0 0 0;
  2051. }
  2052. .case_box .newslist .des {
  2053. display: block;
  2054. font-size: 12px;
  2055. color: #606266;
  2056. padding: 10px 0 0 0;
  2057. }
  2058. .more_manager {
  2059. cursor: pointer;
  2060. padding: 20px 0;
  2061. color: rgb(144, 147, 153);
  2062. font-size: 14px;
  2063. text-align: center;
  2064. }
  2065. /* .team_data_item:hover{
  2066. color: #409EFF;
  2067. } */
  2068. .update_button:hover {
  2069. background: #fc7676;
  2070. border: 1px #fc7676 solid;
  2071. }
  2072. .update_button:active {
  2073. background: #fc7676;
  2074. border: 1px #fc7676 solid;
  2075. }
  2076. .examineAndApproveTable /deep/ td {
  2077. border: 0px solid #fff;
  2078. }
  2079. .readyapprove_box .more:hover {
  2080. color: #409EFF !important;
  2081. }
  2082. .rightexamineAndApproveList {
  2083. text-align: left;
  2084. width: 100%;
  2085. /* border-bottom: 1px solid #efefef; */
  2086. }
  2087. .List_border:nth-child(5) .rightexamineAndApproveList {
  2088. border-bottom: 0px solid #fff;
  2089. }
  2090. /* .List_border:hover{
  2091. background-color: rgb(252, 252, 252);
  2092. } */
  2093. /deep/ .el-radio-button__inner {
  2094. border: 0px solid #dcdfe6;
  2095. border-radius: 5px;
  2096. padding-right: 15px;
  2097. }
  2098. /deep/ .el-radio-button--medium .el-radio-button__inner {
  2099. padding: 7px 13px;
  2100. }
  2101. .el-radio-button:first-child /deep/ .el-radio-button__inner {
  2102. border: 0px solid #dcdfe6;
  2103. border-radius: 5px;
  2104. }
  2105. .el-radio-button:last-child /deep/ .el-radio-button__inner {
  2106. border-radius: 5px;
  2107. }
  2108. .ManagerSAwardlStyle {
  2109. text-align: center;
  2110. display: block;
  2111. cursor: pointer;
  2112. }
  2113. .ManagerSAwardlStyleB {
  2114. color: #303133;
  2115. font-size: 18px;
  2116. transition: all 0.5s;
  2117. }
  2118. .ManagerSAwardlStyleSpan {
  2119. color: rgb(48, 49, 51);
  2120. font-size: 14px;
  2121. margin-top: 5px;
  2122. display: block;
  2123. }
  2124. .ManagerSAwardlStyle:hover .ManagerSAwardlStyleB {
  2125. color: #4eb2ff;
  2126. }
  2127. .weekChecking_inStyle {
  2128. color: #606266;
  2129. font-size: 14px;
  2130. display: block;
  2131. }
  2132. .weekChecking_inStyle b {
  2133. color: rgb(38, 162, 255);
  2134. transition: all 0.5s;
  2135. }
  2136. .weekChecking_inStyle:hover b {
  2137. color: rgb(0 145 255);
  2138. }
  2139. .inCommonUseStyle {
  2140. width: 215px;
  2141. height: 54px;
  2142. border: 1px solid #c0c4cc;
  2143. margin: 16px 0 0 10px;
  2144. line-height: 54px;
  2145. border-radius: 5px;
  2146. cursor: pointer;
  2147. transition: all 0.5s;
  2148. box-sizing: border-box;
  2149. padding: 0 10px;
  2150. }
  2151. .inCommonUseStyle b {
  2152. transition: all 0.5s;
  2153. color: #303133;
  2154. font-size: 14px;
  2155. }
  2156. .inCommonUseStyle:hover {
  2157. background-color: #fcfcfc;
  2158. border: 1px solid #409EFF;
  2159. }
  2160. .inCommonUseStyle:hover b {
  2161. color: #409EFF;
  2162. }
  2163. .vtRenew {
  2164. color: #53b3f7;
  2165. }
  2166. .innerVisible p {
  2167. text-align: center;
  2168. }
  2169. /deep/ .el-dialog__body {
  2170. padding: 0 80px 15px;
  2171. }
  2172. </style>