FormulaTemplate11.vue 40 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230
  1. <template>
  2. <div>
  3. <el-card class="box-card">
  4. <!-- 搜索区域 -->
  5. <div class="search-bx1">
  6. <el-input v-model="searchData.name" placeholder="配方名称" style="width: 180px;" class="g-mr20 g-mb20" clearable />
  7. <el-select v-model="searchData.calf_category_id" filterable placeholder="犊牛类型" class="g-mr20" style="width: 180px;" clearable>
  8. <el-option v-for="item in calfTypeList" :key="item.id" :label="item.name" :value="item.id" />
  9. </el-select>
  10. <el-input-number v-model="searchData.min_daily_age" style="width:120px;" :controls="false" placeholder="日龄" />
  11. <span style="margin:0px 8px;">至</span>
  12. <el-input-number v-model="searchData.max_daily_age" style="width:120px;" class="g-mr20" :controls="false" placeholder="日龄" />
  13. <el-button type="primary" @click="form_search">搜索</el-button>
  14. <el-button type="primary" @click="form_clear">重置</el-button>
  15. <el-button type="primary" v-if="isButtonEdit" @click="form_add">添加</el-button>
  16. <!-- <el-button type="primary" @click="form_export">导出</el-button> -->
  17. </div>
  18. <!-- 表格 -->
  19. <el-table key="0" :data="tableList" v-loading="tableLoading" element-loading-text="给我一点时间" border fit>
  20. <el-table-column label="序号" width="50px" align="center">
  21. <template slot-scope="scope">
  22. <span>{{ scope.row.id }}</span>
  23. </template>
  24. </el-table-column>
  25. <el-table-column label="配方名称" min-width="150px" align="center">
  26. <template slot-scope="scope">
  27. <span>{{ scope.row.name }}</span>
  28. </template>
  29. </el-table-column>
  30. <el-table-column label="犊牛类型" min-width="150px" align="center">
  31. <template slot-scope="scope">
  32. <span>{{ scope.row.calf_category_name }}</span>
  33. </template>
  34. </el-table-column>
  35. <el-table-column label="适用日龄" min-width="150px" align="center">
  36. <template slot-scope="scope">
  37. <span>{{ }}</span>
  38. </template>
  39. </el-table-column>
  40. <el-table-column label="配方阶段数" min-width="150px" align="center">
  41. <template slot-scope="scope">
  42. <span>{{ }}</span>
  43. </template>
  44. </el-table-column>
  45. <el-table-column label="公犊增重指标(KG/日)" min-width="150px" align="center">
  46. <template slot-scope="scope">
  47. <span>{{ scope.row.male_calf_daily_weight }}</span>
  48. </template>
  49. </el-table-column>
  50. <el-table-column label="母犊增重指标(KG/日)" min-width="150px" align="center">
  51. <template slot-scope="scope">
  52. <span>{{ scope.row.female_calf_daily_weight }}</span>
  53. </template>
  54. </el-table-column>
  55. <el-table-column label="操作" align="center" width="300" class-name="small-padding fixed-width" fixed="right">
  56. <template slot-scope="scope">
  57. <!-- 修改按钮 -->
  58. <el-button type="primary" v-if="isButtonEdit" size="mini" icon="el-icon-edit" @click="form_edit(scope.row)">修改</el-button>
  59. <!-- 删除按钮 -->
  60. <el-button type="danger" v-if="isButtonEdit" size="mini" icon="el-icon-delete" @click="form_delete(scope.row)">删除</el-button>
  61. </template>
  62. </el-table-column>
  63. </el-table>
  64. <!-- 分页区域 -->
  65. <el-pagination @size-change="change_size_page" @current-change="change_current_page" :current-page="searchData.page" :page-sizes="[1,5,10,20,30,50]" :page-size="searchData.page_size" layout="total, prev, pager, next" :total="searchData.total"/>
  66. </el-card>
  67. <!-- 弹窗 新增or修改 -->
  68. <el-dialog :title="addFormTxt[addFormStatus]" :visible.sync="addFormShow" @close="add_dialog_close" width="80%">
  69. <div class="">
  70. <el-form ref="addFormRef" :rules="addFormRules" :model="addForm" label-position="right" label-width="160px" style="width:80%;margin:0 auto 50px">
  71. <el-row :gutter="20">
  72. <el-col :span="12">
  73. <el-form-item label="配方名称:" prop="name">
  74. <el-input v-model="addForm.name" />
  75. </el-form-item>
  76. </el-col>
  77. <el-col :span="12">
  78. <el-form-item label="犊牛类型:" prop="calf_category_id">
  79. <el-select v-model="addForm.calf_category_id" filterable placeholder="请选择" class="filter-item" style="width: 100%;" >
  80. <el-option v-for="item in calfTypeList" :key="item.id" :label="item.name" :value="item.id" />
  81. </el-select>
  82. </el-form-item>
  83. </el-col>
  84. </el-row>
  85. <el-row :gutter="20">
  86. <el-col :span="12">
  87. <el-form-item label="公犊增重指标(KG/日):" prop="male_calf_daily_weight">
  88. <el-input v-model="addForm.male_calf_daily_weight" placeholder="建议填写,用以统计牛只成长达标率" />
  89. </el-form-item>
  90. </el-col>
  91. <el-col :span="12">
  92. <el-form-item label="母犊增重指标(KG/日):" prop="female_calf_daily_weight">
  93. <el-input v-model="addForm.female_calf_daily_weight" placeholder="建议填写,用以统计牛只成长达标率" />
  94. </el-form-item>
  95. </el-col>
  96. </el-row>
  97. <el-row :gutter="20" >
  98. <el-button type="primary" @click="add_step">增加一个阶段</el-button>
  99. <el-button type="primary" @click="feed_proganmme">智能饲喂方案</el-button>
  100. </el-row>
  101. <el-row>
  102. <!-- 表格 -->
  103. <el-table key="0" ref="tableStep" :data="tableListStep" v-loading="tableLoadingStep" element-loading-text="给我一点时间" border fit>
  104. <el-table-column label="阶段" width="50px" align="center">
  105. <template slot-scope="scope">
  106. <span>{{ scope.row.id }}</span>
  107. </template>
  108. </el-table-column>
  109. <el-table-column label="开始日龄" min-width="150px" align="center">
  110. <template slot-scope="scope">
  111. <span>{{ scope.row.start_daily_age }}</span>
  112. </template>
  113. </el-table-column>
  114. <el-table-column label="结束日龄" min-width="150px" align="center">
  115. <template slot-scope="scope">
  116. <span>{{ scope.row.end_daily_age }}</span>
  117. </template>
  118. </el-table-column>
  119. <el-table-column label="饲料类型" min-width="150px" align="center">
  120. <template slot-scope="scope">
  121. <span>{{ scope.row.forage_name }}</span>
  122. </template>
  123. </el-table-column>
  124. <el-table-column label="日饲喂量(kg)" min-width="150px" align="center">
  125. <template slot-scope="scope">
  126. <span>{{ scope.row.daily_feed_number }}</span>
  127. </template>
  128. </el-table-column>
  129. <el-table-column label="第一班占比(%)" min-width="150px" align="center" >
  130. <template slot-scope="scope">
  131. <span>{{ scope.row.first_class_ratio }}</span>
  132. </template>
  133. </el-table-column>
  134. <el-table-column label="第二班占比(%)" min-width="150px" align="center" v-if="class_num == 2 || class_num == 3 || class_num == 4">
  135. <template slot-scope="scope">
  136. <span>{{ scope.row.second_class_ratio }}</span>
  137. </template>
  138. </el-table-column>
  139. <el-table-column label="第三班占比(%)" min-width="150px" align="center" v-if=" class_num == 3 || class_num == 4">
  140. <template slot-scope="scope">
  141. <span>{{ scope.row.third_class_ratio }}</span>
  142. </template>
  143. </el-table-column>
  144. <el-table-column label="第四班占比(%)" min-width="150px" align="center" v-if=" class_num == 4">
  145. <template slot-scope="scope">
  146. <span>{{ scope.row.fourth_class_ratio }}</span>
  147. </template>
  148. </el-table-column>
  149. <el-table-column label="班次允许误差(kg)" min-width="150px" align="center">
  150. <template slot-scope="scope">
  151. <span>{{ scope.row.allow_class_error }}</span>
  152. </template>
  153. </el-table-column>
  154. <el-table-column label="饲喂温度℃" min-width="150px" align="center">
  155. <template slot-scope="scope">
  156. <span>{{ scope.row.feed_temp }}</span>
  157. </template>
  158. </el-table-column>
  159. <el-table-column label="允许温差℃" min-width="150px" align="center">
  160. <template slot-scope="scope">
  161. <span>{{ scope.row.allow_temp_error }}</span>
  162. </template>
  163. </el-table-column>
  164. <el-table-column label="操作" align="center" width="300" class-name="small-padding fixed-width" fixed="right">
  165. <template slot-scope="scope">
  166. <!-- 修改按钮 -->
  167. <el-button type="primary" v-if="isButtonEdit" size="mini" icon="el-icon-edit" @click="edit_step(scope.$index, scope.row)">修改</el-button>
  168. <!-- 删除按钮 -->
  169. <el-button type="danger" v-if="isButtonEdit" size="mini" icon="el-icon-delete" @click="delete_step(scope.$index, scope.row)">删除</el-button>
  170. </template>
  171. </el-table-column>
  172. </el-table>
  173. </el-row>
  174. <el-row>
  175. <div id="chartLine4"  style="width: 100%;height:360px;"></div>
  176. </el-row>
  177. </el-form>
  178. <div slot="footer" class="dialog-footer">
  179. <el-button type="primary" @click="addFormStatus==='create'?add_dialog_save():edit_dialog_save()">确认</el-button>
  180. <el-button @click="addFormShow = false">关闭</el-button>
  181. </div>
  182. </div>
  183. </el-dialog>
  184. <!-- 弹窗 新增or修改 阶段 -->
  185. <el-dialog :title="addFormTxtStep[addFormStatusStep]" :visible.sync="addFormShowStep" @close="add_step_close" width="80%">
  186. <div class="">
  187. <el-form ref="addFormRefStep" :rules="addFormRulesStep" :model="addFormStep" label-position="right" label-width="150px" style="width:80%;margin:0 auto 50px">
  188. <el-row :gutter="20">
  189. <el-col :span="12">
  190. <el-form-item label="阶段:" >
  191. <el-input v-model="addFormStep.id" placeholder="" disabled />
  192. </el-form-item>
  193. </el-col>
  194. </el-row>
  195. <el-row :gutter="20">
  196. <el-col :span="12">
  197. <el-form-item label="开始日龄:" prop="start_daily_age">
  198. <el-input v-model="addFormStep.start_daily_age" placeholder="" />
  199. </el-form-item>
  200. </el-col>
  201. <el-col :span="12">
  202. <el-form-item label="结束日龄:" prop="end_daily_age">
  203. <el-input v-model="addFormStep.end_daily_age" placeholder="" />
  204. </el-form-item>
  205. </el-col>
  206. </el-row>
  207. <el-row :gutter="20">
  208. <el-col :span="12">
  209. <el-form-item label="饲料类型:" prop="forage_id">
  210. <el-select v-model="addFormStep.forage_id" filterable placeholder="请选择" style="width: 100%;" >
  211. <el-option v-for="item in forageList" :key="item.id" :label="item.name" :value="item.id" />
  212. </el-select>
  213. </el-form-item>
  214. </el-col>
  215. <el-col :span="12">
  216. <el-form-item label="日饲喂量(kg):" prop="daily_feed_number">
  217. <el-input v-model="addFormStep.daily_feed_number" placeholder="" />
  218. </el-form-item>
  219. </el-col>
  220. </el-row>
  221. <el-row :gutter="20">
  222. <el-col :span="12">
  223. <el-form-item label="第一班占比(%):" prop="first_class_ratio">
  224. <el-input v-model="addFormStep.first_class_ratio" placeholder="" />
  225. </el-form-item>
  226. </el-col>
  227. <el-col :span="12">
  228. <el-form-item label="第二班占比(%):" prop="second_class_ratio" v-if="class_num == 2 || class_num == 3 || class_num == 4">
  229. <el-input v-model="addFormStep.second_class_ratio" placeholder="" />
  230. </el-form-item>
  231. </el-col>
  232. </el-row>
  233. <el-row :gutter="20">
  234. <el-col :span="12">
  235. <el-form-item label="第三班占比(%):" prop="third_class_ratio" v-if=" class_num == 3 || class_num == 4">
  236. <el-input v-model="addFormStep.third_class_ratio" placeholder="" />
  237. </el-form-item>
  238. </el-col>
  239. <el-col :span="12">
  240. <el-form-item label="第四班占比(%):" prop="fourth_class_ratio" v-if=" class_num == 4">
  241. <el-input v-model="addFormStep.fourth_class_ratio" placeholder="" />
  242. </el-form-item>
  243. </el-col>
  244. </el-row>
  245. <el-row :gutter="20">
  246. <el-col :span="12">
  247. <el-form-item label="饲喂温度℃:" prop="feed_temp">
  248. <el-input v-model="addFormStep.feed_temp" placeholder="" />
  249. </el-form-item>
  250. </el-col>
  251. <el-col :span="12">
  252. <el-form-item label="允许温差℃:" prop="allow_temp_error">
  253. <el-input v-model="addFormStep.allow_temp_error" placeholder="" />
  254. </el-form-item>
  255. </el-col>
  256. </el-row>
  257. <el-row :gutter="20">
  258. <el-col :span="12">
  259. <el-form-item label="班次允许误差(kg):" prop="allow_class_error">
  260. <el-input v-model="addFormStep.allow_class_error" placeholder="" />
  261. </el-form-item>
  262. </el-col>
  263. <el-col :span="12">
  264. </el-col>
  265. </el-row>
  266. </el-form>
  267. <div slot="footer" class="dialog-footer">
  268. <el-button type="primary" @click="addFormStatusStep==='create'?add_step_save():edit_step_save()">确认</el-button>
  269. <el-button @click="addFormShowStep = false">关闭</el-button>
  270. </div>
  271. </div>
  272. </el-dialog>
  273. <!-- 弹窗 智能方案 -->
  274. <el-dialog title="智能方案" :visible.sync="feedFormShow" @close="add_feed_close" width="80%">
  275. <div class="">
  276. <el-form ref="feedFormStatus" :model="feedForm" label-position="right" label-width="150px" style="width:80%;margin:0 auto 50px">
  277. <el-row :gutter="20" >
  278. <h4> 通过简单设置,系统将根据算法自动生成犊牛整个饲喂阶段的日饲喂量。 </h4>
  279. <h4> 注:只需设置起始、截止以及任意一个中间日龄(中间阶段的日龄可自行添加,添加越多算法越精准,至少设置1个中间日龄的饲喂量) </h4>
  280. </el-row>
  281. <el-row :gutter="20" >
  282. <el-button type="primary" @click="add_middle_day">增加中间日龄</el-button>
  283. </el-row>
  284. <el-row>
  285. <!-- 表格 -->
  286. <el-table key="0" ref="tableFeed" :data="tableListFeed" element-loading-text="给我一点时间" border fit>
  287. <el-table-column label="内容" min-width="150px" align="center">
  288. <template slot-scope="scope">
  289. <span>{{ scope.row.name }}</span>
  290. </template>
  291. </el-table-column>
  292. <el-table-column label="日龄" min-width="100px" align="center">
  293. <template slot-scope="scope">
  294. <el-input v-model="scope.row.daynumber" type="number" step="0.01" style="width:95%;padding:10px 0;" />
  295. </template>
  296. </el-table-column>
  297. <el-table-column label="饲喂量" min-width="100px" align="center">
  298. <template slot-scope="scope">
  299. <el-input v-model="scope.row.daykg" type="number" step="0.01" style="width:95%;padding:10px 0;" />
  300. </template>
  301. </el-table-column>
  302. <el-table-column label="操作" align="center" min-width="200px" fixed="right">
  303. <template slot-scope="scope">
  304. <!-- 删除按钮 -->
  305. <el-button type="danger" size="mini" icon="el-icon-delete" @click="delete_middle_day(scope.$index, scope.row)">删除</el-button>
  306. </template>
  307. </el-table-column>
  308. </el-table>
  309. </el-row>
  310. </el-form>
  311. <div slot="footer" class="dialog-footer">
  312. <el-button type="primary" @click="addFormStatusStep==='create'?add_feed_save():edit_step_save()">生产饲喂方案</el-button>
  313. <el-button @click="feedFormShow = false">关闭</el-button>
  314. </div>
  315. </div>
  316. </el-dialog>
  317. </div>
  318. </template>
  319. <script>
  320. import { ajaxDataGet, ajaxDataPost, ajaxDataPut, ajaxDataDelete, checkButtons} from '@/api/common'
  321. import { parseTime, json2excel } from '@/utils/index.js'
  322. import * as echarts from 'echarts';
  323. export default {
  324. data() {
  325. return {
  326. //接口 - 获取 - 表格
  327. url_get_table:'/api/v1/ops/formula_plan/formula/list',
  328. //接口 - 新增 - 表格
  329. url_add_table:'/api/v1/ops/formula_plan/formula/add',
  330. //接口 - 修改 - 表格
  331. url_edit_table:'/api/v1/ops/formula_plan/formula/update',
  332. //接口 - 删除 - 表格
  333. url_delete_table:'/api/v1/ops/formula_plan/formula',
  334. //接口 - 下拉框 列表
  335. url_get_select1:'/api/v1/ops/calf_feed/enum/list',
  336. //接口 - 下拉框 列表 栏舍组
  337. url_get_select2:'/api/v1/ops/barn_group/list?page=1&page_size=1000',
  338. //按钮权限
  339. isButtonEdit:false,
  340. //获取 - 表格数据 - 参数
  341. searchData:{
  342. calf_code: "",
  343. barn_name: "",
  344. mother_code: "",
  345. calf_category_id:undefined,
  346. genders: undefined,
  347. status: undefined,
  348. min_daily_weight_gain: undefined,
  349. max_daily_weight_gain: undefined,
  350. min_daily_age: undefined,
  351. max_daily_age: undefined,
  352. page: 1, //页码
  353. page_size: 10, //每页数量
  354. total:0, //总页数
  355. pastureId: ""
  356. },
  357. tableLoading: false,
  358. //表格内容
  359. tableList:[
  360. // { username:"admin", id:100, date:'2023-12-01',email:'测试信息1123',roleList:[2,3] },
  361. // { username:"epans", id:200, date:'2023-12-01',email:'测试信息1123',roleList:[] },
  362. // { username:"derek", id:300, date:'2023-12-01',email:'测试信息1123' },
  363. // { username:"admin", id:100, date:'2023-12-01',email:'测试信息1123' },
  364. // { username:"epans", id:200, date:'2023-12-01',email:'测试信息1123' },
  365. // { username:"derek", id:300, date:'2023-12-01',email:'测试信息1123' },
  366. // { username:"admin", id:100, date:'2023-12-01',email:'测试信息1123' },
  367. // { username:"epans", id:200, date:'2023-12-01',email:'测试信息1123' },
  368. // { username:"derek", id:300, date:'2023-12-01',email:'测试信息1123' },
  369. // { username:"admin", id:100, date:'2023-12-01',email:'测试信息1123' },
  370. // { username:"epans", id:200, date:'2023-12-01',email:'测试信息1123' },
  371. // { username:"derek", id:300, date:'2023-12-01',email:'测试信息1123' },
  372. ],
  373. //栏舍状态
  374. statusList:[
  375. {id: 1, value: '正常'},
  376. {id: 2, value: '空栏'},
  377. {id: 3, value: '损坏'},
  378. ],
  379. //犊牛类型
  380. calfTypeList:[
  381. ],
  382. //栏舍
  383. cowsheList:[
  384. ],
  385. //饲料
  386. forageList:[
  387. ],
  388. sexList:[
  389. {id: 1, value: '公'},
  390. {id: 2, value: '母'},
  391. ],
  392. addFormShow:false,
  393. addFormStatus: '',
  394. addFormTxt: { edit: '修改', create: '新增' },
  395. addForm:{
  396. name:'',id:'' ,calf_category_id:undefined, male_calf_daily_weight:undefined, female_calf_daily_weight:undefined,
  397. },
  398. addFormRules:{
  399. name: [ { required: true, message: '配方名称必填', trigger: 'blur' }, ],
  400. calf_category_id: [ { required: true, message: '犊牛类型必填', trigger: 'blur' }, ],
  401. },
  402. stepIndex:undefined,
  403. tableLoadingStep: false,
  404. //表格内容
  405. tableListStep:[
  406. ],
  407. addFormShowStep:false,
  408. addFormStatusStep: '',
  409. addFormTxtStep: { edit: '修改', create: '新增' },
  410. addFormStep:{
  411. name:'',id:'' , start_daily_age:undefined,end_daily_age:undefined,forage_id:undefined,forage_name:'',daily_feed_number:undefined,first_class_ratio:undefined,second_class_ratio:undefined,third_class_ratio:undefined,fourth_class_ratio:undefined,allow_class_error:undefined,feed_temp:undefined,feed_temp:undefined,allow_temp_error:undefined,
  412. },
  413. addFormRulesStep:{
  414. // name: [
  415. // { required: true, message: '类型必填', trigger: 'blur' },
  416. // ],
  417. },
  418. chart4: {
  419. getdataListParm: {
  420. name: 'cowSumOfFarm',
  421. page: 1,offset: 1,pagecount: '',returntype: 'Map',
  422. parammaps: { cityName: 'ALL' }
  423. }
  424. },
  425. //图表实例
  426. chartLine4: null,
  427. //图表数据
  428. chartLine4_data: {
  429. month: ['1','3','5','6','11','12','14','15','40'],
  430. num1: [2, 4, 6, 8, 2, 3, 4, 6, 8],
  431. num2: [3, 5, 7, 9, 1, 3, 5, 7, 8],
  432. },
  433. feedFormShow:false,
  434. feedFormStatus: '',
  435. feedFormTxt: { edit: '修改', create: '新增' },
  436. feedForm:{
  437. name:'',id:'' , daily_feed_number:undefined,first_class_ratio:undefined,second_class_ratio:undefined,third_class_ratio:undefined,fourth_class_ratio:undefined,allow_class_error:undefined
  438. },
  439. tableListFeed:[
  440. {name:'起始日龄',daynumber:0,daykg:0,},
  441. {name:'截止日龄',daynumber:0,daykg:0,},
  442. ],
  443. }
  444. },
  445. mounted() {
  446. },
  447. created(){
  448. //获取按钮权限
  449. const isButtonEdit = checkButtons(this.$store.state.buttonsList, "日龄饲喂模板编辑")
  450. this.isButtonEdit = isButtonEdit
  451. console.log('this.isButtonEdit==========',this.isButtonEdit)
  452. var me = this
  453. //获取下拉框
  454. this.get_select_list1()
  455. //表格 - 初始化
  456. setTimeout(function () {
  457. me.get_table_data()
  458. }, 1000);
  459. // this.get_table_data()
  460. },
  461. methods:{
  462. //获取 下拉框
  463. get_select_list1(){
  464. var me = this
  465. ajaxDataPost('/api/v1/ops/base_setting/calf_type/list?page=1&page_size=1000', {name:"" }).then(e => {
  466. console.log("穿梭框1:",e)
  467. //打印请求成功结果
  468. if(e.data.list == null || e.data.list == undefined ||e.data.list.length == 0 ){
  469. me.calfTypeList = []
  470. } else {
  471. me.calfTypeList = e.data.list
  472. }
  473. })
  474. ajaxDataPost('/api/v1/ops/barn/list?page=1&page_size=1000', {name:"",barn_group_name:"",status:undefined}).then(e => {
  475. console.log("穿梭框1:",e)
  476. //打印请求成功结果
  477. if(e.data.list == null || e.data.list == undefined ||e.data.list.length == 0 ){
  478. me.cowsheList = []
  479. } else {
  480. me.cowsheList = e.data.list
  481. }
  482. })
  483. ajaxDataGet('/api/v1/ops/base_setting/forage/list?page=1&page_size=1000', { }).then(e => {
  484. console.log("饲料下拉框1:",e)
  485. //打印请求成功结果
  486. if(e.data.list == null || e.data.list == undefined ||e.data.list.length == 0 ){
  487. me.forageList = []
  488. } else {
  489. me.forageList = e.data.list
  490. }
  491. })
  492. // 班次数量下拉框
  493. ajaxDataGet('/api/v1/ops/calf_feed/enum/list').then(e => {
  494. console.log(e)
  495. if(e.code === 200){
  496. var class_num = e.data.class_list.length
  497. } else {
  498. var class_num = 4
  499. }
  500. console.log("class_num========",class_num)
  501. me.class_num = class_num
  502. })
  503. },
  504. //获取 表格
  505. get_table_data() {
  506. var me = this
  507. me.tableLoading = true
  508. console.log("searchData======>", me.searchData)
  509. if( me.searchData.calf_category_id == ""){
  510. me.searchData.calf_category_id = undefined
  511. }
  512. var send_url = me.url_get_table + '?page=' + me.searchData.page + '&page_size=' + me.searchData.page_size
  513. ajaxDataPost(send_url, me.searchData).then(e => {
  514. console.log("表格请求结果:",e)
  515. //打印请求成功结果
  516. if(e.code == 200 ){
  517. me.tableList = e.data.list
  518. me.searchData.total = e.data.total; // 总数
  519. me.searchData.page = e.data.page; //页码
  520. me.searchData.page_size = e.data.page_size; //每页数量
  521. } else {
  522. me.$message({ type: 'error', message: '请求表格列表失败!' + e.msg, duration: 2000 })
  523. }
  524. setTimeout(() => {
  525. me.tableLoading = false
  526. }, 100)
  527. })
  528. },
  529. //搜索 查询表格
  530. form_search(){
  531. var me = this
  532. console.log('请求表格列表searchData',me.searchData)
  533. me.get_table_data()
  534. },
  535. //重置 表格
  536. form_clear(){
  537. var me = this
  538. me.searchData.calf_code = ""
  539. me.searchData.barn_name = ""
  540. me.searchData.mother_code = ""
  541. me.searchData.calf_category_id = undefined
  542. me.searchData.genders = undefined
  543. me.searchData.status = undefined
  544. me.searchData.min_daily_weight_gain = undefined
  545. me.searchData.max_daily_weight_gain = undefined
  546. me.searchData.min_daily_age = undefined
  547. me.searchData.max_daily_age = undefined
  548. me.get_table_data()
  549. },
  550. //监听 page_size 改变的事件
  551. change_size_page(item){
  552. console.log(item)
  553. // this.searchData.page_size = item
  554. // this.getUserList()
  555. },
  556. //监听 page 改变的事件
  557. change_current_page(item){
  558. console.log(item)
  559. this.searchData.page = item
  560. this.get_table_data()
  561. },
  562. //清空弹窗表单信息
  563. reset_form(){
  564. this.addForm.name = ''
  565. this.addForm.id = undefined
  566. this.addForm.calf_category_id = undefined
  567. this.addForm.male_calf_daily_weight = undefined
  568. this.addForm.female_calf_daily_weight = undefined
  569. this.addForm.number = ''
  570. this.tableListStep = []
  571. },
  572. //新增
  573. form_add() {
  574. this.reset_form()
  575. this.addFormStatus = 'create'
  576. this.addFormShow = true
  577. this.$nextTick(() => {
  578. this.$refs['addFormRef'].clearValidate()
  579. })
  580. },
  581. //编辑
  582. form_edit(row) {
  583. this.reset_form()
  584. var me = this
  585. console.log('行内容row=========', row)
  586. //编辑行内容赋值
  587. this.addForm = Object.assign({}, row)
  588. if(row.genders == 0){
  589. this.addForm.genders = undefined
  590. }
  591. me.tableListStep = row.formula_stage
  592. this.addFormStatus = 'edit'
  593. this.addFormShow = true
  594. this.$nextTick(() => {
  595. this.$refs['addFormRef'].clearValidate()
  596. //加载 - 图表假数据
  597. this.roadchartLine4(this.chartLine4_data)
  598. })
  599. },
  600. //新增关闭
  601. add_dialog_close(){
  602. //内容重置
  603. this.$refs['addFormRef'].resetFields()
  604. },
  605. //新增 保存
  606. add_dialog_save() {
  607. var me = this
  608. this.$refs['addFormRef'].validate(valid => {
  609. //验证成功
  610. if (valid) {
  611. //发起请求
  612. var send_data = {
  613. "name": me.addForm.name,
  614. "calf_category_id": me.addForm.calf_category_id,
  615. "calf_category_name":'11',
  616. "male_calf_daily_weight": parseFloat(me.addForm.male_calf_daily_weight),
  617. "female_calf_daily_weight": parseFloat(me.addForm.female_calf_daily_weight),
  618. "formula_stage": me.tableListStep
  619. }
  620. console.log("弹窗参数:", send_data)
  621. //关闭弹窗
  622. // me.addFormShow = false
  623. //加载 - 发送新增保存
  624. ajaxDataPost(me.url_add_table, send_data).then(e => {
  625. console.log("新增结果:",e)
  626. //打印请求成功结果
  627. if(e.code == 200 ){
  628. me.$message({ type: 'success', message: '新增成功!' , duration: 2000 })
  629. //关闭弹窗
  630. me.addFormShow = false
  631. me.get_table_data()
  632. } else {
  633. me.$message({ type: 'error', message: '新增失败!' + e.msg, duration: 2000 })
  634. }
  635. })
  636. }
  637. })
  638. },
  639. //编辑 保存
  640. edit_dialog_save(){
  641. var me = this
  642. this.$refs['addFormRef'].validate(valid => {
  643. //验证成功
  644. if (valid) {
  645. //发起请求
  646. var send_data = {
  647. "id": me.addForm.id,
  648. "name": me.addForm.name,
  649. "calf_category_id": me.addForm.calf_category_id,
  650. "calf_category_name":'11',
  651. "male_calf_daily_weight": parseFloat(me.addForm.male_calf_daily_weight),
  652. "female_calf_daily_weight": parseFloat(me.addForm.female_calf_daily_weight),
  653. "formula_stage": me.tableListStep
  654. }
  655. // var name = this.barnGroupList.find(obj => obj.id == me.addForm.barn_group_id).name
  656. // console.log(name)
  657. // 编辑保存
  658. console.log("弹窗参数:", send_data)
  659. //关闭弹窗
  660. // me.addFormShow = false
  661. //加载 - 发送新增保存
  662. ajaxDataPut(me.url_edit_table, send_data).then(e => {
  663. console.log("编辑结果:",e)
  664. //打印请求成功结果
  665. if(e.code == 200 ){
  666. me.$message({ type: 'success', message: '编辑成功!' , duration: 2000 })
  667. //关闭弹窗
  668. me.addFormShow = false
  669. me.get_table_data()
  670. } else {
  671. me.$message({ type: 'error', message: '编辑失败!' + e.msg, duration: 2000 })
  672. }
  673. })
  674. }
  675. })
  676. },
  677. form_delete(row) {
  678. var me = this
  679. me.$confirm('是否删除此条内容?', '提示', {
  680. confirmButtonText: '确定',
  681. cancelButtonText: '取消',
  682. type: 'warning'
  683. }).then(() => {
  684. console.log("删除的ID参数:", row.id)
  685. //加载 - 发送新增保存
  686. ajaxDataDelete(me.url_delete_table + '/' +row.id, {}).then(e => {
  687. console.log("编辑结果:",e)
  688. //打印请求成功结果
  689. if(e.code == 200 ){
  690. me.$message({ type: 'success', message: '删除成功!' });
  691. me.get_table_data()
  692. } else {
  693. me.$message({ type: 'error', message: '删除失败!' + e.msg, duration: 2000 })
  694. }
  695. })
  696. }).catch(() => {
  697. me.$message({
  698. type: 'info',
  699. message: '已取消删除'
  700. });
  701. });
  702. },
  703. //清空弹窗表单信息
  704. reset_step(){
  705. this.addFormStep.name = ''
  706. this.addFormStep.start_daily_age = undefined
  707. this.addFormStep.end_daily_age = undefined
  708. this.addFormStep.forage_id = undefined
  709. this.addFormStep.forage_name=""
  710. this.addFormStep.daily_feed_number = undefined
  711. this.addFormStep.first_class_ratio = undefined
  712. this.addFormStep.second_class_ratio = undefined
  713. this.addFormStep.third_class_ratio = undefined
  714. this.addFormStep.fourth_class_ratio = undefined
  715. this.addFormStep.allow_class_error = undefined
  716. this.addFormStep.feed_temp = undefined
  717. this.addFormStep.allow_temp_error = undefined
  718. },
  719. //新增
  720. add_step() {
  721. this.reset_step()
  722. this.addFormStatusStep = 'create'
  723. this.addFormStep.id = this.tableListStep.length + 1
  724. this.addFormShowStep = true
  725. this.$nextTick(() => {
  726. this.$refs['addFormRefStep'].clearValidate()
  727. })
  728. },
  729. feed_proganmme() {
  730. this.feedFormShow = true
  731. this.$nextTick(() => {
  732. })
  733. },
  734. add_feed_close(){
  735. //内容重置
  736. this.feedFormShow = false
  737. },
  738. add_middle_day() {
  739. var tableListFeed = this.tableListFeed
  740. console.log(tableListFeed)
  741. var add_row = {name:'中间阶段',daynumber:0,daykg:0,}
  742. this.tableListFeed.splice(1,0,add_row)
  743. },
  744. delete_middle_day(index,row) {
  745. var me = this
  746. console.log(index)
  747. console.log(row)
  748. var lastIndex = this.tableListFeed.length - 1
  749. if(index == 0){
  750. me.$message({ type: 'error', message: '不可删除起始日龄!' , duration: 2000 })
  751. } else if (index == lastIndex){
  752. me.$message({ type: 'error', message: '不可删除截止日龄!' , duration: 2000 })
  753. } else {
  754. me.tableListFeed.splice(index,1)
  755. }
  756. },
  757. //编辑
  758. edit_step(index, row) {
  759. this.stepIndex = index
  760. console.log('行内容row=========', row)
  761. //编辑行内容赋值
  762. this.addFormStep = Object.assign({}, row)
  763. if(row.forage_id == 0){
  764. this.addFormStep.forage_id = undefined
  765. }
  766. this.addFormStatusStep = 'edit'
  767. this.addFormShowStep = true
  768. this.$nextTick(() => {
  769. this.$refs['addFormRefStep'].clearValidate()
  770. })
  771. },
  772. //新增关闭
  773. add_step_close(){
  774. //内容重置
  775. this.$refs['addFormRefStep'].resetFields()
  776. this.reset_step()
  777. this.addFormShowStep = false
  778. },
  779. //新增 保存
  780. add_step_save() {
  781. var me = this
  782. this.$refs['addFormRefStep'].validate(valid => {
  783. //验证成功
  784. if (valid) {
  785. //发起请求
  786. var forage_name = me.forageList.find(obj => obj.id == me.addFormStep.forage_id).name
  787. var send_data = {
  788. "id": me.addFormStep.id,
  789. "name": me.addFormStep.name,
  790. "start_daily_age":me.addFormStep.start_daily_age,
  791. "end_daily_age":me.addFormStep.end_daily_age,
  792. "forage_id": me.addFormStep.forage_id,
  793. "forage_name": forage_name ,
  794. "daily_feed_number":me.addFormStep.daily_feed_number,
  795. "first_class_ratio": me.addFormStep.first_class_ratio,
  796. "second_class_ratio":me.addFormStep.second_class_ratio,
  797. "third_class_ratio": me.addFormStep.third_class_ratio,
  798. "fourth_class_ratio": me.addFormStep.fourth_class_ratio,
  799. "allow_class_error": me.addFormStep.allow_class_error,
  800. "feed_temp": me.addFormStep.feed_temp,
  801. "allow_temp_error": me.addFormStep.allow_temp_error,
  802. }
  803. console.log("弹窗参数:", send_data)
  804. //关闭弹窗
  805. me.addFormShowStep = false
  806. me.tableListStep.push(send_data)
  807. }
  808. })
  809. },
  810. //编辑 保存
  811. edit_step_save(){
  812. var me = this
  813. this.$refs['addFormRefStep'].validate(valid => {
  814. //验证成功
  815. if (valid) {
  816. var forage_name = me.forageList.find(obj => obj.id == me.addFormStep.forage_id).name
  817. //发起请求
  818. var send_data = {
  819. "id": me.addFormStep.id,
  820. "name": me.addFormStep.name,
  821. "start_daily_age":me.addFormStep.start_daily_age,
  822. "end_daily_age":me.addFormStep.end_daily_age,
  823. "forage_id": me.addFormStep.forage_id,
  824. "forage_name": forage_name ,
  825. "daily_feed_number":me.addFormStep.daily_feed_number,
  826. "first_class_ratio": me.addFormStep.first_class_ratio,
  827. "second_class_ratio":me.addFormStep.second_class_ratio,
  828. "third_class_ratio": me.addFormStep.third_class_ratio,
  829. "fourth_class_ratio": me.addFormStep.fourth_class_ratio,
  830. "allow_class_error": me.addFormStep.allow_class_error,
  831. "feed_temp": me.addFormStep.feed_temp,
  832. "allow_temp_error": me.addFormStep.allow_temp_error,
  833. }
  834. // 编辑保存
  835. console.log("弹窗参数:", send_data)
  836. me.addFormShowStep = false
  837. var stepIndex = me.stepIndex
  838. this.$set(me.tableListStep, stepIndex, send_data)
  839. console.log('me.tableListStep============',me.tableListStep)
  840. }
  841. })
  842. },
  843. delete_step(index, row) {
  844. var me = this
  845. me.$confirm('是否删除此条内容?', '提示', {
  846. confirmButtonText: '确定',
  847. cancelButtonText: '取消',
  848. type: 'warning'
  849. }).then(() => {
  850. console.log('点击了 - 删除一个阶段index===',index,'row===',row)
  851. me.tableListStep.splice(index, 1)
  852. //加载 - 发送新增保存
  853. // ajaxDataDelete(me.url_delete_table + '/' +row.id, {}).then(e => {
  854. // console.log("编辑结果:",e)
  855. // //打印请求成功结果
  856. // if(e.code == 200 ){
  857. // me.$message({ type: 'success', message: '删除成功!' });
  858. // me.get_table_data()
  859. // } else {
  860. // me.$message({ type: 'error', message: '删除失败!' + e.msg, duration: 2000 })
  861. // }
  862. // })
  863. }).catch(() => {
  864. me.$message({
  865. type: 'info',
  866. message: '已取消删除'
  867. });
  868. });
  869. },
  870. //图表数据加载
  871. roadchartLine4(chartLine4_data) {
  872. if (this.chartLine4 != null) {
  873. this.chartLine4.dispose()
  874. }
  875. this.chartLine4 = echarts.init(document.getElementById('chartLine4'))
  876. var option = {
  877. title: { text: '', left: 'center'},
  878. tooltip: { trigger: 'item' },
  879. grid: { show:true,left: "10%", top:'23%', right:'10%', },
  880. color:['#f19610', '#1bff7b' ],
  881. xAxis: [
  882. {
  883. type: 'category',
  884. axisTick: { show: true },
  885. axisLabel: {   interval: 0  ,rotate:0},
  886. axisLine: { LineStyle: {color:'#fff'} },
  887. data: chartLine4_data.month
  888. }
  889. ],
  890. yAxis: [
  891. {
  892. type: 'value',
  893. axisTick: { show: true },
  894. }
  895. ],
  896. series: [
  897. {
  898. name: '奶',type: 'line',
  899. label: {show: true,position: 'inside' },
  900. data: chartLine4_data.num1
  901. },
  902. {
  903. name: '代乳粉',type: 'line',
  904. label: {show: true,position: 'inside' },
  905. data: chartLine4_data.num2
  906. },
  907. ]
  908. }
  909. this.chartLine4.setOption(option)
  910. window.onresize = function () {
  911. this.chartLine4.resize()
  912. }
  913. },
  914. form_export() {
  915. //获取请求表格数据的参数
  916. //this.download.getdataListParm.parammaps = this.tableObj.getdataListParm.parammaps
  917. //请求表格
  918. // GetDataByName(this.download.getdataListParm).then(response => {
  919. // if (response.data.list !== null) {
  920. // this.download.list = response.data.list
  921. // } else {
  922. // this.download.list = []
  923. // }
  924. // var excelDatas = [
  925. // {
  926. // tHeader: ['表头1', '表头2', '表头3', '表头4',],
  927. // filterVal: ['title1', 'title2', 'title3', 'title4'],
  928. // tableDatas: this.download.list,
  929. // sheetName: 'Sheet1'
  930. // }
  931. // ]
  932. // json2excel(excelDatas, '表格大标题', true, 'xlsx')
  933. // })
  934. var excelDatas = [
  935. {
  936. tHeader: ['表头1', '表头2', '表头3', '表头4',],
  937. filterVal: ['title1', 'title2', 'title3', 'title4'],
  938. tableDatas: [
  939. {title1: "内容1",title2: "内容2",title3: "内容3",title4: "内容4"},
  940. {title1: "内容11",title2: "内容22",title3: "内容32",title4: "内容44"},
  941. {title1: "内容111",title2: "内容222",title3: "内容333",title4: "内容444"},
  942. ],
  943. sheetName: 'Sheet1'
  944. }
  945. ]
  946. json2excel(excelDatas, '表格大标题', true, 'xlsx')
  947. }
  948. }
  949. }
  950. </script>
  951. <!-- 加了scoped,则是仅在此组件里生效 -->
  952. <style scoped>
  953. </style>