ReturnGood.vue 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. <template>
  2. <div style="width: 100%; padding: 0px 15px">
  3. <byForm
  4. :formConfig="formConfig"
  5. :formOption="formOption"
  6. v-model="formData.data"
  7. :rules="rules"
  8. ref="formDom"
  9. >
  10. <template #details>
  11. <div style="width: 100%">
  12. <el-button
  13. type="primary"
  14. @click="openProduct = true"
  15. style="margin-bottom: 10px"
  16. >
  17. 添加物品
  18. </el-button>
  19. <el-table :data="formData.data.purchaseDetailList">
  20. <el-table-column prop="productCode" label="货品编码" />
  21. <el-table-column prop="productName" label="货品名称" />
  22. <el-table-column prop="productSpec" label="规格型号" />
  23. <el-table-column prop="productUnit" label="单位" />
  24. <el-table-column prop="count" label="退货数量" min-width="150">
  25. <template #default="{ row, $index }">
  26. <el-form-item
  27. :prop="'purchaseDetailList.' + $index + '.count'"
  28. :rules="rules.count"
  29. :inline-message="true"
  30. >
  31. <el-input-number
  32. v-model="row.count"
  33. :precision="4"
  34. :controls="false"
  35. :min="0"
  36. />
  37. </el-form-item>
  38. </template>
  39. </el-table-column>
  40. <el-table-column prop="remark" label="退货原因" min-width="150">
  41. <template #default="{ row, $index }">
  42. <el-form-item
  43. :prop="'purchaseDetailList.' + $index + '.remark'"
  44. :rules="rules.remark"
  45. :inline-message="true"
  46. >
  47. <el-input v-model="row.remark" placeholder="请输入" />
  48. </el-form-item>
  49. </template>
  50. </el-table-column>
  51. <el-table-column prop="zip" label="操作" width="100">
  52. <template #default="{ $index }">
  53. <el-button type="primary" link @click="handleRemove($index)"
  54. >删除</el-button
  55. >
  56. </template>
  57. </el-table-column>
  58. </el-table>
  59. </div>
  60. </template>
  61. </byForm>
  62. <el-dialog
  63. v-model="openProduct"
  64. title="选择货品"
  65. width="70%"
  66. append-to-body
  67. >
  68. <SelectGoods
  69. @cancel="openProduct = false"
  70. @pushGoods="pushGoods"
  71. ></SelectGoods>
  72. </el-dialog>
  73. </div>
  74. </template>
  75. <script setup>
  76. import byForm from "@/components/byForm/index";
  77. import SelectGoods from "@/components/product/SelectGoods";
  78. let formData = reactive({
  79. data: {
  80. supplyId: "",
  81. purchaseDetailList: [],
  82. returnName: "",
  83. },
  84. });
  85. let rules = ref({
  86. supplyId: [{ required: true, message: "请选择供应商", trigger: "change" }],
  87. });
  88. const formOption = reactive({
  89. inline: true,
  90. labelWidth: 100,
  91. itemWidth: 100,
  92. });
  93. const formConfig = computed(() => {
  94. return [
  95. {
  96. type: "input",
  97. prop: "name",
  98. label: "申请部门",
  99. itemWidth: 25,
  100. disabled: true,
  101. style: {
  102. "margin-right": "10px",
  103. },
  104. },
  105. {
  106. type: "input",
  107. prop: "name",
  108. label: "申请人",
  109. itemWidth: 25,
  110. disabled: true,
  111. style: {
  112. "margin-right": "10px",
  113. },
  114. },
  115. {
  116. type: "date",
  117. prop: "name",
  118. label: "申请时间",
  119. itemWidth: 25,
  120. disabled: true,
  121. style: {
  122. "margin-right": "10px",
  123. },
  124. },
  125. {
  126. type: "select",
  127. prop: "supplyId",
  128. label: "供应商",
  129. isLoad: {
  130. url: "/supplierInfo/page",
  131. req: {
  132. pageNum: 1,
  133. pageSize: 9999,
  134. },
  135. labelKey: "name",
  136. labelVal: "id",
  137. method: "post",
  138. resUrl: "rows",
  139. },
  140. },
  141. {
  142. type: "slot",
  143. slotName: "details",
  144. label: "退货明细",
  145. },
  146. ];
  147. });
  148. const formDom = ref(null);
  149. const handleSubmit = async () => {
  150. const vaild = await formDom.value.handleSubmit(() => {});
  151. console.log(vaild, "wqsds");
  152. };
  153. let openProduct = ref(false);
  154. const handleRemove = (index) => {
  155. formData.data.purchaseDetailList.splice(index, 1);
  156. return ElMessage({
  157. message: "删除成功!",
  158. type: "success",
  159. });
  160. };
  161. const pushGoods = (goods) => {
  162. const arr = goods.map((x) => ({
  163. goodType: x.goodType,
  164. productCode: x.code,
  165. productName: x.name,
  166. productSpec: x.spec,
  167. productUnit: x.unit,
  168. count: 0,
  169. price: 0,
  170. bussinessId: x.id,
  171. amount: 0,
  172. }));
  173. formData.data.purchaseDetailList =
  174. formData.data.purchaseDetailList.concat(arr);
  175. return ElMessage({
  176. message: "添加成功!",
  177. type: "success",
  178. });
  179. };
  180. // 接收父组件的传值
  181. const props = defineProps({
  182. queryData: String,
  183. });
  184. // 向父组件暴露
  185. defineExpose({
  186. submitData: formData.data,
  187. handleSubmit,
  188. });
  189. </script>
  190. <style lang="scss" scoped>
  191. </style>