index.vue 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806
  1. <template>
  2. <div class="ele-body">
  3. <el-card shadow="never" v-loading="loading">
  4. <search ref="search" @search="reload"></search>
  5. <ele-pro-table ref="tableRef" :columns="columns" :datasource="datasource" :pageSize="20"
  6. :pageSizes="[20, 30, 40, 50, 100]" row-key="id" @selection-change="handleSelectionChange" :initLoad="false"
  7. @done="onDone">
  8. <template v-slot:toolbar>
  9. <el-button type="primary" icon="el-icon-plus" size="mini" @click="handleEstimatedDelivery">交期预估</el-button>
  10. <el-button style="background-color: #dd2c00;color: white;border-color: #dd2c00" icon="el-icon-delete"
  11. size="mini" :disabled="multiple" @click="handleDelete">批量删除</el-button>
  12. <!-- <el-button style="background-color: #ec407a;color: white;border-color: #ec407a" icon="el-icon-download"
  13. size="mini" :disabled="single" @click="handleExpect">交期预估</el-button> -->
  14. <!-- <el-button style="background-color: #cddc39;color: white;border-color: #cddc39" icon="el-icon-download"
  15. size="mini" :disabled="multiple" @click="handleAllExpect">全部预估</el-button> -->
  16. <el-button style="background-color: #ec407a;color: white;border-color: #ec407a" icon="el-icon-download"
  17. size="mini" @click="importTemplate">下载模板</el-button>
  18. <el-button type="info" icon="el-icon-upload2" size="mini" @click="handleImport">导入</el-button>
  19. <el-button type="warning" icon="el-icon-download" size="mini" @click="handleExport">导出</el-button>
  20. <el-button style="background-color: #8bc34a;color: white;border-color: #8bc34a" icon="el-icon-download"
  21. size="mini" :disabled="ids.length == 0" @click="handleSaleorder">转销售订单</el-button>
  22. <!-- <el-button type="success" icon="el-icon-download" size="mini"
  23. @click="handleAllSaleorder">一次性转销售订单</el-button> -->
  24. </template>
  25. <template v-slot:status="{ row }">
  26. {{ row.status == 0 ? '未预估' : row.status == 1 ? '已预估' : '已转销售单' }}
  27. </template>
  28. <!-- 操作列 -->
  29. <template v-slot:action="{ row }">
  30. <el-link type="primary" :underline="false" icon="el-icon-edit" @click="handleUpdate(row)">
  31. 修改
  32. </el-link>
  33. <!-- <el-link type="danger" :underline="false" icon="el-icon-delete" @click="handleDelete(row)">
  34. 删除
  35. </el-link> -->
  36. <el-popconfirm class="ele-action" title='是否确认删除此数据?' @confirm="handleDelete(row)">
  37. <template v-slot:reference>
  38. <el-link type="danger" :underline="false" icon="el-icon-delete">
  39. 删除
  40. </el-link>
  41. </template>
  42. </el-popconfirm>
  43. </template>
  44. </ele-pro-table>
  45. <!-- 添加或修改销售订单对话框 -->
  46. <ele-modal :title="titleExpect" :visible.sync="openExpect" :before-close="cancelExpect"
  47. :close-on-click-modal="false" :close-on-press-escape="false" append-to-body width="70%" :maxable="true">
  48. <el-table v-loading="loading" :data="salesOrderExpectList">
  49. <el-table-column label="序号" align="center" prop="id" />
  50. <el-table-column label="年份" align="center" prop="year" />
  51. <el-table-column label="月份" align="center" prop="month" />
  52. <el-table-column label="日期" align="center" prop="day" />
  53. <el-table-column label="预计交付日期" align="center" prop="deliverDay" />
  54. <el-table-column label="规划产能(吨)" align="center" prop="plannedCapacity" />
  55. <el-table-column label="已排产产能" align="center" prop="plannedSumCapacity" />
  56. <el-table-column label="未排产产能" align="center" prop="unplannedSumCapacity" />
  57. <el-table-column label="本次排产产能" align="center" prop="currentPlannedSumCapacity" />
  58. <el-table-column label="已排产单号列表" align="center" prop="plannedOrder" />
  59. <el-table-column label="已排产产能列表" align="center" prop="plannedOrderCapacity" />
  60. </el-table>
  61. <div slot="footer" class="dialog-footer">
  62. <el-button type="primary" :disabled="single" @click="submitFormExpect">确定交期</el-button>
  63. <el-button type="primary" :disabled="multiple" @click="submitFormAllExpect">确定所有交期</el-button>
  64. <el-button @click="cancelExpect">取 消</el-button>
  65. </div>
  66. </ele-modal>
  67. <!-- 添加或修改销售订单对话框 -->
  68. <ele-modal :title="title" :visible.sync="open" :before-close="cancel" :close-on-click-modal="false"
  69. :close-on-press-escape="false" append-to-body width="70%" :maxable="true">
  70. <el-form ref="form" :model="form" :rules="rules" label-width="80px">
  71. <el-row>
  72. <el-col :span="8">
  73. <el-form-item label="销售订单" prop="preSalesOrderNumber">
  74. <el-input v-model="form.preSalesOrderNumber" placeholder="请输入销售订单" />
  75. </el-form-item>
  76. </el-col>
  77. <el-col :span="8">
  78. <el-form-item label="客户代号" prop="customerCode">
  79. <el-input v-model="form.customerCode" placeholder="请输入客户代号" />
  80. </el-form-item>
  81. </el-col>
  82. <el-col :span="8">
  83. <el-form-item label="客户名称" prop="customerName">
  84. <el-input v-model="form.customerName" placeholder="请输入客户名称" />
  85. </el-form-item>
  86. </el-col>
  87. </el-row>
  88. <el-row>
  89. <el-col :span="8">
  90. <el-form-item label="产品描述" prop="productDescription">
  91. <el-input v-model="form.productDescription" type="textarea" placeholder="请输入内容" />
  92. </el-form-item>
  93. </el-col>
  94. <el-col :span="8">
  95. <el-form-item label="产品编码" prop="productCode">
  96. <el-input v-model="form.productCode" placeholder="请输入产品编码" />
  97. </el-form-item>
  98. </el-col>
  99. <el-col :span="8">
  100. <el-form-item label="订单数量" prop="orderQuantity">
  101. <el-input v-model="form.orderQuantity" placeholder="请输入订单数量" />
  102. </el-form-item>
  103. </el-col>
  104. </el-row>
  105. <el-row>
  106. <el-col :span="8">
  107. <el-form-item label="单位" prop="unit">
  108. <el-input v-model="form.unit" placeholder="请输入单位" />
  109. </el-form-item>
  110. </el-col>
  111. <el-col :span="8">
  112. <el-form-item label="重量" prop="weightKg">
  113. <el-input v-model="form.weightKg" placeholder="请输入重量" />
  114. </el-form-item>
  115. </el-col>
  116. <el-col :span="8">
  117. <el-form-item label="客户交期" prop="customerDeliveryDate">
  118. <el-date-picker clearable v-model="form.customerDeliveryDate" type="date" value-format="yyyy-MM-dd"
  119. placeholder="请选择客户交期">
  120. </el-date-picker>
  121. </el-form-item>
  122. </el-col>
  123. </el-row>
  124. <el-row>
  125. <el-col :span="8">
  126. <el-form-item label="生产交期" prop="productionDeliveryDate">
  127. <el-date-picker clearable v-model="form.productionDeliveryDate" type="date" value-format="yyyy-MM-dd"
  128. placeholder="请选择生产交期">
  129. </el-date-picker>
  130. </el-form-item>
  131. </el-col>
  132. <el-col :span="8">
  133. <el-form-item label="材料编码" prop="materialCode">
  134. <el-input v-model="form.materialCode" placeholder="请输入材料编码" />
  135. </el-form-item>
  136. </el-col>
  137. <el-col :span="8">
  138. <el-form-item label="材料描述" prop="materialDescription">
  139. <el-input v-model="form.materialDescription" type="textarea" placeholder="请输入内容" />
  140. </el-form-item>
  141. </el-col>
  142. </el-row>
  143. <el-row>
  144. <el-col :span="8">
  145. <el-form-item label="物料数量" prop="materialQuantity">
  146. <el-input v-model="form.materialQuantity" placeholder="请输入物料数量" />
  147. </el-form-item>
  148. </el-col>
  149. <el-col :span="8">
  150. <el-form-item label="物料单位" prop="materialUnit">
  151. <el-input v-model="form.materialUnit" placeholder="请输入物料单位" />
  152. </el-form-item>
  153. </el-col>
  154. <el-col :span="8">
  155. <el-form-item label="物料重量" prop="materialWeightKg">
  156. <el-input v-model="form.materialWeightKg" placeholder="请输入物料重量" />
  157. </el-form-item>
  158. </el-col>
  159. </el-row>
  160. </el-form>
  161. <div slot="footer" class="dialog-footer">
  162. <el-button type="primary" @click="submitForm">确 定</el-button>
  163. <el-button @click="cancel">取 消</el-button>
  164. </div>
  165. </ele-modal>
  166. <!-- 直报系统导入对话框 -->
  167. <el-dialog :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
  168. <el-upload class="avatar-uploader" action="#" :show-file-list="false" :http-request="uploadFile"
  169. :before-upload="beforeUpload" :on-change="handleChange" ref="uploadFile">
  170. <el-button type="warning" size="mini">批量导入</el-button>
  171. </el-upload>
  172. </el-dialog>
  173. </el-card>
  174. </div>
  175. </template>
  176. <script>
  177. import { estimateDeliveryDates, createAll, convertToSalesOrder, importTemplate, exportFile, importFile, listSalesorder, getSalesOrder, delSalesorder, addSalesorder, updateSalesorder, listSalesOrderExpect, occupyRes, listSalesOrderOccupyRes, listSalesorderExpectAll, occupyAllRes } from "@/api/aps/presalesorder";
  178. import { API_BASE_URL, TOKEN_HEADER_NAME, LAYOUT_PATH } from '@/config/setting';
  179. import { getToken, setToken } from '@/utils/token-util';
  180. import { download } from '@/utils/request';
  181. import modalTitle from '@/components/modalTitle.vue';
  182. import search from './search.vue';
  183. export default {
  184. name: "PreSalesorder",
  185. components: { modalTitle, search },
  186. data() {
  187. return {
  188. fullscreen: false,
  189. fileList: [],
  190. isSubmitting: true,
  191. // 用户导入参数
  192. upload: {
  193. // 是否显示弹出层(用户导入)
  194. open: false,
  195. // 弹出层标题(用户导入)
  196. title: "",
  197. // 是否禁用上传
  198. isUploading: false,
  199. // 是否更新已经存在的用户数据
  200. updateSupport: 0,
  201. // 设置上传的请求头部
  202. // headers: {
  203. // Authorization: "Bearer " +getToken()
  204. // },
  205. // 上传的地址
  206. url: API_BASE_URL + "/aps/presalesorder/importData"
  207. },
  208. // 遮罩层
  209. loading: false,
  210. // 选中数组
  211. ids: [],
  212. selectionData: [],
  213. // 非单个禁用
  214. single: true,
  215. // 非多个禁用
  216. multiple: true,
  217. // 总条数
  218. total: 0,
  219. // 销售订单表格数据
  220. salesorderList: [],
  221. // 销售订单交期预估表格数据
  222. salesOrderExpectList: [],
  223. // 弹出层标题
  224. title: "",
  225. // 是否显示弹出层
  226. open: false,
  227. // 弹出层标题
  228. titleExpect: "交期确定",
  229. // 是否显示弹出层
  230. openExpect: false,
  231. columns: [
  232. {
  233. width: 45,
  234. type: 'selection',
  235. columnKey: 'selection',
  236. align: 'center',
  237. reserveSelection: true
  238. },
  239. {
  240. columnKey: 'index',
  241. label: '序号',
  242. type: 'index',
  243. width: 55,
  244. align: 'center',
  245. showOverflowTooltip: true,
  246. fixed: 'left'
  247. },
  248. {
  249. prop: 'preSalesOrderNumber',
  250. label: '销售订单',
  251. showOverflowTooltip: true,
  252. align: 'center',
  253. width: 140,
  254. },
  255. {
  256. prop: 'customerCode',
  257. label: '客户代号',
  258. showOverflowTooltip: true,
  259. align: 'center',
  260. },
  261. {
  262. prop: 'customerName',
  263. label: '客户名称',
  264. showOverflowTooltip: true,
  265. align: 'center',
  266. width: 140,
  267. },
  268. {
  269. prop: 'productDescription',
  270. label: '产品描述',
  271. showOverflowTooltip: true,
  272. align: 'center',
  273. width: 140,
  274. },
  275. {
  276. prop: 'productCode',
  277. label: '产品编码',
  278. showOverflowTooltip: true,
  279. align: 'center',
  280. width: 140,
  281. },
  282. {
  283. prop: 'orderQuantity',
  284. label: '订单数量',
  285. showOverflowTooltip: true,
  286. align: 'center',
  287. },
  288. {
  289. prop: 'unit',
  290. label: '单位',
  291. showOverflowTooltip: true,
  292. align: 'center',
  293. },
  294. {
  295. prop: 'weightKg',
  296. label: '重量',
  297. showOverflowTooltip: true,
  298. align: 'center',
  299. },
  300. {
  301. prop: 'customerDeliveryDate',
  302. label: '客户交期',
  303. showOverflowTooltip: true,
  304. align: 'center',
  305. width: 140,
  306. },
  307. {
  308. prop: 'productionDeliveryDate',
  309. label: '生产交期',
  310. showOverflowTooltip: true,
  311. align: 'center',
  312. width: 140,
  313. },
  314. {
  315. prop: 'materialCode',
  316. label: '材料编码',
  317. showOverflowTooltip: true,
  318. align: 'center',
  319. width: 140,
  320. },
  321. {
  322. prop: 'materialDescription',
  323. label: '材料描述',
  324. showOverflowTooltip: true,
  325. align: 'center',
  326. width: 140,
  327. },
  328. {
  329. prop: 'materialQuantity',
  330. label: '物料数量',
  331. showOverflowTooltip: true,
  332. align: 'center',
  333. },
  334. {
  335. prop: 'materialUnit',
  336. label: '物料单位',
  337. showOverflowTooltip: true,
  338. align: 'center',
  339. },
  340. {
  341. prop: 'materialWeightKg',
  342. label: '物料重量(kg)',
  343. showOverflowTooltip: true,
  344. align: 'center',
  345. },
  346. {
  347. prop: 'status',
  348. slot: 'status',
  349. width: 120,
  350. label: '订单状态',
  351. showOverflowTooltip: true,
  352. align: 'center',
  353. },
  354. {
  355. columnKey: 'action',
  356. label: '操作',
  357. width: 150,
  358. align: 'center',
  359. resizable: false,
  360. slot: 'action',
  361. fixed: 'right'
  362. }
  363. ],
  364. // 表单参数
  365. form: {},
  366. // 表单校验
  367. rules: {
  368. preSalesOrderNumber: [
  369. { required: true, message: "销售订单不能为空", trigger: "blur" }
  370. ],
  371. },
  372. selDataIds: [],
  373. whereForm: {}
  374. };
  375. },
  376. async created() {
  377. await this.reload();
  378. },
  379. methods: {
  380. datasource({ page, where, limit }) {
  381. const res = listSalesorder({ ...where, page, limit });
  382. return res;
  383. },
  384. reload(where) {
  385. console.log(where, 'where22222')
  386. this.whereForm = where;
  387. this.$nextTick(() => {
  388. if (this.$refs.tableRef && this.$refs.tableRef.reload)
  389. this.$refs.tableRef.reload({ page: 1, where: where });
  390. })
  391. },
  392. onDone() {
  393. this.$nextTick(() => {
  394. this.$refs.tableRef.setSelectedRowKeys(this.selDataIds);
  395. });
  396. },
  397. /** 修改按钮操作 */
  398. handleUpdate(row) {
  399. this.resetForm();
  400. const id = row.id || this.ids
  401. getSalesOrder(id).then(response => {
  402. this.form = response.data;
  403. this.open = true;
  404. this.title = "修改销售订单";
  405. });
  406. },
  407. /** 删除 */
  408. handleDelete(row) {
  409. let ids=[]
  410. if(row.id){
  411. ids = [row.id]
  412. }else{
  413. ids=this.ids
  414. }
  415. this.$confirm(`是否确认删除销售订单编号为"${ids}"的数据项?`, '提示')
  416. .then(() => {
  417. delSalesorder({ids:ids})
  418. .then(() => {
  419. this.reload();
  420. this.$message.success("删除成功");
  421. })
  422. .catch((e) => {
  423. console.log(e);
  424. });
  425. })
  426. .catch(() => { });
  427. },
  428. // 多选框选中数据
  429. handleSelectionChange(selection) {
  430. this.ids = selection.map(item => item.id)
  431. this.selectionData = selection
  432. console.log(this.ids, 'selection')
  433. this.single = selection.length !== 1;
  434. this.multiple = !selection.length;
  435. // if (selection.length == 1) {
  436. // const selSalesOrderNumber = selection[0].preSalesOrderNumber;
  437. // const list = this.$refs.tableRef.getData();
  438. // const data = []
  439. // for (let i = 0; i < list.length; i++) {
  440. // if (list[i].preSalesOrderNumber == selSalesOrderNumber) {
  441. // data.push(list[i].id);
  442. // }
  443. // }
  444. // this.selDataIds = data;
  445. // }
  446. // console.log(this.selDataIds, '勾选')
  447. // if (this.selDataIds.length > 0) {
  448. // this.$refs.tableRef.setSelectedRowKeys(this.selDataIds);
  449. // }
  450. },
  451. async handleEstimatedDelivery() {
  452. if (this.ids.length === 0) {
  453. this.$message.warning("请选择");
  454. return;
  455. }
  456. const res = await estimateDeliveryDates({ ids: this.ids })
  457. if (res.code == 0) {
  458. this.$message.success("操作成功");
  459. this.reload();
  460. }
  461. },
  462. /*交期预估*/
  463. async handleExpect(row) {
  464. if (this.ids.length === 0) {
  465. this.$message.warning("请选择");
  466. return;
  467. }
  468. const id = row.id || this.ids;
  469. const response = await getSalesOrder(id);
  470. const saleOrder = response.data;
  471. this.form = response.data;
  472. //如果是已经占用资源,则显示已经占用的资源,不能重复
  473. if (saleOrder.status === "1" || saleOrder.status === "2") {
  474. const occupyRes = await listSalesOrderOccupyRes(saleOrder);
  475. this.salesOrderExpectList = occupyRes;
  476. this.single = true;
  477. this.multiple = true;
  478. } else if (saleOrder.status === "0") {
  479. const expectRes = await listSalesOrderExpect(saleOrder);
  480. this.salesOrderExpectList = expectRes;
  481. this.single = false;
  482. this.multiple = true;
  483. }
  484. console.log(this.salesOrderExpectList.length, 'this.salesOrderExpectList.length')
  485. if (this.salesOrderExpectList.length > 0) {
  486. this.submitFormAllExpect();
  487. }
  488. },
  489. submitFormAllExpect() {
  490. var arr = [];
  491. this.salesOrderExpectList.forEach(item => {
  492. var node = {};
  493. node.id = item.id;
  494. node.createTime = item.createTime;
  495. node.createUserId = item.createUserId;
  496. node.year = item.year;
  497. node.month = item.month;
  498. node.day = item.day;
  499. node.plannedCapacity = item.plannedCapacity;
  500. node.unplannedSumCapacity = item.unplannedSumCapacity;
  501. node.deliverDay = item.deliverDay;
  502. node.currentPlannedSumCapacity = item.currentPlannedSumCapacity;
  503. node.plannedSumCapacity = item.plannedSumCapacity;
  504. node.plannedOrder = item.plannedOrder;
  505. node.plannedOrderCapacity = item.plannedOrderCapacity;
  506. node.plannedOrderDate = item.plannedOrderDate;
  507. arr.push(node);
  508. });
  509. console.log(arr, 'arr')
  510. occupyAllRes(arr).then(response => {
  511. //console.log(response)
  512. // this.openExpect = false;
  513. this.reload();
  514. this.$message.success("占用成功");
  515. });
  516. },
  517. //全部预估
  518. // handleAllExpect() {
  519. // listSalesorderExpectAll().then(response => {
  520. // this.salesOrderExpectList = response;
  521. // this.openExpect = true;
  522. // this.single = true;
  523. // this.multiple = false;
  524. // });
  525. // },
  526. /** 导入按钮操作 */
  527. handleImport() {
  528. this.upload.title = "销售订单数据导入";
  529. this.upload.open = true;
  530. },
  531. //文件上传
  532. uploadFile(param) {
  533. let fd = new FormData();
  534. this.fileList.forEach((item) => {
  535. fd.append('importExcel', item.raw);
  536. });
  537. importFile(fd)
  538. .then((res) => {
  539. this.$refs.uploadFile.clearFiles();
  540. this.upload.open = false;
  541. })
  542. .catch((data) => {
  543. if (data.code != -1) {
  544. this.$message.error(data.message);
  545. }
  546. })
  547. .finally(() => {
  548. this.$refs.uploadFile.clearFiles();
  549. });
  550. },
  551. //上传限制
  552. beforeUpload(file) {
  553. const isLt10M = file.size / 1024 / 1024 < 10;
  554. if (!isLt10M) {
  555. this.$message.error('上传文件大小不能超过 10MB!');
  556. }
  557. return isLt10M;
  558. },
  559. handleChange(file, fileList) {
  560. this.fileList = fileList;
  561. console.log(fileList);
  562. },
  563. /** 导出按钮操作 */
  564. handleExport() {
  565. console.log(this.whereForm, 'this.whereForm')
  566. this.loading = true;
  567. let params = this.whereForm?this.whereForm:[]
  568. exportFile(params).then(res => {
  569. this.loading = false;
  570. });
  571. },
  572. /** 下载模板操作 */
  573. importTemplate() {
  574. importTemplate(this.whereForm).then(res => {
  575. this.$message.success("模板下载成功");
  576. });
  577. },
  578. /** 转销售单按钮操作 */
  579. handleSaleorder(row) {
  580. if (this.ids.length == 0) {
  581. this.$message.warning("请选择");
  582. return;
  583. }
  584. const filteredData = this.selectionData.filter((item) => item.status == 1);
  585. console.log(filteredData, 'filteredData');
  586. if (filteredData.length > 0) {
  587. const ids = filteredData.map(item => item.id)
  588. convertToSalesOrder({ ids: ids }).then(response => {
  589. this.$message.success("转换成功");
  590. this.reload();
  591. });
  592. } else {
  593. this.$message.warning("请选择状态为未提交的数据!");
  594. return;
  595. }
  596. // const id = row.id || this.ids
  597. // getSalesOrder(id).then(response => {
  598. // let saleorder = response.data;
  599. // this.form = response.data;
  600. // console.log(saleorder);
  601. // //如果是已经占用资源,则显示已经占用的资源,不能重复
  602. // if (saleorder.status == "1") {
  603. // convertToSalesOrder(this.ids).then(response => {
  604. // this.$message.success("转换成功");
  605. // });
  606. // return;
  607. // }
  608. // else if (saleorder.status == "0") {
  609. // //如果没有
  610. // this.$message.success("没有交期预估");
  611. // } else if (saleorder.status == "2") {
  612. // //如果没有
  613. // this.$message.success("已经转换过了");
  614. // }
  615. // });
  616. },
  617. // 表单重置
  618. resetForm() {
  619. this.form = {
  620. id: null,
  621. preSalesOrderNumber: null,
  622. customerCode: null,
  623. customerName: null,
  624. productDescription: null,
  625. productCode: null,
  626. orderQuantity: null,
  627. unit: null,
  628. weightKg: null,
  629. customerDeliveryDate: null,
  630. productionDeliveryDate: null,
  631. materialCode: null,
  632. materialDescription: null,
  633. materialQuantity: null,
  634. materialUnit: null,
  635. materialWeightKg: null,
  636. status: null,
  637. };
  638. },
  639. // 取消按钮
  640. cancel() {
  641. this.open = false;
  642. this.resetForm();
  643. },
  644. // 取消按钮
  645. cancelExpect() {
  646. this.openExpect = false;
  647. },
  648. /** 提交按钮 */
  649. submitForm() {
  650. this.$refs["form"].validate(valid => {
  651. if (valid) {
  652. if (this.form.id != null) {
  653. updateSalesorder(this.form).then(response => {
  654. this.$message.success("修改成功");
  655. this.open = false;
  656. this.reload();
  657. });
  658. } else {
  659. addSalesorder(this.form).then(response => {
  660. this.$message.success("新增成功");
  661. this.open = false;
  662. this.reload();
  663. });
  664. }
  665. }
  666. });
  667. },
  668. /** 提交交期确定按钮 */
  669. submitFormExpect() {
  670. const id = this.ids
  671. getSalesOrder(id).then(response => {
  672. // console.log(response);
  673. let saleorder = response.data;
  674. if (saleorder.status == "1" || saleorder.status == "2") {
  675. this.$message.success("已经分配过资源");
  676. return;
  677. }
  678. var i = 0;
  679. this.salesOrderExpectList.forEach(item => {
  680. i++;
  681. item.plannedOrder = saleorder.preSalesOrderNumber + "-" + saleorder.materialCode + "";
  682. item.plannedOrderCapacity = item.currenPlannedSumCapacity;
  683. item.plannedSumCapacity = item.currenPlannedSumCapacity;
  684. });
  685. var lastNode = this.salesOrderExpectList[this.salesOrderExpectList.length - 1];
  686. console.log(lastNode, 'lastNode');
  687. var productDay = lastNode.deliverDay;
  688. saleorder.productionDeliveryDate = productDay;
  689. console.log(saleorder.productionDeliveryDate);
  690. var arr = [];
  691. this.salesOrderExpectList.forEach(item => {
  692. var node = {};
  693. node.id = item.id;
  694. node.createTime = item.createTime;
  695. node.createUserId = item.createUserId;
  696. node.year = item.year;
  697. node.month = item.month;
  698. node.day = item.day;
  699. node.plannedCapacity = item.plannedCapacity;
  700. node.unplannedSumCapacity = item.unplannedSumCapacity;
  701. node.deliverDay = item.deliverDay;
  702. node.currenPlannedSumCapacity = item.currenPlannedSumCapacity;
  703. node.plannedSumCapacity = item.plannedSumCapacity;
  704. node.plannedOrder = item.plannedOrder;
  705. node.plannedOrderCapacity = item.plannedOrderCapacity;
  706. node.plannedOrderDate = item.plannedOrderDate;
  707. arr.push(node);
  708. });
  709. occupyRes(arr).then(response => {
  710. this.$message.success("占用成功");
  711. saleorder.status = "1";
  712. console.log(saleorder);
  713. updateSalesorder(saleorder).then(response => {
  714. this.$message.success("修改成功");
  715. this.openExpect = false;
  716. this.reload();
  717. });
  718. });
  719. });
  720. },
  721. /** 转销售单按钮操作 */
  722. handleAllSaleorder() {
  723. this.loading = true;
  724. let saleorder = {};
  725. //如果是已经占用资源,则显示已经占用的资源,不能重复
  726. createAll(saleorder).then(response => {
  727. this.$message.success("转换成功");
  728. this.loading = false;
  729. });
  730. },
  731. // // 提交上传文件
  732. // submitFileForm() {
  733. // this.$refs.upload.submit();
  734. // },
  735. // // 文件上传中处理
  736. // handleFileUploadProgress(event, file, fileList) {
  737. // this.upload.isUploading = true;
  738. // },
  739. // // 文件上传成功处理
  740. // handleFileSuccess(response, file, fileList) {
  741. // this.upload.open = false;
  742. // this.upload.isUploading = false;
  743. // this.$refs.upload.clearFiles();
  744. // this.$alert("<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" +
  745. // response.msg + "</div>", "导入结果", {
  746. // dangerouslyUseHTMLString: true
  747. // });
  748. // this.reload();
  749. // },
  750. }
  751. };
  752. </script>