index.vue 91 KB

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