DocumentCenter.vue 45 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949
  1. <template>
  2. <div>
  3. <el-row>
  4. <el-col :span="5">
  5. <el-scrollbar>
  6. <basic-container>
  7. <avue-tree :option="treeOption" :data="feesTypeData" @node-click="nodeClick">
  8. </avue-tree>
  9. </basic-container>
  10. </el-scrollbar>
  11. </el-col>
  12. <el-col :span="19">
  13. <basic-container>
  14. <avue-crud :option="documentOption" :table-loading="loading" :data="documentData" :page.sync="documentPage" :search.sync="documentSearch"
  15. id="out-table" :header-cell-class-name="headerClassName"
  16. :before-open="beforeOpen" ref="documentCrud" @search-change="searchChange"
  17. @search-reset="searchReset" @refresh-change="refreshChange" @on-load="reportslogListfun"
  18. @resetColumn="resetColumnTwo('documentCrud', 'documentOption', 'documentOptionBack', 312.1)"
  19. @saveColumn="saveColumnTwo('documentCrud', 'documentOption', 'documentOptionBack', 312.1)" >
  20. <template slot="menuLeft">
  21. <el-button type="primary" size="small" icon="el-icon-plus" :disabled="disabled" @click="addbtnfun()">新增
  22. </el-button>
  23. </template>
  24. <template slot-scope="scope" slot="menu">
  25. <el-button type="text" size="small" :disabled="disabled" @click="printEditing(scope.row)" >编辑</el-button>
  26. <el-button type="text" size="small" :disabled="disabled" @click="printDelete(scope.row)" >
  27. <span v-if="disabled" >删除</span>
  28. <span v-else style="color: red">删除</span>
  29. </el-button>
  30. <el-button type="text" size="small" @click="dialogPreviewfun(scope.row)">打印预览</el-button>
  31. </template>
  32. </avue-crud>
  33. </basic-container>
  34. </el-col>
  35. </el-row>
  36. <!--添加编辑弹窗-->
  37. <el-dialog :title="businesstypeData.cnName"
  38. :close-on-click-modal="false"
  39. :visible.sync="documentVisible"
  40. append-to-body
  41. width="60%"
  42. :before-close="corpTypeClose">
  43. <Dispatch-Notice v-if="businesstypeData.reportsType == 'PCTZD'" :documentForm="documentForm"></Dispatch-Notice>
  44. <Purchase-Notice v-else-if="businesstypeData.reportsType == 'RHTZ'" :documentForm="documentForm"></Purchase-Notice>
  45. <BillofLadingDetails v-else-if="businesstypeData.reportsType == 'TDXQ'||businesstypeData.reportsType == 'DCWTS'" :documentForm="documentForm"></BillofLadingDetails>
  46. <span slot="footer" class="dialog-footer">
  47. <!--<el-button type="success" @click="documentSubmit(true)" >保存并打印</el-button>-->
  48. <el-button v-if="addShow" type="success" :disabled="!documentForm.id" @click="dialogPreviewfun(editData)" >打印</el-button>
  49. <el-button @click="printingCanceling">取 消</el-button>
  50. <el-button type="primary" @click="documentSubmit(false)">保 存</el-button>
  51. </span>
  52. </el-dialog>
  53. <!--费用打印-->
  54. <reportContainer ref="reportContainer"></reportContainer>
  55. <!--打印预览弹窗-->
  56. <el-dialog append-to-body title="预览报表" class="el-dialogDeep" :visible.sync="previewDialog" width="60%"
  57. :close-on-click-modal="false" :destroy-on-close="true" :close-on-press-escape="false" v-dialog-drag :before-close="corpTypeClose">
  58. <avue-crud :option="PreviewOption"
  59. :table-loading="loading"
  60. :data="PreviewData"
  61. :page.sync="PreviewPage"
  62. :search.sync="PreviewQuery"
  63. ref="crud"
  64. id="out-table"
  65. :header-cell-class-name="headerClassName"
  66. @resetColumn="resetColumnTwo('crud', 'PreviewOption', 'PreviewOptionBack', 312.3)"
  67. @saveColumn="saveColumnTwo('crud', 'PreviewOption', 'PreviewOptionBack', 312.3)"
  68. @search-change="PreviewSearchChange"
  69. @search-reset="PreviewSearchReset"
  70. @current-change="PreviewCurrentChange"
  71. @size-change="PreviewSizeChange"
  72. @refresh-change="PreviewRefreshChange" >
  73. <template slot-scope="scope" slot="menu">
  74. <el-link type="primary" :disabled="scope.row.status == 1"
  75. @click="handleReportPreview(scope.row.url,documentForm)">预览报表</el-link>
  76. </template>
  77. </avue-crud>
  78. </el-dialog>
  79. </div>
  80. </template>
  81. <script>
  82. import {
  83. getList as reportsList,
  84. reportsGetReportData,
  85. reportsDetail,
  86. reportsRemove,
  87. getList
  88. } from "@/api/iosBasicData/reports";
  89. import {reportslogList, reportslogSubmit} from "@/api/iosBasicData/bills";
  90. import {bbusinesstypeList} from "@/api/iosBasicData/bbusinesstype";
  91. import bbusinesstype from "@/views/iosBasicData/bbusinesstype/index.vue";
  92. import reportformsList from "@/views/iosBasicData/SeafreightExportF/bills/assembly/reportformsList.vue";
  93. import DispatchNotice from '@/views/iosBasicData/SeafreightExportF/bills/assembly/reportformsFrame/DispatchNotice.vue'
  94. import PurchaseNotice from "@/views/iosBasicData/SeafreightExportF/bills/assembly/reportformsFrame/PurchaseNotice.vue";
  95. import reportContainer from "@/views/iosBasicData/report-container/report-container.vue";
  96. import BillofLadingDetails
  97. from "@/views/iosBasicData/SeafreightExportF/bills/assembly/reportformsFrame/BillofLadingDetails.vue";
  98. import businessReports from "@/views/iosBasicData/SeafreightExportF/bills/assembly/businessReports.vue";
  99. import losaudit from "@/views/wel/components/losAssembly/losaudit.vue";
  100. import {dateFormat} from "@/util/date";
  101. export default {
  102. components: {
  103. businessReports,
  104. BillofLadingDetails, reportContainer, reportformsList, bbusinesstype,DispatchNotice,PurchaseNotice},
  105. data(){
  106. return {
  107. previewDialog:false, // 打印预览弹窗
  108. PreviewOption:{}, // 打印预览弹窗的配置项
  109. PreviewOptionBack: {
  110. height:'auto',
  111. calcHeight: 30,
  112. tip: false,
  113. searchShow: true,
  114. searchMenuSpan: 6,
  115. border: true,
  116. index: true,
  117. selection: true,
  118. dialogClickModal: false,
  119. menuWidth:100,
  120. addBtn:false,
  121. viewBtn:false,
  122. delBtn:false,
  123. editBtn:false,
  124. column: [
  125. {
  126. label: "组别",
  127. prop: "groupCode",
  128. rules: [{
  129. required: true,
  130. message: "请输入组别",
  131. trigger: "blur"
  132. }]
  133. },
  134. {
  135. label: "报表编码",
  136. prop: "code",
  137. rules: [{
  138. required: true,
  139. message: "请输入报表编码",
  140. trigger: "blur"
  141. }]
  142. },
  143. {
  144. label: "中文名称",
  145. prop: "cnName",
  146. rules: [{
  147. required: true,
  148. message: "请输入中文名称",
  149. trigger: "blur"
  150. }]
  151. },
  152. {
  153. label: "英文名称",
  154. prop: "enName"
  155. },
  156. {
  157. label: "报表格式",
  158. prop: "content",
  159. rules: [{
  160. required: true,
  161. message: "请输入报表格式",
  162. trigger: "blur"
  163. }]
  164. },
  165. {
  166. label: "备注",
  167. prop: "remarks"
  168. },
  169. ]
  170. },
  171. PreviewData:[], // 打印预览弹窗获取的数据
  172. PreviewQuery:{}, // 搜索项
  173. // 打印预览弹窗分页数据
  174. PreviewPage:{
  175. pageSize: 10,
  176. currentPage: 1,
  177. total: 0
  178. },
  179. documentVisible:false, // 单证添加编辑弹窗
  180. editData:{}, // 编辑弹窗的数据
  181. documentForm:{}, // 添加编辑弹窗的数据
  182. documenturl:'', // 报表的url 暂存
  183. // 左侧配置项
  184. treeOption: {
  185. nodeKey: "id",
  186. // lazy: true,
  187. addBtn: false,
  188. menu: false,
  189. size: "small",
  190. props: {
  191. labelText: "标题",
  192. label: "cnName",
  193. value: "value",
  194. children: "children"
  195. }
  196. },
  197. feesTypeData:[
  198. {
  199. cnName: '入货通知',
  200. classifyCode:'单证',
  201. groupCode:'入货通知',
  202. reportsType:'RHTZ',
  203. businessType:'HYCK'
  204. },
  205. {
  206. cnName: '派车通知单',
  207. classifyCode:'单证',
  208. groupCode:'派车通知单',
  209. reportsType:'PCTZD',
  210. businessType:'HYCK'
  211. },
  212. {
  213. cnName: '提单详情',
  214. classifyCode:'单证',
  215. groupCode:'提单详情',
  216. reportsType:'TDXQ',
  217. businessType:'HYCK'
  218. },
  219. {
  220. cnName: '订舱委托书',
  221. classifyCode:'单证',
  222. groupCode:'提单详情',
  223. reportsType:'DCWTS',
  224. businessType:'HYCK'
  225. }
  226. ], // 左侧获取的数据
  227. documentOption:{},
  228. documentOptionBack: {
  229. dialogDrag: true,
  230. height: 'auto',
  231. calcHeight: 30,
  232. tip: false,
  233. searchShow: true,
  234. searchMenuSpan: 6,
  235. border: true,
  236. index: true,
  237. selection: true,
  238. dialogClickModal: false,
  239. addBtn:false,
  240. viewBtn:false,
  241. delBtn:false,
  242. editBtn:false,
  243. menuWidth:'160',
  244. column: [
  245. {
  246. label: "报表编码",
  247. prop: "reportsCode",
  248. overHidden:true,
  249. },
  250. {
  251. label: "单据类型",
  252. prop: "groupCode",
  253. overHidden:true,
  254. },
  255. {
  256. label: "创建人",
  257. prop: "createUserName",
  258. overHidden:true,
  259. },
  260. {
  261. label: "创建时间",
  262. prop: "createTime",
  263. overHidden:true,
  264. },
  265. ]
  266. },
  267. documentSearch:{},
  268. documentPage:{
  269. pageSize: 10,
  270. currentPage: 1,
  271. total: 0,
  272. pageSizes: [10, 20, 30, 40, 50, 100, 200, 300, 400, 500]
  273. },
  274. query: {},
  275. documentData:[],
  276. loading:false,
  277. businesstypeData:{}, // 左侧选择的数据
  278. addShow:false,
  279. }
  280. },
  281. props:{
  282. assemblyForm:{
  283. type:Object,
  284. default:{}
  285. },
  286. detailData:{
  287. type:Object,
  288. default: {}
  289. },
  290. disabled: {
  291. type: Boolean,
  292. default: false,
  293. },
  294. },
  295. async created() {
  296. this.documentOption = await this.getColumnData(this.getColumnName(312.1), this.documentOptionBack);
  297. this.PreviewOption = await this.getColumnData(this.getColumnName(312.3), this.PreviewOptionBack);
  298. // this.reportsListfun()
  299. },
  300. methods:{
  301. // 打印预览按钮
  302. async dialogPreviewfun(row){
  303. this.editData = row
  304. if(row.printContent){
  305. this.documentForm = JSON.parse(row.printContent).data
  306. }
  307. this.PreviewPage.currentPage = 1;
  308. const data = await this.PreviewOnLoad(this.PreviewPage, {
  309. businessType:'HYCK',
  310. classifyCode:'单证',
  311. groupCode:row.groupCode
  312. });
  313. this.$nextTick(()=>{
  314. if (data.length == 1) {
  315. this.handleReportPreview(data[0].url,this.documentForm)
  316. }else {
  317. this.previewDialog = true
  318. }
  319. })
  320. // let obj = {businessType:'HYCK',classifyCode:'单证',groupCode:row.groupCode}
  321. // let documentaa = null // 暂存url数据
  322. // reportsList(1,20,{
  323. // businessType:'HYCK',
  324. // classifyCode:'单证',
  325. // groupCode:row.groupCode,
  326. // }).then(resz=>{
  327. // const h = this.$createElement;
  328. // const that = this
  329. // this.$msgbox({
  330. // title: "请选择数据",
  331. // message: h('el-select',
  332. // {
  333. // props: {
  334. // value: documentaa,
  335. // filterable: true,
  336. // size:'small'
  337. // },
  338. // ref: 'selectView',
  339. // on: {
  340. // change:e => {
  341. // documentaa = e
  342. // that.$refs.selectView.value = e // select下拉框值改变,回显到页面上
  343. // },
  344. // },
  345. // },
  346. // [
  347. // resz.data.data.records.map(it => {
  348. // return h('el-option', {
  349. // props: {
  350. // label: it.cnName,
  351. // key: it.id,
  352. // value: it.url,
  353. // },
  354. // });
  355. // })
  356. // ]
  357. // ),
  358. // showCancelButton: true,
  359. // closeOnClickModal: false,
  360. // confirmButtonText: '确定',
  361. // cancelButtonText: '取消',
  362. // }).then( _ => {
  363. // // 成功操作。。。。
  364. // this.documenturl = documentaa
  365. // this.handleReportPreview(this.documenturl,JSON.parse(row.printContent).data)
  366. // }).catch(msg => {
  367. // // 取消操作。。。。
  368. // });
  369. // })
  370. },
  371. PreviewSearchReset() {
  372. this.PreviewQuery = {};
  373. this.PreviewOnLoad(this.PreviewPage,{
  374. businessType:'HYCK',
  375. classifyCode:'单证',
  376. groupCode:this.editData.groupCode
  377. });
  378. },
  379. PreviewSearchChange(params, done){
  380. this.PreviewQuery = params;
  381. this.PreviewPage.currentPage = 1;
  382. this.PreviewOnLoad(this.PreviewPage, params);
  383. done();
  384. },
  385. PreviewCurrentChange(currentPage){
  386. this.PreviewPage.currentPage = currentPage;
  387. },
  388. PreviewSizeChange(pageSize){
  389. this.PreviewPage.pageSize = pageSize;
  390. },
  391. PreviewRefreshChange() {
  392. this.PreviewOnLoad(this.PreviewPage, {
  393. businessType:'HYCK',
  394. classifyCode:'单证',
  395. groupCode:this.editData.groupCode
  396. });
  397. },
  398. // 打印预览弹窗数据
  399. async PreviewOnLoad(page, params = {}){
  400. const res = await reportsList(page.currentPage, page.pageSize, Object.assign(params, this.PreviewQuery))
  401. const data = res.data.data;
  402. this.PreviewPage.total = data.total;
  403. this.PreviewData = data.records;
  404. return data.records
  405. },
  406. // 新建单证按钮
  407. addbtnfun(){
  408. if (!this.assemblyForm.id) {
  409. this.$message.warning("请先保存数据");
  410. return;
  411. }
  412. if(!this.businesstypeData.cnName){
  413. this.$message.warning("请先选择报表类型");
  414. return
  415. }
  416. this.addShow=false
  417. reportsGetReportData({
  418. billId:this.assemblyForm.id,
  419. reportCode:this.businesstypeData.classifyCode,
  420. groupCode:this.businesstypeData.groupCode,
  421. reportsType:this.businesstypeData.reportsType,
  422. type:'HYCK'
  423. }).then(res=>{
  424. this.editData.groupCode=this.businesstypeData.groupCode
  425. this.documentForm = res.data.data.data
  426. // 联系人
  427. this.documentForm.corpAttnName = this.documentForm.corpAttnName + '' + this.documentForm.corpAttnTel
  428. // this.documenturl = this.businesstypeData.url;
  429. // 打开报表选择框
  430. this.documentVisible = true
  431. })
  432. },
  433. // 编辑
  434. printEditing(row){
  435. if(!this.businesstypeData.cnName){
  436. this.$message.warning("请先选择报表类型");
  437. return
  438. }
  439. // this.businesstypeData.code = row.reportsCode
  440. this.addShow=true
  441. this.editData = row
  442. this.documentForm = JSON.parse(row.printContent).data
  443. // this.documenturl = JSON.parse(row.printContent).url;
  444. this.documentVisible = true
  445. },
  446. // 删除
  447. printDelete(row){
  448. this.$confirm("确定将选择数据删除?", {
  449. confirmButtonText: "确定",
  450. cancelButtonText: "取消",
  451. type: "warning"
  452. }).then(()=>{
  453. reportsRemove(row.id).then(res=>{
  454. this.$message.success('操作成功')
  455. this.reportslogListfun(this.documentPage, this.query);
  456. })
  457. })
  458. },
  459. // 单证弹窗的确认按钮
  460. documentSubmit(type){
  461. let obj = {}
  462. if (this.editData.id){
  463. obj = this.editData
  464. }else {
  465. obj.remarks = this.assemblyForm.remarks
  466. obj.businessType = this.assemblyForm.businessType
  467. obj.billId = this.assemblyForm.id
  468. obj.billNo = this.assemblyForm.billNo
  469. obj.mblno = this.assemblyForm.mblno
  470. obj.hblno = this.assemblyForm.hblno
  471. obj.reportsCode = this.businesstypeData.reportsType
  472. obj.groupCode = this.businesstypeData.groupCode
  473. obj.reportsType = this.businesstypeData.reportsType
  474. }
  475. obj.printContent = JSON.stringify({
  476. data:{
  477. ...this.documentForm,
  478. to:this.documentForm.corpCnName,
  479. attn:this.documentForm.corpAttnName,
  480. fm:this.documentForm.createUserName,
  481. fax:this.documentForm.fax,
  482. cc:this.documentForm.cc,
  483. email:this.documentForm.ematl,
  484. department:this.documentForm.corpAttnName,
  485. operate:this.documentForm.operatorName,
  486. mobilePhone:this.documentForm.mobilePhone,
  487. remarks:this.documentForm.cyRemarks,
  488. contacts:this.documentForm.cyContacts,
  489. deliverylocation:this.documentForm.cyCnName,
  490. shippingAgency:this.documentForm.bookingAgentCnName,
  491. Telephone:this.documentForm.cyTel,
  492. datetime:dateFormat(new Date(),'yyyy-MM-dd hh:mm:ss')
  493. }
  494. // url:this.documenturl
  495. })
  496. console.log(obj)
  497. // 保存
  498. reportslogSubmit(obj).then(res=>{
  499. if (type) {
  500. let documentaa = null // 暂存url数据
  501. reportsList(1,20,{
  502. businessType:'HYCK',
  503. classifyCode:'单证',
  504. groupCode:res.data.data.groupCode,
  505. }).then(resz=>{
  506. const h = this.$createElement;
  507. const that = this
  508. this.$msgbox({
  509. title: "请选择数据",
  510. message: h('el-select',
  511. {
  512. props: {
  513. value: documentaa,
  514. filterable: true,
  515. size:'small'
  516. },
  517. ref: 'selectView',
  518. on: {
  519. change:e => {
  520. documentaa = e
  521. that.$refs.selectView.value = e // select下拉框值改变,回显到页面上
  522. },
  523. },
  524. },
  525. [
  526. resz.data.data.records.map(it => {
  527. return h('el-option', {
  528. props: {
  529. label: it.cnName,
  530. key: it.id,
  531. value: it.url,
  532. },
  533. });
  534. })
  535. ]
  536. ),
  537. showCancelButton: true,
  538. closeOnClickModal: false,
  539. confirmButtonText: '确定',
  540. cancelButtonText: '取消',
  541. }).then( _ => {
  542. // 成功操作。。。。
  543. this.documenturl = documentaa
  544. this.handleReportPreview(this.documenturl,this.documentForm)
  545. this.reportslogListfun(this.documentPage, {...this.query,reportsCode:res.data.data.reportsCode});
  546. this.editData = {}
  547. this.documentForm = {}
  548. this.documenturl = {}
  549. this.documentVisible = false
  550. }).catch(msg => {
  551. // 取消操作。。。。
  552. });
  553. })
  554. }else {
  555. this.$message.success('操作成功')
  556. this.reportslogListfun(this.documentPage, {...this.query,reportsCode:res.data.data.reportsCode});
  557. this.editData = {}
  558. this.documentForm = {}
  559. this.documenturl = {}
  560. this.documentVisible = false
  561. }
  562. })
  563. },
  564. // 打印取消
  565. printingCanceling(){
  566. this.editData = {}
  567. this.documentForm = {}
  568. this.documenturl = {}
  569. this.documentVisible = false
  570. },
  571. // 左侧筛选
  572. nodeClick(data) {
  573. this.editData={}
  574. this.documentForm={}
  575. this.businesstypeData={}
  576. this.businesstypeData = data
  577. this.reportslogListfun(this.documentPage, {reportsType:data.reportsType});
  578. },
  579. // 左侧数据获取
  580. // reportsListfun(){
  581. // reportsList(1,20,{
  582. // businessType:'HYCK',
  583. // classifyCode:'单证',
  584. // groupCode:'派车通知单,入货通知,提单详情',
  585. // code:'BZRHTZ,TDXQ,PCTZD,'
  586. // }).then(res=>{
  587. // this.feesTypeData = res.data.data.records
  588. // })
  589. // },
  590. // 类别弹窗关闭
  591. corpTypeClose(done) {
  592. console.log(1111)
  593. this.editData={}
  594. this.documentForm={}
  595. this.businesstypeData={}
  596. done();
  597. },
  598. // 点击搜索触发
  599. searchChange(params, done){
  600. this.query = params;
  601. this.documentPage.currentPage = 1;
  602. this.reportslogListfun(this.documentPage, params);
  603. done();
  604. },
  605. // 清空搜索回调方法
  606. searchReset(){
  607. this.query = {};
  608. this.reportslogListfun(this.documentPage);
  609. },
  610. // 点击刷新按钮
  611. refreshChange(){
  612. this.reportslogListfun(this.documentPage, {...this.query,reportsCode:this.businesstypeData.content});
  613. },
  614. // 打开前的回调
  615. beforeOpen(done, type) {
  616. // 编辑和查看
  617. if (["edit", "view"].includes(type)) {
  618. }
  619. },
  620. // 单证中心数据获取
  621. reportslogListfun(documentPage, params = {}){
  622. if(!this.assemblyForm.id) {
  623. return
  624. }
  625. this.loading = true;
  626. reportslogList(documentPage.currentPage, documentPage.pageSize, {
  627. ...Object.assign(params, this.query),
  628. billId:this.assemblyForm.id
  629. }).then(res=>{
  630. const data = res.data.data;
  631. this.documentPage.total = data.total;
  632. this.documentData = data.records;
  633. this.loading = false;
  634. })
  635. },
  636. // 预览报表
  637. handleReportPreview(url,data){
  638. console.log(url,1670)
  639. console.log(data,1671)
  640. // 处理时间
  641. data.end = data.end?data.end.slice(0,10):''
  642. data.goodsTime = data.goodsTime?data.goodsTime.slice(0,10):''
  643. data.clearanceTime = data.clearanceTime?data.clearanceTime.slice(0,10):''
  644. data.vgmDeadline = data.vgmDeadline?data.vgmDeadline.slice(0,10):''
  645. Stimulsoft.Base.StiLicense.key = '6vJhGtLLLz2GNviWmUTrhSqnOItdDwjBylQzQcAOiHn0s4gy0Fr5YoUZ9V00Y0igCSFQzwEqYBh/N77k4f0fWXTHW5rqeBNLkaurJDenJ9o97TyqHs9HfvINK18Uwzsc/bG01Rq+x3H3Rf+g7AY92gvWmp7VA2Uxa30Q97f61siWz2dE5kdBVcCnSFzC6awE74JzDcJMj8OuxplqB1CYcpoPcOjKy1PiATlC3UsBaLEXsok1xxtRMQ283r282tkh8XQitsxtTczAJBxijuJNfziYhci2jResWXK51ygOOEbVAxmpflujkJ8oEVHkOA/CjX6bGx05pNZ6oSIu9H8deF94MyqIwcdeirCe60GbIQByQtLimfxbIZnO35X3fs/94av0ODfELqrQEpLrpU6FNeHttvlMc5UVrT4K+8lPbqR8Hq0PFWmFrbVIYSi7tAVFMMe2D1C59NWyLu3AkrD3No7YhLVh7LV0Tttr/8FrcZ8xirBPcMZCIGrRIesrHxOsZH2V8t/t0GXCnLLAWX+TNvdNXkB8cF2y9ZXf1enI064yE5dwMs2fQ0yOUG/xornE'
  646. // Stimulsoft.Base.StiLicense.Key = '6vJhGtLLLz2GNviWmUTrhSqnOItdDwjBylQzQcAOiHkcgIvwL0jnpsDqRpWg5FI5kt2G7A0tYIcUygBh1sPs7plofUOqPB1a4HBIXJB621mau2oiAIj+ysU7gKUXfjn/D5BocmduNB+ZMiDGPxFrAp3PoD0nYNkkWh8r7gBZ1v/JZSXGE3bQDrCQCNSy6mgby+iFAMV8/PuZ1z77U+Xz3fkpbm6MYQXYp3cQooLGLUti7k1TFWrnawT0iEEDJ2iRcU9wLqn2g9UiWesEZtKwI/UmEI2T7nv5NbgV+CHguu6QU4WWzFpIgW+3LUnKCT/vCDY+ymzgycw9A9+HFSzARiPzgOaAuQYrFDpzhXV+ZeX31AxWlnzjDWqpfluygSNPtGul5gyNt2CEoJD1Yom0VN9fvRonYsMsimkFFx2AwyVpPcs+JfVBtpPbTcZscnzUdmiIvxv8Gcin6sNSibM6in/uUKFt3bVgW/XeMYa7MLGF53kvBSwi78poUDigA2n12SmghLR0AHxyEDIgZGOTbNI33GWu7ZsPBeUdGu55R8w='
  647. Stimulsoft.Base.Localization.StiLocalization.addLocalizationFile( '/reports/stimulsoft/Localization/zh-CHS.xml', true, 'zh-CHS')
  648. Stimulsoft.Base.Localization.StiLocalization.setLocalizationFile('/reports/stimulsoft/Localization/zh-CHS.xml' )
  649. // 工具栏
  650. var options = new Stimulsoft.Viewer.StiViewerOptions()
  651. options.height = '100%'
  652. options.appearance.scrollbarsMode = true // 滚动条模式
  653. options.toolbar.showDesignButton = false // 显示设计按钮
  654. options.toolbar.showAboutButton = false // 显示关于按钮
  655. options.toolbar.showResourcesButton = false // 显示资源按钮
  656. options.toolbar.showFullScreenButton = false // 显示全屏按钮
  657. options.toolbar.showOpenButton = false // 显示打开按钮
  658. options.appearance.showTooltips = false // 显示工具提示
  659. options.appearance.showDialogsHelp = false // 显示对话框帮助
  660. options.exports.showExportToDocument = false // 显示导出到文档
  661. options.toolbar.showParametersButton = true // 显示参数按钮
  662. options.appearance.bookmarksPrint = true // 书签打印
  663. // options.toolbar.showPrintButton = false // 打印按钮是否显示 下面直接自定义控制打印弹窗是否开启
  664. // printDestination 参数:用于指定报表打印的目标位置,可以是打印机、PDF 文件或者直接打印到浏览器等。
  665. // Stimulsoft.Viewer.StiPrintDestination.Direct:表示直接打印到打印机,即将报表内容直接发送至打印机进行打印。
  666. // 通过设置不同的 printDestination 参数,你可以控制报表打印的行为,例如是直接打印到打印机,还是生成 PDF 文件,或者直接在浏览器中预览打印内容等。
  667. options.toolbar.printDestination = Stimulsoft.Viewer.StiPrintDestination.Direct
  668. // htmlRenderMode html渲染模式
  669. options.appearance.htmlRenderMode = Stimulsoft.Report.Export.StiHtmlExportMode.Table
  670. // 是创建一个 Stimulsoft 报表查看器的实例的代码
  671. let viewer = new Stimulsoft.Viewer.StiViewer(options, 'StiViewer', false)
  672. // 报表
  673. console.log("创建一个报表实例");
  674. console.log()
  675. let report = new window.Stimulsoft.Report.StiReport();
  676. // 加载文件
  677. console.log("从url加载报表");
  678. // report.loadFile("/reports/stimulsoft/demos/SimpleList.mrt");
  679. report.load(url)
  680. data.pageOne = 'Page : 1 of 1'
  681. // 处理超长数据
  682. if (data.hshipperDetails) {
  683. let arrDeteil=[]
  684. arrDeteil=data.hshipperDetails.split('\n')
  685. if(arrDeteil.length>5){
  686. data.hshipperDetails=arrDeteil.slice(0, 5).join('\n')+'***'
  687. data.commodityDescr+="\n***"+arrDeteil.slice(5,arrDeteil.length).join('\n')
  688. }else{
  689. data.hshipperDetails =data.hshipperDetails
  690. }
  691. // var consignerIndex2 = data.hshipperDetails.indexOf( '\n' )
  692. // for (let i = 0; i < 4; i++) {
  693. // consignerIndex2 = data.hshipperDetails.indexOf( '\n', consignerIndex2 + 1 );
  694. // }
  695. // if (consignerIndex2 != -1) {
  696. // var hshipperDetails = data.hshipperDetails.substring(consignerIndex2 + 2, data.hshipperDetails.length)
  697. // data.hshipperDetails = data.hshipperDetails.substring(0, consignerIndex2) + ' *'
  698. // data.commodityDescr += '\n*' + hshipperDetails
  699. // }
  700. }
  701. if (data.hconsigneeDetails) {
  702. let arrDeteil=[]
  703. arrDeteil=data.hconsigneeDetails.split('\n')
  704. if(arrDeteil.length>5){
  705. data.hconsigneeDetails=arrDeteil.slice(0, 5).join('\n')+'***'
  706. data.commodityDescr+="\n***"+arrDeteil.slice(5,arrDeteil.length).join('\n')
  707. }else{
  708. data.hconsigneeDetails =data.hconsigneeDetails
  709. }
  710. // var consigneeIndex2 = data.hconsigneeDetails.indexOf( '\n' )
  711. // for (let i = 0; i < 4; i++) {
  712. // consigneeIndex2 = data.hconsigneeDetails.indexOf( '\n', consigneeIndex2 + 1 );
  713. // }
  714. // if (consigneeIndex2 != -1) {
  715. // var hconsigneeDetails = data.hconsigneeDetails.substring(consigneeIndex2 + 2, data.hconsigneeDetails.length)
  716. // data.hconsigneeDetails = data.hconsigneeDetails.substring(0, consigneeIndex2) + ' **'
  717. // data.commodityDescr += '\n**' + hconsigneeDetails
  718. // }
  719. }
  720. if (data.hnotifyDetails) {
  721. let arrDeteil=[]
  722. arrDeteil=data.hnotifyDetails.split('\n')
  723. if(arrDeteil.length>5){
  724. data.hnotifyDetails=arrDeteil.slice(0, 5).join('\n')+'***'
  725. data.commodityDescr+="\n***"+arrDeteil.slice(5,arrDeteil.length).join('\n')
  726. }else{
  727. data.hnotifyDetails =data.hnotifyDetails
  728. }
  729. // var notifierIndex2 = data.hnotifyDetails.indexOf( '\n' )
  730. // for (let i = 0; i < 4; i++) {
  731. // notifierIndex2 = data.hnotifyDetails.indexOf( '\n', notifierIndex2 + 1 );
  732. // }
  733. // if (notifierIndex2 != -1) {
  734. // var hnotifyDetails = data.hnotifyDetails.substring(notifierIndex2 + 2, data.hnotifyDetails.length)
  735. // data.hnotifyDetails = data.hnotifyDetails.substring(0, notifierIndex2) + ' ***'
  736. // data.commodityDescr += '\n***' + hnotifyDetails
  737. // }
  738. }
  739. // 处理箱号
  740. if (this.isPrintTheBoxNumber) {
  741. data.commodityDescr += '\n.\n.\n'
  742. }
  743. // PLACE & DATE OF ISSUE
  744. data.placeAndDateOfIssue = ''
  745. if (data.issueAt) {
  746. data.placeAndDateOfIssue += data.issueAt
  747. }
  748. if (data.issueDate) {
  749. let date = new Date(data.issueDate.replace(/-/g,'/'));
  750. let yyyy = date.getFullYear();
  751. let mmmm = date.toDateString().split(" ")[1]
  752. let dd = date.getDate()
  753. data.placeAndDateOfIssue += ', ' + dd + '-' + mmmm + '-' + yyyy
  754. }
  755. // Total number of containers or packages received by the Carriers
  756. if (data.preContainersList) {
  757. let boxMap = new Map();
  758. for (let boxQuantity of data.preContainersList) {
  759. if (boxMap.get(boxQuantity.cntrTypeCode)) {
  760. let v = boxMap.get(boxQuantity.cntrTypeCode)
  761. boxMap.set(boxQuantity.cntrTypeCode, v + boxQuantity.quantity)
  762. } else {
  763. boxMap.set(boxQuantity.cntrTypeCode, boxQuantity.quantity)
  764. }
  765. }
  766. let boxs = ''
  767. boxMap.forEach(function (value, key, map) {
  768. boxs += value + 'x' + key + ', '
  769. })
  770. boxs = boxs.substring(0, boxs.length - 2)
  771. data.boxQuantity = boxs + ' CONTAINER(S) ONLY'
  772. }
  773. // Number of original B/Ls
  774. if (data.numberOfObl) {
  775. data.numberOfObl += ' (' + data.numberOfOblDigit + ')'
  776. }
  777. if (data.commodityDescr) {
  778. var descriptionIndex2 = data.commodityDescr.indexOf( '\n' )
  779. for (let i = 0; i < 19; i++) {
  780. descriptionIndex2 = data.commodityDescr.indexOf( '\n', descriptionIndex2 + 1 );
  781. }
  782. if (descriptionIndex2 != -1) {
  783. data.pageOne = 'Page : 1 of 2'
  784. data.pageTwo = 'Page : 2 of 2'
  785. var extraLongText = data.commodityDescr.substring(descriptionIndex2 + 2, data.commodityDescr.length)
  786. data.commodityDescr = data.commodityDescr.substring(0, descriptionIndex2)
  787. data.extraLongTips = '** TO BE CONTINUED ON ATTACHED LIST **'
  788. data.extraLongText = extraLongText
  789. }
  790. }
  791. // console.log(data.hshipperDetails, 'hshipperDetails2')
  792. // 创建一个 Stimulsoft 数据集(DataSet)的实例的代码
  793. var dataSet = new Stimulsoft.System.Data.DataSet(
  794. 'reportData'
  795. )
  796. dataSet.readJson(data) // 用于将 JSON 格式的数据加载到数据集中。data 是包含报表数据的 JSON 对象。
  797. // 这是一个方法调用,用于在报表中注册数据源。参数 'reportData' 是数据源的名称,
  798. // 第二个 'reportData' 是数据源的别名,dataSet 则是之前创建的数据集实例
  799. report.regData('reportData', 'reportData', dataSet)
  800. // 从模版和数据加载报表
  801. // loadReport(report, '', {})
  802. // 这是将报表对象指定给报表查看器的属性。viewer 是报表查看器的实例,而 report 是之前创建的报表对象。
  803. viewer.report = report;
  804. this.$refs.reportContainer.showContainer(
  805. ()=> {
  806. setTimeout(() => {
  807. viewer.renderHtml('reportContainer')
  808. this.createViewerButtons(viewer)
  809. }, 50)
  810. },
  811. ()=>{
  812. },
  813. )
  814. console.log("加载成功完成!");
  815. },
  816. createViewerButtons (viewer){
  817. viewer.jsObject.collections.images['myClose.png'] =
  818. 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAA0ElEQVQ4ja3TO05CQRQG4A8iOwAbtYWETndAaecK7NwCKmETtJZsSBNLobEz8ZFIJQ0UnOGSm3DnYviTybzO/895DQXGWGCVGQuMEqkRcwcfuMOLalziCaf4TIe9UG9nyMJmFRzNGoRK1BU4xxx9G7cfwostciGk+x8MqgySwDXe4tU53hVV+MNtTmAoX84JGv9NYgrHyR6DV8wUSW7hItZLm36ZVoVQxsFJLOMsPOrH/h7dQwR2cdxOTEn8DtUbPGc4V2H7Vb4Yqfedf/GYSGt8VUmxgyfuBAAAAABJRU5ErkJggg=='
  819. const closeBtn = viewer.jsObject.SmallButton(
  820. 'closeBtn',
  821. '关闭',
  822. 'myClose.png'
  823. )
  824. // 增加打印弹窗配置
  825. const printBtn = viewer.jsObject.SmallButton(
  826. 'printBtn',
  827. '打印报表',
  828. 'myClose.png'
  829. )
  830. // console.log(viewer.jsObject.print(),'1013')
  831. // 获取 关闭按钮的dom元素位置
  832. const toolbarTable = viewer.jsObject.controls.toolbar.firstChild.firstChild
  833. const buttonsTable = toolbarTable.rows[0].lastChild.lastChild
  834. const userButtonCell = buttonsTable.rows[0].insertCell(0)
  835. // 获取打印按钮的位置
  836. const buttonsTablePrint = toolbarTable.rows[0].childNodes[0].lastChild // 打印按钮
  837. const userButtonPrint = buttonsTablePrint.rows[0].childNodes[0] // 打印按钮dom位置
  838. userButtonPrint.addEventListener("click", (event)=>{
  839. console.log("打印点击");
  840. // event.preventDefault()
  841. });
  842. userButtonPrint.addEventListener("mouseover", (event) => {
  843. console.log("移入打印按钮");
  844. console.log(event,1035)
  845. });
  846. userButtonCell.className = 'stiJsViewerClearAllStyles'
  847. userButtonCell.appendChild(closeBtn) // 添加关闭节点
  848. // userButtonPrint.prepend(printBtn) // 在 printBtn 节点里最前面增加一个子级节点
  849. let that=this
  850. // 关闭按钮的监听点击
  851. closeBtn.action = function() {
  852. console.log(that.$refs.ReportContainer,'1022')
  853. if (that.$refs.reportContainer)
  854. that.$refs.reportContainer.hideContainer()
  855. }
  856. // // // 打印按钮监听
  857. // printBtn.action = (e)=>{
  858. // console.log('打印')
  859. // window.print()
  860. // }
  861. },
  862. //自定义列保存
  863. async saveColumnTwo(ref, option, optionBack, code) {
  864. /**
  865. * 已定义全局方法,直接使用,saveColumnData保存列数据方法,参数传值(表格名称,当前表格的option数据)
  866. * 已定义全局方法,直接使用,getColumnName方法用来获取枚举值,参数根据自己定义的code值获取中文名
  867. * 一定要执行异步操作,要等接口成功返回,才能执行下一行代码
  868. */
  869. const inSave = await this.saveColumnData(this.getColumnName(code), this[option]);
  870. if (inSave) {
  871. this.$message.success("保存成功");
  872. //关闭窗口
  873. this.$refs[ref].$refs.dialogColumn.columnBox = false;
  874. }
  875. },
  876. //自定义列重置
  877. async resetColumnTwo(ref, option, optionBack, code) {
  878. this[option] = this[optionBack];
  879. const inSave = await this.delColumnData(this.getColumnName(code), this[optionBack]);
  880. if (inSave) {
  881. this.$message.success("重置成功");
  882. this.$refs[ref].$refs.dialogColumn.columnBox = false;
  883. }
  884. },
  885. // 更改表格颜色
  886. headerClassName(tab) {
  887. //颜色间隔
  888. let back = ""
  889. if (tab.columnIndex >= 0 && tab.column.level === 1) {
  890. if (tab.columnIndex % 2 === 0) {
  891. back = "back-one"
  892. } else if (tab.columnIndex % 2 === 1) {
  893. back = "back-two"
  894. }
  895. }
  896. return back;
  897. },
  898. }
  899. }
  900. </script>
  901. <style scoped>
  902. ::v-deep#out-table .back-one {
  903. background: #ecf5ff !important;
  904. }
  905. ::v-deep#out-table .back-two {
  906. background: #ecf5ff !important;
  907. }
  908. </style>