btransfer.vue 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588
  1. <template>
  2. <div class="mod-role">
  3. <el-container>
  4. <!-- form表单 -->
  5. <el-header>
  6. <div class="rect rect-form">
  7. <el-form :inline="true" :model="form" size="mini" ref="form">
  8. <el-form-item>
  9. <el-input v-model="form.eartag" placeholder="耳标" clearable></el-input>
  10. </el-form-item>
  11. <el-form-item style="width: 140px">
  12. <el-select placeholder="性别" v-model="form.sex">
  13. <el-option
  14. v-for="item in gender"
  15. :key="item.value"
  16. :label="item.label"
  17. :value="item.value">
  18. </el-option>
  19. </el-select>
  20. </el-form-item>
  21. <el-form-item style="width: 140px">
  22. <el-select placeholder="品种" v-model="form.breed">
  23. <el-option
  24. v-for="item in breedList"
  25. :key="item.value"
  26. :label="item.label"
  27. :value="item.value">
  28. </el-option>
  29. </el-select>
  30. </el-form-item>
  31. <el-form-item style="width: 140px">
  32. <el-select placeholder="健康状态" v-model="form.healthStatus">
  33. <el-option
  34. v-for="item in healthStatus"
  35. :key="item.value"
  36. :label="item.label"
  37. :value="item.value">
  38. </el-option>
  39. </el-select>
  40. </el-form-item>
  41. <el-form-item style="width: 140px">
  42. <el-select placeholder="养殖状态" v-model="form.outFenceStatus">
  43. <el-option
  44. v-for="item in outFenceStatus"
  45. :key="item.value"
  46. :label="item.label"
  47. :value="item.value">
  48. </el-option>
  49. </el-select>
  50. </el-form-item>
  51. <el-form-item style="width: 140px">
  52. <el-select
  53. placeholder="猪舍"
  54. v-model="form.pigstyId">
  55. <el-option
  56. v-for="item in pigstyList"
  57. :key="item.value"
  58. :label="item.label"
  59. :value="item.value">
  60. </el-option>
  61. </el-select>
  62. </el-form-item>
  63. <el-form-item style="width: 140px">
  64. <el-select
  65. placeholder="单元"
  66. v-model="form.unitId"
  67. ref="unit"
  68. @focus="selectFocus('unit')">
  69. <el-option
  70. v-for="item in unitSelectedList"
  71. :key="item.value"
  72. :label="item.label"
  73. :value="item.value">
  74. </el-option>
  75. </el-select>
  76. </el-form-item>
  77. <el-form-item style="width: 140px">
  78. <el-select
  79. placeholder="栏期"
  80. v-model="form.periodId"
  81. ref="period"
  82. @focus="selectFocus('period')">
  83. <el-option
  84. v-for="item in periodSelectedList"
  85. :key="item.value"
  86. :label="item.label"
  87. :value="item.value">
  88. </el-option>
  89. </el-select>
  90. </el-form-item>
  91. <el-form-item>
  92. <el-button @click="getDataList()" icon="el-icon-search">查 询</el-button>
  93. </el-form-item>
  94. <el-form-item>
  95. <el-button
  96. icon="el-icon-circle-close"
  97. @click="clearAll">清 空</el-button>
  98. </el-form-item>
  99. </el-form>
  100. </div>
  101. </el-header>
  102. <!-- role表格 -->
  103. <el-main>
  104. <div class="rect rect-table">
  105. <!-- 新增 删除按钮 -->
  106. <el-form inline size="mini">
  107. <!-- <el-form-item>
  108. <el-button
  109. icon="el-icon-refresh"
  110. @click="addOrUpdateHandle()">
  111. 转栏
  112. </el-button>
  113. </el-form-item> -->
  114. <!-- <el-form-item>
  115. <el-button
  116. icon="el-icon-delete"
  117. type="danger"
  118. @click="deleteHandle()"
  119. :disabled="dataListSelections.length <= 0">
  120. 删 除
  121. </el-button>
  122. </el-form-item> -->
  123. <el-form-item>
  124. <el-button
  125. icon="el-icon-refresh"
  126. type="danger"
  127. @click="addOrUpdateHandle()"
  128. :disabled="dataListSelections.length <= 0">
  129. 转 栏
  130. </el-button>
  131. </el-form-item>
  132. </el-form>
  133. <el-table
  134. :data="dataList"
  135. border
  136. stripe
  137. v-loading="dataListLoading"
  138. @selection-change="selectionChangeHandle"
  139. style="width: 100%;"
  140. size="mini"
  141. height="540"
  142. :header-cell-style="{background:'rgb(245,245,245)',color:'#000',height: '45px',fontSize: '13px',fontWeight: 'normal',borderBottom: '1px solid #ccc'}"
  143. :cell-style="{color: '#888',fontSize: '13px'}">
  144. <el-table-column
  145. type="selection"
  146. header-align="center"
  147. align="center"
  148. width="50">
  149. </el-table-column>
  150. <el-table-column
  151. prop="id"
  152. header-align="center"
  153. align="center"
  154. label="id"
  155. width="80">
  156. </el-table-column>
  157. <el-table-column
  158. prop="eartag"
  159. header-align="center"
  160. align="center"
  161. label="耳标">
  162. </el-table-column>
  163. <el-table-column
  164. prop="sex"
  165. header-align="center"
  166. align="center"
  167. label="性别"
  168. width="80">
  169. </el-table-column>
  170. <el-table-column
  171. prop="birthday"
  172. header-align="center"
  173. align="center"
  174. label="出生日期">
  175. </el-table-column>
  176. <el-table-column
  177. header-align="center"
  178. align="center"
  179. label="健康状态"
  180. width="100">
  181. <template slot-scope="scope">
  182. <span>{{scope.row.healthStatus? '健康': '不健康'}}</span>
  183. </template>
  184. </el-table-column>
  185. <el-table-column
  186. header-align="center"
  187. align="center"
  188. label="养殖状态"
  189. width="100">
  190. <template slot-scope="scope">
  191. <span>{{scope.row.outFenceStatus? '出栏': '育肥'}}</span>
  192. </template>
  193. </el-table-column>
  194. <el-table-column
  195. prop="breed"
  196. header-align="center"
  197. align="center"
  198. label="品种"
  199. width="100">
  200. </el-table-column>
  201. <el-table-column
  202. prop="pigstyName"
  203. header-align="center"
  204. align="center"
  205. label="猪舍">
  206. </el-table-column>
  207. <el-table-column
  208. prop="unitName"
  209. header-align="center"
  210. align="center"
  211. label="单元">
  212. </el-table-column>
  213. <el-table-column
  214. prop="periodName"
  215. header-align="center"
  216. align="center"
  217. label="栏期">
  218. </el-table-column>
  219. <el-table-column
  220. fixed="right"
  221. header-align="center"
  222. align="center"
  223. label="操作">
  224. <template slot-scope="scope">
  225. <!-- <el-button
  226. type="text"
  227. size="medium"
  228. style="color: rgb(24,144,255)">
  229. 查看
  230. </el-button> -->
  231. <el-button
  232. type="text"
  233. size="medium"
  234. @click="addOrUpdateHandle(scope.row)"
  235. style="color: rgb(24,144,255)">
  236. 转栏
  237. </el-button>
  238. </template>
  239. </el-table-column>
  240. </el-table>
  241. <el-pagination
  242. @size-change="sizeChangeHandle"
  243. @current-change="currentChangeHandle"
  244. :current-page="pageIndex"
  245. :page-sizes="[10, 20, 50, 100]"
  246. :page-size="pageSize"
  247. :total="totalPage"
  248. layout="total, sizes, prev, pager, next, jumper">
  249. </el-pagination>
  250. <!-- 弹窗, 新增 / 修改 -->
  251. <update v-if="addOrUpdateVisible" ref="addOrUpdate" @refreshDataList="getDataList"></update>
  252. </div>
  253. </el-main>
  254. </el-container>
  255. </div>
  256. </template>
  257. <script>
  258. import Update from './btransfer-update'
  259. export default {
  260. data () {
  261. return {
  262. form: {
  263. eartag: '',
  264. sex: '',
  265. breed: '',
  266. healthStatus: '',
  267. outFenceStatus: '',
  268. periodId: '',
  269. pigstyId: '',
  270. unitId: ''
  271. },
  272. dataList: [],
  273. pageIndex: 1,
  274. pageSize: 10,
  275. totalPage: 0,
  276. dataListLoading: false,
  277. dataListSelections: [],
  278. addOrUpdateVisible: false,
  279. farmId: undefined,
  280. gender: [
  281. {
  282. value: '公',
  283. label: '公'
  284. },
  285. {
  286. value: '母',
  287. label: '母'
  288. }
  289. ],
  290. breedList: [],
  291. healthStatus: [
  292. {
  293. value: 1,
  294. label: '健康'
  295. },
  296. {
  297. value: 0,
  298. label: '不健康'
  299. }
  300. ],
  301. outFenceStatus: [
  302. {
  303. value: 0,
  304. label: '育肥'
  305. },
  306. {
  307. value: 1,
  308. label: '出栏'
  309. }
  310. ],
  311. periodList: [], // 所有栏期
  312. periodSelectedList: [], // 根据栋舍限制的栏期
  313. pigstyList: [], // 所有猪舍
  314. unitList: [], // 所有单元
  315. unitSelectedList: [], // 根据栋舍限制的单元
  316. labelPosition: 'right'
  317. }
  318. },
  319. components: {
  320. Update
  321. },
  322. activated () {
  323. this.getDataList()
  324. },
  325. methods: {
  326. // 获取数据列表
  327. getDataList () {
  328. this.dataListLoading = true
  329. this.$http({
  330. url: this.$http.adornUrl('/management/yearpigbase/list'),
  331. method: 'get',
  332. params: this.$http.adornParams({
  333. 'page': this.pageIndex,
  334. 'limit': this.pageSize,
  335. 'eartag': this.form.eartag || undefined,
  336. 'sex': this.form.sex || undefined,
  337. 'breed': this.form.breed || undefined,
  338. 'healthStatus': this.form.healthStatus || undefined,
  339. 'outFenceStatus': this.form.outFenceStatus || undefined,
  340. 'periodId': this.form.periodId || undefined,
  341. 'pigstyId': this.form.pigstyId || undefined,
  342. 'unitId': this.form.unitId || undefined
  343. })
  344. }).then(async({data}) => {
  345. // 猪舍List
  346. this.pigstyList = []
  347. let pigstyList = []
  348. let pigstyR = await this.$http({
  349. url: this.$http.adornUrl("/management/pigsty/findAll"),
  350. method: "get",
  351. params: this.$http.adornParams({})
  352. })
  353. pigstyR.data.all && (pigstyList = pigstyR.data.all)
  354. pigstyList.forEach(pigsty => {
  355. let item = {
  356. value: pigsty.id,
  357. label: pigsty.number
  358. }
  359. this.pigstyList.push(item)
  360. })
  361. // 单元List
  362. this.unitList = []
  363. let unitList = []
  364. let unitR = await this.$http({
  365. url: this.$http.adornUrl("/management/unit/findAll"),
  366. method: "get",
  367. params: this.$http.adornParams({})
  368. })
  369. unitR.data.all && (unitList = unitR.data.all)
  370. unitList.forEach(unit => {
  371. let item = {
  372. value: unit.id,
  373. label: unit.number,
  374. pigstyId: unit.pigstyId
  375. }
  376. this.unitList.push(item)
  377. })
  378. this.unitSelectedList = this.unitList
  379. // 栏期List
  380. this.periodList = []
  381. let periodList = []
  382. let periodR = await this.$http({
  383. url: this.$http.adornUrl("/management/period/findAll"),
  384. method: "get",
  385. params: this.$http.adornParams({})
  386. })
  387. periodR.data.all && (periodList = periodR.data.all)
  388. periodList.forEach(period => {
  389. let item = {
  390. value: period.id,
  391. label: period.number,
  392. pigstyId: period.pigstyId
  393. }
  394. this.periodList.push(item)
  395. })
  396. this.periodSelectedList = this.periodList
  397. // 品种list
  398. this.breedList = []
  399. let breedList = []
  400. let breedR = await this.$http({
  401. url: this.$http.adornUrl("/management/basebloodline/findAll"),
  402. method: "get",
  403. params: this.$http.adornParams({})
  404. })
  405. breedR.data.all && (breedList = breedR.data.all)
  406. breedList.forEach(breed => {
  407. let item = {
  408. value: breed.name,
  409. label: breed.name
  410. }
  411. this.breedList.push(item)
  412. })
  413. this.periodSelectedList = this.form.pigstyId? this.periodList.filter(item => item.pigstyId === this.form.pigstyId): this.periodList
  414. this.unitSelectedList = this.form.pigstyId? this.unitList.filter(item => item.pigstyId === this.form.pigstyId): this.unitList
  415. // 获取猪只List
  416. if (data && data.code === 0) {
  417. this.dataList = data.page.list
  418. this.totalPage = data.page.totalCount
  419. } else {
  420. this.dataList = []
  421. this.totalPage = 0
  422. this.$message.error(data.msg)
  423. }
  424. this.dataListLoading = false
  425. })
  426. },
  427. // 点击 单元or栏期的选择框
  428. selectFocus (val) {
  429. if (!this.form.pigstyId) {
  430. this.$message.error('请先选择猪舍')
  431. this.form[val + 'Id'] = ''
  432. setTimeout(() => {
  433. this.$refs[val].blur()
  434. }, 10)
  435. }
  436. },
  437. // // 根据栋舍选择限制单元和栏期
  438. // pigstyChange (val) {
  439. // this.unitSelectedList = this.unitList.filter(item => item.pigstyId === val)
  440. // this.periodSelectedList = this.periodList.filter(item => item.pigstyId === val)
  441. // },
  442. // // 需要先选择猪舍,才能选择单元或栏期
  443. // ifPigsty (val) {
  444. // if (!this.form.pigstyId) {
  445. // this.$message.error('请先选择猪舍')
  446. // this.form[val] = ''
  447. // }
  448. // },
  449. // form表单清空,单元SelectedList 和 栏期SelectedList重置
  450. clearAll () {
  451. for (let i in this.form) {
  452. this.form[i] = ''
  453. }
  454. this.unitSelectedList = this.unitList
  455. this.periodSelectedList = this.periodList
  456. },
  457. // 每页数
  458. sizeChangeHandle (val) {
  459. this.pageSize = val
  460. this.pageIndex = 1
  461. this.getDataList()
  462. },
  463. // 当前页
  464. currentChangeHandle (val) {
  465. this.pageIndex = val
  466. this.getDataList()
  467. },
  468. // 多选
  469. selectionChangeHandle (val) {
  470. this.dataListSelections = val
  471. },
  472. // 新增 / 修改
  473. addOrUpdateHandle (pig) {
  474. this.addOrUpdateVisible = true
  475. var ids = pig ? [{id: pig.id, eartag: pig.eartag}] : this.dataListSelections.map(item => {
  476. return {
  477. id: item.id,
  478. eartag: item.eartag
  479. }
  480. })
  481. this.$nextTick(() => {
  482. this.$refs.addOrUpdate.init(ids)
  483. })
  484. },
  485. // // 删除
  486. // deleteHandle (id) {
  487. // var ids = id ? [id] : this.dataListSelections.map(item => {
  488. // return item.id
  489. // })
  490. // this.$confirm(`确定对[耳标=${ids.join(',')}]进行[${id ? '删除' : '批量删除'}]操作?`, '提示', {
  491. // confirmButtonText: '确定',
  492. // cancelButtonText: '取消',
  493. // type: 'warning'
  494. // }).then(() => {
  495. // this.$http({
  496. // url: this.$http.adornUrl('/management/yearpigbase/delete'),
  497. // method: 'post',
  498. // data: this.$http.adornData(ids, false)
  499. // }).then(({data}) => {
  500. // if (data && data.code === 0) {
  501. // this.$message({
  502. // message: '操作成功',
  503. // type: 'success',
  504. // duration: 1500,
  505. // // onClose: () => {
  506. // // this.getDataList()
  507. // // }
  508. // })
  509. // this.getDataList()
  510. // } else {
  511. // this.$message.error(data.msg)
  512. // }
  513. // })
  514. // }).catch(() => {})
  515. // }
  516. },
  517. watch: {
  518. 'form.pigstyId': {
  519. handler(newValue, oldValue) {
  520. if (oldValue) {
  521. this.form.unitId = ''
  522. this.form.periodId = ''
  523. }
  524. this.unitSelectedList = this.unitList.filter(item => item.pigstyId === newValue)
  525. this.periodSelectedList = this.periodList.filter(item => item.pigstyId === newValue)
  526. }
  527. }
  528. }
  529. }
  530. </script>
  531. <style scoped>
  532. .rect {
  533. background-color: #fff;
  534. padding: 30px 15px;
  535. border-radius: 5px;
  536. border: 1px solid #e8e8e8;
  537. }
  538. .rect-form {
  539. padding-bottom: 10px;
  540. }
  541. .rect-table {
  542. margin-top: 20px;
  543. }
  544. .demo-table-expand {
  545. font-size: 0;
  546. margin-left: 40px;
  547. }
  548. .demo-table-expand label {
  549. width: 90px;
  550. color: #99a9bf;
  551. }
  552. .demo-table-expand .el-form-item {
  553. margin-right: 0;
  554. margin-bottom: 0;
  555. width: 80%;
  556. }
  557. .el-table .height {
  558. background: rgba(254, 254, 254, 0.5);
  559. }
  560. /deep/ .el-table--mini td, .el-table--mini th {
  561. padding: 3px 0 !important;
  562. height: 20px !important;
  563. }
  564. /deep/ .el-checkbox__input.is-checked+.el-checkbox__label {
  565. color: rgb(24,144,255);
  566. background-color: rgb(24,144,255);
  567. border-color: rgb(24,144,255);
  568. }
  569. /deep/.el-table .el-checkbox__input.is-checked .el-checkbox__inner, .el-checkbox__input.is-indeterminate .el-checkbox__inner {
  570. background-color: rgb(24,144,255);
  571. border-color: rgb(24,144,255);
  572. }
  573. /deep/.el-table .el-checkbox__inner:hover {
  574. border-color: rgb(24,144,255);
  575. }
  576. /deep/.el-table .el-checkbox__input.is-focus .el-checkbox__inner {
  577. border-color: rgb(24,144,255);
  578. }
  579. /deep/.el-table #select .cell .el-checkbox__input.is-checked .el-checkbox__inner, .el-checkbox__input.is-indeterminate .el-checkbox__inner {
  580. background-color: rgb(24,144,255);
  581. border-color: rgb(24,144,255);
  582. }
  583. </style>