dispatch.vue 9.0 KB

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