index.vue 72 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331
  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="buckle.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 :modal-append-to-body="false" :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. let roat=this.$supremeAuthority();
  605. if(roat=='dept_manager'||roat=='employee'){
  606. params.employee_id=this.$userInfo().id
  607. }
  608. console.log(this.$userInfo())
  609. this.$http('get', '/api/integral/statistics/prize/buckle/ranking', params)
  610. .then(res => {
  611. if (res.data.code == 1) {
  612. if (res.data.data.prize.length != 0) {
  613. this.prize = res.data.data.prize[0];
  614. } else {
  615. this.prize = [];
  616. }
  617. if (res.data.data.buckle.length != 0) {
  618. this.buckle = res.data.data.buckle[0];
  619. } else {
  620. this.buckle = [];
  621. }
  622. }
  623. })
  624. .finally(() => {
  625. this.highestPrizeBuckleloading = false;
  626. });
  627. },
  628. //本周考勤
  629. //格式化日期:yyyy-MM-dd
  630. formatDate(date) {
  631. var myyear = date.getFullYear();
  632. var mymonth = date.getMonth() + 1;
  633. var myweekday = date.getDate();
  634. if (mymonth < 10) {
  635. mymonth = '0' + mymonth;
  636. }
  637. if (myweekday < 10) {
  638. myweekday = '0' + myweekday;
  639. }
  640. return myyear + '-' + mymonth + '-' + myweekday;
  641. },
  642. weekChecking_in() {
  643. this.weekChecking_inloading = true;
  644. var now = new Date();
  645. var nowTime = now.getTime();
  646. var day = now.getDay() || 7;
  647. var oneDayTime = 24 * 60 * 60 * 1000;
  648. var MondayTime = nowTime - (day - 1) * oneDayTime; //显示周一
  649. var SundayTime = nowTime + (7 - day) * oneDayTime; //显示周日
  650. var params = {
  651. start_date: this.formatDate(new Date(MondayTime)),
  652. end_date: this.formatDate(new Date(SundayTime))
  653. };
  654. this.$jtoken
  655. .get(this.serveAd + '/ad/statistics/department/weekly', {
  656. params: params
  657. })
  658. .then(res => {
  659. let datas = res.data.data;
  660. this.weekChecking_ins[0].val = datas.late_count;
  661. this.weekChecking_ins[1].val = datas.leave_early_count;
  662. this.weekChecking_ins[2].val = datas.sign_absent_count;
  663. this.weekChecking_ins[3].val = datas.absent_count;
  664. this.weekChecking_ins[4].val = datas.range_count;
  665. this.weekChecking_ins[5].val = datas.ot_count;
  666. })
  667. .finally(() => {
  668. this.weekChecking_inloading = false;
  669. });
  670. },
  671. //管理者奖扣统计
  672. ManagerSAwardCharts(Name, Award, Deduct) {
  673. //管理着奖扣统计表
  674. const chart = this.$refs.ManagerSAwardChart;
  675. console.log(Name);
  676. if (chart) {
  677. const myChart = ECharts.init(chart);
  678. const option = {
  679. tooltip: {
  680. trigger: 'axis',
  681. formatter: params => {
  682. var htmlStr = '<div>';
  683. for (let i in params) {
  684. htmlStr += '<span style="display:inline-block;background-color:' + params[i].color + ';width:8px;height:8px;border-radius:50%;margin:0 5px;"></span>';
  685. htmlStr += '<span>' + params[i].seriesName + ':</span>';
  686. htmlStr += '<span style="margin:0 5px 0 3px;">' + params[i].value + '</span><br>';
  687. }
  688. htmlStr += '</div>';
  689. return htmlStr;
  690. }
  691. },
  692. grid: {
  693. left: '5%',
  694. right: '0%'
  695. },
  696. toolbox: {
  697. feature: {}
  698. },
  699. color: ['#26A2FF', '#FFC100'],
  700. legend: {
  701. right: '0%', //设置位置
  702. data: ['奖分', '扣分']
  703. },
  704. xAxis: [
  705. {
  706. type: 'category',
  707. data: Name,
  708. axisPointer: {
  709. type: 'shadow'
  710. },
  711. axisLabel: {
  712. interval: 0 //横轴信息全部显示
  713. },
  714. axisLine: {
  715. //去掉X轴线
  716. show: false
  717. },
  718. axisTick: {
  719. //去掉X轴刻度
  720. show: false
  721. }
  722. }
  723. ],
  724. yAxis: [
  725. {
  726. type: 'value',
  727. axisLabel: {
  728. formatter: '{value}'
  729. },
  730. axisLine: {
  731. //去掉Y轴线
  732. show: false
  733. },
  734. axisTick: {
  735. //去掉Y轴刻度
  736. show: false
  737. }
  738. }
  739. ],
  740. series: [
  741. {
  742. name: '奖分',
  743. type: 'bar',
  744. barWidth: 14, //柱图宽度
  745. barGap: '0%', //柱图间距
  746. data: Award
  747. },
  748. {
  749. name: '扣分',
  750. type: 'bar',
  751. barWidth: 14, //柱图宽度
  752. barGap: '0%', //柱图间距
  753. data: Deduct
  754. }
  755. ]
  756. };
  757. myChart.setOption(option);
  758. }
  759. },
  760. deptConfirm3(val) {
  761. this.ManagerSAward(val);
  762. },
  763. ManagerSAward(item) {
  764. //管理者奖扣请求
  765. this.ManagerSAwardloading = true;
  766. let params = {};
  767. let listslength = [];
  768. if (item) {
  769. (params.dept_id = item), (params.month = this.$moment().format('YYYY-MM'));
  770. } else {
  771. (params.dept_id = 0), (params.month = this.$moment().format('YYYY-MM'));
  772. }
  773. this.$http('get', '/api/integral/statistics/task/pie', params, 'v2')
  774. .then(res => {
  775. let datas = res.data.data;
  776. listslength = datas.list;
  777. let items = [];
  778. let histogramAward = [];
  779. let histogramDeduct = [];
  780. for (let i in datas.list) {
  781. let arr = {}; //转结构
  782. (arr.type = 'userName'), (arr.id = datas.list[i].name);
  783. items.push(arr);
  784. histogramAward.push(datas.list[i].reward_point);
  785. histogramDeduct.push(datas.list[i].deduction_point);
  786. }
  787. this.ManagerSAwardlList[0].val = datas.reward_point;
  788. this.ManagerSAwardlList[1].val = datas.deduction_point;
  789. this.ManagerSAwardlList[2].val = datas.ratio;
  790. this.ManagerSAwardlList[3].val = datas.exec_count;
  791. this.ManagerSAwardlList[4].val = datas.manager_count;
  792. this.ManagerSAwardlList[5].val = datas.pass_count;
  793. this.ManagerSAwardlList[6].val = datas.fail_count;
  794. WWOpenData.prefetch({ items }, (err, data) => {
  795. if (err) {
  796. console.log(err);
  797. }
  798. var Name = data.items.map($0 => $0.data); // 这个就是转好的,直接丢到 echarts
  799. if (WWOpenData.initCanvas) {
  800. WWOpenData.initCanvas();
  801. }
  802. this.ManagerSAwardCharts(Name, histogramAward, histogramDeduct);
  803. });
  804. })
  805. .finally(() => {
  806. if (listslength.length == 0) {
  807. this.ManagerSAwardnone = true;
  808. } else {
  809. this.ManagerSAwardnone = false;
  810. }
  811. this.ManagerSAwardloading = false;
  812. });
  813. },
  814. //月度积分
  815. monthlyIntegralRanking(date, total, reward, deduction) {
  816. const chart = this.$refs.monthlyIntegralChart;
  817. if (chart) {
  818. const myChart = ECharts.init(chart);
  819. const option = {
  820. tooltip: {
  821. trigger: 'axis'
  822. },
  823. color: ['#F56C6C', '#26A2FF', '#FFC100'],
  824. legend: {
  825. right: '0%',
  826. data: ['总积分', '奖分', '扣分']
  827. },
  828. grid: {
  829. left: '3%',
  830. right: '4%',
  831. bottom: '3%',
  832. containLabel: true
  833. },
  834. toolbox: {
  835. feature: {}
  836. },
  837. xAxis: {
  838. type: 'category',
  839. boundaryGap: false,
  840. data: date
  841. },
  842. yAxis: {
  843. type: 'value',
  844. axisLine: {
  845. show: false
  846. },
  847. axisTick: {
  848. show: false
  849. }
  850. },
  851. series: [
  852. {
  853. name: '总积分',
  854. type: 'line',
  855. data: total
  856. },
  857. {
  858. name: '奖分',
  859. type: 'line',
  860. data: reward
  861. },
  862. {
  863. name: '扣分',
  864. type: 'line',
  865. data: deduction
  866. }
  867. ]
  868. };
  869. myChart.setOption(option);
  870. }
  871. },
  872. //月度积分
  873. deptConfirm2(val) {
  874. this.exclusiveMonthBranch = val;
  875. this.monthlyIntegral()
  876. },
  877. monthlyIntegral() {
  878. this.monthlyIntegralloading = true;
  879. let params = {};
  880. let listslength = [];
  881. if (this.employeeRout) {
  882. params.employee_id = this.$store.getters.user_info.id;
  883. } else {
  884. params.dept_id = this.exclusiveMonthBranch;
  885. }
  886. params.month = this.$moment().format('YYYY-MM');
  887. if (this.exclusiveMonthChecked) {
  888. params.include_fixed = 1;
  889. } else {
  890. params.include_fixed = 0;
  891. }
  892. this.$http('get', '/api/integral/statistics/curve', params)
  893. .then(res => {
  894. if (res.data.code == 1) {
  895. let lists = res.data.data;
  896. listslength = lists;
  897. this.monthlyIntegralList[0].total_point = lists.total_point;
  898. this.monthlyIntegralList[1].reward_point = lists.reward_point;
  899. this.monthlyIntegralList[2].deduction_point = lists.deduction_point;
  900. this.monthlyIntegralList[3].ratio = lists.ratio;
  901. this.monthlyIntegralList[4].toRatio = lists.contrast_total;
  902. this.monthlyIntegralList[5].toRatio = lists.contrast_reward;
  903. this.monthlyIntegralList[6].toRatio = lists.contrast_deduction;
  904. let dates = []; //日期
  905. let totals = []; //总积分
  906. let rewards = []; //奖分
  907. let deductions = []; //扣分
  908. for (let i in lists.total) {
  909. dates.push(lists.total[i].date);
  910. totals.push(lists.total[i].point);
  911. }
  912. for (let i in lists.reward) {
  913. rewards.push(lists.reward[i].point);
  914. }
  915. for (let i in lists.deduction) {
  916. deductions.push(lists.deduction[i].point);
  917. }
  918. this.monthlyIntegralRanking(dates, totals, rewards, deductions);
  919. }
  920. })
  921. .finally(() => {
  922. if (listslength.total.length == 0) {
  923. this.monthlyIntegralnone = true;
  924. } else {
  925. this.monthlyIntegralnone = false;
  926. }
  927. this.monthlyIntegralloading = false;
  928. });
  929. },
  930. //积分构成
  931. deptConfirm1(val) {
  932. this.integralForm(val);
  933. },
  934. //分为两列展示,多传legendDataTwo
  935. drawLine(legendDataOne, legendDataTwo, dadalist) {
  936. const chart = this.$refs.IntegralFormChart;
  937. //此处可给固定颜色,不给就所有颜色随机
  938. let colors = ['rgb(38, 162, 255)', '#f36f2a', '#fecb09', '#00b6bd', '#e85d53', '#fecb09', '#725197', '#fcb814', '#41a08d', '#425a95', '#ea8b84', '#9d1d62', '#fcb814'];
  939. let legendDataLeng = legendDataOne.length + legendDataTwo.length;
  940. if (legendDataLeng > colors.length) {
  941. //当列表大于固定颜色时,给随机颜色
  942. let colorsLeng = colors.length;
  943. for (let i = 0; i <= legendDataLeng - colorsLeng; i++) {
  944. // colors.push('#' + Math.random().toString(16).substr(2, 6).toUpperCase());//也是随机色
  945. colors.push('rgb(' + Math.round(Math.random() * 255) + ',' + Math.round(Math.random() * 255) + ',' + Math.round(Math.random() * 255) + ')');
  946. }
  947. }
  948. //只显示 N 条标题,多余隐藏,但是饼图不会隐藏
  949. let DataLengths = [];
  950. for (let i in legendDataTwo) {
  951. if (i < 8) {
  952. DataLengths.push(legendDataTwo[i]);
  953. }
  954. }
  955. let left1 = '45%';
  956. let left2 = '45%';
  957. let leftBT = '25%';
  958. if (legendDataTwo.length != 0) {
  959. left1 = '33%';
  960. leftBT = '19%';
  961. }
  962. if (chart) {
  963. const myChart = ECharts.init(chart);
  964. var legendData1 = legendDataOne;
  965. var legendData2 = DataLengths;
  966. const option = {
  967. tooltip: {
  968. trigger: 'item',
  969. formatter: '{b}'
  970. },
  971. legend: [
  972. {
  973. type: 'scroll',
  974. orient: 'vertical',
  975. icon: 'square',
  976. left: left1,
  977. align: 'left',
  978. top: '23%',
  979. itemGap: 20,
  980. // bottom:'50%',
  981. textStyle: {
  982. fontSize: 14,
  983. color: 'rgb(48, 49, 51)'
  984. },
  985. data: legendData1
  986. },
  987. //分为两列展示
  988. {
  989. type: 'scroll',
  990. orient: 'vertical',
  991. icon: 'square',
  992. left: '68%',
  993. align: 'left',
  994. top: '23%',
  995. itemGap: 20,
  996. // bottom:'50%',
  997. textStyle: {
  998. fontSize: 14,
  999. color: 'rgb(48, 49, 51)'
  1000. },
  1001. data: legendData2
  1002. }
  1003. ],
  1004. color: colors,
  1005. grid: {
  1006. x: 25,
  1007. y: 45,
  1008. x2: 5,
  1009. y2: 20,
  1010. borderWidth: 1
  1011. },
  1012. toolbox: {
  1013. show: true,
  1014. feature: {
  1015. mark: { show: true },
  1016. magicType: {
  1017. show: true,
  1018. type: ['pie', 'funnel']
  1019. }
  1020. }
  1021. },
  1022. series: [
  1023. {
  1024. name: '',
  1025. type: 'pie',
  1026. radius: [20, 110],
  1027. center: [leftBT, '50%'],
  1028. roseType: 'radius',
  1029. label: {
  1030. show: false
  1031. },
  1032. emphasis: {
  1033. label: {
  1034. show: false
  1035. }
  1036. },
  1037. data: dadalist
  1038. }
  1039. ]
  1040. };
  1041. myChart.setOption(option);
  1042. }
  1043. },
  1044. integralForm(item) {
  1045. this.IntegralFormChartLoad = true;
  1046. let listslength = [];
  1047. let params = {};
  1048. if (item) {
  1049. (params.dept_id = item), (params.month = this.$moment().format('YYYY-MM'));
  1050. } else {
  1051. (params.dept_id = 0), (params.month = this.$moment().format('YYYY-MM'));
  1052. }
  1053. if (this.employeeRout) {
  1054. params.employee_id = this.$store.getters.user_info.id;
  1055. }
  1056. this.$http('get', '/api/integral/statistics/pie/b', params, 'v2')
  1057. .then(res => {
  1058. let lists = res.data.data.list;
  1059. listslength = lists;
  1060. let legendData1 = [];
  1061. let legendData2 = [];
  1062. let dadalist = [];
  1063. //分为两列展示
  1064. // let listLeng = Math.ceil((lists.length)/2)
  1065. for (let i in lists) {
  1066. if (lists[i].name.length > 10) {
  1067. lists[i].name = lists[i].name.slice(0, 10) + '...';
  1068. }
  1069. //分为两列展示
  1070. // if(i<listLeng){
  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. if (i < 8) {
  1076. legendData1.push(lists[i].name + ' ' + '奖' + lists[i].reward + ' ' + '扣' + lists[i].deduction + ' ' + lists[i].ratio + '%');
  1077. } else {
  1078. legendData2.push(lists[i].name + ' ' + '奖' + lists[i].reward + ' ' + '扣' + lists[i].deduction + ' ' + lists[i].ratio + '%');
  1079. }
  1080. // console.log(lists.length/2)
  1081. let dataListDx = {};
  1082. if (lists[i].ratio < 0) {
  1083. dataListDx.value = 0;
  1084. } else {
  1085. dataListDx.value = lists[i].ratio;
  1086. }
  1087. dataListDx.name = lists[i].name + ' ' + '奖' + lists[i].reward + ' ' + '扣' + lists[i].deduction + ' ' + lists[i].ratio + '%';
  1088. // dataListDx.name = lists[i].name
  1089. dadalist.push(dataListDx);
  1090. }
  1091. //分为两列展示,多传legendData2
  1092. this.drawLine(legendData1, legendData2, dadalist); //图表
  1093. // this.drawLine(legendData1,dadalist)//图表
  1094. })
  1095. .finally(() => {
  1096. if (listslength.length == 0) {
  1097. this.IntegralFormnone = true;
  1098. } else {
  1099. this.IntegralFormnone = false;
  1100. }
  1101. this.IntegralFormChartLoad = false;
  1102. });
  1103. },
  1104. customRanking(target_id, date_interval) {
  1105. //自定义排名 date_interval=时间
  1106. let data = {
  1107. group_id: target_id,
  1108. pt_id: 3,
  1109. index_ranking: 1
  1110. };
  1111. data.date =
  1112. date_interval == 1 ? this.$moment().format('YYYYMM') : date_interval == 2 ? this.$moment().format('YYYYQ') : date_interval == 3 ? this.$moment().format('YYYY') : '0';
  1113. // request.get("/api/integral/statistics/ranking", { params: params })
  1114. this.$http('get', '/api/integral/statistics/groups/rank', data)
  1115. .then(res => {
  1116. let lists = res.data.data.list;
  1117. let rankingList = [];
  1118. let arr = false;
  1119. for (let i in lists) {
  1120. let rankingJson = {};
  1121. if (lists[i].employee_name) {
  1122. arr = true;
  1123. } else {
  1124. arr = false;
  1125. rankingJson.employee_id = lists[i].employee_id;
  1126. rankingJson.employee_img_url = lists[i].img_url;
  1127. rankingJson.employee_name = lists[i].name;
  1128. rankingJson.point = lists[i].point;
  1129. rankingJson.rank = lists[i].rank;
  1130. rankingJson.status_remark = '';
  1131. rankingList.push(rankingJson);
  1132. }
  1133. }
  1134. if (arr) {
  1135. this.rankingListDetails = lists;
  1136. } else {
  1137. this.rankingListDetails = rankingList;
  1138. }
  1139. })
  1140. .finally(() => {
  1141. this.addUpRankingLoad = false;
  1142. });
  1143. },
  1144. addUpRanking() {
  1145. //累计B分排名
  1146. let params = {
  1147. dept_id: 0,
  1148. sort: 'DESC',
  1149. page: 1,
  1150. page_size: 10,
  1151. pt_id: 3,
  1152. type: 'all',
  1153. index_ranking: 1
  1154. };
  1155. this.$http('get', '/api/integral/statistics/ranking', params, 'v2')
  1156. .then(res => {
  1157. this.rankingListDetails = res.data.data.list;
  1158. })
  1159. .finally(() => {
  1160. this.addUpRankingLoad = false;
  1161. });
  1162. },
  1163. departmentOfRanking() {
  1164. //部门B分排名
  1165. this.RankingPush = '/dept_rank';
  1166. let params = {
  1167. dept_id: 0,
  1168. sort: 'DESC',
  1169. pt_id: 3,
  1170. time_type: 1,
  1171. page: 1,
  1172. page_size: 10,
  1173. position: 'all',
  1174. month: this.$moment().format('YYYY-MM'),
  1175. index_ranking: 1
  1176. };
  1177. this.$http('get', '/api/integral/statistics/ranking', params, 'v2')
  1178. .then(res => {
  1179. this.rankingListDetails = res.data.data.list;
  1180. })
  1181. .finally(() => {
  1182. this.addUpRankingLoad = false;
  1183. });
  1184. },
  1185. rankingListname() {
  1186. //获取排名列表
  1187. this.tabPositionLoad = true;
  1188. let params = {
  1189. page: 1,
  1190. page_size: 7
  1191. };
  1192. this.$http('get', '/api/integral/statistics/ranking/list', params)
  1193. .then(res => {
  1194. if (res.data.code == 1) {
  1195. let lists = res.data.data.list;
  1196. for (let i in lists) {
  1197. lists[i].val = i;
  1198. if (lists[i].type == 'normal') {
  1199. lists[i].group_name = '阶段排名(月)';
  1200. }
  1201. if (lists[i].type == 'all') {
  1202. lists[i].group_name = '累计B分排名';
  1203. }
  1204. this.rankingList.push(lists[i]);
  1205. }
  1206. this.addUpRankingLoad = true;
  1207. this.departmentOfRanking(); //进入获取部门B分排名数据
  1208. } else {
  1209. self.$message.error(res.data.data.msg);
  1210. }
  1211. })
  1212. .catch(e => {
  1213. self.$message.error(e.data.data.msg);
  1214. })
  1215. .finally(() => {
  1216. this.tabPositionLoad = false;
  1217. // self.item_loading = false;
  1218. });
  1219. },
  1220. tabPositions(e, item) {
  1221. if (e.target.tagName === 'INPUT') return;
  1222. if (item) {
  1223. this.addUpRankingLoad = true;
  1224. }
  1225. if (item.type == 'normal') {
  1226. this.RankingPush = '/dept_rank';
  1227. this.departmentOfRanking();
  1228. } else if (item.type == 'all') {
  1229. this.RankingPush = '/total_rank';
  1230. this.addUpRanking();
  1231. } else if (item.type == 'custom') {
  1232. this.RankingPush = '/custom_rank';
  1233. this.customRanking(item.target_id, item.date_interval);
  1234. }
  1235. },
  1236. //审批
  1237. openDetail(item) {
  1238. this.detail_id = item.id;
  1239. this.detailShow = true;
  1240. },
  1241. get_list() {
  1242. this.examineAndApproveloading = true;
  1243. let params = {
  1244. type: 'waiting',
  1245. source_type: 0,
  1246. pt_id: 0,
  1247. page_size: 3,
  1248. page: 1
  1249. };
  1250. this.$http('get', '/api/integral/review/list', params)
  1251. .then(res => {
  1252. if (res.data.code == 1) {
  1253. this.examineAndApproveList = res.data.data.list;
  1254. this.examineAndApproveindex = res.data.data.total;
  1255. } else {
  1256. this.$message.error(res.data.data.msg);
  1257. }
  1258. this.examineAndApproveloading = false;
  1259. })
  1260. .catch(e => {
  1261. this.examineAndApproveloading = false;
  1262. });
  1263. },
  1264. renew() {
  1265. window.open('http://p.qiao.baidu.com/cps/chat?siteId=10793815&userId=3040844', '_blank');
  1266. },
  1267. // 生成二维码
  1268. qrcode() {
  1269. let self = this;
  1270. let code = window.location.href.substring(0, window.location.href.length - 5) + 'android';
  1271. let qrcode = new QRCode('secancode', {
  1272. width: 110,
  1273. height: 110, // 高度
  1274. text: code // 二维码内容
  1275. });
  1276. },
  1277. openGzd(val) {
  1278. val ? this.$router.push({ path: val }) : '';
  1279. },
  1280. // 递归判断列表,把最后的children设为undefined
  1281. getTreeData(data) {
  1282. for (var i = 0; i < data.length; i++) {
  1283. if (data[i].children.length < 1) {
  1284. // children若为空数组,则将children设为undefined
  1285. data[i].children = undefined;
  1286. } else {
  1287. // children若不为空数组,则继续 递归调用 本方法
  1288. this.getTreeData(data[i].children);
  1289. }
  1290. }
  1291. return data;
  1292. },
  1293. site_infoTIme(site_info) {
  1294. let moment = this.$moment;
  1295. let create_time = site_info;
  1296. let pastdueTime = moment(create_time.toString().length == 10 ? create_time * 1000 : create_time).format('YYYY-MM-DD');
  1297. let atpresentDate = moment().format('YYYY-MM-DD');
  1298. let date = moment(pastdueTime).diff(moment(atpresentDate), 'days');
  1299. // date = 25
  1300. if (date >= 0 && date <= 30) {
  1301. this.pastdueDate = '您的积分软件即将到期,有效期至' + pastdueTime + ',请及时续费以免影响使用';
  1302. } else if (date < 0) {
  1303. this.pastdueDate = '您的积分软件已到期,有效期:' + pastdueTime + ',请及时续费以免影响使用';
  1304. } else {
  1305. this.pastdueDate = null;
  1306. }
  1307. },
  1308. overdueToken() {
  1309. let moment = this.$moment;
  1310. let atpresentTime = moment().format('YYYY-MM-DD');
  1311. if (localStorage.getItem('overdueToken')) {
  1312. let overdue_Token = localStorage.getItem('overdueToken');
  1313. let overdueNum = moment(atpresentTime).diff(moment(overdue_Token), 'days');
  1314. if (overdueNum >= 7 && overdueNum <= 15) {
  1315. this.refreshToken();
  1316. }
  1317. } else {
  1318. localStorage.setItem('overdueToken', atpresentTime);
  1319. }
  1320. },
  1321. refreshToken() {
  1322. this.$http('get', '/api/fresh_token').then(res => {
  1323. let employee_token = res.data.data.employee_token;
  1324. let account_token = res.data.data.account_token;
  1325. setToken(employee_token);
  1326. localStorage.setItem('user_token_temp', account_token);
  1327. localStorage.removeItem('overdueToken');
  1328. this.overdueToken();
  1329. });
  1330. }
  1331. },
  1332. created() {
  1333. this.$store.dispatch('get_point_types').then((res) => {})
  1334. this.$store.dispatch('get_site_info').then((res) => {})
  1335. this.$store.dispatch('get_employee_map').then((res) => {}) // 取得员工列表的地图
  1336. this.$store.dispatch('get_dept_tree').then((res) => {}) // 获取部门树型结构列表
  1337. if (this.$store.getters.user_info.manager_type == 4) {
  1338. this.currentTubiao = 'tubiaoAdmin';
  1339. } else if (this.$store.getters.user_info.manager_type == 0) {
  1340. this.currentTubiao = 'tubiaoEmployee';
  1341. }
  1342. if (localStorage.getItem('dept_tree')) {
  1343. this.dept_tree = this.getTreeData(JSON.parse(localStorage.getItem('dept_tree')));
  1344. } else {
  1345. this.$store.dispatch('get_dept_tree').then(res => {
  1346. this.$nextTick(() => {
  1347. this.dept_tree = this.getTreeData(JSON.parse(localStorage.getItem('dept_tree')));
  1348. });
  1349. });
  1350. }
  1351. localStorage.removeItem('site_info');
  1352. this.$store.dispatch('get_site_info').then(res => {
  1353. if (JSON.parse(localStorage.getItem('site_info'))) {
  1354. this.site_infoTIme(JSON.parse(localStorage.getItem('site_info')).expire_time);
  1355. } else {
  1356. this.site_infoTIme(res.expire_time);
  1357. }
  1358. });
  1359. },
  1360. mounted() {
  1361. if (this.employeeRout) {
  1362. this.inCommonUse = [];
  1363. this.inCommonUse.push(
  1364. { name: '申请积分', image: 'static/images/a_apply.png', push: '/apply_list' },
  1365. { name: '领任务', image: 'static/images/task_hall.png', push: '/get_task' }
  1366. );
  1367. }
  1368. console.log(WWOpenData);
  1369. if (JSON.parse(localStorage.getItem('Experience_data'))) {
  1370. this.experience_data = JSON.parse(localStorage.getItem('Experience_data')).if; //是否体验账号
  1371. }
  1372. window.addEventListener('scroll', this.handleScrolls, true);
  1373. // 修改请求接口顺序
  1374. //判断是创始人还是管理员
  1375. if (this.creatorJurisdiction) {
  1376. //创始人
  1377. this.highestPrizeBuckle(); //奖扣分最高积分事件
  1378. } else {
  1379. //管理员
  1380. this.authorityManagerHeader(); //管理员header
  1381. }
  1382. if (this.employeeRout) {
  1383. this.highestPrizeBuckle(); //奖扣分最高积分事件
  1384. }
  1385. this.rankingListname(); //获取自定义排行榜名
  1386. // this.monthlyIntegral()//月度积分
  1387. this.integralForm(); //积分构成
  1388. this.get_list(); //待我审批的
  1389. if (!this.creatorJurisdiction && !this.employeeRout) {
  1390. //创始人不请求奖扣分最高积分事件
  1391. this.highestPrizeBuckle(); //奖扣分最高积分事件
  1392. }
  1393. // this.weekChecking_in()//本周考勤
  1394. this.advertising(); //广告位
  1395. this.$nextTick(() => {
  1396. this.$router.afterEach(() => {
  1397. //切换到此路由时让滚动条回到顶部
  1398. document.getElementsByClassName('main-content')[0].scrollTop = 0;
  1399. document.documentElement.scrollTop = 0;
  1400. });
  1401. });
  1402. },
  1403. beforeDestroy() {
  1404. //销毁滚动条事件
  1405. window.removeEventListener('scroll', this.handleScrolls, true);
  1406. },
  1407. destroyed() {
  1408. if (this.notify_close) {
  1409. this.notify_close.close();
  1410. }
  1411. }
  1412. };
  1413. </script>
  1414. <style scoped>
  1415. /deep/ .el-carousel__button {
  1416. background-color: #dadada;
  1417. }
  1418. .time-box .past {
  1419. color: #999;
  1420. }
  1421. .mask-falsh {
  1422. position: fixed;
  1423. top: 0;
  1424. left: 0;
  1425. background-color: rgba(0, 0, 0, 0.5);
  1426. width: 100%;
  1427. height: 100%;
  1428. z-index: 9999;
  1429. display: none;
  1430. }
  1431. .flash .closeBtn {
  1432. width: 35px;
  1433. z-index: 100;
  1434. height: 35px;
  1435. position: absolute;
  1436. right: 0;
  1437. padding: 5px;
  1438. cursor: pointer;
  1439. }
  1440. .flash {
  1441. display: none;
  1442. position: fixed;
  1443. top: 50%;
  1444. left: 50%;
  1445. transform: translate(-50%, -50%);
  1446. z-index: 99;
  1447. }
  1448. @media screen and (max-width: 1366px) {
  1449. .index-admin-right {
  1450. width: 100%;
  1451. }
  1452. .index-admin-left {
  1453. width: 100%;
  1454. }
  1455. .index-admin-right .el-col-lg-8 {
  1456. width: 16.66667%;
  1457. }
  1458. }
  1459. @media screen and (max-width: 960px) {
  1460. .card-panel-right {
  1461. width: 100%;
  1462. }
  1463. .card-panel-left {
  1464. width: 100%;
  1465. }
  1466. }
  1467. .index-admin .el-tabs {
  1468. background-color: #fff;
  1469. }
  1470. .el-tabs__item {
  1471. height: 50px;
  1472. line-height: 50px;
  1473. }
  1474. .el-tabs__item {
  1475. font-size: 16px;
  1476. }
  1477. .el-row {
  1478. padding: 0;
  1479. & :last-child {
  1480. margin-bottom: 0;
  1481. }
  1482. }
  1483. .index-admin .el-tabs__header {
  1484. padding: 0;
  1485. position: relative;
  1486. margin: 0 0 15px !important;
  1487. }
  1488. .top_user_info {
  1489. position: relative;
  1490. padding-top: 0;
  1491. background: #fff;
  1492. border: 1px #e1e4e7 solid;
  1493. box-shadow: 0 2px 4px rgba(140, 140, 140, 0.1);
  1494. }
  1495. .top_user_info .userinfo_box {
  1496. border-right: 1px #cecccc solid;
  1497. margin: 34px 0;
  1498. }
  1499. .top_user_info .user_box {
  1500. padding-left: 0 !important;
  1501. border-right: 1px #333 solid;
  1502. }
  1503. .top_user_info .headimg_box {
  1504. padding-left: 0 !important;
  1505. }
  1506. .top_user_info .headimg_box .headimg {
  1507. width: 50px;
  1508. height: 50px;
  1509. background: #909399;
  1510. border-radius: 50px;
  1511. }
  1512. .top_user_info .user_info {
  1513. padding: 0 !important;
  1514. line-height: 25px;
  1515. }
  1516. .top_user_info .user_info .greetings {
  1517. margin: 0 auto;
  1518. font-size: 16px;
  1519. font-weight: bold;
  1520. }
  1521. .top_user_info .user_info .greetings div {
  1522. max-width: 95px;
  1523. display: inline-block;
  1524. overflow: hidden;
  1525. white-space: nowrap;
  1526. text-overflow: ellipsis;
  1527. vertical-align: top;
  1528. }
  1529. .top_user_info .user_info .greetings span {
  1530. font-size: 14px;
  1531. color: #666;
  1532. display: inline-block;
  1533. vertical-align: top;
  1534. }
  1535. .top_user_info .user_info span:nth-child(1) {
  1536. display: block;
  1537. font-size: 16px;
  1538. overflow: hidden;
  1539. white-space: nowrap;
  1540. text-overflow: ellipsis;
  1541. }
  1542. .top_user_info .person {
  1543. display: block;
  1544. font-size: 14px;
  1545. padding: 32px 0 18px 0;
  1546. color: #606266;
  1547. }
  1548. /*
  1549. padding: 18px 0 16px 0;
  1550. color: #606266;
  1551. height: 32px;
  1552. box-sizing: content-box;
  1553. */
  1554. .top_user_info .time {
  1555. font-size: 14px;
  1556. padding-right: 10px;
  1557. position: relative;
  1558. }
  1559. .hong {
  1560. position: relative;
  1561. }
  1562. .hong:before {
  1563. position: absolute;
  1564. content: '';
  1565. width: 0.4rem;
  1566. height: 0.4rem;
  1567. border-radius: 25px;
  1568. background-color: #f56c6c;
  1569. left: -0.8rem;
  1570. animation: theanimation 1s infinite alternate;
  1571. }
  1572. @keyframes theanimation {
  1573. 0% {
  1574. width: 0.4rem;
  1575. height: 0.4rem;
  1576. opacity: 0.1;
  1577. }
  1578. 100% {
  1579. width: 0.6rem;
  1580. height: 0.6rem;
  1581. opacity: 1;
  1582. }
  1583. }
  1584. .top_user_info .el-button--info {
  1585. margin-left: 40px;
  1586. }
  1587. .quick_button_box .title {
  1588. font-family: Microsoft Yahei;
  1589. font-size: 16px;
  1590. font-weight: normal;
  1591. padding-left: 20px;
  1592. }
  1593. /* .quick_button_box .quickbutton {
  1594. margin-top: 26px;
  1595. display: flex;
  1596. } */
  1597. /* .quick_button_box .quickbutton .imgbox {
  1598. display: block;
  1599. text-align: center;
  1600. width: calc(100%/5);
  1601. flex: 1;
  1602. opacity:0.76;
  1603. transition:0.35s ease-in-out;
  1604. }
  1605. .quick_button_box .quickbutton .imgbox img:hover{
  1606. cursor: pointer;
  1607. opacity:1;
  1608. transform:scale(1.1);
  1609. transition:0.35s ease-in-out;
  1610. }
  1611. .quick_button_box .quickbutton .imgbox:hover .buttontitle{
  1612. color:#409EFF;
  1613. }
  1614. .quick_button_box .quickbutton .imgbox img {
  1615. display: inline-block;
  1616. width: 72px;
  1617. height: 72px;
  1618. border-radius: 16px;
  1619. transition:0.35s ease-in-out;
  1620. }
  1621. .quick_button_box .quickbutton .imgbox .buttontitle {
  1622. display: block;
  1623. text-align: center;
  1624. font-size: 14px;
  1625. margin-top: 18px;
  1626. } */
  1627. .readyapprove_box {
  1628. /* display: block; */
  1629. text-align: center;
  1630. margin-left: 20px;
  1631. /* padding-right: 0 !important; */
  1632. border: 1px #e1e4e7 solid;
  1633. box-shadow: 0 2px 4px rgba(140, 140, 140, 0.1);
  1634. }
  1635. .readyapprove_box .title {
  1636. font-family: Microsoft Yahei;
  1637. display: block;
  1638. font-size: 16px;
  1639. font-weight: normal;
  1640. text-align: left;
  1641. margin: 0px 20px 11px 0;
  1642. padding: 2px 0 0 10px;
  1643. border-left: 2px solid #409eff;
  1644. }
  1645. .readyapprove_box #secancode {
  1646. display: inline-block;
  1647. margin: 8px auto 10px;
  1648. }
  1649. .readyapprove_box .secantitle {
  1650. display: block;
  1651. text-align: center;
  1652. font-size: 12px;
  1653. line-height: 18px;
  1654. color: #909399;
  1655. }
  1656. .raiders_box {
  1657. margin-top: 20px;
  1658. padding: 20px;
  1659. background: #fff;
  1660. border: 1px #e1e4e7 solid;
  1661. box-shadow: 0 2px 4px rgba(140, 140, 140, 0.1);
  1662. }
  1663. .raiders_box .title {
  1664. font-family: Microsoft Yahei;
  1665. padding-left: 10px;
  1666. font-size: 16px;
  1667. font-weight: normal;
  1668. border-left: 2px solid #409eff;
  1669. }
  1670. .raiders_box .titledes {
  1671. display: block;
  1672. padding-top: 10px;
  1673. font-size: 14px;
  1674. color: #909399;
  1675. }
  1676. .raiders_box .noremind {
  1677. display: block;
  1678. text-align: right;
  1679. font-size: 12px;
  1680. color: #909399;
  1681. cursor: pointer;
  1682. }
  1683. .raiders_box .noremind:hover {
  1684. color: #409eff;
  1685. }
  1686. .raiders_box .noremind:active {
  1687. color: #409eff;
  1688. }
  1689. .pointsevent_box {
  1690. display: block;
  1691. text-align: center;
  1692. margin: 20px 0 0 20px;
  1693. padding-right: 0 !important;
  1694. border: 1px #e1e4e7 solid;
  1695. box-shadow: 0 2px 4px rgba(140, 140, 140, 0.1);
  1696. }
  1697. .pointsevent_box .title {
  1698. font-family: Microsoft Yahei;
  1699. display: block;
  1700. text-align: left;
  1701. margin-bottom: 20px;
  1702. padding: 0 0 0 10px;
  1703. font-size: 16px;
  1704. font-weight: normal;
  1705. border-left: 2px solid #409eff;
  1706. }
  1707. .pointsevent_box .more:hover {
  1708. color: #26a2ff !important;
  1709. }
  1710. .nopoint_box {
  1711. display: inline-block;
  1712. text-align: center;
  1713. width: 100%;
  1714. margin-bottom: 10px;
  1715. }
  1716. .nopoint_box .noimg {
  1717. display: inline-block;
  1718. width: 110px;
  1719. height: 110px;
  1720. margin: 22px auto 16px;
  1721. background: url(/images/nodata_default.png) no-repeat center;
  1722. background-size: 99%;
  1723. }
  1724. .nopoint_box .noperson {
  1725. display: inline-block;
  1726. width: 110px;
  1727. height: 110px;
  1728. margin: 22px auto 16px;
  1729. background: url(/images/noperson_default.png) no-repeat center;
  1730. background-size: 99%;
  1731. }
  1732. .nopoint_box .title1 {
  1733. display: block;
  1734. text-align: center;
  1735. font-size: 12px !important;
  1736. color: #909399 !important;
  1737. padding: 0;
  1738. }
  1739. .nopoint_box a {
  1740. color: #26a2ff;
  1741. }
  1742. .pointsevent_box /deep/ .el-timeline {
  1743. padding-left: 0;
  1744. }
  1745. .pointsevent_box /deep/ .el-timeline .el-timeline-item:hover .el-timeline-item__node {
  1746. background: #409eff;
  1747. }
  1748. .pointsevent_box /deep/ .el-timeline .el-timeline-item__wrapper {
  1749. text-align: left;
  1750. font-size: 14px;
  1751. color: #303133;
  1752. padding-left: 24px;
  1753. }
  1754. .pointsevent_box /deep/ .el-timeline .el-timeline-item__wrapper span {
  1755. display: block;
  1756. font-size: 14px;
  1757. color: #303133;
  1758. margin-bottom: 8px;
  1759. }
  1760. .pointsevent_box /deep/ .el-timeline .el-timeline-item__wrapper:hover span {
  1761. color: #409eff;
  1762. cursor: pointer;
  1763. }
  1764. .pointsevent_box /deep/ .el-timeline .el-timeline-item__wrapper span:nth-child(2) {
  1765. font-size: 12px;
  1766. color: #909399;
  1767. }
  1768. .prizebuckle_box {
  1769. margin: 20px auto 20px !important;
  1770. padding: 0;
  1771. }
  1772. .prizebuckle_box .manager_box {
  1773. width: 49%;
  1774. margin-left: 1%;
  1775. height: 570px;
  1776. padding: 20px;
  1777. background: #fff;
  1778. border: 1px #e1e4e7 solid;
  1779. box-shadow: 0 2px 4px rgba(140, 140, 140, 0.1);
  1780. }
  1781. .prizebuckle_box .manager_box .title {
  1782. font-family: Microsoft Yahei;
  1783. font-size: 16px;
  1784. color: #303133;
  1785. font-weight: normal;
  1786. padding-left: 10px;
  1787. border-left: 2px solid #409eff;
  1788. }
  1789. .prizebuckle_box .manager_box .list {
  1790. position: relative;
  1791. margin-top: 25px;
  1792. padding-bottom: 22px;
  1793. }
  1794. .prizebuckle_box .manager_box .list:hover .point:before {
  1795. box-shadow: 0 2px 4px rgba(140, 140, 140, 0.1);
  1796. cursor: pointer;
  1797. }
  1798. .prizebuckle_box .manager_box .list:hover .point {
  1799. cursor: pointer;
  1800. }
  1801. .prizebuckle_box .manager_box .list:hover:before {
  1802. background: #409eff;
  1803. border-bottom: 1px #409eff solid;
  1804. box-shadow: 0 2px 4px rgba(140, 140, 140, 0.25);
  1805. transition: 0.5s ease-in-out;
  1806. cursor: pointer;
  1807. }
  1808. .prizebuckle_box .manager_box .list .headimg_box {
  1809. display: block;
  1810. }
  1811. .prizebuckle_box .manager_box .list:before {
  1812. display: block;
  1813. position: absolute;
  1814. bottom: 0;
  1815. left: 20px;
  1816. width: 350px;
  1817. border-bottom: 1px #efefef solid;
  1818. content: ' ';
  1819. z-index: 1;
  1820. }
  1821. .prizebuckle_box .manager_box .list .headimg_box .headimg {
  1822. display: inline-block;
  1823. text-align: center;
  1824. width: 40px;
  1825. height: 40px;
  1826. font-size: 12px;
  1827. color: #fff;
  1828. line-height: 40px;
  1829. background: #606266;
  1830. border-radius: 40px;
  1831. }
  1832. .prizebuckle_box .manager_box .list .headimg_box span {
  1833. display: inline-block;
  1834. vertical-align: middle;
  1835. font-size: 16px;
  1836. padding-left: 6px;
  1837. }
  1838. .prizebuckle_box .manager_box .list .item {
  1839. position: relative;
  1840. text-align: center;
  1841. margin-top: 15px;
  1842. }
  1843. .prizebuckle_box .manager_box .list .item:before {
  1844. display: none;
  1845. position: absolute;
  1846. content: ' ';
  1847. top: 0;
  1848. left: 0;
  1849. width: 90%;
  1850. height: 100%;
  1851. background: #f8f8f8;
  1852. border-radius: 8px;
  1853. z-index: 1;
  1854. transition: 0.5s ease-in-out;
  1855. }
  1856. .prizebuckle_box .manager_box .list .item .point {
  1857. font-size: 20px;
  1858. color: #606266;
  1859. }
  1860. .prizebuckle_box .manager_box .list .item .describe {
  1861. font-size: 12px;
  1862. color: #606266;
  1863. padding: 10px 0;
  1864. }
  1865. .prizebuckle_box .manager_box .list .more a {
  1866. display: block;
  1867. text-align: center;
  1868. font-size: 14px;
  1869. color: #909399;
  1870. margin-top: 42px;
  1871. }
  1872. .prizebuckle_box .remeber_box {
  1873. width: 49%;
  1874. height: 570px;
  1875. margin-right: 1%;
  1876. padding: 20px;
  1877. background: #fff;
  1878. border: 1px #e1e4e7 solid;
  1879. box-shadow: 0 2px 4px rgba(140, 140, 140, 0.1);
  1880. }
  1881. .prizebuckle_box .remeber_box .team_data_item {
  1882. position: relative;
  1883. }
  1884. .prizebuckle_box .remeber_box .team_data_item:before {
  1885. display: block;
  1886. position: absolute;
  1887. top: 52px;
  1888. left: 0px;
  1889. width: 390px;
  1890. border-bottom: 1px #efefef solid;
  1891. content: ' ';
  1892. z-index: 1;
  1893. }
  1894. .prizebuckle_box .remeber_box .team_data_item:hover {
  1895. cursor: pointer;
  1896. }
  1897. .prizebuckle_box .remeber_box .title {
  1898. font-family: Microsoft Yahei;
  1899. font-size: 16px;
  1900. color: #303133;
  1901. font-weight: normal;
  1902. padding-left: 10px;
  1903. border-left: 2px solid #409eff;
  1904. }
  1905. .prizebuckle_box .remeber_box .name {
  1906. text-align: center;
  1907. font-size: 14px;
  1908. color: #606266;
  1909. padding: 28px 0 20px;
  1910. }
  1911. .prizebuckle_box .remeber_box .name:nth-child(1) {
  1912. text-align: left;
  1913. }
  1914. .prizebuckle_box .remeber_box .name:last-nth-child(1) {
  1915. text-align: right;
  1916. }
  1917. .prizebuckle_box .remeber_box .list {
  1918. position: relative;
  1919. margin-bottom: 20px;
  1920. border-bottom: none;
  1921. }
  1922. .prizebuckle_box .remeber_box .list:before {
  1923. display: none;
  1924. position: absolute;
  1925. top: -6px;
  1926. left: 20px;
  1927. right: 20px;
  1928. width: 400px;
  1929. height: 50px;
  1930. background: #f8f8f8;
  1931. border-radius: 40px 0 0 40px;
  1932. box-shadow: none;
  1933. transition: 0.35s ease-in-out;
  1934. z-index: 1;
  1935. }
  1936. .prizebuckle_box .remeber_box .list:hover:before {
  1937. background: #409eff;
  1938. box-shadow: 1px 2px 4px rgba(51, 51, 51, 0.2);
  1939. transition: 0.35s ease-in-out;
  1940. }
  1941. .prizebuckle_box .remeber_box .list:hover .point {
  1942. color: #1c1c1c;
  1943. }
  1944. .prizebuckle_box .remeber_box .team_data_item:hover:before {
  1945. border-bottom: 1px #409eff solid;
  1946. }
  1947. .prizebuckle_box .remeber_box .list .headimg_box {
  1948. position: relative;
  1949. display: block;
  1950. padding-right: 0 !important;
  1951. z-index: 2;
  1952. }
  1953. .prizebuckle_box .remeber_box .list .headimg_box .headimg {
  1954. display: inline-block;
  1955. text-align: center;
  1956. vertical-align: middle;
  1957. width: 40px;
  1958. height: 40px;
  1959. font-size: 12px;
  1960. color: #fff;
  1961. line-height: 40px;
  1962. background: #909399;
  1963. border-radius: 40px;
  1964. }
  1965. .prizebuckle_box .remeber_box .list .headimg_box span.headname {
  1966. width: 98px;
  1967. float: right;
  1968. display: block;
  1969. font-size: 16px;
  1970. margin-left: 4px;
  1971. line-height: 40px;
  1972. vertical-align: bottom;
  1973. overflow: hidden;
  1974. white-space: nowrap;
  1975. text-overflow: ellipsis;
  1976. }
  1977. .prizebuckle_box .remeber_box .list .point {
  1978. position: relative;
  1979. text-align: center;
  1980. padding-top: 10px;
  1981. font-size: 16px;
  1982. z-index: 2;
  1983. }
  1984. .prizebuckle_box .remeber_box .list .point .record {
  1985. display: block;
  1986. font-size: 14px;
  1987. padding-bottom: 10px;
  1988. }
  1989. .prizebuckle_box .remeber_box .list .point .name {
  1990. display: block;
  1991. font-size: 12px;
  1992. padding-bottom: 6px;
  1993. }
  1994. .prizebuckle_box .remeber_box .list .point .object {
  1995. display: block;
  1996. font-size: 12px;
  1997. }
  1998. .prizebuckle_box .remeber_box .more span {
  1999. display: block;
  2000. text-align: center;
  2001. font-size: 14px;
  2002. color: #909399;
  2003. margin-top: 0px;
  2004. }
  2005. .prizebuckle_box .more:hover span {
  2006. color: #26a2ff !important;
  2007. cursor: pointer;
  2008. }
  2009. .joinin_box {
  2010. display: block;
  2011. text-align: left;
  2012. margin: 20px 0 0 20px !important;
  2013. padding-right: 0 !important;
  2014. }
  2015. .joinin_box .title {
  2016. display: block;
  2017. font-size: 16px;
  2018. color: #303133;
  2019. padding: 18px 20px 0px;
  2020. }
  2021. .joinin_box .join_name {
  2022. display: block;
  2023. font-size: 12px;
  2024. color: #909399;
  2025. padding: 10px 20px 18px;
  2026. }
  2027. .statistics_box {
  2028. margin: 0 auto 20px !important;
  2029. padding: 20px;
  2030. background: #fff;
  2031. border: 1px #e1e4e7 solid;
  2032. box-shadow: 0 2px 4px rgba(140, 140, 140, 0.1);
  2033. }
  2034. .statistics_box .title {
  2035. font-family: Microsoft Yahei;
  2036. font-size: 16px;
  2037. margin: 0 0 20px 0;
  2038. padding: 0 0 0px 10px !important;
  2039. font-weight: normal;
  2040. border-left: 2px solid #409eff;
  2041. }
  2042. .statistics_box .num {
  2043. font-size: 20px;
  2044. color: #409eff;
  2045. }
  2046. .statistics_box .num span {
  2047. font-size: 12px;
  2048. color: #606266;
  2049. padding-right: 10px;
  2050. }
  2051. .case_box {
  2052. margin: 20px auto 0 !important;
  2053. padding: 20px 20px 30px 20px;
  2054. background: #fff;
  2055. }
  2056. .case_box .title {
  2057. font-size: 16px;
  2058. padding: 0 0 20px 0 !important;
  2059. }
  2060. .case_box .noremind {
  2061. display: block;
  2062. text-align: right;
  2063. font-size: 12px;
  2064. padding-right: 20px;
  2065. color: #909399;
  2066. }
  2067. .case_box .newslist {
  2068. padding: 0 !important;
  2069. }
  2070. .case_box .newslist .imgbox {
  2071. width: 196px;
  2072. height: 110px;
  2073. background: #909399;
  2074. }
  2075. .case_box .newslist .listtitle {
  2076. display: block;
  2077. font-size: 14px;
  2078. color: #606266;
  2079. padding: 6px 0 0 0;
  2080. }
  2081. .case_box .newslist .des {
  2082. display: block;
  2083. font-size: 12px;
  2084. color: #606266;
  2085. padding: 10px 0 0 0;
  2086. }
  2087. .more_manager {
  2088. cursor: pointer;
  2089. padding: 20px 0;
  2090. color: rgb(144, 147, 153);
  2091. font-size: 14px;
  2092. text-align: center;
  2093. }
  2094. /* .team_data_item:hover{
  2095. color: #26A2FF;
  2096. } */
  2097. .update_button:hover {
  2098. background: #fc7676;
  2099. border: 1px #fc7676 solid;
  2100. }
  2101. .update_button:active {
  2102. background: #fc7676;
  2103. border: 1px #fc7676 solid;
  2104. }
  2105. .examineAndApproveTable /deep/ td {
  2106. border: 0px solid #fff;
  2107. }
  2108. .readyapprove_box .more:hover {
  2109. color: #26a2ff !important;
  2110. }
  2111. .rightexamineAndApproveList {
  2112. text-align: left;
  2113. width: 100%;
  2114. border-bottom: 1px solid #efefef;
  2115. padding-bottom: 15px;
  2116. }
  2117. .List_border:nth-child(5) .rightexamineAndApproveList {
  2118. border-bottom: 0px solid #fff;
  2119. }
  2120. /* .List_border:hover{
  2121. background-color: rgb(252, 252, 252);
  2122. } */
  2123. /deep/ .el-radio-button__inner {
  2124. border: 0px solid #dcdfe6;
  2125. border-radius: 5px;
  2126. padding-right: 15px;
  2127. }
  2128. /deep/ .el-radio-button--medium .el-radio-button__inner {
  2129. padding: 7px 13px;
  2130. }
  2131. .el-radio-button:first-child /deep/ .el-radio-button__inner {
  2132. border: 0px solid #dcdfe6;
  2133. border-radius: 5px;
  2134. }
  2135. .el-radio-button:last-child /deep/ .el-radio-button__inner {
  2136. border-radius: 5px;
  2137. }
  2138. .ManagerSAwardlStyle {
  2139. text-align: center;
  2140. display: block;
  2141. cursor: pointer;
  2142. }
  2143. .ManagerSAwardlStyleB {
  2144. color: #303133;
  2145. font-size: 18px;
  2146. transition: all 0.5s;
  2147. }
  2148. .ManagerSAwardlStyleSpan {
  2149. color: rgb(48, 49, 51);
  2150. font-size: 14px;
  2151. margin-top: 5px;
  2152. display: block;
  2153. }
  2154. .ManagerSAwardlStyle:hover .ManagerSAwardlStyleB {
  2155. color: #4eb2ff;
  2156. }
  2157. .weekChecking_inStyle {
  2158. color: #606266;
  2159. font-size: 14px;
  2160. display: block;
  2161. }
  2162. .weekChecking_inStyle b {
  2163. color: rgb(38, 162, 255);
  2164. transition: all 0.5s;
  2165. }
  2166. .weekChecking_inStyle:hover b {
  2167. color: rgb(0 145 255);
  2168. }
  2169. .inCommonUseStyle {
  2170. width: 215px;
  2171. height: 54px;
  2172. border: 1px solid #c0c4cc;
  2173. display: block;
  2174. margin: 16px 0 0 10px;
  2175. display: flex;
  2176. line-height: 54px;
  2177. border-radius: 5px;
  2178. cursor: pointer;
  2179. transition: all 0.5s;
  2180. }
  2181. .inCommonUseStyle b {
  2182. transition: all 0.5s;
  2183. color: #303133;
  2184. font-size: 14px;
  2185. }
  2186. .inCommonUseStyle:hover {
  2187. background-color: #fcfcfc;
  2188. border: 1px solid #409eff;
  2189. }
  2190. .inCommonUseStyle:hover b {
  2191. color: #409eff;
  2192. }
  2193. .vtRenew {
  2194. color: #53b3f7;
  2195. }
  2196. .innerVisible p {
  2197. text-align: center;
  2198. }
  2199. /deep/ .el-dialog__body {
  2200. padding: 0 80px 15px;
  2201. }
  2202. </style>