panel.blade.php 65 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152
  1. @extends('layouts.app')
  2. @section('title')控制台@endsection
  3. @section('head')
  4. <link href="{{ mix('css/element-ui.css') }}" rel="stylesheet">
  5. @endsection
  6. @section('content')
  7. <div class="d-none" id="list">
  8. <div class="container-fluid">
  9. <div class="card">
  10. <h5 class="card-header">最近常用功能</h5>
  11. <div class="card-body row">
  12. <ul class="list-group" v-for="(menu,index) in menus">
  13. <div class="container-fluid btn-group justify-content-center">
  14. <a class="btn-primary btn-lg" v-if="index<=3" :href="'/'+menu.route">@{{ menu.name }}</a>
  15. </div>
  16. <div v-if="menu.secondLevelMenu && menu.secondLevelMenu.length>0&&index<=3">
  17. <div class="container-fluid btn-group m-1">
  18. <a class="bth btn-sm btn-info m-1" v-for="(secondMenu,index) in menu.secondLevelMenu"
  19. :href="'/'+secondMenu.route" v-if="index < 2"> @{{ secondMenu.name }}</a>
  20. </div>
  21. </div>
  22. </ul>
  23. </div>
  24. </div>
  25. <div class="row my-3">
  26. <div class="col-sm-3 col-lg-3 col-xl-3 col-md-3">
  27. <div class="card">
  28. <div class="card-header text-dark h5">
  29. <p>实时待处理订(总):@{{ totalOrders.total }}</p>
  30. </div>
  31. <div class="card-body">
  32. <p>创建订单:@{{ totalOrders.createOrder }}</p>
  33. <p>分配完成:@{{ totalOrders.assignedComplete }}</p>
  34. <p>部分分配:@{{ totalOrders.partialAllocation }}</p>
  35. <p>部分装箱:@{{ totalOrders.partPacking }}</p>
  36. <p>分拨完成:@{{ totalOrders.sowComplete }}</p>
  37. </div>
  38. </div>
  39. </div>
  40. <div class="col-sm-2 col-lg-2 col-xl-2 col-md-2" v-for="(warehousesOrder,index) in warehousesOrders">
  41. <div class="card">
  42. <div class="card-header text-success h5">
  43. <p>@{{ getWareHouse(warehousesOrder.code) }}:@{{ warehousesOrder.total }}</p>
  44. </div>
  45. <div class="card-body">
  46. <p>创建订单:@{{ warehousesOrder.createOrder }}</p>
  47. <p>分配完成:@{{ warehousesOrder.assignedComplete }}</p>
  48. <p>部分分配:@{{ warehousesOrder.partialAllocation }}</p>
  49. <p>部分装箱:@{{ warehousesOrder.partPacking }}</p>
  50. <p>分拨完成:@{{ warehousesOrder.sowComplete }}</p>
  51. </div>
  52. </div>
  53. </div>
  54. </div>
  55. <div class="row my-3">
  56. <div class="col-6">
  57. <div class="card">
  58. <div class="card-header">
  59. <div class="row">
  60. <span v-show="orderCountingRecordsDayShow" class="demonstration mt-1">起始日期:</span>
  61. <el-date-picker
  62. size="small"
  63. @blur="orderCountingRecordApi('')"
  64. v-show="orderCountingRecordsDayShow"
  65. v-model="orderCountingRecordsStart"
  66. type="date"
  67. value-format="yyyy-MM-dd"
  68. placeholder="选起始日期">
  69. </el-date-picker>
  70. <span v-show="orderCountingRecordsDayShow" class="demonstration mt-1">结束日期:</span>
  71. <el-date-picker
  72. size="small"
  73. @blur="orderCountingRecordApi('')"
  74. v-show="orderCountingRecordsDayShow"
  75. v-model="orderCountingRecordsEnd"
  76. type="date"
  77. value-format="yyyy-MM-dd"
  78. placeholder="选择结束日期">
  79. </el-date-picker>
  80. <span v-show="orderCountingRecordsMonthShow" class="demonstration mt-1">起始月:</span>
  81. <el-date-picker
  82. size="small"
  83. @blur="orderCountingRecordApi('')"
  84. v-show="orderCountingRecordsMonthShow"
  85. v-model="orderCountingRecordsStart"
  86. type="month"
  87. value-format="yyyy-MM-dd"
  88. placeholder="选择起始月">
  89. </el-date-picker>
  90. <span v-show="orderCountingRecordsMonthShow" class="demonstration mt-1">结束月:</span>
  91. <el-date-picker
  92. size="small"
  93. @blur="orderCountingRecordApi('')"
  94. v-show="orderCountingRecordsMonthShow"
  95. v-model="orderCountingRecordsEnd"
  96. type="month"
  97. value-format="yyyy-MM-dd"
  98. placeholder="选择结束月">
  99. </el-date-picker>
  100. <span v-show="orderCountingRecordsYearShow" class="demonstration mt-1">起始年:</span>
  101. <el-date-picker
  102. size="small"
  103. @blur="orderCountingRecordApi('')"
  104. v-show="orderCountingRecordsYearShow"
  105. v-model="orderCountingRecordsStart"
  106. type="year"
  107. value-format="yyyy-MM-dd"
  108. placeholder="选择年">
  109. </el-date-picker>
  110. <span v-show="orderCountingRecordsYearShow" class="demonstration mt-1">结束年:</span>
  111. <el-date-picker
  112. size="small"
  113. @blur="orderCountingRecordApi('')"
  114. v-show="orderCountingRecordsYearShow"
  115. v-model="orderCountingRecordsEnd"
  116. type="year"
  117. value-format="yyyy-MM-dd"
  118. placeholder="选择年">
  119. </el-date-picker>
  120. <div class="btn-group btn-group-sm ml-2" role="group">
  121. <el-button type="primary" value="日" @click="orderCountingRecordApi('日')"
  122. class="btn btn-secondary"
  123. v-model="orderCountingRecordsUnit">日
  124. </el-button>
  125. <el-button type="primary" value="月" @click="orderCountingRecordApi('月')"
  126. class="btn btn-secondary "
  127. v-model="orderCountingRecordsUnit">月
  128. </el-button>
  129. <el-button type="primary" value="年" @click="orderCountingRecordApi('年')"
  130. class="btn btn-secondary"
  131. v-model="orderCountingRecordsUnit">年
  132. </el-button>
  133. </div>
  134. <div class="ml-2">
  135. <el-select placeholder="请选择对应货主" multiple v-model="selectOrderOwners" size="small"
  136. @change="orderCountingRecordApi('')">
  137. <el-option label="选择所有" value="all"></el-option>
  138. <el-option v-for="item in owners" :label="item.name" :value="item.id"
  139. :key="item.id"></el-option>
  140. </el-select>
  141. </div>
  142. </div>
  143. </div>
  144. <div class="card-body row">
  145. <div id="orderCountingRecords" class="col-12"
  146. style="min-height: 500px"></div>
  147. </div>
  148. </div>
  149. </div>
  150. <div class="col-sm-3 col-lg-3 col-xl-3 col-md-3">
  151. <div class="card">
  152. <div class="card-header">
  153. <div class="block row">
  154. <span class="demonstration"></span>
  155. <el-date-picker
  156. size="small"
  157. style="width: 60%;"
  158. @blur="logisticsCountingRecordsApi()"
  159. v-model="logisticsCountingRecordsData"
  160. type="daterange"
  161. align="right"
  162. unlink-panels
  163. range-separator="-"
  164. start-placeholder="开始日期"
  165. end-placeholder="结束日期"
  166. value-format="yyyy-MM-dd"
  167. :picker-options="pickerOptions">
  168. </el-date-picker>
  169. <el-select placeholder="请选择对应货主" multiple v-model="selectLogisticsOwners" size="small" style="width: 50%" @change="logisticsCountingRecordsApi('')">
  170. <el-option label="选择所有" value="all"></el-option>
  171. <el-option v-for="item in owners" :label="item.name" :value="item.id" :key="item.id"></el-option>
  172. </el-select>
  173. </div>
  174. </div>
  175. <div class="card-body row">
  176. <div id="logisticsCountingRecords" class="col-12"
  177. style="min-height:500px;"></div>
  178. </div>
  179. </div>
  180. </div>
  181. <div class="col-sm-3 col-lg-3 col-xl-3 col-md-3">
  182. <div class="card">
  183. <div class="card-header">
  184. <div class="block">
  185. <span class="demonstration"></span>
  186. <el-date-picker
  187. size="small"
  188. style="width: 80%;"
  189. @blur="warehouseCountingRecordsApi()"
  190. v-model="warehouseCountingRecordsData"
  191. type="daterange"
  192. align="right"
  193. unlink-panels
  194. range-separator="-"
  195. start-placeholder="开始日期"
  196. end-placeholder="结束日期"
  197. value-format="yyyy-MM-dd"
  198. :picker-options="pickerOptions">
  199. </el-date-picker>
  200. </div>
  201. </div>
  202. <div class="card-body row">
  203. <div id="warehouseCountingRecords" class="col-12"
  204. style=min-height:500px;"></div>
  205. </div>
  206. </div>
  207. </div>
  208. </div>
  209. <div class="row my-3">
  210. @can('人事管理-临时工报表-可见全部组')
  211. <div class="col-sm-6 col-lg-6 col-xl-6 col-md-6">
  212. <div class="card">
  213. <div class="card-header">
  214. <div class="block row">
  215. <span class="demonstration"></span>
  216. <span v-show="laborReportsCountingRecordsDayShow"
  217. class="demonstration mt-1">起始日期:</span>
  218. <el-date-picker
  219. size="small"
  220. @blur="laborReportsCountingRecordApi('')"
  221. v-show="laborReportsCountingRecordsDayShow"
  222. v-model="laborReportsCountingRecordsStart"
  223. type="date"
  224. value-format="yyyy-MM-dd"
  225. placeholder="选起始日期">
  226. </el-date-picker>
  227. <span v-show="laborReportsCountingRecordsDayShow"
  228. class="demonstration mt-1">结束日期:</span>
  229. <el-date-picker
  230. size="small"
  231. @blur="laborReportsCountingRecordApi('')"
  232. v-show="laborReportsCountingRecordsDayShow"
  233. v-model="laborReportsCountingRecordsEnd"
  234. type="date"
  235. value-format="yyyy-MM-dd"
  236. placeholder="选择结束日期">
  237. </el-date-picker>
  238. <span v-show="laborReportsCountingRecordsMonthShow"
  239. class="demonstration mt-1">起始月:</span>
  240. <el-date-picker
  241. size="small"
  242. @blur="laborReportsCountingRecordApi('')"
  243. v-show="laborReportsCountingRecordsMonthShow"
  244. v-model="laborReportsCountingRecordsStart"
  245. type="month"
  246. value-format="yyyy-MM-dd"
  247. placeholder="选择起始月">
  248. </el-date-picker>
  249. <span v-show="laborReportsCountingRecordsMonthShow"
  250. class="demonstration mt-1">结束月:</span>
  251. <el-date-picker
  252. size="small"
  253. @blur="laborReportsCountingRecordApi('')"
  254. v-show="laborReportsCountingRecordsMonthShow"
  255. v-model="laborReportsCountingRecordsEnd"
  256. type="month"
  257. value-format="yyyy-MM-dd"
  258. placeholder="选择结束月">
  259. </el-date-picker>
  260. <span v-show="laborReportsCountingRecordsYearShow"
  261. class="demonstration mt-1">起始年:</span>
  262. <el-date-picker
  263. size="small"
  264. @blur="laborReportsCountingRecordApi('')"
  265. v-show="laborReportsCountingRecordsYearShow"
  266. v-model="laborReportsCountingRecordsStart"
  267. type="year"
  268. value-format="yyyy-MM-dd"
  269. placeholder="选择年">
  270. </el-date-picker>
  271. <span v-show="laborReportsCountingRecordsYearShow"
  272. class="demonstration mt-1">结束年:</span>
  273. <el-date-picker
  274. size="small"
  275. @blur="laborReportsCountingRecordApi('')"
  276. v-show="laborReportsCountingRecordsYearShow"
  277. v-model="laborReportsCountingRecordsEnd"
  278. type="year"
  279. value-format="yyyy-MM-dd"
  280. placeholder="选择年">
  281. </el-date-picker>
  282. <div class="btn-group btn-group-sm ml-2" role="group">
  283. <el-button type="primary" value="日" @click="laborReportsCountingRecordApi('日')"
  284. class="btn btn-secondary"
  285. v-model="laborReportsCountingRecordUnit">日
  286. </el-button>
  287. <el-button type="primary" value="月" @click="laborReportsCountingRecordApi('月')"
  288. class="btn btn-secondary"
  289. v-model="laborReportsCountingRecordUnit">月
  290. </el-button>
  291. <el-button type="primary" value="年" @click="laborReportsCountingRecordApi('年')"
  292. class="btn btn-secondary"
  293. v-model="laborReportsCountingRecordUnit">年
  294. </el-button>
  295. </div>
  296. </div>
  297. </div>
  298. <div class="card-body row">
  299. <div id="laborReportsCountingRecords"
  300. class="col-12"
  301. style="min-height:500px;"></div>
  302. </div>
  303. </div>
  304. </div>
  305. <div class="col-sm-6 col-lg-6 col-xl-6 col-md-6">
  306. <div class="card">
  307. <div class="card-header">
  308. <span class="demonstration"></span>
  309. <el-date-picker
  310. size="small"
  311. @blur="laborReportsUserGroupsCountApi('')"
  312. v-model="laborReportsUserGroupsCountDate"
  313. type="daterange"
  314. align="right"
  315. unlink-panels
  316. range-separator="-"
  317. start-placeholder="开始日期"
  318. end-placeholder="结束日期"
  319. value-format="yyyy-MM-dd"
  320. :picker-options="pickerOptions">
  321. </el-date-picker>
  322. </div>
  323. <div class="card-body row">
  324. <div id="laborReportsUserGroupsCount"
  325. class="col-12"
  326. style="min-height:500px;"></div>
  327. </div>
  328. </div>
  329. </div>
  330. @endcan
  331. </div>
  332. <div class="row my-3">
  333. @can("控制台-称重统计")
  334. <div class="col-6">
  335. <div class="card">
  336. <div class="card-header">
  337. <div class="row">
  338. <el-date-picker size="small" class="col-4 date" @blur="loadWeightInfo()"
  339. type="daterange" align="right"
  340. v-model="searchOption.weightDate" unlink-panels range-separator="-"
  341. start-placeholder="开始日期" end-placeholder="结束日期"
  342. value-format="yyyy-MM-dd">
  343. </el-date-picker>
  344. <label class="col-3">
  345. <select class="form-control rounded" v-model="searchOption.weightSelect"
  346. @change="switchWeightDate()">
  347. <option v-for="(date,i) in dateOptions" :value="i">@{{ date.text }}</option>
  348. </select>
  349. </label>
  350. <el-select class="col-3" placeholder="请选择对应货主" multiple v-model="selectWeightOwners" size="small" style="width: 50%" @change="loadWeightInfo()">
  351. <el-option label="选择所有" value="all"></el-option>
  352. <el-option v-for="item in owners" :label="item.name" :value="item.id" :key="item.id"></el-option>
  353. </el-select>
  354. </div>
  355. </div>
  356. <div class="card-body row">
  357. <div id="weight" class="col-12" style="min-height: 500px"></div>
  358. </div>
  359. </div>
  360. </div>
  361. @endcan
  362. {{--异常分布图--}}
  363. <div class="col-6">
  364. <div class="card">
  365. <div class="card-header">
  366. <div class="flex-column">
  367. <el-date-picker size="small" class="col-6 date" @blur="loadExceptionTypeInfo()"
  368. type="daterange" align="right"
  369. v-model="searchOption.exceptionTypeDate" unlink-panels range-separator="-"
  370. start-placeholder="开始日期" end-placeholder="结束日期"
  371. value-format="yyyy-MM-dd">
  372. </el-date-picker>
  373. <el-select class="col-3" placeholder="请选择对应货主" multiple v-model="selectExceptionTypeOwners" size="small" style="width: 20%" @change="loadExceptionTypeInfo()">
  374. <el-option label="选择所有" value="all"></el-option>
  375. <el-option v-for="item in owners" :label="item.name" :value="item.id" :key="item.id"></el-option>
  376. </el-select>
  377. <label class="col-3 ">
  378. <select class="form-control rounded" v-model="searchOption.exceptionTypeSelect"
  379. @change="switchExceptionTypeDate()">
  380. <option v-for="(date,i) in dateOptions" :value="i">@{{ date.text }}</option>
  381. </select>
  382. </label>
  383. </div>
  384. </div>
  385. <div class="card-body row">
  386. <div id="exceptionType" class="col-12" style="min-height: 500px"></div>
  387. </div>
  388. </div>
  389. </div>
  390. </div>
  391. <div class="row my-3">
  392. {{--快递接口请求成功失败统计图--}}
  393. <div class="col-6">
  394. <div class="card">
  395. <div class="card-header">
  396. <div class="row">
  397. <el-date-picker size="small" class="col-6 date" @blur="loadOrderPackageReceivedSyncRecordInfo()"
  398. type="daterange" align="right"
  399. v-model="searchOption.OrderPackageReceivedSyncRecordDate" unlink-panels range-separator="-"
  400. start-placeholder="开始日期" end-placeholder="结束日期"
  401. value-format="yyyy-MM-dd">
  402. </el-date-picker>
  403. <label class="col-3 offset-3">
  404. <select class="form-control rounded" v-model="searchOption.OrderPackageReceivedSyncRecordSelect"
  405. @change="switchOrderPackageReceivedSyncRecordDate()">
  406. <option v-for="(date,i) in dateOptions" :value="i">@{{ date.text }}</option>
  407. </select>
  408. </label>
  409. </div>
  410. </div>
  411. <div class="card-body row">
  412. <div id="orderPackageReceivedSyncRecord" class="col-12" style="min-height: 500px"></div>
  413. </div>
  414. </div>
  415. </div>
  416. </div>
  417. </div>
  418. </div>
  419. @endsection
  420. @section('lastScript')
  421. <script src="{{ mix('js/echarts.js') }}"></script>
  422. <script src="{{ mix('js/element-ui.js') }}"></script>
  423. <script>
  424. let vue = new Vue({
  425. el: "#list",
  426. data: {
  427. myChart: null,
  428. menus:{!! $menus !!},
  429. owners:{!! $owners !!},
  430. selectOrderOwners: [],
  431. selectLogisticsOwners: [],
  432. selectWeightOwners: [],
  433. selectExceptionTypeOwners: [],
  434. warehousesOrders:{!! $warehousesOrders !!},
  435. orderCountingRecords:{},
  436. logisticsCountingRecords:{},
  437. warehouseCountingRecords:{},
  438. laborReportsCountingRecords:{},
  439. laborReportsUserGroupsCount:{},
  440. warehouses: {
  441. "WH01": '松江一仓',
  442. "WH02": '松江二仓',
  443. "WH03": '嘉定一仓',},
  444. totalOrders: {
  445. total: null,
  446. createOrder: null,
  447. assignedComplete: null,
  448. partialAllocation: null,
  449. partPacking: null,
  450. sowComplete: null,
  451. },
  452. orderCountingRecordsDateTarget: [],
  453. orderCountingRecordsData: [],
  454. laborReportsCountingRecordsDateTarget: [],
  455. laborReportsCountingRecordsData: [],
  456. pickerOptions: {
  457. shortcuts: [{
  458. text: '最近一周',
  459. onClick(picker) {
  460. const end = new Date();
  461. const start = new Date();
  462. start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
  463. picker.$emit('pick', [start, end]);
  464. }
  465. }, {
  466. text: '最近一个月',
  467. onClick(picker) {
  468. const end = new Date();
  469. const start = new Date();
  470. start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
  471. picker.$emit('pick', [start, end]);
  472. }
  473. }, {
  474. text: '最近三个月',
  475. onClick(picker) {
  476. const end = new Date();
  477. const start = new Date();
  478. start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
  479. picker.$emit('pick', [start, end]);
  480. }
  481. }]
  482. },
  483. dateOptions:[{text:'当天',start:moment().format('yyyy-MM-DD'),end:moment().format('yyyy-MM-DD')},
  484. {text:"昨天",start:moment().subtract("1","day").format('yyyy-MM-DD'),end:moment().subtract("1","day").format('yyyy-MM-DD')},
  485. {text:"本周",start:moment().weekday(1).format('yyyy-MM-DD'),end:moment().weekday(7).format('yyyy-MM-DD')},
  486. {text:"上周",start:moment().weekday(-6).format('yyyy-MM-DD'),end:moment().weekday(0).format('yyyy-MM-DD')},
  487. {text:"本月",start:moment().startOf("month").format('yyyy-MM-DD'),end:moment().endOf("month").format('yyyy-MM-DD')},
  488. {text:"上月",start:moment().month(moment().month() - 1).startOf('month').format('yyyy-MM-DD'),end:moment().month(moment().month() - 1).endOf('month').format('yyyy-MM-DD')},
  489. {text:"本季度",start:moment(moment().quarter(moment().quarter()).startOf('quarter').valueOf()).format('yyyy-MM-DD'),end:moment(moment().quarter(moment().quarter()).endOf('quarter').valueOf()).format('yyyy-MM-DD')},
  490. {text:"上季度",start:moment(moment().quarter(moment().quarter() - 1).startOf('quarter').valueOf()).format('yyyy-MM-DD'),end:moment(moment().quarter(moment().quarter() - 1).endOf('quarter').valueOf()).format('yyyy-MM-DD')},
  491. {text:"本年",start:moment(moment().year(moment().year()).startOf('year').valueOf()).format('yyyy-MM-DD'),end:moment(moment().year(moment().year()).endOf('year').valueOf()).format('yyyy-MM-DD')},
  492. {text:"去年",start:moment(moment().year(moment().year() - 1).startOf('year').valueOf()).format('yyyy-MM-DD'),end:moment(moment().year(moment().year() - 1).endOf('year').valueOf()).format('yyyy-MM-DD')}],
  493. logisticsCountingRecordsData: [moment().subtract('1', 'month').format('yyyy-MM-DD'),
  494. moment(new Date()).format('yyyy-MM-DD')],
  495. warehouseCountingRecordsData: [moment().subtract('1', 'month').format('yyyy-MM-DD'),
  496. moment(new Date()).format('yyyy-MM-DD')],
  497. laborReportsCountingRecordsDate: [moment().subtract('1', 'month').format('yyyy-MM-DD'),
  498. moment(new Date()).format('yyyy-MM-DD')],
  499. laborReportsUserGroupsCountDate: [moment().subtract('1', 'month').format('yyyy-MM-DD'),
  500. moment(new Date()).format('yyyy-MM-DD')],
  501. orderCountingRecordsUnit: '日',
  502. laborReportsCountingRecordUnit: '日',
  503. orderCountingRecordsDayShow: true,
  504. orderCountingRecordsMonthShow: false,
  505. orderCountingRecordsYearShow: false,
  506. orderCountingRecordsStart: moment().subtract('1', 'month').format('yyyy-MM-DD'),
  507. orderCountingRecordsEnd: moment(new Date()).format('yyyy-MM-DD'),
  508. orderCountingUnit: '日',
  509. orderUnitsData: {
  510. start_day: moment().subtract('1', 'month').format('yyyy-MM-DD'),
  511. end_day: moment(new Date()).format('yyyy-MM-DD'),
  512. start_month: moment().subtract('12', 'month').format('yyyy-MM-DD'),
  513. end_month: moment(new Date()).format('yyyy-MM-DD'),
  514. start_year: moment().subtract('12', 'month').format('yyyy-MM-DD'),
  515. end_year: moment(new Date()).format('yyyy-MM-DD'),
  516. },
  517. laborReportsUnit: '日',
  518. laborReportsData: {
  519. start_day: moment().subtract('1', 'month').format('yyyy-MM-DD'),
  520. end_day: moment(new Date()).format('yyyy-MM-DD'),
  521. start_month: moment().subtract('12', 'month').format('yyyy-MM-DD'),
  522. end_month: moment(new Date()).format('yyyy-MM-DD'),
  523. start_year: moment().subtract('12', 'month').format('yyyy-MM-DD'),
  524. end_year: moment(new Date()).format('yyyy-MM-DD'),
  525. },
  526. laborReportsCountingRecordsDayShow: true,
  527. laborReportsCountingRecordsMonthShow: false,
  528. laborReportsCountingRecordsYearShow: false,
  529. laborReportsCountingRecordsStart: moment().subtract('1', 'month').format('yyyy-MM-DD'),
  530. laborReportsCountingRecordsEnd: moment(new Date()).format('yyyy-MM-DD'),
  531. cardPool:{},
  532. searchOption:{
  533. weightDate:[],
  534. exceptionTypeDate: [],
  535. weightSelect:"",
  536. exceptionTypeSelect:"",
  537. OrderPackageReceivedSyncRecordDate: [],
  538. OrderPackageReceivedSyncRecordSelect:"",
  539. },
  540. },
  541. watch:{
  542. selectOrderOwners:function(val,oldval){
  543. let newindex = val.indexOf('all');
  544. let oldindex = oldval.indexOf('all');
  545. if(newindex!=-1 && oldindex==-1 && val.length>1)
  546. this.selectOrderOwners=['all'];
  547. else if(newindex!=-1 && oldindex!=-1 && val.length>1)
  548. this.selectOrderOwners.splice(val.indexOf('all'),1)
  549. },
  550. selectLogisticsOwners:function(val,oldval){
  551. let newindex = val.indexOf('all');
  552. let oldindex = oldval.indexOf('all');
  553. if(newindex!=-1 && oldindex==-1 && val.length>1)
  554. this.selectLogisticsOwners=['all'];
  555. else if(newindex!=-1 && oldindex!=-1 && val.length>1)
  556. this.selectLogisticsOwners.splice(val.indexOf('all'),1)
  557. }
  558. },
  559. mounted() {
  560. $('#list').removeClass('d-none');
  561. let index = 4;
  562. this.searchOption.weightSelect = index;
  563. this.searchOption.OrderPackageReceivedSyncRecordSelect = 2;
  564. this.searchOption.exceptionTypeSelect = index;
  565. this.searchOption.weightDate = [this.dateOptions[index].start, this.dateOptions[index].end];
  566. this.searchOption.OrderPackageReceivedSyncRecordDate = [this.dateOptions[2].start, this.dateOptions[2].end];
  567. this.searchOption.exceptionTypeDate = [this.dateOptions[index].start, this.dateOptions[index].end];
  568. let _this = this;
  569. this.warehousesOrders.forEach(function (item) {
  570. _this.totalOrders.total += parseInt(item.total);
  571. _this.totalOrders.createOrder += item.createOrder;
  572. _this.totalOrders.assignedComplete += item.assignedComplete;
  573. _this.totalOrders.partialAllocation += item.partialAllocation;
  574. _this.totalOrders.partPacking += item.partPacking;
  575. _this.totalOrders.sowComplete += item.sowComplete;
  576. });
  577. //订单量趋势
  578. this.orderCountingRecordsChart = echarts.init(document.getElementById('orderCountingRecords'));
  579. this.initOrderCountingRecordsChart();
  580. this.orderCountingRecordApi('日');
  581. //订单快递分布
  582. this.logisticsCountingRecordsChart = echarts.init(document.getElementById('logisticsCountingRecords'));
  583. this.initLogisticsCountingRecordsChart();
  584. this.logisticsCountingRecordsApi();
  585. //订单仓库分布
  586. this.warehouseCountingRecordsChart = echarts.init(document.getElementById('warehouseCountingRecords'));
  587. this.initWarehouseCountingRecordsChart();
  588. this.warehouseCountingRecordsApi();
  589. @can('人事管理-临时工报表-可见全部组')
  590. this.laborReportsCountingRecordsChart = echarts.init(document.getElementById('laborReportsCountingRecords'));
  591. this.initLaborReportsCountingRecordsChart();
  592. this.laborReportsCountingRecordApi('日');
  593. this.laborReportsUserGroupsCountChart = echarts.init(document.getElementById('laborReportsUserGroupsCount'));
  594. this.initLaborReportsUserGroupsCountChart();
  595. this.laborReportsUserGroupsCountApi();
  596. @endcan
  597. @can("控制台-称重统计")
  598. this.cardPool.weight = echarts.init(document.getElementById("weight"));
  599. this.loadWeightInfo();
  600. @endcan
  601. this.cardPool.orderPackageReceivedSyncRecord = echarts.init(document.getElementById("orderPackageReceivedSyncRecord"));
  602. this.loadOrderPackageReceivedSyncRecordInfo();
  603. this.cardPool.exceptionType = echarts.init(document.getElementById("exceptionType"));
  604. this.loadExceptionTypeInfo();
  605. },
  606. methods: {
  607. switchDataPanel_forOrderCountingRecords(fromUnit, toUnit) {
  608. switch (fromUnit) {
  609. case '日':
  610. this.orderUnitsData.start_day = this.orderCountingRecordsStart;
  611. this.orderUnitsData.end_day = this.orderCountingRecordsEnd;
  612. break;
  613. case '月':
  614. this.orderUnitsData.start_month = this.orderCountingRecordsStart;
  615. this.orderUnitsData.end_month = this.orderCountingRecordsEnd;
  616. break;
  617. case '年':
  618. this.orderUnitsData.start_year = this.orderCountingRecordsStart;
  619. this.orderUnitsData.end_year = this.orderCountingRecordsEnd;
  620. break;
  621. }
  622. switch (toUnit) {
  623. case '日':
  624. this.orderCountingRecordsStart = this.orderUnitsData.start_day;
  625. this.orderCountingRecordsEnd = this.orderUnitsData.end_day;
  626. break;
  627. case '月':
  628. this.orderCountingRecordsStart = this.orderUnitsData.start_month;
  629. this.orderCountingRecordsEnd = this.orderUnitsData.end_month;
  630. break;
  631. case '年':
  632. this.orderCountingRecordsStart = this.orderUnitsData.start_year;
  633. this.orderCountingRecordsEnd = this.orderUnitsData.end_year;
  634. break;
  635. }
  636. },
  637. switchDataPanel_forLaborReports(fromUnit, toUnit) {
  638. switch (fromUnit) {
  639. case '日':
  640. this.laborReportsData.start_day = this.laborReportsCountingRecordsStart;
  641. this.laborReportsData.end_day = this.laborReportsCountingRecordsEnd;
  642. break;
  643. case '月':
  644. this.laborReportsData.start_month = this.laborReportsCountingRecordsStart;
  645. this.laborReportsData.end_month = this.laborReportsCountingRecordsEnd;
  646. break;
  647. case '年':
  648. this.laborReportsData.start_year = this.laborReportsCountingRecordsStart;
  649. this.laborReportsData.end_year = this.laborReportsCountingRecordsEnd;
  650. break;
  651. }
  652. switch (toUnit) {
  653. case '日':
  654. this.laborReportsCountingRecordsStart = this.laborReportsData.start_day;
  655. this.laborReportsCountingRecordsEnd = this.laborReportsData.end_day;
  656. break;
  657. case '月':
  658. this.laborReportsCountingRecordsStart = this.laborReportsData.start_month;
  659. this.laborReportsCountingRecordsEnd = this.laborReportsData.end_month;
  660. break;
  661. case '年':
  662. this.laborReportsCountingRecordsStart = this.laborReportsData.start_year;
  663. this.laborReportsCountingRecordsEnd = this.laborReportsData.end_year;
  664. break;
  665. }
  666. },
  667. getWareHouse: function (code) {
  668. return this.warehouses[code];
  669. },
  670. initOrderCountingRecords() {
  671. for (let key in this.orderCountingRecords) {
  672. this.orderCountingRecordsDateTarget.push(this.orderCountingRecords[key].date_target);
  673. this.orderCountingRecordsData.push(this.orderCountingRecords[key].counter);
  674. }
  675. },
  676. initOrderCountingRecordsChart(text) {
  677. this.orderCountingRecordsChart.showLoading('default', {text: "加 载 中", color: '#C0C0C0'});
  678. if (text == null || text == '' || text == undefined) text = '默认显示权限下所有货主订单数量';
  679. this.orderCountingRecordsChart.setOption({
  680. title: {text: '订单量趋势', subtext: text,},
  681. tooltip: {},
  682. legend: {data: ['订单数']},
  683. xAxis: {
  684. type: 'category',
  685. data: this.orderCountingRecordsDateTarget
  686. },
  687. yAxis: {type: 'value'},
  688. series: [{
  689. data: this.orderCountingRecordsData,
  690. type: 'line',
  691. smooth: true
  692. }]
  693. });
  694. },
  695. initLaborReportsCountingRecordsChart() {
  696. this.laborReportsCountingRecordsChart.showLoading('default', {text: "加 载 中", color: '#C0C0C0'});
  697. this.laborReportsCountingRecordsChart.setOption({
  698. title: {text: '临时用工趋势'},
  699. tooltip: {},
  700. legend: {data: ['临时用工数']},
  701. xAxis: {
  702. type: 'category',
  703. data: this.laborReportsCountingRecordsDateTarget
  704. },
  705. yAxis: {type: 'value'},
  706. series: [{
  707. data: this.laborReportsCountingRecordsData,
  708. type: 'line',
  709. smooth: true
  710. }]
  711. });
  712. },
  713. initLogisticsCountingRecordsChart(text) {
  714. this.logisticsCountingRecordsChart.showLoading('default', {text: "加 载 中", color: '#C0C0C0'});
  715. if (text == null || text == '' || text == undefined) text = '默认显示权限下所有货主快递分布';
  716. this.logisticsCountingRecordsChart.setOption({
  717. title: {
  718. text: '快递分布',
  719. subtext: text,
  720. left: 'left'
  721. },
  722. tooltip: {
  723. trigger: 'item',
  724. formatter: '{a} <br/>{b} : {c} ({d}%)'
  725. },
  726. series: [
  727. {
  728. name: '快递分布',
  729. type: 'pie',
  730. radius: '55%',
  731. center: ['50%', '60%'],
  732. data: this.logisticsCountingRecords,
  733. emphasis: {
  734. itemStyle: {
  735. shadowBlur: 10,
  736. shadowOffsetX: 0,
  737. shadowColor: 'rgba(0, 0, 0, 0.5)'
  738. }
  739. }
  740. }
  741. ]
  742. });
  743. },
  744. initWarehouseCountingRecordsChart() {
  745. this.warehouseCountingRecordsChart.showLoading('default', {text: "加 载 中", color: '#C0C0C0'});
  746. this.warehouseCountingRecordsChart.setOption({
  747. title: {
  748. text: '仓库分布',
  749. left: 'left'
  750. },
  751. tooltip: {
  752. trigger: 'item',
  753. formatter: '{a} <br/>{b} : {c} ({d}%)'
  754. },
  755. series: [
  756. {
  757. name: '仓库分布',
  758. type: 'pie',
  759. radius: '55%',
  760. center: ['50%', '60%'],
  761. data: this.warehouseCountingRecords,
  762. emphasis: {
  763. itemStyle: {
  764. shadowBlur: 10,
  765. shadowOffsetX: 0,
  766. shadowColor: 'rgba(0, 0, 0, 0.5)'
  767. }
  768. }
  769. }
  770. ]
  771. });
  772. },
  773. initLaborReportsUserGroupsCountChart() {
  774. this.laborReportsUserGroupsCountChart.showLoading('default', {text: "加 载 中", color: '#C0C0C0'});
  775. this.laborReportsUserGroupsCountChart.setOption({
  776. title: {
  777. text: '小组临时工分布',
  778. left: 'left'
  779. },
  780. tooltip: {
  781. trigger: 'item',
  782. formatter: '{a} <br/>{b} : {c} ({d}%)'
  783. },
  784. series: [
  785. {
  786. name: '小组临时工分布',
  787. type: 'pie',
  788. radius: '55%',
  789. center: ['50%', '60%'],
  790. data: this.laborReportsUserGroupsCount,
  791. emphasis: {
  792. itemStyle: {
  793. shadowBlur: 10,
  794. shadowOffsetX: 0,
  795. shadowColor: 'rgba(0, 0, 0, 0.5)'
  796. }
  797. }
  798. }
  799. ]
  800. });
  801. },
  802. initLaborReportsCountingRecords() {
  803. let _this = this;
  804. this.laborReportsCountingRecords.forEach(function (item) {
  805. _this.laborReportsCountingRecordsDateTarget.push(item.date_target);
  806. _this.laborReportsCountingRecordsData.push(item.counter);
  807. });
  808. },
  809. orderCountingRecordApi(orderCountingRecordsUnit) {
  810. this.orderCountingRecordsChart.showLoading('default', {text: "加 载 中", color: '#C0C0C0'});
  811. if (orderCountingRecordsUnit === '') {
  812. orderCountingRecordsUnit = this.orderCountingRecordsUnit;
  813. }
  814. this.switchDataPanel_forOrderCountingRecords(this.orderCountingUnit, orderCountingRecordsUnit);
  815. this.orderCountingUnit = orderCountingRecordsUnit;
  816. switch (orderCountingRecordsUnit) {
  817. case '日':
  818. this.orderCountingRecordsDayShow = true;
  819. this.orderCountingRecordsMonthShow = false;
  820. this.orderCountingRecordsYearShow = false;
  821. break;
  822. case '月':
  823. this.orderCountingRecordsDayShow = false;
  824. this.orderCountingRecordsMonthShow = true;
  825. this.orderCountingRecordsYearShow = false;
  826. break;
  827. case '年':
  828. this.orderCountingRecordsDayShow = false;
  829. this.orderCountingRecordsMonthShow = false;
  830. this.orderCountingRecordsYearShow = true;
  831. break;
  832. }
  833. this.orderCountingRecordsUnit = orderCountingRecordsUnit;
  834. let _this = this;
  835. let text = null;
  836. axios.post('{{url('apiLocal/control/panel/menu/orderCountingRecordApi')}}', {
  837. 'start': this.orderCountingRecordsStart, 'end': this.orderCountingRecordsEnd,
  838. 'unit': orderCountingRecordsUnit, 'owner_ids': this.selectOrderOwners
  839. }).then(function (res) {
  840. if (res.status === 200) {
  841. _this.orderCountingRecords = res.data.orderCountingRecords;
  842. _this.orderCountingRecordsDateTarget = [];
  843. _this.orderCountingRecordsData = [];
  844. _this.initOrderCountingRecords();
  845. if (_this.selectOrderOwners.length > 0) text = '当前选中货主订单数量';
  846. _this.initOrderCountingRecordsChart(text);
  847. _this.orderCountingRecordsChart.hideLoading();
  848. }
  849. });
  850. },
  851. logisticsCountingRecordsApi() {
  852. this.logisticsCountingRecordsChart.showLoading('default', {text: "加 载 中", color: '#C0C0C0'});
  853. let text = null;
  854. let _this = this;
  855. axios.post('{{url('apiLocal/control/panel/menu/logisticsCountingRecordsApi')}}', {
  856. 'start': this.logisticsCountingRecordsData[0],
  857. 'end': this.logisticsCountingRecordsData[1],
  858. 'owner_ids': this.selectLogisticsOwners
  859. }).then(function (res) {
  860. if (res.status === 200) {
  861. _this.logisticsCountingRecords = res.data.logisticsCountingRecords;
  862. if (_this.selectLogisticsOwners.length > 0) text = '当前选中货主快递分布';
  863. _this.initLogisticsCountingRecordsChart(text);
  864. _this.logisticsCountingRecordsChart.hideLoading();
  865. }
  866. });
  867. },
  868. warehouseCountingRecordsApi() {
  869. this.warehouseCountingRecordsChart.showLoading('default', {text: "加 载 中", color: '#C0C0C0'});
  870. let formData = new FormData();
  871. formData.append('start', this.warehouseCountingRecordsData[0]);
  872. formData.append('end', this.warehouseCountingRecordsData[1]);
  873. let _this = this;
  874. axios.post('{{url('apiLocal/control/panel/menu/warehouseCountingRecordsApi')}}', formData).then(function (res) {
  875. if (res.status === 200) {
  876. _this.warehouseCountingRecords = res.data.warehouseCountingRecords;
  877. _this.initWarehouseCountingRecordsChart();
  878. _this.warehouseCountingRecordsChart.hideLoading();
  879. }
  880. });
  881. },
  882. laborReportsCountingRecordApi(laborReportsCountingRecordUnit) {
  883. this.laborReportsCountingRecordsChart.showLoading('default', {text: "加 载 中", color: '#C0C0C0'});
  884. if (laborReportsCountingRecordUnit === '') {
  885. laborReportsCountingRecordUnit = this.laborReportsCountingRecordUnit;
  886. }
  887. this.switchDataPanel_forLaborReports(this.laborReportsUnit, laborReportsCountingRecordUnit);
  888. this.laborReportsUnit = laborReportsCountingRecordUnit;
  889. this.laborReportsCountingRecordUnit = laborReportsCountingRecordUnit;
  890. switch (laborReportsCountingRecordUnit) {
  891. case '日':
  892. this.laborReportsCountingRecordsDayShow = true;
  893. this.laborReportsCountingRecordsMonthShow = false;
  894. this.laborReportsCountingRecordsYearShow = false;
  895. break;
  896. case '月':
  897. this.laborReportsCountingRecordsDayShow = false;
  898. this.laborReportsCountingRecordsMonthShow = true;
  899. this.laborReportsCountingRecordsYearShow = false;
  900. break;
  901. case '年':
  902. this.laborReportsCountingRecordsDayShow = false;
  903. this.laborReportsCountingRecordsMonthShow = false;
  904. this.laborReportsCountingRecordsYearShow = true;
  905. break;
  906. }
  907. let formData = new FormData();
  908. formData.append('start', this.laborReportsCountingRecordsStart);
  909. formData.append('end', this.laborReportsCountingRecordsEnd);
  910. formData.append('unit', laborReportsCountingRecordUnit);
  911. let _this = this;
  912. axios.post('{{url('apiLocal/control/panel/menu/laborReportsCountingRecordApi')}}', formData).then(function (res) {
  913. if (res.status === 200) {
  914. _this.laborReportsCountingRecords = res.data.laborReportsCountingRecords;
  915. _this.laborReportsCountingRecordsDateTarget = [];
  916. _this.laborReportsCountingRecordsData = [];
  917. _this.initLaborReportsCountingRecords();
  918. _this.initLaborReportsCountingRecordsChart();
  919. _this.laborReportsCountingRecordsChart.hideLoading();
  920. }
  921. });
  922. },
  923. laborReportsUserGroupsCountApi() {
  924. this.laborReportsUserGroupsCountChart.showLoading('default', {text: "加 载 中", color: '#C0C0C0'});
  925. let formData = new FormData();
  926. formData.append('start', this.laborReportsUserGroupsCountDate[0]);
  927. formData.append('end', this.laborReportsUserGroupsCountDate[1]);
  928. let _this = this;
  929. axios.post('{{url('apiLocal/control/panel/menu/laborReportsUserGroupsCountApi')}}', formData).then(function (res) {
  930. if (res.status === 200) {
  931. _this.laborReportsUserGroupsCount = res.data.laborReportsUserGroupsCount;
  932. _this.initLaborReportsUserGroupsCountChart();
  933. _this.laborReportsUserGroupsCountChart.hideLoading();
  934. }
  935. });
  936. },
  937. loadWeightInfo(){
  938. window.tempTip.setDuration(3000);
  939. if (!this.searchOption.weightDate[0]){
  940. window.tempTip.show("开始时间未选择");
  941. return;
  942. }
  943. if (!this.searchOption.weightDate[1]){
  944. window.tempTip.show("结束时间未选择");
  945. return;
  946. }
  947. this.cardPool.weight.showLoading('default',{text:"加 载 中",color:'#C0C0C0'});
  948. let url = "{{url('apiLocal/control/panel/menu/weightApi')}}";
  949. let params = {start:this.searchOption.weightDate[0],end:this.searchOption.weightDate[1],owner_ids:this.selectWeightOwners};
  950. window.tempTip.postBasicRequest(url,params,res=>{
  951. this.cardPool.weight.hideLoading();
  952. let myechart = this.cardPool.weight, option = this._setWeightData(res.title,res.data);
  953. myechart.on('updateAxisPointer', function (event) {
  954. var xAxisInfo = event.axesInfo[0];
  955. if (xAxisInfo) {
  956. var dimension = xAxisInfo.value + 1;
  957. myechart.setOption({
  958. series: {
  959. id: 'pie',
  960. label: {
  961. formatter: '{b}: {@[' + dimension + ']} ({d}%)'
  962. },
  963. encode: {
  964. value: dimension,
  965. tooltip: dimension
  966. }
  967. }
  968. });
  969. }
  970. });
  971. myechart.setOption(option);
  972. });
  973. },
  974. loadOrderPackageReceivedSyncRecordInfo(){
  975. window.tempTip.setDuration(3000);
  976. if (!this.searchOption.OrderPackageReceivedSyncRecordDate[0]){
  977. window.tempTip.show("开始时间未选择");
  978. return;
  979. }
  980. if (!this.searchOption.OrderPackageReceivedSyncRecordDate[1]){
  981. window.tempTip.show("结束时间未选择");
  982. return;
  983. }
  984. this.cardPool.orderPackageReceivedSyncRecord.showLoading('default',{text:"加 载 中",color:'#C0C0C0'});
  985. let url = "{{url('apiLocal/control/panel/menu/orderPackageReceivedSyncRecordApi')}}";
  986. let params = {start:this.searchOption.OrderPackageReceivedSyncRecordDate[0],end:this.searchOption.OrderPackageReceivedSyncRecordDate[1]};
  987. window.tempTip.postBasicRequest(url,params,res=>{
  988. this.cardPool.orderPackageReceivedSyncRecord.hideLoading();
  989. this.cardPool.orderPackageReceivedSyncRecord.setOption(this._setOrderPackageReceivedSyncRecordData(res.title, res.data));
  990. });
  991. },
  992. loadExceptionTypeInfo() {
  993. window.tempTip.setDuration(3000);
  994. if (!this.searchOption.exceptionTypeDate[0]){
  995. window.tempTip.show("开始时间未选择");
  996. return;
  997. }
  998. if (!this.searchOption.exceptionTypeDate[1]){
  999. window.tempTip.show("结束时间未选择");
  1000. return;
  1001. }
  1002. this.cardPool.exceptionType.showLoading('default',{text:"加 载 中",color:'#C0C0C0'});
  1003. let url = "{{url('apiLocal/control/panel/menu/exceptionTypeApi')}}";
  1004. let params = {start:this.searchOption.exceptionTypeDate[0],end:this.searchOption.exceptionTypeDate[1],owner_ids:this.selectExceptionTypeOwners};
  1005. window.tempTip.postBasicRequest(url,params,res=>{
  1006. this.cardPool.exceptionType.hideLoading();
  1007. this.cardPool.exceptionType.setOption(this._setExceptionTypeData(res.data));
  1008. });
  1009. },
  1010. switchWeightDate(){
  1011. let obj = this.dateOptions[this.searchOption.weightSelect];
  1012. this.searchOption.weightDate = [obj.start,obj.end];
  1013. this.loadWeightInfo();
  1014. },
  1015. switchOrderPackageReceivedSyncRecordDate(){
  1016. let obj = this.dateOptions[this.searchOption.OrderPackageReceivedSyncRecordSelect];
  1017. this.searchOption.OrderPackageReceivedSyncRecordDate = [obj.start,obj.end];
  1018. this.loadOrderPackageReceivedSyncRecordInfo();
  1019. },
  1020. switchExceptionTypeDate(){
  1021. let obj = this.dateOptions[this.searchOption.exceptionTypeSelect];
  1022. this.searchOption.exceptionTypeDate = [obj.start,obj.end];
  1023. this.loadExceptionTypeInfo();
  1024. },
  1025. _setWeightData(title, data){
  1026. let temp = [],len = data.length -1;
  1027. for (let i=0; i < len; i++){
  1028. temp.push({type: 'line', smooth: true, seriesLayoutBy: 'row', emphasis: {focus: 'series'}});
  1029. }
  1030. temp.push({
  1031. type: 'pie',
  1032. id: 'pie',
  1033. radius: '30%',
  1034. center: ['50%', '32%'],
  1035. emphasis: {focus: 'data'},
  1036. label: {
  1037. formatter: '{b}: {@'+title+'} ({d}%)'
  1038. },
  1039. encode: {
  1040. itemName: 'product',
  1041. value: title,
  1042. tooltip: title
  1043. }
  1044. });
  1045. console.log(temp)
  1046. return {
  1047. legend: {},
  1048. tooltip: {
  1049. trigger: 'axis',
  1050. showContent: false
  1051. },
  1052. dataset: {
  1053. source: data
  1054. },
  1055. xAxis: {type: 'category'},
  1056. yAxis: {gridIndex: 0},
  1057. grid: {top: '60%'},
  1058. series: temp
  1059. };
  1060. },
  1061. _setOrderPackageReceivedSyncRecordData(title,data){
  1062. return {
  1063. title: {
  1064. text: '快递信息同步成功失败占比',
  1065. left: 'left'
  1066. },
  1067. tooltip: {
  1068. trigger: 'item',
  1069. formatter: function (params) {
  1070. return params.data.date + "<br>" + "总量:<span class='text-success font-weight-bold'>" + params.data.total + "</span><br>" + "成功:<span class='text-info font-weight-bold'>" + params.data.count + "</span><br>"+ "承运商:<span class='text-info font-weight-bold'>" + params.data.logistic_name + "</span>";
  1071. }
  1072. }, xAxis: {
  1073. data: title
  1074. }, yAxis: {
  1075. axisLabel: {
  1076. show: true,
  1077. interval: 'auto',
  1078. formatter: '{value} %'
  1079. },
  1080. max: 100
  1081. }, label: {
  1082. show: true,
  1083. position: 'top',
  1084. formatter: '{c}%',
  1085. color: "red"
  1086. }, series: [{
  1087. type: "bar",
  1088. data: data,
  1089. itemStyle: {
  1090. color: "RGB(62,157,231)",
  1091. }
  1092. }]
  1093. };
  1094. },
  1095. _setExceptionTypeData(data) {
  1096. let resData = [];
  1097. data.forEach(item => {
  1098. resData.push({
  1099. value:item.count,
  1100. name:item.exception_type
  1101. })
  1102. })
  1103. return {
  1104. title: {
  1105. text: '异常分布',
  1106. left: 'left'
  1107. },
  1108. tooltip: {
  1109. trigger: 'item',
  1110. formatter: '{a} <br/>{b} : {c} ({d}%)'
  1111. },
  1112. series: [
  1113. {
  1114. name: '异常分布',
  1115. type: 'pie',
  1116. radius: '55%',
  1117. center: ['50%', '60%'],
  1118. data: resData,
  1119. emphasis: {
  1120. itemStyle: {
  1121. shadowBlur: 10,
  1122. shadowOffsetX: 0,
  1123. shadowColor: 'rgba(0, 0, 0, 0.5)'
  1124. }
  1125. }
  1126. }
  1127. ]
  1128. }
  1129. }
  1130. }
  1131. });
  1132. </script>
  1133. @endsection