manager_statistics.vue 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812
  1. <template>
  2. <div>
  3. <div class="manager_statistics_box wlj">
  4. <el-tabs v-model="activeName" type="card"><!-- 奖扣完成情况 -->
  5. <el-tab-pane label="奖扣完成情况" name="second">
  6. <el-form :model="condition" :inline="true" ref="formData">
  7. <!-- 部门 -->
  8. <el-form-item label="部门">
  9. <deptData deptStyle="height:24px;line-height:24px;margin-top:7px;" v-if="toPdept && toPdept!=0" :refsName="$refs.dept" :toPdept="toPdept"></deptData>
  10. <el-cascader
  11. v-model="dept_name_xq_xq"
  12. :options="dept_trees"
  13. @change="get_last_dept_null"
  14. :props="{ label: 'name', value: 'id'}"
  15. ref="dept"
  16. filterable
  17. change-on-select
  18. placeholder="全公司"
  19. clearable
  20. >
  21. <template slot-scope="{ node, data }">
  22. <span>
  23. <wwOpenDAta type="departmentName" :openid="data.name"></wwOpenDAta>
  24. </span>
  25. <!-- <span v-if="!node.isLeaf"> ({{ data.children.length }}) </span> -->
  26. </template>
  27. </el-cascader>
  28. </el-form-item>
  29. <!-- 时间 -->
  30. <el-form-item label="时间">
  31. <el-date-picker
  32. class="date-picker-width"
  33. v-model="condition.month"
  34. clearable
  35. width="100%"
  36. type="month"
  37. placeholder="请选择月份"
  38. value-format="yyyy-MM"
  39. ></el-date-picker>
  40. </el-form-item>
  41. <!-- 搜索框 -->
  42. <el-form-item class="persons_names">
  43. <el-input
  44. v-model="condition.keyword"
  45. placeholder="输入同事姓名"
  46. max="200"
  47. @keyup.enter.native="keyWordSelect"
  48. class="persons_name"
  49. >
  50. <el-button slot="append" icon="el-icon-search" @click='search_box'></el-button>
  51. </el-input>
  52. </el-form-item>
  53. <!-- 达标选项 -->
  54. <br>
  55. <el-form-item>
  56. <el-checkbox v-model="allPass" size="medium" label="只看全部达标的"></el-checkbox>
  57. </el-form-item>
  58. <!-- 导出报表 -->
  59. <el-form-item>
  60. <el-button type="primary" plain @click="exportExcel" style="margin-left:20px">导出报表</el-button>
  61. </el-form-item>
  62. </el-form>
  63. <el-table :data="last" style="width: 100%" v-loading="loading" >
  64. <el-table-column label="管理者">
  65. <template slot-scope="scope">
  66. <userImage
  67. class="fl"
  68. :id="scope.row.id"
  69. :user_name="scope.row.name"
  70. :img_url="scope.row.img_url"
  71. width="50px"
  72. height="50px"
  73. ></userImage>
  74. <span
  75. style=" margin-left: 10px; line-height: 50px; display: inline-block;"
  76. ><wwOpenDAta type="userName" :openid="scope.row.name"></wwOpenDAta></span>
  77. </template>
  78. </el-table-column>
  79. <el-table-column label="奖分" prop="scope_count">
  80. <template slot-scope="scope">
  81. <b>{{scope.row.reward.point}}&nbsp;</b>
  82. <span :class="scope.row.reward.status == 1?'color_green':''">{{scope.row.reward.status==1?'达标':''}}</span><br/>
  83. <span class="span_h">奖分目标 {{scope.row.reward.target}}</span>
  84. </template>
  85. </el-table-column>
  86. <el-table-column label="扣分" prop="reward_count">
  87. <template slot-scope="scope">
  88. <b>{{scope.row.deduction.point}}&nbsp;</b>
  89. <span :class="scope.row.deduction.status == 1?'color_green':''">{{scope.row.deduction.status==1?'达标':''}}</span><br/>
  90. <span class="span_h">扣分目标 {{scope.row.deduction.target}}</span>
  91. </template>
  92. </el-table-column>
  93. <el-table-column label="奖扣比例" prop="deduct_count">
  94. <template slot-scope="scope">
  95. <div v-if="scope.row.ratio.enable == 1">
  96. <b>{{scope.row.ratio.reward_ratio}}&nbsp;:1 </b>
  97. <span :class="scope.row.ratio.status == 1?'color_green':''">{{scope.row.ratio.status==1?'达标':''}}</span><br/>
  98. <span class="span_h">比例目标 小于 {{scope.row.ratio.target}}<b>:</b>&nbsp;1</span>
  99. </div>
  100. <div v-else style="padding-left:21px"> —</div>
  101. </template>
  102. </el-table-column>
  103. <el-table-column label="人次目标" prop="deduct_count">
  104. <template slot-scope="scope">
  105. <b>{{scope.row.exec.count}}&nbsp;</b>
  106. <span :class="scope.row.exec.status == 1?'color_green':''">{{scope.row.exec.status==1?'达标':''}}</span><br/>
  107. <span class="span_h">人次目标 {{scope.row.exec.target}}人次</span>
  108. </template>
  109. </el-table-column>
  110. <template slot="empty">
  111. <div class="nopoint_box">
  112. <div class="noimg noperson"></div>
  113. <span class="title">没有对应的数据</span>
  114. </div>
  115. </template>
  116. </el-table>
  117. <center style="padding: 20px 0;">
  118. <el-pagination
  119. background
  120. @size-change="handleSizeChange_xq"
  121. @current-change="handleCurrentChange_xq"
  122. :current-page="condition.page"
  123. layout="total, sizes, prev, pager, next"
  124. :page-size="condition.page_size"
  125. :page-sizes="[10, 20, 50, 100]"
  126. :total="totals"
  127. ></el-pagination>
  128. </center>
  129. </el-tab-pane>
  130. <el-tab-pane label="奖扣执行对比" name="first">
  131. <el-form :model="formData" :inline="true" ref="formData">
  132. <el-form-item label="部门">
  133. <deptData deptStyle="height:24px;line-height:24px;margin-top:7px;" v-if="toPdepts && toPdepts!=0" :refsName="$refs.depts" :toPdept="toPdepts"></deptData>
  134. <el-cascader
  135. v-model="dept_name_xq"
  136. :options="dept_tree"
  137. @change="dept_null"
  138. :props="{ label: 'name', value: 'id'}"
  139. ref="depts"
  140. filterable
  141. change-on-select
  142. placeholder="全公司"
  143. clearable
  144. >
  145. <template slot-scope="{ node, data }">
  146. <span>
  147. <wwOpenDAta type="departmentName" :openid="data.name"></wwOpenDAta>
  148. </span>
  149. <!-- <span v-if="!node.isLeaf"> ({{ data.children.length }}) </span> -->
  150. </template>
  151. </el-cascader>
  152. </el-form-item>
  153. <el-form-item label="时间">
  154. <el-date-picker
  155. class="date-picker-width"
  156. v-model="formData.month"
  157. clearable
  158. width="100%"
  159. type="month"
  160. placeholder="请选择月份"
  161. value-format="yyyy-MM"
  162. ></el-date-picker>
  163. </el-form-item>
  164. </el-form>
  165. <!--
  166. <el-row :gutter="20" style="margin-bottom: 20px;">
  167. <el-col :span="5">
  168. <el-date-picker class="date-picker-width" v-model="formData.month" width="100%" type="month" placeholder="请选择月份" value-format="yyyy-MM"></el-date-picker>
  169. </el-col>
  170. <el-col :span="5">
  171. <el-checkbox v-model="allPass" size="medium" label="只看全部达标的" border></el-checkbox>
  172. </el-col>
  173. <el-col :offset="8" :span="6" class="search_box">
  174. <el-input v-model="formData.keyword" @keyup.enter.native="search" placeholder="输入管理者姓名">
  175. <el-button slot="append" @click="search" icon="el-icon-search"></el-button>
  176. </el-input>
  177. </el-col>
  178. </el-row>
  179. -->
  180. <el-table :data="list" style="width: 100%" v-loading="loading" @row-click="open_detail">
  181. <el-table-column label="管理者">
  182. <template slot-scope="scope">
  183. <userImage
  184. class="fl"
  185. :id="scope.row.id"
  186. :user_name="scope.row.name"
  187. :img_url="scope.row.img_url"
  188. width="50px"
  189. height="50px"
  190. ></userImage>
  191. <span
  192. style=" margin-left: 10px; line-height: 50px; display: inline-block;"
  193. ><wwOpenDAta type="userName" :openid="scope.row.name"></wwOpenDAta></span>
  194. </template>
  195. </el-table-column>
  196. <el-table-column label="管理范围(人)" prop="scope_count"></el-table-column>
  197. <el-table-column label="人均奖分(次)" prop="reward_count"></el-table-column>
  198. <el-table-column label="人均扣分(次)" prop="deduct_count"></el-table-column>
  199. <template slot="empty">
  200. <div class="nopoint_box">
  201. <div class="noimg noperson"></div>
  202. <span class="title">没有对应的数据</span>
  203. </div>
  204. </template>
  205. </el-table>
  206. <center style="padding: 20px 0;">
  207. <el-pagination
  208. background
  209. @size-change="handleSizeChange"
  210. @current-change="handleCurrentChange"
  211. :current-page="formData.page"
  212. :page-sizes="[10, 20, 50, 100]"
  213. layout="total, sizes, prev, pager, next"
  214. :page-size="formData.page_size"
  215. :total="total"
  216. ></el-pagination>
  217. </center>
  218. <el-drawer size="500px" :visible.sync="detail_show" :with-header="false" direction="rtl">
  219. <el-button type="info" style="position: absolute; left: -100px;">test</el-button>
  220. <div class="drawer_title">
  221. <wwOpenDAta type="userName" :openid="item.name"></wwOpenDAta>的奖扣统计
  222. <el-tooltip placement="top">
  223. <div slot="content" style="width: 300px">作为管理者,管理执行力是关键,每月按要求完成奖分和扣分任务。</div>
  224. <span class="tips">?</span>
  225. </el-tooltip>
  226. </div>
  227. <div class="chart_content">
  228. <el-row :gutter="20" v-if="personalData !== null" v-loading="personalData_loading">
  229. <el-col :span="4">
  230. <div class="dataItem">
  231. <p class="point">{{personalData.task.reward.point}}</p>
  232. <p>奖分</p>
  233. <p class="target">目标{{personalData.task.reward.target_point}}</p>
  234. </div>
  235. </el-col>
  236. <el-col :span="4">
  237. <div class="dataItem">
  238. <p class="point">{{personalData.task.deduction.point}}</p>
  239. <p>扣分</p>
  240. <p class="target">目标{{personalData.task.deduction.target_point}}</p>
  241. </div>
  242. </el-col>
  243. <el-col :span="5">
  244. <div class="dataItem">
  245. <p class="point">{{personalData.task.ratio.ratio}}:1</p>
  246. <p>奖扣比例</p>
  247. <p class="target">目标>{{personalData.task.ratio.target_ratio}}:1</p>
  248. </div>
  249. </el-col>
  250. <el-col :span="5">
  251. <div class="dataItem">
  252. <p class="point">{{personalData.task.exec.count}}</p>
  253. <p>奖扣人次</p>
  254. <p class="target">目标{{personalData.task.exec.target_count}}</p>
  255. </div>
  256. </el-col>
  257. </el-row>
  258. <div class="chart-legend__wrap">
  259. <span class="fl">月奖扣执行情况</span>
  260. <span class="chart-legend__pink">奖分</span>
  261. <span class="chart-legend__green">扣分</span>
  262. </div>
  263. <div id="situationChart" v-loading="echart_loading" style="height: 300px;"></div>
  264. <div class="chart-legend__wrap">
  265. <div class="fl">月奖扣人次</div>
  266. <span class="chart-legend__pink">奖分人次</span>
  267. <span class="chart-legend__green">扣分人次</span>
  268. </div>
  269. <div id="passengersChart" v-loading="echart_loading" style="height: 300px;"></div>
  270. </div>
  271. </el-drawer>
  272. </el-tab-pane>
  273. </el-tabs>
  274. </div>
  275. </div>
  276. </template>
  277. <script>
  278. import { getToken } from '@/utils/auth';
  279. import ECharts from "echarts";
  280. export default {
  281. data() {
  282. return {
  283. last: [],
  284. dept_trees: [],
  285. //完成情况
  286. condition: {
  287. month: this.$moment().format("YYYY-MM"),//时间
  288. page: 1,//当前页
  289. page_size: 10,//每页数量
  290. dept_id: 0,//部门id
  291. keyword:'',//关键字
  292. complete:'',//是否达标 1是
  293. },
  294. activeName: "second",
  295. totals: null,
  296. dept_name_xq_xq: "",
  297. //对比
  298. loading: false,
  299. choose_time: "",
  300. input: "",
  301. radio: "1",
  302. formData: {
  303. // employee_id:"",
  304. month: this.$moment().format("YYYY-MM"),
  305. page: 1,
  306. page_size: 10,
  307. dept_id: 0,
  308. // complete:'0',
  309. },
  310. total: null,
  311. allPass: false,
  312. list: [],
  313. detail_show: false,
  314. echart_loading: false,
  315. item: {},
  316. dept_name_xq: "",
  317. dept_tree: [],
  318. personalData_loading: false,
  319. personalData: null,
  320. toPdept:0,
  321. toPdepts:0,
  322. };
  323. },
  324. watch: {
  325. //对比
  326. "formData.month"(val, old_val) {
  327. this.formData.page = 1;
  328. this.get_list();
  329. },
  330. //情况
  331. "condition.month"(val, old_val) {
  332. this.condition.page = 1;
  333. this.get_last();
  334. },
  335. //查看全部达标
  336. 'allPass'(val,old_val){
  337. if(val){
  338. this.condition.complete = '1'
  339. }else{
  340. this.condition.complete = '0'
  341. }
  342. this.condition.page = 1
  343. this.get_last()
  344. },
  345. },
  346. methods: {
  347. //情况
  348. get_last() {
  349. let self = this;
  350. self.loading = true;
  351. // const headers = { Accept: "application/vnd.test.v4+json" };
  352. self
  353. .$http("get","/api/integral/statistics/prize/list",self.condition,'v4')
  354. .then((res) => {
  355. if (res.data.code == 1) {
  356. self.last = res.data.data.list;
  357. self.totals = res.data.data.total;
  358. } else {
  359. self.$message.error(res.data.data.msg);
  360. }
  361. })
  362. .finally(() => {
  363. self.loading = false;
  364. });
  365. },
  366. //部门
  367. get_last_dept_null(val) {
  368. this.toPdept = val[val.length-1]
  369. if (val.length == 0) {
  370. this.condition.dept_id = 0;
  371. } else {
  372. this.condition.dept_id = val[0];
  373. }
  374. this.$nextTick(() => {
  375. this.condition.page = 1;
  376. this.$refs.dept.dropDownVisible = false; //监听值发生变化就关闭它
  377. this.get_last();
  378. });
  379. },
  380. //搜索框
  381. search_box(){
  382. this.get_last();
  383. },
  384. //导出报表
  385. exportExcel() {
  386. let data = "";
  387. //部门
  388. this.condition.dept_id>0?data+="&dept_id="+ this.condition.dept_id:data+="&dept_id=0"
  389. //时间
  390. data+="&month="+this.condition.month
  391. //搜索框
  392. this.condition.keyword==''?data+="&keyword=0":data+="&keyword="+this.condition.keyword
  393. //是否达标
  394. this.condition.complete!=0?data+="&complete="+this.condition.complete:data+="&complete=0"
  395. //当前页数
  396. data+="&page="+this.condition.page
  397. console.log(data)
  398. let token = this.$getToken?this.$getToken:getToken()
  399. window.open(
  400. process.env.BASE_API +
  401. "/api/download/prize/list/v4?employee_id="+
  402. this.$store.getters.user_info.id +
  403. data+'&token='+token,
  404. "_blank"
  405. );
  406. this.dialogVisible = false;
  407. },
  408. //分页选择显示多少条
  409. handleCurrentChange_xq(val) {
  410. this.condition.page = val;
  411. this.get_last();
  412. },
  413. //分页
  414. handleSizeChange_xq(val){
  415. this.condition.page_size = val;
  416. this.get_last();
  417. },
  418. //
  419. handleSizeChange(val) {
  420. this.formData.page_size =val;
  421. this.get_list();
  422. },
  423. handleCurrentChange(val) {
  424. this.formData.page = val;
  425. this.get_list();
  426. },
  427. get_list() {
  428. let self = this;
  429. self.loading = true;
  430. // const headers = { Accept: "application/vnd.test.v3+json" };
  431. self
  432. .$http("get","/api/integral/statistics/prize/list",self.formData,'v3')
  433. .then((res) => {
  434. if (res.data.code == 1) {
  435. self.list = res.data.data.list;
  436. self.total = res.data.data.total;
  437. } else {
  438. self.$message.error(res.data.data.msg);
  439. }
  440. })
  441. .finally(() => {
  442. self.loading = false;
  443. });
  444. },
  445. search() {
  446. this.get_list();
  447. },
  448. open_detail(row, column, event) {
  449. this.detail_show = true;
  450. this.item = row;
  451. this.$nextTick(() => {
  452. this.situationChart = ECharts.init(
  453. document.getElementById("situationChart")
  454. );
  455. this.passengersChart = ECharts.init(
  456. document.getElementById("passengersChart")
  457. );
  458. });
  459. this.getData(() => (this.echart_loading = false));
  460. this.getDataV1(() => (this.personalData_loading = false));
  461. },
  462. getChartOption(xAxisData, rewardData, deductionData) {
  463. return {
  464. tooltip: {
  465. trigger: "axis",
  466. },
  467. grid: {
  468. containLabel: true,
  469. top: "4%",
  470. right: "4%",
  471. bottom: "5%",
  472. left: "7%",
  473. },
  474. xAxis: {
  475. type: "category",
  476. boundaryGap: false,
  477. axisLine: { lineStyle: { color: "#eee" } },
  478. axisLabel: { color: "#333" },
  479. data: xAxisData,
  480. },
  481. yAxis: {
  482. position: "right",
  483. axisLine: { lineStyle: { color: "#eee" } },
  484. axisLabel: { color: "#333" },
  485. type: "value",
  486. splitLine: { lineStyle: { color: "#eee" } },
  487. },
  488. series: [
  489. {
  490. name: "奖分",
  491. type: "line",
  492. data: rewardData,
  493. lineStyle: { normal: { color: "#F56C6C" } },
  494. },
  495. {
  496. name: "扣分",
  497. type: "line",
  498. data: deductionData,
  499. lineStyle: { normal: { color: "#53B87F" } },
  500. },
  501. ],
  502. };
  503. },
  504. // v2
  505. getData(callBack) {
  506. this.echart_loading = true;
  507. const data = {
  508. employee_id: this.item.id || 0,
  509. month: this.formData.month,
  510. };
  511. this.$http('get',"/api/integral/statistics/prize",data)
  512. .then((res) => {
  513. if (res.data.code === 1) {
  514. const item = res.data.data;
  515. this.employeeName = item.name;
  516. const deduct = item.chart.deduct;
  517. const situationRewardData = [];
  518. const situationDeductionData = [];
  519. const passengersRewardData = [];
  520. const passengersDeductionData = [];
  521. const xAxisData = item.chart.reward.map((o, i) => {
  522. // 降分分数
  523. situationDeductionData.push(item.chart.reward[i].point);
  524. // 扣分分数
  525. passengersDeductionData.push(item.chart.deduct[i].point);
  526. // 奖分次数
  527. situationRewardData.push(item.chart.reward[i].count);
  528. // 扣分次数
  529. passengersRewardData.push(item.chart.deduct[i].count);
  530. return o.date;
  531. });
  532. this.situationChart.setOption(
  533. this.getChartOption(
  534. xAxisData,
  535. situationDeductionData,
  536. passengersDeductionData
  537. )
  538. ); //奖分数值、扣分数值
  539. this.passengersChart.setOption(
  540. this.getChartOption(
  541. xAxisData,
  542. situationRewardData,
  543. passengersRewardData
  544. )
  545. ); //月奖扣人次
  546. }
  547. })
  548. .finally(() => {
  549. this.echart_loading = false;
  550. });
  551. },
  552. // v1
  553. getDataV1(callBack) {
  554. let self = this;
  555. self.personalData_loading = true;
  556. const data = {
  557. employee_id: this.item.id || 0,
  558. month: this.formData.month,
  559. };
  560. self
  561. .$http("get","/api/integral/statistics",data,)
  562. .then((res) => {
  563. if (res.data.code == 1) {
  564. self.personalData = res.data.data;
  565. } else {
  566. self.$message.error(res.data.data.msg);
  567. }
  568. })
  569. .catch((e) => {
  570. self.$message.error(res.data.data.msg);
  571. })
  572. .finally(() => {
  573. self.personalData_loading = false;
  574. });
  575. },
  576. dept_null(val) {
  577. this.toPdepts = val[val.length-1]
  578. if (val.length == 0) {
  579. this.formData.dept_id = 0;
  580. } else {
  581. this.formData.dept_id = this.dept_name_xq[this.dept_name_xq.length - 1];
  582. }
  583. this.$nextTick(() => {
  584. this.formData.page = 1;
  585. this.$refs.depts.dropDownVisible = false;
  586. this.get_list();
  587. });
  588. },
  589. // 递归判断列表,把最后的children设为undefined
  590. getTreeData(data) {
  591. for (var i = 0; i < data.length; i++) {
  592. if (data[i].children.length < 1) {
  593. // children若为空数组,则将children设为undefined
  594. data[i].children = undefined;
  595. } else {
  596. // children若不为空数组,则继续 递归调用 本方法
  597. this.getTreeData(data[i].children);
  598. }
  599. }
  600. return data;
  601. },
  602. },
  603. mounted() {
  604. if (localStorage.getItem("dept_tree")) {
  605. this.dept_tree = this.getTreeData(
  606. JSON.parse(localStorage.getItem("dept_tree"))
  607. );
  608. this.dept_trees = this.getTreeData(
  609. JSON.parse(localStorage.getItem("dept_tree"))
  610. );
  611. }
  612. this.get_list();
  613. this.get_last();
  614. },
  615. };
  616. </script>
  617. <style scoped lang="scss">
  618. .search_box {
  619. /deep/ button:active {
  620. background: #26a2ff;
  621. }
  622. /deep/ button:active .el-icon-search {
  623. color: #fff;
  624. }
  625. }
  626. .date-picker-width {
  627. width: 100% !important;
  628. }
  629. .color_green {
  630. color: #67c23a;
  631. }
  632. .nopoint_box {
  633. display: inline-block;
  634. text-align: center;
  635. width: 100%;
  636. margin-bottom: 10px;
  637. }
  638. .noimg {
  639. display: inline-block;
  640. width: 110px;
  641. height: 110px;
  642. margin: 22px auto 16px;
  643. /* background:url("/static/images/nodata_default.png") no-repeat center; */
  644. background-size: 99%;
  645. }
  646. .noperson {
  647. display: inline-block;
  648. width: 110px;
  649. height: 110px;
  650. line-height: none;
  651. margin: 22px auto 16px;
  652. background: url("/static/images/noperson_default.png") no-repeat center;
  653. background-size: 99%;
  654. }
  655. .title {
  656. display: block;
  657. text-align: center;
  658. font-size: 12px !important;
  659. line-height: 30px;
  660. color: #909399 !important;
  661. padding: 0;
  662. }
  663. .nopoint_box a {
  664. color: #26a2ff;
  665. }
  666. .chart_content {
  667. height: 90vh;
  668. overflow-y: auto;
  669. overflow-x: hidden;
  670. .chart-legend__wrap {
  671. text-align: right;
  672. padding: 20px;
  673. padding-right: 50px;
  674. & .chart-legend__pink {
  675. position: relative;
  676. padding-left: 12px;
  677. padding-right: 5px;
  678. &:after {
  679. content: "";
  680. position: absolute;
  681. margin-top: -2px;
  682. top: 35%;
  683. left: 0;
  684. width: 8px;
  685. height: 8px;
  686. background: #f56c6c;
  687. border-radius: 100%;
  688. }
  689. }
  690. & .chart-legend__green {
  691. position: relative;
  692. padding-left: 12px;
  693. &:after {
  694. content: "";
  695. position: absolute;
  696. margin-top: -2px;
  697. top: 35%;
  698. left: 0;
  699. width: 8px;
  700. height: 8px;
  701. background: #53b87f;
  702. border-radius: 100%;
  703. }
  704. }
  705. }
  706. }
  707. // 滚动条样式
  708. .chart_content::-webkit-scrollbar-track {
  709. -webkit-box-shadow: inset 0 0 5px rgb(255, 255, 255);
  710. border-radius: 5px;
  711. background-color: rgb(255, 255, 255);
  712. }
  713. .chart_content::-webkit-scrollbar {
  714. width: 5px;
  715. background-color: rgba(201, 201, 201, 0);
  716. }
  717. .chart_content::-webkit-scrollbar-thumb {
  718. border-radius: 5px;
  719. -webkit-box-shadow: inset 0 0 5px rgb(153, 145, 145) (160, 154, 154);
  720. background-color: rgb(168, 167, 167);
  721. }
  722. .dataItem {
  723. text-align: center;
  724. .point {
  725. font-size: 22px;
  726. color: #26a2ff;
  727. margin: 10px 0;
  728. }
  729. .target {
  730. font-size: 12px;
  731. color: #909399;
  732. }
  733. }
  734. .drawer_title {
  735. font-size: 18px;
  736. padding: 20px;
  737. }
  738. .manager_statistics_box {
  739. background-color: #ffffff;
  740. padding: 20px;
  741. min-height: calc(100vh - 160px);
  742. /deep/ .el-row .el-checkbox .el-checkbox__label {
  743. line-height: 20px;
  744. }
  745. }
  746. .tips {
  747. background: #409eff;
  748. border-radius: 50%;
  749. width: 14px;
  750. height: 14px;
  751. color: #fff;
  752. display: inline-block;
  753. font-size: 12px;
  754. line-height: 14px;
  755. text-align: center;
  756. }
  757. .el-form-item__label {
  758. width: 0px !important;
  759. }
  760. // .persons_names{
  761. // margin-left: 160px;
  762. // }
  763. .wlj{
  764. & .color_green{
  765. color: #49d3a7;
  766. }
  767. & .color_red{
  768. color: #f04b56;
  769. }
  770. }
  771. b{
  772. font-size: 14px;
  773. }
  774. .span_h{
  775. font-size: 13px;
  776. color: #898c94;
  777. }
  778. </style>