detailsPageEdit.vue 56 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660
  1. <template>
  2. <div class="borderless" v-loading="pageLoading">
  3. <div class="customer-head">
  4. <div class="customer-back">
  5. <!-- <i class="back-icon el-icon-arrow-left"></i><i style="font-style:normal">返回管理列表</i>-->
  6. <el-button type="danger" style="border: none;background: none;color: red" icon="el-icon-arrow-left"
  7. @click="backToList">返回列表
  8. </el-button>
  9. </div>
  10. <div class="add-customer-btn">
  11. <el-button
  12. v-if="detailData.seeDisabled"
  13. size="small"
  14. @click="detailData.seeDisabled = false"
  15. type="primary"
  16. style="margin-right: 8px"
  17. >编辑</el-button>
  18. <el-dropdown style="margin-right: 8px;">
  19. <el-button
  20. type="primary"
  21. size="small"
  22. >
  23. 审核处理<i class="el-icon-arrow-down el-icon--right"></i>
  24. </el-button>
  25. <el-dropdown-menu slot="dropdown">
  26. <el-dropdown-item :disabled="true">请核数据</el-dropdown-item>
  27. <el-dropdown-item v-if="false">审核进度</el-dropdown-item>
  28. <el-dropdown-item v-if="false">撤销请核</el-dropdown-item>
  29. </el-dropdown-menu>
  30. </el-dropdown>
  31. <el-dropdown style="margin-right: 8px;">
  32. <el-button
  33. type="warning"
  34. size="small"
  35. >
  36. 账单处理<i class="el-icon-arrow-down el-icon--right"></i>
  37. </el-button>
  38. <el-dropdown-menu slot="dropdown">
  39. <el-dropdown-item
  40. :disabled="detailData.seeDisabled || !form.id"
  41. @click.native="applyPayment('申请')"
  42. >
  43. 申请货款
  44. </el-dropdown-item>
  45. <!-- <el-dropdown-item-->
  46. <!-- @click.stop.native="applyPayment('收费')"-->
  47. <!-- :disabled="!this.form.id"-->
  48. <!-- >申请退款-->
  49. <!-- </el-dropdown-item>-->
  50. <el-dropdown-item
  51. @click.native="openApplicationDialog"
  52. :disabled="!form.id"
  53. >查看账单
  54. </el-dropdown-item>
  55. </el-dropdown-menu>
  56. </el-dropdown>
  57. <el-button
  58. size="small"
  59. class="el-button--small-yh"
  60. type="success"
  61. @click="copyOrder"
  62. :disabled="detailData.seeDisabled || !this.form.id"
  63. >
  64. 复制单据
  65. </el-button>
  66. <el-button
  67. size="small"
  68. class="el-button--small-yh"
  69. type="primary"
  70. :disabled="disabled || detailData.seeDisabled"
  71. @click="editCustomer(false)"
  72. :loading="saveLoading"
  73. >保 存
  74. </el-button>
  75. </div>
  76. </div>
  77. <div class="customer-main">
  78. <el-form :model="form" ref="form" label-width="130px" class="demo-ruleForm">
  79. <containerTitle title="基础资料"></containerTitle>
  80. <basic-container style="margin-bottom: 10px">
  81. <el-row>
  82. <el-col v-for="(item,index) in basicData.column" :key="index" :span="item.span?item.span:8">
  83. <el-form-item :label="item.label" :prop="item.prop" :rules="item.rules">
  84. <!-- <avue-input-tree v-if="item.prop === 'corpsTypeId'" leaf-only multiple :props="{label:'title'}" v-model="form[item.prop]" placeholder="请选择内容" type="tree" :dic="dic"-->
  85. <!-- ></avue-input-tree>-->
  86. <el-date-picker v-if="item.type === 'datetime'" style="width: 100%;" v-model="form[item.prop]"
  87. size="small" type="datetime" placeholder="选择日期" value-format="yyyy-MM-dd HH:mm:ss" :disabled="detailData.seeDisabled"/>
  88. <el-date-picker v-else-if="item.type === 'date'" style="width: 100%;" v-model="form[item.prop]"
  89. size="small" type="date" placeholder="选择日期"
  90. :disabled="detailData.seeDisabled"/>
  91. <el-select v-else-if="item.prop === 'paymentType'" v-model="form[item.prop]" placeholder="请选择" clearable filterable style="width: 100%" size="small" :disabled="detailData.seeDisabled">
  92. <el-option v-for="(item,index) in paymentOption" :key="index" :label="item.dictValue" :value="item.dictValue"></el-option>
  93. </el-select>
  94. <crop-select
  95. v-else-if="item.prop === 'corpId'"
  96. v-model="form[item.prop]"
  97. corpType="GYS"
  98. @getCorpData="returnBack"
  99. :disabled="detailData.seeDisabled"
  100. ></crop-select>
  101. <el-select v-else-if="item.prop === 'banks'"
  102. v-model="form[item.prop]" placeholder="请选择"
  103. clearable
  104. filterable
  105. allow-create
  106. default-first-option
  107. size="small"
  108. style="width: 100%;"
  109. @change="banksChange"
  110. :disabled="detailData.seeDisabled">
  111. <el-option v-for="(item,index) in bankList" :key="index" :label="item.accountNo" :value="item.accountNo"></el-option>
  112. </el-select>
  113. <el-input
  114. v-else-if="item.type == 'number'"
  115. placeholder="请输入"
  116. v-input-limit="2"
  117. size="small"
  118. :disabled="item.disabled || detailData.seeDisabled"
  119. v-model.trim="form[item.prop]"
  120. />
  121. <el-input type="textarea" v-else-if="item.type === 'textarea'" v-model.trim="form[item.prop]" size="small" autocomplete="off" :disabled="item.disabled || detailData.seeDisabled"></el-input>
  122. <el-input type="age" v-else v-model.trim="form[item.prop]" size="small" autocomplete="off" :disabled="item.disabled || detailData.seeDisabled" placeholder="请输入"></el-input>
  123. </el-form-item>
  124. </el-col>
  125. </el-row>
  126. </basic-container>
  127. <containerTitle title="商品信息"></containerTitle>
  128. <basic-container style="margin-bottom: 10px">
  129. <avue-crud
  130. :option="customerContact"
  131. v-model="contactsForm"
  132. :data="contactsData"
  133. ref="crudContact"
  134. @row-save="rowSave"
  135. @row-click="handleRowClick"
  136. @row-update="rowUpdate"
  137. @row-del="rowDel"
  138. @selection-change="productSelection"
  139. @saveColumn="saveColumn('goods')"
  140. >
  141. <template slot="cname" slot-scope="{ row }">
  142. <goods-select v-if="row.$cellEdit" v-model="row.cname" @getRow="getGoodsRow($event, row)"
  143. :configuration="goodsConfiguration" @receiveList="receiveGoodList" @returnRow="getRow($event, row)"/>
  144. <span v-else>
  145. {{ row.cname }}
  146. <!-- <span v-for="item in goodsConfiguration.dicData" v-if="item.cname == row.cname">{{ item.cname }}</span>-->
  147. </span>
  148. </template>
  149. <template slot="orderQuantity" slot-scope="{ row }">
  150. <el-input
  151. v-if="row.$cellEdit"
  152. v-model.trim="row.orderQuantity"
  153. oninput='this.value=this.value.replace(/[^\-?\d.]/g,"").replace(/^(\-)*(\d+)\.(\d\d).*$/, "$1$2.$3")' size="small"
  154. @input="changeContractAmt(row)"
  155. ></el-input>
  156. <span v-else>{{ row.orderQuantity }}</span>
  157. </template>
  158. <template slot="price" slot-scope="{ row }">
  159. <el-input
  160. v-if="row.$cellEdit"
  161. v-model.trim="row.price"
  162. oninput='this.value=this.value.replace(/[^\-?\d.]/g,"").replace(/^(\-)*(\d+)\.(\d\d).*$/, "$1$2.$3")' size="small"
  163. @input="changeContractAmt(row)"
  164. ></el-input>
  165. <span v-else>{{ row.price }}</span>
  166. </template>
  167. <!-- <template slot="storageQuantity" slot-scope="{ row }">-->
  168. <!-- <el-input-->
  169. <!-- v-if="row.$cellEdit"-->
  170. <!-- v-model.trim="row.storageQuantity"-->
  171. <!-- size="small"-->
  172. <!-- oninput='this.value=this.value.replace(/[^\-?\d.]/g,"").replace(/^(\-)*(\d+)\.(\d\d).*$/, "$1$2.$3")'-->
  173. <!-- ></el-input>-->
  174. <!-- <span v-else>{{ row.storageQuantity }}</span>-->
  175. <!-- </template>-->
  176. <!-- <template slot="actualQuantity" slot-scope="{ row }">-->
  177. <!-- <el-input-->
  178. <!-- v-if="row.$cellEdit"-->
  179. <!-- v-model.trim="row.actualQuantity"-->
  180. <!-- size="small"-->
  181. <!-- oninput='this.value=this.value.replace(/[^\-?\d.]/g,"").replace(/^(\-)*(\d+)\.(\d\d).*$/, "$1$2.$3")'-->
  182. <!-- ></el-input>-->
  183. <!-- <span v-else>{{ row.actualQuantity }}</span>-->
  184. <!-- </template>-->
  185. <template slot="code" slot-scope="{row,index}">
  186. <el-button type="text" size="mini" style="padding:4px 10px;float:left" @click="commodityChoice(row)" :disabled="detailData.seeDisabled || !row.$cellEdit">选择</el-button>
  187. <span>{{ row.code }}</span>
  188. </template>
  189. <template slot-scope="{row,index}" slot="menu">
  190. <el-button
  191. type="text"
  192. size="small"
  193. @click="rowCell(row,index)"
  194. :disabled="detailData.seeDisabled"
  195. >{{ row.$cellEdit ? '保存' : '修改' }}
  196. </el-button>
  197. <el-button
  198. size="small"
  199. icon="el-icon-delete"
  200. type="text"
  201. @click="rowDel(row, index)"
  202. :disabled="detailData.seeDisabled"
  203. v-if="!row.$cellEdit"
  204. >删 除</el-button>
  205. </template>
  206. <template slot="menuLeft" slot-scope="{size}">
  207. <el-button type="primary"
  208. icon="el-icon-plus"
  209. size="small"
  210. @click="commoditySelection"
  211. :disabled="detailData.seeDisabled"
  212. >录入明细
  213. </el-button>
  214. <el-button type="warning"
  215. icon="el-icon-plus"
  216. size="small"
  217. :disabled="selection.length < 1 || detailData.seeDisabled"
  218. @click="getShipmentC">生成采购确认
  219. </el-button>
  220. <el-button type="info" :size="size" icon="el-icon-printer">报 表</el-button>
  221. </template>
  222. </avue-crud>
  223. </basic-container>
  224. <fee-info
  225. ref="feeInfo"
  226. :orderFeesList="advantageProjectData"
  227. :disabled="detailData.seeDisabled"
  228. feeUrl="/trade-purchase/purchase-order/removeByFees"
  229. optionType="GN"
  230. itemType="采购"
  231. @beforeFinance="beforeFinance"
  232. />
  233. <!-- <containerTitle title="费用明细"></containerTitle>-->
  234. <!-- <basic-container style="margin-bottom: 10px">-->
  235. <!-- <avue-crud-->
  236. <!-- :option="advantageProject"-->
  237. <!-- v-model="advantageProjectForm"-->
  238. <!-- :data="advantageProjectData"-->
  239. <!-- ref="crudProject"-->
  240. <!-- @row-save="rowSaveProject"-->
  241. <!-- @row-update="rowUpdateProject"-->
  242. <!-- @row-del="rowDelProject"-->
  243. <!-- @saveColumn="saveColumn('fees')"-->
  244. <!-- >-->
  245. <!-- <template slot="code" slot-scope="{row,index}">-->
  246. <!-- <el-button type="text" size="mini" style="padding:4px 10px;float:left" @click="choice(row)" :disabled="detailData.seeDisabled || !row.$cellEdit">选择</el-button>-->
  247. <!-- <span>{{ row.code }}</span>-->
  248. <!-- </template>-->
  249. <!-- <template slot="corpId" slot-scope="{ row }">-->
  250. <!-- <selectComponent v-if="row.$cellEdit" v-model="row.corpId"-->
  251. <!-- :configuration="configuration" @receiveList="receiveList" typeData="GYS"/>-->
  252. <!-- <span v-else>-->
  253. <!-- <span v-for="item in configuration.dicData" v-if="item.id == row.corpId">{{ item.cname }}</span>-->
  254. <!-- </span>-->
  255. <!-- </template>-->
  256. <!-- <template slot="amount" slot-scope="{ row }">-->
  257. <!-- <el-input v-if="row.$cellEdit" v-model.trim="row.amount"-->
  258. <!-- size="small" v-input-limit="2"-->
  259. <!-- ></el-input>-->
  260. <!-- <span v-else>{{ row.amount }}</span>-->
  261. <!-- </template>-->
  262. <!-- <template slot="settlmentAmount" slot-scope="{ row }">-->
  263. <!-- <el-input v-if="row.$cellEdit" v-model.trim="row.settlmentAmount"-->
  264. <!-- size="small" v-input-limit="2"-->
  265. <!-- ></el-input>-->
  266. <!-- <span v-else>{{ row.settlmentAmount }}</span>-->
  267. <!-- </template>-->
  268. <!-- <template slot-scope="{row,index}" slot="menu">-->
  269. <!-- <el-button-->
  270. <!-- type="text"-->
  271. <!-- size="small"-->
  272. <!-- @click="rowCellTwo(row,index)"-->
  273. <!-- :disabled="detailData.seeDisabled"-->
  274. <!-- >{{ row.$cellEdit ? '保存' : '修改' }}-->
  275. <!-- </el-button>-->
  276. <!-- <el-button-->
  277. <!-- size="small"-->
  278. <!-- icon="el-icon-delete"-->
  279. <!-- type="text"-->
  280. <!-- @click="rowDelProject(row, index)"-->
  281. <!-- :disabled="detailData.seeDisabled"-->
  282. <!-- v-if="!row.$cellEdit"-->
  283. <!-- >删 除</el-button>-->
  284. <!-- </template>-->
  285. <!-- <template slot="menuLeft" slot-scope="{size}">-->
  286. <!-- <el-button type="primary"-->
  287. <!-- icon="el-icon-plus"-->
  288. <!-- size="small"-->
  289. <!-- @click="costIncrease"-->
  290. <!-- :disabled="detailData.seeDisabled"-->
  291. <!-- >录入明细-->
  292. <!-- </el-button>-->
  293. <!-- </template>-->
  294. <!-- </avue-crud>-->
  295. <!-- </basic-container>-->
  296. <containerTitle title="附件上传"></containerTitle>
  297. <basic-container style="margin-bottom: 40px">
  298. <avue-crud
  299. :option="bankOfDeposit"
  300. v-model="bankOfDepositForm"
  301. :data="bankOfDepositData"
  302. @row-save="rowSaveBankOfDeposit"
  303. @row-update="rowUpdateBankOfDeposit"
  304. @row-del="rowDelBankOfDeposit"
  305. :upload-after="uploadAfter"
  306. ref="uploadCrud"
  307. >
  308. <template slot="menuLeft">
  309. <el-button
  310. type="primary"
  311. icon="el-icon-plus"
  312. size="small"
  313. @click.stop="$refs.uploadCrud.rowAdd()"
  314. :disabled="detailData.seeDisabled"
  315. >上传</el-button
  316. >
  317. </template>
  318. <template slot="menu" slot-scope="{ row, index }">
  319. <el-button
  320. size="small"
  321. icon="el-icon-edit"
  322. type="text"
  323. @click="$refs.uploadCrud.rowEdit(row, index)"
  324. :disabled="detailData.seeDisabled"
  325. >编 辑</el-button
  326. >
  327. <el-button
  328. size="small"
  329. icon="el-icon-delete"
  330. type="text"
  331. @click="rowDelBankOfDeposit(row, index)"
  332. :disabled="detailData.seeDisabled"
  333. >删 除</el-button
  334. >
  335. </template>
  336. </avue-crud>
  337. </basic-container>
  338. </el-form>
  339. </div>
  340. <el-dialog
  341. title="导入商品"
  342. append-to-body
  343. class="el-dialogDeep"
  344. :visible.sync="dialogVisible"
  345. width="80%"
  346. :close-on-click-modal="false"
  347. :destroy-on-close="true"
  348. :close-on-press-escape="false"
  349. @close="closeGoods">
  350. <el-row :style="{height: rowHeight}">
  351. <el-col :span="5" style="height: 100%;overflow-y: auto">
  352. <div>
  353. <el-scrollbar>
  354. <basic-container>
  355. <avue-tree :option="treeOption" :data="treeDataGoods" @node-click="nodeClick"/>
  356. </basic-container>
  357. </el-scrollbar>
  358. </div>
  359. </el-col>
  360. <el-col :span="19">
  361. <basic-container>
  362. <avue-crud :option="optionTwo"
  363. :table-loading="loading"
  364. :data="goodsListShow"
  365. ref="crud"
  366. @refresh-change="refreshChange"
  367. @selection-change="selectionChange"
  368. :page.sync="page"
  369. @search-change="goodsSearch"
  370. @on-load="onLoad">
  371. <template slot="menuLeft" slot-scope="{size}">
  372. <el-tabs v-model="activeName" @tab-click="tabHandle">
  373. <el-tab-pane label="查询结果" name="searchList"></el-tab-pane>
  374. <el-tab-pane label="已选定数据" name="importStaging"></el-tab-pane>
  375. </el-tabs>
  376. </template>
  377. <template slot-scope="scope" slot="menu">
  378. <el-button
  379. type="text"
  380. icon="el-icon-edit"
  381. size="small"
  382. @click.stop="importStagList(scope.row,scope.index)"
  383. v-if="activeName=='searchList'"
  384. :disabled="goodsListSave.findIndex(item => item.id == scope.row.id) !== -1"
  385. >选择
  386. </el-button>
  387. <el-button
  388. type="text"
  389. icon="el-icon-delete"
  390. size="small"
  391. @click.stop="removeStagList(scope.row,scope.index)"
  392. v-else
  393. >移除
  394. </el-button>
  395. </template>
  396. </avue-crud>
  397. </basic-container>
  398. </el-col>
  399. </el-row>
  400. <span slot="footer" class="dialog-footer">
  401. <el-button @click="dialogVisible = false">取 消</el-button>
  402. <el-button type="primary" @click="importGoods" v-if="commodityData !== true">导入</el-button>
  403. <el-button type="primary" @click="importChoice" v-if="commodityData === true"
  404. :disabled="tableData.length !== 1">导入</el-button>
  405. </span>
  406. </el-dialog>
  407. <el-dialog
  408. title="导入费用"
  409. append-to-body
  410. class="el-dialogDeep"
  411. :visible.sync="dialogCost"
  412. width="80%"
  413. :close-on-click-modal="false"
  414. :destroy-on-close="true"
  415. :close-on-press-escape="false"
  416. @close="closeFees">
  417. <el-row :style="{height: rowHeight}">
  418. <el-col :span="5" style="height: 100%;overflow-y: auto">
  419. <div>
  420. <el-scrollbar>
  421. <basic-container>
  422. <avue-tree :option="treeOptionCost" :data="treeData" @node-click="nodeClickCost"/>
  423. </basic-container>
  424. </el-scrollbar>
  425. </div>
  426. </el-col>
  427. <el-col :span="19">
  428. <basic-container>
  429. <avue-crud :option="optionTwoCost"
  430. :table-loading="loadingCost"
  431. :data="dataCost"
  432. ref="crud"
  433. @refresh-change="refreshChangeCost"
  434. @selection-change="selectionChangeCost"
  435. :page.sync="pageCost"
  436. @searchChange="feesSearch"
  437. @on-load="onLoadCost">
  438. </avue-crud>
  439. </basic-container>
  440. </el-col>
  441. </el-row>
  442. <span slot="footer" class="dialog-footer">
  443. <el-button @click="dialogCost = false">取 消</el-button>
  444. <el-button type="primary" @click="importCost" v-if="choiceData !== true">导入</el-button>
  445. <el-button type="primary" @click="choiceCost" v-if="choiceData === true"
  446. :disabled="tableDataCost.length !== 1">导入</el-button>
  447. </span>
  448. </el-dialog>
  449. <el-dialog
  450. title="账单"
  451. append-to-body
  452. class="el-dialogDeep"
  453. :visible.sync="applyPaymentDialog"
  454. width="60%"
  455. :close-on-click-modal="false"
  456. :destroy-on-close="true"
  457. :close-on-press-escape="false"
  458. v-dialog-drag
  459. >
  460. <apply-payment
  461. :billType="billType"
  462. :billData="billData"
  463. itemType="采购"
  464. @choceFun="choceFun"
  465. >
  466. </apply-payment>
  467. </el-dialog>
  468. <el-dialog
  469. title="申请记录"
  470. append-to-body
  471. class="el-dialogDeep"
  472. :visible.sync="applicationDialog"
  473. width="60%"
  474. :close-on-click-modal="false"
  475. :destroy-on-close="true"
  476. :close-on-press-escape="false"
  477. v-dialog-drag
  478. >
  479. <bill-application
  480. :billId="form.id"
  481. @choceApplication="choceApplication"
  482. >
  483. </bill-application>
  484. </el-dialog>
  485. </div>
  486. </template>
  487. <script>
  488. import {
  489. typeSave,
  490. detail,
  491. corpsattn,
  492. corpsbank,
  493. corpsitem,
  494. getList,
  495. getDeptLazyTreeS,
  496. getSysNo,
  497. generateShipment
  498. } from "@/api/basicData/purchaseOrder"
  499. import customerContact from "./configuration/customerContact.json"
  500. import advantageProject from "./configuration/advantageProject.json"
  501. import bankOfDeposit from "./configuration/bankOfDeposit.json"
  502. import commodity from "./configuration/commodity.json"
  503. import optionTwoCost from "./configuration/mainListCost.json"
  504. import {getDeptLazyTree, customerList} from "@/api/basicData/basicFeesDesc";
  505. import {selectGoodsNum} from "@/api/basicData/inventoryAccount"
  506. import { contrastObj, contrastList } from "@/util/contrastData";
  507. //账单组件
  508. import ApplyPayment from "../../../components/finance/applyPayment";
  509. import billApplication from "@/components/bill/billApplication";
  510. import { getlistBankBy } from "@/api/basicData/configuration"
  511. import feeInfo from "@/components/fee-info/main";
  512. export default {
  513. name: "detailsPage",
  514. props: {
  515. detailData: {
  516. type: Object,
  517. default: {
  518. seeDisabled: false
  519. }
  520. }
  521. },
  522. components:{
  523. ApplyPayment,
  524. billApplication,
  525. feeInfo,
  526. },
  527. data() {
  528. return {
  529. configuration: {
  530. multipleChoices: false,
  531. multiple: false,
  532. collapseTags: false,
  533. placeholder: '请点击右边按钮选择',
  534. dicData: []
  535. },
  536. goodsConfiguration: {
  537. multipleChoices: false,
  538. multiple: false,
  539. collapseTags: false,
  540. placeholder: '请点击右边按钮选择',
  541. dicData: []
  542. },
  543. form: {},
  544. data: [],
  545. loadingCost: false,
  546. choiceData: false,
  547. commodityData: false,
  548. dataCost: [],
  549. choiceIndex: '',
  550. dialogCost: false,
  551. treeDeptId: '',
  552. treeDeptIdCost: '',
  553. pageCost: {
  554. pageSize: 10,
  555. currentPage: 1,
  556. total: 0
  557. },
  558. page: {
  559. pageSize: 10,
  560. currentPage: 1,
  561. total: 0
  562. },
  563. loading: false,
  564. contactsForm: {},
  565. optionTwo: commodity,
  566. optionTwoCost: optionTwoCost,
  567. treeDataGoods: [],
  568. treeData: [],
  569. treeOptionCost: {
  570. nodeKey: 'id',
  571. lazy: true,
  572. treeLoad: function (node, resolve) {
  573. const parentId = (node.level === 0) ? 0 : node.data.id;
  574. getDeptLazyTree(parentId).then(res => {
  575. resolve(res.data.data.map(item => {
  576. return {
  577. ...item,
  578. leaf: !item.hasChildren
  579. }
  580. }))
  581. });
  582. },
  583. addBtn: false,
  584. menu: false,
  585. size: 'small',
  586. props: {
  587. labelText: '标题',
  588. label: 'title',
  589. value: 'value',
  590. children: 'children'
  591. }
  592. },
  593. treeOption: {
  594. nodeKey: 'id',
  595. lazy: true,
  596. treeLoad: function (node, resolve) {
  597. const parentId = (node.level === 0) ? 0 : node.data.id;
  598. getDeptLazyTreeS(parentId).then(res => {
  599. console.log(res.data.data)
  600. resolve(res.data.data.map(item => {
  601. return {
  602. ...item,
  603. leaf: !item.hasChildren
  604. }
  605. }))
  606. });
  607. },
  608. addBtn: false,
  609. menu: false,
  610. size: 'small',
  611. props: {
  612. labelText: '标题',
  613. label: 'title',
  614. value: 'value',
  615. children: 'children'
  616. }
  617. },
  618. billType:"申请", //账单类型
  619. billData:{}, //账单需要数据
  620. applyPaymentDialog:false,//生成账单组件
  621. applicationDialog: false,// 申请记录
  622. dialogVisible: false,
  623. advantageProjectForm: {},
  624. bankOfDepositForm: {},
  625. contactsData: [],
  626. advantageProjectData: [],
  627. saveLoading: false,
  628. disabled: false,
  629. bankOfDepositData: [],
  630. tableDataCost: [],
  631. dic: [],
  632. tableData: [],
  633. customerContact: {},
  634. advantageProject: {},
  635. bankOfDeposit: bankOfDeposit,
  636. basicData: {
  637. column: [
  638. {
  639. label: '供应商',
  640. prop: 'corpId',
  641. span: 16,
  642. rules: [
  643. {
  644. required: true,
  645. message: ' ',
  646. trigger: 'blur'
  647. }
  648. ]
  649. },{
  650. label: '付款方式',
  651. prop: 'paymentType',
  652. rules: [
  653. {
  654. required: true,
  655. message: ' ',
  656. trigger: 'blur'
  657. }
  658. ]
  659. },{
  660. label: ' 银行账号',
  661. prop: 'banks',
  662. rules: [
  663. {
  664. required: true,
  665. message: ' ',
  666. trigger: 'blur'
  667. }
  668. ]
  669. }, {
  670. label: '公司户头',
  671. prop: 'banksAccountName',
  672. rules: [
  673. {
  674. required: false,
  675. message: ' ',
  676. trigger: 'blur'
  677. }
  678. ]
  679. }, {
  680. label: '包装要求',
  681. prop: 'packageRemarks',
  682. rules: [
  683. {
  684. required: false,
  685. message: ' ',
  686. trigger: 'blur'
  687. }
  688. ]
  689. },
  690. {
  691. label: '系统编号',
  692. prop: 'sysNo',
  693. disabled: true,
  694. rules: [
  695. {
  696. required: false,
  697. message: ' ',
  698. trigger: 'blur'
  699. }
  700. ]
  701. }, {
  702. label: '来源单号',
  703. prop: 'orgOrderNo',
  704. rules: [
  705. {
  706. required: false,
  707. message: ' ',
  708. trigger: 'blur'
  709. }
  710. ]
  711. }, {
  712. label: '预估运费',
  713. prop: 'predictOceanFreight',
  714. type: 'number',
  715. rules: [
  716. {
  717. required: true,
  718. message: ' ',
  719. trigger: 'blur'
  720. }
  721. ]
  722. }, {
  723. label: '要求到货日期',
  724. prop: 'requiredArrivalDate',
  725. type: 'datetime',
  726. rules: [
  727. {
  728. required: true,
  729. message: ' ',
  730. trigger: 'blur'
  731. }
  732. ]
  733. }, {
  734. label: '已付金额',
  735. prop: 'settlmentAmount',
  736. type: 'number',
  737. disabled: true,
  738. rules: [
  739. {
  740. required: false,
  741. message: ' ',
  742. trigger: 'blur'
  743. }
  744. ]
  745. },{
  746. label: "备注",
  747. span: 24,
  748. prop: "orderRemark",
  749. type: 'textarea',
  750. mock: {
  751. type: 'county'
  752. }
  753. }
  754. ]
  755. },
  756. paymentOption: [],
  757. maxFeeNum: 0,
  758. maxGoodsNum: 0,
  759. selection: [],
  760. oldForm: {
  761. orderStatus: "录入"
  762. },
  763. oldGoodsList: [],
  764. oldFeesList: [],
  765. oldUploadList: [],
  766. // 弹窗高度
  767. rowHeight: '',
  768. // 查询时loading页面
  769. pageLoading: false,
  770. // 银行账号下拉
  771. bankList: [],
  772. activeName: 'searchList',
  773. // 商品列表数据合计
  774. goodsListShow: [],
  775. // 商品列表暂存
  776. goodsListSave: [],
  777. goodsListTotal: 0,
  778. goodsListSaveTotal: 0,
  779. pageList: {
  780. pageSize: 10,
  781. currentPage: 1,
  782. total: 0
  783. },
  784. itemType: '采购',
  785. }
  786. },
  787. mounted() {
  788. this.$nextTick(() => {
  789. // 监听浏览器高度变化,改变表格高度
  790. window.onresize = () => {
  791. this.rowHeight = (window.innerHeight - 130) + 'px'
  792. }
  793. })
  794. },
  795. //初始化查询
  796. async created() {
  797. this.rowHeight = (window.innerHeight - 130) + 'px'
  798. this.customerContact = customerContact
  799. console.log(this.customerContact)
  800. // this.customerContact = await this.getColumnData(this.getColumnName(18), customerContact);
  801. this.advantageProject = await this.getColumnData(this.getColumnName(19), advantageProject);
  802. this.getWorkDicts("payment_term").then(res => {
  803. this.paymentOption = res.data.data
  804. })
  805. if (this.detailData.id) {
  806. this.queryData(this.detailData.id)
  807. } else if(this.detailData.copyId) {
  808. this.queryData(this.detailData.copyId, true)
  809. } else {
  810. }
  811. },
  812. watch: {
  813. },
  814. methods: {
  815. // 明细查询
  816. queryData(id, isCopy = false) {
  817. detail(id).then(res => {
  818. console.log(res.data.data)
  819. this.form = res.data.data;
  820. if (!this.form.itemsVOList) {
  821. this.contactsData = []
  822. } else {
  823. this.contactsData = this.form.itemsVOList
  824. }
  825. if (!this.form.orderFeesList) {
  826. this.advantageProjectData = []
  827. } else {
  828. this.advantageProjectData = this.form.orderFeesList
  829. }
  830. if (!this.form.orderFilesList) {
  831. this.bankOfDepositData = []
  832. } else {
  833. this.bankOfDepositData = this.form.orderFilesList
  834. }
  835. if (this.form.corpsName) {
  836. this.configuration.dicData = this.form.corpsName
  837. }
  838. let feesData = []
  839. this.advantageProjectData.forEach(item => {
  840. let a = {
  841. cname: item.corpName,
  842. id: item.corpId
  843. }
  844. feesData.push(a)
  845. })
  846. this.configuration.dicData = this.configuration.dicData.concat(feesData)
  847. // 去重
  848. this.removeRepeat()
  849. let goodsData = []
  850. this.form.orderItemsList = this.form.orderItemsList? this.form.orderItemsList: []
  851. this.form.orderItemsList.forEach(item => {
  852. let a = {
  853. cname: item.cname,
  854. }
  855. goodsData.push(a)
  856. })
  857. this.goodsConfiguration.dicData = [].concat(goodsData)
  858. this.removeGoodsRepeat()
  859. delete this.form.itemsVOList
  860. delete this.form.orderFeesList
  861. delete this.form.orderFilesList
  862. // delete this.form.corpsName
  863. // 获取最大值
  864. let num = []
  865. this.advantageProjectData.forEach(item => {
  866. num.push(item.sort)
  867. })
  868. if (num.length == 0) {
  869. this.maxFeeNum = 0;
  870. } else {
  871. this.maxFeeNum = num.reduce((a, b) => {
  872. return b > a? b: a;
  873. })
  874. }
  875. let goodsNum = []
  876. this.contactsData.forEach(item => {
  877. goodsNum.push(item.sort)
  878. })
  879. if (goodsNum.length == 0) {
  880. this.maxGoodsNum = 0;
  881. } else {
  882. this.maxGoodsNum = goodsNum.reduce((a, b) => {
  883. return b > a? b: a;
  884. })
  885. }
  886. this.oldGoodsList = []
  887. this.oldFeesList = []
  888. this.oldUploadList = []
  889. this.oldForm = Object.assign({}, this.form)
  890. this.oldGoodsList = this.deepClone(this.contactsData)
  891. this.oldFeesList = this.deepClone(this.advantageProjectData)
  892. this.oldUploadList = this.deepClone(this.bankOfDepositData)
  893. if (isCopy) {
  894. delete this.form.sysNo;
  895. delete this.form.id
  896. this.contactsData.forEach(item => {
  897. delete item.id
  898. delete item.pid
  899. })
  900. this.advantageProjectData.forEach(item => {
  901. delete item.id
  902. delete item.pid
  903. })
  904. this.bankOfDepositData.forEach(item => {
  905. delete item.id
  906. delete item.pid
  907. })
  908. }
  909. }).finally(() => {
  910. this.saveLoading = false
  911. });
  912. },
  913. copyOrder() {
  914. this.queryData(this.form.id, true)
  915. },
  916. getGoodsRow(event,row) {
  917. row.priceCategory = event.goodsTypeName
  918. row.code = event.code
  919. row.typeno = event.typeno
  920. row.itemType = event.typeno
  921. row.itemId = event.id
  922. },
  923. receiveGoodList(data) {
  924. this.goodsConfiguration.dicData = this.goodsConfiguration.dicData.concat(data)
  925. this.removeGoodsRepeat()
  926. },
  927. getRow(event,row) {
  928. row.priceCategory = event[0].goodsTypeName
  929. row.code = event[0].code
  930. row.typeno = event[0].typeno
  931. row.itemType = event[0].typeno
  932. row.itemId = event[0].id
  933. },
  934. removeGoodsRepeat() {
  935. let obj = []
  936. this.goodsConfiguration.dicData = this.goodsConfiguration.dicData.reduce((current,next) => {
  937. obj[next.cname] ? '': obj[next.cname] = true && current.push(next)
  938. return current
  939. }, [])
  940. },
  941. getShipmentC() {
  942. for (let item in this.selection) {
  943. if (!this.selection[item].id) {
  944. return this.$message.error('选中数据有新数据,请先保存')
  945. }
  946. }
  947. if (this.$store.getters.domTakeStatus) {
  948. this.$alert("收货单存在,请保存发货单再进行操作", "温馨提示", {
  949. confirmButtonText: "确定",
  950. type: "warning",
  951. callback: action => {
  952. console.log(action);
  953. }
  954. });
  955. } else {
  956. this.generateShipmentC();
  957. }
  958. },
  959. //生成收货单
  960. generateShipmentC() {
  961. let lsit = []
  962. if (contrastObj(this.form, this.oldForm) ||
  963. contrastList(this.contactsData, this.oldGoodsList) ||
  964. contrastList(this.advantageProjectData, this.oldFeesList) ||
  965. contrastList(this.bankOfDepositData, this.oldUploadList)
  966. ) {
  967. this.$confirm("数据发生变化未有提交记录, 是否保存?", "提示", {
  968. confirmButtonText: "确定",
  969. cancelButtonText: "取消",
  970. type: "warning"
  971. }).then(async () => {
  972. await this.editCustomer(false, '收货')
  973. }).catch(() => {
  974. this.$message({
  975. type: 'info',
  976. message: '已取消'
  977. });
  978. })
  979. } else {
  980. this.selection.forEach(item => {
  981. lsit.push(item.id)
  982. })
  983. let data = {
  984. id: this.form.id,
  985. orderItemIds: lsit
  986. }
  987. generateShipment(data).then(res => {
  988. this.$router.$avueRouter.closeTag("/businessManagement/receipt/index");
  989. this.$router.push({
  990. path: "/businessManagement/receipt/index",
  991. query: {form: JSON.stringify(res.data.data)},
  992. });
  993. })
  994. }
  995. },
  996. //点击行可编辑
  997. handleRowClick(row, event, column) {
  998. console.log(row.$index)
  999. },
  1000. //商品编辑
  1001. rowCell(row, index) {
  1002. console.log(row)
  1003. if (row.$cellEdit) {
  1004. if (Number(row.orderQuantity) < Number(row.actualQuantity)) {
  1005. return this.$message.error('订货数量不能小于发货数量')
  1006. }
  1007. }
  1008. this.$refs.crudContact.rowCell(row, index)
  1009. },
  1010. //费用编辑
  1011. rowCellTwo(row, index) {
  1012. console.log(row)
  1013. this.$refs.crudProject.rowCell(row, index)
  1014. },
  1015. //商品选中触发
  1016. productSelection(selection) {
  1017. this.selection = selection
  1018. },
  1019. //费用新增触发
  1020. costIncrease() {
  1021. this.dialogCost = !this.dialogCost
  1022. this.choiceData = false
  1023. },
  1024. //商品新增触发
  1025. commoditySelection() {
  1026. this.dialogVisible = !this.dialogVisible
  1027. this.tableData = []
  1028. this.commodityData = false
  1029. this.goodsListSave = [];
  1030. },
  1031. //点击费用明细选择触发
  1032. choice(row) {
  1033. this.dialogCost = !this.dialogCost
  1034. this.choiceData = true
  1035. console.log(row)
  1036. this.choiceIndex = row.$index
  1037. },
  1038. //点击商品明细选择触发
  1039. commodityChoice(row) {
  1040. this.dialogVisible = !this.dialogVisible
  1041. this.commodityData = true
  1042. console.log(row)
  1043. this.choiceIndexT = row.$index
  1044. },
  1045. //导入商品触发
  1046. importChoice() {
  1047. if (this.tableData.length === 1) {
  1048. this.contactsData[this.choiceIndexT].cname = this.tableData[0].cname
  1049. this.contactsData[this.choiceIndexT].code = this.tableData[0].code
  1050. this.contactsData[this.choiceIndexT].typeno = this.tableData[0].typeno
  1051. this.contactsData[this.choiceIndexT].itemType = this.tableData[0].typeno
  1052. this.contactsData[this.choiceIndexT].itemId = this.tableData[0].id
  1053. this.contactsData[this.choiceIndexT].priceCategory = this.tableData[0].goodsTypeName
  1054. this.contactsData[this.choiceIndexT].orderQuantity = 0
  1055. this.contactsData[this.choiceIndexT].price = 0
  1056. this.contactsData[this.choiceIndexT].amount = 0
  1057. selectGoodsNum({
  1058. goodsId: this.tableData[0].id,
  1059. itemType: this.tableData[0].typeno
  1060. }).then(res => {
  1061. this.contactsData[this.choiceIndexT].storageQuantity = res.data.data
  1062. })
  1063. }
  1064. this.dialogVisible = !this.dialogVisible
  1065. this.commodityData = false
  1066. },
  1067. //费用编辑导入触发
  1068. choiceCost() {
  1069. if (this.tableDataCost.length === 1) {
  1070. this.advantageProjectData[this.choiceIndex].feeName = this.tableDataCost[0].cname
  1071. this.advantageProjectData[this.choiceIndex].itemId = this.tableDataCost[0].id
  1072. this.advantageProjectData[this.choiceIndex].code = this.tableDataCost[0].code
  1073. }
  1074. this.dialogCost = !this.dialogCost
  1075. this.choiceData = false
  1076. },
  1077. //费用导入触发
  1078. importCost() {
  1079. // this.advantageProjectForm = this.advantageProjectForm.concat(this.tableDataCost)
  1080. if (this.tableDataCost.length > 0) {
  1081. for (let item in this.tableDataCost) {
  1082. console.log(this.tableDataCost[item])
  1083. this.tableDataCost[item].itemId = this.tableDataCost[item].id
  1084. this.tableDataCost[item].feeName = this.tableDataCost[item].cname
  1085. this.tableDataCost[item].sort = this.maxFeeNum + 1
  1086. this.maxFeeNum++
  1087. delete this.tableDataCost[item].id
  1088. this.$refs.crudProject.rowCellAdd(this.tableDataCost[item]);
  1089. this.$refs.crudProject.rowCell(this.tableDataCost[item], this.advantageProjectForm.length - 1)
  1090. }
  1091. }
  1092. this.tableDataCost = []
  1093. this.dialogCost = false
  1094. },
  1095. //确认导入触发
  1096. importGoods() {
  1097. if (this.goodsListSave.length > 0) {
  1098. for (let item in this.goodsListSave) {
  1099. selectGoodsNum({
  1100. goodsId: this.goodsListSave[item].id,
  1101. itemType: this.goodsListSave[item].typeno
  1102. }).then(res => {
  1103. this.$set(this.goodsListSave[item], 'storageQuantity', res.data.data)
  1104. this.goodsListSave[item].itemId = this.goodsListSave[item].id
  1105. this.goodsListSave[item].priceCategory = this.goodsListSave[item].goodsTypeName
  1106. delete this.goodsListSave[item].id
  1107. this.$set(this.goodsListSave[item], 'itemType', this.goodsListSave[item].typeno)
  1108. this.$set(this.goodsListSave[item], 'specificationAndModel', this.goodsListSave[item].typeno)
  1109. this.$set(this.goodsListSave[item], 'priceType', '一般')
  1110. this.$set(this.goodsListSave[item], 'orderQuantity', 0)
  1111. this.$set(this.goodsListSave[item], 'actualQuantity', 0)
  1112. this.goodsListSave[item].price = 0
  1113. this.goodsListSave[item].amount = 0
  1114. this.goodsListSave[item].sort = this.maxGoodsNum + 1
  1115. this.maxGoodsNum++
  1116. this.$refs.crudContact.rowCellAdd(this.goodsListSave[item]);
  1117. // this.$refs.crudContact.rowCell(this.goodsListSave[item], this.goodsListSave.length - 1)
  1118. })
  1119. }
  1120. } else {
  1121. for (let item in this.tableData) {
  1122. selectGoodsNum({
  1123. goodsId: this.tableData[item].id,
  1124. itemType: this.tableData[item].typeno
  1125. }).then(res => {
  1126. this.$set(this.tableData[item], 'storageQuantity', res.data.data)
  1127. this.tableData[item].itemId = this.tableData[item].id
  1128. this.tableData[item].priceCategory = this.tableData[item].goodsTypeName
  1129. delete this.tableData[item].id
  1130. this.$set(this.tableData[item], 'itemType', this.tableData[item].typeno)
  1131. this.$set(this.tableData[item], 'specificationAndModel', this.tableData[item].typeno)
  1132. this.$set(this.tableData[item], 'priceType', '一般')
  1133. this.$set(this.tableData[item], 'orderQuantity', 0)
  1134. this.$set(this.tableData[item], 'actualQuantity', 0)
  1135. this.tableData[item].price = 0
  1136. this.tableData[item].amount = 0
  1137. this.tableData[item].sort = this.maxGoodsNum + 1
  1138. this.maxGoodsNum++
  1139. this.$refs.crudContact.rowCellAdd(this.tableData[item]);
  1140. // this.$refs.crudContact.rowCell(this.tableData[item], this.tableData.length - 1)
  1141. })
  1142. }
  1143. }
  1144. if (this.tableData.length > 0) {
  1145. }
  1146. this.dialogVisible = false
  1147. },
  1148. closeGoods() {
  1149. this.treeDataGoods = [];
  1150. this.treeDeptId = "";
  1151. this.activeName = "searchList";
  1152. },
  1153. closeFees() {
  1154. this.treeDeptIdCost = "";
  1155. this.treeData = [];
  1156. },
  1157. //选中触发
  1158. selectionChange(list) {
  1159. console.log(list);
  1160. this.tableData = list
  1161. },
  1162. //费用选中触发
  1163. selectionChangeCost(list) {
  1164. console.log(list);
  1165. this.tableDataCost = list
  1166. },
  1167. //导入页左商品类型查询
  1168. nodeClick(data) {
  1169. this.treeDeptId = data.id;
  1170. this.page.currentPage = 1;
  1171. this.onLoad(this.page);
  1172. },
  1173. //导入页左费用类型查询
  1174. nodeClickCost(data) {
  1175. this.treeDeptIdCost = data.id;
  1176. this.pageCost.currentPage = 1;
  1177. this.onLoadCost(this.pageCost);
  1178. },
  1179. //刷新触发
  1180. refreshChange() {
  1181. this.treeDeptId = '';
  1182. this.page.currentPage = 1;
  1183. this.onLoad(this.page);
  1184. },
  1185. //费用刷新触发
  1186. refreshChangeCost() {
  1187. this.treeDeptIdCost = '';
  1188. this.pageCost.currentPage = 1;
  1189. this.onLoadCost(this.pageCost);
  1190. },
  1191. //新增商品信息保存触发
  1192. rowSave(row, done, loading) {
  1193. console.log(row)
  1194. console.log(this.contactsData)
  1195. // this.contactsData.push(row)
  1196. done()
  1197. },
  1198. //修改商品信息触发
  1199. rowUpdate(row, index, done, loading) {
  1200. done(row);
  1201. },
  1202. //删除商品信息触发
  1203. rowDel(row, index, donerowDel) {
  1204. this.$confirm("确定将选择数据删除?", {
  1205. confirmButtonText: "确定",
  1206. cancelButtonText: "取消",
  1207. type: "warning"
  1208. }).then(() => {
  1209. //商品判断是否需要调用删除接口
  1210. if (row.id) {
  1211. corpsattn(row.id).then(res => {
  1212. this.$message({
  1213. type: "success",
  1214. message: "操作成功!"
  1215. });
  1216. this.contactsData.splice(index, 1);
  1217. })
  1218. } else {
  1219. this.$message({
  1220. type: "success",
  1221. message: "操作成功!"
  1222. });
  1223. this.contactsData.splice(index, 1);
  1224. }
  1225. })
  1226. },
  1227. //新增费用明细保存触发
  1228. rowSaveProject(row, done, loading) {
  1229. // this.advantageProjectData.push(row)
  1230. done()
  1231. },
  1232. //修改费用明细触发
  1233. rowUpdateProject(row, index, done, loading) {
  1234. done(row);
  1235. },
  1236. goodsSearch(params, done) {
  1237. this.treeDeptId = '';
  1238. this.onLoad(this.page, params);
  1239. done()
  1240. },
  1241. //商品列表查询
  1242. onLoad(page, params = {}) {
  1243. this.loading = true;
  1244. getList(page.currentPage, page.pageSize, Object.assign(params, this.query), this.treeDeptId).then(res => {
  1245. const data = res.data.data;
  1246. this.page.total = data.total;
  1247. this.data = data.records;
  1248. this.goodsListShow = data.records;
  1249. this.loading = false;
  1250. });
  1251. },
  1252. // 费用查询按钮
  1253. feesSearch(params, done) {
  1254. this.treeDeptIdCost = '';
  1255. this.onLoadCost(this.pageCost, params)
  1256. done()
  1257. },
  1258. //费用查询
  1259. onLoadCost(page, params = {}) {
  1260. this.loadingCost = true;
  1261. let queryParams = Object.assign({}, params, {
  1262. pageSize: page.pageSize,
  1263. pageNum: page.currentPage,
  1264. parentId: 0,
  1265. feesTypeId: this.treeDeptIdCost
  1266. })
  1267. customerList(queryParams).then(res => {
  1268. console.log(res)
  1269. const data = res.data.data;
  1270. this.pageCost.total = data.total;
  1271. this.dataCost = data.records;
  1272. this.loadingCost = false;
  1273. });
  1274. },
  1275. //删除费用明细触发
  1276. rowDelProject(row, index, donerowDel) {
  1277. this.$confirm("确定将选择数据删除?", {
  1278. confirmButtonText: "确定",
  1279. cancelButtonText: "取消",
  1280. type: "warning"
  1281. }).then(() => {
  1282. //费用判断是否需要调用删除接口
  1283. if (row.id) {
  1284. corpsitem(row.id).then(res => {
  1285. this.$message({
  1286. type: "success",
  1287. message: "操作成功!"
  1288. });
  1289. this.advantageProjectData.splice(index, 1);
  1290. })
  1291. } else {
  1292. this.$message({
  1293. type: "success",
  1294. message: "操作成功!"
  1295. });
  1296. this.advantageProjectData.splice(index, 1);
  1297. }
  1298. })
  1299. },
  1300. //新增附件上传保存触发
  1301. rowSaveBankOfDeposit(row, done, loading) {
  1302. this.bankOfDepositData.push(row)
  1303. done()
  1304. },
  1305. //修改附件上传触发
  1306. rowUpdateBankOfDeposit(row, index, done, loading) {
  1307. done(row);
  1308. },
  1309. //删除附件上传触发
  1310. rowDelBankOfDeposit(row, index, donerowDel) {
  1311. this.$confirm("确定将选择数据删除?", {
  1312. confirmButtonText: "确定",
  1313. cancelButtonText: "取消",
  1314. type: "warning"
  1315. }).then(() => {
  1316. //附件判断是否需要调用删除接口
  1317. if (row.id) {
  1318. corpsbank(row.id).then(res => {
  1319. this.$message({
  1320. type: "success",
  1321. message: "操作成功!"
  1322. });
  1323. this.bankOfDepositData.splice(index, 1);
  1324. })
  1325. } else {
  1326. this.$message({
  1327. type: "success",
  1328. message: "操作成功!"
  1329. });
  1330. this.bankOfDepositData.splice(index, 1);
  1331. }
  1332. })
  1333. },
  1334. uploadAfter(res, done) {
  1335. if (res.originalName) {
  1336. this.bankOfDepositForm.fileName = this.bankOfDepositForm.fileName
  1337. ? this.bankOfDepositForm.fileName
  1338. : res.originalName;
  1339. }
  1340. done();
  1341. },
  1342. // 计算费用
  1343. changeContractAmt(row) {
  1344. let orderQuantity = 0;
  1345. let price = 0;
  1346. if (row.price) {
  1347. price = row.price;
  1348. }
  1349. if (row.orderQuantity) {
  1350. orderQuantity = row.orderQuantity;
  1351. }
  1352. this.$set(row, "amount", Number(orderQuantity) * Number(price)).toFixed(2);
  1353. },
  1354. // 去重
  1355. removeRepeat() {
  1356. let obj = []
  1357. this.configuration.dicData = this.configuration.dicData.reduce((current,next) => {
  1358. obj[next.id] ? '': obj[next.id] = true && current.push(next)
  1359. return current
  1360. }, [])
  1361. },
  1362. receiveList(data){
  1363. this.configuration.dicData = this.configuration.dicData.concat(data)
  1364. this.removeRepeat()
  1365. },
  1366. //修改提交触发
  1367. editCustomer(isBack = false, type) {
  1368. this.$refs["form"].validate((valid) => {
  1369. if (valid) {
  1370. for (let item in this.contactsData) {
  1371. if (Number(this.contactsData[item].orderQuantity) < Number(this.contactsData[item].actualQuantity)) {
  1372. return this.$message.error('商品信息第'+ (parseInt(item) + 1) + '行订货数量不能小于发货数量')
  1373. }
  1374. }
  1375. //商品信息
  1376. this.form.itemsVOList = this.contactsData
  1377. // this.form.orderFeesList = this.advantageProjectData
  1378. this.form.orderFeesList = this.$refs.feeInfo.submitData()
  1379. this.form.orderFilesList = this.bankOfDepositData
  1380. if (typeof this.form.corpsTypeId == 'object') {
  1381. this.form.corpsTypeId = this.form.corpsTypeId.join(",")
  1382. }
  1383. this.saveLoading = true
  1384. this.form.billType = 'CG'
  1385. this.$set(this.form, 'tradeType', 'GN')
  1386. typeSave(this.form).then(res => {
  1387. this.$message({type: "success", message: this.form.id ? "修改成功!" : "新增成功!"});
  1388. // this.saveLoading = false
  1389. if (isBack) {
  1390. //成功关闭此页面回到列表页
  1391. this.$emit("goBack");
  1392. } else {
  1393. this.queryData(res.data.data)
  1394. }
  1395. if (type == '收货') {
  1396. let lsit = []
  1397. this.selection.forEach(item => {
  1398. lsit.push(item.id)
  1399. })
  1400. let data = {
  1401. id: this.form.id,
  1402. orderItemIds: lsit
  1403. }
  1404. generateShipment(data).then(res => {
  1405. this.$router.$avueRouter.closeTag("/businessManagement/receipt/index");
  1406. this.$router.push({
  1407. path: "/businessManagement/receipt/index",
  1408. query: {form: JSON.stringify(res.data.data)},
  1409. });
  1410. })
  1411. }
  1412. }).catch(() => {
  1413. this.saveLoading = false
  1414. })
  1415. } else {
  1416. return false;
  1417. }
  1418. });
  1419. },
  1420. beforeBillData(bool,type){
  1421. this.billType = type
  1422. //采购明细提单号 list
  1423. this.billData = {
  1424. srcOrderno:this.form.orderNo,
  1425. itemType:"采购",
  1426. corpsName:this.form.corpsName,
  1427. corpId:this.form.corpId,
  1428. srcParentId: this.form.id,
  1429. currency: 'CNY',
  1430. exchangeRate: '1',
  1431. taxRate: '0',
  1432. accDate: this.form.businesDate,
  1433. srcType: 1,
  1434. tradeType: 'GN',
  1435. optionType: 'GN'
  1436. }
  1437. if(bool){ //申请货款
  1438. this.billData.srcId = -1
  1439. }
  1440. },
  1441. // 查看申请记录
  1442. openApplicationDialog(){
  1443. this.applicationDialog = true
  1444. },
  1445. //关闭申记录
  1446. choceApplication(){
  1447. this.applicationDialog = false
  1448. },
  1449. //申请货款
  1450. applyPayment(type){
  1451. // if (contrastObj(this.form, this.oldForm) ||
  1452. // contrastList(this.contactsData, this.oldGoodsList) ||
  1453. // contrastList(this.advantageProjectData, this.oldFeesList) ||
  1454. // contrastList(this.bankOfDepositData, this.oldUploadList)
  1455. // ) {
  1456. // this.$confirm("您已改动数据,是否先保存在进行操作!", {
  1457. // confirmButtonText: "保存",
  1458. // cancelButtonText: "取消",
  1459. // type: "warning"
  1460. // }).then(() => {
  1461. // this.editCustomer();
  1462. // })
  1463. // }else{
  1464. this.beforeBillData(true,type);
  1465. this.applyPaymentDialog = true;
  1466. // }
  1467. },
  1468. //关闭账单
  1469. choceFun(){
  1470. this.applyPaymentDialog = false
  1471. },
  1472. //返回列表
  1473. backToList() {
  1474. if (contrastObj(this.form, this.oldForm) ||
  1475. contrastList(this.contactsData, this.oldGoodsList) ||
  1476. contrastList(this.advantageProjectData, this.oldFeesList) ||
  1477. contrastList(this.bankOfDepositData, this.oldUploadList)
  1478. ) {
  1479. this.$confirm("数据发生变化未有提交记录, 是否提交?", "提示", {
  1480. confirmButtonText: "确定",
  1481. cancelButtonText: "取消",
  1482. type: "warning"
  1483. }).then(() => {
  1484. this.editCustomer(true)
  1485. }).catch(() => {
  1486. this.$emit("goBack");
  1487. })
  1488. } else {
  1489. this.$emit("goBack");
  1490. }
  1491. },
  1492. // 保存列设置
  1493. async saveColumn(name) {
  1494. /**
  1495. * 已定义全局方法,直接使用,saveColumnData保存列数据方法,参数传值(表格名称,当前表格的option数据)
  1496. * 已定义全局方法,直接使用,getColumnName方法用来获取枚举值,参数根据自己定义的code值获取中文名
  1497. * 一定要执行异步操作,要等接口成功返回,才能执行下一行代码
  1498. */
  1499. if (name == 'goods') {
  1500. const inSave = await this.saveColumnData(
  1501. this.getColumnName(18),
  1502. this.customerContact
  1503. );
  1504. if (inSave) {
  1505. this.$message.success("保存成功");
  1506. //关闭窗口
  1507. this.$refs.crudContact.$refs.dialogColumn.columnBox = false;
  1508. }
  1509. } else if (name === 'fees') {
  1510. const inSave = await this.saveColumnData(
  1511. this.getColumnName(19),
  1512. this.advantageProject
  1513. );
  1514. if (inSave) {
  1515. this.$message.success("保存成功");
  1516. //关闭窗口
  1517. this.$refs.crudProject.$refs.dialogColumn.columnBox = false;
  1518. }
  1519. }
  1520. },
  1521. returnBack(row) {
  1522. this.$set(this.form, 'paymentType', row.paymentType)
  1523. this.$set(this.form, 'packageRemarks', row.packageRemarks)
  1524. getlistBankBy(row.id).then(res =>{
  1525. this.$set(this.form, 'banks', null)
  1526. this.$set(this.form, 'banksAccountName', null)
  1527. this.$set(this.form, 'accountBank', null)
  1528. this.bankList = res.data
  1529. if (this.bankList.length > 0) {
  1530. this.form.banks = this.bankList[0].accountNo
  1531. this.form.banksAccountName = this.bankList[0].accountName
  1532. this.form.accountBank = this.bankList[0].accountBank
  1533. }
  1534. })
  1535. },
  1536. // 银行账号变化
  1537. banksChange(val) {
  1538. let isTrue = false
  1539. this.bankList.forEach(item => {
  1540. if (val == item.accountNo) {
  1541. this.$set(this.form, 'banksAccountName', item.accountName)
  1542. this.$set(this.form, 'accountBank', item.accountBank)
  1543. isTrue = true
  1544. }
  1545. })
  1546. if (!isTrue) {
  1547. this.$set(this.form, 'banksAccountName', null)
  1548. this.$set(this.form, 'accountBank', null)
  1549. }
  1550. },
  1551. // 标签页切换
  1552. tabHandle(data) {
  1553. if (data.name == 'searchList') {
  1554. this.goodsListShow = this.data;
  1555. this.page.total = this.pageList.total
  1556. } else if (data.name == 'importStaging') {
  1557. this.goodsListShow = this.goodsListSave;
  1558. this.page.total = 0
  1559. }
  1560. },
  1561. removeStagList(row, index) {
  1562. this.goodsListSave.splice(index, 1)
  1563. },
  1564. importStagList(row, index) {
  1565. this.goodsListSave.push(row);
  1566. },
  1567. beforeFinance(feesData,callback) {
  1568. this.orderFeesList = feesData;
  1569. let params = {}
  1570. params.valid = true
  1571. params.parentId = this.form.id
  1572. params.srcOrderno = this.form.orderNo
  1573. callback(params)
  1574. },
  1575. }
  1576. }
  1577. </script>
  1578. <style lang="scss" scoped>
  1579. .back-icon {
  1580. line-height: 64px;
  1581. font-size: 20px;
  1582. margin-right: 8px;
  1583. }
  1584. //.add-customer-btn {
  1585. // position: fixed;
  1586. // right: 36px;
  1587. // top: 115px;
  1588. //}
  1589. ::v-deep .el-form-item {
  1590. margin-bottom: 0;
  1591. }
  1592. .el-dialogDeep {
  1593. ::v-deep .el-dialog {
  1594. margin: 1vh auto 0 !important;
  1595. padding-bottom: 10px !important;
  1596. .el-dialog__body, .el-dialog__footer {
  1597. padding-bottom: 0 !important;
  1598. padding-top: 0 !important;
  1599. }
  1600. }
  1601. }
  1602. .print-div {
  1603. color: #000;
  1604. }
  1605. .print_table {
  1606. table {
  1607. border-right: 1px solid #000;
  1608. border-bottom: 1px solid #000;
  1609. font-size: 12px;
  1610. margin-bottom: 5px;
  1611. }
  1612. table td {
  1613. border-left: 1px solid #000;
  1614. border-top: 1px solid #000;
  1615. vertical-align: middle;
  1616. padding: 2px;
  1617. text-align: center;
  1618. }
  1619. }
  1620. .table {
  1621. border-collapse: collapse;
  1622. border-spacing: 0;
  1623. background-color: transparent;
  1624. display: table;
  1625. width: 99%;
  1626. max-width: 100%;
  1627. margin: 0 auto;
  1628. }
  1629. .table td {
  1630. text-align: left;
  1631. vertical-align: middle;
  1632. font-size: 14px;
  1633. color: #000000;
  1634. padding: 10.5px 0 10.5px 30px;
  1635. //border: 1px solid #000;
  1636. }
  1637. ::v-deep .el-form-item {
  1638. margin-bottom: 0;
  1639. }
  1640. ::v-deep .el-form-item__content{
  1641. line-height: 32px;
  1642. }
  1643. </style>