pbentry-add-or-update.vue 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434
  1. <template>
  2. <el-dialog
  3. :title="!dataForm.id ? '新增' : '修改'"
  4. :close-on-click-modal="false"
  5. :visible.sync="visible"
  6. width="600px">
  7. <el-form
  8. :model="dataForm"
  9. :rules="dataRule"
  10. ref="dataForm"
  11. @keyup.enter.native="dataFormSubmit()"
  12. label-width="80px"
  13. size="mini"
  14. style="margin-left: 20px;width: 500px">
  15. <el-form-item label="耳标" prop="eartag">
  16. <el-input
  17. type="textarea"
  18. :rows="2"
  19. placeholder="每个耳标之间用英文逗号隔开,最多可以添加50头猪"
  20. v-model="dataForm.eartag"
  21. :disabled="dataForm.id? true: false">
  22. </el-input>
  23. </el-form-item>
  24. <el-form-item label="猪舍" prop="pigstyId">
  25. <el-select
  26. v-model="dataForm.pigstyId"
  27. style="width: 100%">
  28. <el-option
  29. v-for="item in pigstyList"
  30. :key="item.value"
  31. :label="item.label"
  32. :value="item.value">
  33. </el-option>
  34. </el-select>
  35. </el-form-item>
  36. <el-form-item label="单元" prop="unitId">
  37. <el-select
  38. v-model="dataForm.unitId"
  39. style="width: 100%">
  40. <el-option
  41. v-for="item in unitSelectedList"
  42. :key="item.value"
  43. :label="item.label"
  44. :value="item.value">
  45. </el-option>
  46. </el-select>
  47. </el-form-item>
  48. <!-- <el-form-item label="栏期" prop="periodId">
  49. <el-select
  50. v-model="dataForm.periodId"
  51. style="width: 100%"
  52. @change="ifPigsty('periodId')">
  53. <el-option
  54. v-for="item in periodList"
  55. :key="item.value"
  56. :label="item.label"
  57. :value="item.value">
  58. </el-option>
  59. </el-select>
  60. </el-form-item> -->
  61. <el-form-item label="性别" prop="sex">
  62. <el-select
  63. v-model="dataForm.sex"
  64. style="width: 100%">
  65. <el-option
  66. v-for="item in gender"
  67. :key="item.value"
  68. :label="item.label"
  69. :value="item.value">
  70. </el-option>
  71. </el-select>
  72. </el-form-item>
  73. <el-form-item label="出生日期" prop="birthday">
  74. <el-date-picker
  75. v-model="dataForm.birthday"
  76. type="date"
  77. value-format="yyyy-MM-dd"
  78. placeholder="请选择出生日期"
  79. @change="changeBirth"
  80. style="width: 100%">
  81. </el-date-picker>
  82. </el-form-item>
  83. <el-form-item label="健康状态" prop="healthStatus">
  84. <el-select
  85. v-model="dataForm.healthStatus"
  86. style="width: 100%">
  87. <el-option
  88. v-for="item in healthStatus"
  89. :key="item.value"
  90. :label="item.label"
  91. :value="item.value">
  92. </el-option>
  93. </el-select>
  94. </el-form-item>
  95. <el-form-item label="体重" prop="weight">
  96. <el-input-number
  97. v-model="dataForm.weight"
  98. :step="0.01"
  99. :max="1000000"
  100. :min="0"
  101. style="width: 91%">
  102. </el-input-number>
  103. 千克
  104. </el-form-item>
  105. <!-- <el-form-item label="产地" prop="originPlace">
  106. <el-select
  107. v-model="dataForm.originPlace"
  108. style="width: 100%">
  109. <el-option
  110. v-for="item in originPlaceList"
  111. :key="item.value"
  112. :label="item.label"
  113. :value="item.value">
  114. </el-option>
  115. </el-select>
  116. </el-form-item> -->
  117. <el-form-item label="品种" prop="breed">
  118. <el-select
  119. v-model="dataForm.breed"
  120. style="width: 100%">
  121. <el-option
  122. v-for="item in breedList"
  123. :key="item.value"
  124. :label="item.label"
  125. :value="item.value">
  126. </el-option>
  127. </el-select>
  128. </el-form-item>
  129. <el-form-item label="养殖状态" prop="outFenceStatus">
  130. <el-select
  131. v-model="dataForm.outFenceStatus"
  132. style="width: 100%">
  133. <el-option
  134. v-for="item in outFenceStatus"
  135. :key="item.value"
  136. :label="item.label"
  137. :value="item.value">
  138. </el-option>
  139. </el-select>
  140. </el-form-item>
  141. <el-form-item label="父亲" prop="fatherEartag">
  142. <el-input v-model="dataForm.fatherEartag"></el-input>
  143. </el-form-item>
  144. <el-form-item label="母亲" prop="motherEartag">
  145. <el-input v-model="dataForm.motherEartag"></el-input>
  146. </el-form-item>
  147. </el-form>
  148. <span slot="footer" class="dialog-footer">
  149. <el-button size="mini" @click="visible = false">关闭</el-button>
  150. <el-button size="mini" type="primary" @click="dataFormSubmit()">确定</el-button>
  151. </span>
  152. </el-dialog>
  153. </template>
  154. <script>
  155. export default {
  156. data () {
  157. return {
  158. visible: false,
  159. dataForm: {
  160. id: '',
  161. eartag: '',
  162. pigstyId: '',
  163. unitId: '',
  164. // periodId: '',
  165. sex: '母',
  166. birthday: '',
  167. healthStatus: true,
  168. weight: 5,
  169. originPlace: '',
  170. breed: '',
  171. outFenceStatus: 0,
  172. motherEartag: '',
  173. fatherEartag: ''
  174. },
  175. dataRule: {
  176. eartag: [
  177. { required: true, message: '耳标不能为空', trigger: 'blur' }
  178. ],
  179. pigstyId: [
  180. { required: true, message: '栋舍不能为空', trigger: 'blur' }
  181. ],
  182. unitId: [
  183. { required: true, message: '单元不能为空', trigger: 'blur' }
  184. ],
  185. breed: [
  186. { required: true, message: '品种不能为空', trigger: 'blur' }
  187. ],
  188. birthday: [
  189. { required: true, message: '品种不能为空', trigger: 'blur' }
  190. ],
  191. healthStatus: [
  192. { required: true, message: '健康状态不能为空', trigger: 'blur' }
  193. ],
  194. outFenceStatus: [
  195. { required: true, message: '健康状态不能为空', trigger: 'blur' }
  196. ],
  197. sex: [
  198. { required: true, message: '性别不能为空', trigger: 'blur' }
  199. ],
  200. weight: [
  201. { required: true, message: '体重不能为空', trigger: 'blur' }
  202. ]
  203. },
  204. gender: [
  205. {
  206. value: '公',
  207. label: '公'
  208. },
  209. {
  210. value: '母',
  211. label: '母'
  212. }
  213. ],
  214. pigstyList: [], // 栋舍List
  215. unitList: [], // 单元List
  216. unitSelectedList: [], // 单元SelectedList
  217. // periodList: [], // 栏期List
  218. // periodSelectedList: [], // 栏期SelectedList
  219. healthStatus: [
  220. {
  221. value: true,
  222. label: '健康'
  223. },
  224. {
  225. value: false,
  226. label: '不健康'
  227. }
  228. ],
  229. breedList: [], // 品种List
  230. originPlaceList: [], // 产地List
  231. outFenceStatus: [
  232. {
  233. value: 0,
  234. label: '育肥'
  235. },
  236. {
  237. value: 1,
  238. label: '出栏'
  239. }
  240. ]
  241. }
  242. },
  243. methods: {
  244. // 在pbentry.vue调用该方法
  245. init (pigs) {
  246. this.visible = true
  247. this.dataForm.id = ''
  248. this.$nextTick(() => {
  249. this.$refs['dataForm'].resetFields()
  250. if (pigs.length > 0) {
  251. console.log(pigs);
  252. let ids = []
  253. let eartags = []
  254. pigs.forEach(pig => {
  255. ids.push(pig.id)
  256. eartags.push(pig.eartag)
  257. })
  258. this.dataForm.id = ids.join()
  259. this.dataForm.eartag = eartags.join()
  260. }
  261. })
  262. if (pigs.length) {
  263. this.$http({
  264. url: this.$http.adornUrl(`/management/lairagerecord/info/${pigs[0].id}`),
  265. method: "get",
  266. params: this.$http.adornParams({})
  267. }).then(({data}) => {
  268. // this.dataForm.id = pigs.map(item => item.id)
  269. // this.dataForm.eartag = pigs.eartag.join()
  270. this.dataForm.pigstyId = data.lairageRecord.pigstyId
  271. this.dataForm.unitId = data.lairageRecord.unitId
  272. // this.dataForm.periodId = data.yearPigBase.periodId
  273. this.dataForm.sex = data.lairageRecord.sex
  274. this.dataForm.birthday = data.lairageRecord.birthday
  275. this.dataForm.healthStatus = data.lairageRecord.healthStatus
  276. this.dataForm.weight = data.lairageRecord.weight
  277. // this.dataForm.originPlace = data.yearPigBase.originPlace
  278. this.dataForm.breed = data.lairageRecord.breed
  279. this.dataForm.outFenceStatus = data.lairageRecord.outFenceStatus
  280. this.dataForm.motherEartag = data.lairageRecord.motherEartag
  281. this.dataForm.fatherEartag = data.lairageRecord.fatherEartag
  282. })
  283. }
  284. this.$http({
  285. url: this.$http.adornUrl("/management/pigsty/findAll"),
  286. method: "get",
  287. params: this.$http.adornParams({})
  288. }).then(async({ data }) => {
  289. // 栋舍List
  290. this.pigstyList = []
  291. let pigstyList = []
  292. data.all && (pigstyList = data.all)
  293. pigstyList.forEach(pigsty => {
  294. let item = {
  295. value: pigsty.id,
  296. label: pigsty.number
  297. }
  298. this.pigstyList.push(item)
  299. })
  300. // 单元List
  301. this.unitList = []
  302. let unitList = []
  303. let unitR = await this.$http({
  304. url: this.$http.adornUrl("/management/unit/findAll"),
  305. method: "get",
  306. params: this.$http.adornParams({})
  307. })
  308. unitR.data.all && (unitList = unitR.data.all)
  309. unitList.forEach(unit => {
  310. let item = {
  311. value: unit.id,
  312. label: unit.number,
  313. pigstyId: unit.pigstyId,
  314. // farmId: unit.farmId
  315. }
  316. this.unitList.push(item)
  317. })
  318. this.unitSelectedList = this.dataForm.pigstyId? this.unitList.filter(item => item.pigstyId === this.dataForm.pigstyId): this.unitList
  319. // 品种list
  320. let breedList = []
  321. let bloodR = await this.$http({
  322. url: this.$http.adornUrl(`/management/basebloodline/findAll`),
  323. method: 'get',
  324. params: this.$http.adornParams({}, false)
  325. })
  326. bloodR.data.all && (breedList = bloodR.data.all)
  327. this.breedList = []
  328. // this.originPlaceList = []
  329. breedList.forEach(breed => {
  330. let item = {
  331. value: breed.name,
  332. label: breed.name,
  333. origin: breed.origin
  334. }
  335. // let item02 = {
  336. // value: breed.origin,
  337. // label: breed.origin
  338. // }
  339. this.breedList.push(item)
  340. // this.originPlaceList.push(item02)
  341. })
  342. })
  343. },
  344. // // 根据栋舍选择限制单元和栏期
  345. // pigstyChange (val) {
  346. // this.unitSelectedList = this.unitList.filter(item => item.pigstyId === val)
  347. // console.log(this.unitSelectedList);
  348. // // this.periodSelectedList = this.periodList.filter(item => item.pigstyId === val)
  349. // },
  350. // 需要先选择猪舍,才能选择单元或栏期
  351. // ifPigsty (val) {
  352. // if (!this.dataForm.pigstyId) {
  353. // this.$message.error('请先选择猪舍')
  354. // this.dataForm[val] = ''
  355. // }
  356. // },
  357. // 表单提交
  358. dataFormSubmit () {
  359. this.$refs['dataForm'].validate((valid) => {
  360. if (valid) {
  361. this.$http({
  362. url: this.$http.adornUrl(`${!this.dataForm.id ?'/management/lairagerecord/batchLairage': '/management/lairagerecord/update'}`),
  363. method: 'post',
  364. data: this.$http.adornData({
  365. 'id': this.dataForm.id || undefined,
  366. 'eartag': this.dataForm.eartag,
  367. 'farmId': parseInt(this.$cookie.get('formFarmId')),
  368. 'pigstyId': this.dataForm.pigstyId,
  369. 'unitId': this.dataForm.unitId,
  370. // 'periodId': this.dataForm.periodId,
  371. 'sex': this.dataForm.sex || undefined,
  372. 'birthday': this.dataForm.birthday || undefined,
  373. 'healthStatus': this.dataForm.healthStatus,
  374. 'weight': this.dataForm.weight,
  375. 'originPlace': this.dataForm.breed? (this.breedList.filter(item => item.value === this.dataForm.breed))[0].origin: undefined,
  376. 'breed': this.dataForm.breed || undefined,
  377. 'outFenceStatus': this.dataForm.outFenceStatus,
  378. 'motherEartag': this.dataForm.motherEartag || undefined,
  379. 'fatherEartag': this.dataForm.fatherEartag || undefined
  380. })
  381. }).then(({data}) => {
  382. if (data && data.code === 0) {
  383. this.visible = false
  384. let addLength = this.dataForm.eartag.split(',').length
  385. this.$emit('refreshDataList', `${!this.dataForm.id? 'add-' + addLength: ''}`)
  386. this.$message({
  387. message: '操作成功',
  388. type: 'success',
  389. duration: 1500,
  390. // onClose: () => {
  391. // this.visible = false
  392. // this.$emit('refreshDataList')
  393. // }
  394. })
  395. // this.resetForm()
  396. this.visible = false
  397. } else {
  398. this.$message.error(data.msg)
  399. }
  400. })
  401. }
  402. })
  403. },
  404. // 获取出生日期
  405. changeBirth(val) {
  406. let birth = new Date(val);
  407. let now = new Date();
  408. let days = now.getTime() - birth.getTime();
  409. if (days < 0) {
  410. this.$confirm(`出生日期有误`, "提示", {
  411. confirmButtonText: "确定",
  412. cancelButtonText: "取消",
  413. type: "warning",
  414. }).then(() => {
  415. this.dataForm.birthday = ''
  416. console.log("还没出生呢...");
  417. }).catch(() => {});
  418. }
  419. }
  420. },
  421. watch: {
  422. 'dataForm.pigstyId': {
  423. handler(newValue, oldValue) {
  424. if (oldValue) {
  425. this.dataForm.unitId = ''
  426. // this.dataForm.periodId = ''
  427. }
  428. this.unitSelectedList = this.unitList.filter(item => item.pigstyId === newValue)
  429. }
  430. }
  431. }
  432. }
  433. </script>