codeList.vue 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. <template>
  2. <draggable v-model="items" :group="{ name: groupName }" :animation="200" handle=".drag" @sort="onSort">
  3. <div class="flex justify-between align-center mb10" style="position: relative;" v-for="(item, index) in codeList" :key="index">
  4. <van-field v-model="item.code" :label="getLabel(index)" placeholder="请扫描或输入追溯码" class="mr8" />
  5. <img src="@/assets/images/traceability/scan.png" class="scan" alt="" v-if="qty <= stock && bussiness != 1" @click="scan(index)" />
  6. <img src="@/assets/images/traceability/drag.png" class="drag" alt="" v-if="qty <= stock && bussiness != 1" />
  7. <img src="@/assets/images/traceability/del.png" alt="" v-if="qty > stock" @click="delDrug(index)" />
  8. </div>
  9. </draggable>
  10. </template>
  11. <script>
  12. import draggable from 'vuedraggable'
  13. export default {
  14. props: {
  15. qty: {
  16. default: 0
  17. },
  18. stock: {
  19. default: 0
  20. },
  21. codeList: {
  22. type: Array,
  23. default: () => {
  24. return []
  25. }
  26. },
  27. bussiness: {
  28. default: 0 //1修改容量 2矫正库存 4设置库存 5选择药品后 设置库存 6备药时选择药品
  29. }
  30. },
  31. components: {
  32. draggable
  33. },
  34. data() {
  35. return {
  36. items: [],
  37. groupName: ''
  38. }
  39. },
  40. mounted() {
  41. this.groupName = 'group' + this.getRandomString(10)
  42. },
  43. methods: {
  44. delDrug(index) {
  45. this.$dialog
  46. .confirm({
  47. message: '是否确定删除该药品?'
  48. })
  49. .then(() => {
  50. this.codeList.splice(index, 1)
  51. })
  52. .catch(() => {})
  53. },
  54. getLabel(index) {
  55. const len = this.codeList.length
  56. if (index == 0) {
  57. return `${len - index}位最里:`
  58. } else if (index == len - 1) {
  59. return '1位最外:'
  60. } else {
  61. return `第${len - index}位次:`
  62. }
  63. },
  64. onSort(event) {
  65. const oldIndex = event.oldIndex
  66. const newIndex = event.newIndex
  67. const obj = this.codeList[oldIndex]
  68. this.codeList.splice(oldIndex, 1)
  69. this.codeList.splice(newIndex, 0, obj)
  70. },
  71. getRandomString(length) {
  72. const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'
  73. let result = ''
  74. const charactersLength = characters.length
  75. for (let i = 0; i < length; i++) {
  76. result += characters.charAt(Math.floor(Math.random() * charactersLength))
  77. }
  78. return result
  79. },
  80. scan(index) {
  81. this.$emit('scan', { index: index, len: this.codeList.length })
  82. }
  83. }
  84. }
  85. </script>
  86. <style lang="scss" scoped>
  87. .van-cell {
  88. background: #f1f3f4;
  89. padding: 6px 16px;
  90. }
  91. .scan {
  92. position: absolute;
  93. right: 36px;
  94. top: 50%;
  95. transform: translateY(-50%);
  96. }
  97. .drag {
  98. width: 20px;
  99. height: 20px;
  100. }
  101. ::v-deep {
  102. .van-field__label {
  103. color: #999;
  104. width: 64px;
  105. margin-right: 0;
  106. }
  107. }
  108. </style>