index.vue 29 KB

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