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.

448 lines
15 KiB

  1. <template>
  2. <div class="mod-config">
  3. <!-- 条件查询 -->
  4. <el-form :inline="true" label-position="top" :model="searchData">
  5. <el-form-item label="BU">
  6. <el-select v-model="searchData.buNo" placeholder="请选择" clearable style="width: 100px">
  7. <el-option
  8. v-for="i in userBuList"
  9. :key="i.buNo"
  10. :label="i.buDesc"
  11. :value="i.buNo">
  12. </el-option>
  13. </el-select>
  14. </el-form-item>
  15. <el-form-item label="标签条码">
  16. <el-input v-model="searchData.carrierNo" clearable style="width: 150px"></el-input>
  17. </el-form-item>
  18. <el-form-item label="载具类型名称">
  19. <el-input v-model="searchData.carrierTypeName" clearable style="width: 150px"></el-input>
  20. </el-form-item>
  21. <el-form-item label="状态">
  22. <el-select v-model="searchData.status" placeholder="请选择" clearable style="width: 100px">
  23. <el-option label="全部" value=""></el-option>
  24. <el-option label="空闲" value="1"></el-option>
  25. <el-option label="占用" value="2"></el-option>
  26. <el-option label="维修" value="3"></el-option>
  27. <el-option label="报废" value="4"></el-option>
  28. <el-option label="外借" value="5"></el-option>
  29. </el-select>
  30. </el-form-item>
  31. <el-form-item label=" ">
  32. <el-button type="primary" @click="getDataList()">查询</el-button>
  33. <el-button type="primary" @click="addModal()">新增</el-button>
  34. <el-button type="primary" @click="exportExcel()">导出</el-button>
  35. </el-form-item>
  36. </el-form>
  37. <!-- 展示列表 -->
  38. <el-table
  39. :height="height"
  40. :data="dataList"
  41. border
  42. v-loading="dataListLoading"
  43. style="width: 100%;">
  44. <el-table-column prop="buNo" label="BU" header-align="center" align="center" min-width="80"></el-table-column>
  45. <el-table-column prop="carrierNo" label="标签条码" header-align="center" align="left" min-width="120"></el-table-column>
  46. <el-table-column prop="carrierTypeCode" label="载具类型编码" header-align="center" align="center" min-width="120"></el-table-column>
  47. <el-table-column prop="carrierTypeName" label="载具类型名称" header-align="center" align="left" min-width="150"></el-table-column>
  48. <el-table-column prop="specification" label="规格描述" header-align="center" align="left" min-width="150"></el-table-column>
  49. <el-table-column prop="dimensions" label="尺寸" header-align="center" align="center" min-width="120"></el-table-column>
  50. <el-table-column prop="statusDesc" label="状态" header-align="center" align="center" min-width="80"></el-table-column>
  51. <el-table-column prop="currentLocation" label="当前位置" header-align="center" align="left" min-width="120"></el-table-column>
  52. <el-table-column prop="totalUsageCount" label="使用次数" header-align="center" align="right" min-width="100"></el-table-column>
  53. <el-table-column prop="createDate" label="创建时间" header-align="center" align="center" min-width="150"></el-table-column>
  54. <el-table-column
  55. fixed="right"
  56. header-align="center"
  57. align="center"
  58. width="130"
  59. label="操作">
  60. <template slot-scope="scope">
  61. <el-link style="cursor: pointer" @click="updateModal(scope.row)">修改</el-link>
  62. <el-link style="cursor: pointer" @click="deleteModal(scope.row)">删除</el-link>
  63. </template>
  64. </el-table-column>
  65. </el-table>
  66. <!-- 分页 -->
  67. <el-pagination
  68. style="margin-top: 0px"
  69. @size-change="sizeChangeHandle"
  70. @current-change="currentChangeHandle"
  71. :current-page="pageIndex"
  72. :page-sizes="[20, 50, 100, 200, 500]"
  73. :page-size="pageSize"
  74. :total="totalPage"
  75. layout="total, sizes, prev, pager, next, jumper">
  76. </el-pagination>
  77. <!-- 新增和修改对话框 -->
  78. <el-dialog :title="modalTitle" :close-on-click-modal="false" v-drag :visible.sync="modalFlag" width="800px">
  79. <el-form :inline="true" label-position="top" :model="modalData" :rules="rules" ref="modalForm" style="margin-left: 7px;">
  80. <!-- 第一行 -->
  81. <el-row>
  82. <el-col :span="12">
  83. <el-form-item label="BU" prop="buNo">
  84. <el-select v-model="modalData.buNo" placeholder="请选择" :disabled="modalDisableFlag" style="width: 100%">
  85. <el-option
  86. v-for="i in userBuList"
  87. :key="i.buNo"
  88. :label="i.sitename"
  89. :value="i.buNo">
  90. <span style="float: left">{{ i.sitename }}</span>
  91. <span style="float: right; color: #8492a6; font-size: 11px">{{ i.buDesc }}</span>
  92. </el-option>
  93. </el-select>
  94. </el-form-item>
  95. </el-col>
  96. <el-col :span="12">
  97. <el-form-item label="标签条码" prop="carrierNo">
  98. <el-input v-model="modalData.carrierNo" :disabled="modalDisableFlag" style="width: 100%"></el-input>
  99. </el-form-item>
  100. </el-col>
  101. </el-row>
  102. <!-- 第二行 -->
  103. <el-row>
  104. <el-col :span="12">
  105. <el-form-item label="载具类型编码" prop="carrierTypeCode">
  106. <el-input v-model="modalData.carrierTypeCode" style="width: 100%"></el-input>
  107. </el-form-item>
  108. </el-col>
  109. <el-col :span="12">
  110. <el-form-item label="载具类型名称" prop="carrierTypeName">
  111. <el-input v-model="modalData.carrierTypeName" style="width: 100%"></el-input>
  112. </el-form-item>
  113. </el-col>
  114. </el-row>
  115. <!-- 第三行 -->
  116. <el-row>
  117. <el-col :span="12">
  118. <el-form-item label="固定资产编号">
  119. <el-input v-model="modalData.assetNo" style="width: 100%"></el-input>
  120. </el-form-item>
  121. </el-col>
  122. <el-col :span="12">
  123. <el-form-item label="规格描述">
  124. <el-input v-model="modalData.specification" style="width: 100%"></el-input>
  125. </el-form-item>
  126. </el-col>
  127. </el-row>
  128. <!-- 第四行 -->
  129. <el-row>
  130. <el-col :span="12">
  131. <el-form-item label="尺寸(长×宽×高mm)">
  132. <el-input v-model="modalData.dimensions" style="width: 100%"></el-input>
  133. </el-form-item>
  134. </el-col>
  135. <el-col :span="12">
  136. <el-form-item label="最大承重(kg)">
  137. <el-input-number v-model="modalData.maxWeight" :controls="false" :precision="2" style="width: 100%"></el-input-number>
  138. </el-form-item>
  139. </el-col>
  140. </el-row>
  141. <!-- 第五行 -->
  142. <el-row>
  143. <el-col :span="12">
  144. <el-form-item label="预期使用次数">
  145. <el-input-number v-model="modalData.expectedLifeCycles" :controls="false" :precision="0" style="width: 100%"></el-input-number>
  146. </el-form-item>
  147. </el-col>
  148. <el-col :span="12">
  149. <el-form-item label="预期使用寿命(天)">
  150. <el-input-number v-model="modalData.expectedLifeDays" :controls="false" :precision="0" style="width: 100%"></el-input-number>
  151. </el-form-item>
  152. </el-col>
  153. </el-row>
  154. <!-- 第六行 -->
  155. <el-row>
  156. <el-col :span="12">
  157. <el-form-item label="状态" prop="status">
  158. <el-select v-model="modalData.status" placeholder="请选择" style="width: 100%">
  159. <el-option label="空闲" :value="1"></el-option>
  160. <el-option label="占用" :value="2"></el-option>
  161. <el-option label="维修" :value="3"></el-option>
  162. <el-option label="报废" :value="4"></el-option>
  163. <el-option label="外借" :value="5"></el-option>
  164. </el-select>
  165. </el-form-item>
  166. </el-col>
  167. <el-col :span="12">
  168. <el-form-item label="当前位置">
  169. <el-input v-model="modalData.currentLocation" style="width: 100%"></el-input>
  170. </el-form-item>
  171. </el-col>
  172. </el-row>
  173. <!-- 第七行 -->
  174. <el-row>
  175. <el-col :span="12">
  176. <el-form-item label="采购日期">
  177. <el-date-picker v-model="modalData.purchaseDate" type="date" value-format="yyyy-MM-dd" style="width: 100%"></el-date-picker>
  178. </el-form-item>
  179. </el-col>
  180. <el-col :span="12">
  181. <el-form-item label="备注">
  182. <el-input v-model="modalData.remark" style="width: 100%"></el-input>
  183. </el-form-item>
  184. </el-col>
  185. </el-row>
  186. </el-form>
  187. <el-footer style="height:35px;margin-top: 15px;text-align:center">
  188. <el-button type="primary" @click="saveData()">保存</el-button>
  189. <el-button type="primary" @click="modalFlag = false">关闭</el-button>
  190. </el-footer>
  191. </el-dialog>
  192. </div>
  193. </template>
  194. <script>
  195. import {
  196. fixedCarrierSearch,
  197. fixedCarrierSave,
  198. fixedCarrierUpdate,
  199. fixedCarrierDelete,
  200. getSiteAndBuByUserName
  201. } from "@/api/fixedCarrier/fixedCarrier.js"
  202. import excel from "@/utils/excel-util.js"
  203. export default {
  204. data() {
  205. return {
  206. searchData: {
  207. site: this.$store.state.user.site,
  208. userName: this.$store.state.user.name,
  209. buNo: '',
  210. carrierNo: '',
  211. carrierTypeName: '',
  212. status: '',
  213. page: 1,
  214. limit: 20
  215. },
  216. pageIndex: 1,
  217. pageSize: 20,
  218. totalPage: 0,
  219. height: 500,
  220. dataList: [],
  221. dataListLoading: false,
  222. modalFlag: false,
  223. modalDisableFlag: false,
  224. modalTitle: '新增固定载具',
  225. modalData: {
  226. site: this.$store.state.user.site,
  227. buNo: '',
  228. carrierNo: '',
  229. carrierTypeCode: '',
  230. carrierTypeName: '',
  231. assetNo: '',
  232. specification: '',
  233. dimensions: '',
  234. maxWeight: null,
  235. expectedLifeCycles: null,
  236. expectedLifeDays: null,
  237. status: 1,
  238. currentLocation: '',
  239. purchaseDate: '',
  240. createBy: this.$store.state.user.name,
  241. remark: '',
  242. flag: ''
  243. },
  244. userBuList: [],
  245. rules: {
  246. buNo: [{ required: true, message: '请选择BU', trigger: 'change' }],
  247. carrierNo: [{ required: true, message: '请输入标签条码', trigger: 'blur' }],
  248. carrierTypeCode: [{ required: true, message: '请输入载具类型编码', trigger: 'blur' }],
  249. carrierTypeName: [{ required: true, message: '请输入载具类型名称', trigger: 'blur' }],
  250. status: [{ required: true, message: '请选择状态', trigger: 'change' }]
  251. }
  252. }
  253. },
  254. mounted() {
  255. this.getSiteAndBu()
  256. this.getDataList()
  257. },
  258. methods: {
  259. // 获取用户的BU
  260. getSiteAndBu() {
  261. let tempData = {
  262. username: this.$store.state.user.name
  263. }
  264. getSiteAndBuByUserName(tempData).then(({data}) => {
  265. if (data.code === 0) {
  266. this.userBuList = data.rows
  267. }
  268. })
  269. },
  270. // 查询列表
  271. getDataList() {
  272. this.dataListLoading = true
  273. this.searchData.page = this.pageIndex
  274. this.searchData.limit = this.pageSize
  275. fixedCarrierSearch(this.searchData).then(({data}) => {
  276. if (data && data.code === 0) {
  277. this.dataList = data.page.list.map(item => {
  278. // 状态描述转换
  279. const statusMap = {
  280. 1: '空闲',
  281. 2: '占用',
  282. 3: '维修',
  283. 4: '报废',
  284. 5: '外借'
  285. }
  286. item.statusDesc = statusMap[item.status] || ''
  287. return item
  288. })
  289. this.totalPage = data.page.totalCount
  290. } else {
  291. this.dataList = []
  292. this.totalPage = 0
  293. }
  294. this.dataListLoading = false
  295. }).catch(() => {
  296. this.dataListLoading = false
  297. })
  298. },
  299. // 每页数
  300. sizeChangeHandle(val) {
  301. this.pageSize = val
  302. this.pageIndex = 1
  303. this.getDataList()
  304. },
  305. // 当前页
  306. currentChangeHandle(val) {
  307. this.pageIndex = val
  308. this.getDataList()
  309. },
  310. // 新增
  311. addModal() {
  312. this.modalTitle = '新增固定载具'
  313. this.modalFlag = true
  314. this.modalDisableFlag = false
  315. this.modalData = {
  316. site: this.$store.state.user.site,
  317. buNo: '',
  318. carrierNo: '',
  319. carrierTypeCode: '',
  320. carrierTypeName: '',
  321. assetNo: '',
  322. specification: '',
  323. dimensions: '',
  324. maxWeight: null,
  325. expectedLifeCycles: null,
  326. expectedLifeDays: null,
  327. status: 1,
  328. currentLocation: '',
  329. purchaseDate: '',
  330. createBy: this.$store.state.user.name,
  331. remark: '',
  332. flag: 'add'
  333. }
  334. this.$nextTick(() => {
  335. this.$refs.modalForm && this.$refs.modalForm.clearValidate()
  336. })
  337. },
  338. // 修改
  339. updateModal(row) {
  340. this.modalTitle = '修改固定载具'
  341. this.modalFlag = true
  342. this.modalDisableFlag = true
  343. this.modalData = {
  344. ...row,
  345. flag: 'update'
  346. }
  347. this.$nextTick(() => {
  348. this.$refs.modalForm && this.$refs.modalForm.clearValidate()
  349. })
  350. },
  351. // 保存
  352. saveData() {
  353. this.$refs.modalForm.validate((valid) => {
  354. if (valid) {
  355. if (this.modalData.flag === 'add') {
  356. fixedCarrierSave(this.modalData).then(({data}) => {
  357. if (data && data.code === 0) {
  358. this.$message.success('新增成功')
  359. this.modalFlag = false
  360. this.getDataList()
  361. } else {
  362. this.$message.error(data.msg || '新增失败')
  363. }
  364. })
  365. } else {
  366. fixedCarrierUpdate(this.modalData).then(({data}) => {
  367. if (data && data.code === 0) {
  368. this.$message.success('修改成功')
  369. this.modalFlag = false
  370. this.getDataList()
  371. } else {
  372. this.$message.error(data.msg || '修改失败')
  373. }
  374. })
  375. }
  376. }
  377. })
  378. },
  379. // 删除
  380. deleteModal(row) {
  381. this.$confirm('确定删除该固定载具吗?', '提示', {
  382. confirmButtonText: '确定',
  383. cancelButtonText: '取消',
  384. type: 'warning'
  385. }).then(() => {
  386. fixedCarrierDelete(row).then(({data}) => {
  387. if (data && data.code === 0) {
  388. this.$message.success('删除成功')
  389. this.getDataList()
  390. } else {
  391. this.$message.error(data.msg || '删除失败')
  392. }
  393. })
  394. }).catch(() => {})
  395. },
  396. // 导出
  397. exportExcel() {
  398. const exportData = this.dataList.map(item => ({
  399. 'BU': item.buNo,
  400. '标签条码': item.carrierNo,
  401. '载具类型编码': item.carrierTypeCode,
  402. '载具类型名称': item.carrierTypeName,
  403. '规格描述': item.specification,
  404. '尺寸': item.dimensions,
  405. '状态': item.statusDesc,
  406. '当前位置': item.currentLocation,
  407. '使用次数': item.totalUsageCount,
  408. '创建时间': item.createDate
  409. }))
  410. excel.export_json_to_excel({
  411. header: ['BU', '标签条码', '载具类型编码', '载具类型名称', '规格描述', '尺寸', '状态', '当前位置', '使用次数', '创建时间'],
  412. data: exportData.map(item => Object.values(item)),
  413. filename: '固定载具_' + this.dayjs().format('YYYYMMDDHHmmss'),
  414. autoWidth: true,
  415. bookType: 'xlsx'
  416. })
  417. }
  418. }
  419. }
  420. </script>
  421. <style scoped>
  422. </style>