fancy.vue 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  1. <!-- 添加商品-彩色钻石 -->
  2. <template>
  3. <el-form ref="formRef" class="el-form--horizontal" label-width="100px" :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.number="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.number="formData.Weight">
  24. <template #append>(克拉)</template>
  25. </el-input>
  26. </el-form-item>
  27. <el-form-item label="克拉单价">
  28. <span>{{ currencyInfo?.param2 }}{{ caratUnit }} (总价/总重量)</span>
  29. </el-form-item>
  30. <el-form-item label="尺寸" prop="Size">
  31. <div class="el-form-item--col">
  32. <el-input-number v-model="formData.Size1" :controls="false" />
  33. <span>×</span>
  34. <el-input-number v-model="formData.Size2" :controls="false" />
  35. <span>×</span>
  36. <el-input-number v-model="formData.Size3" :controls="false" />
  37. </div>
  38. </el-form-item>
  39. <el-form-item label="形状" prop="ZSShapeType">
  40. <el-select v-model="shapeId" @change="shapeChange">
  41. <el-option :label="item.label" :value="item.value" v-for="(item, index) in enums.shapeTypeList"
  42. :key="index" />
  43. </el-select>
  44. </el-form-item>
  45. <el-form-item label="颜色" prop="ZSCZColorType">
  46. <div class="el-form-item--col">
  47. <el-select v-model="formData.ZSCZColor1Type">
  48. <el-option :label="item.label" :value="item.value"
  49. v-for="(item, index) in enums.fancyColorType1List" :key="index" />
  50. </el-select>
  51. <el-select v-model="formData.ZSCZColor2Type">
  52. <el-option :label="item.label" :value="item.value"
  53. v-for="(item, index) in enums.fancyColorType2List" :key="index" />
  54. </el-select>
  55. <el-select v-model="formData.ZSCZColor3Type">
  56. <el-option :label="item.label" :value="item.value"
  57. v-for="(item, index) in enums.fancyColorType3List" :key="index" />
  58. </el-select>
  59. </div>
  60. </el-form-item>
  61. <el-form-item label="净度" prop="ZSClarityType1">
  62. <el-select v-model="formData.ZSClarityType1">
  63. <el-option :label="item.label" :value="item.value" v-for="(item, index) in enums.clarityTypeList"
  64. :key="index" />
  65. </el-select>
  66. </el-form-item>
  67. <el-form-item label="抛光" prop="ZSPolishType1">
  68. <el-select v-model="formData.ZSPolishType1" clearable>
  69. <el-option :label="item.label" :value="item.value" v-for="(item, index) in enums.polishTypeList"
  70. :key="index" />
  71. </el-select>
  72. </el-form-item>
  73. <el-form-item label="对称" prop="ZSSymmetryType1">
  74. <el-select v-model="formData.ZSSymmetryType1" clearable>
  75. <el-option :label="item.label" :value="item.value" v-for="(item, index) in enums.symmetryTypeList"
  76. :key="index" />
  77. </el-select>
  78. </el-form-item>
  79. <el-form-item label="荧光" prop="ZSFluorescenceType1">
  80. <el-select v-model="formData.ZSFluorescenceType1" clearable>
  81. <el-option :label="item.label" :value="item.value" v-for="(item, index) in enums.fluorescenceTypeList"
  82. :key="index" />
  83. </el-select>
  84. </el-form-item>
  85. <el-form-item label="仓库" prop="WarehouseID">
  86. <el-select v-model="formData.WarehouseID">
  87. <el-option :label="item.warehousename" :value="item.autoid" v-for="(item, index) in warehouseList"
  88. :key="index" />
  89. </el-select>
  90. </el-form-item>
  91. <el-form-item label="市场价" prop="MarketPrice">
  92. <el-input type="number" placeholder="请输入" v-model.number="formData.MarketPrice">
  93. <template #append>{{ currencyInfo?.enumitemvalue }}</template>
  94. </el-input>
  95. </el-form-item>
  96. <el-form-item label="证书类型" prop="ZSCertType">
  97. <el-select v-model="formData.ZSCertType" clearable>
  98. <el-option :label="item.label" :value="item.value" v-for="(item, index) in enums.certTypeList"
  99. :key="index" />
  100. </el-select>
  101. </el-form-item>
  102. <el-form-item label="证书编号" prop="CerNo">
  103. <el-input placeholder="请输入" v-model="formData.CerNo" />
  104. </el-form-item>
  105. <el-form-item label="商品图片" prop="ImagePath">
  106. <app-upload :file-types="['image']" type-message="请选择正确的图片类型" @change="onUploadChange" />
  107. </el-form-item>
  108. <el-form-item class="el-form-item--row" label="备注" prop="Remark">
  109. <el-input type="textarea" v-model="formData.Remark" />
  110. </el-form-item>
  111. </el-form>
  112. </template>
  113. <script lang="ts" setup>
  114. import { ref, PropType, defineAsyncComponent } from 'vue'
  115. import { ElMessage } from 'element-plus'
  116. import type { FormInstance, FormRules } from 'element-plus'
  117. import { Category } from '@/constants/diamond'
  118. import { useDiamondForm } from '@/business/goods'
  119. import AppUpload from '@pc/components/base/upload/index.vue'
  120. defineProps({
  121. code: String,
  122. selectedRow: {
  123. type: Object as PropType<Ermcp.UserRole>,
  124. default: () => ({})
  125. }
  126. })
  127. const components = {
  128. performance: defineAsyncComponent(() => import('@pc/components/modules/performance/index.vue')),
  129. }
  130. const emit = defineEmits(['cancel'])
  131. const { loading, formData, performanceId, shapeId, caratUnit, enums, warehouseList, currencyInfo, addOrUpdate } = useDiamondForm(Category.Fancy)
  132. const formRef = ref<FormInstance>()
  133. const formRules: FormRules = {
  134. ZSCategory: [{ required: true, message: '请选择商品分类' }],
  135. GoodsNo: [{ required: true, message: '请输入商品编号', trigger: 'blur' }],
  136. ZSCurrencyType: [{ required: true, message: '请选择货币类型' }],
  137. Price: [{ required: true, type: 'number', message: '请输入价格' }],
  138. Weight: [{ required: true, type: 'number', message: '请输入克拉重量' }],
  139. ZSClarityType1: [{ required: true, message: '请选择净度' }],
  140. WarehouseID: [{ required: true, message: '请选择仓库' }],
  141. PerformanceTemplateID: [{
  142. required: true,
  143. validator: (rule, value, callback) => {
  144. if (performanceId.value) {
  145. callback()
  146. } else {
  147. callback(new Error('请选择履约方式'))
  148. }
  149. }
  150. }],
  151. ZSShapeType: [{
  152. required: true,
  153. validator: (rule, value, callback) => {
  154. if (shapeId.value) {
  155. callback()
  156. } else {
  157. callback(new Error('请选择形状'))
  158. }
  159. }
  160. }],
  161. ZSCZColorType: [{
  162. required: true,
  163. validator: (rule, value, callback) => {
  164. if (formData.ZSCZColor1Type && formData.ZSCZColor2Type && formData.ZSCZColor3Type) {
  165. callback()
  166. } else {
  167. callback(new Error('请选择颜色'))
  168. }
  169. }
  170. }],
  171. Size: [{
  172. validator: (rule, value, callback) => {
  173. const { Size1, Size2, Size3 } = formData
  174. if ((!Size1 && !Size2 && !Size3) || (Size1 && Size2 && Size3)) {
  175. callback()
  176. } else {
  177. callback(new Error('请输入尺寸'))
  178. }
  179. }
  180. }],
  181. }
  182. // 选择形状
  183. const shapeChange = (value: number) => {
  184. if (value) {
  185. formData.ZSShapeType = [value]
  186. } else {
  187. formData.ZSShapeType = []
  188. }
  189. }
  190. const onUploadChange = (file: { filePath: string }) => {
  191. formData.ImagePath = file.filePath
  192. }
  193. const onSubmit = () => {
  194. formRef.value?.validate((valid) => {
  195. if (valid) {
  196. addOrUpdate().then(() => {
  197. ElMessage.success('提交成功')
  198. emit('cancel', true)
  199. }).catch((err) => {
  200. ElMessage.error('提交失败:' + err)
  201. })
  202. }
  203. })
  204. }
  205. // 暴露组件属性给父组件调用
  206. defineExpose({
  207. loading,
  208. submit: onSubmit
  209. })
  210. </script>