MRPEdit.vue 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404
  1. <template>
  2. <a-modal
  3. title="编辑"
  4. width="95%"
  5. :visible="visible"
  6. :maskClosable="false"
  7. switchFullscreen
  8. @cancel="handleCancel"
  9. @ok='handleOk'
  10. >
  11. <template slot="footer">
  12. <a-button @click="handleCancel">关闭</a-button>
  13. <a-button type="primary" @click="handleOk" >保存</a-button>
  14. </template>
  15. <a-card :bordered="false" class="top" style="margin-bottom:1%;margin-top:1%" :loading = 'loading'>
  16. <div class="table-page-search-wrapper">
  17. <a-form layout="inline" >
  18. <a-row :gutter="24">
  19. <a-col :md="4" :sm="24">
  20. <a-form-item label="生产组织">
  21. <a-input-search placeholder="请输入" v-model="form.productionOrg" @search="onSearchPlanOrg" readOnly ></a-input-search>
  22. </a-form-item>
  23. </a-col>
  24. <a-col :md="4" :sm="24">
  25. <a-form-item label="项目">
  26. <a-input-search placeholder="请输入" v-model="form.projectName" @search="onSearchProject" readOnly ></a-input-search>
  27. </a-form-item>
  28. </a-col>
  29. <a-col :md="4" :sm="24">
  30. <a-form-item label="单据日期">
  31. <a-date-picker showTime valueFormat="YYYY-MM-DD" format = "YYYY-MM-DD" v-model="form.orderDate" style="width:100%" />
  32. </a-form-item>
  33. </a-col>
  34. <a-col :md="4" :sm="24">
  35. <a-form-item label="单据号">
  36. <a-input placeholder="请输入" v-model="form.orderCode" ></a-input>
  37. </a-form-item>
  38. </a-col>
  39. <a-col :md="4" :sm="24">
  40. <a-form-item label="业务员">
  41. <a-input-search placeholder="请输入" v-model="form.salesperson" @search="onSearchPerson" readOnly></a-input-search>
  42. </a-form-item>
  43. </a-col>
  44. <a-col :md="4" :sm="24">
  45. <a-form-item label="计划部门">
  46. <a-input-search placeholder="请输入" v-model="form.planDept" @search="onSearchDept" readOnly ></a-input-search>
  47. </a-form-item>
  48. </a-col>
  49. <a-col :md="4" :sm="24">
  50. <a-form-item label="单据状态">
  51. <a-select v-model="form.state" style='width:100%' disabled>
  52. <a-select-option value='自由'> 自由</a-select-option>
  53. <a-select-option value='已批准'> 已批准</a-select-option>
  54. </a-select>
  55. </a-form-item>
  56. </a-col>
  57. <a-col :md="4" :sm="24">
  58. <a-form-item label="备注">
  59. <a-input-search placeholder="请输入" v-model="form.remarks" @search="onSearch" ></a-input-search>
  60. </a-form-item>
  61. </a-col>
  62. <a-col :md="4" :sm="24">
  63. <a-form-item label="业务类型">
  64. <a-select v-model="form.type" style='width:100%' @change="changeType">
  65. <a-select-option value='工装'> 工装</a-select-option>
  66. <a-select-option value='家装'> 家装</a-select-option>
  67. </a-select>
  68. </a-form-item>
  69. </a-col>
  70. <a-col :md="4" :sm="24">
  71. <a-form-item label="工单号">
  72. <a-input placeholder="请输入" v-model="form.workNo" ></a-input>
  73. </a-form-item>
  74. </a-col>
  75. </a-row>
  76. </a-form>
  77. </div>
  78. </a-card>
  79. <a-card :bordered="false" class="three" style="margin-bottom:1%" :loading = 'loading'>
  80. <div class="table-operator">
  81. <a-button type="danger" size="small" @click="updataProRequirment" v-if="form.type=='工装'">更新采购需求</a-button>
  82. <a-button size="small" @click="generatePurchaseOrder">生成采购单</a-button>
  83. <a-button size="small" @click="generatetRansferOrder">生成转库单</a-button>
  84. </div>
  85. <a-tabs v-model="activeKey" @change="handleChangeTabs">
  86. <a-tab-pane tab="需求" :key="refKeys[0]" :forceRender="true">
  87. <demand ref="demand"></demand>
  88. </a-tab-pane>
  89. <a-tab-pane tab="供应" :key="refKeys[1]" :forceRender="true">
  90. <supply ref="supply"></supply>
  91. </a-tab-pane>
  92. <a-tab-pane tab="供需平衡结果" :key="refKeys[2]" :forceRender="true">
  93. <supplyDemandBalance ref="supplyDemandBalance"></supplyDemandBalance>
  94. </a-tab-pane>
  95. <a-tab-pane tab="采购需求" :key="refKeys[3]" :forceRender="true">
  96. <ProRequirements ref="ProRequirements"></ProRequirements>
  97. </a-tab-pane>
  98. <a-tab-pane tab="转库需求" :key="refKeys[4]" :forceRender="true" v-if="form.type=='工装'">
  99. <TraRequirements ref="TraRequirements"></TraRequirements>
  100. </a-tab-pane>
  101. </a-tabs>
  102. </a-card>
  103. <a-card :bordered="false" class="bottom" style="margin-bottom:1%">
  104. <div class="table-page-search-wrapper">
  105. <a-form layout="inline" >
  106. <a-row :gutter="24">
  107. <a-col :md="6" :sm="24">
  108. <a-form-item label="制单人">
  109. <a-input placeholder="请输入" v-model="form1.createBy" disabled></a-input>
  110. </a-form-item>
  111. </a-col>
  112. <a-col :md="6" :sm="24">
  113. <a-form-item label="审批人">
  114. <a-input placeholder="请输入" v-model="form1.reviewer" disabled></a-input>
  115. </a-form-item>
  116. </a-col>
  117. <a-col :md="6" :sm="24">
  118. <a-form-item label="最后修改人">
  119. <a-input placeholder="请输入" v-model="form1.updateBy" disabled></a-input>
  120. </a-form-item>
  121. </a-col>
  122. <a-col :md="6" :sm="24">
  123. <a-form-item label="最后修改时间">
  124. <a-date-picker showTime valueFormat="YYYY-MM-DD" format = "YYYY-MM-DD" v-model="form1.updateTime" disabled/>
  125. </a-form-item>
  126. </a-col>
  127. </a-row>
  128. </a-form>
  129. </div>
  130. </a-card>
  131. <organizationPopup ref="organizationPopup" @okData="okDataOrganization"></organizationPopup>
  132. <OperatorsPopup ref="OperatorsPopup" @okData="okDataOperators"></OperatorsPopup>
  133. <projectPopup ref="projectPopup" @okData="okData"></projectPopup>
  134. <deparmentPopup ref="deparmentPopup" @okData="okDataDeparment"></deparmentPopup>
  135. </a-modal>
  136. </template>
  137. <script>
  138. import { FormTypes } from '@/utils/JEditableTableUtil'
  139. import { JEditableTableModelMixin } from '@/mixins/JEditableTableModelMixin'
  140. import moment from "moment"
  141. import { httpAction ,getAction,postAction,putAction} from '@/api/manage'
  142. import demand from './demand'
  143. import supply from './supply'
  144. import supplyDemandBalance from './supplyDemandBalance'
  145. import ProRequirements from './ProRequirements'
  146. import TraRequirements from './TraRequirements'
  147. import organizationPopup from '../../Popup/organizationPopup.vue'
  148. import projectPopup from '../../Popup/projectPopup'
  149. import OperatorsPopup from '../../Popup/OperatorsPopup.vue'
  150. import deparmentPopup from '../../Popup/deparmentPopup.vue'
  151. export default {
  152. name: 'MRPEdit',
  153. mixins: [JEditableTableModelMixin],
  154. components: {
  155. demand,
  156. supply,
  157. supplyDemandBalance,
  158. ProRequirements,
  159. TraRequirements,
  160. organizationPopup,
  161. projectPopup,
  162. deparmentPopup,
  163. OperatorsPopup
  164. },
  165. data() {
  166. return {
  167. visible:false,
  168. form:{},
  169. form1:{},
  170. execute:undefined,
  171. dataSource:[],
  172. loading:false,
  173. // ipagination:{},
  174. selectedRowKeys:[],
  175. selectedRows:[],
  176. activeKey:'demand',
  177. refKeys:['demand','supply','supplyDemandBalance','ProRequirements','Warehousing'],
  178. }
  179. },
  180. created() {
  181. },
  182. methods: {
  183. handleCancel(){
  184. this.visible=false
  185. this.activeKey='demand',
  186. this.dataSource = []
  187. this.form={}
  188. this.form1={}
  189. this.$emit('ok')
  190. },
  191. handleTableChange(){
  192. },
  193. onSearch(){
  194. },
  195. onSearchProject(){
  196. this.$refs.projectPopup.visible = true
  197. this.$refs.projectPopup.getData()
  198. },
  199. onSearchDept(){
  200. this.$refs.deparmentPopup.visible = true
  201. this.$refs.deparmentPopup.getData()
  202. },
  203. okData(data){
  204. this.$set(this.form,'projectName',data.Name)
  205. this.$set(this.form,'project',data.ID)
  206. },
  207. okDataDeparment(data){
  208. this.$set(this.form,'planDept',data.Name)
  209. },
  210. getMainData(id){
  211. getAction('/MRPOperationList/madeOperationList/queryById',{id:id}).then(res=>{
  212. if(res.success){
  213. this.form=res.result
  214. this.form1=res.result
  215. this.getDemandData(this.form.id)
  216. this.getSupplyData(this.form.id)
  217. this.getSupplyDemandBalanceData(this.form.id)
  218. this.getProRequirementsData(this.form.id)
  219. if(this.form.type=='工装'){
  220. this.getTraRequirementsData(this.form.id)
  221. }
  222. }else{
  223. this.$message.error(res.message);
  224. }
  225. })
  226. },
  227. getDemandData(id){
  228. getAction('/MRPOperationList/madeOperationList/queryMadeOperationListDemandByMainId',{id:id}).then(res=>{
  229. if(res.success){
  230. this.$refs.demand.dataSource = res.result
  231. }else{
  232. this.$message.error(res.message);
  233. }
  234. })
  235. },
  236. getSupplyData(id){
  237. getAction('/MRPOperationList/madeOperationList/queryMadeOperationListProvideByMainId',{id:id}).then(res=>{
  238. if(res.success){
  239. this.$refs.supply.dataSource = res.result
  240. }else{
  241. this.$message.error(res.message);
  242. }
  243. })
  244. },
  245. getSupplyDemandBalanceData(id){
  246. getAction('/MRPOperationList/madeOperationList/queryMadeOperationListResultByMainId',{id:id}).then(res=>{
  247. if(res.success){
  248. this.$refs.supplyDemandBalance.dataSource = res.result
  249. }else{
  250. this.$message.error(res.message);
  251. }
  252. })
  253. },
  254. getProRequirementsData(id){
  255. getAction('/MRPOperationList/madeOperationList/queryMadeOperationListPurchaseByMainId',{id:id}).then(res=>{
  256. if(res.success){
  257. this.$refs.ProRequirements.dataSource = res.result
  258. }else{
  259. this.$message.error(res.message);
  260. }
  261. })
  262. },
  263. getTraRequirementsData(id){
  264. getAction('/MRPOperationList/madeOperationList/queryMadeOperationListDepositByMainId',{id:id}).then(res=>{
  265. if(res.success){
  266. this.$refs.TraRequirements.dataSource = res.result
  267. }else{
  268. this.$message.error(res.message);
  269. }
  270. })
  271. },
  272. onSearchPlanOrg(){
  273. this.$refs.organizationPopup.visible = true
  274. this.$refs.organizationPopup.getData()
  275. },
  276. okDataOrganization(data){
  277. this.$set(this.form,'productionOrg',data.Name)
  278. },
  279. changeType(prop){
  280. if(prop=='工装'){
  281. this.getTraRequirementsData(this.form.id)
  282. }
  283. },
  284. onSearchPerson(){
  285. this.$refs.OperatorsPopup.visible = true
  286. this.$refs.OperatorsPopup.getData()
  287. },
  288. okDataOperators(data){
  289. this.$set(this.form,'salesperson',data.Name)
  290. },
  291. handleOk(){
  292. var madeOperationListPage = this.form
  293. madeOperationListPage.madeOperationListDemandList = this.$refs.demand.dataSource
  294. madeOperationListPage.madeOperationListDepositList = this.$refs.TraRequirements.dataSource
  295. madeOperationListPage.madeOperationListProvideList = this.$refs.supply.dataSource
  296. madeOperationListPage.madeOperationListPurchaseList = this.$refs.ProRequirements.dataSource
  297. madeOperationListPage.madeOperationListResultList = this.$refs.supplyDemandBalance.dataSource
  298. this.loading = true
  299. postAction('/MRPOperationList/madeOperationList/edit', madeOperationListPage).then((res) => {
  300. if (res.success) {
  301. this.$message.success('编辑成功!');
  302. this.handleCancel()
  303. } else {
  304. this.$message.error(res.message);
  305. }
  306. }).finally(() => {
  307. this.loading = false
  308. })
  309. },
  310. updataProRequirment(){
  311. this.$confirm({
  312. title: '确认更新采购需求',
  313. content: '是否更新采购需求?',
  314. onOk: ()=> {
  315. }
  316. })
  317. },
  318. generatePurchaseOrder(){
  319. this.$confirm({
  320. title: '确认生成采购单',
  321. content: '是否生成采购单?',
  322. onOk: ()=> {
  323. }
  324. })
  325. },
  326. generatetRansferOrder(){
  327. this.$confirm({
  328. title: '确认生成转库单',
  329. content: '是否生成转库单?',
  330. onOk: ()=> {
  331. }
  332. })
  333. }
  334. }
  335. }
  336. </script>
  337. <style scoped lang="less">
  338. /* @import '~@assets/less/common.less' */
  339. /deep/.ant-input{
  340. height:29px;
  341. }
  342. /deep/.ant-select-selection--single {
  343. height: 29px;
  344. }
  345. /deep/.ant-select{
  346. font-size: 12px;
  347. }
  348. /deep/.ant-form label{
  349. font-size: 12px;
  350. }
  351. /deep/.table-page-search-wrapper .ant-form-inline .ant-form-item{
  352. margin-bottom:9px
  353. }
  354. /deep/.moddle>.ant-card-body{
  355. padding-bottom:0px;
  356. padding-top: 12px;
  357. }
  358. /deep/.top>.ant-card-body{
  359. padding-bottom:0px;
  360. padding-top: 12px;
  361. }
  362. /deep/.ant-btn{
  363. height:28px
  364. }
  365. /deep/.ant-modal-body{
  366. padding-bottom: 0px;
  367. padding-top: 0px;
  368. }
  369. // /deep/.ant-modal-body{
  370. // background: #f0f2f5;
  371. // }
  372. /deep/.ant-modal-content{
  373. background: #f0f2f5;
  374. }
  375. /deep/.ant-card-body .table-operator {
  376. margin-bottom: 0px;
  377. }
  378. /deep/.three>.ant-card-body{
  379. padding-bottom:12px;
  380. padding-top: 12px;
  381. }
  382. /deep/.bottom>.ant-card-body{
  383. padding-bottom:0px;
  384. padding-top: 12px;
  385. }
  386. /deep/.ant-calendar-picker{
  387. min-width: 0px !important;
  388. }
  389. /deep/.sonItem {
  390. margin-bottom:0px !important
  391. }
  392. // /deep/#sonList>.ant-spin-nested-loading>.ant-spin-container>.ant-table>.ant-table-content>.ant-table-scroll>.ant-table-body>.ant-table-fixed>.ant-table-tbody > tr > td {
  393. // padding: 0px 8px !important;
  394. // }
  395. </style>