plant.vue 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448
  1. <template>
  2. <div>
  3. <el-breadcrumb separator-class="el-icon-arrow-right">
  4. <el-breadcrumb-item>农事管理</el-breadcrumb-item>
  5. <el-breadcrumb-item>种植</el-breadcrumb-item>
  6. </el-breadcrumb>
  7. <div class="search-box">
  8. <div class="filter-box">
  9. <el-select size="small" v-model="base" clearable @change="selChange" placeholder="请选择基地名称">
  10. <el-option
  11. v-for="item in FieldCascader"
  12. :label="item.farmname"
  13. :value="item.farmname"
  14. :key="item.id"
  15. ></el-option>
  16. </el-select>
  17. <el-select size="small" v-model="pickcode" clearable @change="selChange" placeholder="请选择采收状态">
  18. <el-option label="已采收" value="1"></el-option>
  19. <el-option label="未采收" value="0"></el-option>
  20. </el-select>
  21. </div>
  22. <el-button type="primary" size="mini" @click="plantAdd">新增</el-button>
  23. </div>
  24. <template v-if="fieldsList.length">
  25. <el-row :gutter="10">
  26. <el-col
  27. :xs="24"
  28. :sm="24"
  29. :md="12"
  30. :lg="6"
  31. :xl="6"
  32. v-for="item in fieldsList"
  33. :key="item.backcode"
  34. >
  35. <el-card class="box-card">
  36. <img
  37. class="tag"
  38. v-if="item.pickcode == '1'"
  39. src="@/assets/images/sy/farmThing/picked.png"
  40. />
  41. <div class="img-box">
  42. <img src="@/assets/images/sy/farmThing/plant.png" />
  43. </div>
  44. <div class="detail">
  45. <p class="borderLine">种植基地 : {{ item.farm }}</p>
  46. <p class="borderLine">种植地块 : {{ item.land }}</p>
  47. <p class="borderLine">
  48. 采收状态 : {{ item.pickcode == 1 ? '已采收' : '未采收' }}
  49. </p>
  50. <p class="borderLine">类别 : {{ item.planttype }}</p>
  51. <p class="borderLine">名称 : {{ item.plantname }}</p>
  52. <p class="borderLine">批次 : {{ item.batch }}</p>
  53. <p class="borderLine">
  54. 种植时间 : {{ (item.uptime * 1000) | formatTime }}
  55. </p>
  56. </div>
  57. <div class="btns">
  58. <a
  59. :class="{ bg: itemId == item.id && btnindex == 1 ? true : false }"
  60. @click="plantEdit(item)"
  61. >编辑</a
  62. >
  63. <a
  64. :class="{ bg: itemId == item.id && btnindex == 2 ? true : false }"
  65. @click="plantDelet(item.id, item.backcode)"
  66. >删除</a
  67. >
  68. </div>
  69. </el-card>
  70. </el-col>
  71. </el-row>
  72. </template>
  73. <template v-else>
  74. <!-- 暂无数据 -->
  75. <div class="expertDiagnosis_referral_units_not" >
  76. <img
  77. :src="zanwu"
  78. alt
  79. class="expertDiagnosis_referral_units_notImg"
  80. />
  81. </div>
  82. </template>
  83. <el-pagination
  84. v-if="fieldsList.length"
  85. background
  86. layout="prev, pager, next"
  87. :total="totalNum"
  88. :page-size="8"
  89. :current-page="page"
  90. @current-change="changePage"
  91. ></el-pagination>
  92. <!-- 新增弹框 -->
  93. <el-dialog
  94. title="新增"
  95. :visible.sync="farmThingAddDialogVisible"
  96. width="30%"
  97. @close="AddDialogClosed"
  98. >
  99. <el-form
  100. ref="addFormRef"
  101. :model="addForm"
  102. label-width="90px"
  103. :rules="addFormRules"
  104. >
  105. <el-form-item label="所属地块 : " prop="pro_cascader">
  106. <el-cascader
  107. v-model="addForm.pro_cascader"
  108. :options="FieldCascader"
  109. :props="{
  110. expandTrigger: 'hover',
  111. label: 'farmname',
  112. value: 'farmname'
  113. }"
  114. ></el-cascader>
  115. </el-form-item>
  116. <el-form-item label="产品类别 : " prop="pro_type">
  117. <el-input v-model="addForm.pro_type"></el-input>
  118. </el-form-item>
  119. <el-form-item label="产品名称 : " prop="pro_name">
  120. <el-input v-model="addForm.pro_name"></el-input>
  121. </el-form-item>
  122. <el-form-item label="批次名称 : " prop="batch_name">
  123. <el-input v-model="addForm.batch_name"></el-input>
  124. </el-form-item>
  125. </el-form>
  126. <span slot="footer" class="dialog-footer">
  127. <el-button @click="farmThingAddDialogVisible = false">取 消</el-button>
  128. <el-button type="primary" @click="addSubm">确认</el-button>
  129. </span>
  130. </el-dialog>
  131. <!-- 编辑地块弹框 -->
  132. <el-dialog
  133. title="编辑"
  134. :visible.sync="farmThingEditDialogVisible"
  135. width="30%"
  136. @close="EditDialogClosed"
  137. >
  138. <el-form
  139. ref="editFormRef"
  140. :model="editForm"
  141. label-width="90px"
  142. :rules="addFormRules"
  143. >
  144. <el-form-item label="所属地块 : " prop="pro_cascader">
  145. <el-cascader
  146. disabled
  147. v-model="editForm.pro_cascader"
  148. :options="FieldCascader"
  149. :props="{
  150. expandTrigger: 'hover',
  151. label: 'farmname',
  152. value: 'farmname'
  153. }"
  154. ></el-cascader>
  155. </el-form-item>
  156. <el-form-item label="产品类别 : " prop="pro_type">
  157. <el-input v-model="editForm.pro_type"></el-input>
  158. </el-form-item>
  159. <el-form-item label="产品名称 : " prop="pro_name">
  160. <el-input v-model="editForm.pro_name"></el-input>
  161. </el-form-item>
  162. <el-form-item label="批次名称 : " prop="batch_name">
  163. <el-input v-model="editForm.batch_name"></el-input>
  164. </el-form-item>
  165. </el-form>
  166. <span slot="footer" class="dialog-footer">
  167. <el-button @click="farmThingEditDialogVisible = false">取 消</el-button>
  168. <el-button type="primary" @click="editSubm">确认</el-button>
  169. </span>
  170. </el-dialog>
  171. </div>
  172. </template>
  173. <script>
  174. export default {
  175. data() {
  176. return {
  177. zanwu: require('@/assets/images/expertDiagnosis/zanwu.png'),
  178. itemId: '',
  179. btnindex: '',
  180. page: 1,
  181. totalNum: null,
  182. base: '',
  183. pickcode: '',
  184. farmThingAddDialogVisible: false,
  185. farmThingEditDialogVisible: false,
  186. fieldsList: [],
  187. bases: [
  188. { value: '1', label: '基地一' },
  189. { value: '2', label: '基地二' },
  190. { value: '3', label: '基地三' },
  191. { value: '4', label: '基地四' }
  192. ],
  193. fields: [
  194. { value: '1', label: '地块一' },
  195. { value: '2', label: '地块二' },
  196. { value: '3', label: '地块三' },
  197. { value: '4', label: '地块四' }
  198. ],
  199. usefor: [
  200. { value: '1', label: '种植' },
  201. { value: '2', label: '种植' },
  202. { value: '3', label: '种植' },
  203. { value: '4', label: '种植' }
  204. ],
  205. addForm: {
  206. pro_name: '',
  207. batch_name: '', //批次名称
  208. pro_type: '',
  209. pro_cascader: []
  210. },
  211. editForm: {
  212. pro_name: '',
  213. batch_name: '', //批次名称
  214. pro_type: '',
  215. pro_cascader: []
  216. },
  217. addFormRules: {
  218. pro_name: [
  219. { required: true, message: '请填写产品名称', trigger: 'blur' }
  220. ],
  221. pro_type: [
  222. { required: true, message: '请填写产品类别', trigger: 'blur' }
  223. ],
  224. batch_name: [
  225. { required: true, message: '请填写批次名称', trigger: 'blur' }
  226. ],
  227. pro_cascader: [
  228. { required: true, message: '请选择地块', trigger: 'change' }
  229. ]
  230. },
  231. FieldCascader: []
  232. }
  233. },
  234. mounted() {
  235. this.getAllFieldsCascader()
  236. this.getplant()
  237. },
  238. methods: {
  239. getAllFieldsCascader() {
  240. this.$axios({
  241. method: 'POST',
  242. url: '/api/all_base'
  243. }).then((res) => {
  244. if (res.data.data.length > 0) {
  245. this.FieldCascader = res.data.data
  246. }else{
  247. this.FieldCascader = []
  248. }
  249. })
  250. },
  251. getplant() {
  252. this.$axios({
  253. method: 'POST',
  254. url: '/api/plant_info',
  255. data: this.qs.stringify({
  256. page: this.page,
  257. farmname: this.base,
  258. pickcode: this.pickcode
  259. })
  260. }).then((res) => {
  261. this.totalNum = res.data.counts
  262. this.fieldsList = res.data.data
  263. })
  264. },
  265. selChange(){
  266. this.page=1
  267. this.getplant()
  268. },
  269. plantAdd() {
  270. this.farmThingAddDialogVisible = true
  271. },
  272. plantEdit(item) {
  273. if (item.pickcode == '0') {
  274. //未采收
  275. this.editForm.pro_name = item.plantname
  276. this.editForm.batch_name = item.batch
  277. this.editForm.pro_type = item.planttype
  278. this.editForm.pro_cascader = [item.farm, item.land]
  279. this.itemId = item.id
  280. this.btnindex = 1
  281. this.farmThingEditDialogVisible = true
  282. } else {
  283. this.$message.warning('此地块已采收,禁止编辑!')
  284. }
  285. },
  286. plantDelet(id, backcode) {
  287. this.itemId = id
  288. this.btnindex = 2
  289. this.$confirm('确定要删除此作物么?', '提示', {
  290. confirmButtonText: '确定',
  291. cancelButtonText: '取消',
  292. type: 'warning'
  293. })
  294. .then(() => {
  295. this.$axios({
  296. method: 'POST',
  297. url: '/api/del_plant',
  298. data: this.qs.stringify({
  299. backcode: backcode
  300. })
  301. }).then((res) => {
  302. if (res.data == 1) {
  303. this.$message({
  304. type: 'success',
  305. message: '删除成功!'
  306. })
  307. this.getplant()
  308. }
  309. })
  310. })
  311. .catch(() => {
  312. this.$message({
  313. type: 'info',
  314. message: '已取消删除'
  315. })
  316. })
  317. },
  318. AddDialogClosed() {
  319. this.$refs.addFormRef.resetFields()
  320. },
  321. EditDialogClosed() {
  322. this.$refs.editFormRef.resetFields()
  323. },
  324. addSubm() {
  325. this.$refs.addFormRef.validate((valid) => {
  326. if (!valid) return
  327. let farm = this.addForm.pro_cascader[0]
  328. let land = this.addForm.pro_cascader[1]
  329. this.$axios({
  330. method: 'POST',
  331. url: '/api/add_plant',
  332. data: this.qs.stringify({
  333. farm: farm,
  334. land: land,
  335. planttype: this.addForm.pro_type,
  336. batch: this.addForm.batch_name,
  337. plantname: this.addForm.pro_name
  338. })
  339. }).then((res) => {
  340. if (res.data == 1) {
  341. this.getplant()
  342. } else {
  343. this.$message.error(res.data)
  344. }
  345. this.farmThingAddDialogVisible = false
  346. })
  347. })
  348. },
  349. editSubm() {
  350. this.$refs.editFormRef.validate((valid) => {
  351. if (!valid) return
  352. this.$axios({
  353. method: 'POST',
  354. url: '/api/edit_plant',
  355. data: this.qs.stringify({
  356. id: this.itemId,
  357. planttype: this.editForm.pro_type,
  358. batch: this.editForm.batch_name,
  359. plantname: this.editForm.pro_name
  360. })
  361. }).then((res) => {
  362. if (res.data.message == '') {
  363. this.getplant()
  364. } else {
  365. this.$message.warning(res.data.message)
  366. }
  367. })
  368. this.farmThingEditDialogVisible = false
  369. })
  370. },
  371. changePage(val) {
  372. this.page = val
  373. this.getplant()
  374. }
  375. }
  376. }
  377. </script>
  378. <style lang='less' scoped>
  379. .search-box {
  380. display: flex;
  381. justify-content: space-between;
  382. margin-bottom: 10px;
  383. .el-input {
  384. width: 200px;
  385. }
  386. }
  387. .el-card {
  388. /deep/.el-card__body {
  389. position: relative;
  390. }
  391. .tag {
  392. position: absolute;
  393. top: 0;
  394. right: 20px;
  395. }
  396. text-align: center;
  397. color: #555;
  398. font-size: 13px;
  399. .borderLine {
  400. border: #eee;
  401. border-radius: 5px;
  402. -webkit-box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
  403. box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
  404. padding: 8px 0;
  405. margin: 10px 0;
  406. }
  407. .btns {
  408. display: flex;
  409. width: 180px;
  410. border-radius: 30px;
  411. box-shadow: 0 0 10px rgba(0, 0, 0, 0.15);
  412. margin: 20px auto 0;
  413. a.bg {
  414. background: #17bb89;
  415. color: #fff;
  416. }
  417. a {
  418. width: 50%;
  419. height: 30px;
  420. line-height: 30px;
  421. cursor: pointer;
  422. &:first-child {
  423. border-top-left-radius: 30px;
  424. border-bottom-left-radius: 30px;
  425. }
  426. &:last-child {
  427. border-top-right-radius: 30px;
  428. border-bottom-right-radius: 30px;
  429. }
  430. }
  431. a:hover {
  432. background: #14a478;
  433. color: #fff;
  434. }
  435. }
  436. }
  437. .el-cascader {
  438. width: 100%;
  439. }
  440. // 暂无数据
  441. .expertDiagnosis_referral_units_not {
  442. width: 272px;
  443. margin: 0 auto;
  444. }
  445. </style>