pbentry-add-or-update.vue 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431
  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: 1,
  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. // periodId: [
  186. // { required: true, message: '栏期不能为空', trigger: 'blur' }
  187. // ],
  188. healthStatus: [
  189. { required: true, message: '健康状态不能为空', trigger: 'blur' }
  190. ],
  191. outFenceStatus: [
  192. { required: true, message: '健康状态不能为空', trigger: 'blur' }
  193. ],
  194. sex: [
  195. { required: true, message: '性别不能为空', trigger: 'blur' }
  196. ],
  197. weight: [
  198. { required: true, message: '体重不能为空', trigger: 'blur' }
  199. ]
  200. },
  201. gender: [
  202. {
  203. value: '公',
  204. label: '公'
  205. },
  206. {
  207. value: '母',
  208. label: '母'
  209. }
  210. ],
  211. pigstyList: [], // 栋舍List
  212. unitList: [], // 单元List
  213. unitSelectedList: [], // 单元SelectedList
  214. // periodList: [], // 栏期List
  215. // periodSelectedList: [], // 栏期SelectedList
  216. healthStatus: [
  217. {
  218. value: 1,
  219. label: '健康'
  220. },
  221. {
  222. value: 0,
  223. label: '不健康'
  224. }
  225. ],
  226. breedList: [], // 品种List
  227. originPlaceList: [], // 产地List
  228. outFenceStatus: [
  229. {
  230. value: 0,
  231. label: '育肥'
  232. },
  233. {
  234. value: 1,
  235. label: '出栏'
  236. }
  237. ]
  238. }
  239. },
  240. methods: {
  241. // 在pbentry.vue调用该方法
  242. init (pigs) {
  243. this.visible = true
  244. this.dataForm.id = ''
  245. this.$nextTick(() => {
  246. this.$refs['dataForm'].resetFields()
  247. if (pigs.length > 0) {
  248. console.log(pigs);
  249. let ids = []
  250. let eartags = []
  251. pigs.forEach(pig => {
  252. ids.push(pig.id)
  253. eartags.push(pig.eartag)
  254. })
  255. this.dataForm.id = ids.join()
  256. this.dataForm.eartag = eartags.join()
  257. }
  258. })
  259. if (pigs.length) {
  260. this.$http({
  261. url: this.$http.adornUrl(`/management/yearpigbase/info/${pigs[0].id}`),
  262. method: "get",
  263. params: this.$http.adornParams({})
  264. }).then(({data}) => {
  265. // this.dataForm.id = pigs.map(item => item.id)
  266. // this.dataForm.eartag = pigs.eartag.join()
  267. this.dataForm.pigstyId = data.yearPigBase.pigstyId
  268. this.dataForm.unitId = data.yearPigBase.unitId
  269. // this.dataForm.periodId = data.yearPigBase.periodId
  270. this.dataForm.sex = data.yearPigBase.sex
  271. this.dataForm.birthday = data.yearPigBase.birthday
  272. this.dataForm.healthStatus = data.yearPigBase.healthStatus
  273. this.dataForm.weight = data.yearPigBase.weight
  274. // this.dataForm.originPlace = data.yearPigBase.originPlace
  275. this.dataForm.breed = data.yearPigBase.breed
  276. this.dataForm.outFenceStatus = data.yearPigBase.outFenceStatus
  277. this.dataForm.motherEartag = data.yearPigBase.motherEartag
  278. this.dataForm.fatherEartag = data.yearPigBase.fatherEartag
  279. })
  280. }
  281. this.$http({
  282. url: this.$http.adornUrl("/management/pigsty/findAll"),
  283. method: "get",
  284. params: this.$http.adornParams({})
  285. }).then(async({ data }) => {
  286. // 栋舍List
  287. this.pigstyList = []
  288. let pigstyList = []
  289. data.all && (pigstyList = data.all)
  290. pigstyList.forEach(pigsty => {
  291. let item = {
  292. value: pigsty.id,
  293. label: pigsty.number
  294. }
  295. this.pigstyList.push(item)
  296. })
  297. // 单元List
  298. this.unitList = []
  299. let unitList = []
  300. let unitR = await this.$http({
  301. url: this.$http.adornUrl("/management/unit/findAll"),
  302. method: "get",
  303. params: this.$http.adornParams({})
  304. })
  305. unitR.data.all && (unitList = unitR.data.all)
  306. unitList.forEach(unit => {
  307. let item = {
  308. value: unit.id,
  309. label: unit.number,
  310. pigstyId: unit.pigstyId,
  311. // farmId: unit.farmId
  312. }
  313. this.unitList.push(item)
  314. })
  315. this.unitSelectedList = this.dataForm.pigstyId? this.unitList.filter(item => item.pigstyId === this.dataForm.pigstyId): this.unitList
  316. // 品种list
  317. let breedList = []
  318. let bloodR = await this.$http({
  319. url: this.$http.adornUrl(`/management/basebloodline/findAll`),
  320. method: 'get',
  321. params: this.$http.adornParams({}, false)
  322. })
  323. bloodR.data.all && (breedList = bloodR.data.all)
  324. this.breedList = []
  325. // this.originPlaceList = []
  326. breedList.forEach(breed => {
  327. let item = {
  328. value: breed.name,
  329. label: breed.name,
  330. origin: breed.origin
  331. }
  332. // let item02 = {
  333. // value: breed.origin,
  334. // label: breed.origin
  335. // }
  336. this.breedList.push(item)
  337. // this.originPlaceList.push(item02)
  338. })
  339. })
  340. },
  341. // // 根据栋舍选择限制单元和栏期
  342. // pigstyChange (val) {
  343. // this.unitSelectedList = this.unitList.filter(item => item.pigstyId === val)
  344. // console.log(this.unitSelectedList);
  345. // // this.periodSelectedList = this.periodList.filter(item => item.pigstyId === val)
  346. // },
  347. // 需要先选择猪舍,才能选择单元或栏期
  348. // ifPigsty (val) {
  349. // if (!this.dataForm.pigstyId) {
  350. // this.$message.error('请先选择猪舍')
  351. // this.dataForm[val] = ''
  352. // }
  353. // },
  354. // 表单提交
  355. dataFormSubmit () {
  356. this.$refs['dataForm'].validate((valid) => {
  357. if (valid) {
  358. this.$http({
  359. url: this.$http.adornUrl(`${!this.dataForm.id ?'/management/yearpigbase/batchLairage': '/management/yearpigbase/update'}`),
  360. method: 'post',
  361. data: this.$http.adornData({
  362. 'id': this.dataForm.id || undefined,
  363. 'eartag': this.dataForm.eartag,
  364. 'farmId': parseInt(this.$cookie.get('formFarmId')),
  365. 'pigstyId': this.dataForm.pigstyId,
  366. 'unitId': this.dataForm.unitId,
  367. // 'periodId': this.dataForm.periodId,
  368. 'sex': this.dataForm.sex || undefined,
  369. 'birthday': this.dataForm.birthday || undefined,
  370. 'healthStatus': this.dataForm.healthStatus,
  371. 'weight': this.dataForm.weight,
  372. 'originPlace': this.dataForm.breed? (this.breedList.filter(item => item.value === this.dataForm.breed))[0].origin: undefined,
  373. 'breed': this.dataForm.breed || undefined,
  374. 'outFenceStatus': this.dataForm.outFenceStatus,
  375. 'motherEartag': this.dataForm.motherEartag || undefined,
  376. 'fatherEartag': this.dataForm.fatherEartag || undefined
  377. })
  378. }).then(({data}) => {
  379. if (data && data.code === 0) {
  380. this.visible = false
  381. let addLength = this.dataForm.eartag.split(',').length
  382. this.$emit('refreshDataList', `${!this.dataForm.id? 'add-' + addLength: ''}`)
  383. this.$message({
  384. message: '操作成功',
  385. type: 'success',
  386. duration: 1500,
  387. // onClose: () => {
  388. // this.visible = false
  389. // this.$emit('refreshDataList')
  390. // }
  391. })
  392. // this.resetForm()
  393. this.visible = false
  394. } else {
  395. this.$message.error(data.msg)
  396. }
  397. })
  398. }
  399. })
  400. },
  401. // 获取出生日期
  402. changeBirth(val) {
  403. let birth = new Date(val);
  404. let now = new Date();
  405. let days = now.getTime() - birth.getTime();
  406. if (days < 0) {
  407. this.$confirm(`出生日期有误`, "提示", {
  408. confirmButtonText: "确定",
  409. cancelButtonText: "取消",
  410. type: "warning",
  411. }).then(() => {
  412. this.dataForm.birthday = ''
  413. console.log("还没出生呢...");
  414. }).catch(() => {});
  415. }
  416. }
  417. },
  418. watch: {
  419. 'dataForm.pigstyId': {
  420. handler(newValue, oldValue) {
  421. if (oldValue) {
  422. this.dataForm.unitId = ''
  423. // this.dataForm.periodId = ''
  424. }
  425. this.unitSelectedList = this.unitList.filter(item => item.pigstyId === newValue)
  426. }
  427. }
  428. }
  429. }
  430. </script>