index.vue 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947
  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" @select="handleSelect"
  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="materialQuantity">
  101. <el-input v-model="form.materialQuantity" 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="materialWeightKg">
  108. <el-input v-model="form.materialWeightKg" placeholder="请输入物料重量" />
  109. </el-form-item>
  110. </el-col>
  111. <el-col :span="8">
  112. <el-form-item label="发货数量" prop="sendNum">
  113. <el-input v-model="form.sendNum" 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-col :span="8">
  124. <el-form-item label="生产交期" prop="productionDeliveryDate">
  125. <el-date-picker clearable v-model="form.productionDeliveryDate" type="date" value-format="yyyy-MM-dd"
  126. placeholder="请选择生产交期">
  127. </el-date-picker>
  128. </el-form-item>
  129. </el-col>
  130. <el-col :span="8">
  131. <el-form-item label="交货方式" prop="deliveryMethod">
  132. <el-select v-model="form.deliveryMethod" placeholder="请选择交货方式">
  133. <el-option v-for="item in deliveryMethodOptions" :key="item.value" :label="item.label" :value="item.value"></el-option>
  134. </el-select>
  135. </el-form-item>
  136. </el-col>
  137. </el-row>
  138. <el-row>
  139. <el-col :span="8">
  140. <el-form-item label="材料编码" prop="materialCode">
  141. <el-input v-model="form.materialCode" placeholder="请输入材料编码" />
  142. </el-form-item>
  143. </el-col>
  144. <el-col :span="8">
  145. <el-form-item label="材料描述" prop="materialDescription">
  146. <el-input v-model="form.materialDescription" type="textarea" placeholder="请输入内容" />
  147. </el-form-item>
  148. </el-col>
  149. <el-col :span="8">
  150. <el-form-item label="编号" prop="productionCodes">
  151. <el-input v-model="form.productionCodes" placeholder="请输入编号,用','隔开" />
  152. </el-form-item>
  153. </el-col>
  154. </el-row>
  155. <el-row>
  156. <el-col :span="8">
  157. <el-form-item label="密度" prop="density">
  158. <el-input v-model="form.density" placeholder="请输入密度" />
  159. </el-form-item>
  160. </el-col>
  161. <el-col :span="8">
  162. <el-form-item label="图纸版本" prop="drawingVersion">
  163. <el-input v-model="form.drawingVersion" placeholder="请输入图纸版本" />
  164. </el-form-item>
  165. </el-col>
  166. <el-col :span="8">
  167. <el-form-item label="订单类型" prop="orderType">
  168. <el-select v-model="form.orderType" placeholder="请选择订单类型">
  169. <el-option v-for="item in orderTypeOptions" :key="item.value" :label="item.label" :value="item.value"></el-option>
  170. </el-select>
  171. </el-form-item>
  172. </el-col>
  173. </el-row>
  174. </el-form>
  175. <div slot="footer" class="dialog-footer">
  176. <el-button type="primary" @click="submitForm">确 定</el-button>
  177. <el-button @click="cancel">取 消</el-button>
  178. </div>
  179. </ele-modal>
  180. <!-- 直报系统导入对话框 -->
  181. <!-- <el-dialog :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
  182. <el-upload class="avatar-uploader" action="#" :show-file-list="false" :http-request="uploadFile"
  183. :before-upload="beforeUpload" :on-change="handleChange" ref="uploadFile">
  184. <el-button type="warning" size="mini">批量导入</el-button>
  185. </el-upload>
  186. </el-dialog> -->
  187. <ele-modal title="选择工厂" :visible.sync="factoriesVisible" :before-close="handleCancel"
  188. :close-on-click-modal="false" :close-on-press-escape="false" append-to-body width="20%" :maxable="true">
  189. <el-row>
  190. <el-select v-model="factoriesId">
  191. <el-option v-for="item of factoryList" :key="item.id" :label="item.name" :value="item.id"></el-option>
  192. </el-select>
  193. </el-row>
  194. <div slot="footer" class="dialog-footer">
  195. <el-button type="primary" @click="handleSubmit">确 定</el-button>
  196. <el-button @click="handleCancel">取 消</el-button>
  197. </div>
  198. </ele-modal>
  199. </el-card>
  200. <importDialog
  201. :defModule="upload.title"
  202. ref="importDialogRef"
  203. @success="reload"
  204. />
  205. </div>
  206. </template>
  207. <script>
  208. import { estimateDeliveryDates, createAll, convertToSalesOrder, importTemplate, exportFile, importFile, listSalesorder, getSalesOrder, delSalesorder, addSalesorder, updateSalesorder, listSalesOrderExpect, occupyRes, listSalesOrderOccupyRes, listSalesorderExpectAll, occupyAllRes, getQueryFactory } from "@/api/aps/presalesorder";
  209. import { API_BASE_URL, TOKEN_HEADER_NAME, LAYOUT_PATH } from '@/config/setting';
  210. import { getToken, setToken } from '@/utils/token-util';
  211. import { download } from '@/utils/request';
  212. import modalTitle from '@/components/modalTitle.vue';
  213. import search from './search.vue';
  214. import importDialog from "./import-dialog.vue";
  215. export default {
  216. name: "PreSalesorder",
  217. components: { modalTitle, search, importDialog },
  218. data() {
  219. return {
  220. fullscreen: false,
  221. fileList: [],
  222. isSubmitting: true,
  223. // 用户导入参数
  224. upload: {
  225. // 是否显示弹出层(用户导入)
  226. open: false,
  227. // 弹出层标题(用户导入)
  228. title: "",
  229. // 是否禁用上传
  230. isUploading: false,
  231. // 是否更新已经存在的用户数据
  232. updateSupport: 0,
  233. // 设置上传的请求头部
  234. // headers: {
  235. // Authorization: "Bearer " +getToken()
  236. // },
  237. // 上传的地址
  238. url: API_BASE_URL + "/aps/presalesorder/importData"
  239. },
  240. // 遮罩层
  241. loading: false,
  242. // 选中数组
  243. ids: [],
  244. selectionData: [],
  245. // 非单个禁用
  246. single: true,
  247. // 非多个禁用
  248. multiple: true,
  249. // 总条数
  250. total: 0,
  251. // 销售订单表格数据
  252. salesorderList: [],
  253. // 销售订单交期预估表格数据
  254. salesOrderExpectList: [],
  255. // 弹出层标题
  256. title: "",
  257. // 是否显示弹出层
  258. open: false,
  259. // 弹出层标题
  260. titleExpect: "交期确定",
  261. // 是否显示弹出层
  262. openExpect: false,
  263. columns: [
  264. {
  265. width: 45,
  266. type: 'selection',
  267. columnKey: 'selection',
  268. align: 'center',
  269. reserveSelection: true
  270. },
  271. {
  272. columnKey: 'index',
  273. label: '序号',
  274. type: 'index',
  275. width: 55,
  276. align: 'center',
  277. showOverflowTooltip: true,
  278. fixed: 'left'
  279. },
  280. {
  281. prop: 'orderType',
  282. label: '订单类型',
  283. showOverflowTooltip: true,
  284. align: 'center',
  285. width: 140,
  286. },
  287. {
  288. prop: 'preSalesOrderNumber',
  289. label: '预销售订单号',
  290. showOverflowTooltip: true,
  291. align: 'center',
  292. width: 140,
  293. },
  294. {
  295. prop: 'customerCode',
  296. label: '客户代号',
  297. showOverflowTooltip: true,
  298. align: 'center',
  299. },
  300. {
  301. prop: 'customerName',
  302. label: '客户名称',
  303. showOverflowTooltip: true,
  304. align: 'center',
  305. width: 140,
  306. },
  307. {
  308. prop: 'productDescription',
  309. label: '主机描述',
  310. showOverflowTooltip: true,
  311. align: 'center',
  312. width: 140,
  313. },
  314. {
  315. prop: 'productCode',
  316. label: '主机编码',
  317. showOverflowTooltip: true,
  318. align: 'center',
  319. width: 140,
  320. },
  321. // {
  322. // prop: 'orderQuantity',
  323. // label: '订单数量',
  324. // showOverflowTooltip: true,
  325. // align: 'center',
  326. // },
  327. // {
  328. // prop: 'unit',
  329. // label: '单位',
  330. // showOverflowTooltip: true,
  331. // align: 'center',
  332. // },
  333. // {
  334. // prop: 'weightKg',
  335. // label: '重量',
  336. // showOverflowTooltip: true,
  337. // align: 'center',
  338. // },
  339. {
  340. prop: 'deliveryMethod',
  341. label: '交货方式',
  342. showOverflowTooltip: true,
  343. align: 'center',
  344. width: 140,
  345. },
  346. {
  347. prop: 'customerDeliveryDate',
  348. label: '客户交期',
  349. showOverflowTooltip: true,
  350. align: 'center',
  351. width: 140,
  352. },
  353. {
  354. prop: 'productionDeliveryDate',
  355. label: '生产交期',
  356. showOverflowTooltip: true,
  357. align: 'center',
  358. width: 140,
  359. },
  360. {
  361. prop: 'materialCode',
  362. label: '材料编码',
  363. showOverflowTooltip: true,
  364. align: 'center',
  365. width: 140,
  366. },
  367. {
  368. prop: 'materialDescription',
  369. label: '材料描述',
  370. showOverflowTooltip: true,
  371. align: 'center',
  372. width: 140,
  373. },
  374. {
  375. prop:'productionCodes',
  376. label: '编号',
  377. showOverflowTooltip: true,
  378. align: 'center',
  379. width: 140,
  380. },
  381. {
  382. prop: 'factoriesName',
  383. label: '工厂名称',
  384. showOverflowTooltip: true,
  385. align: 'center',
  386. width: 120,
  387. },
  388. {
  389. prop:'sendNum',
  390. label: '发货数量',
  391. showOverflowTooltip: true,
  392. align: 'center',
  393. width: 140,
  394. },
  395. {
  396. prop: 'materialQuantity',
  397. label: '订单数量',
  398. showOverflowTooltip: true,
  399. align: 'center',
  400. },
  401. {
  402. prop: 'materialUnit',
  403. label: '物料单位',
  404. showOverflowTooltip: true,
  405. align: 'center',
  406. },
  407. {
  408. prop: 'materialWeightKg',
  409. label: '物料重量(kg)',
  410. showOverflowTooltip: true,
  411. align: 'center',
  412. },
  413. {
  414. prop: 'status',
  415. slot: 'status',
  416. width: 120,
  417. label: '订单状态',
  418. showOverflowTooltip: true,
  419. align: 'center',
  420. },{
  421. prop: 'density',
  422. width: 120,
  423. label: '密度',
  424. showOverflowTooltip: true,
  425. align: 'center',
  426. },
  427. {
  428. prop: 'drawingVersion',
  429. width: 120,
  430. label: '图纸版本',
  431. showOverflowTooltip: true,
  432. align: 'center',
  433. },
  434. {
  435. columnKey: 'action',
  436. label: '操作',
  437. width: 150,
  438. align: 'center',
  439. resizable: false,
  440. slot: 'action',
  441. fixed: 'right'
  442. }
  443. ],
  444. // 表单参数
  445. form: {},
  446. // 表单校验
  447. rules: {
  448. preSalesOrderNumber: [
  449. { required: true, message: "销售订单不能为空", trigger: "blur" }
  450. ],
  451. },
  452. selDataIds: [],
  453. whereForm: {},
  454. factoriesId: '',
  455. factoriesVisible: false,
  456. factoryList: [],
  457. orderTypeOptions: [
  458. {
  459. value: '库存式订单',
  460. label: '库存式订单'
  461. },
  462. {
  463. value: '生产性订单',
  464. label: '生产性订单'
  465. }
  466. ],
  467. deliveryMethodOptions: [
  468. {
  469. value: '一次性交货',
  470. label: '一次性交货'
  471. },
  472. {
  473. value: '分批交货',
  474. label: '分批交货'
  475. }
  476. ]
  477. };
  478. },
  479. async created() {
  480. await this.reload();
  481. await this.getFactoryList();
  482. },
  483. methods: {
  484. handleSelect(selection, row) {
  485. const matchField = 'preSalesOrderNumber';
  486. const isSelected = selection.some(item => item.id === row.id);
  487. const list = this.$refs.tableRef.getData()
  488. const matchedRows = list.filter(
  489. item => item[matchField] === row[matchField]
  490. )
  491. // 批量设置选择状态
  492. this.$nextTick(() => {
  493. matchedRows.forEach(item => {
  494. this.$refs.tableRef.toggleRowSelection(item, isSelected)
  495. })
  496. })
  497. },
  498. async getFactoryList() {
  499. const res = await getQueryFactory();
  500. console.log(res, 'data工厂')
  501. this.factoryList = res.data;
  502. },
  503. datasource({ page, where, limit }) {
  504. let pageNum = page;
  505. let size = limit;
  506. where.queryType = 1; //查询类型(1:预销售单页面查询;2:已转销售单页面查询)
  507. const res = listSalesorder({ ...where, pageNum, size });
  508. return res;
  509. },
  510. reload(where) {
  511. console.log(where, 'where22222')
  512. this.whereForm = where;
  513. this.$nextTick(() => {
  514. if (this.$refs.tableRef && this.$refs.tableRef.reload)
  515. this.$refs.tableRef.reload({ page: 1, where: where });
  516. })
  517. },
  518. onDone() {
  519. this.$nextTick(() => {
  520. this.$refs.tableRef.setSelectedRowKeys(this.selDataIds);
  521. });
  522. },
  523. /** 修改按钮操作 */
  524. handleUpdate(row) {
  525. this.resetForm();
  526. const id = row.id || this.ids
  527. getSalesOrder(id).then(response => {
  528. this.form = response.data;
  529. this.open = true;
  530. this.title = "修改销售订单";
  531. });
  532. },
  533. /** 删除 */
  534. handleDelete(row) {
  535. let ids = []
  536. if (row.id) {
  537. ids = [row.id]
  538. } else {
  539. ids = this.ids
  540. }
  541. this.$confirm(`是否确认删除该数据?`, '提示')
  542. .then(() => {
  543. delSalesorder({ ids: ids })
  544. .then(() => {
  545. this.reload();
  546. this.$message.success("删除成功");
  547. })
  548. .catch((e) => {
  549. console.log(e);
  550. });
  551. })
  552. .catch(() => { });
  553. },
  554. // 多选框选中数据
  555. handleSelectionChange(selection) {
  556. this.ids = selection.map(item => item.id)
  557. this.selectionData = selection
  558. console.log(this.ids, 'selection')
  559. this.single = selection.length !== 1;
  560. this.multiple = !selection.length;
  561. // if (selection.length == 1) {
  562. // const selSalesOrderNumber = selection[0].preSalesOrderNumber;
  563. // const list = this.$refs.tableRef.getData();
  564. // const data = []
  565. // for (let i = 0; i < list.length; i++) {
  566. // if (list[i].preSalesOrderNumber == selSalesOrderNumber) {
  567. // data.push(list[i].id);
  568. // }
  569. // }
  570. // this.selDataIds = data;
  571. // }
  572. // console.log(this.selDataIds, '勾选')
  573. // if (this.selDataIds.length > 0) {
  574. // this.$refs.tableRef.setSelectedRowKeys(this.selDataIds);
  575. // }
  576. },
  577. async handleEstimatedDelivery() {
  578. if (this.ids.length === 0) {
  579. this.$message.warning("请选择");
  580. return;
  581. }
  582. this.factoriesId = '';
  583. this.factoriesVisible = true;
  584. },
  585. async handleSubmit() {
  586. const res = await estimateDeliveryDates({ ids: this.ids, factoriesId: this.factoriesId })
  587. if (res.code == 0) {
  588. this.$message.success("操作成功");
  589. this.factoriesVisible = false;
  590. this.reload();
  591. }
  592. },
  593. handleCancel() {
  594. this.factoriesVisible = false;
  595. },
  596. /*交期预估*/
  597. async handleExpect(row) {
  598. if (this.ids.length === 0) {
  599. this.$message.warning("请选择");
  600. return;
  601. }
  602. const id = row.id || this.ids;
  603. const response = await getSalesOrder(id);
  604. const saleOrder = response.data;
  605. this.form = response.data;
  606. //如果是已经占用资源,则显示已经占用的资源,不能重复
  607. if (saleOrder.status === "1" || saleOrder.status === "2") {
  608. const occupyRes = await listSalesOrderOccupyRes(saleOrder);
  609. this.salesOrderExpectList = occupyRes;
  610. this.single = true;
  611. this.multiple = true;
  612. } else if (saleOrder.status === "0") {
  613. const expectRes = await listSalesOrderExpect(saleOrder);
  614. this.salesOrderExpectList = expectRes;
  615. this.single = false;
  616. this.multiple = true;
  617. }
  618. console.log(this.salesOrderExpectList.length, 'this.salesOrderExpectList.length')
  619. if (this.salesOrderExpectList.length > 0) {
  620. this.submitFormAllExpect();
  621. }
  622. },
  623. submitFormAllExpect() {
  624. var arr = [];
  625. this.salesOrderExpectList.forEach(item => {
  626. var node = {};
  627. node.id = item.id;
  628. node.createTime = item.createTime;
  629. node.createUserId = item.createUserId;
  630. node.year = item.year;
  631. node.month = item.month;
  632. node.day = item.day;
  633. node.plannedCapacity = item.plannedCapacity;
  634. node.unplannedSumCapacity = item.unplannedSumCapacity;
  635. node.deliverDay = item.deliverDay;
  636. node.currentPlannedSumCapacity = item.currentPlannedSumCapacity;
  637. node.plannedSumCapacity = item.plannedSumCapacity;
  638. node.plannedOrder = item.plannedOrder;
  639. node.plannedOrderCapacity = item.plannedOrderCapacity;
  640. node.plannedOrderDate = item.plannedOrderDate;
  641. arr.push(node);
  642. });
  643. console.log(arr, 'arr')
  644. occupyAllRes(arr).then(response => {
  645. //console.log(response)
  646. // this.openExpect = false;
  647. this.reload();
  648. this.$message.success("占用成功");
  649. });
  650. },
  651. //全部预估
  652. // handleAllExpect() {
  653. // listSalesorderExpectAll().then(response => {
  654. // this.salesOrderExpectList = response;
  655. // this.openExpect = true;
  656. // this.single = true;
  657. // this.multiple = false;
  658. // });
  659. // },
  660. /** 导入按钮操作 */
  661. handleImport() {
  662. this.upload.title = "销售订单数据导入";
  663. // this.upload.open = true;
  664. this.$refs.importDialogRef.open();
  665. },
  666. //文件上传
  667. uploadFile(param) {
  668. let fd = new FormData();
  669. this.fileList.forEach((item) => {
  670. fd.append('importExcel', item.raw);
  671. });
  672. importFile(fd)
  673. .then((res) => {
  674. this.$refs.uploadFile.clearFiles();
  675. this.upload.open = false;
  676. this.reload();
  677. })
  678. .catch((data) => {
  679. if (data.code != -1) {
  680. this.$message.error(data.message);
  681. }
  682. })
  683. .finally(() => {
  684. this.$refs.uploadFile.clearFiles();
  685. });
  686. },
  687. //上传限制
  688. beforeUpload(file) {
  689. const isLt10M = file.size / 1024 / 1024 < 10;
  690. if (!isLt10M) {
  691. this.$message.error('上传文件大小不能超过 10MB!');
  692. }
  693. return isLt10M;
  694. },
  695. handleChange(file, fileList) {
  696. this.fileList = fileList;
  697. console.log(fileList);
  698. },
  699. /** 导出按钮操作 */
  700. handleExport() {
  701. console.log(this.whereForm, 'this.whereForm')
  702. this.loading = true;
  703. let params = this.whereForm ? this.whereForm : {}
  704. params.queryType = 1;
  705. exportFile(params).then(res => {
  706. this.loading = false;
  707. });
  708. },
  709. /** 下载模板操作 */
  710. importTemplate() {
  711. importTemplate(this.whereForm).then(res => {
  712. this.$message.success("模板下载成功");
  713. });
  714. },
  715. /** 转销售单按钮操作 */
  716. handleSaleorder(row) {
  717. if (this.ids.length == 0) {
  718. this.$message.warning("请选择");
  719. return;
  720. }
  721. const filteredData = this.selectionData.filter((item) => item.status == 1);
  722. console.log(filteredData, 'filteredData');
  723. if (filteredData.length > 0) {
  724. const ids = filteredData.map(item => item.id)
  725. convertToSalesOrder({ ids: ids }).then(response => {
  726. this.$message.success("转换成功");
  727. this.reload();
  728. });
  729. } else {
  730. this.$message.warning("请选择状态为未提交的数据!");
  731. return;
  732. }
  733. // const id = row.id || this.ids
  734. // getSalesOrder(id).then(response => {
  735. // let saleorder = response.data;
  736. // this.form = response.data;
  737. // console.log(saleorder);
  738. // //如果是已经占用资源,则显示已经占用的资源,不能重复
  739. // if (saleorder.status == "1") {
  740. // convertToSalesOrder(this.ids).then(response => {
  741. // this.$message.success("转换成功");
  742. // });
  743. // return;
  744. // }
  745. // else if (saleorder.status == "0") {
  746. // //如果没有
  747. // this.$message.success("没有交期预估");
  748. // } else if (saleorder.status == "2") {
  749. // //如果没有
  750. // this.$message.success("已经转换过了");
  751. // }
  752. // });
  753. },
  754. // 表单重置
  755. resetForm() {
  756. this.form = {
  757. id: null,
  758. preSalesOrderNumber: null,
  759. customerCode: null,
  760. customerName: null,
  761. productDescription: null,
  762. productCode: null,
  763. orderQuantity: null,
  764. unit: null,
  765. weightKg: null,
  766. customerDeliveryDate: null,
  767. productionDeliveryDate: null,
  768. materialCode: null,
  769. materialDescription: null,
  770. materialQuantity: null,
  771. materialUnit: null,
  772. materialWeightKg: null,
  773. status: null,
  774. };
  775. },
  776. // 取消按钮
  777. cancel() {
  778. this.open = false;
  779. this.resetForm();
  780. },
  781. // 取消按钮
  782. cancelExpect() {
  783. this.openExpect = false;
  784. },
  785. /** 提交按钮 */
  786. submitForm() {
  787. this.$refs["form"].validate(valid => {
  788. if (valid) {
  789. if (this.form.id != null) {
  790. if (this.form.productionCodes) {
  791. this.form.productionCodes = this.form.productionCodes.replace(/,/g, ",")
  792. }
  793. updateSalesorder(this.form).then(response => {
  794. this.$message.success("修改成功");
  795. this.open = false;
  796. this.reload();
  797. });
  798. } else {
  799. addSalesorder(this.form).then(response => {
  800. this.$message.success("新增成功");
  801. this.open = false;
  802. this.reload();
  803. });
  804. }
  805. }
  806. });
  807. },
  808. /** 提交交期确定按钮 */
  809. submitFormExpect() {
  810. const id = this.ids
  811. getSalesOrder(id).then(response => {
  812. // console.log(response);
  813. let saleorder = response.data;
  814. if (saleorder.status == "1" || saleorder.status == "2") {
  815. this.$message.success("已经分配过资源");
  816. return;
  817. }
  818. var i = 0;
  819. this.salesOrderExpectList.forEach(item => {
  820. i++;
  821. item.plannedOrder = saleorder.preSalesOrderNumber + "-" + saleorder.materialCode + "";
  822. item.plannedOrderCapacity = item.currenPlannedSumCapacity;
  823. item.plannedSumCapacity = item.currenPlannedSumCapacity;
  824. });
  825. var lastNode = this.salesOrderExpectList[this.salesOrderExpectList.length - 1];
  826. console.log(lastNode, 'lastNode');
  827. var productDay = lastNode.deliverDay;
  828. saleorder.productionDeliveryDate = productDay;
  829. console.log(saleorder.productionDeliveryDate);
  830. var arr = [];
  831. this.salesOrderExpectList.forEach(item => {
  832. var node = {};
  833. node.id = item.id;
  834. node.createTime = item.createTime;
  835. node.createUserId = item.createUserId;
  836. node.year = item.year;
  837. node.month = item.month;
  838. node.day = item.day;
  839. node.plannedCapacity = item.plannedCapacity;
  840. node.unplannedSumCapacity = item.unplannedSumCapacity;
  841. node.deliverDay = item.deliverDay;
  842. node.currenPlannedSumCapacity = item.currenPlannedSumCapacity;
  843. node.plannedSumCapacity = item.plannedSumCapacity;
  844. node.plannedOrder = item.plannedOrder;
  845. node.plannedOrderCapacity = item.plannedOrderCapacity;
  846. node.plannedOrderDate = item.plannedOrderDate;
  847. arr.push(node);
  848. });
  849. occupyRes(arr).then(response => {
  850. this.$message.success("占用成功");
  851. saleorder.status = "1";
  852. console.log(saleorder);
  853. updateSalesorder(saleorder).then(response => {
  854. this.$message.success("修改成功");
  855. this.openExpect = false;
  856. this.reload();
  857. });
  858. });
  859. });
  860. },
  861. /** 转销售单按钮操作 */
  862. handleAllSaleorder() {
  863. this.loading = true;
  864. let saleorder = {};
  865. //如果是已经占用资源,则显示已经占用的资源,不能重复
  866. createAll(saleorder).then(response => {
  867. this.$message.success("转换成功");
  868. this.loading = false;
  869. });
  870. },
  871. // // 提交上传文件
  872. // submitFileForm() {
  873. // this.$refs.upload.submit();
  874. // },
  875. // // 文件上传中处理
  876. // handleFileUploadProgress(event, file, fileList) {
  877. // this.upload.isUploading = true;
  878. // },
  879. // // 文件上传成功处理
  880. // handleFileSuccess(response, file, fileList) {
  881. // this.upload.open = false;
  882. // this.upload.isUploading = false;
  883. // this.$refs.upload.clearFiles();
  884. // this.$alert("<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" +
  885. // response.msg + "</div>", "导入结果", {
  886. // dangerouslyUseHTMLString: true
  887. // });
  888. // this.reload();
  889. // },
  890. }
  891. };
  892. </script>