print-confirm-count.vue 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. <template>
  2. <view class="pd-24 bg-fff">
  3. <up-form class="p-rtv bg-#fff" labelPosition="top" :model="form" errorType="toast" :rules="rules" labelWidth="auto" ref="upFormUpRef">
  4. <view class="f-s-24 c-#999">自行打印功能目前仅适配<span class="c-#333">佳博GP-M322打印机</span>,且标签显示字段 会根据不同规格纸张大小调整。如有疑问,请<span class="c-primary">点击此处联系客服</span>。</view>
  5. <up-form-item :label="`待打印数量`" borderBottom>
  6. <view class="f-s-30 c-#333 f-w-5">{{ opts?.printedCount }}</view>
  7. </up-form-item>
  8. <up-form-item :label="`打印数量`" prop="printCount" required borderBottom>
  9. <up-input v-model="form.printCount" placeholder="请输入打印数量" border="none" clearable></up-input>
  10. <template #right>
  11. <span class="f-s-30 f-w-5 c-#333">{{ opts?.unit || form?.unit || 'kg' }}</span>
  12. </template>
  13. </up-form-item>
  14. <up-form-item :label="`打印人`" required borderBottom>
  15. <up-input v-model="form.printPerson" placeholder="请输入打印人" readonly border="none" clearable></up-input>
  16. </up-form-item>
  17. </up-form>
  18. </view>
  19. <view class="pd3-40-24-30 d-flex">
  20. <up-button class="mr-30" type="primary" plain @click="prevSteps">上一步</up-button>
  21. <up-button type="primary" @click="submitForm">下一步</up-button>
  22. </view>
  23. </template>
  24. <script setup lang="ts">
  25. import { useInfoStore } from '@/store';
  26. const infoStore = useInfoStore();
  27. const props = defineProps({
  28. info: {
  29. type: Object,
  30. default: () => null,
  31. },
  32. nextStepValue: {
  33. type: String,
  34. default: '',
  35. },
  36. prevStepValue: {
  37. type: String,
  38. default: '',
  39. },
  40. item: {
  41. type: Object,
  42. default: () => null,
  43. },
  44. opts: {
  45. type: Object,
  46. default: () => null,
  47. },
  48. });
  49. const upFormUpRef = ref();
  50. const emit = defineEmits(['next', 'prev', 'formdata']);
  51. const form = ref({
  52. printCount: props?.opts?.printedCount || '',
  53. printPerson: infoStore.userInfo?.name, // 打印人
  54. });
  55. const rules = reactive({
  56. printCount: [
  57. { required: true, message: '请输入打印数量' },
  58. // 只能输入大于0的正整数
  59. { pattern: /^[1-9]\d*$/, message: '请输入大于0的正整数' },
  60. // 打印数量不能大于剩余可打印数量
  61. {
  62. asyncValidator: (rule: any, value: any) => {
  63. if (value === undefined || value === null || value === '') return Promise.resolve();
  64. const num = Number(value);
  65. if (Number.isNaN(num)) return Promise.reject('打印数量请输入数字');
  66. if (num <= 0) return Promise.reject('打印数量需大于0');
  67. // 打印数量不能大于剩余可打印数量
  68. if (+props?.opts?.printedCount < +num) {
  69. return Promise.reject(`打印数量不能超过待打印数量`);
  70. }
  71. return Promise.resolve();
  72. },
  73. },
  74. ],
  75. });
  76. const submitForm = async () => {
  77. try {
  78. await upFormUpRef.value?.validate();
  79. } catch (error: any) {
  80. return;
  81. }
  82. emit('formdata', {
  83. ...form.value
  84. });
  85. emit('next', {
  86. info: {
  87. ...props.info,
  88. status: 'completed',
  89. },
  90. nextStepValue: props.nextStepValue || 'print',
  91. });
  92. };
  93. const prevSteps = () => {
  94. emit('prev', {
  95. prevStepValue: props.prevStepValue || 'confirm',
  96. });
  97. };
  98. onMounted(() => {});
  99. </script>