You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

456 lines
16 KiB

11 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
11 months ago
7 months ago
11 months ago
11 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
11 months ago
11 months ago
10 months ago
11 months ago
7 months ago
11 months ago
11 months ago
10 months ago
11 months ago
10 months ago
10 months ago
11 months ago
11 months ago
7 months ago
7 months ago
11 months ago
10 months ago
7 months ago
7 months ago
7 months ago
11 months ago
7 months ago
11 months ago
11 months ago
7 months ago
  1. <template>
  2. <div class="customer-css">
  3. <el-dialog :title="titleCon" :close-on-click-modal="false" :visible.sync="visible"
  4. width="600px" class="customer-dialog" @close="deleteFile">
  5. <el-form label-position="top" >
  6. <el-row :gutter="16">
  7. <el-col :span="6" >
  8. <el-form-item label=" ">
  9. <el-button type="primary" @click="downloadFile()">下载文件模板</el-button>
  10. </el-form-item> </el-col>
  11. <el-col :span="6">
  12. <el-form-item label="BU">
  13. <el-select v-model="pageData.buNo" placeholder="请选择" style="width: 100%">
  14. <el-option v-for = "i in buList" :key = "i.buNo" :label = "i.buDesc" :value = "i.buNo"></el-option>
  15. </el-select>
  16. </el-form-item>
  17. </el-col>
  18. <el-col :span="6">
  19. <el-form-item :label="'贸易国'" >
  20. <el-input v-model="pageData.salesArea"></el-input>
  21. </el-form-item>
  22. </el-col>
  23. <el-col :span="6">
  24. <el-form-item :label="'运抵国'" >
  25. <el-input v-model="pageData.cnative"></el-input>
  26. </el-form-item>
  27. </el-col>
  28. <el-col :span="12">
  29. <el-form-item :label="''" >
  30. <template #label>
  31. <span slot="label" style="" class="big-label">
  32. <a href="#" @click="customFlag=true">客户</a>
  33. </span>
  34. </template>
  35. <el-input type="textarea"
  36. :rows="2" v-model="pageData.customerName" ></el-input>
  37. </el-form-item>
  38. </el-col>
  39. <el-col :span="12">
  40. <el-form-item :label="''" >
  41. <template #label>
  42. <span slot="label" style="" class="big-label">
  43. <a href="#" @click="overseasShipperFlag=true">收货单位</a>
  44. </span>
  45. </template>
  46. <el-input type="textarea"
  47. :rows="2" v-model="pageData.overseasShipper" ></el-input>
  48. </el-form-item>
  49. </el-col>
  50. <el-col :span="12" style="margin-top: 30px">
  51. <el-form-item :label="''" >
  52. <template #label>
  53. <span slot="label" style="" class="big-label">
  54. <a href="#" @click="localShipAddressFlag=true">客户地址</a>
  55. </span>
  56. </template>
  57. <el-input type="textarea"
  58. :rows="3" v-model="pageData.localShipAddress" ></el-input>
  59. </el-form-item>
  60. </el-col>
  61. <el-col :span="12" style="margin-top: 30px">
  62. <el-form-item :label="''" >
  63. <template #label>
  64. <span slot="label" style="" class="big-label">
  65. <a href="#" @click="overseasAddressFlag=true">收货单位地址</a>
  66. </span>
  67. </template>
  68. <el-input type="textarea"
  69. :rows="3" v-model="pageData.overseasAddress" ></el-input>
  70. </el-form-item>
  71. </el-col>
  72. <el-col :span="24" style="margin-top: 30px">
  73. <el-form-item label=" ">
  74. </el-form-item> </el-col>
  75. <el-col :span="24">
  76. <el-upload class="customer-upload" drag action="javascript:void(0);" ref="uploadFile" :limit="1" accept=".xlsx,.xls"
  77. :before-upload="beforeUploadHandle" :on-change="onChange" :auto-upload="false" style="text-align: left;">
  78. <i class="el-icon-upload"></i>
  79. <div class="el-upload__text">将文件拖到此处<em>点击上传</em></div>
  80. </el-upload>
  81. </el-col>
  82. </el-row>
  83. </el-form>
  84. <span slot="footer" class="dialog-footer" style="margin-top: 10px">
  85. <el-button type="primary" @click="saveUploadFile">保存</el-button>
  86. <el-button type="primary" @click="closeDialog">关闭</el-button>
  87. </span>
  88. </el-dialog>
  89. <el-dialog title="客户" @close="closeCustomDialog" :visible.sync="customFlag" width="500px" v-drag>
  90. <el-form inline="inline" label-position="top" :model="customSearchData" style="margin-left: 7px;margin-top: -5px;">
  91. <el-form-item label="客户名称">
  92. <el-input v-model="customSearchData.ccusname" clearable style="width: 150px"></el-input>
  93. </el-form-item>
  94. <el-form-item label=" ">
  95. <el-button type="primary" style="padding: 3px 12px" @click="getCustomerList()">查询</el-button>
  96. </el-form-item>
  97. </el-form>
  98. <el-table
  99. :height="400"
  100. :data="customerList"
  101. stripe
  102. highlight-current-row
  103. border
  104. @row-dblclick="rowDblclick"
  105. style="width: 100%;">
  106. <el-table-column
  107. prop="ccusname"
  108. header-align="center"
  109. align="left"
  110. label="客户名称">
  111. </el-table-column>
  112. </el-table>
  113. <el-footer style="height:40px;margin-top: 10px;text-align:center">
  114. <el-button @click="customFlag = false">关闭</el-button>
  115. </el-footer>
  116. </el-dialog>
  117. <el-dialog title="客户地址" @close="localShipAddressFlag = false" :visible.sync="localShipAddressFlag" width="500px" v-drag>
  118. <el-table
  119. :height="400"
  120. :data="customerAddrs"
  121. stripe
  122. highlight-current-row
  123. border
  124. @row-dblclick="rowDblclick2"
  125. style="width: 100%;">
  126. <el-table-column
  127. prop="cDeliverAdd"
  128. header-align="center"
  129. align="left"
  130. label="客户地址">
  131. </el-table-column>
  132. </el-table>
  133. <el-footer style="height:40px;margin-top: 10px;text-align:center">
  134. <el-button @click="localShipAddressFlag = false">关闭</el-button>
  135. </el-footer>
  136. </el-dialog>
  137. <el-dialog title="收货单位地址" @close="overseasAddressFlag = false" :visible.sync="overseasAddressFlag" width="500px" v-drag>
  138. <el-table
  139. :height="400"
  140. :data="customerAddrs"
  141. stripe
  142. highlight-current-row
  143. border
  144. @row-dblclick="rowDblclick3"
  145. style="width: 100%;">
  146. <el-table-column
  147. prop="cDeliverAdd"
  148. header-align="center"
  149. align="left"
  150. label="收货单位地址">
  151. </el-table-column>
  152. </el-table>
  153. <el-footer style="height:40px;margin-top: 10px;text-align:center">
  154. <el-button @click="overseasAddressFlag = false">关闭</el-button>
  155. </el-footer>
  156. </el-dialog>
  157. <el-dialog title="收货单位" @close="overseasShipperFlag = false" :visible.sync="overseasShipperFlag" width="500px" v-drag>
  158. <el-table
  159. :height="400"
  160. :data="customerAddrs"
  161. stripe
  162. highlight-current-row
  163. border
  164. @row-dblclick="rowDblclick4"
  165. style="width: 100%;">
  166. <el-table-column
  167. prop="cDeliverUnit"
  168. header-align="left"
  169. align="left"
  170. label="收货单位">
  171. </el-table-column>
  172. <el-table-column
  173. prop="deliverycountry"
  174. header-align="center"
  175. align="left"
  176. label="贸易国">
  177. </el-table-column>
  178. <el-table-column
  179. prop="country"
  180. header-align="center"
  181. align="left"
  182. label="运抵国">
  183. </el-table-column>
  184. </el-table>
  185. <el-footer style="height:40px;margin-top: 10px;text-align:center">
  186. <el-button @click="overseasShipperFlag = false">关闭</el-button>
  187. </el-footer>
  188. </el-dialog>
  189. </div>
  190. </template>
  191. <script>
  192. import {queryFileId} from "@/api/qc/qc.js"
  193. import {saveEcssCoDelNotifyByExcel,getCustomerList,getCustomers,getCustomerAdd} from '@/api/ecss/ecss.js'
  194. import {downLoadObjectFile} from '@/api/eam/eam_object_list.js'
  195. import {getBuList}from '@/api/factory/site.js'
  196. export default {
  197. name: 'bomComponentUpload',
  198. data() {
  199. return {
  200. buList: [],
  201. titleCon: '文件导入',
  202. visible: false,
  203. fileList: [],
  204. pageData: {
  205. site: '',
  206. buNo: '',
  207. createBy: this.$store.state.user.name,
  208. customerName:'',
  209. localShipAddress:'',
  210. overseasShipper:'',
  211. overseasAddress:'',
  212. cnative:'',
  213. salesArea:'',
  214. },
  215. customSearchData: {},
  216. customerList : [],//所有客户
  217. customerAddrs : [],//地址
  218. customerPersons : [],//联系人
  219. customerMap:new Map,
  220. customFlag:false,
  221. localShipAddressFlag:false,
  222. overseasShipperFlag:false,
  223. overseasAddressFlag:false,
  224. }
  225. },
  226. methods: {
  227. // 初始化组件的参数
  228. init () {
  229. this.fileList = []
  230. let tempData = {
  231. username: this.$store.state.user.name,
  232. }
  233. getBuList(tempData).then(({data}) => {
  234. if (data.code === 0) {
  235. this.buList = data.row2
  236. if(data.row2.length===1){
  237. this.pageData.buNo=data.row2[0].buNo
  238. }
  239. }
  240. })
  241. getCustomerList({}).then(({data}) => {
  242. //区分请求成功和失败的状况
  243. if (data && data.code === 0) {
  244. this.customerList=data.rows
  245. }
  246. });
  247. this.pageData.customerName=''
  248. this.pageData.cnative=''
  249. this.pageData.localShipAddress='',
  250. this.pageData.overseasShipper='',
  251. this.pageData.overseasAddress='',
  252. this.customerPersons=[]
  253. this.customerAddrs=[]
  254. // 打开页面
  255. this.visible = true
  256. },
  257. getCustomerList(){
  258. getCustomerList(this.customSearchData).then(({data}) => {
  259. //区分请求成功和失败的状况
  260. if (data && data.code === 0) {
  261. this.customerList=data.rows
  262. }
  263. });
  264. },
  265. getCusPersons(){
  266. let cusData = {ccusname: this.pageData.customerName}
  267. getCustomers(cusData).then(({data}) => {
  268. //区分请求成功和失败的状况
  269. if (data && data.code === 0) {
  270. this.customerPersons=data.rows
  271. this.customerPersons.forEach(o => {
  272. if (!this.customerMap.has(o.ccontactname)) {
  273. this.customerMap.set(o.ccontactname, o.cnative);
  274. }
  275. });
  276. }
  277. });
  278. getCustomerAdd(cusData).then(({data}) => {
  279. //区分请求成功和失败的状况
  280. if (data && data.code === 0) {
  281. this.customerAddrs=data.rows
  282. }
  283. });
  284. },
  285. setCnative(){
  286. this.pageData.cnative=this.customerMap.get(this.pageData.overseasShipper)
  287. },
  288. closeCustomDialog () {
  289. this.customFlag = false
  290. },
  291. rowDblclick (row) {
  292. this.pageData.customerName=row.ccusname
  293. this.pageData.cnative='',
  294. this.pageData.localShipAddress='',
  295. this.pageData.overseasShipper='',
  296. this.pageData.overseasAddress='',
  297. this.getCusPersons()
  298. this.customFlag = false
  299. },
  300. rowDblclick2 (row) {
  301. this.pageData.localShipAddress=row.cDeliverAdd
  302. this.localShipAddressFlag = false
  303. },
  304. rowDblclick3 (row) {
  305. this.pageData.overseasAddress=row.cDeliverAdd
  306. this.overseasAddressFlag = false
  307. },
  308. rowDblclick4 (row) {
  309. this.pageData.overseasShipper=row.cDeliverUnit
  310. this.pageData.cnative=row.deliverycountry
  311. this.pageData.salesArea = row.country
  312. this.overseasShipperFlag = false
  313. },
  314. // 上传之前
  315. beforeUploadHandle (file) {
  316. let extName = file[0].name.substring(file[0].name.lastIndexOf('.')).toLowerCase()
  317. if (!(extName === '.xlsx' || extName === '.xls')) {
  318. this.$message.error('数据导入失败,请选择正确的xlsx模板文件')
  319. return false
  320. }
  321. },
  322. // 选择上传文件时
  323. onChange (file) {
  324. this.fileList.push(file)
  325. },
  326. // 关闭modal
  327. closeDialog () {
  328. this.deleteFile()
  329. // 关闭当前的页面
  330. this.visible = false
  331. },
  332. deleteFile(){
  333. this.fileList = []
  334. // 清空文件上传记录
  335. this.$refs.uploadFile.clearFiles()
  336. // 刷新报工的页面
  337. this.$emit('refreshTable')
  338. },
  339. // 保修当前的数据
  340. saveUploadFile () {
  341. if (null == this.pageData.buNo || this.pageData.buNo=='') {
  342. this.$message.error("请先选择BU!")
  343. return false
  344. }
  345. if (null == this.pageData.customerName || this.pageData.customerName=='') {
  346. this.$message.error("请先选择客户!")
  347. return false
  348. }
  349. if (null == this.pageData.localShipAddress || this.pageData.localShipAddress=='') {
  350. this.$message.error("请先填写客户发货地址!")
  351. return false
  352. }
  353. if (null == this.pageData.overseasShipper || this.pageData.overseasShipper=='') {
  354. this.$message.error("请先填写收货单位!")
  355. return false
  356. }
  357. if (null == this.pageData.overseasAddress || this.pageData.overseasAddress=='') {
  358. this.$message.error("请先填写收货单位地址!")
  359. return false
  360. }
  361. if (null == this.pageData.cnative || this.pageData.cnative=='') {
  362. this.$message.error("请先填写收货单位运抵国!")
  363. return false
  364. }
  365. // 判断文件是否上传
  366. if (null == this.fileList || 0 === this.fileList.length) {
  367. this.$message.error("请先上传文件!")
  368. return false
  369. }
  370. const formData = new FormData()
  371. formData.append("buNo",this.pageData.buNo)
  372. formData.append("username",this.$store.state.user.name)
  373. formData.append("file", this.fileList[0].raw)
  374. formData.append("customerName", this.pageData.customerName)
  375. formData.append("localShipAddress", this.pageData.localShipAddress)
  376. formData.append("overseasShipper", this.pageData.overseasShipper)
  377. formData.append("overseasAddress", this.pageData.overseasAddress)
  378. formData.append("cnative", this.pageData.cnative)
  379. formData.append("salesArea", this.pageData.salesArea)
  380. saveEcssCoDelNotifyByExcel(formData).then(({data}) => {
  381. if (data.code === 0) {
  382. this.$message.success(data.msg)
  383. // 关闭窗口并刷新页面
  384. this.closeDialog()
  385. } else {
  386. //this.$message.error(data.msg)
  387. this.$alert(data.msg, '错误', {
  388. confirmButtonText: '确定'
  389. })
  390. }
  391. })
  392. },
  393. // 下载
  394. async downloadFile () {
  395. let file = {
  396. id: 0,
  397. fileName: ''
  398. }
  399. let tempData = {
  400. orderRef1: 'ecss',
  401. orderRef2: 'upLoadDel'
  402. }
  403. await queryFileId(tempData).then(({data}) => {
  404. if (data && data.code === 0) {
  405. file.id = data.data.id
  406. file.fileName = data.data.fileName
  407. } else {
  408. this.$alert(data.msg, '错误', {
  409. confirmButtonText: '确定'
  410. })
  411. }
  412. })
  413. await downLoadObjectFile(file).then(({data}) => {
  414. // 不限制文件下载类型
  415. const blob = new Blob([data], {type: "application/octet-stream"})
  416. // 下载文件名称
  417. const fileName = file.fileName
  418. // a标签下载
  419. const linkNode = document.createElement('a')
  420. // a标签的download属性规定下载文件的名称
  421. linkNode.download = fileName
  422. linkNode.style.display = 'none'
  423. // 生成一个Blob URL
  424. linkNode.href = URL.createObjectURL(blob)
  425. document.body.appendChild(linkNode)
  426. // 模拟在按钮上的一次鼠标单击
  427. linkNode.click()
  428. // 释放URL 对象
  429. URL.revokeObjectURL(linkNode.href)
  430. document.body.removeChild(linkNode)
  431. })
  432. },
  433. }
  434. }
  435. </script>
  436. <style scoped>
  437. /deep/ .customer-upload .el-upload .el-upload-dragger {
  438. width: 580px;
  439. }
  440. </style>