plm前端
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.

1431 lines
48 KiB

  1. <template>
  2. <div class="mod-config">
  3. <!-- 查询条件 -->
  4. <el-form :inline="true" label-position="top" :model="searchData" @keyup.enter.native="getDataList()">
  5. <el-form-item :label="'客户编码'">
  6. <el-input v-model="searchData.customerNo" clearable style="width: 120px"></el-input>
  7. </el-form-item>
  8. <el-form-item :label="'客户名称'">
  9. <el-input v-model="searchData.customerDesc" clearable style="width: 120px"></el-input>
  10. </el-form-item>
  11. <el-form-item :label="'跟单员'">
  12. <el-input v-model="searchData.trackerName" clearable style="width: 120px"></el-input>
  13. </el-form-item>
  14. <el-form-item :label="'产品编码'">
  15. <el-input v-model="searchData.testPartNo" clearable style="width: 120px"></el-input>
  16. </el-form-item>
  17. <el-form-item :label="'产品名称'">
  18. <el-input v-model="searchData.partName" clearable style="width: 120px"></el-input>
  19. </el-form-item>
  20. <el-form-item :label="'要求交付日期'">
  21. <el-date-picker
  22. style="width: 120px"
  23. v-model="searchData.startDate"
  24. type="date"
  25. value-format="yyyy-MM-dd"
  26. placeholder="选择日期">
  27. </el-date-picker>
  28. </el-form-item>
  29. <el-form-item style="margin-top: 23px;">
  30. <laber style="margin-left: 0px;font-size: 19px">&#10142</laber>
  31. </el-form-item>
  32. <el-form-item :label="' '">
  33. <el-date-picker
  34. style="width: 120px"
  35. v-model="searchData.endDate"
  36. type="date"
  37. value-format="yyyy-MM-dd"
  38. placeholder="选择日期">
  39. </el-date-picker>
  40. </el-form-item>
  41. </el-form>
  42. <el-form :inline="true" label-position="top" :model="searchData" @keyup.enter.native="getDataList()">
  43. <el-form-item :label="'项目编码'">
  44. <el-input v-model="searchData.projectId" clearable style="width: 120px"></el-input>
  45. </el-form-item>
  46. <el-form-item :label="'项目名称'">
  47. <el-input v-model="searchData.projectName" clearable style="width: 120px"></el-input>
  48. </el-form-item>
  49. <el-form-item :label="'工程师'">
  50. <el-input v-model="searchData.engineerName" clearable style="width: 120px"></el-input>
  51. </el-form-item>
  52. <el-form-item :label="'优先等级'">
  53. <el-select v-model="searchData.priorityLevel" style="width: 120px">
  54. <el-option label="全部" value=""></el-option>
  55. <el-option label="紧急" value="紧急"></el-option>
  56. <el-option label="一般" value="一般"></el-option>
  57. <el-option label="不紧急" value="不紧急"></el-option>
  58. </el-select>
  59. </el-form-item>
  60. <el-form-item :label="'状态'">
  61. <el-select v-model="searchData.proofingStatus" style="width: 120px">
  62. <el-option label="全部" value=""></el-option>
  63. <el-option label="草稿" value="草稿"></el-option>
  64. <el-option label="下达" value="下达"></el-option>
  65. </el-select>
  66. </el-form-item>
  67. <el-form-item :label="' '">
  68. <el-button @click="getDataList()">查询</el-button>
  69. <download-excel
  70. :fields="fields()"
  71. :data="exportData"
  72. type="xls"
  73. :name="exportName"
  74. :header="exportHeader"
  75. :footer="exportFooter"
  76. :fetch="createExportData"
  77. :before-generate="startDownload"
  78. :before-finish="finishDownload"
  79. worksheet="导出信息"
  80. class="el-button el-button--primary el-button--medium">
  81. {{ "导出" }}
  82. </download-excel>
  83. </el-form-item>
  84. </el-form>
  85. <el-form :inline="true" label-position="top" :model="searchData" @keyup.enter.native="getDataList()">
  86. <el-form-item :label="' '">
  87. <el-button @click="proofingResultModal()" class="el-button el-button--primary el-button--medium">录入打样结果</el-button>
  88. <el-button @click="submitProofingModal()" class="el-button el-button--primary el-button--medium">录入送样信息</el-button>
  89. <el-button @click="customerResponseModal()" class="el-button el-button--primary el-button--medium">客户回复</el-button>
  90. </el-form-item>
  91. </el-form>
  92. <!-- 打样列表 -->
  93. <el-table
  94. :height="height"
  95. :data="dataList"
  96. border
  97. ref="proofingTable"
  98. @row-click="proofingClickRow"
  99. @selection-change="selectionProofing"
  100. v-loading="dataListLoading"
  101. style="width: 100%;">
  102. <el-table-column
  103. type="selection"
  104. header-align="center"
  105. align="center"
  106. :selectable="selectFlag"
  107. width="50">
  108. </el-table-column>
  109. <el-table-column
  110. prop="proofingResultStatus"
  111. header-align="center"
  112. align="center"
  113. label="状态">
  114. <template slot-scope="scope">
  115. <span v-show="scope.row.proofingResultStatus === 'C'">已创建</span>
  116. <span v-show="scope.row.proofingResultStatus === 'E'">已录入</span>
  117. <span v-show="scope.row.proofingResultStatus === 'S'">已送样</span>
  118. <span v-show="scope.row.proofingResultStatus === 'R'">已回复</span>
  119. </template>
  120. </el-table-column>
  121. <el-table-column
  122. v-for="(item,index) in columnList" :key="index"
  123. :sortable="item.columnSortable"
  124. :prop="item.columnProp"
  125. :header-align="item.headerAlign"
  126. :show-overflow-tooltip="item.showOverflowTooltip"
  127. :align="item.align"
  128. :fixed="item.fixed === ''?false:item.fixed"
  129. :min-width="item.columnWidth"
  130. :label="item.columnLabel">
  131. <template slot-scope="scope">
  132. <span v-if="!item.columnHidden">{{ scope.row[item.columnProp] }}</span>
  133. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
  134. </template>
  135. </el-table-column>
  136. </el-table>
  137. <selectDiv ref="selectDiv"></selectDiv>
  138. <!-- 分页插件 -->
  139. <el-pagination style="margin-top: 0px"
  140. @size-change="sizeChangeHandle"
  141. @current-change="currentChangeHandle"
  142. :current-page="pageIndex"
  143. :page-sizes="[20, 50, 100, 200, 500]"
  144. :page-size="pageSize"
  145. :total="totalPage"
  146. layout="total, sizes, prev, pager, next, jumper">
  147. </el-pagination>
  148. <!-- 录入打样结果模态框 -->
  149. <el-dialog title="录入打样结果" :close-on-click-modal="false" v-drag :visible.sync="enterResultModalFlag" width="785px">
  150. <el-form :inline="true" label-position="top" :model="enterResultData" :rules="enterResultRules" style="margin-left: 0px;margin-top: 10px;">
  151. <el-form-item label="实际交付日期" prop="actualityDeliveryDate" :rules="enterResultRules.actualityDeliveryDate">
  152. <el-date-picker v-model="enterResultData.actualityDeliveryDate" type="date" value-format="yyyy-MM-dd" placeholder="请选择日期" style="width: 200px"></el-date-picker>
  153. </el-form-item>
  154. </el-form>
  155. <el-form :inline="true" label-position="top" :model="enterResultData" :rules="enterResultRules" style="margin-left:0px;margin-top: 5px;">
  156. <el-form-item label="打样结果信息" prop="proofingResultInformation" :rules="enterResultRules.proofingResultInformation">
  157. <el-input type="textarea" v-model="enterResultData.proofingResultInformation" :rows="3" resize='none' maxlength="300" show-word-limit style="width: 500px;height: 30px"></el-input>
  158. </el-form-item>
  159. </el-form>
  160. <el-form :inline="true" label-position="top" :model="enterResultData" style="margin-left: 0px;margin-top: 60px;">
  161. <el-form :inline="true" label-position="top" style="margin-top: 5px">
  162. <el-button type="primary" @click="uploadFile()">上传文件</el-button>
  163. </el-form>
  164. <el-table
  165. :height="200"
  166. :data="enterResultData.fileContentList"
  167. border
  168. v-loading="dataListLoading"
  169. style="width: 100%">
  170. <el-table-column
  171. v-for="(item,index) in fileColumnList" :key="index"
  172. :sortable="item.columnSortable"
  173. :prop="item.columnProp"
  174. :header-align="item.headerAlign"
  175. :show-overflow-tooltip="item.showOverflowTooltip"
  176. :align="item.align"
  177. :fixed="item.fixed===''?false:item.fixed"
  178. :min-width="item.columnWidth"
  179. :label="item.columnLabel">
  180. <template slot-scope="scope">
  181. <span v-if="!item.columnHidden">{{scope.row[item.columnProp]}}</span>
  182. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
  183. </template>
  184. </el-table-column>
  185. <el-table-column
  186. fixed="right"
  187. header-align="center"
  188. align="center"
  189. width="100"
  190. label="操作">
  191. <template slot-scope="scope">
  192. <a @click="deleteFile(scope.row)">删除</a>
  193. </template>
  194. </el-table-column>
  195. </el-table>
  196. </el-form>
  197. <el-footer style="height:40px;margin-top: 10px;text-align:center">
  198. <el-button type="primary" @click="saveProofingResult()">保存</el-button>
  199. <el-button type="primary" @click="closeProofingResultModal()">关闭</el-button>
  200. </el-footer>
  201. </el-dialog>
  202. <!-- 录入送样信息模态框 -->
  203. <el-dialog title="录入送样信息" :close-on-click-modal="false" v-drag :visible.sync="submitResultModalFlag" width="620px">
  204. <el-form :inline="true" label-position="top" :model="submitResultData" :rules="submitResultRules" style="margin-left: 0px;margin-top: 10px;">
  205. <el-form-item label="实际提交客户日期" prop="actualitySubmissionDate" :rules="submitResultRules.actualitySubmissionDate">
  206. <el-date-picker v-model="submitResultData.actualitySubmissionDate" type="date" value-format="yyyy-MM-dd" placeholder="请选择日期" style="width: 200px"></el-date-picker>
  207. </el-form-item>
  208. <el-form-item label="提交方式" prop="submissionMethod" :rules="submitResultRules.submissionMethod">
  209. <el-select v-model="submitResultData.submissionMethod" style="width: 221px">
  210. <el-option label="邮件" value="邮件"></el-option>
  211. <el-option label="口头" value="口头"></el-option>
  212. <el-option label="微信" value="微信"></el-option>
  213. <el-option label="其它" value="其它"></el-option>
  214. </el-select>
  215. </el-form-item>
  216. </el-form>
  217. <el-form :inline="true" label-position="top" :model="submitResultData" style="margin-left:0px;margin-top: 5px;">
  218. <el-form-item label="提交备注">
  219. <el-input type="textarea" v-model="submitResultData.submissionRemark" :rows="3" resize='none' maxlength="300" show-word-limit style="width: 456px;height: 30px"></el-input>
  220. </el-form-item>
  221. </el-form>
  222. <el-footer style="height:40px;margin-top: 60px;text-align:center">
  223. <el-button type="primary" @click="saveSubmitResult()">保存</el-button>
  224. <el-button type="primary" @click="submitResultModalFlag = false">关闭</el-button>
  225. </el-footer>
  226. </el-dialog>
  227. <!-- 客户回复模态框 -->
  228. <el-dialog title="客户回复" :close-on-click-modal="false" v-drag :visible.sync="customerResponseModalFlag" width="620px">
  229. <el-form :inline="true" label-position="top" :model="customerResponseData" :rules="customerResponseRules" style="margin-left: 0px;margin-top: 10px;">
  230. <el-form-item label="实际回复日期" prop="actualityReplyDate" :rules="customerResponseRules.actualityReplyDate">
  231. <el-date-picker v-model="customerResponseData.actualityReplyDate" type="date" value-format="yyyy-MM-dd" placeholder="请选择日期" style="width: 185px"></el-date-picker>
  232. </el-form-item>
  233. <el-form-item label="客户确认结果" prop="confirmResults" :rules="customerResponseRules.confirmResults">
  234. <el-select v-model="customerResponseData.confirmResults" style="width: 185px">
  235. <el-option label="接受" value="接受"></el-option>
  236. <el-option label="不接受" value="不接受"></el-option>
  237. </el-select>
  238. </el-form-item>
  239. <el-form-item label="客户确认人" prop="confirmBy" :rules="customerResponseRules.confirmBy">
  240. <el-input v-model="customerResponseData.confirmBy" style="width: 185px"></el-input>
  241. </el-form-item>
  242. </el-form>
  243. <el-form :inline="true" label-position="top" :model="customerResponseData" style="margin-left:0px;margin-top: 5px;">
  244. <el-form-item label="客户回复信息">
  245. <el-input type="textarea" v-model="customerResponseData.confirmInformation" :rows="3" resize='none' maxlength="300" show-word-limit style="width: 595px;height: 30px"></el-input>
  246. </el-form-item>
  247. </el-form>
  248. <el-footer style="height:40px;margin-top: 60px;text-align:center">
  249. <el-button type="primary" @click="saveCustomerResponse()">保存</el-button>
  250. <el-button type="primary" @click="customerResponseModalFlag = false">关闭</el-button>
  251. </el-footer>
  252. </el-dialog>
  253. <!-- 上传文件的modal -->
  254. <proofingUploadFile ref="proofingUploadFile" @refreshPageTables="getFileContentData()" v-drag></proofingUploadFile>
  255. </div>
  256. </template>
  257. <script>
  258. import {
  259. proofingInformationSearch, // 打样信息列表查询
  260. getFileContentList, // 获取报价单附件列表
  261. batchDeleteQuotationFile, // 批量文件删除
  262. saveProofingResult, // 保存打样结果
  263. saveSubmitResult, // 保存提交结果
  264. saveCustomerResponse, // 保存客户回复
  265. checkProofingStatus, // 检查打样进度
  266. closeModalDeleteFile, // 关闭模态框删除文件
  267. } from '@/api/proofing/proofingInformation.js'
  268. import proofingUploadFile from "./proofing_upload_file"
  269. export default {
  270. components: {
  271. proofingUploadFile
  272. },
  273. watch: {
  274. searchData: {
  275. deep: true,
  276. handler: function (newV, oldV) {
  277. this.searchData.customerNo = this.searchData.customerNo.toUpperCase()
  278. this.searchData.projectId = this.searchData.projectId.toUpperCase()
  279. }
  280. },
  281. modalData: {
  282. deep: true,
  283. handler: function (newV, oldV) {
  284. this.modalData.customerNo = this.modalData.customerNo.toUpperCase()
  285. this.modalData.projectId = this.modalData.projectId.toUpperCase()
  286. this.modalData.proofingNo = this.modalData.proofingNo.toUpperCase()
  287. }
  288. }
  289. },
  290. data () {
  291. return {
  292. // 导出
  293. exportData: [],
  294. exportName: '设备分类' + this.dayjs().format('YYYYMMDDHHmmss'),
  295. exportHeader: ['设备分类'],
  296. exportFooter: [],
  297. resultList: [],
  298. // ======== 行高 ========
  299. height: 200,
  300. // ======== 分页 ========
  301. pageIndex: 1,
  302. pageSize: 50,
  303. totalPage: 0,
  304. selectedDataNum: 0,
  305. // 条件查询
  306. searchData: {
  307. site: this.$store.state.user.site,
  308. customerNo: '',
  309. customerDesc: '',
  310. trackerName: '',
  311. testPartNo: '',
  312. partName: '',
  313. proofingStatus: '',
  314. startDate: '',
  315. endDate: '',
  316. projectId: '',
  317. projectName: '',
  318. engineerName: '',
  319. priorityLevel: '',
  320. page: 1,
  321. limit: 10
  322. },
  323. // 其它
  324. dataListLoading: false,
  325. // ======== 数据对象 ========
  326. modalData: {
  327. flag: '',
  328. title: '',
  329. site: this.$store.state.user.site,
  330. quotationNo: '',
  331. customerNo: '',
  332. customerDesc: '',
  333. projectId: '',
  334. projectName: '',
  335. tracker: '',
  336. trackerName: '',
  337. quoter: '',
  338. quoterName: '',
  339. quotationStatus: '',
  340. testPartNo: '',
  341. partName: '',
  342. priorityLevel: '',
  343. requiredCompletionDate: '',
  344. remark: '',
  345. technicalConsiderations: '',
  346. customerResponsiblePerson: '',
  347. customerResponsiblePersonPhone: '',
  348. nextToDo: '',
  349. actualityQuotationDate: '',
  350. quotationResultInformation: '',
  351. actualitySubmissionDate: '',
  352. submissionMethod: '',
  353. submissionRemark: '',
  354. actualityReplyDate: '',
  355. confirmResults: '',
  356. confirmBy: '',
  357. confirmInformation: '',
  358. proofingResultStatus: '',
  359. createDate: '',
  360. createBy: '',
  361. updateDate: '',
  362. updateBy: ''
  363. },
  364. quotationResultData: {
  365. actualityQuotationDate: '',
  366. quotationResultInformation: '',
  367. actualitySubmissionDate: '',
  368. submissionMethod: '',
  369. submissionRemark: '',
  370. confirmResults: '',
  371. actualityReplyDate: '',
  372. confirmBy: '',
  373. confirmInformation: '',
  374. proofingResultStatus: '',
  375. },
  376. enterResultData: {
  377. site: this.$store.state.user.site,
  378. proofingNo: '',
  379. actualityDeliveryDate: '',
  380. proofingResultInformation: '',
  381. updateBy: this.$store.state.user.name,
  382. proofingResultStatus: '',
  383. fileContentList: []
  384. },
  385. submitResultData: {
  386. site: this.$store.state.user.site,
  387. quotationNo: '',
  388. actualitySubmissionDate: '',
  389. submissionMethod: '',
  390. submissionRemark: '',
  391. updateBy: this.$store.state.user.name,
  392. proofingResultStatus: ''
  393. },
  394. customerResponseData: {
  395. site: this.$store.state.user.site,
  396. quotationNo: '',
  397. actualityReplyDate: '',
  398. confirmResults: '',
  399. confirmBy: '',
  400. confirmInformation: '',
  401. updateBy: this.$store.state.user.name,
  402. proofingResultStatus: ''
  403. },
  404. // ======== 数据列表 ========
  405. dataList: [],
  406. // ======== 列表表头 ========
  407. columnList: [
  408. {
  409. userId: this.$store.state.user.name,
  410. functionId: 103001,
  411. serialNumber: '103001Table1ProofingNo',
  412. tableId: '103001Table1',
  413. tableName: '打样信息表',
  414. columnProp: 'proofingNo',
  415. headerAlign: 'center',
  416. align: 'center',
  417. columnLabel: '打样单号',
  418. columnHidden: false,
  419. columnImage: false,
  420. columnSortable: false,
  421. sortLv: 0,
  422. status: true,
  423. fixed: '',
  424. columnWidth: 120
  425. },
  426. {
  427. userId: this.$store.state.user.name,
  428. functionId: 103001,
  429. serialNumber: '103001Table1CustomerNo',
  430. tableId: '103001Table1',
  431. tableName: '打样信息表',
  432. columnProp: 'customerNo',
  433. headerAlign: 'center',
  434. align: 'center',
  435. columnLabel: '客户编码',
  436. columnHidden: false,
  437. columnImage: false,
  438. columnSortable: false,
  439. sortLv: 0,
  440. status: true,
  441. fixed: '',
  442. columnWidth: 100
  443. },
  444. {
  445. userId: this.$store.state.user.name,
  446. functionId: 103001,
  447. serialNumber: '103001Table1CustomerDesc',
  448. tableId: '103001Table1',
  449. tableName: '打样信息表',
  450. columnProp: 'customerDesc',
  451. headerAlign: 'center',
  452. align: 'center',
  453. columnLabel: '客户名称',
  454. columnHidden: false,
  455. columnImage: false,
  456. columnSortable: false,
  457. sortLv: 0,
  458. status: true,
  459. fixed: '',
  460. columnWidth: 120
  461. },
  462. {
  463. userId: this.$store.state.user.name,
  464. functionId: 103001,
  465. serialNumber: '103001Table1ProjectId',
  466. tableId: '103001Table1',
  467. tableName: '打样信息表',
  468. columnProp: 'projectId',
  469. headerAlign: 'center',
  470. align: 'center',
  471. columnLabel: '项目编码',
  472. columnHidden: false,
  473. columnImage: false,
  474. columnSortable: false,
  475. sortLv: 0,
  476. status: true,
  477. fixed: '',
  478. columnWidth: 100
  479. },
  480. {
  481. userId: this.$store.state.user.name,
  482. functionId: 103001,
  483. serialNumber: '103001Table1ProjectName',
  484. tableId: '103001Table1',
  485. tableName: '打样信息表',
  486. columnProp: 'projectName',
  487. headerAlign: 'center',
  488. align: 'center',
  489. columnLabel: '项目名称',
  490. columnHidden: false,
  491. columnImage: false,
  492. columnSortable: false,
  493. sortLv: 0,
  494. status: true,
  495. fixed: '',
  496. columnWidth: 120
  497. },
  498. {
  499. userId: this.$store.state.user.name,
  500. functionId: 103001,
  501. serialNumber: '103001Table1TrackerName',
  502. tableId: '103001Table1',
  503. tableName: '打样信息表',
  504. columnProp: 'trackerName',
  505. headerAlign: 'center',
  506. align: 'center',
  507. columnLabel: '跟单员',
  508. columnHidden: false,
  509. columnImage: false,
  510. columnSortable: false,
  511. sortLv: 0,
  512. status: true,
  513. fixed: '',
  514. columnWidth: 80
  515. },
  516. {
  517. userId: this.$store.state.user.name,
  518. functionId: 103001,
  519. serialNumber: '103001Table1EngineerName',
  520. tableId: '103001Table1',
  521. tableName: '打样信息表',
  522. columnProp: 'engineerName',
  523. headerAlign: 'center',
  524. align: 'center',
  525. columnLabel: '工程师',
  526. columnHidden: false,
  527. columnImage: false,
  528. columnSortable: false,
  529. sortLv: 0,
  530. status: true,
  531. fixed: '',
  532. columnWidth: 80
  533. },
  534. {
  535. userId: this.$store.state.user.name,
  536. functionId: 103001,
  537. serialNumber: '103001Table1TestPartNo',
  538. tableId: '103001Table1',
  539. tableName: '打样信息表',
  540. columnProp: 'testPartNo',
  541. headerAlign: 'center',
  542. align: 'center',
  543. columnLabel: '项目料号',
  544. columnHidden: false,
  545. columnImage: false,
  546. columnSortable: false,
  547. sortLv: 0,
  548. status: true,
  549. fixed: '',
  550. columnWidth: 100
  551. },
  552. {
  553. userId: this.$store.state.user.name,
  554. functionId: 103001,
  555. serialNumber: '103001Table1PartName',
  556. tableId: '103001Table1',
  557. tableName: '打样信息表',
  558. columnProp: 'partName',
  559. headerAlign: 'center',
  560. align: 'center',
  561. columnLabel: '物料名称',
  562. columnHidden: false,
  563. columnImage: false,
  564. columnSortable: false,
  565. sortLv: 0,
  566. status: true,
  567. fixed: '',
  568. columnWidth: 100
  569. },
  570. {
  571. userId: this.$store.state.user.name,
  572. functionId: 103001,
  573. serialNumber: '103001Table1PriorityLevel',
  574. tableId: '103001Table1',
  575. tableName: '打样信息表',
  576. columnProp: 'priorityLevel',
  577. headerAlign: 'center',
  578. align: 'center',
  579. columnLabel: '优先等级',
  580. columnHidden: false,
  581. columnImage: false,
  582. columnSortable: false,
  583. sortLv: 0,
  584. status: true,
  585. fixed: '',
  586. columnWidth: 80
  587. },
  588. {
  589. userId: this.$store.state.user.name,
  590. functionId: 103001,
  591. serialNumber: '103001Table1ProofingNumber',
  592. tableId: '103001Table1',
  593. tableName: '打样信息表',
  594. columnProp: 'proofingNumber',
  595. headerAlign: 'center',
  596. align: 'center',
  597. columnLabel: '打样数量',
  598. columnHidden: false,
  599. columnImage: false,
  600. columnSortable: false,
  601. sortLv: 0,
  602. status: true,
  603. fixed: '',
  604. columnWidth: 80
  605. },
  606. {
  607. userId: this.$store.state.user.name,
  608. functionId: 103001,
  609. serialNumber: '103001Table1RequiredDeliveryDate',
  610. tableId: '103001Table1',
  611. tableName: '打样信息表',
  612. columnProp: 'requiredDeliveryDate',
  613. headerAlign: 'center',
  614. align: 'center',
  615. columnLabel: '要求交付日期',
  616. columnHidden: false,
  617. columnImage: false,
  618. columnSortable: false,
  619. sortLv: 0,
  620. status: true,
  621. fixed: '',
  622. columnWidth: 160
  623. },
  624. {
  625. userId: this.$store.state.user.name,
  626. functionId: 103001,
  627. serialNumber: '103001Table1ProofingStatus',
  628. tableId: '103001Table1',
  629. tableName: '打样信息表',
  630. columnProp: 'proofingStatus',
  631. headerAlign: 'center',
  632. align: 'center',
  633. columnLabel: '状态',
  634. columnHidden: false,
  635. columnImage: false,
  636. columnSortable: false,
  637. sortLv: 0,
  638. status: true,
  639. fixed: '',
  640. columnWidth: 80
  641. },
  642. {
  643. userId: this.$store.state.user.name,
  644. functionId: 103001,
  645. serialNumber: '103001Table1CreateDate',
  646. tableId: '103001Table1',
  647. tableName: '打样信息表',
  648. columnProp: 'createDate',
  649. headerAlign: 'center',
  650. align: 'center',
  651. columnLabel: '创建时间',
  652. columnHidden: false,
  653. columnImage: false,
  654. columnSortable: false,
  655. sortLv: 0,
  656. status: true,
  657. fixed: '',
  658. columnWidth: 160
  659. },
  660. {
  661. userId: this.$store.state.user.name,
  662. functionId: 103001,
  663. serialNumber: '103001Table1CreateBy',
  664. tableId: '103001Table1',
  665. tableName: '打样信息表',
  666. columnProp: 'createBy',
  667. headerAlign: 'center',
  668. align: 'center',
  669. columnLabel: '创建人',
  670. columnHidden: false,
  671. columnImage: false,
  672. columnSortable: false,
  673. sortLv: 0,
  674. status: true,
  675. fixed: '',
  676. columnWidth: 80
  677. },
  678. {
  679. userId: this.$store.state.user.name,
  680. functionId: 103001,
  681. serialNumber: '103001Table1UpdateDate',
  682. tableId: '103001Table1',
  683. tableName: '打样信息表',
  684. columnProp: 'updateDate',
  685. headerAlign: 'center',
  686. align: 'center',
  687. columnLabel: '更新时间',
  688. columnHidden: false,
  689. columnImage: false,
  690. columnSortable: false,
  691. sortLv: 0,
  692. status: true,
  693. fixed: '',
  694. columnWidth: 160
  695. },
  696. {
  697. userId: this.$store.state.user.name,
  698. functionId: 103001,
  699. serialNumber: '103001Table1UpdateBy',
  700. tableId: '103001Table1',
  701. tableName: '打样信息表',
  702. columnProp: 'updateBy',
  703. headerAlign: 'center',
  704. align: 'center',
  705. columnLabel: '更新人',
  706. columnHidden: false,
  707. columnImage: false,
  708. columnSortable: false,
  709. sortLv: 0,
  710. status: true,
  711. fixed: '',
  712. columnWidth: 80
  713. }
  714. ],
  715. fileColumnList: [
  716. {
  717. userId: this.$store.state.user.name,
  718. functionId: 102001,
  719. serialNumber: '102001Table2FileName',
  720. tableId: '102001Table2',
  721. tableName: '文件信息表',
  722. columnProp: 'fileName',
  723. headerAlign: 'center',
  724. align: 'center',
  725. columnLabel: '文件名称',
  726. columnHidden: false,
  727. columnImage: false,
  728. columnSortable: false,
  729. sortLv: 0,
  730. status: true,
  731. fixed: '',
  732. columnWidth: 140
  733. },
  734. {
  735. userId: this.$store.state.user.name,
  736. functionId: 102001,
  737. serialNumber: '102001Table2FileRemark',
  738. tableId: '102001Table2',
  739. tableName: '文件信息表',
  740. columnProp: 'fileRemark',
  741. headerAlign: 'center',
  742. align: 'center',
  743. columnLabel: '备注',
  744. columnHidden: false,
  745. columnImage: false,
  746. columnSortable: false,
  747. sortLv: 0,
  748. status: true,
  749. fixed: '',
  750. columnWidth: 240
  751. },
  752. // {
  753. // userId: this.$store.state.user.name,
  754. // functionId: 102001,
  755. // serialNumber: '102001Table2OrderRef3',
  756. // tableId: '102001Table2',
  757. // tableName: '文件信息表',
  758. // columnProp: 'orderRef3',
  759. // headerAlign: 'center',
  760. // align: 'center',
  761. // columnLabel: '文件描述',
  762. // columnHidden: false,
  763. // columnImage: false,
  764. // columnSortable: false,
  765. // sortLv: 0,
  766. // status: true,
  767. // fixed: '',
  768. // columnWidth: 120
  769. // },
  770. {
  771. userId: this.$store.state.user.name,
  772. functionId: 102001,
  773. serialNumber: '102001Table2CreateDate',
  774. tableId: '102001Table2',
  775. tableName: '文件信息表',
  776. columnProp: 'createDate',
  777. headerAlign: 'center',
  778. align: 'center',
  779. columnLabel: '上传时间',
  780. columnHidden: false,
  781. columnImage: false,
  782. columnSortable: false,
  783. sortLv: 0,
  784. status: true,
  785. fixed: '',
  786. columnWidth: 140
  787. },
  788. {
  789. userId: this.$store.state.user.name,
  790. functionId: 102001,
  791. serialNumber: '102001Table2CreatedBy',
  792. tableId: '102001Table2',
  793. tableName: '文件信息表',
  794. columnProp: 'createdBy',
  795. headerAlign: 'center',
  796. align: 'center',
  797. columnLabel: '上传人',
  798. columnHidden: false,
  799. columnImage: false,
  800. columnSortable: false,
  801. sortLv: 0,
  802. status: true,
  803. fixed: '',
  804. columnWidth: 140
  805. }
  806. ],
  807. // ======== 必填规则 ========
  808. rules: {
  809. customerDesc: [
  810. {
  811. required: true,
  812. message: ' ',
  813. trigger: 'change'
  814. }
  815. ],
  816. trackerName: [
  817. {
  818. required: true,
  819. message: ' ',
  820. trigger: 'change'
  821. }
  822. ],
  823. projectName: [
  824. {
  825. required: true,
  826. message: ' ',
  827. trigger: 'change'
  828. }
  829. ],
  830. quoterName: [
  831. {
  832. required: true,
  833. message: ' ',
  834. trigger: 'change'
  835. }
  836. ],
  837. partName: [
  838. {
  839. required: true,
  840. message: ' ',
  841. trigger: 'change'
  842. }
  843. ],
  844. priorityLevel: [
  845. {
  846. required: true,
  847. message: ' ',
  848. trigger: 'change'
  849. }
  850. ],
  851. requiredCompletionDate: [
  852. {
  853. required: true,
  854. message: ' ',
  855. trigger: 'change'
  856. }
  857. ]
  858. },
  859. enterResultRules: {
  860. actualityDeliveryDate: [
  861. {
  862. required: true,
  863. message: ' ',
  864. trigger: 'change'
  865. }
  866. ],
  867. proofingResultInformation: [
  868. {
  869. required: true,
  870. message: ' ',
  871. trigger: 'change'
  872. }
  873. ]
  874. },
  875. submitResultRules: {
  876. actualitySubmissionDate: [
  877. {
  878. required: true,
  879. message: ' ',
  880. trigger: 'change'
  881. }
  882. ],
  883. submissionMethod: [
  884. {
  885. required: true,
  886. message: ' ',
  887. trigger: 'change'
  888. }
  889. ]
  890. },
  891. customerResponseRules: {
  892. actualityReplyDate: [
  893. {
  894. required: true,
  895. message: ' ',
  896. trigger: 'change'
  897. }
  898. ],
  899. confirmResults: [
  900. {
  901. required: true,
  902. message: ' ',
  903. trigger: 'change'
  904. }
  905. ],
  906. confirmBy: [
  907. {
  908. required: true,
  909. message: ' ',
  910. trigger: 'change'
  911. }
  912. ]
  913. },
  914. // ======== 复选数据集 ========
  915. proofingSelections: [],
  916. // ======== 选中的当前行数据 ========
  917. proofingCurrentRow: {},
  918. // ======== 模态框开关控制 ========
  919. modalFlag: false,
  920. modalDisableFlag: false,
  921. enterResultModalFlag: false,
  922. submitResultModalFlag: false,
  923. customerResponseModalFlag: false,
  924. }
  925. },
  926. mounted () {
  927. this.$nextTick(() => {
  928. this.height = window.innerHeight - 210
  929. })
  930. },
  931. created () {
  932. this.getDataList()
  933. },
  934. methods: {
  935. // ======== 分页相关方法 ========
  936. /**
  937. * 每页数
  938. * @param val
  939. */
  940. sizeChangeHandle (val) {
  941. this.pageSize = val
  942. this.pageIndex = 1
  943. this.getDataList()
  944. },
  945. /**
  946. * 当前页
  947. * @param val
  948. */
  949. currentChangeHandle (val) {
  950. this.pageIndex = val
  951. this.getDataList()
  952. },
  953. // ======== 复选框操作相关方法 ========
  954. /**
  955. * 未知
  956. * @returns {boolean}
  957. */
  958. selectFlag () {
  959. return true;
  960. },
  961. // ======== 列表数据刷新方法 ========
  962. /**
  963. * 获取数据列表
  964. */
  965. getDataList () {
  966. this.searchData.limit = this.pageSize
  967. this.searchData.page = this.pageIndex
  968. proofingInformationSearch(this.searchData).then(({data}) => {
  969. if (data.code === 0) {
  970. this.dataList = data.page.list
  971. this.pageIndex = data.page.currPage
  972. this.pageSize = data.page.pageSize
  973. this.totalPage = data.page.totalCount
  974. this.$refs.selectDiv.setLengthAll( this.dataList.length)
  975. // 判断是否全部存在数据
  976. if(this.totalPage > 0){
  977. // 设置选中行
  978. this.$refs.proofingTable.setCurrentRow(this.dataList[0])
  979. this.proofingClickRow(this.dataList[0])
  980. }
  981. }
  982. this.dataListLoading = false
  983. })
  984. },
  985. // ======== 列表操作方法 ========
  986. /**
  987. * 单机选中打样信息
  988. * @param row
  989. */
  990. proofingClickRow (row) {
  991. this.$refs.proofingTable.toggleRowSelection(row)
  992. this.proofingCurrentRow = JSON.parse(JSON.stringify(row))
  993. },
  994. /**
  995. * 复选打样信息
  996. * @param val
  997. */
  998. selectionProofing (val) {
  999. this.proofingSelections = val
  1000. this.$refs.selectDiv.setLengthselected(this.proofingSelections.length)
  1001. },
  1002. // ======== 报价结果相关方法 ========
  1003. /**
  1004. * 录入打样结果
  1005. */
  1006. proofingResultModal () {
  1007. // 判断是否选中打样单
  1008. if (this.proofingSelections == null || this.proofingSelections.length <= 0) {
  1009. this.$message.warning('请勾选打样单!')
  1010. return
  1011. }
  1012. let tempData = {
  1013. currentStatus: 'C',
  1014. informationList: this.proofingSelections,
  1015. }
  1016. // 检查打样单状态
  1017. checkProofingStatus(tempData).then(({data}) => {
  1018. if (data && data.code === 0) {
  1019. if (data.flag === 1) { // 状态一致
  1020. this.packProofingResultModal()
  1021. } else { // 状态不同
  1022. this.$message.warning('选中的打样单进度不一致或与按钮不符,请确认!')
  1023. }
  1024. } else {
  1025. this.$alert(data.msg, '错误', {
  1026. confirmButtonText: '确定'
  1027. })
  1028. }
  1029. })
  1030. },
  1031. /**
  1032. * 封装录入方法
  1033. */
  1034. packProofingResultModal () {
  1035. // 重置对象
  1036. this.enterResultData = {
  1037. site: this.$store.state.user.site,
  1038. proofingNo: '',
  1039. actualityDeliveryDate: '',
  1040. proofingResultInformation: '',
  1041. proofingResultStatus: 'E',
  1042. fileContentList: [],
  1043. updateBy: this.$store.state.user.name
  1044. }
  1045. // 获得选中的打样号
  1046. this.proofingSelections.forEach(val => {
  1047. this.enterResultData.proofingNo += ';' + val.proofingNo
  1048. })
  1049. this.enterResultData.proofingNo = this.enterResultData.proofingNo.substring(1)
  1050. this.enterResultModalFlag = true
  1051. },
  1052. /**
  1053. * 保存打样结果
  1054. */
  1055. saveProofingResult () {
  1056. if (this.enterResultData.actualityDeliveryDate === '' || this.enterResultData.actualityDeliveryDate == null) {
  1057. this.$message.warning('请选择实际交付日期!')
  1058. return
  1059. }
  1060. if (this.enterResultData.proofingResultInformation === '' || this.enterResultData.proofingResultInformation == null) {
  1061. this.$message.warning('请填写打样结果信息!')
  1062. return
  1063. }
  1064. if (this.proofingSelections.length > 1) {
  1065. this.$confirm(`是否录入多条打样结果?`, '提示', {
  1066. confirmButtonText: '确定',
  1067. cancelButtonText: '取消',
  1068. type: 'warning'
  1069. }).then(() => {
  1070. saveProofingResult(this.enterResultData).then(({data}) => {
  1071. if (data && data.code === 0) {
  1072. this.getDataList()
  1073. this.enterResultModalFlag = false
  1074. this.$message({
  1075. message: '操作成功',
  1076. type: 'success',
  1077. duration: 1500,
  1078. onClose: () => {}
  1079. })
  1080. } else {
  1081. this.$alert(data.msg, '错误', {
  1082. confirmButtonText: '确定'
  1083. })
  1084. }
  1085. })
  1086. }).catch(() => {
  1087. })
  1088. } else {
  1089. saveProofingResult(this.enterResultData).then(({data}) => {
  1090. if (data && data.code === 0) {
  1091. this.getDataList()
  1092. this.enterResultModalFlag = false
  1093. this.$message({
  1094. message: '操作成功',
  1095. type: 'success',
  1096. duration: 1500,
  1097. onClose: () => {}
  1098. })
  1099. } else {
  1100. this.$alert(data.msg, '错误', {
  1101. confirmButtonText: '确定'
  1102. })
  1103. }
  1104. })
  1105. }
  1106. },
  1107. /**
  1108. * 关闭报价结果模态框
  1109. */
  1110. closeProofingResultModal () {
  1111. // 删除已上传的文件
  1112. let tempData = {
  1113. orderRef1: this.enterResultData.site,
  1114. proofingNo: this.enterResultData.proofingNo
  1115. }
  1116. closeModalDeleteFile(tempData).then(({data}) => {
  1117. if (data && data.code === 0) {
  1118. this.enterResultModalFlag = false
  1119. } else {
  1120. this.$alert(data.msg, '错误', {
  1121. confirmButtonText: '确定'
  1122. })
  1123. }
  1124. })
  1125. },
  1126. /**
  1127. * 录入送样信息
  1128. */
  1129. submitProofingModal () {
  1130. // 判断是否选中打样单
  1131. if (this.proofingSelections == null || this.proofingSelections.length <= 0) {
  1132. this.$message.warning('请勾选打样单!')
  1133. return
  1134. }
  1135. let tempData = {
  1136. currentStatus: 'E',
  1137. informationList: this.proofingSelections,
  1138. }
  1139. // 检查打样单状态
  1140. checkProofingStatus(tempData).then(({data}) => {
  1141. if (data && data.code === 0) {
  1142. if (data.flag === 1) { // 状态一致
  1143. this.packSubmitProofingModal()
  1144. } else { // 状态不同
  1145. this.$message.warning('选中的打样单进度不一致或与按钮不符,请确认!')
  1146. }
  1147. } else {
  1148. this.$alert(data.msg, '错误', {
  1149. confirmButtonText: '确定'
  1150. })
  1151. }
  1152. })
  1153. },
  1154. /**
  1155. * 封装送样方法
  1156. */
  1157. packSubmitProofingModal () {
  1158. this.submitResultData = {
  1159. site: this.$store.state.user.site,
  1160. proofingNo: '',
  1161. actualitySendSamplesDate: '',
  1162. sendSamplesMethod: '',
  1163. deliverGoodsInformation: '',
  1164. deliverGoodsRemark: '',
  1165. proofingResultStatus: 'S',
  1166. updateBy: this.$store.state.user.name,
  1167. }
  1168. // 获得选中的打样号
  1169. this.proofingSelections.forEach(val => {
  1170. this.submitResultData.proofingNo += ';' + val.proofingNo
  1171. })
  1172. this.submitResultData.proofingNo = this.submitResultData.proofingNo.substring(1)
  1173. this.submitResultModalFlag = true
  1174. },
  1175. /**
  1176. * 保存送样结果
  1177. */
  1178. saveSubmitResult () {
  1179. if (this.submitResultData.actualitySendSamplesDate === '' || this.submitResultData.actualitySendSamplesDate == null) {
  1180. this.$message.warning('请选择实际送样日期!')
  1181. return
  1182. }
  1183. if (this.submitResultData.sendSamplesMethod === '' || this.submitResultData.sendSamplesMethod == null) {
  1184. this.$message.warning('请选择提交方式!')
  1185. return
  1186. }
  1187. if (this.proofingSelections.length > 1) {
  1188. this.$confirm(`是否录入多条送样信息?`, '提示', {
  1189. confirmButtonText: '确定',
  1190. cancelButtonText: '取消',
  1191. type: 'warning'
  1192. }).then(() => {
  1193. saveSubmitResult(this.submitResultData).then(({data}) => {
  1194. if (data && data.code === 0) {
  1195. this.getDataList()
  1196. this.submitResultModalFlag = false
  1197. this.$message({
  1198. message: '操作成功',
  1199. type: 'success',
  1200. duration: 1500,
  1201. onClose: () => {}
  1202. })
  1203. } else {
  1204. this.$alert(data.msg, '错误', {
  1205. confirmButtonText: '确定'
  1206. })
  1207. }
  1208. })
  1209. }).catch(() => {
  1210. })
  1211. }
  1212. },
  1213. /**
  1214. * 客户回复
  1215. */
  1216. customerResponseModal () {
  1217. // 判断是否选中打样单
  1218. if (this.proofingSelections == null || this.proofingSelections.length <= 0) {
  1219. this.$message.warning('请勾选打样单!')
  1220. return
  1221. }
  1222. let tempData = {
  1223. currentStatus: 'S',
  1224. informationList: this.proofingSelections,
  1225. }
  1226. // 检查打样单状态
  1227. checkProofingStatus(tempData).then(({data}) => {
  1228. if (data && data.code === 0) {
  1229. if (data.flag === 1) { // 状态一致
  1230. this.packCustomerResponseModal()
  1231. } else { // 状态不同
  1232. this.$message.warning('选中的打样单进度不一致或与按钮不符,请确认!')
  1233. }
  1234. } else {
  1235. this.$alert(data.msg, '错误', {
  1236. confirmButtonText: '确定'
  1237. })
  1238. }
  1239. })
  1240. },
  1241. /**
  1242. * 封装回复方法
  1243. */
  1244. packCustomerResponseModal () {
  1245. this.customerResponseData = {
  1246. site: this.$store.state.user.site,
  1247. proofingNo: '',
  1248. actualityReplyDate: '',
  1249. confirmResults: '',
  1250. confirmBy: '',
  1251. confirmInformation: '',
  1252. proofingResultStatus: 'R',
  1253. updateBy: this.$store.state.user.name
  1254. }
  1255. // 获得选中的打样号
  1256. this.proofingSelections.forEach(val => {
  1257. this.customerResponseData.proofingNo += ';' + val.proofingNo
  1258. })
  1259. this.customerResponseData.proofingNo = this.customerResponseData.proofingNo.substring(1)
  1260. this.customerResponseModalFlag = true
  1261. },
  1262. /**
  1263. * 保存客户回复
  1264. */
  1265. saveCustomerResponse () {
  1266. if (this.customerResponseData.actualityReplyDate === '' || this.customerResponseData.actualityReplyDate == null) {
  1267. this.$message.warning('请选择实际回复日期!')
  1268. return
  1269. }
  1270. if (this.customerResponseData.confirmResults === '' || this.customerResponseData.confirmResults == null) {
  1271. this.$message.warning('请选择客户确认结果!')
  1272. return
  1273. }
  1274. if (this.customerResponseData.confirmBy === '' || this.customerResponseData.confirmBy == null) {
  1275. this.$message.warning('请填写客户确认人!')
  1276. return
  1277. }
  1278. if (this.proofingSelections.length > 1) {
  1279. this.$confirm(`是否提交多条客户回复?`, '提示', {
  1280. confirmButtonText: '确定',
  1281. cancelButtonText: '取消',
  1282. type: 'warning'
  1283. }).then(() => {
  1284. saveCustomerResponse(this.customerResponseData).then(({data}) => {
  1285. if (data && data.code === 0) {
  1286. this.getDataList()
  1287. this.customerResponseModalFlag = false
  1288. this.$message({
  1289. message: '操作成功',
  1290. type: 'success',
  1291. duration: 1500,
  1292. onClose: () => {}
  1293. })
  1294. } else {
  1295. this.$alert(data.msg, '错误', {
  1296. confirmButtonText: '确定'
  1297. })
  1298. }
  1299. })
  1300. }).catch(() => {
  1301. })
  1302. }
  1303. },
  1304. // ======== 报价单附件的相关方法 ========
  1305. /**
  1306. * 获取报价单附件列表
  1307. */
  1308. getFileContentData () {
  1309. let currentData = {
  1310. orderRef1: this.$store.state.user.site,
  1311. orderRef2: this.enterResultData.proofingNo.split(';')[0]
  1312. }
  1313. getFileContentList(currentData).then(({data}) => {
  1314. if (data && data.code === 0) {
  1315. this.enterResultData.fileContentList = data.rows
  1316. } else {
  1317. this.enterResultData.fileContentList = []
  1318. }
  1319. })
  1320. },
  1321. /**
  1322. * 上传文件
  1323. */
  1324. uploadFile () {
  1325. let currentData = {
  1326. titleCon: '批量打样附件上传',
  1327. site: this.$store.state.user.site,
  1328. createBy: this.$store.state.user.name,
  1329. proofingNo: this.enterResultData.proofingNo,
  1330. fileRemark: '',
  1331. folder: 'proofingFile',
  1332. }
  1333. //打开组件 去做新增业务
  1334. this.$nextTick(() => {
  1335. this.$refs.proofingUploadFile.init(currentData)
  1336. })
  1337. },
  1338. /**
  1339. * 文件删除
  1340. * @param row
  1341. */
  1342. deleteFile (row) {
  1343. this.$confirm('确定要删除此文件?', '提示', {
  1344. confirmButtonText: '确定',
  1345. cancelButtonText: '取消',
  1346. type: 'warning'
  1347. }).then(() => {
  1348. let tempData = {
  1349. id: row.id,
  1350. fileName: row.fileName,
  1351. orderRef1: row.orderRef1,
  1352. orderRef2: row.orderRef2,
  1353. orderRef3: row.orderRef3,
  1354. proofingNo: this.enterResultData.proofingNo
  1355. }
  1356. batchDeleteQuotationFile(tempData).then(({data}) => {
  1357. if (data && data.code === 0) {
  1358. this.getFileContentData()
  1359. this.$message({
  1360. message: '操作成功',
  1361. type: 'success',
  1362. duration: 1500,
  1363. onClose: () => {}
  1364. })
  1365. } else {
  1366. this.$alert(data.msg, '错误', {
  1367. confirmButtonText: '确定'
  1368. })
  1369. }
  1370. })
  1371. }).catch(() => {
  1372. })
  1373. },
  1374. // ======== 导出相关方法 ========
  1375. /**
  1376. * 导出excel
  1377. */
  1378. async createExportData () {
  1379. this.searchData.limit = -1
  1380. this.searchData.page = 1
  1381. await proofingInformationSearch(this.searchData).then(({data}) => {
  1382. this.resultList = data.page.list
  1383. })
  1384. return this.resultList
  1385. },
  1386. startDownload () {
  1387. },
  1388. finishDownload () {
  1389. },
  1390. fields () {
  1391. let json = '{'
  1392. this.columnList.forEach((item, index) => {
  1393. if (index == this.columnList.length - 1) {
  1394. json += '"' + item.columnLabel + '"' + ':' + '"' + item.columnProp + '"'
  1395. } else {
  1396. json += '"' + item.columnLabel + '"' + ':' + '"' + item.columnProp + '"' + ','
  1397. }
  1398. })
  1399. json += '}'
  1400. let s = eval('(' + json + ')')
  1401. return s
  1402. }
  1403. }
  1404. }
  1405. </script>
  1406. <style scoped lang="scss">
  1407. /deep/ .customer-tab .el-tabs__content {
  1408. padding: 0px !important;
  1409. height: 459px;
  1410. }
  1411. </style>