index.vue 72 KB

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