warehouse.vue 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298
  1. <template>
  2. <el-container>
  3. <el-header
  4. class="gva-search-box"
  5. style="line-height: 60px"
  6. >
  7. <el-row>
  8. <el-col :span="8">
  9. <el-form
  10. inline
  11. style="margin-top: 10px"
  12. >
  13. <el-form-item label="名称">
  14. <el-input
  15. v-model="searchWarehouse.name"
  16. placeholder="请输入名称"
  17. />
  18. </el-form-item>
  19. <el-form-item>
  20. <el-button @click="getData">搜索</el-button>
  21. </el-form-item>
  22. </el-form>
  23. </el-col>
  24. <el-col :span="8" />
  25. <el-col :span="8">
  26. <el-button
  27. type="primary"
  28. @click="isOpenWarehouseAdd = true"
  29. >新增仓库</el-button>
  30. </el-col>
  31. </el-row>
  32. </el-header>
  33. <el-main>
  34. <el-table
  35. :data="warehouseListData"
  36. height="550"
  37. >
  38. <el-table-column
  39. prop="name"
  40. label="库房名称"
  41. />
  42. <el-table-column
  43. prop="location"
  44. label="库房位置"
  45. />
  46. <el-table-column
  47. prop="head"
  48. label="负责人"
  49. />
  50. <el-table-column
  51. prop="remarks"
  52. label="备注"
  53. />
  54. <el-table-column
  55. label="是否启用"
  56. >
  57. <template #default="scope">
  58. <el-switch
  59. v-model="scope.row.isEffective"
  60. style="--el-switch-on-color: #13ce66; --el-switch-off-color: #ff4949"
  61. @change="changeIsEffective(scope.row)"
  62. />
  63. </template>
  64. </el-table-column>
  65. <el-table-column label="操作">
  66. <template #default="scope">
  67. <el-button
  68. type="primary"
  69. @click="openWarehouseEdit(scope.row)"
  70. >编辑</el-button>
  71. <el-button
  72. type="danger"
  73. @click="warehouseDelete(scope.row)"
  74. >删除</el-button>
  75. </template>
  76. </el-table-column>
  77. </el-table>
  78. <!-- 分页-->
  79. <div class="gva-pagination">
  80. <el-pagination
  81. :current-page="searchWarehouse.pageInfo.page"
  82. :page-size="searchWarehouse.pageInfo.pageSize"
  83. :page-sizes="[10, 30, 50, 100]"
  84. :total="total"
  85. layout="total, sizes, prev, pager, next, jumper"
  86. @current-change="handleCurrentChange"
  87. @size-change="handleSizeChange"
  88. />
  89. </div>
  90. <!-- 修改-->
  91. <el-drawer
  92. v-model="isOpenWarehouseEdit"
  93. title="修改仓库信息"
  94. direction="rtl"
  95. size="30%"
  96. >
  97. <div>
  98. <el-form
  99. v-model="warehouseEditData"
  100. label-position="left"
  101. label-width="auto"
  102. style="max-width: 400px"
  103. >
  104. <el-form-item label="库房名称">
  105. <el-input v-model="warehouseEditData.name" />
  106. </el-form-item>
  107. <el-form-item label="库房位置">
  108. <el-input
  109. v-model="warehouseEditData.location"
  110. />
  111. </el-form-item>
  112. <el-form-item label="负责人">
  113. <el-input
  114. v-model="warehouseEditData.head"
  115. />
  116. </el-form-item>
  117. <el-form-item label="备注">
  118. <el-input v-model="warehouseEditData.remarks" />
  119. </el-form-item>
  120. <el-form-item>
  121. <el-button
  122. type="primary"
  123. @click="warehouseEditSubmit"
  124. >提交</el-button>
  125. <el-button @click="isOpenWarehouseEdit = false">关闭</el-button>
  126. </el-form-item>
  127. </el-form>
  128. </div>
  129. </el-drawer>
  130. <el-drawer
  131. v-model="isOpenWarehouseAdd"
  132. title="新增仓库信息"
  133. direction="rtl"
  134. size="30%"
  135. >
  136. <div>
  137. <el-form
  138. v-model="warehouseAddData"
  139. label-position="left"
  140. label-width="auto"
  141. style="max-width: 400px"
  142. >
  143. <el-form-item label="库房名称">
  144. <el-input v-model="warehouseAddData.name" />
  145. </el-form-item>
  146. <el-form-item label="库房位置">
  147. <el-input
  148. v-model="warehouseAddData.location"
  149. />
  150. </el-form-item>
  151. <el-form-item label="负责人">
  152. <el-input
  153. v-model="warehouseAddData.head"
  154. />
  155. </el-form-item>
  156. <el-form-item label="备注">
  157. <el-input v-model="warehouseAddData.remarks" />
  158. </el-form-item>
  159. <el-form-item>
  160. <el-button
  161. type="primary"
  162. @click="warehouseAddSubmit"
  163. >提交</el-button>
  164. <el-button @click="isOpenWarehouseAdd = false">关闭</el-button>
  165. </el-form-item>
  166. </el-form>
  167. </div>
  168. </el-drawer>
  169. </el-main>
  170. </el-container>
  171. </template>
  172. <script setup>
  173. import { ref, onMounted } from 'vue'
  174. import {
  175. createWarehouse,
  176. deleteWarehouse,
  177. queryWarehouseList,
  178. switchWarehouse,
  179. updateWarehouse
  180. } from '@/api/storehouse'
  181. import { ElMessage, ElMessageBox } from 'element-plus'
  182. const searchWarehouse = ref({
  183. pageInfo: {
  184. page: 1,
  185. pageSize: 10,
  186. },
  187. name: '',
  188. })
  189. const warehouseListData = ref([])
  190. const total = ref(0)
  191. const getData = async() => {
  192. // 假设有接口来获取数据
  193. await queryWarehouseList(searchWarehouse.value).then(res => {
  194. warehouseListData.value = res.data.list
  195. total.value = res.data.total
  196. })
  197. }
  198. // 分页
  199. const handleSizeChange = (val) => {
  200. searchWarehouse.value.pageSize = val
  201. getData()
  202. }
  203. const handleCurrentChange = (val) => {
  204. searchWarehouse.value.page = val
  205. getData()
  206. }
  207. const changeIsEffective = async(row) => {
  208. await switchWarehouse(row).then(res => {
  209. console.log(res)
  210. })
  211. }
  212. const isOpenWarehouseEdit = ref(false)
  213. const warehouseEditData = ref()
  214. const openWarehouseEdit = (val) => {
  215. isOpenWarehouseEdit.value = true
  216. warehouseEditData.value = val
  217. }
  218. const warehouseEditSubmit = async() => {
  219. if (warehouseEditData.value.name === '') {
  220. ElMessage.error('库房名称不能为空')
  221. return
  222. }
  223. await updateWarehouse(warehouseEditData.value).then(res => {
  224. if (res.code === 0) {
  225. ElMessage.success(res.msg)
  226. } else {
  227. ElMessage.error('编辑失败')
  228. }
  229. isOpenWarehouseEdit.value = false
  230. getData()
  231. })
  232. }
  233. const warehouseDelete = (val) => {
  234. ElMessageBox.confirm(
  235. '将永久删除该信息。是否继续?',
  236. '删除',
  237. {
  238. confirmButtonText: '确定',
  239. cancelButtonText: '取消',
  240. type: 'warning',
  241. }
  242. )
  243. .then(async() => {
  244. await deleteWarehouse(val).then(res => {
  245. if (res.code === 0) {
  246. ElMessage.success('删除成功')
  247. getData()
  248. } else {
  249. ElMessage.error('删除失败')
  250. }
  251. })
  252. })
  253. .catch(() => {
  254. ElMessage({
  255. type: 'info',
  256. message: '删除已取消',
  257. })
  258. })
  259. }
  260. const warehouseAddData = ref({
  261. name: '',
  262. location: '',
  263. head: '',
  264. remarks: '',
  265. })
  266. const isOpenWarehouseAdd = ref(false)
  267. const warehouseAddSubmit = async() => {
  268. if (warehouseAddData.value.name === '') {
  269. ElMessage.error('库房名称不能为空')
  270. return
  271. }
  272. await createWarehouse(warehouseAddData.value).then(res => {
  273. if (res.code === 0) {
  274. ElMessage.success(res.msg)
  275. } else {
  276. ElMessage.error(res.msg)
  277. }
  278. isOpenWarehouseAdd.value = false
  279. getData()
  280. })
  281. }
  282. onMounted(() => {
  283. getData()
  284. })
  285. </script>