addInvoiceDialog.vue 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318
  1. <template>
  2. <div>
  3. <el-form ref="form" :model="form" :rules="rules" label-width="120px">
  4. <headerTitle title="收货信息"></headerTitle>
  5. <el-row>
  6. <el-col :span="12">
  7. <el-form-item
  8. label="选择订单"
  9. prop="orderNo"
  10. style="margin-bottom: 22px"
  11. >
  12. <el-input
  13. clearable
  14. v-model="form.orderNo"
  15. @click.native="handleOrderBtn"
  16. placeholder="请输入"
  17. />
  18. </el-form-item>
  19. <el-form-item
  20. label="供应商名称"
  21. prop="supplierName"
  22. style="margin-bottom: 22px"
  23. >
  24. <span>{{ form.supplierName }}</span>
  25. </el-form-item>
  26. <el-form-item
  27. label="供应商联系人"
  28. prop="linkName"
  29. style="margin-bottom: 22px"
  30. >
  31. <el-input clearable v-model="form.linkName" placeholder="请输入" />
  32. </el-form-item>
  33. <el-form-item prop="receiveFiles" label="附件">
  34. <fileUpload
  35. v-model="form.receiveFiles"
  36. module="main"
  37. :showLib="false"
  38. :limit="10"
  39. />
  40. </el-form-item>
  41. </el-col>
  42. <el-col :span="12">
  43. <el-form-item
  44. label="收货单类型"
  45. prop="receiveType"
  46. style="margin-bottom: 22px"
  47. >
  48. <DictSelection
  49. dictName="采购收货单类型"
  50. clearable
  51. v-model="form.receiveType"
  52. >
  53. </DictSelection>
  54. </el-form-item>
  55. <el-form-item
  56. label="供应商车辆号"
  57. prop="carNo"
  58. style="margin-bottom: 22px"
  59. >
  60. <el-input clearable v-model="form.carNo" placeholder="请输入" />
  61. </el-form-item>
  62. <!-- <el-form-item
  63. label="订单编码"
  64. prop="orderNo"
  65. style="margin-bottom: 22px"
  66. >
  67. <span>{{form.orderNo}}</span>
  68. </el-form-item> -->
  69. <el-form-item
  70. label="供应商电话"
  71. prop="linkPhone"
  72. style="margin-bottom: 22px"
  73. >
  74. <el-input clearable v-model="form.linkPhone" placeholder="请输入" />
  75. </el-form-item>
  76. <el-form-item
  77. label="送货单号"
  78. prop="sendNoteNo"
  79. style="margin-bottom: 22px"
  80. >
  81. <el-input
  82. clearable
  83. v-model="form.sendNoteNo"
  84. placeholder="请输入"
  85. />
  86. </el-form-item>
  87. </el-col>
  88. </el-row>
  89. </el-form>
  90. <headerTitle title="产品清单" style="margin-top: 30px"></headerTitle>
  91. <inventoryTable
  92. ref="inventoryTableref"
  93. :orderId="form.orderId"
  94. ></inventoryTable>
  95. <orderListDialog
  96. ref="orderListDialogRef"
  97. @changeParent="changeOrder"
  98. ></orderListDialog>
  99. </div>
  100. </template>
  101. <script>
  102. import fileUpload from '@/components/upload/fileUpload';
  103. import dictMixins from '@/mixins/dictMixins';
  104. import { getpurchaseorderDetail } from '@/api/bpm/components/purchasingManage/purchaseOrder';
  105. import { getReceiveSaleOrderrecordDetail } from '@/api/bpm/components/purchasingManage/purchaseorderreceive';
  106. import inventoryTable from './inventoryTable.vue';
  107. import orderListDialog from './orderListDialog.vue';
  108. import { copyObj } from '@/utils/util';
  109. export default {
  110. mixins: [dictMixins],
  111. components: {
  112. fileUpload,
  113. inventoryTable,
  114. orderListDialog
  115. },
  116. props: {
  117. businessId: {
  118. default: ''
  119. }
  120. },
  121. data() {
  122. let formDef = {
  123. id: '',
  124. contractId: '',
  125. receiveFiles: [],
  126. contractName: '',
  127. carNo: '',
  128. carId: '',
  129. linkName: '',
  130. linkPhone: '',
  131. orderNo: '',
  132. orderId: '',
  133. sendNoteNo: '',
  134. receiveType: ''
  135. };
  136. return {
  137. detailData: {},
  138. payWayOptions: [],
  139. delDetailIds: [],
  140. linkNameOptions: [],
  141. visible: false,
  142. title: '',
  143. row: {},
  144. activeName: 'base',
  145. formDef,
  146. form: copyObj(formDef),
  147. tableBankData: [],
  148. tableLinkData: [],
  149. // 组织机构树形结构数据
  150. rules: {
  151. orderNo: [
  152. { required: true, message: '请选择采购订单', trigger: 'change' }
  153. ],
  154. receiveType: [
  155. { required: true, message: '请选择采购单类型', trigger: 'change' }
  156. ]
  157. },
  158. // 提交状态
  159. loading: false,
  160. // 是否是修改
  161. isUpdate: false
  162. };
  163. },
  164. computed: {
  165. allcountAmount() {
  166. return this.$store.state.order.allcountAmount;
  167. }
  168. },
  169. created() {
  170. this.getReceiveSaleOrderDetail(this.businessId);
  171. },
  172. methods: {
  173. //选择订单回调
  174. changeOrder(obj) {
  175. this.form = Object.assign({}, this.form, {
  176. orderId: obj.id,
  177. orderNo: obj.orderNo
  178. });
  179. this.getPurchaseorder(obj.id);
  180. },
  181. //获取订单详情
  182. async getPurchaseorder(id) {
  183. this.loading = true;
  184. const data = await getpurchaseorderDetail(id);
  185. this.loading = false;
  186. if (data) {
  187. this.$nextTick(() => {
  188. let {
  189. partbId,
  190. partbName,
  191. partbTel,
  192. orderNo,
  193. id,
  194. partbLinkName,
  195. productList
  196. } = data;
  197. if (productList && productList.length > 0) {
  198. productList.forEach((v) => {
  199. v.orderTotalCount = v.orderTotalCount || v.totalCount;
  200. });
  201. }
  202. this.form = Object.assign({}, this.form, {
  203. supplierId: partbId,
  204. supplierName: partbName,
  205. linkName: partbLinkName,
  206. linkPhone: partbTel,
  207. orderNo,
  208. orderId: id,
  209. productList
  210. });
  211. this.$refs.inventoryTableref &&
  212. this.$refs.inventoryTableref.putTableValue(productList);
  213. });
  214. }
  215. },
  216. //发货单详情
  217. async getReceiveSaleOrderDetail(id) {
  218. this.loading = true;
  219. const data = await getReceiveSaleOrderrecordDetail(id);
  220. this.loading = false;
  221. if (data) {
  222. this.$nextTick(() => {
  223. this.form = data;
  224. this.$refs.inventoryTableref &&
  225. this.$refs.inventoryTableref.putTableValue(data.productList);
  226. });
  227. }
  228. },
  229. handHead() {
  230. let item = {
  231. id: this.form.partbLinkId
  232. };
  233. this.$refs.headRef.open(item);
  234. },
  235. //选择订单弹框
  236. handleOrderBtn() {
  237. let item = {
  238. id: this.form.orderId
  239. };
  240. this.$refs.orderListDialogRef.open(item);
  241. },
  242. getValidate() {
  243. return Promise.all([
  244. new Promise((resolve, reject) => {
  245. this.$refs.form.validate((valid) => {
  246. if (!valid) {
  247. reject(false);
  248. } else {
  249. resolve(true);
  250. }
  251. });
  252. }),
  253. new Promise((resolve, reject) => {
  254. this.$refs.inventoryTableref.validateForm((valid) => {
  255. if (!valid) {
  256. reject(false);
  257. } else {
  258. resolve(true);
  259. }
  260. });
  261. })
  262. ]);
  263. },
  264. async getTableValue() {
  265. try {
  266. await this.getValidate();
  267. this.form.receiveTypeName = this.getDictValue(
  268. '采购收货单类型',
  269. this.form.receiveType
  270. );
  271. // 表单验证通过,执行保存操作
  272. this.loading = true;
  273. let commitData = Object.assign({}, this.form, {
  274. productList: this.$refs.inventoryTableref.getTableValue()
  275. });
  276. return commitData;
  277. } catch (error) {
  278. console.log(error);
  279. // 表单验证未通过,不执行保存操作
  280. }
  281. }
  282. }
  283. };
  284. </script>
  285. <style scoped lang="scss">
  286. .TotalAmount {
  287. font-size: 16px;
  288. padding-right: 30px;
  289. }
  290. .headbox {
  291. display: flex;
  292. justify-content: flex-start;
  293. align-items: center;
  294. .amount {
  295. font-size: 14px;
  296. font-weight: bold;
  297. margin-right: 20px;
  298. }
  299. }
  300. </style>