amendsDetails.vue 71 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543
  1. <template>
  2. <div class="borderless" v-loading="pageLoading">
  3. <div class="customer-head">
  4. <div class="customer-back">
  5. <el-button type="danger" style="border: none;background: none;color: red" icon="el-icon-arrow-left"
  6. @click="backToList">返回列表
  7. </el-button>
  8. </div>
  9. <div class="add-customer-btn">
  10. <el-button size="small" style="margin-right: 8px" :loading="saveLoading" :disabled="!form.id"
  11. @click="previewreportfun">预 览
  12. </el-button>
  13. <el-button size="small" style="margin-right: 8px"
  14. v-if="roleName.indexOf('admin') != -1 ? true : roleName.indexOf('报表管理') != -1 ? true : false"
  15. :loading="saveLoading" :disabled="!form.id" @click="DesignreportDialog = true">报表设计
  16. </el-button>
  17. <el-button size="small" type="success" style="margin-right: 8px"
  18. v-if="form.status == 0 || form.status == 4" :disabled="!form.id || editPower" :loading="saveLoading"
  19. @click="submitforApproval">提交请核
  20. </el-button>
  21. <el-button size="small" type="warning" plain v-if="form.status == 1" :disabled="!form.id || editPower"
  22. :loading="saveLoading" @click="revokepleaseReview">撤销请核
  23. </el-button>
  24. <span v-if="form.status == 2" style="font-size: 14px;margin-right: 10px;">审核中</span>
  25. <span v-if="form.status == 3" style="font-size: 12px;margin-right: 10px;">审核通过</span>
  26. <el-button size="small" type="primary" style="margin-right: 8px" :disabled="buttonDisable"
  27. :loading="saveLoading" @click="amendsSubmitfun">保 存
  28. </el-button>
  29. </div>
  30. </div>
  31. <div style="margin: 55px 5px 0px 5px;'">
  32. <el-card class="box-card">
  33. <el-form :model="form" ref="form" label-width="90px" class="demo-ruleForm" :rules="rules">
  34. <el-row>
  35. <el-col :span="5">
  36. <el-form-item label="原M B/L NO" prop="mblno">
  37. <el-input style="width: 100%;" v-model="form.mblno" :disabled="buttonDisable"
  38. size="small" autocomplete="off" clearable placeholder="请输入原M B/L NO">
  39. </el-input>
  40. </el-form-item>
  41. </el-col>
  42. <el-col :span="5">
  43. <el-form-item label="原H B/L NO" prop="hblno">
  44. <el-input style="width: 100%;" v-model="form.hblno" :disabled="buttonDisable"
  45. size="small" autocomplete="off" clearable placeholder="请输入原H B/L NO">
  46. </el-input>
  47. </el-form-item>
  48. </el-col>
  49. <el-col :span="5">
  50. <el-form-item label="原外提单号" prop="refno">
  51. <el-input style="width: 100%;" v-model="form.refno" :disabled="buttonDisable"
  52. size="small" autocomplete="off" clearable placeholder="请输入原外提单号">
  53. </el-input>
  54. </el-form-item>
  55. </el-col>
  56. <el-col :span="5">
  57. <el-form-item label="BOOKINGNO" prop="bookingNo">
  58. <el-input style="width: 100%;" v-model="form.bookingNo" :disabled="buttonDisable"
  59. size="small" autocomplete="off" clearable placeholder="请输入BOOKINGNO">
  60. </el-input>
  61. </el-form-item>
  62. </el-col>
  63. <el-col :span="4">
  64. <el-form-item label="AMEND原因" prop="responsibleParty">
  65. <search-query :datalist="responsiblePartyData" :selectValue="form.responsibleParty"
  66. :filterable="true" :disabled="buttonDisable" :clearable="true" :buttonIf="false"
  67. placeholder="请选择AMEND原因"
  68. :forParameter="{ key: 'dictKey', label: 'dictValue', value: 'dictKey' }"
  69. @corpChange="corpChange($event, 'responsibleParty')" @corpFocus="amendReasonfun">
  70. </search-query>
  71. </el-form-item>
  72. </el-col>
  73. <el-col :span="10">
  74. <el-col :span="15">
  75. <el-form-item label="客户名称" prop="corpCnName">
  76. <el-input style="width: 100%;" v-model="form.corpCnName" size="small"
  77. autocomplete="off" :disabled="true" clearable placeholder="客户名称">
  78. </el-input>
  79. </el-form-item>
  80. </el-col>
  81. <el-col :span="9">
  82. <el-form-item label="" prop="corpEnName" label-width="5px">
  83. <el-input style="width: 100%;" v-model="form.corpEnName" size="small"
  84. autocomplete="off" :disabled="true" clearable placeholder="客户名称">
  85. </el-input>
  86. </el-form-item>
  87. </el-col>
  88. </el-col>
  89. <el-col :span="5">
  90. <el-form-item label="业务类型" prop="businessType">
  91. <search-query :datalist="origSeaTypeData" :selectValue="form.origSeaType"
  92. :filterable="true" :disabled="true" :clearable="true" :buttonIf="false"
  93. placeholder="业务类型">
  94. </search-query>
  95. </el-form-item>
  96. </el-col>
  97. <el-col :span="5">
  98. <el-form-item label="原业务编号" prop="billNo">
  99. <el-input style="width: 100%;" v-model="form.origBillNo" size="small" autocomplete="off"
  100. :disabled="true" clearable placeholder="原业务编号">
  101. </el-input>
  102. </el-form-item>
  103. </el-col>
  104. <el-col :span="4">
  105. <el-form-item label="账单日期" prop="createTime">
  106. <el-date-picker v-model="form.createTime" :clearable="false" style="width: 100%;"
  107. type="date" size="small" value-format="yyyy-MM-dd HH:mm:ss"
  108. :disabled="buttonDisable" placeholder="选择账单日期">
  109. </el-date-picker>
  110. </el-form-item>
  111. </el-col>
  112. <el-col :span="5">
  113. <el-form-item label="船名" prop="vesselCnName">
  114. <el-input style="width: 100%;" v-model="form.vesselCnName" size="small"
  115. autocomplete="off" :disabled="true" clearable placeholder="船名">
  116. </el-input>
  117. </el-form-item>
  118. </el-col>
  119. <el-col :span="5">
  120. <el-form-item label="航次" prop="voyageNo">
  121. <el-input style="width: 100%;" v-model="form.voyageNo" size="small" autocomplete="off"
  122. :disabled="true" clearable placeholder="航次">
  123. </el-input>
  124. </el-form-item>
  125. </el-col>
  126. <el-col :span="5">
  127. <el-form-item label="ETD" prop="etd">
  128. <el-input style="width: 100%;" v-model="form.etd" size="small" autocomplete="off"
  129. :disabled="true" clearable placeholder="ETD">
  130. </el-input>
  131. </el-form-item>
  132. </el-col>
  133. <el-col :span="5">
  134. <el-form-item label="ETA" prop="eta">
  135. <el-input style="width: 100%;" v-model="form.eta" size="small" autocomplete="off"
  136. :disabled="true" clearable placeholder="ETA">
  137. </el-input>
  138. </el-form-item>
  139. </el-col>
  140. <el-col :span="4">
  141. <el-form-item label="业务编号" prop="billNo">
  142. <el-input style="width: 100%;" v-model="form.billNo" size="small" autocomplete="off"
  143. :disabled="true" clearable placeholder="业务编号">
  144. </el-input>
  145. </el-form-item>
  146. </el-col>
  147. <el-col :span="5">
  148. <el-form-item label="件数" prop="quantity">
  149. <el-input style="width: 100%;" v-model="form.quantity" size="small" autocomplete="off"
  150. :disabled="true" clearable placeholder="件数">
  151. </el-input>
  152. </el-form-item>
  153. </el-col>
  154. <el-col :span="5">
  155. <el-form-item label="毛重" prop="grossWeight">
  156. <el-input style="width: 100%;" v-model="form.grossWeight" size="small"
  157. autocomplete="off" :disabled="true" clearable placeholder="毛重">
  158. </el-input>
  159. </el-form-item>
  160. </el-col>
  161. <el-col :span="5">
  162. <el-form-item label="尺码" prop="measurement">
  163. <el-input style="width: 100%;" v-model="form.measurement" size="small"
  164. autocomplete="off" :disabled="true" clearable placeholder="尺码">
  165. </el-input>
  166. </el-form-item>
  167. </el-col>
  168. <el-col :span="9">
  169. <el-form-item label="箱型箱量" prop="quantityCntrDescr">
  170. <el-input style="width: 100%;" v-model="form.quantityCntrDescr" size="small"
  171. autocomplete="off" :disabled="true" clearable placeholder="箱型箱量">
  172. </el-input>
  173. </el-form-item>
  174. </el-col>
  175. <el-col :span="5">
  176. <el-form-item label="业务部门" prop="createDeptName">
  177. <el-input style="width: 100%;" v-model="form.createDeptName" size="small"
  178. autocomplete="off" :disabled="true" clearable placeholder="业务部门">
  179. </el-input>
  180. </el-form-item>
  181. </el-col>
  182. <el-col :span="10">
  183. <el-form-item label="原业务备注" prop="origRemarks">
  184. <el-input style="width: 100%;" v-model="form.origRemarks" type="textarea" size="small"
  185. autocomplete="off" :disabled="true" clearable placeholder="原业务备注">
  186. </el-input>
  187. </el-form-item>
  188. </el-col>
  189. <el-col :span="8">
  190. <el-form-item label="备注" prop="remarks">
  191. <el-input style="width: 100%;" v-model="form.remarks" type="textarea" size="small"
  192. autocomplete="off" clearable placeholder="请输入备注">
  193. </el-input>
  194. </el-form-item>
  195. </el-col>
  196. <el-col :offset="18" :span="6">
  197. <el-form-item label-width="50px">
  198. <el-button size="small" type="warning" style="margin-right: 8px" :disabled="form.id"
  199. :loading="saveLoading" @click="emptyConditionfun">一键清空
  200. </el-button>
  201. <el-button size="small" type="primary" style="margin-right: 8px" :disabled="form.id"
  202. :loading="saveLoading" @click="retrievalfun">提取原业务信息
  203. </el-button>
  204. </el-form-item>
  205. </el-col>
  206. </el-row>
  207. </el-form>
  208. </el-card>
  209. <el-card style="margin-top: 10px"
  210. v-if="roleName.indexOf('admin') != -1 || roleName.indexOf('应收修改') != -1 || roleName.indexOf('应收查看') != -1 || roleName.indexOf('应付修改') != -1 || roleName.indexOf('应付查看') != -1">
  211. <amends-costdetails :disabled="buttonDisable" :tableData="form.feeCenterList" :form="form"
  212. :dcDisabled="dcDisabled" @addfun="addTablefun" @oneclickEditingfun="oneclickEditingfun"
  213. @printingCostsfun="printingCostsfun" @amendsDetailfun="amendsDetailfun(form.id)">
  214. </amends-costdetails>
  215. </el-card>
  216. <el-card style="margin-top: 10px">
  217. <!--<div style="font-size: 12px;margin-bottom: 5px">已生成账单费用:</div>-->
  218. <div v-if="roleName.indexOf('admin') != -1 || roleName.indexOf('应收修改') != -1 ? true : roleName.indexOf('应收查看') != -1"
  219. style="margin-bottom: 5px;">
  220. <div>
  221. <div style="display: inline-block;margin-right: 20px" class="disabledBox fontSize">
  222. <i class="el-icon-coin"></i>
  223. <span>应收费用</span>
  224. </div>
  225. <el-button v-if="roleName.indexOf('admin') != -1 || roleName.indexOf('应收修改') != -1"
  226. type="primary" plain size="small" :disabled="buttonDisable"
  227. @click="upwardAddfun('D')">生成amend费用
  228. </el-button>
  229. </div>
  230. <billgenerated :tableData="this.form.feeCenterListD" :handleSelectionData="multipleChoiceDArr"
  231. @handleSelectionChange="handleSelectionChange($event, 'D')"></billgenerated>
  232. </div>
  233. <div v-if="roleName.indexOf('admin') != -1 || roleName.indexOf('应付修改') != -1 ? true : roleName.indexOf('应付查看') != -1"
  234. style="margin-bottom: 5px;">
  235. <div>
  236. <div style="display: inline-block;margin-right: 20px" class="disabledBox meetSize">
  237. <i class="el-icon-coin"></i>
  238. <span>应付费用</span>
  239. </div>
  240. <el-button v-if="roleName.indexOf('admin') != -1 || roleName.indexOf('应付修改') != -1"
  241. type="primary" plain size="small" :disabled="buttonDisable"
  242. @click="upwardAddfun('C')">生成amend费用
  243. </el-button>
  244. </div>
  245. <billgenerated :tableData="this.form.feeCenterListC" :handleSelectionData="multipleChoiceCArr"
  246. @handleSelectionChange="handleSelectionChange($event, 'C')"></billgenerated>
  247. </div>
  248. </el-card>
  249. </div>
  250. <!--模板弹窗-->
  251. <el-dialog title="选择数据" class="el-dialogDeep" :visible.sync="retrievePopupsType" append-to-body width="70%"
  252. :close-on-click-modal="false">
  253. <div>
  254. <avue-crud :option="retrievePopupsOption" :data="retrievePopupsData" ref="retrievePopupsRef"
  255. id="out-table" :header-cell-class-name="headerClassName">
  256. <template slot="menu" slot-scope="{ row }">
  257. <el-button type="text" icon="" size="small" @click.stop="retrievePopupsSelect(row)">选择
  258. </el-button>
  259. </template>
  260. </avue-crud>
  261. </div>
  262. </el-dialog>
  263. <!--设计报表弹窗-->
  264. <el-dialog append-to-body title="设计报表" class="el-dialogDeep" :visible.sync="DesignreportDialog" width="70%"
  265. :close-on-click-modal="false" :destroy-on-close="true" :close-on-press-escape="false" v-dialog-drag>
  266. <reports :id="form.id" :assemblyForm="form" groupCode="SE" businessValue="AMEND" classifyCode="AMENDSE">
  267. </reports>
  268. </el-dialog>
  269. <!--往来单位弹窗-->
  270. <el-dialog title="打印" :visible.sync="printingDialog" append-to-body width="70%" :close-on-click-modal="false"
  271. :before-close="handleClose">
  272. <div>
  273. <el-row :gutter="10">
  274. <el-col :span="4">
  275. <avue-tree ref="treeRef" :option="reportOption" :data="reportTypeData"
  276. @node-click="reportNodeClick"></avue-tree>
  277. </el-col>
  278. <el-col :span="20">
  279. <avue-crud :option="optionPrinting" :table-loading="printingLoading" :data="PrintingData"
  280. id="out-table" :header-cell-class-name="headerClassName" :row-style="{ height: '20px' }"
  281. :cell-style="{ padding: '0px' }">
  282. <template slot-scope="scope" slot="menu">
  283. <el-button type="text" size="small"
  284. @click="dialogPreviewfun(scope.row)">打印预览</el-button>
  285. </template>
  286. </avue-crud>
  287. </el-col>
  288. </el-row>
  289. </div>
  290. <span slot="footer" class="dialog-footer">
  291. <el-button size="small" @click="printingDialog = false;">取 消</el-button>
  292. </span>
  293. </el-dialog>
  294. <!--预览-->
  295. <el-dialog title="打印" :visible.sync="selectPrintingDialog" append-to-body width="70%"
  296. :close-on-click-modal="false" :destroy-on-close="true" :close-on-press-escape="false" v-dialog-drag>
  297. <div>
  298. <reportformsList ref="reportformsList" @reportRadio="reportRadio"></reportformsList>
  299. </div>
  300. <span slot="footer" class="dialog-footer">
  301. <el-button size="small" @click="selectPrintingDialog = false;">取 消</el-button>
  302. </span>
  303. </el-dialog>
  304. <!--费用打印-->
  305. <reportContainer ref="reportContainer"></reportContainer>
  306. </div>
  307. </template>
  308. <script>
  309. import SearchQuery from "@/components/iosbasic-data/searchquery.vue";
  310. import amendsCostdetails from "@/views/iosBasicData/seamends/assembly/amendsCostdetails.vue";
  311. import billgenerated from "@/views/iosBasicData/seamends/assembly/billgenerated.vue";
  312. import { billsGetDetail } from "@/api/iosBasicData/bills";
  313. import { dateFormat } from "@/util/date";
  314. import { amendsSubmit, amendsDetail, amendsCheckAmends, amendsRevokeCheckAmends } from "@/api/iosBasicData/amends";
  315. import { getWorkDicts } from "@/api/system/dictbiz";
  316. import reports from "@/views/iosBasicData/SeafreightExportF/bills/assembly/reports.vue";
  317. import { getList as reportsList } from "@/api/iosBasicData/reports";
  318. import {
  319. getFeeCenterCorpIds
  320. } from "@/api/iosBasicData/feecenter";
  321. import { getList as userGetList } from '@/api/system/user'
  322. import TreeSelect from "@/components/iosbasic-data/TreeSelect.vue";
  323. import { reportsGetReportData } from "@/api/iosBasicData/reports";
  324. import reportContainer from "@/views/iosBasicData/report-container/report-container.vue";
  325. import reportformsList from "@/views/iosBasicData/SeafreightExportF/bills/assembly/reportformsList.vue";
  326. import { getList as getreportsList } from "@/api/iosBasicData/reports";
  327. import { contrastObj, contrastList } from "@/util/contrastData";
  328. export default {
  329. components: { reportformsList, reportContainer, TreeSelect, reports, SearchQuery, amendsCostdetails, billgenerated },
  330. data() {
  331. return {
  332. retrievePopupsType: false, // 检索完的弹窗
  333. retrievePopupsData: [], // 检索完的弹窗数据
  334. retrievePopupsOption: {
  335. border: true,
  336. calcHeight: 30,
  337. tip: false,
  338. height: 'auto',
  339. index: true,
  340. addBtn: false,
  341. viewBtn: false,
  342. delBtn: false,
  343. editBtn: false,
  344. refreshBtn: false,
  345. columnBtn: false,
  346. menuWidth: '60',
  347. column: [
  348. {
  349. label: "单据类型",
  350. prop: "billType",
  351. type: 'select',
  352. dicData: [{
  353. label: '直单',
  354. value: 'DD'
  355. }, {
  356. label: '主单',
  357. value: 'MM'
  358. }, {
  359. label: '分单',
  360. value: 'MH'
  361. }],
  362. overHidden: true,
  363. },
  364. {
  365. label: "单据编号",
  366. prop: "billNo",
  367. width: "120",
  368. overHidden: true,
  369. },
  370. {
  371. label: "客户名",
  372. prop: "corpCnName",
  373. width: "140",
  374. overHidden: true,
  375. },
  376. {
  377. label: "MB/L NO",
  378. prop: "mblno",
  379. width: "80",
  380. overHidden: true,
  381. },
  382. {
  383. label: "HB/L NO",
  384. prop: "hblno",
  385. width: "80",
  386. overHidden: true,
  387. },
  388. {
  389. label: "BOOKING NO",
  390. prop: "bookingNo",
  391. width: "120",
  392. overHidden: true,
  393. },
  394. {
  395. label: "船名",
  396. prop: "vesselCnName",
  397. overHidden: true,
  398. },
  399. {
  400. label: "航次",
  401. prop: "voyageNo",
  402. width: "80",
  403. overHidden: true,
  404. },
  405. {
  406. label: "开船日期",
  407. prop: "etd",
  408. type: "date",
  409. unlinkPanels: true,
  410. searchRange: true,
  411. overHidden: true,
  412. forma: "yyyy-MM-dd",
  413. valueFormat: "yyyy-MM-dd HH:mm:ss",
  414. searchDefaultTime: ["00:00:00", "23:59:59"],
  415. },
  416. ]
  417. },
  418. rules: {
  419. createTime: [{
  420. required: true,
  421. message: ' ',
  422. trigger: 'change'
  423. }],
  424. responsibleParty: [{
  425. required: true,
  426. message: ' ',
  427. trigger: 'change'
  428. }],
  429. },
  430. pageLoading: false, // 全屏加载动画
  431. saveLoading: false, // 按钮加载动画
  432. // 选择的数据
  433. form: {
  434. // operatorName: JSON.parse(localStorage.getItem('saber-userInfo')).content.user_name, // OP 默认登录人
  435. // operatorId: JSON.parse(localStorage.getItem('saber-userInfo')).content.user_id, // OP 默认登录人
  436. createTime: dateFormat(new Date(), "yyyy-MM-dd") + ' 00:00:00', // 制单日期 默认 当天,
  437. feeCenterListD: [],
  438. feeCenterListC: [],
  439. feeCenterList: []
  440. },
  441. oldForm: {
  442. // operatorName: JSON.parse(localStorage.getItem('saber-userInfo')).content.user_name, // OP 默认登录人
  443. // operatorId: JSON.parse(localStorage.getItem('saber-userInfo')).content.user_id, // OP 默认登录人
  444. createTime: dateFormat(new Date(), "yyyy-MM-dd") + ' 00:00:00', // 制单日期 默认 当天,
  445. feeCenterListD: [],
  446. feeCenterListC: [],
  447. feeCenterList: []
  448. },
  449. // 业务类型 数据
  450. origSeaTypeData: [
  451. {
  452. label: '出口',
  453. value: 'E'
  454. },
  455. {
  456. label: '进口',
  457. value: 'I'
  458. }
  459. ],
  460. responsiblePartyData: [], // AMEND 原因
  461. multipleChoiceDArr: [], // 应收多选
  462. multipleChoiceCArr: [], // 应付多选
  463. roleName: [], // 当前的角色权限
  464. buttonDisable: false, // 按钮的是否禁用
  465. editPower: false, // 是否有权限编辑
  466. DesignreportDialog: false, // 设计报表弹窗
  467. printingDialog: false, // 打印弹窗
  468. reportOption: {
  469. nodeKey: "id",
  470. addBtn: false,
  471. menu: false,
  472. size: "small",
  473. props: {
  474. labelText: "标题",
  475. label: "cnName",
  476. value: "value",
  477. children: "children"
  478. }
  479. },
  480. reportTypeData: [], // 打印获取的数据
  481. reportformsObj: [], // 打印选择的数据
  482. PrintingData: [], // 打印的列表数据
  483. printingLoading: false, // 打印弹窗加载动画
  484. optionPrinting: {
  485. stripe: true,
  486. maxHeight: '250',
  487. calcHeight: 30,
  488. tip: false,
  489. searchShow: true,
  490. searchMenuSpan: 6,
  491. border: true,
  492. selection: true,
  493. dialogClickModal: false,
  494. refreshBtn: false,
  495. columnBtn: false,
  496. addBtn: false,
  497. viewBtn: false,
  498. delBtn: false,
  499. editBtn: false,
  500. menuWidth: '100',
  501. column: [
  502. {
  503. label: "币别",
  504. prop: "curCode",
  505. width: 100,
  506. cell: true,
  507. type: 'select',
  508. dicData: [{
  509. label: '全部',
  510. value: null
  511. }, {
  512. label: 'USD',
  513. value: 'USD'
  514. }, {
  515. label: 'CNY',
  516. value: 'CNY'
  517. }],
  518. overHidden: true,
  519. },
  520. {
  521. label: "客户名称",
  522. prop: "cnName",
  523. overHidden: true,
  524. },
  525. {
  526. label: "客户编号",
  527. prop: "code",
  528. overHidden: true,
  529. },
  530. ]
  531. },
  532. selectPrintingDialog: false, // 预览弹窗
  533. dcDisabled: false, // dc列是否禁用
  534. saberUserInfo: {}, // 当前登录人信息
  535. }
  536. },
  537. watch: {
  538. "form.status": {
  539. // 执行方法
  540. handler(oldValue, newValue) {
  541. // 0 = 新建 1=审核提交 2=审核中 3= 审核通过 4=审核驳回
  542. if (oldValue == 1 || oldValue == 2 || oldValue == 3) {
  543. this.buttonDisable = true
  544. } else {
  545. if (this.roleName.indexOf('admin') == -1 ? this.roleName.indexOf('允许修改他人业务') == -1 ? this.saberUserInfo.user_id != this.form.createUser : false : false) {
  546. this.buttonDisable = true
  547. this.editPower = true
  548. } else {
  549. this.buttonDisable = false
  550. }
  551. }
  552. },
  553. deep: false, // 深度监听
  554. immediate: false // 第一次改变就执行
  555. },
  556. },
  557. created() {
  558. this.roleName = localStorage.getItem('roleName').split(',')
  559. // 获取当前登录人个人信息
  560. this.saberUserInfo = JSON.parse(localStorage.getItem('saber-userInfo')).content
  561. // if (!this.form.id) {
  562. // this.userGetListfun() // 获取用户管理数据
  563. // }
  564. },
  565. methods: {
  566. // 获取用户管理数据
  567. userGetListfun(account = undefined, type = false,) {
  568. console.log(this.form.operatorName)
  569. userGetList(1, 10, { account: this.form.operatorName }, JSON.parse(localStorage.getItem('saber-userInfo')).content.dept_pid.split(',')[0]).then(res => {
  570. for (let item of res.data.data.records) {
  571. if (item.name == this.form.operatorName) {
  572. this.$set(this.form, 'createDeptName', item.deptName)
  573. this.$set(this.form, 'createDept', item.deptId)
  574. }
  575. }
  576. })
  577. },
  578. // 报表预览
  579. previewreportfun() {
  580. getreportsList(1, 10, {
  581. businessType: 'AMEND',
  582. classifyCode: 'AMENDSE',
  583. groupCode: 'SE'
  584. }).then(res => {
  585. if (res.data.data.records.length == 1) {
  586. this.reportRadio(res.data.data.records[0])
  587. } else {
  588. this.saveLoading = true
  589. this.selectPrintingDialog = true
  590. this.saveLoading = false
  591. let page = {
  592. pageSize: 10,
  593. currentPage: 1,
  594. total: 0
  595. }
  596. this.$nextTick(() => {
  597. this.$refs.reportformsList.onLoad(page, {
  598. businessType: 'AMEND',
  599. classifyCode: 'AMENDSE',
  600. groupCode: 'SE'
  601. })
  602. })
  603. }
  604. })
  605. },
  606. // 打印表格选择
  607. reportNodeClick(data) {
  608. this.reportformsObj = data
  609. this.printingLoading = true
  610. this.getFeeCenterCorpIdsfun()
  611. },
  612. // 预览里的打印
  613. reportRadio(val) {
  614. // 获取报表数据
  615. reportsGetReportData({
  616. billId: this.form.id,
  617. reportCode: val.classifyCode,
  618. groupCode: val.groupCode,
  619. type: 'AMEND'
  620. }).then(res => {
  621. this.handleReportPreview(val.url, res.data.data.data)
  622. })
  623. },
  624. // 费用弹窗里的打印
  625. dialogPreviewfun(row) {
  626. if (!this.reportformsObj.id) {
  627. this.$message.warning('请选择打印类型')
  628. return;
  629. }
  630. // 获取报表数据
  631. reportsGetReportData({
  632. billId: this.form.id,
  633. reportCode: this.reportformsObj.classifyCode,
  634. groupCode: this.reportformsObj.groupCode,
  635. corpIds: row.id,
  636. curCode: row.curCode,
  637. type: 'AMEND'
  638. }).then(res => {
  639. this.handleReportPreview(this.reportformsObj.url, res.data.data.data)
  640. })
  641. },
  642. // 打印费用
  643. printingCostsfun() {
  644. // 没有多选弹窗
  645. this.printingLoading = true
  646. this.reportsListfun({
  647. classifyCode: '费用',
  648. businessType: 'HYCK',
  649. })
  650. this.printingDialog = true
  651. },
  652. // 获取打印表格数据
  653. reportsListfun(obj) {
  654. reportsList(1, 50, obj).then(res => {
  655. this.reportTypeData = res.data.data.records
  656. // 获取第一项的值
  657. this.reportformsObj = res.data.data.records[0]
  658. if (res.data.data.length != 0) {
  659. this.getFeeCenterCorpIdsfun()
  660. }
  661. })
  662. },
  663. // 获取弹窗列表数据
  664. getFeeCenterCorpIdsfun() {
  665. getFeeCenterCorpIds({
  666. billId: this.form.id,
  667. dc: this.reportformsObj.cnName == '应收' ? 'D' : 'C',
  668. type: 'AMEND'
  669. }).then(res => {
  670. this.printingLoading = false
  671. res.data.data.forEach(e => {
  672. e.$cellEdit = true
  673. e.curCode = null
  674. })
  675. this.PrintingData = res.data.data
  676. })
  677. },
  678. // 下拉回调
  679. corpChange(value, name) {
  680. this.$set(this.form, name, value)
  681. },
  682. // 获取AMEND原因字典数据
  683. amendReasonfun() {
  684. getWorkDicts('amend_reason').then(res => {
  685. this.responsiblePartyData = res.data.data
  686. })
  687. },
  688. // 添加一条
  689. addTablefun() {
  690. let obj = {
  691. paymode: 'PP',
  692. editType: true,
  693. }
  694. this.dcDisabled = false
  695. // 有应收没有应付的时候
  696. if (this.roleName.indexOf('应收修改') != -1 && this.roleName.indexOf('应付修改') == -1) {
  697. obj.dc = 'D'
  698. this.dcDisabled = true
  699. }
  700. // 有应付没有应收的时候
  701. if (this.roleName.indexOf('应付修改') != -1 && this.roleName.indexOf('应收修改') == -1) {
  702. obj.dc = 'C'
  703. this.dcDisabled = true
  704. }
  705. this.form.feeCenterList.push(obj)
  706. },
  707. // 一键编辑
  708. oneclickEditingfun() {
  709. for (let item of this.form.feeCenterList) {
  710. this.$delete(item, 'editType')
  711. this.$set(item, 'editType', true)
  712. }
  713. },
  714. // 详情数据
  715. amendsDetailfun(id) {
  716. this.pageLoading = true
  717. amendsDetail(id).then(res => {
  718. this.pageLoading = false
  719. this.form = res.data.data
  720. this.oldForm = this.deepClone(res.data.data);
  721. // 把编辑状态变成不可编辑状态
  722. for (let item of this.form.feeCenterList) {
  723. this.$delete(item, 'editType')
  724. this.$set(item, 'editType', false)
  725. }
  726. let arr = ['feeCenterList', 'feeCenterListC', 'feeCenterListD']
  727. for (let data of arr) {
  728. for (let item of this.form[data]) {
  729. if (item.curCode == 'CNY') {
  730. this.$set(item, 'rmbAmount', Number(item.amount).toFixed(2))
  731. this.$set(item, 'usdAmount', '')
  732. this.$set(item, 'rmbAmountNet', Number(item.amountNet).toFixed(2))
  733. this.$set(item, 'usdAmountNet', '')
  734. } else {
  735. this.$set(item, 'usdAmount', Number(item.amount).toFixed(2))
  736. this.$set(item, 'rmbAmount', '')
  737. this.$set(item, 'usdAmountNet', Number(item.amountNet).toFixed(2))
  738. this.$set(item, 'rmbAmountNet', '')
  739. }
  740. }
  741. }
  742. })
  743. },
  744. // 向上添加数据
  745. upwardAddfun(dc) {
  746. let arr = []
  747. if (dc == 'D') {
  748. arr = JSON.parse(JSON.stringify(this.multipleChoiceDArr)).map(item => {
  749. this.$delete(item, 'editType')
  750. this.$set(item, 'editType', true)
  751. return item
  752. })
  753. } else {
  754. arr = JSON.parse(JSON.stringify(this.multipleChoiceCArr)).map(item => {
  755. this.$delete(item, 'editType')
  756. this.$set(item, 'editType', true)
  757. return item
  758. })
  759. }
  760. for (let item of arr) {
  761. item.amendSrcItemId = item.id
  762. item.accStatus = 0
  763. delete item.id
  764. delete item.pid
  765. delete item.accAmount
  766. delete item.accBillId
  767. delete item.accBillNo
  768. delete item.accById
  769. delete item.accByName
  770. delete item.accDateaccStatus
  771. delete item.accountDate
  772. delete item.accountDay
  773. delete item.accountMonth
  774. delete item.accountYear
  775. delete item.appliedAmount
  776. delete item.appliedAmountStl
  777. delete item.appliedInvoiceAmount
  778. delete item.appliedInvoiceAmountStl
  779. delete item.applyId
  780. delete item.applyName
  781. delete item.applyTime
  782. delete item.approveTime
  783. delete item.approveTimeList
  784. delete item.approverId
  785. delete item.approverName
  786. delete item.auditStatus
  787. delete item.checkAmount
  788. delete item.checkBillId
  789. delete item.checkBillNo
  790. delete item.checkById
  791. delete item.checkByName
  792. delete item.checkDate
  793. delete item.checkStatus
  794. delete item.createDept
  795. delete item.createDeptName
  796. delete item.createTime
  797. delete item.createUser
  798. delete item.createUserName
  799. delete item.invoiceAmount
  800. delete item.invoiceAmountLoc
  801. delete item.invoiceBillId
  802. delete item.invoiceBillNo
  803. delete item.invoiceById
  804. delete item.invoiceByName
  805. delete item.invoiceCurCode
  806. delete item.invoiceDate
  807. delete item.invoiceExrate
  808. delete item.invoiceNo
  809. delete item.invoiceStatus
  810. delete item.stlAmount
  811. delete item.stlAmountLoc
  812. delete item.stlBillId
  813. delete item.stlBillNo
  814. delete item.stlById
  815. delete item.stlByName
  816. delete item.stlCurCode
  817. delete item.stlDate
  818. delete item.stlExrate
  819. delete item.stlExrateLoc
  820. delete item.stlOrgAmount
  821. delete item.stlStatus
  822. delete item.stlTtlAmount
  823. delete item.uninvoicedAmount
  824. delete item.unsettledAmount
  825. delete item.updateTime
  826. delete item.updateUser
  827. delete item.updateUserName
  828. delete item.voucherBillId
  829. delete item.voucherBillNo
  830. delete item.voucherById
  831. delete item.voucherByName
  832. delete item.voucherDate
  833. delete item.voucherNo
  834. delete item.voucherStatus
  835. this.form.feeCenterList.unshift(JSON.parse(JSON.stringify(item)))
  836. }
  837. },
  838. // 选择弹窗的数据
  839. retrievePopupsSelect(row) {
  840. this.retrievePopupsType = false
  841. this.form = row
  842. this.form.feeCenterList = []
  843. this.form.origId = row.id
  844. this.form.origBillNo = row.billNo
  845. this.form.origBillDate = row.billDate ? row.billDate.slice(0, 10) + ' 00:00:00' : null
  846. this.form.origAccountDate = row.accountDate ? row.accountDate.slice(0, 10) + ' 00:00:00' : null
  847. this.form.origSeaType = row.seaType
  848. this.form.origBillType = row.billType
  849. this.form.origRemarks = row.remarks
  850. this.form.bookingDate = row.bookingDate ? row.bookingDate.slice(0, 10) + ' 00:00:00' : null
  851. this.form.etd = row.etd ? row.etd.slice(0, 10) + ' 00:00:00' : null
  852. this.form.eta = row.eta ? row.eta.slice(0, 10) + ' 00:00:00' : null
  853. this.form.businessType = 'SEA'
  854. this.form.createTime = dateFormat(new Date(), "yyyy-MM-dd") + ' 00:00:00' // 制单日期 默认 当天,
  855. this.form.createDept=row.accDept
  856. this.form.createDeptName=row.accDeptName
  857. delete this.form.id
  858. delete this.form.status
  859. delete this.form.id
  860. // delete this.form.createUser
  861. // delete this.form.createUserName
  862. // delete this.form.createDept
  863. // delete this.form.createDeptName
  864. // delete this.form.createTime
  865. delete this.form.updateUser
  866. delete this.form.updateUserName
  867. delete this.form.updateTime
  868. delete this.form.billNo
  869. delete this.form.billDate
  870. delete this.form.remarks
  871. delete this.form.accountDate
  872. // this.form.feeCenterListC = row.feeCenterListC.map(item => {
  873. // item.accStatus = 0
  874. // // delete item.id
  875. // delete item.pid
  876. // delete item.accAmount
  877. // delete item.accBillId
  878. // delete item.accBillNo
  879. // delete item.accById
  880. // delete item.accByName
  881. // delete item.accDateaccStatus
  882. // delete item.accountDate
  883. // delete item.accountDay
  884. // delete item.accountMonth
  885. // delete item.accountYear
  886. // delete item.appliedAmount
  887. // delete item.appliedAmountStl
  888. // delete item.appliedInvoiceAmount
  889. // delete item.appliedInvoiceAmountStl
  890. // delete item.applyId
  891. // delete item.applyName
  892. // delete item.applyTime
  893. // delete item.approveTime
  894. // delete item.approveTimeList
  895. // delete item.approverId
  896. // delete item.approverName
  897. // delete item.auditStatus
  898. // delete item.checkAmount
  899. // delete item.checkBillId
  900. // delete item.checkBillNo
  901. // delete item.checkById
  902. // delete item.checkByName
  903. // delete item.checkDate
  904. // delete item.checkStatus
  905. // delete item.createDept
  906. // delete item.createDeptName
  907. // delete item.createTime
  908. // delete item.createUser
  909. // delete item.createUserName
  910. // delete item.invoiceAmount
  911. // delete item.invoiceAmountLoc
  912. // delete item.invoiceBillId
  913. // delete item.invoiceBillNo
  914. // delete item.invoiceById
  915. // delete item.invoiceByName
  916. // delete item.invoiceCurCode
  917. // delete item.invoiceDate
  918. // delete item.invoiceExrate
  919. // delete item.invoiceNo
  920. // delete item.invoiceStatus
  921. // delete item.stlAmount
  922. // delete item.stlAmountLoc
  923. // delete item.stlBillId
  924. // delete item.stlBillNo
  925. // delete item.stlById
  926. // delete item.stlByName
  927. // delete item.stlCurCode
  928. // delete item.stlDate
  929. // delete item.stlExrate
  930. // delete item.stlExrateLoc
  931. // delete item.stlOrgAmount
  932. // delete item.stlStatus
  933. // delete item.stlTtlAmount
  934. // delete item.uninvoicedAmount
  935. // delete item.unsettledAmount
  936. // delete item.updateTime
  937. // delete item.updateUser
  938. // delete item.updateUserName
  939. // delete item.voucherBillId
  940. // delete item.voucherBillNo
  941. // delete item.voucherById
  942. // delete item.voucherByName
  943. // delete item.voucherDate
  944. // delete item.voucherNo
  945. // delete item.voucherStatus
  946. // return item
  947. // })
  948. // this.form.feeCenterListD = row.feeCenterListD.map(item => {
  949. // item.accStatus = 0
  950. // // delete item.id
  951. // delete item.pid
  952. // delete item.accAmount
  953. // delete item.accBillId
  954. // delete item.accBillNo
  955. // delete item.accById
  956. // delete item.accByName
  957. // delete item.accDateaccStatus
  958. // delete item.accountDate
  959. // delete item.accountDay
  960. // delete item.accountMonth
  961. // delete item.accountYear
  962. // delete item.appliedAmount
  963. // delete item.appliedAmountStl
  964. // delete item.appliedInvoiceAmount
  965. // delete item.appliedInvoiceAmountStl
  966. // delete item.applyId
  967. // delete item.applyName
  968. // delete item.applyTime
  969. // delete item.approveTime
  970. // delete item.approveTimeList
  971. // delete item.approverId
  972. // delete item.approverName
  973. // delete item.auditStatus
  974. // delete item.checkAmount
  975. // delete item.checkBillId
  976. // delete item.checkBillNo
  977. // delete item.checkById
  978. // delete item.checkByName
  979. // delete item.checkDate
  980. // delete item.checkStatus
  981. // delete item.createDept
  982. // delete item.createDeptName
  983. // delete item.createTime
  984. // delete item.createUser
  985. // delete item.createUserName
  986. // delete item.invoiceAmount
  987. // delete item.invoiceAmountLoc
  988. // delete item.invoiceBillId
  989. // delete item.invoiceBillNo
  990. // delete item.invoiceById
  991. // delete item.invoiceByName
  992. // delete item.invoiceCurCode
  993. // delete item.invoiceDate
  994. // delete item.invoiceExrate
  995. // delete item.invoiceNo
  996. // delete item.invoiceStatus
  997. // delete item.stlAmount
  998. // delete item.stlAmountLoc
  999. // delete item.stlBillId
  1000. // delete item.stlBillNo
  1001. // delete item.stlById
  1002. // delete item.stlByName
  1003. // delete item.stlCurCode
  1004. // delete item.stlDate
  1005. // delete item.stlExrate
  1006. // delete item.stlExrateLoc
  1007. // delete item.stlOrgAmount
  1008. // delete item.stlStatus
  1009. // delete item.stlTtlAmount
  1010. // delete item.uninvoicedAmount
  1011. // delete item.unsettledAmount
  1012. // delete item.updateTime
  1013. // delete item.updateUser
  1014. // delete item.updateUserName
  1015. // delete item.voucherBillId
  1016. // delete item.voucherBillNo
  1017. // delete item.voucherById
  1018. // delete item.voucherByName
  1019. // delete item.voucherDate
  1020. // delete item.voucherNo
  1021. // delete item.voucherStatus
  1022. // return item
  1023. // })
  1024. // 应收
  1025. for (let item of this.form.feeCenterListD) {
  1026. if (item.curCode == 'CNY') {
  1027. this.$set(item, 'rmbAmount', Number(item.amount).toFixed(2))
  1028. this.$set(item, 'usdAmount', '')
  1029. this.$set(item, 'rmbAmountNet', Number(item.amountNet).toFixed(2))
  1030. this.$set(item, 'usdAmountNet', '')
  1031. } else {
  1032. this.$set(item, 'usdAmount', Number(item.amount).toFixed(2))
  1033. this.$set(item, 'rmbAmount', '')
  1034. this.$set(item, 'usdAmountNet', Number(item.amountNet).toFixed(2))
  1035. this.$set(item, 'rmbAmountNet', '')
  1036. }
  1037. }
  1038. // 应付
  1039. for (let item of this.form.feeCenterListC) {
  1040. if (item.curCode == 'CNY') {
  1041. this.$set(item, 'rmbAmount', Number(item.amount).toFixed(2))
  1042. this.$set(item, 'usdAmount', '')
  1043. this.$set(item, 'rmbAmountNet', Number(item.amountNet).toFixed(2))
  1044. this.$set(item, 'usdAmountNet', '')
  1045. } else {
  1046. this.$set(item, 'usdAmount', Number(item.amount).toFixed(2))
  1047. this.$set(item, 'rmbAmount', '')
  1048. this.$set(item, 'usdAmountNet', Number(item.amountNet).toFixed(2))
  1049. this.$set(item, 'rmbAmountNet', '')
  1050. }
  1051. }
  1052. },
  1053. // 保存
  1054. amendsSubmitfun(status) {
  1055. // 判断是否填写 AMEND原因
  1056. if (!this.form.responsibleParty) {
  1057. return this.$message.warning('请填写AMEND原因')
  1058. }
  1059. // 判断必填项
  1060. let sum = '请输入'
  1061. for (let item of this.form.feeCenterList) {
  1062. if (!item.dc) {
  1063. sum += ` 应收序号${item.$index + 1}收/付`
  1064. }
  1065. if (!item.corpId) {
  1066. sum += ` 应收序号${item.$index + 1}往来单位`
  1067. }
  1068. if (!item.feeId) {
  1069. sum += ` 应收序号${item.$index + 1}费用简称`
  1070. }
  1071. if (!item.elementsId) {
  1072. sum += ` 应收序号${item.$index + 1}核算要素`
  1073. }
  1074. if (!item.curCode) {
  1075. sum += ` 应收序号${item.$index + 1}币种`
  1076. }
  1077. }
  1078. if (sum != '请输入') {
  1079. this.$confirm(sum, {
  1080. confirmButtonText: "确定",
  1081. cancelButtonText: "取消",
  1082. type: "warning"
  1083. })
  1084. return;
  1085. }
  1086. this.form.feeCenterList = this.form.feeCenterList.map((row, index) => {
  1087. row.dc = row.dc
  1088. row.pid = this.form.id
  1089. row.sort = Number(index) + 1
  1090. row.businessType = this.form.businessType // 业务类型
  1091. row.billType = this.form.origBillType // 单据类型
  1092. row.billNo = this.form.origBillNo // 单据编号
  1093. row.billDate = this.form.origBillDate // 单据日期
  1094. row.billCorpId = this.form.corpId // 主表客户 id
  1095. row.billCorpCnName = this.form.corpCnName // 主表客户中文名称
  1096. row.billCorpEnName = this.form.corpEnName // 主表客户英文名称
  1097. row.lineId = this.form.lineId // 航线 id
  1098. row.lineCnName = this.form.lineCnName // 航线中文名称
  1099. row.lineEnName = this.form.lineEnName // 航线英文名称
  1100. row.vesselId = this.form.vesselId // 船名 id
  1101. row.vesselCnName = this.form.vesselCnName // 中文船名
  1102. row.vesselEnName = this.form.vesselEnName // 英文船名
  1103. row.voyageNo = this.form.voyageNo // 航次
  1104. row.mblno = this.form.mblno // MB/L NO
  1105. row.hblno = this.form.hblno // HB/L NO
  1106. row.etd = this.form.etd // 开船日期
  1107. row.eta = this.form.eta // 到港日期
  1108. row.polId = this.form.polId // 装货港 id
  1109. row.polCode = this.form.polCode // 装货港代码
  1110. row.polCnName = this.form.polCnName // 装货港中文名称
  1111. row.polEnName = this.form.polEnName // 装货港英文名称
  1112. row.podId = this.form.podId // 卸货港 id
  1113. row.podCode = this.form.podCode // 卸货港代码
  1114. row.podCnName = this.form.podCnName // 卸货港中文名称
  1115. row.podEnName = this.form.podEnName // 卸货港英文名称
  1116. row.corpArgreementNo = this.form.corpArgreementNo // 客户约号
  1117. return row
  1118. })
  1119. this.saveLoading = true
  1120. this.form.billNoFormat = 'SEA'
  1121. this.form.businessTypeCode = 'SEA'
  1122. amendsSubmit(this.form).then(res => {
  1123. // 把费用编辑状态变成不可编辑
  1124. for (let item of this.form.feeCenterList) {
  1125. this.$delete(item, 'editType')
  1126. this.$set(item, 'editType', false)
  1127. }
  1128. this.$message({
  1129. type: "success",
  1130. message: "操作成功!"
  1131. });
  1132. if (status == 'goBack') {
  1133. this.$emit('goBack')
  1134. }
  1135. this.amendsDetailfun(res.data.data.id)
  1136. }).finally(() => {
  1137. this.saveLoading = false
  1138. })
  1139. },
  1140. // 提交请核
  1141. submitforApproval() {
  1142. if (this.form.feeCenterList == 0) {
  1143. return this.$message.warning('请添加费用详情信息')
  1144. }
  1145. this.$confirm("您确定提交请核申请吗?", {
  1146. confirmButtonText: "确定",
  1147. cancelButtonText: "取消",
  1148. type: "warning"
  1149. }).then(() => {
  1150. this.form.businessType = 'SEA'
  1151. amendsCheckAmends({
  1152. ...this.form,
  1153. url: '/iosBasicData/seamends/index',
  1154. pageStatus: 'this.$store.getters.seamendF',
  1155. pageLabel: 'SEAMEND'
  1156. }).then(res => {
  1157. this.$message({
  1158. type: "success",
  1159. message: "操作成功!"
  1160. });
  1161. this.amendsDetailfun(this.form.id)
  1162. })
  1163. })
  1164. },
  1165. // 撤销请核
  1166. revokepleaseReview() {
  1167. this.$confirm("您确定撤销请核申请吗?", {
  1168. confirmButtonText: "确定",
  1169. cancelButtonText: "取消",
  1170. type: "warning"
  1171. }).then(() => {
  1172. this.form.businessType = 'SEA'
  1173. amendsRevokeCheckAmends(this.form).then(res => {
  1174. this.$message({
  1175. type: "success",
  1176. message: "操作成功!"
  1177. });
  1178. this.amendsDetailfun(this.form.id)
  1179. })
  1180. })
  1181. },
  1182. // 清空搜索条件
  1183. emptyConditionfun() {
  1184. this.$confirm("您确定要清空搜索条件吗?", {
  1185. confirmButtonText: "确定",
  1186. cancelButtonText: "取消",
  1187. type: "warning"
  1188. }).then(res => {
  1189. this.form = {
  1190. createTime: dateFormat(new Date(), "yyyy-MM-dd") + ' 00:00:00', // 制单日期 默认 当天,
  1191. feeCenterListD: [],
  1192. feeCenterListC: [],
  1193. feeCenterList: []
  1194. }
  1195. })
  1196. },
  1197. // 检索
  1198. retrievalfun() {
  1199. // 判断是否有客户名称
  1200. if (this.form.corpCnName) {
  1201. return this.$message.warning('请先一键清空数据之后再进行提取信息')
  1202. }
  1203. if (!this.form.mblno && !this.form.hblno && !this.form.refno && !this.form.bookingNo) {
  1204. return this.$message.warning('请填写至少一项检索条件')
  1205. }
  1206. billsGetDetail({
  1207. mblno: this.form.mblno ? this.form.mblno : null,
  1208. hblno: this.form.hblno ? this.form.hblno : null,
  1209. refno: this.form.refno ? this.form.refno : null,
  1210. bookingNo: this.form.bookingNo ? this.form.bookingNo : null,
  1211. businessType: 'SE'
  1212. }).then(res => {
  1213. this.retrievePopupsData = res.data.data
  1214. if (res.data.data.length == 1) {
  1215. this.retrievePopupsSelect(this.retrievePopupsData[0])
  1216. } else {
  1217. this.retrievePopupsType = true
  1218. }
  1219. })
  1220. },
  1221. // 多选回调
  1222. handleSelectionChange(arr, dc) {
  1223. if (dc == 'D') {
  1224. this.multipleChoiceDArr = arr
  1225. } else if (dc == 'C') {
  1226. this.multipleChoiceCArr = arr
  1227. }
  1228. },
  1229. //返回列表
  1230. backToList() {
  1231. if (contrastObj(this.form, this.oldForm)
  1232. || contrastList(this.form.feeCenterListC, this.oldForm.feeCenterListC)
  1233. || contrastList(this.form.feeCenterListD, this.oldForm.feeCenterListD)
  1234. || contrastList(this.form.feeCenterList, this.oldForm.feeCenterList)
  1235. ) {
  1236. this.$confirm("数据发生变化未有提交记录, 是否提交?", "提示", {
  1237. confirmButtonText: "确定",
  1238. cancelButtonText: "取消",
  1239. type: "warning"
  1240. })
  1241. .then(() => {
  1242. this.amendsSubmitfun('goBack')
  1243. })
  1244. .catch(() => {
  1245. this.$emit('goBack')
  1246. });
  1247. } else {
  1248. this.$emit('goBack')
  1249. }
  1250. },
  1251. // 预览报表
  1252. handleReportPreview(url, data) {
  1253. console.log(url, 1670)
  1254. console.log(data, 1671)
  1255. Stimulsoft.Base.StiLicense.key = '6vJhGtLLLz2GNviWmUTrhSqnOItdDwjBylQzQcAOiHn0s4gy0Fr5YoUZ9V00Y0igCSFQzwEqYBh/N77k4f0fWXTHW5rqeBNLkaurJDenJ9o97TyqHs9HfvINK18Uwzsc/bG01Rq+x3H3Rf+g7AY92gvWmp7VA2Uxa30Q97f61siWz2dE5kdBVcCnSFzC6awE74JzDcJMj8OuxplqB1CYcpoPcOjKy1PiATlC3UsBaLEXsok1xxtRMQ283r282tkh8XQitsxtTczAJBxijuJNfziYhci2jResWXK51ygOOEbVAxmpflujkJ8oEVHkOA/CjX6bGx05pNZ6oSIu9H8deF94MyqIwcdeirCe60GbIQByQtLimfxbIZnO35X3fs/94av0ODfELqrQEpLrpU6FNeHttvlMc5UVrT4K+8lPbqR8Hq0PFWmFrbVIYSi7tAVFMMe2D1C59NWyLu3AkrD3No7YhLVh7LV0Tttr/8FrcZ8xirBPcMZCIGrRIesrHxOsZH2V8t/t0GXCnLLAWX+TNvdNXkB8cF2y9ZXf1enI064yE5dwMs2fQ0yOUG/xornE'
  1256. // Stimulsoft.Base.StiLicense.Key = '6vJhGtLLLz2GNviWmUTrhSqnOItdDwjBylQzQcAOiHkcgIvwL0jnpsDqRpWg5FI5kt2G7A0tYIcUygBh1sPs7plofUOqPB1a4HBIXJB621mau2oiAIj+ysU7gKUXfjn/D5BocmduNB+ZMiDGPxFrAp3PoD0nYNkkWh8r7gBZ1v/JZSXGE3bQDrCQCNSy6mgby+iFAMV8/PuZ1z77U+Xz3fkpbm6MYQXYp3cQooLGLUti7k1TFWrnawT0iEEDJ2iRcU9wLqn2g9UiWesEZtKwI/UmEI2T7nv5NbgV+CHguu6QU4WWzFpIgW+3LUnKCT/vCDY+ymzgycw9A9+HFSzARiPzgOaAuQYrFDpzhXV+ZeX31AxWlnzjDWqpfluygSNPtGul5gyNt2CEoJD1Yom0VN9fvRonYsMsimkFFx2AwyVpPcs+JfVBtpPbTcZscnzUdmiIvxv8Gcin6sNSibM6in/uUKFt3bVgW/XeMYa7MLGF53kvBSwi78poUDigA2n12SmghLR0AHxyEDIgZGOTbNI33GWu7ZsPBeUdGu55R8w='
  1257. Stimulsoft.Base.Localization.StiLocalization.addLocalizationFile('/reports/stimulsoft/Localization/zh-CHS.xml', true, 'zh-CHS')
  1258. Stimulsoft.Base.Localization.StiLocalization.setLocalizationFile('/reports/stimulsoft/Localization/zh-CHS.xml')
  1259. // 工具栏
  1260. var options = new Stimulsoft.Viewer.StiViewerOptions()
  1261. options.height = '100%'
  1262. options.appearance.scrollbarsMode = true // 滚动条模式
  1263. options.toolbar.showDesignButton = false // 显示设计按钮
  1264. options.toolbar.showAboutButton = false // 显示关于按钮
  1265. options.toolbar.showResourcesButton = false // 显示资源按钮
  1266. options.toolbar.showFullScreenButton = false // 显示全屏按钮
  1267. options.toolbar.showOpenButton = false // 显示打开按钮
  1268. options.appearance.showTooltips = false // 显示工具提示
  1269. options.appearance.showDialogsHelp = false // 显示对话框帮助
  1270. options.exports.showExportToDocument = false // 显示导出到文档
  1271. options.toolbar.showParametersButton = true // 显示参数按钮
  1272. options.appearance.bookmarksPrint = true // 书签打印
  1273. // options.toolbar.showPrintButton = false // 打印按钮是否显示 下面直接自定义控制打印弹窗是否开启
  1274. // printDestination 参数:用于指定报表打印的目标位置,可以是打印机、PDF 文件或者直接打印到浏览器等。
  1275. // Stimulsoft.Viewer.StiPrintDestination.Direct:表示直接打印到打印机,即将报表内容直接发送至打印机进行打印。
  1276. // 通过设置不同的 printDestination 参数,你可以控制报表打印的行为,例如是直接打印到打印机,还是生成 PDF 文件,或者直接在浏览器中预览打印内容等。
  1277. options.toolbar.printDestination = Stimulsoft.Viewer.StiPrintDestination.Direct
  1278. // htmlRenderMode html渲染模式
  1279. options.appearance.htmlRenderMode = Stimulsoft.Report.Export.StiHtmlExportMode.Table
  1280. // 是创建一个 Stimulsoft 报表查看器的实例的代码
  1281. let viewer = new Stimulsoft.Viewer.StiViewer(options, 'StiViewer', false)
  1282. // 报表
  1283. console.log("创建一个报表实例");
  1284. console.log()
  1285. let report = new window.Stimulsoft.Report.StiReport();
  1286. // 加载文件
  1287. console.log("从url加载报表");
  1288. // report.loadFile("/reports/stimulsoft/demos/SimpleList.mrt");
  1289. report.load(url)
  1290. data.pageOne = 'Page : 1 of 1'
  1291. // 处理超长数据
  1292. if (data.hshipperDetails) {
  1293. var consignerIndex2 = data.hshipperDetails.indexOf('\n')
  1294. for (let i = 0; i < 4; i++) {
  1295. consignerIndex2 = data.hshipperDetails.indexOf('\n', consignerIndex2 + 1);
  1296. }
  1297. if (consignerIndex2 != -1) {
  1298. var hshipperDetails = data.hshipperDetails.substring(consignerIndex2 + 2, data.hshipperDetails.length)
  1299. data.hshipperDetails = data.hshipperDetails.substring(0, consignerIndex2) + ' *'
  1300. data.commodityDescr += '\n*' + hshipperDetails
  1301. }
  1302. }
  1303. if (data.hconsigneeDetails) {
  1304. var consigneeIndex2 = data.hconsigneeDetails.indexOf('\n')
  1305. for (let i = 0; i < 3; i++) {
  1306. consigneeIndex2 = data.hconsigneeDetails.indexOf('\n', consigneeIndex2 + 1);
  1307. }
  1308. if (consigneeIndex2 != -1) {
  1309. var hconsigneeDetails = data.hconsigneeDetails.substring(consigneeIndex2 + 2, data.hconsigneeDetails.length)
  1310. data.hconsigneeDetails = data.hconsigneeDetails.substring(0, consigneeIndex2) + ' **'
  1311. data.commodityDescr += '\n**' + hconsigneeDetails
  1312. }
  1313. }
  1314. if (data.hnotifyDetails) {
  1315. var notifierIndex2 = data.hnotifyDetails.indexOf('\n')
  1316. for (let i = 0; i < 3; i++) {
  1317. notifierIndex2 = data.hnotifyDetails.indexOf('\n', notifierIndex2 + 1);
  1318. }
  1319. if (notifierIndex2 != -1) {
  1320. var hnotifyDetails = data.hnotifyDetails.substring(notifierIndex2 + 2, data.hnotifyDetails.length)
  1321. data.hnotifyDetails = data.hnotifyDetails.substring(0, notifierIndex2) + ' ***'
  1322. data.commodityDescr += '\n***' + hnotifyDetails
  1323. }
  1324. }
  1325. // 处理箱号
  1326. if (this.isPrintTheBoxNumber) {
  1327. data.commodityDescr += '\n.\n.\n'
  1328. }
  1329. // PLACE & DATE OF ISSUE
  1330. data.placeAndDateOfIssue = ''
  1331. if (data.issueAt) {
  1332. data.placeAndDateOfIssue += data.issueAt
  1333. }
  1334. if (data.issueDate) {
  1335. let date = new Date(data.issueDate.replace(/-/g, '/'));
  1336. let yyyy = date.getFullYear();
  1337. let mmmm = date.toDateString().split(" ")[1]
  1338. let dd = date.getDate()
  1339. data.placeAndDateOfIssue += ', ' + dd + '-' + mmmm + '-' + yyyy
  1340. }
  1341. // Total number of containers or packages received by the Carriers
  1342. if (data.preContainersList) {
  1343. let boxMap = new Map();
  1344. for (let boxQuantity of data.preContainersList) {
  1345. if (boxMap.get(boxQuantity.cntrTypeCode)) {
  1346. let v = boxMap.get(boxQuantity.cntrTypeCode)
  1347. boxMap.set(boxQuantity.cntrTypeCode, v + boxQuantity.quantity)
  1348. } else {
  1349. boxMap.set(boxQuantity.cntrTypeCode, boxQuantity.quantity)
  1350. }
  1351. }
  1352. let boxs = ''
  1353. boxMap.forEach(function (value, key, map) {
  1354. boxs += value + 'x' + key + ', '
  1355. })
  1356. boxs = boxs.substring(0, boxs.length - 2)
  1357. data.boxQuantity = boxs + ' CONTAINER(S) ONLY'
  1358. }
  1359. // Number of original B/Ls
  1360. if (data.numberOfObl) {
  1361. data.numberOfObl += ' (' + data.numberOfOblDigit + ')'
  1362. }
  1363. if (data.commodityDescr) {
  1364. var descriptionIndex2 = data.commodityDescr.indexOf('\n')
  1365. for (let i = 0; i < 19; i++) {
  1366. descriptionIndex2 = data.commodityDescr.indexOf('\n', descriptionIndex2 + 1);
  1367. }
  1368. if (descriptionIndex2 != -1) {
  1369. data.pageOne = 'Page : 1 of 2'
  1370. data.pageTwo = 'Page : 2 of 2'
  1371. var extraLongText = data.commodityDescr.substring(descriptionIndex2 + 2, data.commodityDescr.length)
  1372. data.commodityDescr = data.commodityDescr.substring(0, descriptionIndex2)
  1373. data.extraLongTips = '** TO BE CONTINUED ON ATTACHED LIST **'
  1374. data.extraLongText = extraLongText
  1375. }
  1376. }
  1377. // console.log(data.hshipperDetails, 'hshipperDetails2')
  1378. // 创建一个 Stimulsoft 数据集(DataSet)的实例的代码
  1379. var dataSet = new Stimulsoft.System.Data.DataSet(
  1380. 'reportData'
  1381. )
  1382. dataSet.readJson(data) // 用于将 JSON 格式的数据加载到数据集中。data 是包含报表数据的 JSON 对象。
  1383. // 这是一个方法调用,用于在报表中注册数据源。参数 'reportData' 是数据源的名称,
  1384. // 第二个 'reportData' 是数据源的别名,dataSet 则是之前创建的数据集实例
  1385. report.regData('reportData', 'reportData', dataSet)
  1386. // 从模版和数据加载报表
  1387. // loadReport(report, '', {})
  1388. // 这是将报表对象指定给报表查看器的属性。viewer 是报表查看器的实例,而 report 是之前创建的报表对象。
  1389. viewer.report = report;
  1390. this.$refs.reportContainer.showContainer(
  1391. () => {
  1392. setTimeout(() => {
  1393. viewer.renderHtml('reportContainer')
  1394. this.createViewerButtons(viewer)
  1395. }, 50)
  1396. },
  1397. () => {
  1398. },
  1399. )
  1400. console.log("加载成功完成!");
  1401. },
  1402. createViewerButtons(viewer) {
  1403. viewer.jsObject.collections.images['myClose.png'] =
  1404. 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAA0ElEQVQ4ja3TO05CQRQG4A8iOwAbtYWETndAaecK7NwCKmETtJZsSBNLobEz8ZFIJQ0UnOGSm3DnYviTybzO/895DQXGWGCVGQuMEqkRcwcfuMOLalziCaf4TIe9UG9nyMJmFRzNGoRK1BU4xxx9G7cfwostciGk+x8MqgySwDXe4tU53hVV+MNtTmAoX84JGv9NYgrHyR6DV8wUSW7hItZLm36ZVoVQxsFJLOMsPOrH/h7dQwR2cdxOTEn8DtUbPGc4V2H7Vb4Yqfedf/GYSGt8VUmxgyfuBAAAAABJRU5ErkJggg=='
  1405. const closeBtn = viewer.jsObject.SmallButton(
  1406. 'closeBtn',
  1407. '关闭',
  1408. 'myClose.png'
  1409. )
  1410. // 增加打印弹窗配置
  1411. const printBtn = viewer.jsObject.SmallButton(
  1412. 'printBtn',
  1413. '打印报表',
  1414. 'myClose.png'
  1415. )
  1416. // console.log(viewer.jsObject.print(),'1013')
  1417. // 获取 关闭按钮的dom元素位置
  1418. const toolbarTable = viewer.jsObject.controls.toolbar.firstChild.firstChild
  1419. const buttonsTable = toolbarTable.rows[0].lastChild.lastChild
  1420. const userButtonCell = buttonsTable.rows[0].insertCell(0)
  1421. // 获取打印按钮的位置
  1422. const buttonsTablePrint = toolbarTable.rows[0].childNodes[0].lastChild // 打印按钮
  1423. const userButtonPrint = buttonsTablePrint.rows[0].childNodes[0] // 打印按钮dom位置
  1424. userButtonPrint.addEventListener("click", (event) => {
  1425. console.log("打印点击");
  1426. // event.preventDefault()
  1427. });
  1428. userButtonPrint.addEventListener("mouseover", (event) => {
  1429. console.log("移入打印按钮");
  1430. console.log(event, 1035)
  1431. });
  1432. userButtonCell.className = 'stiJsViewerClearAllStyles'
  1433. userButtonCell.appendChild(closeBtn) // 添加关闭节点
  1434. // userButtonPrint.prepend(printBtn) // 在 printBtn 节点里最前面增加一个子级节点
  1435. let that = this
  1436. // 关闭按钮的监听点击
  1437. closeBtn.action = function () {
  1438. console.log(that.$refs.ReportContainer, '1022')
  1439. if (that.$refs.reportContainer)
  1440. that.$refs.reportContainer.hideContainer()
  1441. }
  1442. // // // 打印按钮监听
  1443. // printBtn.action = (e)=>{
  1444. // console.log('打印')
  1445. // window.print()
  1446. // }
  1447. },
  1448. // 更改表格颜色
  1449. headerClassName(tab) {
  1450. //颜色间隔
  1451. let back = "back-one"
  1452. // if (tab.columnIndex >= 0 && tab.column.level === 1) {
  1453. // if (tab.columnIndex % 2 === 0) {
  1454. // back = "back-one"
  1455. // } else if (tab.columnIndex % 2 === 1) {
  1456. // back = "back-two"
  1457. // }
  1458. // }
  1459. return back;
  1460. },
  1461. }
  1462. }
  1463. </script>
  1464. <style scoped lang="scss">
  1465. ::v-deep.el-form-item {
  1466. margin-bottom: 0;
  1467. }
  1468. .el-dialogDeep {
  1469. ::v-deep .el-dialog {
  1470. .el-dialog__body,
  1471. .el-dialog__footer {
  1472. padding-top: 0 !important;
  1473. }
  1474. }
  1475. }
  1476. ::v-deep#out-table .back-one {
  1477. background: #ecf5ff !important;
  1478. text-align: center;
  1479. }
  1480. .disabledBox {
  1481. display: flex;
  1482. align-items: center;
  1483. }
  1484. .fontSize {
  1485. font-size: 16px;
  1486. color: #81B337;
  1487. }
  1488. .meetSize {
  1489. font-size: 16px;
  1490. color: #54BCBD;
  1491. }
  1492. ::v-deep .el-card__body {
  1493. padding: 6px 20px;
  1494. }
  1495. </style>