index.vue 42 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098
  1. <template>
  2. <div class="app-container">
  3. <!-- <el-dialog
  4. v-dialogDrag
  5. ref="dialog__wrapper">
  6. <div class="dialog-body">
  7. <div
  8. class="line"
  9. v-dialogDrag Width="$refs.dialog__wrapper">1111111111111111111</div>
  10. </div>
  11. </el-dialog> -->
  12. <el-row :gutter="20">
  13. <el-col :span="18">
  14. <!-- <draggable v-model="arr1" group="itxst" animation="300" :group="{name: 'dashboard',pull: true}">
  15. <transition-group>
  16. <div style = "width:300px;height:20px;border:1px soild #333" :class="item.id==1?'item forbid':'item'" v-for="item in arr1" key="1">{{item.name}}</div>
  17. </transition-group>
  18. </draggable> -->
  19. <div class="search">
  20. <el-select v-model="tableObj.getDataParameters.parammaps.dateType" placeholder="查询日期" @change="change_date_type">
  21. <el-option v-for="item in dateTypeList" :key="item.id" :label="item.name" :value="item.id" ></el-option>
  22. </el-select>
  23. <el-select v-model="tableObj.getDataParameters.parammaps.type" filterable placeholder="数据类型" class="filter-item" style="width: 120px;" clearable>
  24. <el-option v-for="item in typeList" :key="item.id" :label="item.name" :value="item.id" />
  25. </el-select>
  26. <el-select v-model="tableObj.getDataParameters.parammaps.dimension" @change="change_dimension" filterable placeholder="维度" class="filter-item" style="width: 120px;" >
  27. <el-option v-for="item in dimensionList" :key="item.id" :label="item.name" :value="item.id" />
  28. </el-select>
  29. <!-- <el-select v-model="tableObj.getDataParameters.parammaps.mixture" multiple placeholder="混料数据">
  30. <el-option v-for="item in mixtureList" :key="item.id" :label="item.name" :value="item.id" ></el-option>
  31. </el-select>
  32. <el-select v-model="tableObj.getDataParameters.parammaps.spread" multiple placeholder="撒料数据">
  33. <el-option v-for="item in spreadList" :key="item.id" :label="item.name" :value="item.id" ></el-option>
  34. </el-select> -->
  35. <el-cascader style = "width:400px;" ref = "cascader1" v-model="tableObj.getDataParameters.parammaps.mixture" :options="mixtureList" :props = "{ multiple: true, emitPath: false,}" :show-all-levels="false" @change="change_cascader1"></el-cascader>
  36. <el-cascader style = "width:400px;" ref = "cascader2" v-model="tableObj.getDataParameters.parammaps.spread" :options="spreadList" :props = "{ multiple: true, emitPath: false,}" :show-all-levels="false" @change="change_cascader2"></el-cascader>
  37. <el-button class="successBorder" @click="form_search">查询</el-button>
  38. <el-button class="successBorder" @click="form_clear">重置</el-button>
  39. </div>
  40. <div class="operation">
  41. <el-button class="success" icon="el-icon-plus" @click="form_add_screening">添加筛选条件</el-button>
  42. <el-button class="danger" icon="el-icon-delete" @click="form_clear_screening">清空筛选条件</el-button>
  43. </div>
  44. <div v-if="screeningVisible">
  45. <div class="search">
  46. <el-select v-model="screeningObj.screeningCondition" filterable placeholder="筛选条件" class="filter-item" style="width: 120px;" clearable @change="change_screening">
  47. <el-option v-for="item in screeningList" :key="item.id" :label="item.name" :value="item.id" />
  48. </el-select>
  49. <el-input v-model="screeningObj.screeningField" placeholder="筛选字段" style="width: 180px;" class="filter-item" clearable />
  50. <el-select v-model="screeningObj.screeningField" placeholder="筛选字段">
  51. <el-option v-for="item in screeningFieldList1" :key="item.id" :label="item.name" :value="item.id" ></el-option>
  52. </el-select>
  53. <el-select v-model="screeningObj.screeningField" placeholder="筛选字段">
  54. <el-option v-for="item in screeningFieldList2" :key="item.id" :label="item.name" :value="item.id" ></el-option>
  55. </el-select>
  56. <el-date-picker v-model="screeningObj.inputDatetime" class="inputDatetime filter-item" type="daterange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" style="width: 250px;" />
  57. <el-button class="successBorder" @click="form_search_screening">查询</el-button>
  58. <el-button class="successBorder" @click="form_cancel_screening">重置</el-button>
  59. </div>
  60. <div>
  61. <el-row :gutter="20">
  62. <el-col :span="6" v-for = "(item,index) in screeningArr">
  63. <span style="font-size:14px;color:#555">{{index+1}}、条件:{{item.txt}}</span>
  64. </el-col>
  65. </el-row>
  66. </div>
  67. </div>
  68. <div class="table">
  69. <el-table
  70. :key="tableObj.tableKey"
  71. v-loading="tableObj.listLoading"
  72. element-loading-text="给我一点时间"
  73. :data="tableObj.list"
  74. border
  75. fit
  76. highlight-current-row
  77. style="width: 100%;"
  78. :row-style="rowStyle"
  79. :cell-style="cellStyle"
  80. class="elTable table-fixed"
  81. >
  82. <el-table-column type="selection" align="center" width="50" />
  83. <el-table-column label="序号" align="center" type="index" width="50px">
  84. <template slot-scope="scope">
  85. <span v-if="tableObj.pageNum">{{ scope.$index + (tableObj.pageNum-1) * tableObj.pageSize + 1 }}</span>
  86. <span v-else>1</span>
  87. </template>
  88. </el-table-column>
  89. <el-table-column label="分日日期/维度" min-width="130px" align="center">
  90. <template slot-scope="scope">
  91. <span>{{ scope.row.drivername }}</span>
  92. </template>
  93. </el-table-column>
  94. <el-table-column label="混料数据" min-width="130px" align="center">
  95. <el-table-column label="理论重量" min-width="130px" align="center">
  96. <template slot-scope="scope">
  97. <span>{{ scope.row.drivercode }}</span>
  98. </template>
  99. </el-table-column>
  100. <el-table-column label="实际重量" min-width="130px" align="center">
  101. <template slot-scope="scope">
  102. <span>{{ scope.row.drivercode }}</span>
  103. </template>
  104. </el-table-column>
  105. <el-table-column label="误差值" min-width="130px" align="center">
  106. <template slot-scope="scope">
  107. <span>{{ scope.row.drivercode }}</span>
  108. </template>
  109. </el-table-column>
  110. </el-table-column>
  111. <el-table-column label="混料数据" min-width="130px" align="center">
  112. <el-table-column label="理论重量" min-width="130px" align="center">
  113. <template slot-scope="scope">
  114. <span>{{ scope.row.drivercode }}</span>
  115. </template>
  116. </el-table-column>
  117. <el-table-column label="实际重量" min-width="130px" align="center">
  118. <template slot-scope="scope">
  119. <span>{{ scope.row.drivercode }}</span>
  120. </template>
  121. </el-table-column>
  122. <el-table-column label="误差值" min-width="130px" align="center">
  123. <template slot-scope="scope">
  124. <span>{{ scope.row.drivercode }}</span>
  125. </template>
  126. </el-table-column>
  127. </el-table-column>
  128. </el-table>
  129. <pagination v-show="tableObj.total>0" :total="tableObj.total" :page.sync="tableObj.getDataParameters.offset" :limit.sync="tableObj.getDataParameters.pagecount" @pagination="getList" />
  130. </div>
  131. <div>
  132. <!-- <div style = "">
  133. <el-select v-model="tableObj.getDataParameters.parammaps.dateType" multiple placeholder="维度">
  134. <el-option v-for="item in fieldTypeList" :key="item.id" :label="item.name" :value="item.id" ></el-option>
  135. </el-select>
  136. </div> -->
  137. <div id="chartLine" style="width:100%;height:385px;" >
  138. </div>
  139. </div>
  140. </el-col>
  141. <el-col :span="6">
  142. <div class="chart-style-panel">
  143. <el-form label-position="top" size="mini">
  144. <el-form-item label="图表类型">
  145. <div class="chart-type-list">
  146. <!-- <span v-for="item in chartTypeList" :key="item.type" :class="{activedIcon :item.type===chartType, disabledIcon: !isUsable(item)}" @click="switchChartType(item)">
  147. <el-tooltip :content="item.name +': '+item.matchRule.desc" placement="top">
  148. <svg-icon class="icon" :icon-class="isUsable(item)? item.icon : (item.icon + '_disabled')" />
  149. </el-tooltip>
  150. </span> -->
  151. <span @click="switch_chart_type(item)" v-for="item in chartTypeList" style = "display:inline-block;height:30px;width:30px;margin-right:10px;margin-bottom:10px">
  152. <el-tooltip :content="item.desc" placement="top">
  153. <svg-icon class="icon" style="height:20px;width:20px" :icon-class="item.isUse? item.icon : (item.icon + '_disabled')" />
  154. </el-tooltip>
  155. </span>
  156. <!-- <el-tooltip content="1" placement="top">
  157. <svg-icon class="icon" style="height:100px;width:100px" icon-class="chart_line_disabled" />
  158. </el-tooltip> -->
  159. </div>
  160. </el-form-item>
  161. </el-form>
  162. </div>
  163. </el-col>
  164. </el-row>
  165. </div>
  166. </template>
  167. <script>
  168. import echarts from 'echarts'
  169. import draggable from 'vuedraggable'
  170. require('echarts/theme/macarons')
  171. import { GetDataByName, PostDataByName, failproccess, ExecDataByConfig, checkButtons } from '@/api/common'
  172. import Cookies from 'js-cookie'
  173. import Pagination from '@/components/Pagination'
  174. import { MessageBox } from 'element-ui'
  175. export default {
  176. name: 'ChartPanel2',
  177. components: { Pagination, draggable },
  178. data() {
  179. return {
  180. chartType:'line',
  181. chartTypeList:[
  182. // {type:'table', desc:"表格:任意维度数据" ,icon:'chart_table',isUse:true,id:0},
  183. {type:'line', desc:"折线图:任意维度数据" ,icon:'chart_line',isUse:false,id:0},
  184. {type:'bar', desc:"柱状图:任意维度数据" ,icon:'chart_bar',isUse:false,id:1},
  185. {type:'horizontal_bar', desc:"条形图:任意维度数据" ,icon:'horizontal_bar',isUse:false,id:2},
  186. {type:'pie', desc:"饼图:任意维度数据" ,icon:'chart_pie',isUse:false,id:3},
  187. {type:'line_bar', desc:"线柱图:任意维度数据" ,icon:'linebar_chart',isUse:false,id:4},
  188. ],
  189. isRoleEdit: [],
  190. dateTypeList: [
  191. { id: '汇总', name: '汇总' },
  192. { id: '分日', name: '分日' }
  193. ],
  194. typeList: [
  195. { id: '车次', name: '车次' },
  196. { id: '栏舍', name: '栏舍' }
  197. ],
  198. dimensionList: [
  199. { id: '栏舍', name: '栏舍' },
  200. { id: '配方', name: '配方' },
  201. { id: '班次', name: '班次' },
  202. { id: '车次', name: '车次' },
  203. { id: 'TMR', name: 'TMR' },
  204. { id: '牲畜大类', name: '牲畜大类' },
  205. { id: '牲畜小类', name: '牲畜小类' }
  206. ],
  207. //混料数据
  208. mixtureList: [],
  209. //撒料数据
  210. spreadList: [],
  211. //车次 - 数据1 - 栏舍 - 理论重量、实际重量、误差值、允许误差数、准确率(平均)、是否超出误差
  212. mixtureSpreadArr1: [
  213. {
  214. value: '理论重量',label: '理论重量',
  215. children: [
  216. { value: '理论重量-合计', label: '理论重量-合计'},
  217. { value: '理论重量-平均', label: '理论重量-平均'},
  218. { value: '理论重量-最大值', label: '理论重量-最大值'},
  219. { value: '理论重量-最小值', label: '理论重量-最小值'},
  220. { value: '理论重量-标准差', label: '理论重量-标准差'},
  221. { value: '理论重量-变异系数', label: '理论重量-变异系数'},
  222. ]
  223. },
  224. {
  225. value: '实际重量',label: '实际重量',
  226. children: [
  227. { value: '实际重量-合计', label: '实际重量-合计'},
  228. { value: '实际重量-平均', label: '实际重量-平均'},
  229. { value: '实际重量-最大值', label: '实际重量-最大值'},
  230. { value: '实际重量-最小值', label: '实际重量-最小值'},
  231. { value: '实际重量-标准差', label: '实际重量-标准差'},
  232. { value: '实际重量-变异系数', label: '实际重量-变异系数'},
  233. ]
  234. },
  235. {
  236. value: '误差值',label: '误差值',
  237. children: [
  238. { value: '误差值-合计', label: '误差值-合计'},
  239. { value: '误差值-平均', label: '误差值-平均'},
  240. { value: '误差值-最大值', label: '误差值-最大值'},
  241. { value: '误差值-最小值', label: '误差值-最小值'},
  242. { value: '误差值-标准差', label: '误差值-标准差'},
  243. { value: '误差值-变异系数', label: '误差值-变异系数'},
  244. ]
  245. },
  246. {
  247. value: '允许误差数',label: '允许误差数',
  248. children: [
  249. { value: '允许误差数-合计', label: '允许误差数-合计'},
  250. { value: '允许误差数-平均', label: '允许误差数-平均'},
  251. { value: '允许误差数-最大值', label: '允许误差数-最大值'},
  252. { value: '允许误差数-最小值', label: '允许误差数-最小值'},
  253. { value: '允许误差数-标准差', label: '允许误差数-标准差'},
  254. { value: '允许误差数-变异系数', label: '允许误差数-变异系数'},
  255. ]
  256. },
  257. { value: '准确率-平均',label: '准确率-平均'},
  258. { value: '是否超出误差',label: '是否超出误差'}
  259. ],
  260. //车次 - 数据2 - 配方 - 理论重量、实际重量、误差值、准确率(平均)
  261. mixtureSpreadArr2: [
  262. {
  263. value: '理论重量',label: '理论重量',
  264. children: [
  265. { value: '理论重量-合计', label: '理论重量-合计'},
  266. { value: '理论重量-平均', label: '理论重量-平均'},
  267. { value: '理论重量-最大值', label: '理论重量-最大值'},
  268. { value: '理论重量-最小值', label: '理论重量-最小值'},
  269. { value: '理论重量-标准差', label: '理论重量-标准差'},
  270. { value: '理论重量-变异系数', label: '理论重量-变异系数'},
  271. ]
  272. },
  273. {
  274. value: '实际重量',label: '实际重量',
  275. children: [
  276. { value: '实际重量-合计', label: '实际重量-合计'},
  277. { value: '实际重量-平均', label: '实际重量-平均'},
  278. { value: '实际重量-最大值', label: '实际重量-最大值'},
  279. { value: '实际重量-最小值', label: '实际重量-最小值'},
  280. { value: '实际重量-标准差', label: '实际重量-标准差'},
  281. { value: '实际重量-变异系数', label: '实际重量-变异系数'},
  282. ]
  283. },
  284. {
  285. value: '误差值',label: '误差值',
  286. children: [
  287. { value: '误差值-合计', label: '误差值-合计'},
  288. { value: '误差值-平均', label: '误差值-平均'},
  289. { value: '误差值-最大值', label: '误差值-最大值'},
  290. { value: '误差值-最小值', label: '误差值-最小值'},
  291. { value: '误差值-标准差', label: '误差值-标准差'},
  292. { value: '误差值-变异系数', label: '误差值-变异系数'},
  293. ]
  294. },
  295. { value: '准确率-平均',label: '准确率-平均'}
  296. ],
  297. //车次 - 数据3 - 班次 - 理论重量、实际重量、误差值、准确率(平均)、开始重量、结束重量
  298. mixtureSpreadArr3: [
  299. {
  300. value: '理论重量',label: '理论重量',
  301. children: [
  302. { value: '理论重量-合计', label: '理论重量-合计'},
  303. { value: '理论重量-平均', label: '理论重量-平均'},
  304. { value: '理论重量-最大值', label: '理论重量-最大值'},
  305. { value: '理论重量-最小值', label: '理论重量-最小值'},
  306. { value: '理论重量-标准差', label: '理论重量-标准差'},
  307. { value: '理论重量-变异系数', label: '理论重量-变异系数'},
  308. ]
  309. },
  310. {
  311. value: '实际重量',label: '实际重量',
  312. children: [
  313. { value: '实际重量-合计', label: '实际重量-合计'},
  314. { value: '实际重量-平均', label: '实际重量-平均'},
  315. { value: '实际重量-最大值', label: '实际重量-最大值'},
  316. { value: '实际重量-最小值', label: '实际重量-最小值'},
  317. { value: '实际重量-标准差', label: '实际重量-标准差'},
  318. { value: '实际重量-变异系数', label: '实际重量-变异系数'},
  319. ]
  320. },
  321. {
  322. value: '误差值',label: '误差值',
  323. children: [
  324. { value: '误差值-合计', label: '误差值-合计'},
  325. { value: '误差值-平均', label: '误差值-平均'},
  326. { value: '误差值-最大值', label: '误差值-最大值'},
  327. { value: '误差值-最小值', label: '误差值-最小值'},
  328. { value: '误差值-标准差', label: '误差值-标准差'},
  329. { value: '误差值-变异系数', label: '误差值-变异系数'},
  330. ]
  331. },
  332. { value: '准确率-平均',label: '准确率-平均'},
  333. {
  334. value: '开始重量',label: '开始重量',
  335. children: [
  336. { value: '开始重量-合计', label: '开始重量-合计'},
  337. { value: '开始重量-平均', label: '开始重量-平均'},
  338. { value: '开始重量-最大值', label: '开始重量-最大值'},
  339. { value: '开始重量-最小值', label: '开始重量-最小值'},
  340. { value: '开始重量-标准差', label: '开始重量-标准差'},
  341. { value: '开始重量-变异系数', label: '开始重量-变异系数'},
  342. ]
  343. },
  344. {
  345. value: '结束重量',label: '结束重量',
  346. children: [
  347. { value: '结束重量-合计', label: '结束重量-合计'},
  348. { value: '结束重量-平均', label: '结束重量-平均'},
  349. { value: '结束重量-最大值', label: '结束重量-最大值'},
  350. { value: '结束重量-最小值', label: '结束重量-最小值'},
  351. { value: '结束重量-标准差', label: '结束重量-标准差'},
  352. { value: '结束重量-变异系数', label: '结束重量-变异系数'},
  353. ]
  354. }
  355. ],
  356. //车次 - 数据4 - 车次 - 理论重量、实际重量、误差值、准确率(平均)、跳转方式、开始重量、结束重量、计划时间、开始时间、结束时间、过程时间
  357. mixtureSpreadArr4: [
  358. {
  359. value: '理论重量',label: '理论重量',
  360. children: [
  361. { value: '理论重量-合计', label: '理论重量-合计'},
  362. { value: '理论重量-平均', label: '理论重量-平均'},
  363. { value: '理论重量-最大值', label: '理论重量-最大值'},
  364. { value: '理论重量-最小值', label: '理论重量-最小值'},
  365. { value: '理论重量-标准差', label: '理论重量-标准差'},
  366. { value: '理论重量-变异系数', label: '理论重量-变异系数'},
  367. ]
  368. },
  369. {
  370. value: '实际重量',label: '实际重量',
  371. children: [
  372. { value: '实际重量-合计', label: '实际重量-合计'},
  373. { value: '实际重量-平均', label: '实际重量-平均'},
  374. { value: '实际重量-最大值', label: '实际重量-最大值'},
  375. { value: '实际重量-最小值', label: '实际重量-最小值'},
  376. { value: '实际重量-标准差', label: '实际重量-标准差'},
  377. { value: '实际重量-变异系数', label: '实际重量-变异系数'},
  378. ]
  379. },
  380. {
  381. value: '误差值',label: '误差值',
  382. children: [
  383. { value: '误差值-合计', label: '误差值-合计'},
  384. { value: '误差值-平均', label: '误差值-平均'},
  385. { value: '误差值-最大值', label: '误差值-最大值'},
  386. { value: '误差值-最小值', label: '误差值-最小值'},
  387. { value: '误差值-标准差', label: '误差值-标准差'},
  388. { value: '误差值-变异系数', label: '误差值-变异系数'},
  389. ]
  390. },
  391. { value: '准确率-平均',label: '准确率-平均'},
  392. { value: '跳转方式',label: '跳转方式'},
  393. {
  394. value: '开始重量',label: '开始重量',
  395. children: [
  396. { value: '开始重量-合计', label: '开始重量-合计'},
  397. { value: '开始重量-平均', label: '开始重量-平均'},
  398. { value: '开始重量-最大值', label: '开始重量-最大值'},
  399. { value: '开始重量-最小值', label: '开始重量-最小值'},
  400. { value: '开始重量-标准差', label: '开始重量-标准差'},
  401. { value: '开始重量-变异系数', label: '开始重量-变异系数'},
  402. ]
  403. },
  404. {
  405. value: '结束重量',label: '结束重量',
  406. children: [
  407. { value: '结束重量-合计', label: '结束重量-合计'},
  408. { value: '结束重量-平均', label: '结束重量-平均'},
  409. { value: '结束重量-最大值', label: '结束重量-最大值'},
  410. { value: '结束重量-最小值', label: '结束重量-最小值'},
  411. { value: '结束重量-标准差', label: '结束重量-标准差'},
  412. { value: '结束重量-变异系数', label: '结束重量-变异系数'},
  413. ]
  414. },
  415. { value: '计划时间',label: '计划时间'},
  416. { value: '开始时间',label: '开始时间'},
  417. { value: '结束时间',label: '结束时间'},
  418. { value: '过程时间',label: '过程时间'},
  419. ],
  420. //车次 - 数据5 - 牲畜大类 - 理论重量、实际重量、误差值、准确率(平均)
  421. //车次 - 数据5 - 牲畜小类 - 理论重量、实际重量、误差值、准确率(平均)
  422. //车次 - 数据5 - TMR - 理论重量、实际重量、误差值、准确率(平均)
  423. mixtureSpreadArr5: [
  424. {
  425. value: '理论重量',label: '理论重量',
  426. children: [
  427. { value: '理论重量-合计', label: '理论重量-合计'},
  428. { value: '理论重量-平均', label: '理论重量-平均'},
  429. { value: '理论重量-最大值', label: '理论重量-最大值'},
  430. { value: '理论重量-最小值', label: '理论重量-最小值'},
  431. { value: '理论重量-标准差', label: '理论重量-标准差'},
  432. { value: '理论重量-变异系数', label: '理论重量-变异系数'},
  433. ]
  434. },
  435. {
  436. value: '实际重量',label: '实际重量',
  437. children: [
  438. { value: '实际重量-合计', label: '实际重量-合计'},
  439. { value: '实际重量-平均', label: '实际重量-平均'},
  440. { value: '实际重量-最大值', label: '实际重量-最大值'},
  441. { value: '实际重量-最小值', label: '实际重量-最小值'},
  442. { value: '实际重量-标准差', label: '实际重量-标准差'},
  443. { value: '实际重量-变异系数', label: '实际重量-变异系数'},
  444. ]
  445. },
  446. {
  447. value: '误差值',label: '误差值',
  448. children: [
  449. { value: '误差值-合计', label: '误差值-合计'},
  450. { value: '误差值-平均', label: '误差值-平均'},
  451. { value: '误差值-最大值', label: '误差值-最大值'},
  452. { value: '误差值-最小值', label: '误差值-最小值'},
  453. { value: '误差值-标准差', label: '误差值-标准差'},
  454. { value: '误差值-变异系数', label: '误差值-变异系数'},
  455. ]
  456. },
  457. { value: '准确率-平均',label: '准确率-平均'}
  458. ],
  459. mixScreenArr:[],
  460. spreadScreenArr:[],
  461. screeningVisible:true,
  462. // 筛选条件
  463. screeningList: [
  464. // { id: '配方名称', name: '配方名称' },
  465. // { id: 'TMR名称', name: 'TMR名称' },
  466. // { id: '班次', name: '班次' },
  467. // { id: '车次计划', name: '车次计划' },
  468. ],
  469. // 筛选条件 - 参数
  470. screeningObj:{
  471. screeningCondition: '',
  472. screeningField: '',
  473. inputDatetime: '',
  474. startTime: '',
  475. stopTime: '',
  476. },
  477. // 筛选条件 - 参数
  478. screeningArr:[
  479. ],
  480. screeningFieldList1:[
  481. { id: '是', name: '是' },
  482. { id: '否', name: '否' }
  483. ],
  484. screeningFieldList2:[
  485. { id: '自动', name: '自动' },
  486. { id: '手动', name: '手动' }
  487. ],
  488. // 筛选条件 - 结果
  489. fieldTypeList: [
  490. { id: '配方A', name: '配方A' },
  491. { id: '配方B', name: '配方B' }
  492. ],
  493. tableObj: {
  494. getDataParameters: {
  495. name: 'getDriverList',
  496. page: 1,
  497. offset: 1,
  498. pagecount: parseInt(Cookies.get('pageCount')),
  499. returntype: 'Map',
  500. parammaps: {
  501. pastureid: Cookies.get('pastureid'),
  502. dateType:'',
  503. type: '',
  504. dimension: '',
  505. mixture: [],
  506. spread: [],
  507. }
  508. },
  509. tableKey: 0,
  510. list: [],
  511. total: 0,
  512. listLoading: false,
  513. temp: {}
  514. },
  515. chartLine:null,
  516. chartLine_data:{
  517. chartType:'line',
  518. xAxisArr: ['2019-01', '2019-02', '2019-03', '2019-04', '2019-05', '2019-06', '2019-07', '2019-08', '2019-09', '2019-10', '2019-11', '2019-12'],
  519. legendArr: ['数据1', '数据2', '数据3', '数据4', '线条1'],
  520. dataArr:[
  521. [1, 10, 7, 0, 1, 7, 7, 6, 4, 4, 1, 6],
  522. [1, 10, 7, 0, 1, 7, 7, 6, 4, 4, 1, 6],
  523. [1, 10, 7, 0, 1, 7, 7, 6, 4, 4, 1, 6],
  524. [2, 10, 3, 2, 10, 4, 4, 9, 3, 9, 3, 8],
  525. [2, 10, 3, 2, 10, 4, 4, 9, 3, 9, 3, 8]
  526. ]
  527. },
  528. chartLine_data2:{
  529. chartType:'pie',
  530. xAxisArr: ['2019-01', '2019-02', '2019-03', '2019-04', '2019-05', '2019-06', '2019-07', '2019-08', '2019-09', '2019-10', '2019-11', '2019-12'],
  531. legendArr: ['数据1', '数据2', '数据3', '数据4', '线条1'],
  532. dataArr:[1, 10, 7, 0, 1, 7, 7, 6, 4, 4, 1, 6],
  533. },
  534. requestParam: {},
  535. isokDisable: false,
  536. selectList: [],
  537. rowStyle: { maxHeight: 30 + 'px', height: 30 + 'px' },
  538. cellStyle: { padding: 0 + 'px' }
  539. }
  540. },
  541. created() {
  542. // console.log(VUE_APP_BASE_pageCount)
  543. // console.log(this.VUE_APP_BASE_pageCount, 'this.VUE_APP_BASE_pageCount')
  544. // this.getList()
  545. // this.getButtons()
  546. },
  547. methods: {
  548. getButtons() {
  549. const Edit = 'Driver'
  550. const isRoleEdit = checkButtons(JSON.parse(sessionStorage.getItem('buttons')), Edit)
  551. this.isRoleEdit = isRoleEdit
  552. },
  553. getList() {
  554. this.tableObj.listLoading = true
  555. GetDataByName(this.tableObj.getDataParameters).then(response => {
  556. console.log('table数据', response.data.list)
  557. if (response.data.list !== null) {
  558. for (let i = 0; i < response.data.list.length; i++) {
  559. this.$set(response.data.list[i], 'Edit', false) // 编辑
  560. this.$set(response.data.list[i], 'NoEdit', true) // 不可编辑/输入
  561. this.$set(response.data.list[i], 'isCreate', false) // 新增操作
  562. this.$set(response.data.list[i], 'isUpdate', true) // 编辑操作
  563. this.$set(response.data.list[i], 'isUpdateSave', false) // 编辑保存
  564. }
  565. this.tableObj.list = response.data.list
  566. this.tableObj.pageNum = response.data.pageNum
  567. this.tableObj.pageSize = response.data.pageSize
  568. this.tableObj.total = response.data.total
  569. } else {
  570. this.tableObj.list = []
  571. }
  572. setTimeout(() => {
  573. this.tableObj.listLoading = false
  574. }, 100)
  575. })
  576. },
  577. form_search() {
  578. console.log('点击了查询 - 表单 tableObj', this.tableObj.getDataParameters.parammaps)
  579. // this.tableObj.getDataParameters.offset = 1
  580. // this.getList()
  581. console.log('点击了查询 - this.chartLine_data', this.chartLine_data)
  582. this.roadChartLine(this.chartLine_data)
  583. },
  584. form_clear() {
  585. console.log('点击了重置')
  586. // this.tableObj.getDataParameters.parammaps.drivername = ''
  587. // this.tableObj.getDataParameters.parammaps.enable = ''
  588. // this.tableObj.getDataParameters.parammaps.drivercode = ''
  589. // this.tableObj.getDataParameters.offset = 1
  590. //this.getList()
  591. },
  592. //查询 - 汇总/分日
  593. change_date_type(value) {
  594. console.log('查询日期', value)
  595. },
  596. //维度
  597. change_dimension(value) {
  598. console.log('维度', value)
  599. this.tableObj.getDataParameters.parammaps.mixture = []
  600. this.tableObj.getDataParameters.parammaps.spread = []
  601. if(value == "栏舍"){
  602. this.mixtureList = this.mixtureSpreadArr1
  603. this.spreadList = this.mixtureSpreadArr1
  604. } else if(value == "配方"){
  605. this.mixtureList = this.mixtureSpreadArr2
  606. this.spreadList = this.mixtureSpreadArr2
  607. } else if(value == "班次"){
  608. this.mixtureList = this.mixtureSpreadArr3
  609. this.spreadList = this.mixtureSpreadArr3
  610. } else if(value == "车次"){
  611. this.mixtureList = this.mixtureSpreadArr4
  612. this.spreadList = this.mixtureSpreadArr4
  613. } else if(value == "牲畜大类" || value == "牲畜小类" || value == "TMR"){
  614. this.mixtureList = this.mixtureSpreadArr5
  615. this.spreadList = this.mixtureSpreadArr5
  616. }
  617. },
  618. //级联选择 - 混料数据
  619. change_cascader1(value) {
  620. console.log('级联选择 - 混料数据', value)
  621. var allNode = this.$refs['cascader1'].getCheckedNodes()
  622. console.log("级联选择 - 混料数据的Node", allNode)
  623. var mixScreenArr = []
  624. value.forEach(function(i){
  625. allNode.forEach(function(j){
  626. if(i == j.value){
  627. mixScreenArr.push({name: "混料-"+j.label, id:j.value})
  628. }
  629. })
  630. })
  631. // allNode.forEach(function(item){
  632. // if(item.children.length == 0){
  633. // mixScreenArr.push({name: "混料-"+item.label, id:item.value})
  634. // }
  635. // })
  636. var spreadScreenArr = this.spreadScreenArr
  637. this.mixScreenArr = mixScreenArr
  638. this.screeningList = mixScreenArr.concat(spreadScreenArr)
  639. },
  640. //级联选择 - 撒料数据
  641. change_cascader2(value) {
  642. console.log('级联选择 - 撒料数据', value)
  643. var allNode2 = this.$refs['cascader2'].getCheckedNodes()
  644. console.log("级联选择 - 撒料数据的Node", allNode2)
  645. var spreadScreenArr = []
  646. value.forEach(function(i){
  647. allNode2.forEach(function(j){
  648. if(i == j.value){
  649. spreadScreenArr.push({name: "撒料-"+j.label, id:j.value})
  650. }
  651. })
  652. })
  653. // allNode2.forEach(function(item){
  654. // if(item.children.length == 0){
  655. // spreadScreenArr.push({name: "撒料-"+item.label, id:item.value})
  656. // }
  657. // })
  658. var mixScreenArr = this.mixScreenArr
  659. this.spreadScreenArr = spreadScreenArr
  660. this.screeningList = mixScreenArr.concat(spreadScreenArr)
  661. },
  662. change_screening(value) {
  663. console.log('筛选', value)
  664. console.log('筛选数组', this.screeningList)
  665. },
  666. handleCreate() {
  667. // this.resetRequestParam()
  668. // this.dialogStatus = 'create'
  669. // this.parent = this.parentmenu
  670. // this.screeningVisible = true
  671. // this.$nextTick(() => {
  672. // this.$refs['dataForm'].clearValidate()
  673. // this.$refs.name.focus()
  674. // })
  675. },
  676. form_search_screening() {
  677. console.log('点击了筛选条件 - 确认 - screeningObj',this.screeningObj)
  678. var screeningCondition = this.screeningObj.screeningCondition
  679. var screeningField = this.screeningObj.screeningField
  680. var txt = { txt: screeningCondition + screeningField}
  681. console.log(txt)
  682. this.screeningArr.push(txt)
  683. },
  684. form_add_screening() {
  685. console.log('点击了查询')
  686. this.tableObj.getDataParameters.offset = 1
  687. this.getList()
  688. },
  689. form_clear_screening() {
  690. console.log('点击了查询')
  691. this.tableObj.getDataParameters.offset = 1
  692. this.getList()
  693. },
  694. form_cancel_screening() {
  695. console.log('点击了查询')
  696. this.tableObj.getDataParameters.offset = 1
  697. this.getList()
  698. },
  699. roadChartLine(chartLine_data) {
  700. console.log(1111111111)
  701. if (this.chartLine != null) {
  702. this.chartLine.dispose()
  703. }
  704. this.chartLine = echarts.init(document.getElementById('chartLine'))
  705. var option_line = {
  706. title: { text: 'Stacked Line' },
  707. tooltip: { trigger: 'axis' },
  708. legend: { data:chartLine_data.legendArr, right: 10, show: true, type: 'scroll' },
  709. grid: { top: '15%', left: '8%', right: '8%', containLabel: true },
  710. xAxis: [{ type: 'category',data:chartLine_data.xAxisArr }],
  711. yAxis: [
  712. {type: 'value', name: 'kg'},
  713. ],
  714. series: function (e) {
  715. var serie = [];
  716. for (var i = 0; i < chartLine_data.xAxisArr.length; i++) {
  717. console.log(i)
  718. var item = {
  719. name: chartLine_data.legendArr[i],
  720. data: chartLine_data.dataArr[i],
  721. type: 'line',
  722. emphasis: { label: { show: true, position: 'inside' } },
  723. }
  724. serie.push(item);
  725. }
  726. console.log(serie)
  727. return serie;
  728. }()
  729. // series: [
  730. // {
  731. // name: 'Email',
  732. // type: 'line',
  733. // stack: 'Total',
  734. // data: [120, 132, 101, 134, 90, 230, 210]
  735. // },
  736. // {
  737. // name: 'Union Ads',
  738. // type: 'line',
  739. // stack: 'Total',
  740. // data: [220, 182, 191, 234, 290, 330, 310]
  741. // },
  742. // {
  743. // name: 'Video Ads',
  744. // type: 'line',
  745. // stack: 'Total',
  746. // data: [150, 232, 201, 154, 190, 330, 410]
  747. // },
  748. // {
  749. // name: 'Direct',
  750. // type: 'line',
  751. // stack: 'Total',
  752. // data: [320, 332, 301, 334, 390, 330, 320]
  753. // },
  754. // {
  755. // name: 'Search Engine',
  756. // type: 'line',
  757. // stack: 'Total',
  758. // data: [820, 932, 901, 934, 1290, 1330, 1320]
  759. // }
  760. // ]
  761. }
  762. var option_bar = {
  763. title: { text: 'Stacked Line' },
  764. tooltip: { trigger: 'axis' },
  765. legend: { data:chartLine_data.legendArr, right: 10, show: true, type: 'scroll' },
  766. grid: { top: '15%', left: '8%', right: '8%', containLabel: true },
  767. xAxis: [{ type: 'category',data:chartLine_data.xAxisArr }],
  768. yAxis: [
  769. {type: 'value', name: 'kg'},
  770. ],
  771. series: function (e) {
  772. var serie = [];
  773. for (var i = 0; i < chartLine_data.xAxisArr.length; i++) {
  774. console.log(i)
  775. var item = {
  776. name: chartLine_data.legendArr[i],
  777. data: chartLine_data.dataArr[i],
  778. type: 'bar',
  779. emphasis: { label: { show: true, position: 'inside' } },
  780. }
  781. serie.push(item);
  782. }
  783. console.log(serie)
  784. return serie;
  785. }()
  786. }
  787. var option_horizontal_bar = {
  788. title: { text: 'Stacked Line' },
  789. tooltip: { trigger: 'axis' },
  790. legend: { data:chartLine_data.legendArr, right: 10, show: true, type: 'scroll' },
  791. grid: { top: '15%', left: '8%', right: '8%', containLabel: true },
  792. xAxis: {type: 'value', name: 'kg'},
  793. yAxis: [
  794. { type: 'category',data:chartLine_data.xAxisArr }
  795. ],
  796. series: function (e) {
  797. var serie = [];
  798. for (var i = 0; i < chartLine_data.xAxisArr.length; i++) {
  799. console.log(i)
  800. var item = {
  801. name: chartLine_data.legendArr[i],
  802. data: chartLine_data.dataArr[i],
  803. type: 'bar',
  804. emphasis: { label: { show: true, position: 'inside' } },
  805. }
  806. serie.push(item);
  807. }
  808. console.log(serie)
  809. return serie;
  810. }()
  811. }
  812. var option_pie = {
  813. title: { text: 'Stacked Line' },
  814. tooltip: { trigger: 'axis' },
  815. legend: { data:chartLine_data.legendArr, right: 10, show: true, },
  816. grid: { top: '15%', left: '8%', right: '8%', containLabel: true },
  817. xAxis: [{ type: 'category',data:chartLine_data.xAxisArr }],
  818. yAxis: [
  819. {type: 'value', name: 'kg'},
  820. ],
  821. series: function (e) {
  822. var serie = [
  823. {
  824. name: 'Access From',
  825. type: 'pie',
  826. radius: '50%',
  827. data: [
  828. // { value: 1048, name: 'Search Engine' },
  829. // { value: 735, name: 'Direct' },
  830. // { value: 580, name: 'Email' },
  831. // { value: 484, name: 'Union Ads' },
  832. // { value: 300, name: 'Video Ads' }
  833. ],
  834. emphasis: {
  835. itemStyle: {
  836. shadowBlur: 10,
  837. shadowOffsetX: 0,
  838. shadowColor: 'rgba(0, 0, 0, 0.5)'
  839. }
  840. }
  841. }
  842. ];
  843. for (var i = 0; i < chartLine_data.xAxisArr.length; i++) {
  844. console.log(i)
  845. var item = {
  846. name: chartLine_data.legendArr[i],
  847. value: chartLine_data.dataArr[i],
  848. }
  849. serie[0].data.push(item);
  850. }
  851. console.log(serie)
  852. return serie;
  853. }()
  854. }
  855. if(chartLine_data.chartType == 'line'){
  856. this.chartLine.setOption(option_line)
  857. } else if(chartLine_data.chartType == 'bar'){
  858. this.chartLine.setOption(option_bar)
  859. } else if(chartLine_data.chartType == 'horizontal_bar'){
  860. this.chartLine.setOption(option_horizontal_bar)
  861. } else if(chartLine_data.chartType == 'pie'){
  862. this.chartLine.setOption(option_pie)
  863. }
  864. window.onresize = function() {
  865. this.chartLine.resize()
  866. }
  867. },
  868. //切换图表类型
  869. switch_chart_type(item){
  870. console.log(item)
  871. console.log(this.chartTypeList)
  872. var chartTypeList = this.chartTypeList
  873. chartTypeList.forEach(function(i){
  874. i.isUse = false
  875. })
  876. chartTypeList[item.id].isUse = true
  877. this.chartType = item.type
  878. this.chartTypeList = chartTypeList
  879. if(item.type == 'line'){
  880. this.chartLine_data.chartType = 'line'
  881. this.roadChartLine(this.chartLine_data)
  882. } else if(item.type == 'bar'){
  883. this.chartLine_data.chartType = 'bar'
  884. this.roadChartLine(this.chartLine_data)
  885. } else if(item.type == 'horizontal_bar'){
  886. this.chartLine_data.chartType = 'horizontal_bar'
  887. this.roadChartLine(this.chartLine_data)
  888. } else if(item.type == 'pie'){
  889. this.chartLine_data2.chartType = 'pie'
  890. this.roadChartLine(this.chartLine_data2)
  891. }
  892. }
  893. }
  894. }
  895. </script>
  896. <style lang="scss" scoped>
  897. .search{margin-top:10px;}
  898. .table{margin-top:10px;}
  899. </style>