NumberModal.vue 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. <template>
  2. <view class="container" @touchmove.stop.prevent>
  3. <view class="container_head">
  4. 数量
  5. </view>
  6. <view class="container_form">
  7. <view class="content">
  8. <template v-if="selectType === 'editConsumable' || selectType === 'addConsumable'">
  9. {{ selectData.consumableName }}
  10. <template v-if="selectData.consumableBrandModel">({{ selectData.consumableBrandModel }})</template>
  11. {{ selectData.consumableEndPrice }}元
  12. </template>
  13. <template v-else-if="selectType === 'editWorkHourManagement'">
  14. {{ selectData.workName }}
  15. {{ selectData.wage }}元
  16. </template>
  17. </view>
  18. <view class="number">
  19. <uni-number-box v-model="pageData.num" :background="primaryColor" color="#fff" :min="1" :max="10000" />
  20. </view>
  21. </view>
  22. <view class="container_foot">
  23. <view class="foot_btns">
  24. <view class="cancel btn" @click="cancel">取消</view>
  25. <view v-if="showRemove" class="remove btn" @click="remove">移除</view>
  26. <view class="confirm btn" @click="confirm">确认</view>
  27. </view>
  28. </view>
  29. </view>
  30. <view class="mask" @touchmove.stop.prevent></view>
  31. </template>
  32. <script setup>
  33. import { defineEmits, ref, reactive, defineProps } from 'vue'
  34. import { onLoad } from '@dcloudio/uni-app'
  35. import { defaultColor } from '@/static/js/theme.js'
  36. const emit = defineEmits(['cancelEmit', 'confirmEmit', 'removeEmit']);
  37. const { selectData, selectType, evtNumber, showRemove } = defineProps({
  38. selectData: Object,
  39. selectType: String,
  40. evtNumber: {
  41. type: Number,
  42. default: 1,
  43. },
  44. showRemove: {
  45. type: Boolean,
  46. default: false,
  47. }
  48. });
  49. // 主题颜色
  50. const primaryColor = ref(defaultColor)
  51. // 页面数据
  52. const pageData = reactive({
  53. num: 1,
  54. });
  55. // 取消
  56. function cancel(){
  57. emit('cancelEmit')
  58. }
  59. // 确认
  60. function confirm(){
  61. emit('confirmEmit', pageData.num);
  62. }
  63. // 移除
  64. function remove(){
  65. emit('removeEmit', pageData.num);
  66. }
  67. onLoad((option) => {
  68. pageData.num = evtNumber;
  69. })
  70. </script>
  71. <style lang="scss" scoped>
  72. .mask{
  73. position: fixed;
  74. left: 0;
  75. top: 0;
  76. right: 0;
  77. bottom: 0;
  78. background-color: rgba(0, 0, 0, 0.4);
  79. z-index: 999;
  80. }
  81. .container{
  82. position: fixed;
  83. left: 50%;
  84. top: 50%;
  85. transform: translate(-50%, -50%);
  86. z-index: 9999;
  87. width: 690rpx;
  88. background-color: #fff;
  89. border-radius: 10rpx;
  90. .container_head{
  91. padding: 55rpx;
  92. font-size: 32rpx;
  93. color: #333;
  94. text-align: center;
  95. }
  96. .container_form{
  97. padding: 0 55rpx;
  98. .content{
  99. text-align: center;
  100. font-size: 28rpx;
  101. }
  102. .number{
  103. padding: 24rpx 0;
  104. display: flex;
  105. justify-content: center;
  106. }
  107. }
  108. .container_foot{
  109. .foot_btns{
  110. display: flex;
  111. border-top: 1rpx solid #DDDDDD;
  112. .btn{
  113. border-right: 1rpx solid #E3E3E3;
  114. &:last-of-type{
  115. border-right: none;
  116. }
  117. }
  118. .confirm{
  119. flex: 1;
  120. font-size: 32rpx;
  121. padding: 30rpx;
  122. display: flex;
  123. justify-content: center;
  124. color: $uni-primary;
  125. }
  126. .remove{
  127. flex: 1;
  128. font-size: 32rpx;
  129. padding: 30rpx;
  130. display: flex;
  131. justify-content: center;
  132. color: red;
  133. }
  134. .cancel{
  135. flex: 1;
  136. background-color: #fff;
  137. font-size: 32rpx;
  138. padding: 30rpx;
  139. display: flex;
  140. justify-content: center;
  141. }
  142. }
  143. }
  144. }
  145. </style>