custom_data.vue 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698
  1. <template>
  2. <section>
  3. <el-row style="padding-bottom: 0px;text-align:center;margin-top:20px;z-index: 999;">
  4. <el-col :span="6" >
  5. <div>&nbsp;</div>
  6. </el-col>
  7. <el-col :span="12" style="">
  8. <el-date-picker
  9. v-model="dateRange" :editable="false"
  10. format="yyyy-MM-dd" value-format="yyyy-MM-dd"
  11. @change="getEchart"
  12. :clearable="true"
  13. range-separator="至"
  14. type="daterange"
  15. start-placeholder="开始日期"
  16. end-placeholder="结束日期"
  17. ></el-date-picker>
  18. <el-radio-group v-model="radio" @change="getEchart" style="margin-left:10px;">
  19. <el-radio-button label="项目"></el-radio-button>
  20. <!-- <el-radio-button label="部门"></el-radio-button> -->
  21. <el-radio-button label="人员"></el-radio-button>
  22. <el-radio-button label="部门"></el-radio-button>
  23. <!-- <el-radio-button :label="namess" v-if="jichu.customDegreeActive == 1"></el-radio-button> -->
  24. </el-radio-group>
  25. </el-col>
  26. <el-col :span="6">
  27. <el-button @click="showExportDialog">报表导出</el-button>
  28. </el-col>
  29. </el-row>
  30. <div :style="'width:'+widthHtval+'px;position: relative; height:'+containerHeight+'px;'">
  31. <div id="container" :style="'height:'+containerHeight+'px;width:100%'"></div>
  32. </div>
  33. <div style="position:fixed;top:170px;left:600px;" v-show="radio=='部门' && parentDeptId != null">
  34. <el-button @click="backToParentDept">返回上级</el-button>
  35. </div>
  36. <!--导出报表条件选择 -->
  37. <el-dialog title="工时报表导出" v-if="exportDialog" :visible.sync="exportDialog" :close-on-click-modal="false" customClass="customWidth" width="500px">
  38. <el-form ref="form3" :model="exportParam" >
  39. <el-form-item prop="projectId" label="选择项目" >
  40. <el-select v-model="exportParam.projectId" placeholder="全部项目" clearable style="width:350px;" filterable="true">
  41. <el-option v-for="item in projectList" :key="item.id" :label="item.projectName + item.projectCode" :value="item.id">
  42. <span style="float: left;color: #8492a6; font-size: 13px">{{ item.projectCode }}</span>
  43. <span style="float: right;margin-left: 20px">{{ item.projectName }}</span>
  44. </el-option>
  45. </el-select>
  46. </el-form-item>
  47. <!-- <el-form-item prop="userIds" label="选择人员" >
  48. <el-select v-model="exportParam.userIds" placeholder="全部人员" multiple="true" clearable style="width:350px;" filterable="true">
  49. <el-option v-for="item in hasReportUserList" :key="item.id" :label="item.name" :value="item.id"></el-option>
  50. </el-select>
  51. </el-form-item> -->
  52. <el-form-item prop="projectId" :label="user.timeType.fixMonthcost==0?'日期范围':'选择月份'">
  53. <el-date-picker v-show="user.timeType.fixMonthcost==0"
  54. v-model="exportParam.dateRange" :editable="false"
  55. format="yyyy-MM-dd" value-format="yyyy-MM-dd"
  56. :clearable="false"
  57. range-separator="至"
  58. type="daterange"
  59. start-placeholder="开始日期"
  60. end-placeholder="结束日期"
  61. ></el-date-picker>
  62. </el-form-item>
  63. <!-- <el-form-item label="选择人员" v-if="radio == '项目' || radio == '部门'">
  64. <el-select v-model="exportParam.userId" placeholder="请选择人员" style="width: 350px" filterable="true">
  65. <span v-for="(item, index) in users" :key="index">
  66. <el-option :label="item.name" :value="item.id"></el-option>
  67. </span>
  68. </el-select>
  69. </el-form-item> -->
  70. </el-form>
  71. <div slot="footer" class="dialog-footer">
  72. <el-button type="primary" @click="exportProjectData" style="width:100%;" >导出</el-button>
  73. </div>
  74. </el-dialog>
  75. </section>
  76. </template>
  77. <script>
  78. import util from "../../common/js/util";
  79. export default {
  80. data() {
  81. return {
  82. yAxisValue: localStorage.yAxisValue?localStorage.yAxisValue:0,
  83. parentDeptStack:[],
  84. parentDeptId:null,
  85. hasReportUserList:[],
  86. projectList:[],
  87. exportParam:{projectId:null,dateRange:[],userId: null},
  88. exportDialog:false,
  89. dateRange:[],
  90. user: JSON.parse(sessionStorage.getItem("user")),
  91. radio: sessionStorage.radio!=null?sessionStorage.radio:'项目',
  92. containerHeight: 0,
  93. myChart: null,
  94. params: null,
  95. widthHtval: document.body.clientWidth - 230,
  96. users: [],
  97. jichu: [],
  98. namess: '',
  99. timers: null, // 点击的时间
  100. zhishin: 0
  101. };
  102. },
  103. methods: {
  104. //Y轴点击改变显示的数据
  105. onYAxisChange() {
  106. localStorage.yAxisValue = this.yAxisValue;
  107. this.jieliu();
  108. },
  109. jutishez() {
  110. this.http.post('/time-type/getCompanyTimeSetting', {
  111. companyId: this.user.companyId,
  112. },
  113. res => {
  114. if (res.code == "ok") {
  115. this.jichu = res.data
  116. if(res.data.customDegreeActive == 1) {
  117. this.namess = res.data.customDegreeName
  118. }
  119. } else {
  120. this.$message({
  121. message: res.msg,
  122. type: "error"
  123. });
  124. }
  125. },
  126. error => {
  127. this.$message({
  128. message: error,
  129. type: "error"
  130. });
  131. });
  132. },
  133. getUsers() {
  134. // console.log(this.port.manage.list,'getusers')
  135. this.http.post(this.port.manage.list, {
  136. departmentId: -1,
  137. pageIndex: 1,
  138. // pageSize: 99999
  139. pageSize: -1
  140. },
  141. res => {
  142. if (res.code == "ok") {
  143. this.users = res.data.records;
  144. } else {
  145. this.$message({
  146. message: res.msg,
  147. type: "error"
  148. });
  149. }
  150. },
  151. error => {
  152. this.$message({
  153. message: error,
  154. type: "error"
  155. });
  156. });
  157. },
  158. showExportDialog() {
  159. this.exportDialog = true;
  160. this.exportParam.dateRange = this.dateRange;
  161. },
  162. //获取我的项目列表
  163. getMyProjectList() {
  164. this.http.post('/project/getProjectList', {
  165. },
  166. res => {
  167. if (res.code == "ok") {
  168. this.projectList = res.data;
  169. } else {
  170. this.$message({
  171. message: res.msg,
  172. type: "error"
  173. });
  174. }
  175. },
  176. error => {
  177. this.$message({
  178. message: error,
  179. type: "error"
  180. });
  181. });
  182. },
  183. exportProjectData() {
  184. var param = {};
  185. if (this.exportParam.dateRange != null) {
  186. param = {startDate:this.exportParam.dateRange[0], endDate: this.exportParam.dateRange[1]};
  187. }
  188. var url = "/project/exportCustomDataSum";
  189. var fileName = this.user.timeType.customDataName + '统计.xls';
  190. // if (this.radio == '人员' ) {
  191. // console.log(this.exportParam.userIds);
  192. // fileName = '人员工时成本统计.xls';
  193. // url = '/department/exportUserStatistic';
  194. // if (this.exportParam.userIds != null && this.exportParam.userIds.length > 0) {
  195. // var ids = '';
  196. // this.exportParam.userIds.forEach(u=>{
  197. // ids += u+',';
  198. // })
  199. // param.userIds = ids;
  200. // }
  201. // }
  202. if (this.exportParam.projectId != null) {
  203. param.projectId = this.exportParam.projectId;
  204. }
  205. this.http.post(url, param,
  206. res => {
  207. this.listLoading = false;
  208. if (res.code == "ok") {
  209. this.exportDialog = false;
  210. var aTag = document.createElement('a');
  211. aTag.download = fileName;
  212. aTag.href = res.data;
  213. aTag.click();
  214. } else {
  215. this.$message({
  216. message: res.msg,
  217. type: "error"
  218. });
  219. }
  220. },
  221. error => {
  222. this.listLoading = false;
  223. this.$message({
  224. message: error,
  225. type: "error"
  226. });
  227. });
  228. },
  229. //获取人员成本统计列表
  230. getUserCostList() {
  231. this.listLoading = true;
  232. let url = this.radio == '人员' ? '/department/getUserCustomDataStatistic' : '/department/getDeptCustomDataStatistic'
  233. this.http.post(url, {
  234. startDate:this.user.timeType.fixMonthcost==0?this.dateRange[0]:this.dateRange,
  235. endDate: this.user.timeType.fixMonthcost==0?this.dateRange[1]:this.dateRange
  236. },
  237. res => {
  238. this.listLoading = false;
  239. var _this = this;
  240. this.hasReportUserList = [];
  241. if (res.code == "ok") {
  242. //工时总成本
  243. this.hasReportUserList = this.radio == '人员' ? res.data.userList : res.data.department;
  244. var xList = [] , yList = [] , list = res.data.list, array = [] , series = [];
  245. var totalHours = 0.0;
  246. if (list.length > 0) {
  247. var num = list.length==0?0:list[0].project.length;
  248. for(var i in list) {
  249. xList.push(list[i].name);
  250. var pro = list[i].project;
  251. for(var j in pro) {
  252. if(array.indexOf(pro[j].project) == -1) {
  253. array.push(pro[j].project)
  254. }
  255. }
  256. }
  257. for(var i in array) {
  258. yList.push(array[i]);
  259. var dataList = [];
  260. for(var j in list) {
  261. var project = list[j].project , num = 0;
  262. if(project.length != 0) {
  263. for(var k in project) {
  264. if(project[k].project == array[i]) {
  265. dataList.push({
  266. "value": project[k].cost,
  267. "cost": project[k].cost
  268. })
  269. totalHours += parseFloat(project[k].cost);
  270. } else {
  271. num++;
  272. }
  273. if(k == project.length-1 && num != project.length-1) {
  274. dataList.push({
  275. "value": 0,
  276. "cost": 0
  277. })
  278. }
  279. }
  280. } else {
  281. dataList.push({
  282. "value": 0,
  283. "cost": 0,
  284. })
  285. }
  286. }
  287. series.push({
  288. name: array[i],
  289. type: 'bar',
  290. stack:'1',
  291. barMaxWidth: 30,
  292. data: dataList,
  293. })
  294. }
  295. }
  296. var myChart = echarts.init(document.getElementById("container"));
  297. totalHours = totalHours.toFixed(1);
  298. _this.myChart = myChart;
  299. var option = {
  300. //总成本
  301. title: {
  302. text: _this.user.timeType.customDataName + '总计' + totalHours,
  303. left:'left',
  304. },
  305. // 工具箱
  306. legend: {
  307. x: 80,
  308. y: 10,
  309. data: yList,
  310. show: true,
  311.        top:"5%",//与上方的距离 可百分比% 可像素px
  312. },
  313. grid : {
  314. top : 80, //距离容器上边界40像素
  315. bottom: 35 //距离容器下边界30像素
  316. },
  317. toolbox: {
  318. show: true,
  319. feature:{
  320. saveAsImage:{
  321. show:true
  322. },
  323. restore:{
  324. show:true
  325. },
  326. // dataView:{
  327. // show:true
  328. // },
  329. // dataZoom:{
  330. // show:true
  331. // },
  332. magicType:{
  333. type:['line','bar']
  334. }
  335. }
  336. },
  337. tooltip:{
  338. trigger:'axis',
  339. formatter: function (params,ticket,callback) {
  340. var totalTime = 0;
  341. var res = "";
  342. for(var i in params) {
  343. if (params[i].data.value > 0) {
  344. res += "<div style='margin-top:3px;font-size:12px;'><font color='#ddd'>项目名称:" + params[i].seriesName
  345. + "</font><br/>"+_this.user.timeType.customDataName+" : " + params[i].data.cost+"</div>";
  346. totalTime += Number(params[i].data.cost);
  347. }
  348. }
  349. res = res +'<br/>'+ params[0].name+ '<br/>总计: ' + totalTime.toFixed(1);
  350. return res;
  351. }
  352. },
  353. xAxis: {
  354. data: xList,
  355. axisLabel: {
  356. interval:0,rotate:20
  357. }
  358. },
  359. yAxis: [{
  360. type : 'value',
  361. axisLabel: {
  362. formatter:'{value}'
  363. }
  364. }],
  365. series: series,
  366. };
  367. myChart.setOption(option,{notMerge:true});
  368. } else {
  369. this.$message({
  370. message: res.msg,
  371. type: "error"
  372. });
  373. }
  374. },
  375. error => {
  376. this.listLoading = false;
  377. this.$message({
  378. message: error,
  379. type: "error"
  380. });
  381. });
  382. },
  383. yanjiu() {
  384. // console.log('触发')
  385. },
  386. getEchart(){
  387. var that = this
  388. // that.timers = setTimeout(()=>{
  389. // clearTimeout(that.timers)
  390. // console.log(that.timers)
  391. that.jieliu()
  392. // },100);
  393. // this.jieliu()
  394. },
  395. backToParentDept() {
  396. if (this.radio == '部门') {
  397. if (this.parentDeptStack.length > 0) {
  398. this.parentDeptStack.pop();
  399. if (this.parentDeptStack.length > 0) {
  400. this.parentDeptId = this.parentDeptStack[this.parentDeptStack.length -1];
  401. } else {
  402. this.parentDeptId = null;
  403. }
  404. this.jieliu();
  405. }
  406. }
  407. },
  408. // 脱离出来的方法
  409. jieliu() {
  410. sessionStorage.radio = this.radio;
  411. var _this = this;
  412. var param = {};
  413. if (this.dateRange != null) {
  414. param = {startDate:this.user.timeType.fixMonthcost==0?this.dateRange[0]:this.dateRange,
  415. endDate: this.user.timeType.fixMonthcost==0?this.dateRange[1]:this.dateRange};
  416. // console.log(param);
  417. }
  418. var url = '';
  419. if (this.radio=='项目') {
  420. url = '/project/getCustomDataSum';
  421. // } else if (this.radio=='部门') {
  422. // url = '/department/getDeptCustomDataStatistic';
  423. } else if (this.radio=='人员' || this.radio == '部门') {
  424. this.getUserCostList();
  425. return;
  426. } else if (this.radio == this.namess) {
  427. url = '/project/getDegreeCost'
  428. }
  429. this.http.post(url, param,
  430. res => {
  431. if (res.code == "ok") {
  432. for(var i in res.data.costList) {
  433. if(i>20) {
  434. // this.widthHtval = +this.widthHtval + 2
  435. this.widthHtval = +this.widthHtval + 40
  436. } else {
  437. this.widthHtval = document.body.clientWidth - 230
  438. }
  439. }
  440. // 测试写的
  441. var xList = []
  442. var yList = []
  443. var list
  444. var totalMoneyCost;
  445. var totalHours = 0.0;
  446. if(this.radio == '项目' || this.radio=='部门') {
  447. list = res.data.costList
  448. totalMoneyCost = ((this.radio=='项目')?res.data.totalMoneyCost:res.data.totalCostMoney);
  449. for(var i in list) {
  450. if(this.radio=='项目') {
  451. xList.push(this.radio=='项目'?list[i].project:list[i].name);
  452. yList.push({
  453. "value": list[i].cost.toFixed(1),
  454. "id": list[i].id || i,
  455. "cost": list[i].cost
  456. });
  457. totalHours += parseFloat(list[i].cost);
  458. } else {
  459. xList.push(list[i].departmentName);
  460. yList.push({
  461. "value": list[i].costTime.toFixed(1),
  462. "id": list[i].departmentId,
  463. "cost": list[i].costTime,
  464. "hasSubDept": list[i].hasSubDept
  465. });
  466. totalHours += parseFloat(list[i].costTime);
  467. }
  468. }
  469. } else {
  470. list = res.data
  471. var totalMoneyCost = 0;
  472. for(var i in list) {
  473. // console.log(list[i].name, list[i].costMoney, list[i].cost)
  474. xList.push(list[i].name);
  475. yList.push({
  476. "value": this.yAxisValue==0?list[i].costMoney:list[i].cost,
  477. "id": list[i].id || i,
  478. "cost": list[i].cost,
  479. "money":list[i].costMoney.toFixed(2)
  480. });
  481. totalHours += parseFloat(list[i].cost);
  482. totalMoneyCost += parseFloat(list[i].costMoney);
  483. }
  484. }
  485. totalHours = totalHours.toFixed(1);
  486. var myChart = echarts.init(document.getElementById("container"));
  487. myChart.resize({
  488. width: this.widthHtval
  489. })
  490. _this.myChart = myChart;
  491. // console.log(totalMoneyCost.toFixed(2), '看看', totalMoneyCost)
  492. // var chengbentongji = totalMoneyCost.toFixed(2) || totalMoneyCost
  493. if(totalMoneyCost) {
  494. this.zhishin = totalMoneyCost.toFixed(2)
  495. }
  496. if(this.radio == '项目' || this.radio == '人员' || this.radio=='部门') {
  497. var option = {
  498. title: {
  499. text: _this.user.timeType.customDataName+'总计:' + totalHours,
  500. left:'left',
  501. },
  502. // 工具箱
  503. toolbox: {
  504. show: true,
  505. feature:{
  506. saveAsImage:{show:true},restore:{show:true}, magicType:{ type:['line','bar']},
  507. }
  508. },
  509. tooltip:{
  510. trigger:'axis',
  511. formatter: function (params,ticket,callback) {
  512. var res = params[0].name + "<br/>"+_this.user.timeType.customDataName+" : " + params[0].data.cost;
  513. _this.params = params;
  514. return res;
  515. }
  516. },
  517. xAxis: {
  518. data: xList,
  519. axisLabel: {
  520. interval:0,rotate:20
  521. }
  522. },
  523. yAxis: [{
  524. type : 'value',
  525. axisLabel: {
  526. formatter:'{value}'
  527. }
  528. }],
  529. series: [{
  530. name: _this.user.timeType.customDataName,
  531. type: 'bar',
  532. barMaxWidth: 30,
  533. data: yList,
  534. }]
  535. };
  536. } else {
  537. var option = {
  538. title: {
  539. text: '工时成本总计' + _this.zhishin + '元, 时长'+totalHours+'小时',
  540. left:'left',
  541. },
  542. // 工具箱
  543. toolbox: {
  544. show: true,
  545. feature:{
  546. saveAsImage:{show:true},restore:{show:true}, magicType:{ type:['line','bar']},
  547. }
  548. },
  549. tooltip:{
  550. trigger:'axis',
  551. formatter: function (params,ticket,callback) {
  552. var res = params[0].name + "<br/>工作成本"+" : " + params[0].data.money
  553. + "元 <br/>工作时长"+" : " + params[0].data.cost + "小时";
  554. _this.params = params;
  555. return res;
  556. }
  557. },
  558. xAxis: {
  559. data: xList,
  560. axisLabel: {
  561. interval:0,rotate:20
  562. }
  563. },
  564. yAxis: [{
  565. type : 'value',
  566. axisLabel: {
  567. formatter:this.yAxisValue==0?'{value} (元)':'{value}小时'
  568. }
  569. }],
  570. series: [{
  571. name: this.yAxisValue==0?'工作成本(元)':'工作时长(小时)',
  572. type: 'bar',
  573. barMaxWidth: 30,
  574. data: yList,
  575. }]
  576. };
  577. }
  578. myChart.setOption(option,{notMerge: true});
  579. // myChart.getZr().on('click', params => {
  580. // const pointInPixel = [params.offsetX, params.offsetY];
  581. // if (myChart.containPixel('grid', pointInPixel)) {
  582. // console.log('sss',_this.params)
  583. // if(_this.radio=='项目') {
  584. // if (_this.dateRange != null) {
  585. // if (this.user.timeType.fixMonthcost == 0) {
  586. // _this.$router.push("/cost/" + _this.params[0].data.id + "/" + _this.params[0].name
  587. // +"?startDate="+_this.dateRange[0]+"&endDate="+_this.dateRange[1]);
  588. // } else {
  589. // _this.$router.push("/cost/" + _this.params[0].data.id + "/" + _this.params[0].name
  590. // +"?startDate="+_this.dateRange+"&endDate="+_this.dateRange);
  591. // }
  592. // } else {
  593. // _this.$router.push("/cost/" + _this.params[0].data.id + "/" + _this.params[0].name);
  594. // }
  595. // } else if (_this.radio=='部门') {
  596. // if (_this.params[0].data.hasSubDept) {
  597. // if (_this.parentDeptId != _this.params[0].data.id) {
  598. // _this.parentDeptId = _this.params[0].data.id;
  599. // _this.parentDeptStack.push(_this.parentDeptId);
  600. // _this.jieliu();
  601. // }
  602. // // _this.jieliu();
  603. // } else {
  604. // if (_this.dateRange != null) {
  605. // _this.$router.push("/costDep/" + _this.params[0].data.id + "/" + _this.params[0].name
  606. // +"?startDate="+_this.dateRange[0]+"&endDate="+_this.dateRange[1]);
  607. // } else {
  608. // _this.$router.push("/costDep/" + _this.params[0].data.id + "/" + _this.params[0].name);
  609. // }
  610. // }
  611. // }
  612. // }
  613. // });
  614. } else {
  615. this.$message({
  616. message: res.msg,
  617. type: "error"
  618. });
  619. }
  620. },
  621. error => {
  622. this.$message({
  623. message: error,
  624. type: "error"
  625. });
  626. });
  627. }
  628. },
  629. created() {
  630. },
  631. mounted() {
  632. this.containerHeight = window.innerHeight - 200
  633. const that = this;
  634. window.onresize = function temp() {
  635. this.containerHeight = window.innerHeight - 200
  636. };
  637. if (this.user.timeType.fixMonthcost == 0) {
  638. if (this.$route.query.startDate != null) {
  639. this.dateRange = [this.$route.query.startDate, this.$route.query.endDate];
  640. } else {
  641. //默认查看本月
  642. var now = new Date();
  643. var t = util.formatDate.format(now, 'yyyy-MM-dd');
  644. var startStr = util.formatDate.format(new Date(), 'yyyy-MM') + "-01";
  645. this.dateRange = [startStr,t];
  646. }
  647. this.exportParam.dateRange = this.dateRange;
  648. } else if (this.user.timeType.fixMonthcost == 1) {
  649. if (this.$route.query.startDate != null) {
  650. this.dateRange = this.$route.query.startDate;
  651. } else {
  652. //默认查看本月
  653. var startStr = util.formatDate.format(new Date(), 'yyyy-MM');
  654. this.dateRange = startStr;
  655. }
  656. this.exportParam.dateRange = this.dateRange;
  657. }
  658. this.radio = '项目'
  659. this.getEchart();
  660. var _this = this;
  661. window.addEventListener("resize", function() {
  662. _this.myChart.resize();
  663. });
  664. // this.getDepartment();
  665. this.getMyProjectList();
  666. this.getUsers()
  667. this.jutishez()
  668. },
  669. };
  670. </script>
  671. <style lang="scss" scoped>
  672. #container {
  673. // display: inline-block;
  674. display: block;
  675. position: absolute;
  676. // width: 100% !important;
  677. margin-top: 60px;
  678. }
  679. </style>
  680. <style lang="scss">
  681. </style>