rough.vue 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. <!-- 添加商品-成批毛坯 -->
  2. <template>
  3. <el-form ref="formRef" class="el-form--horizontal" label-width="110px" :model="formData" :rules="formRules">
  4. <el-form-item label="商品编号" prop="GoodsNo">
  5. <el-input placeholder="请输入" v-model="formData.GoodsNo" />
  6. </el-form-item>
  7. <el-form-item label="履约方式" prop="PerformanceTemplateID" v-if="code === 'warehousing_goods_sell'">
  8. <component :is="components.performance" v-model="performanceId" />
  9. </el-form-item>
  10. <el-form-item label="货币类型" prop="ZSCurrencyType">
  11. <el-radio-group v-model="formData.ZSCurrencyType">
  12. <el-radio :label="item.value" v-for="(item, index) in enums.currencyTypeList" :key="index">
  13. {{ item.label }}
  14. </el-radio>
  15. </el-radio-group>
  16. </el-form-item>
  17. <el-form-item label="总价" prop="Price">
  18. <el-input type="number" placeholder="请输入" v-model="formData.Price">
  19. <template #append>{{ currencyInfo?.enumitemvalue }}</template>
  20. </el-input>
  21. </el-form-item>
  22. <el-form-item label="总重量" prop="Weight">
  23. <el-input type="number" placeholder="请输入" v-model="formData.Weight">
  24. <template #append>(克拉)</template>
  25. </el-input>
  26. </el-form-item>
  27. <el-form-item label="平均重量" prop="WeightAvg">
  28. <el-input type="number" placeholder="请输入" v-model="formData.WeightAvg">
  29. <template #append>(克拉)</template>
  30. </el-input>
  31. </el-form-item>
  32. <el-form-item label="克拉单价">
  33. <span>{{ currencyInfo?.param2 }}{{ caratUnit }} (总价/总重量)</span>
  34. </el-form-item>
  35. <el-form-item class="el-form-item--row" label="晶型" prop="ZSCrystalType">
  36. <app-multiple class="el-form-item--col" :data-list="enums.crystalTypeList" v-model="formData.ZSCrystalType"
  37. checkbox />
  38. </el-form-item>
  39. <el-form-item label="颜色" prop="ZSColorType">
  40. <app-multiple class="el-form-item--col" :data-list="enums.colorTypeList" v-model="selectedType.colorType" />
  41. </el-form-item>
  42. <el-form-item label="荧光" prop="ZSFluorescenceType">
  43. <app-multiple class="el-form-item--col" :data-list="enums.fluorescenceTypeList"
  44. v-model="selectedType.fluorescenceType" />
  45. </el-form-item>
  46. <el-form-item label="净度" prop="ZSClarityType">
  47. <app-multiple class="el-form-item--col" :data-list="enums.clarityTypeList"
  48. v-model="selectedType.clarityType" />
  49. </el-form-item>
  50. <el-form-item label="原产地" prop="Origin">
  51. <el-input placeholder="请输入" v-model="formData.Origin" />
  52. </el-form-item>
  53. <el-form-item label="仓库" prop="WarehouseID">
  54. <el-select v-model="formData.WarehouseID">
  55. <el-option :label="item.warehousename" :value="item.autoid" v-for="(item, index) in warehouseList"
  56. :key="index" />
  57. </el-select>
  58. </el-form-item>
  59. <el-form-item label="金伯利编号" prop="CPCertNo">
  60. <el-input placeholder="请输入" v-model="formData.CPCertNo" />
  61. </el-form-item>
  62. <el-form-item label="市场价" prop="MarketPrice">
  63. <el-input type="number" placeholder="请输入" v-model="formData.MarketPrice">
  64. <template #append>{{ currencyInfo?.enumitemvalue }}</template>
  65. </el-input>
  66. </el-form-item>
  67. <el-form-item label="金伯利重量" prop="KPWeight">
  68. <el-input type="number" placeholder="请输入" v-model="formData.KPWeight">
  69. <template #append>(克拉)</template>
  70. </el-input>
  71. </el-form-item>
  72. <el-form-item label="商品图片" prop="ImagePath">
  73. <app-upload :file-types="['image']" type-message="请选择正确的图片类型" @change="onUploadChange" />
  74. </el-form-item>
  75. <el-form-item label="金伯利图片" prop="KPPath">
  76. <app-upload />
  77. </el-form-item>
  78. <el-form-item label="仓单扫描件" prop="WRPath">
  79. <app-upload />
  80. </el-form-item>
  81. <el-form-item class="el-form-item--row" label="备注" prop="Remark">
  82. <el-input type="textarea" v-model="formData.Remark" />
  83. </el-form-item>
  84. </el-form>
  85. </template>
  86. <script lang="ts" setup>
  87. import { ref, PropType, defineAsyncComponent } from 'vue'
  88. import { ElMessage } from 'element-plus'
  89. import type { FormInstance, FormRules } from 'element-plus'
  90. import { Category } from '@/constants/diamond'
  91. import { useDiamondForm } from '@/business/goods'
  92. import AppMultiple from '@pc/components/base/multiple/index.vue'
  93. import AppUpload from '@pc/components/base/upload/index.vue'
  94. defineProps({
  95. code: String,
  96. selectedRow: {
  97. type: Object as PropType<Ermcp.UserRole>,
  98. default: () => ({})
  99. }
  100. })
  101. const components = {
  102. performance: defineAsyncComponent(() => import('@pc/components/modules/performance/index.vue')),
  103. }
  104. const emit = defineEmits(['cancel'])
  105. const { loading, formData, performanceId, caratUnit, selectedType, enums, warehouseList, currencyInfo, addOrUpdate } = useDiamondForm(Category.Rough)
  106. const formRef = ref<FormInstance>()
  107. const formRules: FormRules = {
  108. ZSCategory: [{ required: true, message: '请选择商品分类' }],
  109. GoodsNo: [{ required: true, message: '请输入商品编号', trigger: 'blur' }],
  110. Origin: [{ required: true, message: '请输入原产地', trigger: 'blur' }],
  111. CPCertNo: [{ required: true, message: '请输入金伯利证书编号', trigger: 'blur' }],
  112. KPWeight: [{ required: true, message: '请输入金伯利证书重量', trigger: 'blur' }],
  113. ZSCurrencyType: [{ required: true, message: '请选择货币类型' }],
  114. Price: [{ required: true, message: '请输入总价' }],
  115. Weight: [{ required: true, message: '请输入总重量' }],
  116. WeightAvg: [{ required: true, message: '请输入平均重量' }],
  117. WarehouseID: [{ required: true, message: '请选择仓库' }],
  118. KPPath: [{ required: true, message: '请上传金伯利证书图片' }],
  119. PerformanceTemplateID: [{
  120. required: true,
  121. validator: (rule, value, callback) => {
  122. if (performanceId.value) {
  123. callback()
  124. } else {
  125. callback(new Error('请选择履约方式'))
  126. }
  127. }
  128. }],
  129. ZSColorType: [{
  130. required: true,
  131. validator: (rule, value, callback) => {
  132. if (formData.ZSColorType1 && formData.ZSColorType2) {
  133. callback()
  134. } else {
  135. callback(new Error('请选择颜色'))
  136. }
  137. }
  138. }],
  139. ZSClarityType: [{
  140. validator: (rule, value, callback) => {
  141. if ((!formData.ZSClarityType1 && !formData.ZSClarityType2) || (formData.ZSClarityType1 && formData.ZSClarityType2)) {
  142. callback()
  143. } else {
  144. callback(new Error('请选择净度'))
  145. }
  146. }
  147. }],
  148. ZSFluorescenceType: [{
  149. validator: (rule, value, callback) => {
  150. if ((!formData.ZSFluorescenceType1 && !formData.ZSFluorescenceType2) || (formData.ZSFluorescenceType1 && formData.ZSFluorescenceType2)) {
  151. callback()
  152. } else {
  153. callback(new Error('请选择荧光'))
  154. }
  155. }
  156. }]
  157. }
  158. const onUploadChange = (file: { filePath: string }) => {
  159. formData.ImagePath = file.filePath
  160. }
  161. const onSubmit = () => {
  162. formRef.value?.validate((valid) => {
  163. if (valid) {
  164. addOrUpdate().then(() => {
  165. ElMessage.success('提交成功')
  166. emit('cancel', true)
  167. }).catch((err) => {
  168. ElMessage.error('提交失败:' + err)
  169. })
  170. }
  171. })
  172. }
  173. // 暴露组件属性给父组件调用
  174. defineExpose({
  175. loading,
  176. submit: onSubmit
  177. })
  178. </script>