dispatchload.vue 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290
  1. <template>
  2. <xn-form-container
  3. :title="formData.id ? '起卸调度' : '起卸调度'"
  4. :width="900"
  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="loadNumber">
  11. <a-input v-model:value="formData.loadNumber" placeholder="请输入预约单号" allow-clear disabled/>
  12. </a-form-item>
  13. <a-form-item label="起卸点位:" name="loadPointId">
  14. <a-select v-model:value="formData.loadPointId" placeholder="请选择装卸点位"
  15. :options="loadPointIdList" @change="onChangePoint"
  16. > </a-select>
  17. </a-form-item>
  18. <a-form-item label="起卸时间:" name="loadTimeId" >
  19. <a-select v-model:value="formData.loadTimeId" placeholder="请选择装卸时间"
  20. :options="loadTimeIdList" @change="onChangeLoadTime"
  21. > </a-select>
  22. </a-form-item>
  23. <!-- <a-form-item label="可约次数:" name="availableNumber" v-show="numberFlag">
  24. <a-input v-model:value="formData.availableNumber" placeholder="请输入可约次数" allow-clear disabled/>
  25. </a-form-item>
  26. <a-form-item label="已约次数:" name="alreadyNumber" v-show="numberFlag">
  27. <a-input v-model:value="formData.alreadyNumber" placeholder="请输入已约次数" allow-clear disabled/>
  28. </a-form-item>-->
  29. </a-form>
  30. <s-table
  31. ref="tableRef"
  32. :columns="columns"
  33. :data="loadData"
  34. bordered
  35. :row-key="(record) => record.id"
  36. >
  37. <template #bodyCell="{ column, record }">
  38. <template v-if="column.dataIndex === 'action'">
  39. <a-space>
  40. <a-button type="link" size="small" v-if="hasPerm('bizLoadReplace')" @click="replaceRef.onOpen(record)">更换</a-button>
  41. </a-space>
  42. <a-space>
  43. <a-button type="link" danger size="small" v-if="hasPerm('bizOrderDispatchDelete')" @click="deleteConfig(record)">删除</a-button>
  44. </a-space>
  45. </template>
  46. </template>
  47. </s-table>
  48. <template #footer>
  49. <a-button style="margin-right: 8px" @click="onClose">关闭</a-button>
  50. <a-button type="primary" @click="onSubmit" :loading="submitLoading">保存</a-button>
  51. </template>
  52. <Replace ref="replaceRef" @successful="tableRef.refresh(true)" />
  53. </xn-form-container>
  54. </template>
  55. <script setup name="bizOrderForm">
  56. import { cloneDeep } from 'lodash-es'
  57. import { required } from '@/utils/formRules'
  58. import tool from '@/utils/tool'
  59. import goodsConfApi from '@/api/biz/goodsConfApi'
  60. import bizSaleOrderApi from "@/api/biz/bizSaleOrderApi";
  61. import bizLoadPointApi from "@/api/biz/bizLoadPointApi";
  62. import bizLoadTimeApi from "@/api/biz/bizLoadTimeApi"
  63. import bizOrderLoadApi from "@/api/biz/bizOrderLoadApi";
  64. import {ExclamationCircleOutlined} from '@ant-design/icons-vue';
  65. import {Modal} from 'ant-design-vue';
  66. import {createVNode} from 'vue';
  67. import Replace from './replaceload.vue'
  68. import bizLoadDispatchApi from "@/api/biz/bizLoadDispatchApi";
  69. // 抽屉状态
  70. const open = ref(false)
  71. const emit = defineEmits({ successful: null })
  72. const formRef = ref()
  73. const tableRef = ref()
  74. const replaceRef = ref()
  75. const numberFlag = ref(false)
  76. // 表单数据
  77. const formData = ref({})
  78. const submitLoading = ref(false)
  79. //设置表单样式
  80. const labelCol = ref({ span: 5})
  81. const wrapperCol = ref({ span: 16})
  82. //订单类型
  83. const orderTypeList = tool.dictList('order_type')
  84. const goodIdList = ref()
  85. const customerIdList = ref()
  86. const saleOrderInfoList = ref()
  87. const deliveryTimeIdList = ref()
  88. const supplierIdList = ref()
  89. const loadPointIdList = ref()
  90. const loadTimeIdList = ref()
  91. // 打开抽屉
  92. const onOpen = (record) => {
  93. open.value = true
  94. if (record) {
  95. let recordData = cloneDeep(record)
  96. formData.value = Object.assign({}, recordData)
  97. }
  98. //装货点位查询
  99. bizLoadPointApi.getList({loadType:'1'}).then((res)=>{
  100. loadPointIdList.value = res.map((item)=>{
  101. return{
  102. value:item.id,
  103. label:item.loadPoint
  104. }
  105. })
  106. })
  107. if(formData.value.saleOrderInfo){
  108. bizSaleOrderApi.detailById({id:formData.value.saleOrderInfo}).then((res)=>{
  109. //根据货品名称和重量查询提货时间段
  110. goodsConfApi.getList({goodsName:res.saleGoodsName,goodsCode:res.goodsCode,needWeight:res.saleOrderWeight}).then((res)=>{
  111. deliveryTimeIdList.value = res.map((item)=>{
  112. return{
  113. value:item.id,
  114. label:item.confStartTime+'~'+item.confEndTime
  115. }
  116. })
  117. })
  118. })
  119. }
  120. }
  121. //卸货点位点击事件
  122. const onChangePoint =(value)=>{
  123. formData.value.loadTimeId = ''
  124. loadTimeIdList.value = ''
  125. formData.value.availableNumber = ''
  126. formData.value.alreadyNumber = ''
  127. bizLoadTimeApi.searchNow({pointId:formData.value.loadPointId}).then((res)=>{
  128. loadTimeIdList.value = res.map((item)=>{
  129. return{
  130. value:item.id,
  131. label:item.beginTime+'~'+item.endTime
  132. }
  133. })
  134. })
  135. }
  136. const onChangeLoadTime = (value) => {
  137. bizLoadTimeApi.bizLoadTimeDetail({id:value}).then((res)=>{
  138. formData.value.availableNumber = res.availableNumber
  139. formData.value.alreadyNumber = res.alreadyNumber
  140. //numberFlag.value = true
  141. })
  142. }
  143. const loadData = (parameter) => {
  144. return bizLoadDispatchApi.getPageList({appointId:formData.value.id,loadType:'1'}).then((data) => {
  145. return data
  146. })
  147. }
  148. const columns = [
  149. {
  150. title: '装卸点位',
  151. dataIndex: 'loadPoint',
  152. align:'center'
  153. },
  154. {
  155. title: '开始时间',
  156. dataIndex: 'beginTime',
  157. align:'center'
  158. },
  159. {
  160. title: '结束时间',
  161. dataIndex: 'endTime',
  162. align:'center'
  163. },
  164. /*{
  165. title: '可约次数',
  166. dataIndex: 'availableNumber',
  167. align:'center'
  168. },
  169. {
  170. title: '已约次数',
  171. dataIndex: 'alreadyNumber',
  172. align:'center'
  173. },*/
  174. ]
  175. // 操作栏通过权限判断是否显示
  176. columns.push({
  177. title: '操作',
  178. dataIndex: 'action',
  179. align: 'center',
  180. width: 150
  181. })
  182. // 关闭抽屉
  183. const onClose = () => {
  184. formRef.value.resetFields()
  185. formData.value = {}
  186. open.value = false
  187. loadTimeIdList.value = ''
  188. numberFlag.value = false
  189. emit('successful')
  190. }
  191. // 默认要校验的
  192. const formRules = {
  193. //orderNumber: [required('请输入订单编号')],
  194. //orderName: [required('请输入订单名称')],
  195. //customerId:[required('请选择客户信息')],
  196. loadPointId:[required('请选择装卸点位')],
  197. loadTimeId: [required('请选择装卸时间')],
  198. }
  199. // 删除
  200. const deleteConfig = (record) => {
  201. Modal.confirm({
  202. title: '确定删除该数据吗?',
  203. icon: createVNode(ExclamationCircleOutlined),
  204. content: '',
  205. onOk() {
  206. submitLoading.value = true
  207. let params = [
  208. {
  209. id: record.id
  210. }
  211. ]
  212. bizLoadDispatchApi
  213. .bizLoadDispatchDelete(params)
  214. .then(() => {
  215. tableRef.value.refresh(true)
  216. })
  217. .finally(() => {
  218. submitLoading.value = false
  219. })
  220. },
  221. onCancel() {}
  222. })
  223. }
  224. // 验证并提交数据
  225. const onSubmit = () => {
  226. formRef.value
  227. .validate()
  228. .then(() => {
  229. submitLoading.value = true
  230. const formDataParam = cloneDeep(formData.value)
  231. formDataParam.appointId = formDataParam.id
  232. formDataParam.id = ''
  233. bizLoadDispatchApi
  234. .bizLoadDispatchSubmitLoad(formDataParam, formDataParam.id)
  235. .then(() => {
  236. onClose()
  237. })
  238. .finally(() => {
  239. submitLoading.value = false
  240. })
  241. })
  242. .catch(() => {})
  243. }
  244. // 抛出函数
  245. defineExpose({
  246. onOpen
  247. })
  248. </script>
  249. <style>
  250. /* 修改禁用状态下的颜色 */
  251. .ant-radio-button-wrapper-disabled {
  252. color: black !important; /* 设置文字颜色 */
  253. background-color: #f0f0f0 !important; /* 设置背景颜色 */
  254. }
  255. /* 修改禁用状态下选中项的颜色 */
  256. .ant-radio-button-wrapper-checked.ant-radio-button-wrapper-disabled {
  257. color: white !important; /* 设置文字颜色 */
  258. background-color: blue !important; /* 设置选中项的背景颜色 */
  259. }
  260. </style>