乐天mes前端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

641 lines
21 KiB

5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
  1. <template>
  2. <div class="mod-config">
  3. <el-form inline="true" style="margin-top: -25px;" v-model="searchData">
  4. <el-form :inline="true" label-position="top" label-width="100px" style="margin-top: 5px;">
  5. <el-form-item :label="'订单号:'">
  6. <el-input v-model="searchData.orderNo" style="width: 120px"></el-input>
  7. </el-form-item>
  8. <el-form-item :label="'计划开工日期:'" >
  9. <el-date-picker
  10. style="width: 130px"
  11. v-model="searchData.startDate2"
  12. type="date"
  13. value-format="yyyy-MM-dd"
  14. placeholder="选择日期">
  15. </el-date-picker>
  16. </el-form-item>
  17. <el-form-item style="margin-top: 30px;">
  18. <laber style="margin-left: -9px;font-size: 19px">&#10142</laber>
  19. </el-form-item>
  20. <el-form-item style="margin-top: 30px;">
  21. <el-date-picker
  22. style="width: 130px"
  23. v-model="searchData.endDate2"
  24. type="date"
  25. value-format="yyyy-MM-dd"
  26. placeholder="选择日期">
  27. </el-date-picker>
  28. </el-form-item>
  29. <el-form-item :label="'计划完工日期:'">
  30. <el-date-picker
  31. style="width: 130px"
  32. v-model="searchData.startDate3"
  33. type="date"
  34. value-format="yyyy-MM-dd"
  35. placeholder="选择日期">
  36. </el-date-picker>
  37. </el-form-item>
  38. <el-form-item style="margin-top: 30px;">
  39. <laber style="margin-left: -9px;font-size: 19px">&#10142</laber>
  40. </el-form-item>
  41. <el-form-item style="margin-top: 30px;">
  42. <el-date-picker
  43. style="width: 130px"
  44. v-model="searchData.endDate3"
  45. type="date"
  46. value-format="yyyy-MM-dd"
  47. placeholder="选择日期">
  48. </el-date-picker>
  49. </el-form-item>
  50. </el-form>
  51. <el-form :inline="true" label-position="top" label-width="100px" style="margin-top: 5px;">
  52. <el-form-item :label="'状态:'">
  53. <el-select filterable v-model="searchData.status" style="width: 120px">
  54. <el-option label="全部" value=""></el-option>
  55. <el-option label="可排产" value="('已下达','已发料','已入库','已开工')"></el-option>
  56. <el-option label="不可排产" value="('已计划','已取消','已关闭')"></el-option>
  57. </el-select>
  58. </el-form-item>
  59. <el-form-item :label="'录入日期:'">
  60. <el-date-picker
  61. style="width: 130px"
  62. v-model="searchData.startDate1"
  63. value-format="yyyy-MM-dd"
  64. placeholder="选择日期">
  65. </el-date-picker>
  66. </el-form-item>
  67. <el-form-item style="margin-top: 30px;">
  68. <laber style="margin-left: -9px;font-size: 19px">&#10142</laber>
  69. </el-form-item>
  70. <el-form-item style="margin-top: 30px;">
  71. <el-date-picker
  72. style="width: 130px"
  73. v-model="searchData.endDate1"
  74. type="date"
  75. value-format="yyyy-MM-dd"
  76. placeholder="选择日期">
  77. </el-date-picker>
  78. </el-form-item>
  79. <el-form-item :label="'物料编码:'">
  80. <el-input v-model="searchData.partNo" style="width: 130px"></el-input>
  81. </el-form-item>
  82. <el-form-item style="margin-top: 30px">
  83. <el-button @click="search()" style="margin-left: 24px" type="primary">查询</el-button>
  84. </el-form-item>
  85. </el-form>
  86. </el-form>
  87. <el-table
  88. :height="height"
  89. :data="tableData"
  90. border
  91. style="width: 100%"
  92. @selection-change="selectionChangeHandle">
  93. <el-table-column
  94. type="selection"
  95. :selectable="checkSelections"
  96. width="44">
  97. </el-table-column>
  98. <!-- <el-table-column-->
  99. <!-- align="center"-->
  100. <!-- width="40"-->
  101. <!-- type="selection">-->
  102. <!-- <template slot-scope="scope">-->
  103. <!-- <el-checkbox v-if="scope.row.status==1" ></el-checkbox>-->
  104. <!-- </template>-->
  105. <!-- </el-table-column>-->
  106. <el-table-column
  107. prop="orderNo"
  108. header-align="center"
  109. align="left"
  110. min-width="60"
  111. label="订单号">
  112. </el-table-column>
  113. <el-table-column
  114. prop="partNo"
  115. header-align="center"
  116. align="left"
  117. min-width="60"
  118. label="物料编码">
  119. </el-table-column>
  120. <el-table-column
  121. prop="partDescription"
  122. header-align="center"
  123. align="left"
  124. min-width="200"
  125. label="物料名称">
  126. </el-table-column>
  127. <el-table-column
  128. prop="status"
  129. header-align="center"
  130. align="left"
  131. min-width="40"
  132. label="状态">
  133. </el-table-column>
  134. <el-table-column
  135. prop="planStartDate"
  136. header-align="center"
  137. align="left"
  138. min-width="50"
  139. label="计划开工日期">
  140. </el-table-column>
  141. <el-table-column
  142. prop="needDate"
  143. header-align="center"
  144. align="left"
  145. min-width="50"
  146. label="计划完工日期">
  147. </el-table-column>
  148. <el-table-column
  149. prop="lotSize"
  150. header-align="center"
  151. align="right"
  152. min-width="40"
  153. label="订单数量">
  154. </el-table-column>
  155. <el-table-column
  156. prop="schedulingSize"
  157. header-align="center"
  158. align="right"
  159. min-width="40"
  160. label="已排产数量">
  161. </el-table-column>
  162. <el-table-column
  163. prop="enterDate"
  164. header-align="center"
  165. align="left"
  166. min-width="80"
  167. label="录入时间">
  168. </el-table-column>
  169. <el-table-column
  170. prop="userName"
  171. header-align="center"
  172. align="left"
  173. min-width="40"
  174. label="录入人">
  175. </el-table-column>
  176. <el-table-column
  177. prop=""
  178. fixed="right"
  179. header-align="center"
  180. align="center"
  181. min-width="30"
  182. label="操作">
  183. <template slot-scope="scope">
  184. <a type="text" size="small" @click="openScheduleModel(scope.row)">排产</a>
  185. </template>
  186. </el-table-column>
  187. </el-table>
  188. <el-dialog title="排产信息" :visible.sync="schedulingFlag" :close-on-click-modal="false" v-drag width="800px" >
  189. <el-form :inline="true" label-position="top">
  190. <el-form-item :label="'订单号:'">
  191. <el-input v-model="scheduledModelData.orderNo" readonly style="width: 130px"></el-input>
  192. </el-form-item>
  193. <el-form-item :label="'计划开工日期:'">
  194. <el-input v-model="scheduledModelData.planStartDate" readonly style="width: 130px"></el-input>
  195. </el-form-item>
  196. <el-form-item :label="'计划完工日期:'">
  197. <el-input v-model="scheduledModelData.needDate" readonly style="width: 130px"></el-input>
  198. </el-form-item>
  199. <el-form-item :label="'已排产数量:'">
  200. <el-input v-model="scheduledModelData.schedulingSize" readonly style="width: 100px"></el-input>
  201. </el-form-item>
  202. <el-form-item :label="'未排产数量:'">
  203. <el-input v-model="scheduledModelData.unSchedulingSize" readonly style="width: 100px"></el-input>
  204. </el-form-item>
  205. <el-button @click="schedulingModal()" type="primary" style="margin-top: 33px;margin-left: 40px;">新增</el-button>
  206. </el-form>
  207. <el-table
  208. :height="300"
  209. :data="scheduleTableData"
  210. border
  211. style="width: 100%">
  212. <el-table-column
  213. prop="orderDate"
  214. header-align="center"
  215. align="left"
  216. min-width="50"
  217. label="计划日期">
  218. </el-table-column>
  219. <el-table-column
  220. prop="shiftdesc"
  221. header-align="center"
  222. align="left"
  223. min-width="40"
  224. label="班次名称">
  225. </el-table-column>
  226. <el-table-column
  227. prop="orderQty"
  228. header-align="center"
  229. align="right"
  230. min-width="40"
  231. label="排产数量">
  232. </el-table-column>
  233. <el-table-column
  234. prop="qtyCirculation"
  235. header-align="center"
  236. align="right"
  237. min-width="40"
  238. label="已流转数">
  239. </el-table-column>
  240. <el-table-column
  241. prop="userName"
  242. header-align="center"
  243. align="left"
  244. min-width="50"
  245. label="录入人">
  246. </el-table-column>
  247. <el-table-column
  248. prop="enterDate"
  249. header-align="center"
  250. align="left"
  251. min-width="90"
  252. label="录入日期">
  253. </el-table-column>
  254. <el-table-column
  255. prop=""
  256. header-align="center"
  257. align="center"
  258. min-width="50"
  259. label="操作">
  260. <template slot-scope="scope" class="foo_container">
  261. <a type="text" size="small" @click="editSchedule(scope.row)">编辑</a>
  262. <a type="text" size="small" @click="deleteSchedule(scope.row)">删除</a>
  263. </template>
  264. </el-table-column>
  265. </el-table>
  266. <el-footer style="height:40px;margin-top: 20px;text-align:center" >
  267. <el-button type="primary" @click="schedulingFlag = false">取消</el-button>
  268. <!-- <el-button type="primary" :disabled="bannersBut" @click="saveBanners()">确定</el-button>-->
  269. </el-footer>
  270. </el-dialog>
  271. <el-dialog title="维护日计划" :close-on-click-modal="false" v-drag :visible.sync="schedulingModalFlag" width="341px" >
  272. <el-form :inline="true" label-position="top" style="margin-left: 7px;margin-top: -5px;">
  273. <el-form-item :label="'订单号:'">
  274. <el-input v-model="scheduledingData.orderNo" disabled style="width: 130px"></el-input>
  275. </el-form-item>
  276. <el-form-item :label="'计划日期:'">
  277. <el-date-picker
  278. style="width: 130px"
  279. v-model="scheduledingData.orderDate"
  280. type="date"
  281. value-format="yyyy-MM-dd"
  282. :disabled="scheduledingDataFlag1"
  283. placeholder="选择日期">
  284. </el-date-picker>
  285. </el-form-item>
  286. <el-form-item :label="'计划班次:'" >
  287. <!-- <el-input v-model="scheduledingData.shiftId" :disabled="scheduledingDataFlag1" style="width: 130px"></el-input>-->
  288. <el-select v-model="scheduledingData.shiftId" :disabled="scheduledingDataFlag1" style="width: 130px" placeholder="请选择">
  289. <el-option
  290. v-for="(item,index) in selectList"
  291. :key="index"
  292. :label="item.label"
  293. :value="item.value"
  294. >
  295. </el-option>
  296. </el-select>
  297. </el-form-item>
  298. <el-form-item :label="'计划数量:'">
  299. <el-input v-model="scheduledingData.orderQty" style="width: 130px"></el-input>
  300. </el-form-item>
  301. </el-form>
  302. <el-footer style="height:40px;margin-top: 20px;text-align:center" >
  303. <el-button type="primary" v-if="scheduledingDataFlag3" @click="planSaveOn()">保存并继续</el-button>
  304. <el-button type="primary" @click="planSave()">保存</el-button>
  305. <el-button type="primary" @click="schedulingModalFlag = false">取消</el-button>
  306. </el-footer>
  307. </el-dialog>
  308. </div>
  309. </template>
  310. <script>
  311. import {
  312. getShopOrderData,
  313. getSchedulingSize,
  314. savePlan,
  315. getWorkPlanData,
  316. delPlan,
  317. getShiftData,
  318. } from "@/api/prd.js"
  319. export default {
  320. name: 'productionDispatch',
  321. data () {
  322. return {
  323. selectList:[],
  324. //维护日计划界面
  325. schedulingModalFlag:false,
  326. scheduleTableData:[],
  327. scheduledModelData:{
  328. orderNo:'',
  329. planStartDate:'',
  330. needDate:'',
  331. schedulingSize:'',
  332. unSchedulingSize:'',
  333. },
  334. dataListSelections:[],
  335. scheduledingData:{
  336. orderNo:'',
  337. orderDate:'',
  338. orderQty:'',
  339. shiftId:'',
  340. userName:this.$store.state.user.name,
  341. lotSize:'',
  342. planStartDate:'',
  343. needDate:'',
  344. site:this.$store.state.user.site,
  345. productionType:'生产订单',
  346. planAdd:0,
  347. partNo:'',
  348. },
  349. scheduledingDataFlag1:false,
  350. scheduledingDataFlag3:true,
  351. schedulingFlag:false ,
  352. tableData:[],
  353. searchData:{
  354. orderNo:'',
  355. startDate1: new Date(),
  356. endDate1: '',
  357. startDate2: '',
  358. endDate2: '',
  359. status: "('已下达','已发料','已入库','已开工')",
  360. partNo:'' ,
  361. startDate3: '',
  362. endDate3: '',
  363. site:this.$store.state.user.site ,
  364. },
  365. // table高度
  366. height:200,
  367. }
  368. },
  369. mounted() {
  370. this.$nextTick(()=>{
  371. this.height = window.innerHeight - 270;
  372. })
  373. },
  374. methods: {
  375. search () {
  376. this.getData();
  377. },
  378. //维护日计划界面
  379. schedulingModal () {
  380. if(this.scheduledModelData.unSchedulingSize==0){
  381. this.$alert("该日计划已排产完毕无需新增!", '错误', {
  382. confirmButtonText: '确定',
  383. });
  384. return false;
  385. }
  386. this.scheduledingDataFlag1 = false;
  387. this.scheduledingDataFlag3 = true;
  388. this.scheduledingData.userName = this.$store.state.user.name;
  389. this.scheduledingData.planStartDate = this.scheduledModelData.planStartDate;
  390. this.scheduledingData.needDate = this.scheduledModelData.needDate;
  391. this.scheduledingData.orderNo = this.scheduledModelData.orderNo;
  392. this.scheduledingData.orderDate = this.scheduledModelData.planStartDate;
  393. this.scheduledingData.planAdd = 0;
  394. this.scheduledingData.orderQty = "";
  395. this.scheduledingData.shiftId = "";
  396. this.schedulingModalFlag = true;
  397. },
  398. // 多选数据
  399. selectionChangeHandle (val) {
  400. this.dataListSelections = val;
  401. },
  402. //多选框选中触发判断
  403. checkSelections(row){
  404. if(row.status=="已计划"||row.status=="已取消"||row.status=="已关闭"){
  405. return false;
  406. }
  407. if(row.schedulingSize>=row.orderQty){
  408. return false;
  409. }
  410. return true;
  411. },
  412. //排产信息界面
  413. openScheduleModel (row) {
  414. if(row.status=="已计划"||row.status=="已取消"||row.status=="已关闭"){
  415. this.$alert("该订单状态为"+row.status+"无法排产", '错误', {
  416. confirmButtonText: '确定',
  417. });
  418. return false;
  419. }
  420. let list={orderNo:row.orderNo}
  421. getSchedulingSize(list).then(({data}) => {
  422. this.scheduledModelData.schedulingSize = data.schedulingSize;
  423. this.scheduledModelData.unSchedulingSize = row.lotSize - data.schedulingSize;
  424. })
  425. this.scheduledingData.lotSize = row.lotSize;
  426. this.scheduledingData.partNo = row.partNo;
  427. this.scheduledModelData.needDate = row.needDate;
  428. this.scheduledModelData.planStartDate = row.planStartDate;
  429. this.scheduledModelData.orderNo = row.orderNo;
  430. this.schedulingFlag = true;
  431. let data1 = {orderNo: row.orderNo}
  432. getWorkPlanData(data1).then(({data}) => {
  433. this.scheduleTableData = data.rows
  434. })
  435. },
  436. // 查询
  437. getData () {
  438. getShopOrderData(JSON.parse(JSON.stringify(this.searchData))).then(({data}) => {
  439. this.tableData = data.rows;
  440. })
  441. },
  442. planSave () {
  443. if (this.scheduledingData.orderDate == "" || null == this.scheduledingData.orderDate) {
  444. this.$alert("请选择计划日期!", '错误', {
  445. confirmButtonText: '确定',
  446. });
  447. return false;
  448. }
  449. if (this.scheduledingData.orderQty == "" || null == this.scheduledingData.orderQty) {
  450. this.$alert("请输入排产数量!", '错误', {
  451. confirmButtonText: '确定',
  452. });
  453. return false;
  454. }
  455. if (this.scheduledingData.orderQty <= 0 ) {
  456. this.$alert("排产数量必须大于0!", '错误', {
  457. confirmButtonText: '确定',
  458. });
  459. return false;
  460. }
  461. if (this.scheduledingData.shiftId == "") {
  462. this.$alert("请输入排产班次!", '错误', {
  463. confirmButtonText: '确定',
  464. });
  465. return false;
  466. }
  467. // this.scheduledingData.orderDate = this.format(this.scheduledingData.orderDate,'yyyy-MM-dd')
  468. savePlan(this.scheduledingData).then(({data}) => {
  469. if (data && data.code === 0) {
  470. this.scheduledModelData.schedulingSize = data.schedulingSize;
  471. this.scheduledModelData.unSchedulingSize = this.scheduledingData.lotSize - data.schedulingSize;
  472. this.schedulingModalFlag = false;
  473. let data1 = {orderNo: this.scheduledModelData.orderNo}
  474. getWorkPlanData(data1).then(({data}) => {
  475. this.scheduleTableData = data.rows
  476. })
  477. this.getData()
  478. this.$message({
  479. message: '操作成功',
  480. type: 'success',
  481. duration: 1500,
  482. onClose: () => {
  483. }
  484. })
  485. } else {
  486. this.$alert(data.msg, '错误', {
  487. confirmButtonText: '确定',
  488. });
  489. }
  490. })
  491. },
  492. planSaveOn () {
  493. if (this.scheduledingData.orderDate == "" || null == this.scheduledingData.orderDate) {
  494. this.$alert("请选择计划日期!", '错误', {
  495. confirmButtonText: '确定',
  496. });
  497. return false;
  498. }
  499. if (this.scheduledingData.orderQty == "" || null == this.scheduledingData.orderQty) {
  500. this.$alert("请输入排产数量!", '错误', {
  501. confirmButtonText: '确定',
  502. });
  503. return false;
  504. }
  505. if (this.scheduledingData.shiftId == "") {
  506. this.$alert("请输入排产班次!", '错误', {
  507. confirmButtonText: '确定',
  508. });
  509. return false;
  510. }
  511. if (this.scheduledingData.orderQty <= 0 ) {
  512. this.$alert("排产数量必须大于0!", '错误', {
  513. confirmButtonText: '确定',
  514. });
  515. return false;
  516. }
  517. savePlan(this.scheduledingData).then(({data}) => {
  518. if (data && data.code === 0) {
  519. getShiftData().then(({data}) => {
  520. this.shiftData = data.rows;
  521. })
  522. this.$message({
  523. message: '操作成功',
  524. type: 'success',
  525. duration: 1500,
  526. onClose: () => {
  527. }
  528. })
  529. } else {
  530. this.$alert(data.msg, '错误', {
  531. confirmButtonText: '确定',
  532. });
  533. }
  534. })
  535. },
  536. //修改日计划
  537. editSchedule (row) {
  538. this.scheduledingDataFlag1 = true;
  539. this.scheduledingDataFlag3 = false;
  540. this.scheduledingData.userName = this.$store.state.user.name;
  541. this.scheduledingData.planStartDate = this.scheduledModelData.planStartDate;
  542. this.scheduledingData.needDate = this.scheduledModelData.needDate;
  543. this.scheduledingData.orderNo = this.scheduledModelData.orderNo;
  544. this.scheduledingData.orderDate = row.orderDate;
  545. this.scheduledingData.planAdd = 1;
  546. this.scheduledingData.orderQty = row.orderQty;
  547. this.scheduledingData.shiftId = row.shiftId;
  548. this.schedulingModalFlag = true;
  549. },
  550. //刪除
  551. deleteSchedule (row) {
  552. let delData = {
  553. orderNo: row.orderNo,
  554. orderQty: row.orderQty,
  555. orderRef1: row.orderRef1,
  556. }
  557. this.$confirm(`是否删除此条记录?`, '提示', {
  558. confirmButtonText: '确定',
  559. cancelButtonText: '取消',
  560. type: 'warning'
  561. }).then(() => {
  562. delPlan(delData).then(({data}) => {
  563. if (data && data.code === 0) {
  564. this.scheduledModelData.schedulingSize = data.schedulingSize;
  565. this.scheduledModelData.unSchedulingSize = this.scheduledingData.lotSize - data.schedulingSize;
  566. this.getData();
  567. let data1 = {orderNo: this.scheduledModelData.orderNo}
  568. getWorkPlanData(data1).then(({data}) => {
  569. this.scheduleTableData = data.rows
  570. })
  571. this.$message({
  572. message: '操作成功',
  573. type: 'success',
  574. duration: 1500,
  575. onClose: () => {
  576. }
  577. })
  578. } else {
  579. this.$alert(data.msg, '错误', {
  580. confirmButtonText: '确定',
  581. });
  582. }
  583. })
  584. }).catch(() => {
  585. })
  586. },
  587. getTime(date) {
  588. if(date==''){
  589. return ""
  590. }else{
  591. let json_date = new Date(date).toJSON();
  592. return new Date(new Date(json_date) + 8 * 3600 * 1000).toISOString().replace(/T/g, ' ').replace(/\.[\d]{3}Z/, '')
  593. }
  594. },
  595. getSelectData(){
  596. this.selectList=[];
  597. getShiftData().then(({data}) => {
  598. let list=data.rows;
  599. for (let i = 0; i <list.length ; i++) {
  600. let resultData = {
  601. value:list[i].id,
  602. label:list[i].shiftdesc
  603. }
  604. this.selectList.push(resultData);
  605. }
  606. })
  607. }
  608. },
  609. created() {
  610. this.getSelectData();
  611. }
  612. }
  613. </script>
  614. <style scoped>
  615. </style>