order-search.vue 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879
  1. <!-- 搜索表单 -->
  2. <template>
  3. <el-form
  4. label-width="90px"
  5. class="ele-form-search"
  6. @keyup.enter.native="search"
  7. @submit.native.prevent
  8. >
  9. <el-row :gutter="15">
  10. <!-- <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">-->
  11. <!-- <el-form-item label="关键字:">-->
  12. <!-- <el-input-->
  13. <!-- v-model="where.keyWord"-->
  14. <!-- size="mini"-->
  15. <!-- placeholder="请输入"-->
  16. <!-- ></el-input>-->
  17. <!-- </el-form-item>-->
  18. <!-- </el-col>-->
  19. <!-- <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">-->
  20. <!-- <el-form-item label="销售订单号:">-->
  21. <!-- <el-input-->
  22. <!-- v-model="where.code"-->
  23. <!-- size="mini"-->
  24. <!-- placeholder="请输入"-->
  25. <!-- ></el-input>-->
  26. <!-- </el-form-item>-->
  27. <!-- </el-col>-->
  28. <!-- <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">-->
  29. <!-- <el-form-item label="产品编码:">-->
  30. <!-- <el-input-->
  31. <!-- v-model="where.productCode"-->
  32. <!-- size="mini"-->
  33. <!-- placeholder="请输入"-->
  34. <!-- ></el-input>-->
  35. <!-- </el-form-item>-->
  36. <!-- </el-col>-->
  37. <!-- <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">-->
  38. <!-- <el-form-item label="行号:">-->
  39. <!-- <el-input-->
  40. <!-- v-model="where.lineNumber"-->
  41. <!-- size="mini"-->
  42. <!-- placeholder="请输入"-->
  43. <!-- ></el-input>-->
  44. <!-- </el-form-item>-->
  45. <!-- </el-col>-->
  46. <!-- <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">-->
  47. <!-- <el-form-item label="牌号:">-->
  48. <!-- <el-input-->
  49. <!-- v-model="where.brandNo"-->
  50. <!-- size="mini"-->
  51. <!-- placeholder="请输入"-->
  52. <!-- ></el-input>-->
  53. <!-- </el-form-item>-->
  54. <!-- </el-col>-->
  55. <!-- <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">-->
  56. <!-- <el-form-item label="型号:">-->
  57. <!-- <el-input-->
  58. <!-- v-model="where.model"-->
  59. <!-- size="mini"-->
  60. <!-- placeholder="请输入"-->
  61. <!-- ></el-input>-->
  62. <!-- </el-form-item>-->
  63. <!-- </el-col>-->
  64. <!-- <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">-->
  65. <!-- <el-form-item label="订单来源:">-->
  66. <!-- <DictSelection-->
  67. <!-- dictName="订单来源"-->
  68. <!-- size="mini"-->
  69. <!-- clearable-->
  70. <!-- v-model="where.orderSource"-->
  71. <!-- >-->
  72. <!-- </DictSelection>-->
  73. <!-- </el-form-item>-->
  74. <!-- </el-col>-->
  75. <!-- <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">-->
  76. <!-- <el-form-item label="客户名称:">-->
  77. <!-- <el-input-->
  78. <!-- v-model="where.customerName"-->
  79. <!-- size="mini"-->
  80. <!-- placeholder="请输入"-->
  81. <!-- ></el-input>-->
  82. <!-- </el-form-item>-->
  83. <!-- </el-col>-->
  84. <!-- <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">-->
  85. <!-- <el-form-item label="订单类型:">-->
  86. <!-- <DictSelection-->
  87. <!-- dictName="订单类型"-->
  88. <!-- clearable-->
  89. <!-- size="mini"-->
  90. <!-- v-model="where.orderType"-->
  91. <!-- >-->
  92. <!-- </DictSelection>-->
  93. <!-- </el-form-item>-->
  94. <!-- </el-col>-->
  95. <el-col v-bind="styleResponsive ? { lg: 4, md: 12 } : { span: 4 }">
  96. <el-form-item label="生产状态:">
  97. <el-select
  98. v-model="where.proStu"
  99. placeholder="请选择"
  100. class="w100"
  101. size="mini"
  102. >
  103. <el-option
  104. v-if="activeName == 'first'"
  105. v-for="item in awaitProcuct"
  106. :key="item.value"
  107. :label="item.label"
  108. :value="item.value"
  109. >
  110. </el-option>
  111. <el-option
  112. v-if="activeName == 'three'"
  113. v-for="item in treatProcuct"
  114. :key="item.value"
  115. :label="item.label"
  116. :value="item.value"
  117. >
  118. </el-option>
  119. <el-option
  120. v-if="activeName == 'second'"
  121. v-for="item in alreadyProcuct"
  122. :key="item.value"
  123. :label="item.label"
  124. :value="item.value"
  125. >
  126. </el-option>
  127. </el-select>
  128. </el-form-item>
  129. </el-col>
  130. <el-col v-bind="styleResponsive ? { lg: 4, md: 12 } : { span: 4 }">
  131. <el-form-item label="订单类型:">
  132. <el-select
  133. v-model="where.orderType"
  134. placeholder="请选择"
  135. class="w100"
  136. size="mini"
  137. >
  138. <el-option
  139. v-for="item in orderList"
  140. :key="item.value"
  141. :label="item.label"
  142. :value="item.value"
  143. >
  144. </el-option>
  145. </el-select>
  146. </el-form-item>
  147. </el-col>
  148. <!-- <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">-->
  149. <!-- <el-form-item label="业务员:">-->
  150. <!-- <el-input-->
  151. <!-- v-model="where.salesman"-->
  152. <!-- size="mini"-->
  153. <!-- placeholder="请输入"-->
  154. <!-- ></el-input>-->
  155. <!-- </el-form-item>-->
  156. <!-- </el-col>-->
  157. <!-- <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">-->
  158. <!-- <el-form-item label="产品名称:">-->
  159. <!-- <el-input-->
  160. <!-- v-model="where.productName"-->
  161. <!-- size="mini"-->
  162. <!-- placeholder="请输入"-->
  163. <!-- ></el-input>-->
  164. <!-- </el-form-item>-->
  165. <!-- </el-col>-->
  166. <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
  167. <el-form-item label="交货日期:">
  168. <el-date-picker
  169. style="width: 100%"
  170. v-model="time"
  171. type="daterange"
  172. range-separator="至"
  173. start-placeholder="开始日期"
  174. end-placeholder="结束日期"
  175. size="mini"
  176. value-format="yyyy-MM-dd HH:mm:ss"
  177. :default-time="['00:00:00', '23:59:59']"
  178. >
  179. </el-date-picker>
  180. </el-form-item>
  181. </el-col>
  182. <!-- <el-col v-bind="styleResponsive ? { lg: 6, md: 6 } : { span: 6 }">-->
  183. <!-- <el-form-item label="组织机构:">-->
  184. <!-- <auth-selection-->
  185. <!-- data-type="Array"-->
  186. <!-- size="mini"-->
  187. <!-- v-model="where.deptIds"-->
  188. <!-- style="width: 100%"-->
  189. <!-- ></auth-selection>-->
  190. <!-- </el-form-item>-->
  191. <!-- </el-col>-->
  192. <el-col v-bind="styleResponsive ? { lg: 3, md: 12 } : { span: 3 }">
  193. <el-form-item label-width="0">
  194. <el-input
  195. size="mini"
  196. clearable
  197. v-model="where.searchInfo"
  198. placeholder="请输入查询信息"
  199. />
  200. </el-form-item>
  201. </el-col>
  202. <el-col v-bind="styleResponsive ? { lg: 4, md: 6 } : { span: 4 }">
  203. <div class="ele-form-actions">
  204. <el-dropdown trigger="click">
  205. <span class="el-dropdown-link">
  206. 展开<i class="el-icon-arrow-down el-icon--right"></i>
  207. </span>
  208. <el-dropdown-menu>
  209. <div class="searchExpend">
  210. <el-row>
  211. <el-form-item label="关键字:" label-width="80px">
  212. <el-input
  213. v-model="where.keyWord"
  214. size="mini"
  215. placeholder="请输入"
  216. ></el-input>
  217. </el-form-item>
  218. </el-row>
  219. <el-row>
  220. <el-form-item label="销售订单号:">
  221. <el-input
  222. v-model="where.code"
  223. size="mini"
  224. placeholder="请输入"
  225. ></el-input>
  226. </el-form-item>
  227. </el-row>
  228. <el-row>
  229. <el-form-item label="产品编码:">
  230. <el-input
  231. v-model="where.productCode"
  232. size="mini"
  233. placeholder="请输入"
  234. ></el-input>
  235. </el-form-item>
  236. </el-row>
  237. <el-row>
  238. <el-form-item label="订单来源:">
  239. <DictSelection
  240. dictName="订单来源"
  241. size="mini"
  242. clearable
  243. v-model="where.orderSource"
  244. >
  245. </DictSelection>
  246. </el-form-item>
  247. </el-row>
  248. <el-row>
  249. <el-form-item label="客户名称:">
  250. <el-input
  251. v-model="where.customerName"
  252. size="mini"
  253. placeholder="请输入"
  254. ></el-input>
  255. </el-form-item>
  256. </el-row>
  257. <el-row>
  258. <el-form-item label="销售类型:">
  259. <DictSelection
  260. dictName="订单类型"
  261. clearable
  262. size="mini"
  263. v-model="where.saleType"
  264. >
  265. </DictSelection>
  266. </el-form-item>
  267. </el-row>
  268. <el-row>
  269. <el-form-item label="业务员:">
  270. <el-input
  271. v-model="where.salesman"
  272. size="mini"
  273. placeholder="请输入"
  274. ></el-input>
  275. </el-form-item>
  276. </el-row>
  277. <el-row>
  278. <el-form-item label="产品名称:">
  279. <el-input
  280. v-model="where.productName"
  281. size="mini"
  282. placeholder="请输入"
  283. ></el-input>
  284. </el-form-item>
  285. </el-row>
  286. <!-- <el-row>
  287. <el-form-item label="组织机构:">
  288. <auth-selection
  289. data-type="Array"
  290. size="mini"
  291. v-model="where.deptIds"
  292. style="width: 100%"
  293. ></auth-selection>
  294. </el-form-item>
  295. </el-row> -->
  296. <el-row>
  297. <el-form-item label="按单按库:">
  298. <el-select
  299. v-model="where.orderLibraryType"
  300. placeholder="请选择"
  301. class="w100"
  302. size="mini"
  303. >
  304. <el-option
  305. v-for="item in orderTypeList"
  306. :key="item.value"
  307. :label="item.label"
  308. :value="item.value"
  309. >
  310. </el-option>
  311. </el-select>
  312. </el-form-item>
  313. </el-row>
  314. </div>
  315. </el-dropdown-menu>
  316. </el-dropdown>
  317. <el-button
  318. type="primary"
  319. size="mini"
  320. icon="el-icon-search"
  321. class="ele-btn-icon"
  322. @click="search"
  323. >
  324. 查询
  325. </el-button>
  326. <el-button
  327. @click="reset"
  328. size="mini"
  329. icon="el-icon-refresh-left"
  330. type="primary"
  331. >重置</el-button
  332. >
  333. </div>
  334. </el-col>
  335. <el-col v-bind="styleResponsive ? { lg: 24, md: 24 } : { span: 24 }">
  336. <el-form-item label-width="0px">
  337. <div class="btn-wrapper">
  338. <!-- <el-button
  339. @click="payBudget"
  340. size="mini"
  341. type="danger"
  342. >
  343. 交期预估</el-button
  344. > -->
  345. <!-- <el-button @click="homogeneityInspect" size="mini" type="success">
  346. 齐套性检查</el-button
  347. > -->
  348. <el-dropdown
  349. trigger="click"
  350. @command="homogeneityInspect"
  351. v-if="$hasPermission('aps:saleOrder:homogeneityInspect')"
  352. >
  353. <el-button size="mini" type="success">齐套性检查</el-button>
  354. <el-dropdown-menu slot="dropdown">
  355. <el-dropdown-item command="1"> 自制件 </el-dropdown-item>
  356. <el-dropdown-item command="2"> 采购件 </el-dropdown-item>
  357. <el-dropdown-item command="4"> 受托件 </el-dropdown-item>
  358. <!-- <el-dropdown-item command="3"> 外协件 </el-dropdown-item> -->
  359. </el-dropdown-menu>
  360. </el-dropdown>
  361. <el-button
  362. @click="goProduct"
  363. size="mini"
  364. v-if="
  365. activeName != 'second' &&
  366. $hasPermission('aps:salesorder:update')
  367. "
  368. >
  369. 转生产计划</el-button
  370. >
  371. <el-button
  372. type="primary"
  373. size="mini"
  374. @click="orderRefresh"
  375. :loading="loading"
  376. >订单刷新</el-button
  377. >
  378. <el-button
  379. type="success"
  380. size="mini"
  381. @click="toCreate"
  382. v-if="
  383. activeName == 'first' && $hasPermission('aps:salesorder:save')
  384. "
  385. >创建订单</el-button
  386. >
  387. <el-upload
  388. class="avatar-uploader"
  389. action="#"
  390. :show-file-list="false"
  391. v-if="
  392. activeName == 'first' && $hasPermission('aps:saleOrder:upload')
  393. "
  394. :http-request="uploadFile"
  395. :before-upload="beforeUpload"
  396. :on-change="handleChange"
  397. ref="uploadFile"
  398. >
  399. <el-button type="warning" size="mini">批量导入</el-button>
  400. </el-upload>
  401. <el-button
  402. type="info"
  403. size="mini"
  404. @click="
  405. importTemplate(
  406. '/aps/salesorder/importTemplate',
  407. '销售订单模板.xlsx'
  408. )
  409. "
  410. v-if="$hasPermission('aps:salesorder:download')"
  411. >
  412. 下载模板
  413. </el-button>
  414. <el-button
  415. type="danger"
  416. size="mini"
  417. @click="batchDelete"
  418. v-if="
  419. activeName == 'first' &&
  420. $hasPermission('aps:salesorder:batchDelete')
  421. "
  422. >批量删除</el-button
  423. >
  424. <el-button
  425. type="danger"
  426. size="mini"
  427. @click="synchronous"
  428. v-if="activeName == 'first' && clientEnvironmentId == 2"
  429. >同步数据</el-button
  430. >
  431. <el-button
  432. v-if="$hasPermission('aps:salesorder:export')"
  433. :disabled="selection.length < 1"
  434. type="primary"
  435. size="mini"
  436. @click="handlePrint"
  437. >打印</el-button
  438. >
  439. </div>
  440. </el-form-item>
  441. </el-col>
  442. </el-row>
  443. <!-- 导入异常 -->
  444. <import-exception ref="importDialog"> </import-exception>
  445. <!-- 创建订单 -->
  446. <create-order ref="createDialog" @refresh="search"> </create-order>
  447. <!-- 订单组合 -->
  448. <group-order ref="groupDialog"> </group-order>
  449. <printTemplateSaleOrder
  450. :groupName="groupName"
  451. ref="printTemplateSaleOrderRef"
  452. ></printTemplateSaleOrder>
  453. </el-form>
  454. </template>
  455. <script>
  456. import {
  457. findBomCategoryByCategoryId,
  458. listBomType
  459. } from '@/api/productionPlan/index';
  460. import ImportException from '../components/import-exception.vue';
  461. import CreateOrder from '../components/create-order.vue';
  462. import GroupOrder from '../components/group-order.vue';
  463. import { importFile } from '@/api/saleOrder';
  464. import { importTemplate } from '@/api/aps/presalesorder';
  465. import {
  466. pullSalesOrder,
  467. deleteOrder,
  468. synchronousDataByJDY
  469. } from '@/api/saleOrder';
  470. import printTemplateSaleOrder from './printTemplateSaleOrder.vue';
  471. export default {
  472. props: {
  473. selection: Array,
  474. activeName: String
  475. },
  476. components: {
  477. ImportException,
  478. CreateOrder,
  479. GroupOrder,
  480. printTemplateSaleOrder
  481. },
  482. data() {
  483. // 默认表单数据
  484. const defaultWhere = {
  485. keyWord: '',
  486. code: '',
  487. productCode: '',
  488. customerName: '',
  489. lineNumber: '',
  490. model: '',
  491. brandNo: '',
  492. orderSource: 0,
  493. saleType: 0,
  494. proStu: '',
  495. orderLibraryType: 0,
  496. salesman: '',
  497. productName: ''
  498. };
  499. return {
  500. importTemplate,
  501. // 表单数据
  502. defaultWhere,
  503. where: { ...defaultWhere },
  504. time: [],
  505. fileList: [],
  506. awaitProcuct: [{ value: 1, label: '待排产' }],
  507. treatProcuct: [{ value: 0, label: '未排完' }],
  508. alreadyProcuct: [
  509. { value: 0, label: '所有状态' },
  510. { value: 2, label: '待发布' },
  511. { value: 3, label: '发布失败' },
  512. { value: 4, label: '待生产' },
  513. { value: 5, label: '生产中' },
  514. { value: 6, label: '已完成' },
  515. { value: 7, label: '已延期' }
  516. ],
  517. orderTypeList: [
  518. { value: 0, label: '所有' },
  519. { value: 1, label: '按单' },
  520. { value: 2, label: '按库' }
  521. ],
  522. orderList: [
  523. {
  524. value: 0,
  525. label: '库存性订单'
  526. },
  527. {
  528. value: 1,
  529. label: '生产性订单'
  530. },
  531. {
  532. value: 2,
  533. label: '无客户生产性订单'
  534. },
  535. {
  536. value: 4,
  537. label: '不定向订单'
  538. }
  539. ],
  540. loading: false
  541. };
  542. },
  543. computed: {
  544. // 是否开启响应式布局
  545. styleResponsive() {
  546. return this.$store.state.theme.styleResponsive;
  547. },
  548. clientEnvironmentId() {
  549. return this.$store.state.user.info.clientEnvironmentId;
  550. }
  551. },
  552. watch: {
  553. activeName: {
  554. handler() {
  555. if (this.activeName == 'first') {
  556. this.where.proStu = 1;
  557. } else {
  558. this.where.proStu = 0;
  559. }
  560. this.reset();
  561. },
  562. immediate: true
  563. }
  564. },
  565. created() {},
  566. methods: {
  567. /* 搜索 */
  568. search() {
  569. if (this.time.length) {
  570. this.where.startTime = this.time[0];
  571. this.where.endTime = this.time[1];
  572. }
  573. this.$emit('search', this.where);
  574. },
  575. /* 重置 */
  576. reset() {
  577. this.time = [];
  578. this.where = { ...this.defaultWhere };
  579. if (this.activeName == 'first') {
  580. this.where.proStu = 1;
  581. } else {
  582. this.where.proStu = 0;
  583. }
  584. this.search();
  585. },
  586. toImport() {
  587. this.$refs.importDialog.open();
  588. },
  589. toCreate() {
  590. this.$refs.createDialog.open();
  591. },
  592. toGroup() {
  593. this.$refs.groupDialog.open();
  594. },
  595. async goProduct() {
  596. console.log(this.selection, 'this.selection 33');
  597. if (!this.selection.length) {
  598. return this.$message.warning('请先勾选一个或多个订单!');
  599. }
  600. const productCode = this.selection[0].productCode;
  601. const orderType = this.selection[0].orderType;
  602. const produceRoutingId = this.selection[0].produceRoutingId;
  603. const measuringUnit = this.selection[0].measuringUnit;
  604. const factoriesId = this.selection[0].factoriesId;
  605. const factoriesIdName = this.selection[0].factoriesIdName;
  606. const bomCategoryId = this.selection[0].bomCategoryId;
  607. const saleType = this.selection[0].saleType;
  608. let produceType = this.selection[0].produceType[0];
  609. // if(!factoriesId){
  610. // this.$message.warning('工厂未选择!');
  611. // return;
  612. // }
  613. for (var i = 0; i < this.selection.length; i++) {
  614. if (productCode != this.selection[i].productCode) {
  615. return this.$message.warning('产品编码不一致!');
  616. }
  617. if (orderType != this.selection[i].orderType) {
  618. return this.$message.warning('订单类型不一致!');
  619. }
  620. if (saleType != this.selection[i].saleType) {
  621. return this.$message.warning('销售类型不一致!');
  622. }
  623. if (produceRoutingId != this.selection[i].produceRoutingId) {
  624. return this.$message.warning('工艺路线不一致!');
  625. }
  626. if (measuringUnit != this.selection[i].measuringUnit) {
  627. return this.$message.warning('计量单位不一致!');
  628. }
  629. if (factoriesId != this.selection[i].factoriesId) {
  630. return this.$message.warning('所属工厂不一致!');
  631. }
  632. }
  633. const list = [];
  634. let startTime = '';
  635. let endTime = '';
  636. this.selection.map((item) => {
  637. if (!startTime) {
  638. startTime = item.releaseTime;
  639. } else {
  640. startTime =
  641. this.compareTimes(startTime, item.releaseTime) == 1
  642. ? item.releaseTime
  643. : startTime;
  644. }
  645. if (!endTime) {
  646. endTime = item.deliveryTime;
  647. } else {
  648. endTime =
  649. this.compareTimes(endTime, item.deliveryTime) == 2
  650. ? item.deliveryTime
  651. : endTime;
  652. }
  653. list.push(item.id);
  654. });
  655. if (produceRoutingId && !bomCategoryId) {
  656. produceType = '';
  657. }
  658. console.log(this.selection, 'this.selection 3333');
  659. let categoryId = this.selection[0].categoryId;
  660. let params = { categoryId: categoryId };
  661. const res = await listBomType(params);
  662. console.log(res, 'res 000');
  663. let bomMap = {
  664. 1: { code: 1, name: 'PBOM' },
  665. 2: { code: 2, name: 'MBOM' },
  666. 3: { code: 3, name: 'ABOM' }
  667. };
  668. let arr = [];
  669. res.map((item) => {
  670. if (bomMap[item.bomType]) {
  671. arr.push(bomMap[item.bomType]);
  672. delete bomMap[item.bomType];
  673. }
  674. });
  675. if (arr.length) {
  676. let obj = arr.find((el) => el.code == produceType);
  677. produceType = obj
  678. ? produceType
  679. : arr.filter((el) => el.code != 1)?.[0]?.code;
  680. }
  681. if (arr.length == 0) {
  682. produceType = '';
  683. }
  684. console.log(produceType, 'produceType');
  685. console.log(arr, 'arr 222');
  686. // const res = await findBomCategoryByCategoryId(categoryId);
  687. // let arr = [];
  688. // if (res.length > 0) {
  689. // let obj = res.find((item) => item.id === bomCategoryId);
  690. // produceType = obj ? obj.bomType : produceType;
  691. // let listMap = {
  692. // 1: { code: 1, name: 'PBOM' },
  693. // 2: { code: 2, name: 'MBOM' },
  694. // 3: { code: 3, name: 'ABOM' }
  695. // };
  696. // res.forEach((el) => {
  697. // if (listMap[el.bomType]) {
  698. // arr.push(listMap[el.bomType]);
  699. // delete listMap[el.bomType];
  700. // }
  701. // });
  702. // }
  703. this.$router
  704. .push({
  705. path: '/saleOrder/salesToProduction',
  706. query: {
  707. orderType,
  708. selection: JSON.stringify(list),
  709. produceRoutingId: produceRoutingId,
  710. produceRoutingName: this.selection[0].produceRoutingName,
  711. categoryId: this.selection[0].categoryId,
  712. factoriesId: factoriesId,
  713. factoriesIdName: factoriesIdName,
  714. bomCategoryId: bomCategoryId,
  715. produceType: produceType,
  716. startTime,
  717. endTime,
  718. producedList: JSON.stringify(arr)
  719. }
  720. })
  721. .catch((error) => {
  722. // 忽略重复导航错误
  723. if (error.name !== 'NavigationDuplicated') {
  724. console.error('路由跳转失败:', error);
  725. }
  726. });
  727. },
  728. // 比较时间大小
  729. compareTimes(timeStr1, timeStr2) {
  730. // 将时间字符串转换为Date对象
  731. // 注意:需要将空格替换为'T'以符合ISO格式,或者直接按格式解析
  732. const date1 = new Date(timeStr1.replace(' ', 'T'));
  733. const date2 = new Date(timeStr2.replace(' ', 'T'));
  734. if (date1 > date2) {
  735. return 1;
  736. } else {
  737. return 2;
  738. }
  739. },
  740. // 刷新订单
  741. orderRefresh() {
  742. this.loading = true;
  743. pullSalesOrder()
  744. .then((res) => {
  745. this.$message.success('刷新成功!');
  746. this.loading = false;
  747. })
  748. .catch(() => {
  749. this.loading = false;
  750. });
  751. },
  752. // 点击批量删除
  753. batchDelete() {
  754. if (!this.selection.length) {
  755. return this.$message.warning('请先勾选一个或多个订单!');
  756. }
  757. let ids = [];
  758. this.selection.map((item) => {
  759. ids.push(item.id);
  760. });
  761. this.$confirm('此操作将永久删除所选择的订单, 是否继续?', '提示', {
  762. confirmButtonText: '确定',
  763. cancelButtonText: '取消',
  764. type: 'warning'
  765. })
  766. .then(() => {
  767. deleteOrder(ids).then((res) => {
  768. this.$message.success(res);
  769. this.search();
  770. });
  771. })
  772. .catch(() => {});
  773. },
  774. handleChange(file, fileList) {
  775. this.fileList = fileList;
  776. console.log(fileList);
  777. },
  778. //上传限制
  779. beforeUpload(file) {
  780. const isLt10M = file.size / 1024 / 1024 < 10;
  781. if (!isLt10M) {
  782. this.$message.error('上传文件大小不能超过 10MB!');
  783. }
  784. return isLt10M;
  785. },
  786. //文件上传
  787. uploadFile(param) {
  788. let fd = new FormData();
  789. this.fileList.forEach((item) => {
  790. fd.append('importExcel', item.raw);
  791. });
  792. importFile(fd)
  793. .then((res) => {
  794. this.$emit('search', this.where);
  795. this.$refs.uploadFile.clearFiles();
  796. })
  797. .catch((data) => {
  798. if (data.code != -1) {
  799. this.$message.error(data.message);
  800. }
  801. })
  802. .finally(() => {
  803. this.$refs.uploadFile.clearFiles();
  804. });
  805. },
  806. synchronous() {
  807. synchronousDataByJDY().then((res) => {
  808. this.$message.success('同步成功!');
  809. this.reset();
  810. });
  811. },
  812. // payBudget() {},
  813. homogeneityInspect(val) {
  814. console.log(val, 'val');
  815. this.$emit('check', val);
  816. },
  817. handlePrint() {
  818. console.log(this.selection[0]);
  819. if (this.selection.length > 1)
  820. return this.$message.warning('请选择一条');
  821. this.$refs.printTemplateSaleOrderRef.open(this.selection[0]);
  822. }
  823. }
  824. };
  825. </script>
  826. <style lang="scss" scoped>
  827. .ele-form-actions {
  828. display: flex;
  829. align-items: center;
  830. justify-content: flex-start;
  831. padding-top: 4.5px;
  832. }
  833. .btn-wrapper {
  834. display: flex;
  835. align-items: center;
  836. justify-content: flex-start;
  837. flex-wrap: wrap;
  838. }
  839. .avatar-uploader {
  840. display: inline-block;
  841. margin: 0 10px;
  842. }
  843. .button-link {
  844. color: #fff;
  845. }
  846. .searchExpend {
  847. padding: 20px 50px 0 30px;
  848. }
  849. </style>