feecenter.vue 52 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155
  1. <template>
  2. <div>
  3. <div>
  4. <el-form :model="assemblyForm" ref="form" label-width="90px" style="margin-bottom: 4px" class="demo-ruleForm">
  5. <el-row :gutter="10">
  6. <el-col :span="6">
  7. <el-form-item label="客户名称" prop="corpCnName" >
  8. <span slot="label">
  9. <span style="color: #1e9fff">客户名称</span>
  10. </span>
  11. <el-input type="age" style="width: 100%;" v-model="assemblyForm.corpCnName"
  12. size="small" autocomplete="off"
  13. disabled
  14. clearable placeholder="客户名称" ></el-input>
  15. </el-form-item>
  16. </el-col>
  17. <el-col :span="6">
  18. <el-form-item label="MB/L NO" prop="mblno" >
  19. <span slot="label">
  20. <span style="color: #1e9fff">MB/L NO</span>
  21. </span>
  22. <el-input type="age" style="width: 100%;" v-model="assemblyForm.mblno"
  23. size="small" autocomplete="off"
  24. disabled
  25. clearable placeholder="MB/L NO" ></el-input>
  26. </el-form-item>
  27. </el-col>
  28. <el-col :span="6">
  29. <el-form-item label="HB/L NO" prop="hblno" >
  30. <span slot="label">
  31. <span style="color: #1e9fff">HB/L NO</span>
  32. </span>
  33. <el-input type="age" style="width: 100%;" v-model="assemblyForm.hblno"
  34. size="small" autocomplete="off"
  35. disabled
  36. clearable placeholder="MB/L NO" ></el-input>
  37. </el-form-item>
  38. </el-col>
  39. <el-col :span="6">
  40. <el-form-item label="船名" prop="vesselCnName" >
  41. <span slot="label">
  42. <span style="color: #1e9fff">船名</span>
  43. </span>
  44. <el-input type="age" style="width: 100%;" v-model="assemblyForm.vesselCnName"
  45. size="small" autocomplete="off"
  46. disabled
  47. clearable placeholder="船名" ></el-input>
  48. </el-form-item>
  49. </el-col>
  50. <el-col :span="6">
  51. <el-form-item label="航次" prop="voyageNo" >
  52. <span slot="label">
  53. <span style="color: #1e9fff">航次</span>
  54. </span>
  55. <el-input type="age" style="width: 100%;" v-model="assemblyForm.voyageNo"
  56. size="small" autocomplete="off"
  57. disabled
  58. clearable placeholder="航次" ></el-input>
  59. </el-form-item>
  60. </el-col>
  61. <el-col :span="6">
  62. <el-form-item label="ETD" prop="etd" >
  63. <el-input type="age" style="width: 100%;" v-model="assemblyForm.etd"
  64. size="small" autocomplete="off"
  65. disabled
  66. clearable placeholder="ETD" ></el-input>
  67. </el-form-item>
  68. </el-col>
  69. <el-col :span="6">
  70. <el-form-item label="箱型箱量" prop="quantityCntrDescr" >
  71. <span slot="label">
  72. <span style="color: #1e9fff">箱型箱量</span>
  73. </span>
  74. <el-input type="age" style="width: 100%;" v-model="assemblyForm.quantityCntrDescr"
  75. size="small" autocomplete="off"
  76. disabled
  77. clearable placeholder="箱型箱量" ></el-input>
  78. </el-form-item>
  79. </el-col>
  80. </el-row>
  81. </el-form>
  82. </div>
  83. <el-card class="box-card">
  84. <el-row :gutter="20">
  85. <el-col :span="3">
  86. <div class="disabledBox fontSize">
  87. <i class="el-icon-coin"></i>
  88. <span>应收费用</span>
  89. </div>
  90. </el-col>
  91. <!--<el-col :span="6">-->
  92. <!-- <div class="disabledBox">-->
  93. <!-- <span style="font-size: 14px;margin-right: 5px">签单方式</span>-->
  94. <!-- <el-select v-model="value" placeholder="请选择" size="small" >-->
  95. <!-- <el-option-->
  96. <!-- v-for="item in issuetypefData"-->
  97. <!-- :key="item.dictKey"-->
  98. <!-- :label="item.dictValue"-->
  99. <!-- :value="item.dictValue">-->
  100. <!-- </el-option>-->
  101. <!-- </el-select>-->
  102. <!-- </div>-->
  103. <!--</el-col>-->
  104. <el-col :span="15">
  105. <el-button type="danger" plain size="small"
  106. :disabled="!selectionDList.length" @click="batchDelete('D')">批量删除</el-button>
  107. <el-button type="success" plain size="small">应收账单</el-button>
  108. <el-button type="primary" plain size="small">应付账单</el-button>
  109. <el-button type="primary" plain size="small">打印账单</el-button>
  110. <el-button type="success" plain size="small" :disabled="!this.assemblyForm.id" @click="templateClick('D')">应收模板</el-button>
  111. </el-col>
  112. </el-row>
  113. <div style="margin-top: 10px">
  114. <el-table
  115. :row-style="{height:'20px',padding:'0px',fontSize:'12px'}"
  116. :cell-style="{padding:'0px',fontSize:'12px'}"
  117. :header-cell-style="tableHeaderCellStyle"
  118. :data="assemblyForm.feeCenterListD"
  119. @selection-change="handleSelectionChange($event,'D')"
  120. border
  121. stripe
  122. style="width: 100%">
  123. <el-table-column
  124. type="selection"
  125. fixed="left"
  126. width="55">
  127. </el-table-column>
  128. <el-table-column
  129. fixed="left"
  130. type="index"
  131. align="center"
  132. width="60">
  133. <template slot="header" slot-scope="scope">
  134. <el-button type="primary" size="small" icon="el-icon-plus" circle
  135. :disabled="detailData.seeDisabled" @click="addDfun"></el-button>
  136. </template>
  137. </el-table-column>
  138. <el-table-column
  139. prop="corpCnName"
  140. header-align="center"
  141. label="单位" width="160px">
  142. <template slot-scope="{ row }">
  143. <search-query v-if="row.edit"
  144. :datalist="corpCnNameData"
  145. :selectValue="row.corpCnName"
  146. :filterable="true"
  147. :clearable="true"
  148. :remote="true"
  149. :buttonIf="false"
  150. :forParameter="{key:'id',label:'cnName',value:'cnName'}"
  151. @remoteMethod="getBcorpsListfun($event,'corpCnName')"
  152. @corpChange="corpChange($event,'corpCnName',row)"
  153. @corpFocus="getBcorpsListfun($event,'corpCnName')" >
  154. </search-query>
  155. <span v-else>{{row.corpCnName}}</span>
  156. </template>
  157. </el-table-column>
  158. <el-table-column
  159. prop="feeCnName"
  160. header-align="center"
  161. label="费用简称" width="160px">
  162. <template slot-scope="{ row }">
  163. <search-query v-if="row.edit"
  164. :datalist="feeCnNameData"
  165. :selectValue="row.feeCnName"
  166. :filterable="true"
  167. :clearable="true"
  168. :remote="true"
  169. :buttonIf="false"
  170. :forParameter="{key:'id',label:'cnName',value:'cnName'}"
  171. @remoteMethod="bfeesListfun($event,'feeCnName')"
  172. @corpChange="corpChange($event,'feeCnName',row)"
  173. @corpFocus="bfeesListfun($event,'feeCnName')" >
  174. </search-query>
  175. <span v-else>{{row.feeCnName}}</span>
  176. </template>
  177. </el-table-column>
  178. <el-table-column
  179. prop="paymode"
  180. header-align="center"
  181. label="预付/到付" width="120px">
  182. <template slot-scope="{ row }">
  183. <el-select v-if="row.edit" v-model="row.paymode" placeholder="请选择">
  184. <el-option
  185. v-for="item in paymodeData"
  186. :key="item.value"
  187. :label="item.label"
  188. :value="item.value">
  189. </el-option>
  190. </el-select>
  191. <span v-else>{{paymodefun(row.paymode)}}</span>
  192. </template>
  193. </el-table-column>
  194. <el-table-column
  195. prop="unitNo"
  196. header-align="center"
  197. label="计量单位" width="120px">
  198. <template slot-scope="{ row }">
  199. <search-query v-if="row.edit"
  200. :datalist="unitNoData"
  201. :selectValue="row.unitNo"
  202. :filterable="true"
  203. :clearable="true"
  204. :remote="true"
  205. :buttonIf="false"
  206. :forParameter="{key:'id',label:'cnName',value:'cnName'}"
  207. @remoteMethod="getBunitsPagefun($event,'unitNo')"
  208. @corpChange="corpChange($event,'unitNo',row)"
  209. @corpFocus="getBunitsPagefun($event,'unitNo')" >
  210. </search-query>
  211. <span v-else>{{row.unitNo}}</span>
  212. </template>
  213. </el-table-column>
  214. <el-table-column
  215. prop="curCode"
  216. header-align="center"
  217. label="币种" width="120px">
  218. <template slot-scope="{ row }">
  219. <search-query v-if="row.edit"
  220. :datalist="curCodeData"
  221. :selectValue="row.curCode"
  222. :filterable="true"
  223. :clearable="true"
  224. :remote="true"
  225. :buttonIf="false"
  226. :forParameter="{key:'id',label:'cnName',value:'cnName'}"
  227. @remoteMethod="getRateListfun($event,'curCode')"
  228. @corpChange="corpChange($event,'curCode',row)"
  229. @corpFocus="getRateListfun($event,'curCode')" >
  230. </search-query>
  231. <span v-else>{{row.curCode}}</span>
  232. </template>
  233. </el-table-column>
  234. <el-table-column
  235. prop="price"
  236. header-align="center"
  237. label="单价" width="120px">
  238. <template slot-scope="{ row }">
  239. <el-input v-if="row.edit" type="number" v-model="row.price" size="small"
  240. placeholder="请输入" @blur="priceinputfun($event,row)"></el-input>
  241. <span v-else>{{row.price}}</span>
  242. </template>
  243. </el-table-column>
  244. <el-table-column
  245. prop="quantity"
  246. header-align="center"
  247. label="数量" width="120px" >
  248. <template slot-scope="{ row }">
  249. <el-input v-if="row.edit" type="number" v-model="row.quantity" size="small"
  250. placeholder="请输入" @blur="quantityinputfun(row)"></el-input>
  251. <span v-else>{{row.quantity}}</span>
  252. </template>
  253. </el-table-column>
  254. <el-table-column
  255. prop="rmbAmount"
  256. header-align="center"
  257. label="CNY(含税)" width="100px">
  258. </el-table-column>
  259. <el-table-column
  260. prop="usdAmount"
  261. header-align="center"
  262. label="USD(含税)" width="100px">
  263. </el-table-column>
  264. <el-table-column
  265. prop="exrate"
  266. header-align="center"
  267. label="对CNY汇率" width="100px">
  268. </el-table-column>
  269. <el-table-column
  270. prop="payplace"
  271. header-align="center"
  272. label="预付地址">
  273. <template slot-scope="{ row }">
  274. <el-input v-if="row.edit" v-model="row.payplace" size="small"
  275. placeholder="请输入" ></el-input>
  276. <span v-else>{{row.payplace}}</span>
  277. </template>
  278. </el-table-column>
  279. <el-table-column
  280. prop="remarks"
  281. header-align="center"
  282. label="备注">
  283. <template slot-scope="{ row }">
  284. <el-input v-if="row.edit" v-model="row.remarks" size="small"
  285. placeholder="请输入" ></el-input>
  286. <span v-else>{{row.remarks}}</span>
  287. </template>
  288. </el-table-column>
  289. <el-table-column
  290. fixed="right"
  291. label="操作"
  292. header-align="center"
  293. width="100">
  294. <template slot-scope="scope">
  295. <el-button v-if="scope.row.edit" type="text" size="small" @click="savefun(scope.row,scope.$index,'D')">保存</el-button>
  296. <el-button v-else type="text" size="small" @click="editDfun(scope.row,scope.$index)">编辑</el-button>
  297. <el-button type="text" size="small" @click="deletefun(scope.row,scope.$index,'D')">删除</el-button>
  298. </template>
  299. </el-table-column>
  300. </el-table>
  301. </div>
  302. </el-card>
  303. <el-card class="box-card" style="margin: 20px 0">
  304. <el-row :gutter="20">
  305. <el-col :span="3">
  306. <div class="disabledBox meetSize">
  307. <i class="el-icon-coin"></i>
  308. <span>应付费用</span>
  309. </div>
  310. </el-col>
  311. <el-col :span="15">
  312. <el-button type="danger" plain size="small"
  313. :disabled="!selectionCList.length" @click="batchDelete('C')">批量删除</el-button>
  314. <el-button type="success" plain size="small" :disabled="!this.assemblyForm.id" @click="templateClick('C')">应付模板</el-button>
  315. </el-col>
  316. </el-row>
  317. <div style="margin-top: 10px">
  318. <el-table
  319. :row-style="{height:'20px',padding:'0px',fontSize:'12px'}"
  320. :cell-style="{padding:'0px',fontSize:'12px'}"
  321. :header-cell-style="tableHeaderCellStyle"
  322. :data="assemblyForm.feeCenterListC"
  323. @selection-change="handleSelectionChange($event,'C')"
  324. border
  325. stripe
  326. style="width: 100%">
  327. <el-table-column
  328. type="selection"
  329. fixed="left"
  330. width="55">
  331. </el-table-column>
  332. <el-table-column
  333. fixed="left"
  334. type="index"
  335. align="center"
  336. width="60">
  337. <template slot="header" slot-scope="scope">
  338. <el-button type="primary" size="small" icon="el-icon-plus" circle
  339. :disabled="detailData.seeDisabled" @click="addCfun"></el-button>
  340. </template>
  341. </el-table-column>
  342. <el-table-column
  343. prop="corpCnName"
  344. label="单位" width="160px"
  345. header-align="center">
  346. <template slot-scope="{ row }">
  347. <search-query v-if="row.edit"
  348. :datalist="corpCnNameData"
  349. :selectValue="row.corpCnName"
  350. :filterable="true"
  351. :clearable="true"
  352. :remote="true"
  353. :buttonIf="false"
  354. :forParameter="{key:'id',label:'cnName',value:'cnName'}"
  355. @remoteMethod="getBcorpsListfun($event,'corpCnName')"
  356. @corpChange="corpChange($event,'corpCnName',row)"
  357. @corpFocus="getBcorpsListfun($event,'corpCnName')" >
  358. </search-query>
  359. <span v-else>{{row.corpCnName}}</span>
  360. </template>
  361. </el-table-column>
  362. <el-table-column
  363. prop="feeCnName"
  364. label="费用简称" width="160px"
  365. header-align="center">
  366. <template slot-scope="{ row }">
  367. <search-query v-if="row.edit"
  368. :datalist="feeCnNameData"
  369. :selectValue="row.feeCnName"
  370. :filterable="true"
  371. :clearable="true"
  372. :remote="true"
  373. :buttonIf="false"
  374. :forParameter="{key:'id',label:'cnName',value:'cnName'}"
  375. @remoteMethod="bfeesListfun($event,'feeCnName')"
  376. @corpChange="corpChange($event,'feeCnName',row)"
  377. @corpFocus="bfeesListfun($event,'feeCnName')" >
  378. </search-query>
  379. <span v-else>{{row.feeCnName}}</span>
  380. </template>
  381. </el-table-column>
  382. <el-table-column
  383. prop="paymode"
  384. label="预付/到付" width="120px"
  385. header-align="center">
  386. <template slot-scope="{ row }">
  387. <el-select v-if="row.edit" v-model="row.paymode" placeholder="请选择">
  388. <el-option
  389. v-for="item in paymodeData"
  390. :key="item.value"
  391. :label="item.label"
  392. :value="item.value">
  393. </el-option>
  394. </el-select>
  395. <span v-else>{{paymodefun(row.paymode)}}</span>
  396. </template>
  397. </el-table-column>
  398. <el-table-column
  399. prop="unitNo"
  400. label="计量单位" width="120px"
  401. header-align="center">
  402. <template slot-scope="{ row }">
  403. <search-query v-if="row.edit"
  404. :datalist="unitNoData"
  405. :selectValue="row.unitNo"
  406. :filterable="true"
  407. :clearable="true"
  408. :remote="true"
  409. :buttonIf="false"
  410. :forParameter="{key:'id',label:'cnName',value:'cnName'}"
  411. @remoteMethod="getBunitsPagefun($event,'unitNo')"
  412. @corpChange="corpChange($event,'unitNo',row)"
  413. @corpFocus="getBunitsPagefun($event,'unitNo')" >
  414. </search-query>
  415. <span v-else>{{row.unitNo}}</span>
  416. </template>
  417. </el-table-column>
  418. <el-table-column
  419. prop="curCode"
  420. label="币种" width="120px"
  421. header-align="center">
  422. <template slot-scope="{ row }">
  423. <search-query v-if="row.edit"
  424. :datalist="curCodeData"
  425. :selectValue="row.curCode"
  426. :filterable="true"
  427. :clearable="true"
  428. :remote="true"
  429. :buttonIf="false"
  430. :forParameter="{key:'id',label:'code',value:'code'}"
  431. @remoteMethod="getRateListfun($event,'curCode')"
  432. @corpChange="corpChange($event,'curCode',row)"
  433. @corpFocus="getRateListfun($event,'curCode')">
  434. </search-query>
  435. <span v-else>{{row.curCode}}</span>
  436. </template>
  437. </el-table-column>
  438. <el-table-column
  439. prop="price"
  440. label="单价" width="120px"
  441. header-align="center">
  442. <template slot-scope="{ row }">
  443. <el-input v-if="row.edit" type="number" v-model="row.price" size="small"
  444. placeholder="请输入" @blur="priceinputfun($event,row)"></el-input>
  445. <span v-else>{{row.price}}</span>
  446. </template>
  447. </el-table-column>
  448. <el-table-column
  449. prop="quantity"
  450. label="数量" width="120px"
  451. header-align="center">
  452. <template slot-scope="{ row }">
  453. <el-input v-if="row.edit" type="number" v-model="row.quantity" size="small"
  454. placeholder="请输入" @blur="quantityinputfun(row)"></el-input>
  455. <span v-else>{{row.quantity}}</span>
  456. </template>
  457. </el-table-column>
  458. <el-table-column
  459. prop="rmbAmount"
  460. label="CNY(含税)" width="100px"
  461. header-align="center">
  462. </el-table-column>
  463. <el-table-column
  464. prop="usdAmount"
  465. label="USD(含税)" width="100px"
  466. header-align="center">
  467. </el-table-column>
  468. <el-table-column
  469. prop="exrate"
  470. label="对CNY汇率" width="100px"
  471. header-align="center">
  472. </el-table-column>
  473. <el-table-column
  474. prop="payplace"
  475. label="预付地址"
  476. header-align="center">
  477. <template slot-scope="{ row }">
  478. <el-input v-if="row.edit" v-model="row.payplace" size="small"
  479. placeholder="请输入" ></el-input>
  480. <span v-else>{{row.payplace}}</span>
  481. </template>
  482. </el-table-column>
  483. <el-table-column
  484. prop="remarks"
  485. label="备注" header-align="center">
  486. <template slot-scope="{ row }">
  487. <el-input v-if="row.edit" v-model="row.remarks" size="small"
  488. placeholder="请输入" ></el-input>
  489. <span v-else>{{row.remarks}}</span>
  490. </template>
  491. </el-table-column>
  492. <el-table-column
  493. fixed="right"
  494. label="操作"
  495. header-align="center"
  496. width="100">
  497. <template slot-scope="scope">
  498. <el-button v-if="scope.row.edit" type="text" size="small" @click="savefun(scope.row,scope.$index,'C')">保存</el-button>
  499. <el-button v-else type="text" size="small" @click="editCfun(scope.row,scope.$index)">编辑</el-button>
  500. <el-button type="text" size="small" @click="deletefun(scope.row,scope.$index,'C')">删除</el-button>
  501. </template>
  502. </el-table-column>
  503. </el-table>
  504. </div>
  505. </el-card>
  506. <div style="display: flex;align-items: center;justify-content: space-around">
  507. <div style="width: 30%">
  508. <el-card class="box-card">
  509. <div class="bottomFlex" style="justify-content: space-around">
  510. <div style="text-align: center">
  511. <div class="weightfont">¥</div>
  512. <div>CNY</div>
  513. </div>
  514. <div>
  515. <div style="color: #81B337">
  516. <span>应收:</span>
  517. <span class="weightnum">¥{{assemblyForm.amountDr}}元</span>
  518. </div>
  519. <div style="color: #6BBCD1">
  520. <span>应付:</span>
  521. <span class="weightnum">¥{{assemblyForm.amountCr}}元</span>
  522. </div>
  523. </div>
  524. <div class="bottomFlex">
  525. <span>利润</span>
  526. <span>¥{{assemblyForm.amountProfit}}元</span>
  527. </div>
  528. </div>
  529. </el-card>
  530. </div>
  531. <div style="width: 30%">
  532. <el-card class="box-card">
  533. <div class="bottomFlex" style="justify-content: space-around">
  534. <div style="text-align: center">
  535. <div class="weightfont">$</div>
  536. <div>USD</div>
  537. </div>
  538. <div>
  539. <div style="color: #81B337">
  540. <span>应收:</span>
  541. <span class="weightnum">${{assemblyForm.amountDrUsd}}元</span>
  542. </div>
  543. <div style="color: #6BBCD1">
  544. <span>应付:</span>
  545. <span class="weightnum">${{assemblyForm.amountCrUsd}}元</span>
  546. </div>
  547. </div>
  548. <div class="bottomFlex">
  549. <span>利润</span>
  550. <span>${{assemblyForm.amountProfitUsd}}元</span>
  551. </div>
  552. </div>
  553. </el-card>
  554. </div>
  555. <div style="width: 30%">
  556. <el-card class="box-card">
  557. <div class="bottomFlex" style="justify-content: space-around">
  558. <div style="text-align: center">
  559. <div class="weightfont">¥</div>
  560. <div>CNY合计</div>
  561. </div>
  562. <div>
  563. <div style="color: #81B337">
  564. <span>应收:</span>
  565. <span class="weightnum">¥{{assemblyForm.amountDrLoc}}元</span>
  566. </div>
  567. <div style="color: #6BBCD1">
  568. <span>应付:</span>
  569. <span class="weightnum">¥{{assemblyForm.amountCrLoc}}元</span>
  570. </div>
  571. </div>
  572. <div class="bottomFlex">
  573. <span>利润</span>
  574. <span>¥{{assemblyForm.amountProfitLoc}}元</span>
  575. </div>
  576. </div>
  577. </el-card>
  578. </div>
  579. </div>
  580. <!--模板弹窗-->
  581. <el-dialog
  582. title="提示"
  583. :visible.sync="templateVisible"
  584. append-to-body
  585. width="70%"
  586. :before-close="handleClose">
  587. <div>
  588. <el-row>
  589. <el-col :span="5">
  590. <div class="box">
  591. <el-scrollbar>
  592. <basic-container>
  593. <avue-tree :option="treeOption" :data="templateData" @node-click="nodeClick">
  594. </avue-tree>
  595. </basic-container>
  596. </el-scrollbar>
  597. </div>
  598. </el-col>
  599. <el-col :span="19">
  600. <basic-container>
  601. <avue-crud :option="templateOption"
  602. :data="templateRightData"
  603. @selection-change="feeselectionChange">
  604. </avue-crud>
  605. </basic-container>
  606. </el-col>
  607. </el-row>
  608. </div>
  609. <span slot="footer" class="dialog-footer">
  610. <el-button @click="templateVisible = false">取 消</el-button>
  611. <el-button type="primary" @click="templateExport">导 入</el-button>
  612. </span>
  613. </el-dialog>
  614. </div>
  615. </template>
  616. <script>
  617. import SearchQuery from "@/components/iosbasic-data/searchquery.vue";
  618. import {getBcorpsList} from "@/api/iosBasicData/bcorps";
  619. import {bfeesList} from "@/api/iosBasicData/bfees";
  620. import {getBunitsPage} from "@/api/iosBasicData/bunits";
  621. import {getRateList} from "@/api/iosBasicData/rateManagement";
  622. import {feecenterList, feecenterRemove, feecenterSubmit} from "@/api/iosBasicData/feecenter";
  623. import {getWorkDicts} from "@/api/system/dictbiz";
  624. import {feecenterTemplateImport, losbfeestemplateGetListTemplate} from "@/api/iosBasicData/bills";
  625. import {losbfeestemplateDetail} from "@/api/iosBasicData/losbfeestemplate";
  626. import {requiredMessage} from "@/util/messageReminder";
  627. export default {
  628. components: {SearchQuery},
  629. props:{
  630. pid:{
  631. },
  632. assemblyForm:{
  633. type:Object
  634. },
  635. detailData:{},
  636. },
  637. data(){
  638. return {
  639. // 签单方式
  640. issuetypefData:[],
  641. value:'',
  642. feeCenterListD:[], // 收
  643. feeCenterListC:[], // 付
  644. // 客户数据
  645. corpCnNameData:[],
  646. // 费用数据
  647. feeCnNameData:[],
  648. // 预付到付数据
  649. paymodeData:[
  650. {
  651. label:'预付',
  652. value:'PP'
  653. },
  654. {
  655. label:'到付',
  656. value:'CC'
  657. }
  658. ],
  659. // 计算单位数据
  660. unitNoData:[],
  661. // 币别数据
  662. curCodeData:[],
  663. // 模板弹窗
  664. templateVisible:false,
  665. treeOption: {
  666. nodeKey: "id",
  667. // lazy: true,
  668. addBtn: false,
  669. menu: false,
  670. size: "small",
  671. props: {
  672. labelText: "标题",
  673. label: "cnName",
  674. value: "value",
  675. children: "children"
  676. }
  677. },
  678. // 右侧详情数据
  679. templateRightData:[],
  680. templateOption:{
  681. menu:false,
  682. stripe:true,
  683. addBtn:false,
  684. editBtn:false,
  685. delBtn:false,
  686. viewBtn:false,
  687. index:true,
  688. selection:true,
  689. column:[
  690. {
  691. label: '客户',
  692. prop:'curCode'
  693. },
  694. {
  695. label: '费用',
  696. prop:'feeCnName'
  697. },
  698. {
  699. label: '数量',
  700. prop:'quantity'
  701. },
  702. {
  703. label: '单价',
  704. prop:'price'
  705. },
  706. {
  707. label: '计量单位',
  708. prop:'unitNo'
  709. },
  710. {
  711. label: '币别',
  712. prop:'curCode'
  713. }
  714. ]
  715. },
  716. // 左侧数据
  717. templateData:[],
  718. lefttemplate:{}, // 左侧选择的数据
  719. // 选中的数据
  720. feesselectionList:[],
  721. selectionDList:[], // 收选择的
  722. selectionCList:[], // 付选择的
  723. // 需要加判断是否必填的数据
  724. messageData:[
  725. {
  726. name:'客户',
  727. value:'corpCnName',
  728. },
  729. {
  730. name:'业务来源',
  731. value:'srcType',
  732. },
  733. {
  734. name:'MBLNO',
  735. value:'mblno',
  736. },
  737. {
  738. name:'HBLNO',
  739. value:'hblno',
  740. },
  741. {
  742. name:'booking NO',
  743. value:'bookingNo',
  744. },
  745. {
  746. name:'外提单号',
  747. value:'refno',
  748. },
  749. {
  750. name:'船名(VSL)',
  751. value:'vesselCnName',
  752. },
  753. {
  754. name:'航次(VOY)',
  755. value:'voyageNo',
  756. },
  757. {
  758. name:'ETD',
  759. value:'etd',
  760. },
  761. {
  762. name:'装货港',
  763. value:'polCnName',
  764. },
  765. {
  766. name:'目的港',
  767. value:'destinationNamePrint',
  768. },
  769. {
  770. name:'包装单位',
  771. value:'packingUnit',
  772. },
  773. {
  774. name:'船公司',
  775. value:'carrierCnName',
  776. },
  777. {
  778. name:'场站',
  779. value:'cyCnName',
  780. },
  781. ],
  782. }
  783. },
  784. created() {
  785. },
  786. methods:{
  787. // 模板导入
  788. templateExport(){
  789. if (this.feesselectionList.length > 0) {
  790. feecenterTemplateImport({
  791. ...this.lefttemplate,
  792. feesTemplateItemsList:this.feesselectionList,
  793. billNoId:this.assemblyForm.id
  794. }).then(res=>{
  795. this.$message({
  796. type: "success",
  797. message: "操作成功!"
  798. });
  799. this.$emit('billsDetailfun')
  800. this.templateVisible = false
  801. })
  802. }else {
  803. this.$message.warning('请先选择要导入的数据')
  804. }
  805. },
  806. // 模板
  807. templateClick(dc){
  808. this.templateVisible = true
  809. losbfeestemplateGetListTemplate(1,50,{
  810. dc:dc,
  811. status:0
  812. }).then(res=>{
  813. this.templateData = res.data.data.records
  814. })
  815. },
  816. // 左侧选择
  817. nodeClick(e) {
  818. this.lefttemplate = e
  819. losbfeestemplateDetail(e.id).then(res=>{
  820. this.templateRightData = res.data.data.feesTemplateItemsList
  821. })
  822. },
  823. // 右侧选择回调
  824. feeselectionChange(list) {
  825. this.feesselectionList = list;
  826. },
  827. // 应收新增
  828. addDfun(){
  829. if (!this.pid) {
  830. this.$message({
  831. message: '请先保存数据之后才能添加',
  832. type: 'warning'
  833. });
  834. return
  835. }
  836. // 判断数据需要的数据是否有
  837. if (!requiredMessage(this.assemblyForm,this.messageData)) {
  838. return;
  839. }
  840. this.assemblyForm.feeCenterListD.push({
  841. edit:true
  842. })
  843. },
  844. // 应付新增
  845. addCfun(){
  846. if (!this.pid) {
  847. this.$message({
  848. message: '请先保存数据之后才能添加',
  849. type: 'warning'
  850. });
  851. return
  852. }
  853. // 判断数据需要的数据是否有
  854. if (!requiredMessage(this.assemblyForm,this.messageData)) {
  855. return;
  856. }
  857. this.assemblyForm.feeCenterListC.push({
  858. edit:true
  859. })
  860. },
  861. // 应收编辑
  862. editDfun(row,index){
  863. this.$delete(this.assemblyForm.feeCenterListD[index], 'edit')
  864. this.$set(this.assemblyForm.feeCenterListD[index],'edit',true)
  865. },
  866. // 应付编辑
  867. editCfun(row,index){
  868. this.$delete(this.assemblyForm.feeCenterListC[index], 'edit')
  869. this.$set(this.assemblyForm.feeCenterListC[index],'edit',true)
  870. },
  871. // 应付应付保存
  872. savefun(row,index,dc){
  873. // 收付 D=收 C=付
  874. row.dc = dc
  875. row.pid = this.pid
  876. row.sort = index
  877. row.businessType = this.assemblyForm.businessType // 业务类型
  878. row.billType = this.assemblyForm.billType // 单据类型
  879. row.billNo = this.assemblyForm.billNo // 单据编号
  880. row.billDate = this.assemblyForm.billDate // 单据日期
  881. row.billCorpId = this.assemblyForm.corpId // 主表客户 id
  882. row.billCorpCnName = this.assemblyForm.corpCnName // 主表客户中文名称
  883. row.billCorpEnName = this.assemblyForm.corpEnName // 主表客户英文名称
  884. row.lineId = this.assemblyForm.lineId // 航线 id
  885. row.lineCnName = this.assemblyForm.lineCnName // 航线中文名称
  886. row.lineEnName = this.assemblyForm.lineEnName // 航线英文名称
  887. row.vesselId = this.assemblyForm.vesselId // 船名 id
  888. row.vesselCnName = this.assemblyForm.vesselCnName // 中文船名
  889. row.vesselEnName = this.assemblyForm.vesselEnName // 英文船名
  890. row.voyageNo = this.assemblyForm.voyageNo // 航次
  891. row.mblno = this.assemblyForm.mblno // MB/L NO
  892. row.hblno = this.assemblyForm.hblno // HB/L NO
  893. row.etd = this.assemblyForm.etd // 开船日期
  894. row.eta = this.assemblyForm.eta // 到港日期
  895. row.polId = this.assemblyForm.polId // 装货港 id
  896. row.polCode = this.assemblyForm.polCode // 装货港代码
  897. row.polCnName = this.assemblyForm.polCnName // 装货港中文名称
  898. row.polEnName = this.assemblyForm.polEnName // 装货港英文名称
  899. row.podId = this.assemblyForm.podId // 卸货港 id
  900. row.podCode = this.assemblyForm.podCode // 卸货港代码
  901. row.podCnName = this.assemblyForm.podCnName // 卸货港中文名称
  902. row.podEnName = this.assemblyForm.podEnName // 卸货港英文名称
  903. this.feecenterSubmitfun(row)
  904. },
  905. // 多选删除
  906. handleSelectionChange(list,dc){
  907. if (dc == 'D') {
  908. this.selectionDList = list
  909. }else {
  910. this.selectionCList = list
  911. }
  912. },
  913. // 批量删除
  914. batchDelete(dc){
  915. let arr = []
  916. if (dc == 'D') {
  917. arr = this.selectionDList.map(item=>{
  918. return item.id
  919. })
  920. }else {
  921. arr = this.selectionCList.map(item=>{
  922. return item.id
  923. })
  924. }
  925. this.deletefun({id:arr.join(',')})
  926. },
  927. // 应收删除
  928. deletefun(row,index,dc) {
  929. this.$confirm("确定将选择数据删除?", {
  930. confirmButtonText: "确定",
  931. cancelButtonText: "取消",
  932. type: "warning"
  933. }).then(()=>{
  934. if (row.id) {
  935. // 删除接口
  936. feecenterRemove(row.id).then(res=>{
  937. this.$message({
  938. type: "success",
  939. message: "操作成功!"
  940. });
  941. this.$emit('billsDetailfun')
  942. })
  943. }else {
  944. if(dc == 'D') {
  945. this.assemblyForm.feeCenterListD.splice(index, 1)
  946. }else {
  947. this.assemblyForm.feeCenterListC.splice(index, 1)
  948. }
  949. }
  950. })
  951. },
  952. // 客户的回调
  953. corpChange(value,name,row) {
  954. if (name == 'corpCnName') {
  955. for(let item of this.corpCnNameData) {
  956. if (item.cnName == value){
  957. this.$set(row,'corpCnName',item.cnName)
  958. this.$set(row,'corpEnName',item.enName)
  959. this.$set(row,'corpId',item.id)
  960. }
  961. }
  962. }else if (name == 'feeCnName') {
  963. for(let item of this.feeCnNameData) {
  964. if (item.cnName == value){
  965. this.$set(row,'feeCnName',item.cnName)
  966. this.$set(row,'feeEnName',item.enName)
  967. this.$set(row,'feeId',item.id)
  968. this.$set(row,'feeCode',item.code)
  969. }
  970. }
  971. }else if (name == 'curCode') {
  972. for(let item of this.curCodeData) {
  973. if (item.code == value){
  974. this.$set(row,'curCode',item.code)
  975. this.$set(row,'exrate',item.exrate)
  976. if (row.curCode == 'CNY') {
  977. this.$set(row,'rmbAmount',row.amount)
  978. this.$set(row,'usdAmount','')
  979. }else {
  980. this.$set(row,'usdAmount',row.amount)
  981. this.$set(row,'rmbAmount','')
  982. }
  983. }
  984. }
  985. } else {
  986. this.$set(row,name,value)
  987. }
  988. },
  989. // 单价
  990. priceinputfun(value,row){
  991. if (Number(value) <= 0) {
  992. this.$message({
  993. type: "warning",
  994. message: "单价不能输入负数!"
  995. });
  996. return
  997. }
  998. this.$set(row,'amount',Number(row.price) * Number(row.quantity?row.quantity:0))
  999. // 判断是否有币种
  1000. if (!row.curCode) {
  1001. return;
  1002. }
  1003. if (row.curCode == 'CNY') {
  1004. this.$set(row,'rmbAmount',row.amount)
  1005. this.$set(row,'usdAmount','')
  1006. }else {
  1007. this.$set(row,'usdAmount',row.amount)
  1008. this.$set(row,'rmbAmount','')
  1009. }
  1010. },
  1011. // 数量
  1012. quantityinputfun(row) {
  1013. if (row.quantity <= 0) {
  1014. this.$message({
  1015. type: "warning",
  1016. message: "数量不能输入负数!"
  1017. });
  1018. return
  1019. }
  1020. this.$set(row,'amount',Number(row.price?row.price:0) * Number(row.quantity))
  1021. // 判断是否有币种
  1022. if (!row.curCode) {
  1023. return;
  1024. }
  1025. if (row.curCode == 'CNY') {
  1026. this.$set(row,'rmbAmount',row.amount)
  1027. this.$set(row,'usdAmount','')
  1028. }else {
  1029. this.$set(row,'usdAmount',row.amount)
  1030. this.$set(row,'rmbAmount','')
  1031. }
  1032. },
  1033. // 保存接口
  1034. feecenterSubmitfun(row){
  1035. feecenterSubmit(row).then(res=>{
  1036. this.$message({
  1037. type: "success",
  1038. message: "操作成功!"
  1039. });
  1040. this.$emit('billsDetailfun')
  1041. })
  1042. },
  1043. // 获取客户数据
  1044. getBcorpsListfun(cnName){
  1045. getBcorpsList(1,10,{cnName}).then(res=>{
  1046. this.corpCnNameData = res.data.data.records
  1047. })
  1048. },
  1049. // 获取费用数据
  1050. bfeesListfun(cnName){
  1051. bfeesList(1,10,{cnName}).then(res=>{
  1052. this.feeCnNameData = res.data.data.records
  1053. })
  1054. },
  1055. // 获取计算属性
  1056. getBunitsPagefun(){
  1057. let srcBillId = null
  1058. if (this.assemblyForm.billType == 'MH') {
  1059. srcBillId = this.assemblyForm.masterId
  1060. }else {
  1061. srcBillId = this.assemblyForm.id
  1062. }
  1063. getBunitsPage({srcBillId}).then(res=>{
  1064. this.unitNoData = res.data.data.records
  1065. })
  1066. },
  1067. // 获取币别数据
  1068. getRateListfun(cnName){
  1069. getRateList({current:1,size:10,cnName}).then(res=>{
  1070. console.log(res.data.data,1013)
  1071. this.curCodeData = res.data.data.records
  1072. })
  1073. },
  1074. // 获取签单方式字典数据
  1075. getWorkDictsfun(){
  1076. getWorkDicts('issue_type_F').then(res=>{
  1077. this.issuetypefData = res.data.data
  1078. })
  1079. },
  1080. // 预付到付货物显示值
  1081. paymodefun(value){
  1082. for(let item of this.paymodeData) {
  1083. if (item.value == value) {
  1084. return item.label
  1085. }
  1086. }
  1087. },
  1088. // 表头样式
  1089. tableHeaderCellStyle({row,column,rowIndex, columnIndex}){
  1090. return "padding:4px 0px;fontSize:12px;color:#000;background:#ecf5ff"
  1091. },
  1092. // 关闭弹窗
  1093. handleClose(done) {
  1094. this.$confirm('确认关闭?')
  1095. .then(_ => {
  1096. done();
  1097. })
  1098. .catch(_ => {});
  1099. }
  1100. },
  1101. }
  1102. </script>
  1103. <style scoped lang="scss">
  1104. .disabledBox {
  1105. display: flex;
  1106. align-items: center;
  1107. }
  1108. .fontSize {
  1109. font-size: 16px;
  1110. color: #81B337;
  1111. }
  1112. .meetSize {
  1113. font-size: 16px;
  1114. color: #54BCBD;
  1115. }
  1116. .bottomFlex {
  1117. display: flex;
  1118. align-items: center;
  1119. }
  1120. .weightfont {
  1121. font-size: 20px;
  1122. font-weight: bold;
  1123. }
  1124. .weightnum {
  1125. font-size: 15px;
  1126. font-weight: 500;
  1127. }
  1128. .fontText {
  1129. font-size: 16px;
  1130. font-weight: 500;
  1131. margin: 3px 0;
  1132. }
  1133. ::v-deep.el-form-item {
  1134. margin-bottom: 0px;
  1135. }
  1136. // 去掉弹框内容的默认padding值
  1137. /deep/.el-dialog .el-dialog__body {
  1138. padding: 0px 20px;
  1139. }
  1140. </style>