form.vue 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275
  1. <template>
  2. <xn-form-container
  3. :title="formData.id ? '编辑订单管理' : '增加订单管理'"
  4. :width="700"
  5. v-model:open="open"
  6. :destroy-on-close="true"
  7. @close="onClose"
  8. >
  9. <a-form ref="formRef" :model="formData" :rules="formRules" :wrapper-col="wrapperCol" :label-col="labelCol">
  10. <a-form-item label="订单编号:" name="orderNumber">
  11. <a-input v-model:value="formData.orderNumber" placeholder="请输入订单编号" allow-clear disabled/>
  12. </a-form-item>
  13. <!-- <a-form-item label="订单名称:" name="orderName">
  14. <a-input v-model:value="formData.orderName" placeholder="请输入订单名称" allow-clear disabled/>
  15. </a-form-item>-->
  16. <a-form-item label="客户信息:" name="customerId">
  17. <a-select v-model:value="formData.customerId" placeholder="请选择客户信息"
  18. :options="customerIdList" @change="onChangeCustomer"
  19. > </a-select>
  20. </a-form-item>
  21. <a-form-item label="销售订单信息:" name="saleOrderInfo">
  22. <a-select v-model:value="formData.saleOrderInfo" placeholder="请选择订单信息"
  23. :options="saleOrderInfoList" @change="onChangeSaleOrder"
  24. > </a-select>
  25. </a-form-item>
  26. <!-- <a-form-item label="订单类型:" name="orderType" style="display:none">
  27. <a-select v-model:value="formData.orderType" placeholder="请选择订单类型"
  28. :options="orderTypeList"
  29. > </a-select>
  30. </a-form-item>-->
  31. <a-form-item label="订单类型:" name="orderType" >
  32. <a-radio-group button-style="solid" v-model:value="formData.orderType" disabled>
  33. <a-radio-button value="1">
  34. 包运订单
  35. </a-radio-button>
  36. <a-radio-button value="2">
  37. 自提订单
  38. </a-radio-button>
  39. </a-radio-group>
  40. </a-form-item>
  41. <a-form-item label="提货时间:" name="deliveryTimeId" >
  42. <a-select v-model:value="formData.deliveryTimeId" placeholder="请选择提货时间"
  43. :options="deliveryTimeIdList"
  44. > </a-select>
  45. </a-form-item>
  46. <a-form-item label="供货商:" name="supplierIdList">
  47. <a-select v-model:value="formData.supplierIdList" placeholder="请选择供货商信息"
  48. :options="supplierIds" mode="tags"
  49. > </a-select>
  50. </a-form-item>
  51. <a-form-item label="运费单价:" name="freightPrice">
  52. <a-input-number v-model:value="formData.freightPrice" style="width:90%" :precision="2" :min="0.01" :max="999999" placeholder="请输入运费单价" allow-clear/><span style="margin-left:10px;">元/吨</span>
  53. </a-form-item>
  54. <a-form-item label="货品名称:" name="goodsName">
  55. <a-input v-model:value="formData.goodsName" placeholder="请输入货品名称" allow-clear disabled/>
  56. </a-form-item>
  57. <a-form-item label="货品编码:" name="goodsCode">
  58. <a-input v-model:value="formData.goodsCode" placeholder="请输入货品编码" allow-clear disabled/>
  59. </a-form-item>
  60. <a-form-item label="订单重量:" name="orderWeight">
  61. <a-input-number v-model:value="formData.orderWeight" style="width:90%" :precision="2" :min="1" :max="999999" placeholder="请输入订单重量" allow-clear disabled/><span style="margin-left:10px;">吨</span>
  62. </a-form-item>
  63. <a-form-item label="单价:" name="price">
  64. <a-input v-model:value="formData.price" style="width:90%" placeholder="请输入单价" allow-clear disabled/><span style="margin-left:10px;">元/吨</span>
  65. </a-form-item>
  66. <a-form-item label="业务员:" name="businessName">
  67. <a-input v-model:value="formData.businessName" placeholder="请输入业务员" allow-clear disabled/>
  68. </a-form-item>
  69. <a-form-item label="送货地址:" name="shipAddress">
  70. <a-input v-model:value="formData.shipAddress" placeholder="请输入送货地址" allow-clear disabled/>
  71. </a-form-item>
  72. </a-form>
  73. <template #footer>
  74. <a-button style="margin-right: 8px" @click="onClose">关闭</a-button>
  75. <a-button type="primary" @click="onSubmit" :loading="submitLoading">保存</a-button>
  76. </template>
  77. </xn-form-container>
  78. </template>
  79. <script setup name="bizOrderForm">
  80. import { cloneDeep } from 'lodash-es'
  81. import { required } from '@/utils/formRules'
  82. import bizOrderApi from '@/api/biz/bizOrderApi'
  83. import tool from '@/utils/tool'
  84. import bizGoodsApi from '@/api/biz/bizGoodsApi'
  85. import customerApi from '@/api/biz/customerApi'
  86. import goodsConfApi from '@/api/biz/goodsConfApi'
  87. import bizSaleOrderApi from "@/api/biz/bizSaleOrderApi";
  88. import bizSupplierApi from "@/api/biz/bizSupplierApi";
  89. // 抽屉状态
  90. const open = ref(false)
  91. const emit = defineEmits({ successful: null })
  92. const formRef = ref()
  93. // 表单数据
  94. const formData = ref({})
  95. const submitLoading = ref(false)
  96. //设置表单样式
  97. const labelCol = ref({ span: 5})
  98. const wrapperCol = ref({ span: 16})
  99. //订单类型
  100. const orderTypeList = tool.dictList('order_type')
  101. const goodIdList = ref()
  102. const customerIdList = ref()
  103. const saleOrderInfoList = ref()
  104. const deliveryTimeIdList = ref()
  105. const supplierIds = ref()
  106. // 打开抽屉
  107. const onOpen = (record) => {
  108. open.value = true
  109. if (record) {
  110. let recordData = cloneDeep(record)
  111. formData.value = Object.assign({}, recordData)
  112. }
  113. //查询客户信息
  114. customerApi.getList().then((res)=>{
  115. customerIdList.value = res.map((item)=>{
  116. return{
  117. value:item.id,
  118. label:item.name
  119. }
  120. })
  121. })
  122. //查询供货商信息
  123. bizSupplierApi.getList().then((res)=>{
  124. supplierIds.value = res.map((item)=>{
  125. return{
  126. value:item.id,
  127. label:item.supplierName
  128. }
  129. })
  130. })
  131. /*if(formData.value.customerId){
  132. customerApi.getOrderByCustomerId({id:formData.value.customerId}).then((res)=>{
  133. saleOrderInfoList.value = res.orderList.map((item)=>{
  134. return{
  135. value:item.orderName+'-'+item.orderNumber+'-'+item.goodsName+'-'+item.orderWeight+'-'+item.orderType,
  136. label:item.orderName
  137. }
  138. })
  139. })
  140. }*/
  141. if(formData.value.customerId){
  142. bizSaleOrderApi.queryByErp({id:formData.value.customerId,flag:formData.value.id?"edit":"add"}).then((res)=>{
  143. saleOrderInfoList.value = res.map((item)=>{
  144. return{
  145. value:item.id,
  146. label:item.saleOrderNumber
  147. }
  148. })
  149. })
  150. }
  151. if(formData.value.saleOrderInfo){
  152. bizSaleOrderApi.detailById({id:formData.value.saleOrderInfo}).then((res)=>{
  153. //根据货品名称和重量查询提货时间段
  154. goodsConfApi.getList({goodsName:res.saleGoodsName,goodsCode:res.goodsCode,needWeight:res.saleOrderWeight}).then((res)=>{
  155. deliveryTimeIdList.value = res.map((item)=>{
  156. return{
  157. value:item.id,
  158. label:item.confStartTime+'~'+item.confEndTime
  159. }
  160. })
  161. })
  162. })
  163. }
  164. }
  165. //客户点击时间
  166. const onChangeCustomer =(value)=>{
  167. formData.value.saleOrderInfo = ''
  168. formData.value.deliveryTimeId = ''
  169. saleOrderInfoList.value = ''
  170. bizSaleOrderApi.queryByErp({id:formData.value.customerId,flag:formData.value.id?"edit":"add"}).then((res)=>{
  171. saleOrderInfoList.value = res.map((item)=>{
  172. return{
  173. value:item.id,
  174. label:item.saleOrderNumber
  175. }
  176. })
  177. })
  178. }
  179. //订单点击时间
  180. const onChangeSaleOrder = (value) =>{
  181. bizSaleOrderApi.detailById({id:value}).then((res)=>{
  182. formData.value.orderName = res.saleOrderName
  183. formData.value.orderNumber= res.saleOrderNumber
  184. formData.value.goodsName = res.saleGoodsName
  185. formData.value.goodsCode = res.saleGoodsCode
  186. formData.value.orderWeight = res.saleOrderWeight
  187. formData.value.orderType = res.saleOrderType
  188. formData.value.shipAddress = res.shipAddress
  189. formData.value.price = res.salePrice
  190. formData.value.businessName = res.businessName
  191. formData.value.deliveryTimeId = ''
  192. //根据货品名称和重量查询提货时间段
  193. console.log("goodsName:"+formData.value.goodsName)
  194. console.log("needWeight:"+formData.value.orderWeight)
  195. goodsConfApi.getList({goodsName:formData.value.goodsName,goodsCode:formData.value.goodsCode,needWeight:formData.value.orderWeight}).then((res)=>{
  196. deliveryTimeIdList.value = res.map((item)=>{
  197. return{
  198. value:item.id,
  199. label:item.confStartTime+'~'+item.confEndTime
  200. }
  201. })
  202. })
  203. })
  204. }
  205. // 关闭抽屉
  206. const onClose = () => {
  207. formRef.value.resetFields()
  208. formData.value = {}
  209. open.value = false
  210. goodIdList.value = {}
  211. customerIdList.value = {}
  212. saleOrderInfoList.value = {}
  213. deliveryTimeIdList.value = {}
  214. }
  215. // 默认要校验的
  216. const formRules = {
  217. //orderNumber: [required('请输入订单编号')],
  218. //orderName: [required('请输入订单名称')],
  219. customerId:[required('请选择客户信息')],
  220. saleOrderInfo:[required('请选择订单信息')],
  221. deliveryTimeId: [required('请选择提货时间')],
  222. orderWeight: [required('请输入订单重量')],
  223. orderType: [required('请选择订单类型')],
  224. supplierIdList: [required('请选择供货商信息')],
  225. freightPrice: [required('请输入运费单价')],
  226. }
  227. // 验证并提交数据
  228. const onSubmit = () => {
  229. formRef.value
  230. .validate()
  231. .then(() => {
  232. submitLoading.value = true
  233. const formDataParam = cloneDeep(formData.value)
  234. bizOrderApi
  235. .bizOrderSubmitForm(formDataParam, formDataParam.id)
  236. .then(() => {
  237. onClose()
  238. emit('successful')
  239. })
  240. .finally(() => {
  241. submitLoading.value = false
  242. })
  243. })
  244. .catch(() => {})
  245. }
  246. // 抛出函数
  247. defineExpose({
  248. onOpen
  249. })
  250. </script>
  251. <style>
  252. /* 修改禁用状态下的颜色 */
  253. .ant-radio-button-wrapper-disabled {
  254. color: black !important; /* 设置文字颜色 */
  255. background-color: #f0f0f0 !important; /* 设置背景颜色 */
  256. }
  257. /* 修改禁用状态下选中项的颜色 */
  258. .ant-radio-button-wrapper-checked.ant-radio-button-wrapper-disabled {
  259. color: white !important; /* 设置文字颜色 */
  260. background-color: blue !important; /* 设置选中项的背景颜色 */
  261. }
  262. </style>