setting.vue 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317
  1. <template>
  2. <div class='deviceDetail'>
  3. <div class='grid-3 c-f14 c-333 bgc-fff ptb10 c-border-b'>
  4. <div class='c-t-center'>
  5. <div class='mb5'><div class='bgc-17b3ec w60 h30' style='display:inline-block'></div></div>
  6. <span>正常</span>
  7. </div>
  8. <div class='c-t-center'>
  9. <div class='mb5'><div class='bgc-ff9526 w60 h30' style='display:inline-block'></div></div>
  10. <span>故障</span>
  11. </div>
  12. <div class='c-t-center'>
  13. <div class='mb5'><div class='bgc-ccc w60 h30' style='display:inline-block'></div></div>
  14. <span>关闭</span>
  15. </div>
  16. </div>
  17. <div v-for='(citem, index) in list' :key="index">
  18. <div class='mt10 bgc-fff ptb10 c-border-tb plr15 c-f14'>
  19. <div class='flex f_y_c f_x_s'>
  20. <span>第{{index+1}}层</span>
  21. <van-checkbox v-model="citem.checkAll" @change="onRowChange($event, citem)" color="#17b3ec">选择整行</van-checkbox>
  22. </div>
  23. <div class='flex mt10 x-overflow'>
  24. <div v-for='(item, cindex) in citem.list' :key="cindex">
  25. <div @click="onSelectCol(item)" class='c-t-center w30 c-position-r item'
  26. :class='{mr10: cindex!=citem.list.length-1}'>
  27. <div>{{cindex+1}}</div>
  28. <div class='c-t-center'><div :class='item.cargoState==1? "c-cirlce-17b3ec" : "c-cirlce-ccc"'></div></div>
  29. <div class='c-border ptb5 item-box ellipsis_1' :class='{active: selectList.indexOf(item)!=-1, isMerge: item.state==21||item.state==20}'>{{item.state==21?"主":item.cargoCapacity}}</div>
  30. </div>
  31. </div>
  32. </div>
  33. </div>
  34. </div>
  35. <div class='mt20 plr15'>
  36. <van-button class='c-border-r-5' style='width:100%' type="info" @click="toSetCount">设置货道容量</van-button>
  37. </div>
  38. <div class='mt20 plr15'>
  39. <van-button @click="mergeAndSplitCargo(true)" class='c-border-r-5' style='width:100%' type="info">货道合并</van-button>
  40. </div>
  41. <div class='mt20 plr15 mb30'>
  42. <van-button @click="mergeAndSplitCargo(false)" class='c-border-r-5' style='width:100%' type="info">货道拆分</van-button>
  43. </div>
  44. <SetStockDialog
  45. v-model="setStockShow"
  46. :data="info"
  47. @onConfirm="updateMediicinecabineInventoryInfoById"
  48. :bussiness="1"/>
  49. </div>
  50. </template>
  51. <script>
  52. import medicineAbinetApi from '@/api/api-medicineAbinet'
  53. import SetStockDialog from '@/views/replenishment/start/components/SetStockDialog'
  54. export default{
  55. name: 'deviceDetail',
  56. components: {
  57. SetStockDialog
  58. },
  59. data(){
  60. return {
  61. deviceInfo: '',
  62. deviceId: this.$route.query.deviceId,
  63. list: [],
  64. activeKey: 0,
  65. curItem: '',
  66. checkAll: [],
  67. selectList: [],
  68. setStockShow: false,
  69. }
  70. },
  71. created(){
  72. this.findMediicinecabinetInventoryByDeviceId()
  73. this.findDeviceById()
  74. },
  75. methods:{
  76. findMediicinecabinetInventoryByDeviceId(){
  77. this.$loading('加载中..')
  78. let p = {
  79. deviceId: this.deviceId
  80. }
  81. console.log('params', p)
  82. medicineAbinetApi
  83. .findMediicinecabinetInventoryByDeviceId(p)
  84. .then(res=>{
  85. console.log('findMediicinecabinetInventoryByDeviceId', res)
  86. this.$toast.clear()
  87. if(res.detailModelList && res.detailModelList.length){
  88. var list = _.map(res.detailModelList, v=>{
  89. var key = _.keys(v)[0]
  90. v[key].forEach(m => {
  91. m.check = false
  92. });
  93. return {
  94. index: key,
  95. list: v[key],
  96. checkAll: false
  97. }
  98. })
  99. list = _.sortBy(list, 'index')
  100. this.list = list
  101. console.log(list)
  102. }
  103. })
  104. .catch(err=>{
  105. console.error(err)
  106. })
  107. },
  108. findDeviceById(){
  109. let p = {
  110. deviceId: this.deviceId
  111. }
  112. console.log('params', p)
  113. medicineAbinetApi
  114. .findDeviceById(p)
  115. .then(res=>{
  116. console.log('findDeviceById', res)
  117. this.$toast.clear()
  118. this.deviceInfo = res.obj.device
  119. })
  120. .catch(err=>{
  121. console.error(err)
  122. })
  123. },
  124. onSelect(item){
  125. var i = this.selectList.indexOf(item)
  126. if(i == -1){
  127. this.selectList.push(item)
  128. } else {
  129. this.selectList.splice(i, 1)
  130. }
  131. },
  132. onSelectCol(item){
  133. var i = this.selectList.indexOf(item)
  134. if(i != -1){
  135. var exist = _.filter(this.selectList, v=>{
  136. var n = Number(item.wayerNo)
  137. return v.wayerNo==n-1 || v.wayerNo==n+1
  138. })
  139. if(exist.length==2){
  140. return
  141. }
  142. this.selectList.splice(i, 1)
  143. return
  144. }
  145. if(this.selectList.length!==0 && item.layerNo!=Number(this.selectList[0].layerNo)){
  146. return
  147. }
  148. if(this.selectList.length){
  149. var exist = _.find(this.selectList, v=>{
  150. var n = Number(item.wayerNo)
  151. return v.wayerNo==n-1 || v.wayerNo==n+1
  152. })
  153. if(!exist){
  154. return
  155. }
  156. }
  157. this.selectList.push(item)
  158. },
  159. onRowChange(e, item){
  160. if(this.selectList.length && this.selectList[0].layerNo!=item.layerNo){
  161. this.list[Number(this.selectList[0].layerNo)-1].checkAll = false
  162. }
  163. if(e){
  164. this.selectList = item.list
  165. } else {
  166. this.selectList = []
  167. }
  168. },
  169. mergeAndSplitCargo(isMerge){
  170. this.$loading('保存中..')
  171. var ids = []
  172. if(isMerge){
  173. debugger
  174. if(!this.selectList.length || this.selectList.length<2){
  175. this.$toast('至少选择两个相邻的货道')
  176. return
  177. }
  178. var exist = _.find(this.selectList, v=>{
  179. return v.state==20 || v.state==21
  180. })
  181. if(exist){
  182. this.$toast('不能选择已合并的通道')
  183. return
  184. }
  185. var list = _.sortBy(this.selectList, 'wayerNo')
  186. ids = _.map(list, v=>{
  187. return v.id
  188. })
  189. } else {
  190. if(!this.selectList.length || this.selectList.length>1 || this.selectList[0].state!=21){
  191. this.$toast('请选择一个主货道')
  192. return
  193. }
  194. var item = this.selectList[0]
  195. var list = this.list[Number(item.layerNo)-1].list
  196. ids.push(item.id)
  197. for(var i=Number(item.wayerNo); i<=list.length; i++){
  198. var v = list[i]
  199. if(v.state == 20){
  200. ids.push(v.id)
  201. } else {
  202. break;
  203. }
  204. }
  205. }
  206. var p = {
  207. cargoIds: ids.join(','),
  208. isMerge
  209. }
  210. console.log(p)
  211. medicineAbinetApi
  212. .mergeAndSplitCargo(p)
  213. .then(res=>{
  214. console.log('mergeAndSplitCargo', res)
  215. if(res.status == 200){
  216. this.selectList = []
  217. this.$toast('操作成功')
  218. this.findMediicinecabinetInventoryByDeviceId()
  219. }
  220. })
  221. .catch(err=>{
  222. console.error(err)
  223. })
  224. },
  225. toSetCount(){
  226. if(!this.selectList || !this.selectList.length){
  227. this.$toast("至少选择一个货道")
  228. return
  229. }
  230. if(this.selectList[0].state==20){
  231. this.$toast("副通道不能修改容量,请修改它的主通道")
  232. return
  233. }
  234. this.setStockShow = true
  235. },
  236. updateMediicinecabineInventoryInfoById(data){
  237. this.$loading('保存中..')
  238. var ids = _.map(this.selectList, v=>{
  239. return v.id
  240. })
  241. let p = {
  242. id: ids.join(","),
  243. cargoCapacity: data
  244. }
  245. console.log('params', p)
  246. medicineAbinetApi
  247. .updateMediicinecabineInventoryInfoById(p)
  248. .then(res=>{
  249. console.log('updateMediicinecabineInventoryInfoById', res)
  250. if(res.status == 200){
  251. this.setStockShow = false
  252. this.$toast.clear()
  253. this.selectList = []
  254. this.findMediicinecabinetInventoryByDeviceId()
  255. }
  256. })
  257. .catch(err=>{
  258. console.error(err)
  259. })
  260. },
  261. },
  262. }
  263. </script>
  264. <style scoped lang='scss'>
  265. .deviceDetail{
  266. .grid-3{
  267. display: grid;
  268. grid-template-columns: 1fr 1fr 1fr;
  269. }
  270. .c-cirlce-17b3ec{
  271. background: #17b3ec;
  272. width: 7px;
  273. height: 7px;
  274. border-radius: 50%;
  275. display: inline-block;
  276. }
  277. .c-cirlce-ccc{
  278. background: #ccc;
  279. width: 7px;
  280. height: 7px;
  281. border-radius: 50%;
  282. display: inline-block;
  283. }
  284. .x-overflow{
  285. overflow-x: auto;
  286. -ms-overflow-style: none;
  287. }
  288. .x-overflow::-webkit-scrollbar{
  289. display:none;
  290. }
  291. .item{
  292. .active{
  293. border-color: #17b3ec;
  294. background-image: url('../../../assets/images/gouxuan.png');
  295. background-size: 15px 15px;
  296. background-repeat: no-repeat;
  297. background-position: bottom right;
  298. }
  299. .isMerge{
  300. background-color: #17b3ec;
  301. color: #fff;
  302. }
  303. .item-box{
  304. line-height: 20px;
  305. }
  306. }
  307. }
  308. </style>