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.

898 lines
29 KiB

4 months ago
4 months ago
2 months ago
4 months ago
4 months ago
4 months ago
2 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
2 months ago
4 months ago
2 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
3 months ago
4 months ago
  1. <template>
  2. <div class="mod-config">
  3. <div>
  4. <span @click="favoriteFunction()">
  5. <icon-svg :name="favorite?'xiangqufill':'xiangqu'" class="sl-svg"></icon-svg>
  6. </span>
  7. </div>
  8. <el-form :inline="true" label-position="top">
  9. <el-form-item :label="inputLabel.headerInput.label0">
  10. <el-select v-model="queryHeaderData.site" placeholder="请选择工厂" style="width: 120px;" clearable>
  11. <el-option
  12. v-for="item in siteOptions"
  13. :key="item.site"
  14. :label="item.siteName || item.site"
  15. :value="item.site">
  16. </el-option>
  17. </el-select>
  18. </el-form-item>
  19. <el-form-item :label="inputLabel.headerInput.label1">
  20. <el-input style="width: 150px;" v-model="queryHeaderData.palletId" placeholder="托盘ID" clearable @keyup.enter.native="getDataList()"></el-input>
  21. </el-form-item>
  22. <el-form-item :label="inputLabel.headerInput.label2">
  23. <el-select v-model="queryHeaderData.palletFamily" placeholder="请选择" style="width: 120px;" clearable>
  24. <el-option label="全部" value=""></el-option>
  25. <el-option label="钢托盘" value="A01"></el-option>
  26. <el-option label="围挡托盘" value="A02"></el-option>
  27. <el-option label="平托盘+周转箱" value="A03"></el-option>
  28. </el-select>
  29. </el-form-item>
  30. <el-form-item :label="inputLabel.headerInput.label3">
  31. <el-select v-model="queryHeaderData.status" placeholder="请选择" style="width: 120px;" clearable>
  32. <el-option label="全部" value=""></el-option>
  33. <el-option
  34. v-for="item in statusOptions"
  35. :key="item.value"
  36. :label="item.label"
  37. :value="item.value">
  38. </el-option>
  39. </el-select>
  40. </el-form-item>
  41. <el-form-item :label="inputLabel.headerInput.label4">
  42. <el-input style="width: 150px;" v-model="queryHeaderData.locationCode" placeholder="库位编码" clearable @keyup.enter.native="getDataList()"></el-input>
  43. </el-form-item>
  44. <el-form-item style="margin-top: 20px;">
  45. <el-button @click="getDataList()" type="primary">查询</el-button>
  46. <!-- 导出按钮 - rqrq -->
  47. <download-excel
  48. :fields="fields()"
  49. :data="exportData"
  50. type="xls"
  51. :name="exportName"
  52. :header="exportHeader"
  53. :footer="exportFooter"
  54. :fetch="createExportData"
  55. :before-generate="startDownload"
  56. :before-finish="finishDownload"
  57. worksheet="导出信息"
  58. class="el-button el-button--primary el-button--medium">
  59. {{ '导出' }}
  60. </download-excel>
  61. </el-form-item>
  62. <el-form-item style="margin-top: 20px;">
  63. <el-button @click="initModel()" type="primary">新增</el-button>
  64. <el-button v-if="isAuth(':pallet:delete')" type="danger" @click="deleteHandle()"
  65. :disabled="dataListSelections.length <= 0">{{ buttons.deleteList}}
  66. </el-button>
  67. </el-form-item>
  68. </el-form>
  69. <el-table
  70. id="palletTable"
  71. :height="height"
  72. :data="dataList"
  73. border
  74. v-loading="dataListLoading"
  75. @selection-change="selectionChangeHandle"
  76. style="width: 100%;">
  77. <el-table-column
  78. v-for="(item,index) in columnList" :key="index"
  79. :sortable="item.columnSortable"
  80. :prop="item.columnProp"
  81. :header-align="item.headerAlign"
  82. :show-overflow-tooltip="item.showOverflowTooltip"
  83. :align="item.align"
  84. :fixed="item.fixed==''?false:item.fixed"
  85. :min-width="item.columnWidth"
  86. :label="item.columnLabel">
  87. <template slot-scope="scope">
  88. <span v-if="!item.columnHidden"> {{scope.row[item.columnProp]}}</span>
  89. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]"
  90. style="width: 100px; height: 80px"/></span>
  91. </template>
  92. </el-table-column>
  93. <el-table-column
  94. fixed="right"
  95. header-align="center"
  96. align="center"
  97. width="100"
  98. label="操作">
  99. <template slot-scope="scope">
  100. <a @click="initModel(scope.row)" type="text" >编辑</a>
  101. <a @click="delHeaderData(scope.row)" type="text" >删除</a>
  102. </template>
  103. </el-table-column>
  104. </el-table>
  105. <el-pagination
  106. @size-change="sizeChangeHandle"
  107. @current-change="currentChangeHandle"
  108. :current-page="pageIndex"
  109. :page-sizes="[10, 20, 50, 100]"
  110. :page-size="pageSize"
  111. :total="totalPage"
  112. layout="total, sizes, prev, pager, next, jumper">
  113. </el-pagination>
  114. <!-- 新增/编辑dialog - rqrq -->
  115. <el-dialog :close-on-click-modal="false" :close-on-press-escape="false"
  116. v-drag :title="inputLabel.headerInput.label5"
  117. :visible.sync="setUp.reviewFlag" width="900px">
  118. <el-form :model="saveHeaderData" ref="dataForm"
  119. label-position="top" style="margin-top: 1px; margin-left: 0px;">
  120. <!-- 第一行工厂+托盘ID+托盘尺寸+最大承重 - rqrq -->
  121. <el-row :gutter="20">
  122. <el-col :span="6">
  123. <el-form-item :label="inputLabel.headerInput.label0" prop="site">
  124. <el-select v-model="saveHeaderData.site" placeholder="请选择工厂" style="width: 100%;" :disabled="setUp.readonlyFlag" @change="onSiteChange">
  125. <el-option
  126. v-for="item in siteOptions"
  127. :key="item.site"
  128. :label="item.siteName || item.site"
  129. :value="item.site">
  130. </el-option>
  131. </el-select>
  132. </el-form-item>
  133. </el-col>
  134. <el-col :span="6">
  135. <el-form-item :label="inputLabel.headerInput.label1" prop="palletId">
  136. <el-input v-model="saveHeaderData.palletId" readonly placeholder="系统自动生成"></el-input>
  137. </el-form-item>
  138. </el-col>
  139. <el-col :span="6">
  140. <el-form-item label="托盘尺寸">
  141. <el-input v-model="saveHeaderData.palletSize" placeholder="如: 1200x1000"></el-input>
  142. </el-form-item>
  143. </el-col>
  144. <el-col :span="6">
  145. <el-form-item label="最大承重(kg)">
  146. <el-input v-model="saveHeaderData.maxLoad" placeholder="请输入最大承重"></el-input>
  147. </el-form-item>
  148. </el-col>
  149. </el-row>
  150. <!-- 第二行托盘大分类+托盘类型+分拣方式+自动分拣 - rqrq -->
  151. <el-row :gutter="20">
  152. <el-col :span="6">
  153. <el-form-item label="托盘大分类" prop="palletFamily">
  154. <el-select v-model="saveHeaderData.palletFamily" placeholder="请选择" style="width: 100%;" @change="onPalletFamilyChange">
  155. <el-option
  156. v-for="item in palletFamilyOptions"
  157. :key="item.palletFamily"
  158. :label="item.palletFamilyDesc || item.palletFamily"
  159. :value="item.palletFamily">
  160. </el-option>
  161. </el-select>
  162. </el-form-item>
  163. </el-col>
  164. <el-col :span="6">
  165. <el-form-item label="托盘类型" prop="palletType">
  166. <el-select v-model="saveHeaderData.palletType" placeholder="请先选择托盘大分类" style="width: 100%;" @change="onPalletTypeChange">
  167. <el-option
  168. v-for="item in palletTypeOptions"
  169. :key="item.palletType"
  170. :label="item.typeDesc || item.palletType"
  171. :value="item.palletType">
  172. </el-option>
  173. </el-select>
  174. </el-form-item>
  175. </el-col>
  176. <el-col :span="6">
  177. <el-form-item label="分拣方式">
  178. <el-select v-model="saveHeaderData.soreType" placeholder="自动带出" style="width: 100%;">
  179. <el-option label="人工/混装" :value="0"></el-option>
  180. <el-option label="气胀轴自动分拣" :value="1"></el-option>
  181. <el-option label="抱箱自动分拣" :value="2"></el-option>
  182. <el-option label="直接出库" :value="3"></el-option>
  183. </el-select>
  184. </el-form-item>
  185. </el-col>
  186. <el-col :span="6">
  187. <el-form-item label="自动分拣">
  188. <el-select v-model="saveHeaderData.autoSort" placeholder="自动带出" style="width: 100%;">
  189. <el-option label="是" value="Y"></el-option>
  190. <el-option label="否" value="N"></el-option>
  191. </el-select>
  192. </el-form-item>
  193. </el-col>
  194. </el-row>
  195. <!-- 第三行状态+库位编码+WCS库位+空栈板标记 - rqrq -->
  196. <el-row :gutter="20">
  197. <el-col :span="6">
  198. <el-form-item :label="inputLabel.headerInput.label3" prop="status">
  199. <el-select v-model="saveHeaderData.status" placeholder="请选择" style="width: 100%;">
  200. <el-option
  201. v-for="item in statusOptions"
  202. :key="item.value"
  203. :label="item.label"
  204. :value="item.value">
  205. </el-option>
  206. </el-select>
  207. </el-form-item>
  208. </el-col>
  209. <el-col :span="6">
  210. <el-form-item label="站点">
  211. <el-input v-model="saveHeaderData.locationCode" disabled placeholder="请输入站点编码"></el-input>
  212. </el-form-item>
  213. </el-col>
  214. <el-col :span="6">
  215. <el-form-item label="WCS站点">
  216. <el-input v-model="saveHeaderData.wcsLocation" disabled placeholder="请输入WCS站点"></el-input>
  217. </el-form-item>
  218. </el-col>
  219. <el-col :span="6">
  220. <el-form-item label="空栈板标记">
  221. <el-input v-model="saveHeaderData.emptyFlag" readonly placeholder="默认为N" style="background-color: #f5f7fa;"></el-input>
  222. </el-form-item>
  223. </el-col>
  224. </el-row>
  225. <!-- 第四行调用标志 - rqrq -->
  226. <el-row :gutter="20">
  227. <el-col :span="6">
  228. <el-form-item label="调用标志">
  229. <el-select v-model="saveHeaderData.callingFlag" placeholder="请选择" disabled style="width: 100%;">
  230. <el-option label="是" value="Y"></el-option>
  231. <el-option label="否" value="N"></el-option>
  232. </el-select>
  233. </el-form-item>
  234. </el-col>
  235. </el-row>
  236. <!-- 备注占全行 - rqrq -->
  237. <el-row>
  238. <el-col :span="24">
  239. <el-form-item label="备注">
  240. <el-input v-model="saveHeaderData.remark" type="textarea" :rows="3" resize='none' placeholder="请输入备注"></el-input>
  241. </el-form-item>
  242. </el-col>
  243. </el-row>
  244. </el-form>
  245. <div slot="footer" class="dialog-footer" style="margin-top: 52px">
  246. <el-button type="primary" :disabled="setUp.saveButton" @click="saveHeaderFunction()">
  247. {{ setUp.saveButton ? '保存中...' : '确定' }}
  248. </el-button>
  249. <el-button @click="setUp.reviewFlag = false" :disabled="setUp.saveButton">取消</el-button>
  250. </div>
  251. </el-dialog>
  252. </div>
  253. </template>
  254. <script>
  255. import {
  256. userFavoriteList,
  257. saveUserFavorite,
  258. removeUserFavorite,
  259. } from '@/api/userFavorite.js'
  260. import {
  261. getPalletList,
  262. savePallet,
  263. updatePallet,
  264. deletePallet,
  265. checkPalletId,
  266. getPalletStatusOptions,
  267. getUserAuthorizedSites,
  268. getPalletFamilyList,
  269. getPalletTypeList
  270. } from '@/api/warehouse/pallet.js'
  271. export default {
  272. data() {
  273. return {
  274. saveHeaderData: {
  275. id: null,
  276. site: '',
  277. palletId: '',
  278. palletType: '',
  279. palletSize: '',
  280. maxLoad: null,
  281. status: 'AVAILABLE',
  282. locationCode: '',
  283. wcsLocation: '', // WCS库位 - rqrq
  284. palletFamily: '', // 托盘大分类 - rqrq
  285. soreType: 0, // 分拣方式 - rqrq
  286. autoSort: 'N', // 自动分拣,默认N - rqrq
  287. emptyFlag: 'N', // 空栈板标记,默认N且不可修改 - rqrq
  288. callingFlag: 'N', // 调用标志,默认N - rqrq
  289. remark: '',
  290. createdBy: this.$store.state.user.name,
  291. updatedBy: this.$store.state.user.name
  292. },
  293. queryHeaderData: {
  294. site: '',
  295. palletId: '',
  296. palletType: '',
  297. palletFamily: '',
  298. status: '',
  299. locationCode: '',
  300. page: 1,
  301. limit: 20
  302. },
  303. setUp: {
  304. reviewFlag: false,
  305. saveButton: false,
  306. readonlyFlag: false,
  307. },
  308. inputLabel: {
  309. headerInput: {
  310. label0: '工厂',
  311. label1: '托盘ID',
  312. label2: '托盘大分类',
  313. label3: '托盘状态',
  314. label4: '库位编码',
  315. label5: '托盘信息',
  316. },
  317. },
  318. statusOptions: [],
  319. siteOptions: [],
  320. palletFamilyOptions: [], // 托盘大分类选项 - rqrq
  321. palletTypeOptions: [], // 托盘类型选项 - rqrq
  322. selectedPalletTypeData: null, // 选中的托盘类型完整数据 - rqrq
  323. // table高度
  324. height: 450,
  325. // 是否收藏
  326. favorite: false,
  327. functionId: this.$route.meta.menuId,
  328. // 展示列集 - rqrq
  329. columnList: [
  330. {
  331. columnProp: "site",
  332. headerAlign: "center",
  333. align: "center",
  334. columnLabel: "工厂",
  335. columnWidth: 50,
  336. },
  337. {
  338. columnProp: "palletId",
  339. headerAlign: "center",
  340. align: "center",
  341. columnLabel: "托盘ID",
  342. columnWidth: 100,
  343. },
  344. {
  345. columnProp: "palletFamilyDesc",
  346. headerAlign: "center",
  347. align: "center",
  348. columnLabel: "托盘大分类",
  349. columnWidth: 150,
  350. },
  351. {
  352. columnProp: "typeDesc",
  353. headerAlign: "center",
  354. align: "center",
  355. columnLabel: "托盘类型",
  356. columnWidth: 180,
  357. },
  358. {
  359. columnProp: "soreTypeText",
  360. headerAlign: "center",
  361. align: "center",
  362. columnLabel: "分拣方式",
  363. columnWidth: 120,
  364. },
  365. {
  366. columnProp: "autoSortText",
  367. headerAlign: "center",
  368. align: "center",
  369. columnLabel: "自动分拣",
  370. columnWidth: 80,
  371. },
  372. {
  373. columnProp: "callingFlagText",
  374. headerAlign: "center",
  375. align: "center",
  376. columnLabel: "调用标志",
  377. columnWidth: 80,
  378. },
  379. {
  380. columnProp: "locationCode",
  381. headerAlign: "center",
  382. align: "center",
  383. columnLabel: "库位编码",
  384. columnWidth: 80,
  385. },
  386. {
  387. columnProp: "wcsLocation",
  388. headerAlign: "center",
  389. align: "center",
  390. columnLabel: "WCS库位",
  391. columnWidth: 80,
  392. },
  393. {
  394. columnProp: "emptyFlagText",
  395. headerAlign: "center",
  396. align: "center",
  397. columnLabel: "空栈板标记",
  398. columnWidth: 80,
  399. },
  400. {
  401. columnProp: "statusText",
  402. headerAlign: "center",
  403. align: "center",
  404. columnLabel: "托盘状态",
  405. columnWidth: 80,
  406. },
  407. {
  408. columnProp: "remark",
  409. headerAlign: "center",
  410. align: "left",
  411. columnLabel: "备注",
  412. columnWidth: 200,
  413. },
  414. {
  415. columnProp: "createdBy",
  416. headerAlign: "center",
  417. align: "center",
  418. columnLabel: "创建人",
  419. columnWidth: 100,
  420. },
  421. {
  422. columnProp: "createdTime",
  423. headerAlign: "center",
  424. align: "center",
  425. columnLabel: "创建时间",
  426. columnWidth: 150,
  427. },
  428. {
  429. columnProp: "updatedBy",
  430. headerAlign: "center",
  431. align: "center",
  432. columnLabel: "修改人",
  433. columnWidth: 100,
  434. },
  435. {
  436. columnProp: "updatedTime",
  437. headerAlign: "center",
  438. align: "center",
  439. columnLabel: "修改时间",
  440. columnWidth: 150,
  441. },
  442. {
  443. columnProp: "palletSize",
  444. headerAlign: "center",
  445. align: "center",
  446. columnLabel: "托盘尺寸",
  447. columnWidth: 120,
  448. },
  449. {
  450. columnProp: "maxLoad",
  451. headerAlign: "center",
  452. align: "center",
  453. columnLabel: "最大承重(kg)",
  454. columnWidth: 120,
  455. },
  456. ],
  457. // 数据集
  458. dataList: [],
  459. buttons: {
  460. deleteList: '批量删除',
  461. },
  462. // 分页
  463. pageIndex: 1,
  464. pageSize: 20,
  465. totalPage: 0,
  466. dataListLoading: false,
  467. dataListSelections: [],
  468. // 导出相关 - rqrq
  469. exportData: [],
  470. exportName: '托盘信息' + this.dayjs().format('YYYYMMDDHHmmss'),
  471. exportHeader: ["托盘信息"],
  472. exportFooter: [],
  473. // 验证规则
  474. dataRule: {
  475. site: [
  476. { required: true, message: '工厂不能为空', trigger: 'change' }
  477. ],
  478. palletType: [
  479. { required: true, message: '托盘类型不能为空', trigger: 'change' }
  480. ],
  481. status: [
  482. { required: true, message: '托盘状态不能为空', trigger: 'change' }
  483. ]
  484. }
  485. }
  486. },
  487. mounted() {
  488. this.$nextTick(() => {
  489. this.height = window.innerHeight - 220;
  490. })
  491. },
  492. activated() {
  493. this.getDataList()
  494. this.getStatusOptions()
  495. this.getSiteOptions()
  496. },
  497. methods: {
  498. // 获取状态选项
  499. getStatusOptions() {
  500. getPalletStatusOptions().then(({data}) => {
  501. if (data && data.code === 0) {
  502. this.statusOptions = data.options
  503. }
  504. })
  505. },
  506. // 获取工厂选项
  507. getSiteOptions() {
  508. const params = {
  509. userName: this.$store.state.user.name
  510. }
  511. getUserAuthorizedSites(params).then(({data}) => {
  512. if (data && data.code === 0) {
  513. this.siteOptions = data.data
  514. }
  515. }).catch(error => {
  516. console.error('获取工厂列表失败:', error)
  517. })
  518. },
  519. // 删除托盘
  520. delHeaderData(row) {
  521. this.$confirm(`确定删除托盘 [${row.palletId}]?`, '操作提示', {
  522. confirmButtonText: '确定',
  523. cancelButtonText: '取消',
  524. type: 'warning'
  525. }).then(() => {
  526. deletePallet([row.id]).then(({data}) => {
  527. if (data.code == 0) {
  528. this.$message.success(data.msg)
  529. this.getDataList()
  530. } else {
  531. this.$alert(data.msg, '操作提示', {
  532. confirmButtonText: '确定'
  533. });
  534. }
  535. })
  536. })
  537. },
  538. // 保存托盘
  539. saveHeaderFunction() {
  540. this.$refs.dataForm.validate((valid) => {
  541. if (valid) {
  542. this.setUp.saveButton = true
  543. // 准备提交数据
  544. let submitData = { ...this.saveHeaderData }
  545. // 如果是新增,清空托盘ID让后端自动生成
  546. if (!submitData.id) {
  547. submitData.palletId = ''
  548. }
  549. const apiMethod = submitData.id ? updatePallet : savePallet
  550. apiMethod(submitData).then(({data}) => {
  551. this.setUp.saveButton = false
  552. if (data.code == 0) {
  553. this.$message.success(data.msg)
  554. this.getDataList()
  555. this.setUp.reviewFlag = false
  556. } else {
  557. this.$alert(data.msg, '操作提示', {
  558. confirmButtonText: '确定'
  559. });
  560. }
  561. }).catch(() => {
  562. this.setUp.saveButton = false
  563. })
  564. }
  565. })
  566. },
  567. // 初始化表单 - rqrq
  568. initModel(row) {
  569. this.setUp.reviewFlag = true
  570. this.setUp.saveButton = false
  571. this.setUp.readonlyFlag = false
  572. if (row) {
  573. // 编辑模式 - rqrq
  574. this.setUp.readonlyFlag = true
  575. this.saveHeaderData = {
  576. id: row.id,
  577. site: row.site,
  578. palletId: row.palletId,
  579. palletType: row.palletType,
  580. palletSize: row.palletSize,
  581. maxLoad: row.maxLoad,
  582. status: row.status,
  583. locationCode: row.locationCode,
  584. wcsLocation: row.wcsLocation || '', // WCS库位 - rqrq
  585. palletFamily: row.palletFamily || '', // 托盘大分类 - rqrq
  586. soreType: row.soreType != null ? row.soreType : 0, // 分拣方式 - rqrq
  587. autoSort: row.autoSort || 'N', // 自动分拣 - rqrq
  588. emptyFlag: row.emptyFlag || 'N', // 空栈板标记(只读) - rqrq
  589. callingFlag: row.callingFlag || 'N', // 调用标志 - rqrq
  590. remark: row.remark || '',
  591. updatedBy: this.$store.state.user.name
  592. }
  593. // 编辑时加载托盘大分类和类型选项 - rqrq
  594. if (row.site) {
  595. this.getPalletFamilyOptions(row.site)
  596. if (row.palletFamily) {
  597. this.getPalletTypeOptions(row.site, row.palletFamily)
  598. }
  599. }
  600. } else {
  601. // 新增模式 - rqrq
  602. this.saveHeaderData = {
  603. id: null,
  604. site: '',
  605. palletId: '系统自动生成',
  606. palletType: '',
  607. palletSize: '',
  608. maxLoad: null,
  609. status: 'AVAILABLE',
  610. locationCode: '',
  611. wcsLocation: '', // WCS库位 - rqrq
  612. palletFamily: '', // 托盘大分类 - rqrq
  613. soreType: 0, // 分拣方式 - rqrq
  614. autoSort: 'N', // 自动分拣,默认N - rqrq
  615. emptyFlag: 'N', // 空栈板标记,默认N且不可修改 - rqrq
  616. callingFlag: 'N', // 调用标志,默认N - rqrq
  617. remark: '',
  618. createdBy: this.$store.state.user.name
  619. }
  620. }
  621. },
  622. // 工厂change事件 - rqrq
  623. onSiteChange(value) {
  624. console.log('工厂变更 - rqrq:', value)
  625. // 清空托盘相关字段 - rqrq
  626. this.saveHeaderData.palletFamily = ''
  627. this.saveHeaderData.palletType = ''
  628. this.saveHeaderData.soreType = 0
  629. this.saveHeaderData.autoSort = 'N'
  630. this.palletFamilyOptions = []
  631. this.palletTypeOptions = []
  632. this.selectedPalletTypeData = null
  633. // 加载新工厂的托盘大分类 - rqrq
  634. if (value) {
  635. this.getPalletFamilyOptions(value)
  636. }
  637. },
  638. // 获取托盘大分类选项 - rqrq
  639. getPalletFamilyOptions(site) {
  640. if (!site) {
  641. this.palletFamilyOptions = []
  642. return
  643. }
  644. getPalletFamilyList({ site }).then(({data}) => {
  645. if (data && data.code === 0) {
  646. this.palletFamilyOptions = data.rows || []
  647. }
  648. }).catch(() => {
  649. this.palletFamilyOptions = []
  650. })
  651. },
  652. // 获取托盘类型选项 - rqrq
  653. getPalletTypeOptions(site, palletFamily) {
  654. if (!site) {
  655. this.palletTypeOptions = []
  656. return
  657. }
  658. const params = { site }
  659. if (palletFamily) {
  660. params.palletFamily = palletFamily
  661. }
  662. getPalletTypeList(params).then(({data}) => {
  663. if (data && data.code === 0) {
  664. this.palletTypeOptions = data.rows || []
  665. }
  666. }).catch(() => {
  667. this.palletTypeOptions = []
  668. })
  669. },
  670. // 托盘大分类change事件 - rqrq
  671. onPalletFamilyChange(value) {
  672. console.log('托盘大分类变更 - rqrq:', value)
  673. // 清空托盘类型相关字段 - rqrq
  674. this.saveHeaderData.palletType = ''
  675. this.saveHeaderData.soreType = 0
  676. this.saveHeaderData.autoSort = 'N'
  677. this.selectedPalletTypeData = null
  678. // 重新加载托盘类型列表 - rqrq
  679. if (value && this.saveHeaderData.site) {
  680. this.getPalletTypeOptions(this.saveHeaderData.site, value)
  681. } else {
  682. this.palletTypeOptions = []
  683. }
  684. },
  685. // 托盘类型change事件 - 参考palletAssembly.vue逻辑 - rqrq
  686. onPalletTypeChange(value) {
  687. console.log('托盘类型变更 - rqrq:', value)
  688. // 查找选中的托盘类型完整数据 - rqrq
  689. const selectedType = this.palletTypeOptions.find(item => item.palletType === value)
  690. if (selectedType) {
  691. this.selectedPalletTypeData = selectedType
  692. // 根据托盘类型自动带出字段 - rqrq
  693. this.saveHeaderData.soreType = selectedType.wcsSoreType != null ? selectedType.wcsSoreType : 0
  694. this.saveHeaderData.autoSort = selectedType.wcsAutoSort || 'N'
  695. console.log('自动带出分拣方式 - rqrq:', this.saveHeaderData.soreType)
  696. console.log('自动带出自动分拣 - rqrq:', this.saveHeaderData.autoSort)
  697. } else {
  698. // 未找到数据,重置为默认值 - rqrq
  699. this.saveHeaderData.soreType = 0
  700. this.saveHeaderData.autoSort = 'N'
  701. this.selectedPalletTypeData = null
  702. }
  703. },
  704. // 收藏功能
  705. favoriteFunction() {
  706. let userFavorite = {
  707. userId: this.$store.state.user.id,
  708. functionId: this.$route.meta.menuId,
  709. }
  710. if (this.favorite) {
  711. this.$confirm(`确定取消收藏`, '提示', {
  712. confirmButtonText: '确定',
  713. cancelButtonText: '取消',
  714. type: 'warning'
  715. }).then(() => {
  716. removeUserFavorite(userFavorite).then(({data}) => {
  717. this.$message.success(data.msg)
  718. this.favorite = false
  719. })
  720. })
  721. } else {
  722. saveUserFavorite(userFavorite).then(({data}) => {
  723. this.$message.success(data.msg)
  724. this.favorite = true
  725. })
  726. }
  727. },
  728. // 获取数据列表 - rqrq
  729. getDataList() {
  730. this.dataListLoading = true
  731. this.queryHeaderData.page = this.pageIndex
  732. this.queryHeaderData.limit = this.pageSize
  733. getPalletList(this.queryHeaderData).then(({data}) => {
  734. if (data && data.code === 0) {
  735. // 处理数据,添加文本显示字段 - rqrq
  736. this.dataList = (data.page.list || []).map(item => {
  737. return {
  738. ...item,
  739. // 分拣方式文本显示 - rqrq
  740. soreTypeText: this.getSoreTypeText(item.soreType),
  741. // 自动分拣文本显示 - rqrq
  742. autoSortText: item.autoSort === 'Y' ? '是' : item.autoSort === 'N' ? '否' : '',
  743. // 空栈板标记文本显示 - rqrq
  744. emptyFlagText: item.emptyFlag === 'Y' ? '是' : item.emptyFlag === 'N' ? '否' : '',
  745. // 调用标志文本显示 - rqrq
  746. callingFlagText: item.callingFlag === 'Y' ? '是' : item.callingFlag === 'N' ? '否' : '',
  747. // 状态文本显示 - rqrq
  748. statusText: this.getStatusText(item.status)
  749. }
  750. })
  751. this.totalPage = data.page.totalCount
  752. } else {
  753. this.dataList = []
  754. this.totalPage = 0
  755. }
  756. this.dataListLoading = false
  757. })
  758. },
  759. // 获取分拣方式文本 - rqrq
  760. getSoreTypeText(soreType) {
  761. const soreTypeMap = {
  762. 0: '人工/混装',
  763. 1: '气胀轴自动分拣',
  764. 2: '抱箱自动分拣',
  765. 3: '直接出库'
  766. }
  767. return soreTypeMap[soreType] !== undefined ? soreTypeMap[soreType] : ''
  768. },
  769. // 获取状态文本 - rqrq
  770. getStatusText(status) {
  771. const statusMap = {
  772. 'AVAILABLE': '可用',
  773. 'OCCUPIED': '使用中',
  774. 'DAMAGED': '损坏',
  775. 'DISABLED': '禁用'
  776. }
  777. return statusMap[status] || status
  778. },
  779. // 每页数
  780. sizeChangeHandle(val) {
  781. this.pageSize = val
  782. this.pageIndex = 1
  783. this.getDataList()
  784. },
  785. // 当前页
  786. currentChangeHandle(val) {
  787. this.pageIndex = val
  788. this.getDataList()
  789. },
  790. // 多选
  791. selectionChangeHandle(val) {
  792. this.dataListSelections = val
  793. },
  794. // 批量删除
  795. deleteHandle() {
  796. var ids = this.dataListSelections.map(item => {
  797. return item.id
  798. })
  799. this.$confirm(`确定批量删除选中的托盘?`, '提示', {
  800. confirmButtonText: '确定',
  801. cancelButtonText: '取消',
  802. type: 'warning'
  803. }).then(() => {
  804. deletePallet(ids).then(({data}) => {
  805. if (data && data.code === 0) {
  806. this.$message.success('操作成功')
  807. this.getDataList()
  808. } else {
  809. this.$message.error(data.msg)
  810. }
  811. })
  812. })
  813. },
  814. // 导出相关方法 - rqrq
  815. async createExportData() {
  816. const queryParams = {
  817. ...this.queryHeaderData,
  818. page: 1,
  819. limit: 999999 // 设置一个很大的数字来获取全部数据 - rqrq
  820. }
  821. const {data} = await getPalletList(queryParams)
  822. if (data && data.code === 0) {
  823. return (data.page.list || []).map(item => {
  824. return {
  825. ...item,
  826. soreTypeText: this.getSoreTypeText(item.soreType),
  827. autoSortText: item.autoSort === 'Y' ? '是' : item.autoSort === 'N' ? '否' : '',
  828. emptyFlagText: item.emptyFlag === 'Y' ? '是' : item.emptyFlag === 'N' ? '否' : '',
  829. callingFlagText: item.callingFlag === 'Y' ? '是' : item.callingFlag === 'N' ? '否' : '',
  830. statusText: this.getStatusText(item.status)
  831. }
  832. })
  833. }
  834. return []
  835. },
  836. startDownload() {
  837. // 开始导出 - rqrq
  838. },
  839. finishDownload() {
  840. // 导出完成 - rqrq
  841. },
  842. fields() {
  843. let json = "{"
  844. this.columnList.forEach((item, index) => {
  845. if (index == this.columnList.length - 1) {
  846. json += "\"" + item.columnLabel + "\"" + ":" + "\"" + item.columnProp + "\""
  847. } else {
  848. json += "\"" + item.columnLabel + "\"" + ":" + "\"" + item.columnProp + "\"" + ","
  849. }
  850. })
  851. json += "}"
  852. let s = eval("(" + json + ")")
  853. return s
  854. }
  855. },
  856. created() {
  857. // 初始化收藏状态
  858. this.favorite = false
  859. }
  860. }
  861. </script>
  862. <style scoped>
  863. .sl-svg {
  864. overflow: hidden;
  865. float: right;
  866. }
  867. </style>