commodity.vue 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906
  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="19">
  9. <el-form
  10. inline
  11. style="margin-top: 10px"
  12. >
  13. <el-form-item label="名称">
  14. <el-input
  15. v-model="queryGoodsData.name"
  16. placeholder="请输入名称"
  17. />
  18. </el-form-item>
  19. <el-form-item label="类型">
  20. <el-cascader
  21. clearable
  22. @clear="queryGoodsData.genre = 0"
  23. :options="goodsTypeData"
  24. @change="changeQueryGoodsType"
  25. :props="goodsTypeProps"/>
  26. </el-form-item>
  27. <el-form-item label="特征">
  28. <el-input
  29. placeholder="请输入特征"
  30. v-model="queryGoodsData.characteristic"
  31. />
  32. </el-form-item>
  33. <el-form-item label="规格">
  34. <el-input
  35. placeholder="请输入规格"
  36. v-model="queryGoodsData.specifications"
  37. />
  38. </el-form-item>
  39. <el-form-item>
  40. <el-button @click="searchData" type="primary" icon="Search">搜索</el-button>
  41. </el-form-item>
  42. </el-form>
  43. </el-col>
  44. <el-col :span="5">
  45. <el-button
  46. @click="inboundDialog = true"
  47. >入库</el-button>
  48. <el-button
  49. @click="outboundDialog = true"
  50. >出库</el-button>
  51. <el-button
  52. @click="isOpenGoodsAdd = true"
  53. >货品新增</el-button>
  54. <el-button
  55. @click="isOpenCommodityGenre = true"
  56. >货品类型</el-button>
  57. </el-col>
  58. </el-row>
  59. </el-header>
  60. <el-main class="gva-table-box">
  61. <el-table
  62. :data="goodsListData"
  63. style="height: 600px"
  64. >
  65. <el-table-column
  66. prop="name"
  67. label="货品名称"
  68. align="center"
  69. />
  70. <el-table-column
  71. prop="goodsGenre.name"
  72. label="类型"
  73. align="center"
  74. />
  75. <el-table-column
  76. prop="number"
  77. label="数量"
  78. align="center"
  79. />
  80. <el-table-column
  81. prop="position"
  82. label="位置"
  83. align="center"
  84. />
  85. <el-table-column label="操作">
  86. <template #default="scope">
  87. <el-button
  88. size="small"
  89. type="primary"
  90. @click="openGoodsEdit(scope.row)"
  91. >编辑</el-button>
  92. </template>
  93. </el-table-column>
  94. </el-table>
  95. <!-- 分页-->
  96. <div class="gva-pagination">
  97. <el-pagination
  98. :current-page="queryGoodsData.pageInfo.page"
  99. :page-size="queryGoodsData.pageInfo.pageSize"
  100. :page-sizes="[10, 30, 50, 100]"
  101. :total="total"
  102. layout="total, sizes, prev, pager, next, jumper"
  103. @current-change="handleCurrentChange"
  104. @size-change="handleSizeChange"
  105. />
  106. </div>
  107. <!-- 修改-->
  108. <el-drawer
  109. v-model="isOpenGoodsEdit"
  110. title="修改货品信息"
  111. direction="rtl"
  112. size="30%"
  113. >
  114. <div>
  115. <el-form
  116. label-position="left"
  117. label-width="auto"
  118. style="max-width: 400px"
  119. size="large"
  120. >
  121. <el-form-item label="货品名称">
  122. <el-input v-model="goodsEditData.name" />
  123. </el-form-item>
  124. <el-form-item label="货品类型">
  125. <el-cascader
  126. v-model="goodsEditData.goodsGenreId"
  127. :options="goodsTypeData"
  128. @change="editHandleChange"
  129. :props="goodsTypeProps"/>
  130. </el-form-item>
  131. <el-form-item label="特征">
  132. <el-input
  133. v-model="goodsEditData.characteristic"
  134. />
  135. </el-form-item>
  136. <el-form-item label="规格">
  137. <el-input v-model="goodsEditData.specifications" />
  138. </el-form-item>
  139. <el-form-item label="单位">
  140. <el-input v-model="goodsEditData.unit" />
  141. </el-form-item>
  142. <el-form-item label="数量">
  143. <el-input v-model="goodsEditData.number" type="number"/>
  144. </el-form-item>
  145. <el-form-item>
  146. <el-button
  147. type="primary"
  148. @click="editGoodsSubmit"
  149. >提交</el-button>
  150. <el-button @click="isOpenGoodsEdit = false">关闭</el-button>
  151. </el-form-item>
  152. </el-form>
  153. </div>
  154. </el-drawer>
  155. <el-drawer
  156. v-model="isOpenGoodsAdd"
  157. title="新增货品"
  158. direction="rtl"
  159. size="30%"
  160. >
  161. <div>
  162. <el-form
  163. v-model="goodsAddDate"
  164. label-position="left"
  165. label-width="auto"
  166. style="max-width: 400px"
  167. size="large"
  168. >
  169. <el-form-item label="货品名称" prop="name">
  170. <el-input v-model="goodsAddDate.name"/>
  171. </el-form-item>
  172. <el-form-item label="货品类型">
  173. <el-cascader
  174. :options="goodsTypeData"
  175. @change="handleChange"
  176. :props="goodsTypeProps"/>
  177. </el-form-item>
  178. <el-form-item label="特性">
  179. <el-input
  180. v-model.number="goodsAddDate.characteristic"
  181. />
  182. </el-form-item>
  183. <el-form-item label="规格">
  184. <el-input
  185. v-model="goodsAddDate.specifications"
  186. />
  187. </el-form-item>
  188. <el-form-item label="单位">
  189. <el-input v-model="goodsAddDate.unit" />
  190. </el-form-item>
  191. <el-form-item label="数量">
  192. <el-input v-model="goodsAddDate.number" type="number"/>
  193. </el-form-item>
  194. <el-form-item label="位置">
  195. <el-input v-model="goodsAddDate.position" />
  196. </el-form-item>
  197. <el-form-item>
  198. <el-button
  199. type="primary"
  200. @click="goodsAddSubmit"
  201. size="large"
  202. >提交</el-button>
  203. </el-form-item>
  204. </el-form>
  205. </div>
  206. </el-drawer>
  207. <!-- 货品类型-->
  208. <el-drawer
  209. v-model="isOpenCommodityGenre"
  210. title="货品类型"
  211. direction="rtl"
  212. size="50%"
  213. >
  214. <el-header>
  215. <el-button
  216. type="primary"
  217. @click="isOpenAddGenre = true"
  218. >新增货品类型</el-button>
  219. </el-header>
  220. <!-- :data="filterTableData"-->
  221. <el-main>
  222. <el-table :data="goodsTypeData" row-key="ID">
  223. <el-table-column
  224. label="ID"
  225. prop="ID"
  226. sortable
  227. />
  228. <el-table-column
  229. label="名称"
  230. prop="name"
  231. sortable
  232. />
  233. <el-table-column
  234. label="备注"
  235. prop="remarks"
  236. sortable
  237. />
  238. <el-table-column align="right">
  239. <template #header>
  240. <el-input
  241. v-model="searchCommodityGenre"
  242. placeholder="筛选"
  243. />
  244. </template>
  245. <template #default="scope">
  246. <el-button
  247. type="primary"
  248. @click="openUpdateGenre(scope.row)"
  249. >编辑</el-button>
  250. <el-button
  251. type="danger"
  252. @click="omitGoodsType(scope.row)"
  253. >删除</el-button>
  254. </template>
  255. </el-table-column>
  256. </el-table>
  257. </el-main>
  258. <!-- 新增-->
  259. <el-dialog
  260. v-model="isOpenAddGenre"
  261. title="新增货品类型"
  262. width="700"
  263. align-center
  264. >
  265. <template #footer>
  266. <el-form size="large">
  267. <el-form-item>
  268. <el-alert
  269. show-icon
  270. title="注意:如果没有选择父级类型那么添加的类型就属于一级货品类型,否则属于二级货品类型"
  271. type="info"
  272. />
  273. </el-form-item>
  274. <el-form-item label="父级类型:">
  275. <el-select
  276. placeholder="请选择父级类型"
  277. v-model="createGoodsTypeData.parentId"
  278. clearable
  279. @clear="createGoodsTypeData.parentId = ''"
  280. >
  281. <el-option
  282. v-for="item in goodsTypeData"
  283. :key="item.ID"
  284. :label="item.name"
  285. :value="item.ID"
  286. />
  287. </el-select>
  288. </el-form-item>
  289. <el-form-item label="类型名称:">
  290. <el-input
  291. placeholder="请输入货物类型名称"
  292. v-model="createGoodsTypeData.name"
  293. clearable
  294. />
  295. </el-form-item>
  296. <el-form-item label="类型备注:">
  297. <el-input
  298. placeholder="请输入备注"
  299. v-model="createGoodsTypeData.remarks"
  300. clearable
  301. />
  302. </el-form-item>
  303. </el-form>
  304. <div class="dialog-footer">
  305. <el-button
  306. @click="isOpenAddGenre = false"
  307. size="large">
  308. 取消
  309. </el-button>
  310. <el-button type="primary" @click="increaseGoodsType" size="large">
  311. 确认
  312. </el-button>
  313. </div>
  314. </template>
  315. </el-dialog>
  316. <!-- 编辑-->
  317. <el-dialog
  318. v-model="isOpenUpdateGenre"
  319. title="编辑货品类型"
  320. width="700"
  321. align-center
  322. >
  323. <template #footer>
  324. <el-form size="large">
  325. <el-form-item label="父级类型:" v-show="updateGoodsTypeData.parentId !== ''">
  326. <el-select
  327. placeholder="请选择父级类型"
  328. v-model="updateGoodsTypeData.parentId"
  329. >
  330. <el-option
  331. v-for="item in goodsTypeData"
  332. :key="item.ID"
  333. :label="item.name"
  334. :value="item.ID"
  335. />
  336. </el-select>
  337. </el-form-item>
  338. <el-form-item label="类型名称:">
  339. <el-input
  340. placeholder="请输入货物类型名称"
  341. v-model="updateGoodsTypeData.name"
  342. clearable
  343. />
  344. </el-form-item>
  345. <el-form-item label="类型备注:">
  346. <el-input
  347. placeholder="请输入备注"
  348. v-model="updateGoodsTypeData.remarks"
  349. clearable
  350. />
  351. </el-form-item>
  352. </el-form>
  353. <div class="dialog-footer">
  354. <el-button
  355. @click="isOpenUpdateGenre = false"
  356. size="large">
  357. 取消
  358. </el-button>
  359. <el-button type="primary" @click="modifyGoodsType" size="large">
  360. 确认
  361. </el-button>
  362. </div>
  363. </template>
  364. </el-dialog>
  365. </el-drawer>
  366. <!-- 入库-->
  367. <el-drawer
  368. v-model="inboundDialog"
  369. title="新建入库单"
  370. direction="rtl"
  371. size="50%"
  372. >
  373. <div>
  374. <el-header
  375. class="gva-search-box"
  376. style="height: 30px;line-height: 30px;"
  377. >
  378. <el-button type="primary" @click="addGoods">添加货品</el-button>
  379. <el-button type="danger" @click="reduceGoods">减少货品</el-button>
  380. </el-header>
  381. <el-main>
  382. <el-table
  383. :data="storeData.cargos"
  384. height="500"
  385. border
  386. style="width: 100%;margin-bottom: 20px"
  387. >
  388. <el-table-column label="货品" width="300">
  389. <template #default="{ row }">
  390. <el-select
  391. v-model="row.goodsId"
  392. filterable
  393. placeholder="选择货品"
  394. >
  395. <el-option
  396. v-for="item in goodsListData"
  397. :key="item.ID"
  398. :label="item.name"
  399. :value="item.ID"
  400. />
  401. </el-select>
  402. </template>
  403. </el-table-column>
  404. <el-table-column
  405. label="数量"
  406. width="200"
  407. >
  408. <template #default="{ row }">
  409. <el-input-number
  410. v-model="row.number"
  411. :min="1"
  412. />
  413. </template>
  414. </el-table-column>
  415. <el-table-column label="购买价格">
  416. <template #default="{ row }">
  417. <el-input v-model.number="row.buyingPrice" type="number"/>
  418. </template>
  419. </el-table-column>
  420. </el-table>
  421. <el-form inline>
  422. <el-form-item
  423. label="标题"
  424. prop="title"
  425. >
  426. <el-input
  427. v-model="storeData.title"
  428. style="width: 200px;"
  429. />
  430. </el-form-item>
  431. <el-form-item
  432. label="管理人"
  433. prop="custodian"
  434. >
  435. <el-input
  436. v-model="storeData.custodian"
  437. style="width: 200px;"
  438. />
  439. </el-form-item>
  440. <el-form-item
  441. label="备注"
  442. prop="custodian"
  443. >
  444. <el-input
  445. v-model="storeData.remarks"
  446. style="width: 200px;"
  447. />
  448. </el-form-item>
  449. <el-form-item>
  450. <el-button
  451. type="primary"
  452. @click="submitInboundForm"
  453. >提交入库</el-button>
  454. </el-form-item>
  455. </el-form>
  456. </el-main>
  457. </div>
  458. </el-drawer>
  459. <!-- 出库-->
  460. <el-drawer v-model="outboundDialog" size="50%" title="新建出库单">
  461. <el-header
  462. class="gva-search-box"
  463. style="height: 30px;line-height: 30px;"
  464. >
  465. <el-button type="primary" @click="outAddGoods">添加货品</el-button>
  466. <el-button type="danger" @click="outReduceGoods">减少货品</el-button>
  467. </el-header>
  468. <el-main>
  469. <el-table
  470. :data="outboundData.cargos"
  471. height="500"
  472. border
  473. style="width: 100%;margin-bottom: 20px"
  474. >
  475. <el-table-column label="货品" width="300">
  476. <template #default="{ row }">
  477. <el-select
  478. v-model="row.goodsId"
  479. filterable
  480. placeholder="选择货品"
  481. >
  482. <el-option
  483. v-for="item in goodsListData"
  484. :key="item.ID"
  485. :label="item.name"
  486. :value="item.ID"
  487. />
  488. </el-select>
  489. </template>
  490. </el-table-column>
  491. <el-table-column
  492. label="数量"
  493. width="200"
  494. >
  495. <template #default="{ row }">
  496. <el-input-number
  497. v-model="row.number"
  498. :min="1"
  499. />
  500. </template>
  501. </el-table-column>
  502. <el-table-column label="购买价格">
  503. <template #default="{ row }">
  504. <el-input v-model.number="row.buyingPrice" type="number"/>
  505. </template>
  506. </el-table-column>
  507. </el-table>
  508. <el-form inline>
  509. <el-form-item
  510. label="标题"
  511. prop="title"
  512. >
  513. <el-input
  514. v-model="outboundData.title"
  515. style="width: 200px;"
  516. />
  517. </el-form-item>
  518. <el-form-item
  519. label="管理人"
  520. prop="custodian"
  521. >
  522. <el-input
  523. v-model="outboundData.custodian"
  524. style="width: 200px;"
  525. />
  526. </el-form-item>
  527. <el-form-item
  528. label="备注"
  529. prop="custodian"
  530. >
  531. <el-input
  532. v-model="outboundData.remarks"
  533. style="width: 200px;"
  534. />
  535. </el-form-item>
  536. <el-form-item>
  537. <el-button
  538. type="primary"
  539. @click="submitOutboundForm"
  540. >提交出库</el-button>
  541. </el-form-item>
  542. </el-form>
  543. </el-main>
  544. </el-drawer>
  545. </el-main>
  546. </el-container>
  547. </template>
  548. <script setup>
  549. import { ref, onMounted, reactive } from 'vue'
  550. import {
  551. queryGoodsType,deleteGoodsType,
  552. createGoodsType,
  553. updateGoodsType,
  554. createGoods,
  555. queryGoodsList,
  556. updateGoods,
  557. createInboundManifest,
  558. createOutboundManifest
  559. } from '@/api/storehouse'
  560. import { ElMessage, ElMessageBox } from 'element-plus'
  561. const goodsTypeProps = {
  562. label: 'name',
  563. value: 'ID',
  564. }
  565. const handleChange = (value) => {
  566. goodsAddDate.goodsGenreId = value[1]
  567. }
  568. const editHandleChange = (val) => {
  569. goodsEditData.value.goodsGenreId = val[1]
  570. }
  571. // 入库
  572. const inboundDialog = ref(false)
  573. const addGoods = () => {
  574. storeData.cargos.push({ goodsId: null, number: 1, buyingPrice: 0 })
  575. }
  576. const reduceGoods = () => {
  577. if (storeData.cargos.length > 1) {
  578. storeData.cargos.pop()
  579. } else {
  580. console.log('只剩一项')
  581. }
  582. }
  583. const storeData = reactive({
  584. manifestGenre: '入库',
  585. title: '',
  586. custodian: '',
  587. cargos: [
  588. { goodsId: null, number: 1, buyingPrice: 0 },
  589. ],
  590. remarks: ''
  591. })
  592. const submitInboundForm = async () => {
  593. if (!validateInboundForm(storeData)) return
  594. await createInboundManifest(storeData).then(res => {
  595. if (res.code === 0) {
  596. ElMessage.success('添加成功')
  597. getData()
  598. inboundDialog.value = false
  599. }
  600. })
  601. }
  602. //出库
  603. const outboundDialog = ref(false)
  604. const outAddGoods = () => {
  605. outboundData.cargos.push({goodsId: null, number: 1, buyingPrice: 0})
  606. }
  607. const outReduceGoods = () => {
  608. if (outboundData.cargos.length > 1) {
  609. outboundData.cargos.pop()
  610. } else {
  611. console.log('只剩一项')
  612. }
  613. }
  614. const outboundData = reactive({
  615. manifestGenre: '出库',
  616. title: '',
  617. custodian: '',
  618. cargos: [
  619. { goodsId: null, number: 1, buyingPrice: 0 },
  620. ],
  621. remarks: ''
  622. })
  623. const submitOutboundForm = async () => {
  624. if (!validateInboundForm(outboundData)) return
  625. await createOutboundManifest(outboundData).then(res => {
  626. if (res.code === 0) {
  627. ElMessage.success('出库成功')
  628. getData()
  629. outboundDialog.value = false
  630. }
  631. })
  632. }
  633. const validateInboundForm = (data) => {
  634. if (!data.title.trim()) {
  635. ElMessage.warning('请输入标题')
  636. return false
  637. }
  638. if (!data.custodian.trim()) {
  639. ElMessage.warning('请输入负责人')
  640. return false
  641. }
  642. if (!Array.isArray(data.cargos) || data.cargos.length === 0) {
  643. ElMessage.warning('请至少添加一项商品')
  644. return false
  645. }
  646. for (let i = 0; i < data.cargos.length; i++) {
  647. const cargo = data.cargos[i]
  648. if (!cargo.goodsId) {
  649. ElMessage.warning(`第 ${i + 1} 行商品未选择`)
  650. return false
  651. }
  652. if (!cargo.number || cargo.number <= 0) {
  653. ElMessage.warning(`第 ${i + 1} 行数量必须大于0`)
  654. return false
  655. }
  656. }
  657. return true
  658. }
  659. const goodsListData = reactive([])
  660. const total = ref(0)
  661. // 货物类型
  662. const goodsTypeData = ref([])
  663. // 新增货物类型
  664. const createGoodsTypeData = reactive({
  665. name: "",
  666. remarks: "",
  667. parentId: ""
  668. })
  669. const increaseGoodsType = async () => {
  670. let data = {}
  671. data.name = createGoodsTypeData.name
  672. data.remarks = createGoodsTypeData.remarks
  673. if(createGoodsTypeData.parentId !== '') {
  674. data.parentId = createGoodsTypeData.parentId
  675. }
  676. await createGoodsType(data).then(res => {
  677. if (res.code === 0) {
  678. ElMessage.success('添加成功')
  679. createGoodsTypeData.name = ''
  680. createGoodsTypeData.remarks = ''
  681. createGoodsTypeData.parentId = ''
  682. isOpenAddGenre.value = false
  683. getData()
  684. } else {
  685. ElMessage.error(res.data.msg)
  686. }
  687. })
  688. }
  689. // 编辑货品类型
  690. const updateGoodsTypeData = reactive({
  691. id: 0,
  692. name: "",
  693. remarks: "",
  694. parentId: ""
  695. })
  696. const openUpdateGenre = (val) => {
  697. isOpenUpdateGenre.value = true
  698. updateGoodsTypeData.id = val.ID
  699. updateGoodsTypeData.name = val.name
  700. updateGoodsTypeData.remarks = val.remarks
  701. val.children === null ? updateGoodsTypeData.parentId = val.parentId : updateGoodsTypeData.parentId = ''
  702. }
  703. const modifyGoodsType = async () => {
  704. let data = {}
  705. data.id = updateGoodsTypeData.id
  706. data.name = updateGoodsTypeData.name
  707. data.remarks = updateGoodsTypeData.remarks
  708. if(updateGoodsTypeData.parentId !== '') {
  709. data.parentId = updateGoodsTypeData.parentId
  710. }
  711. await updateGoodsType(data).then(res => {
  712. if (res.code === 0) {
  713. ElMessage.success('编辑成功')
  714. isOpenUpdateGenre.value = false
  715. getData()
  716. } else {
  717. ElMessage.error('编辑失败')
  718. }
  719. })
  720. }
  721. //删除货物类型
  722. const omitGoodsType = (val) => {
  723. ElMessageBox.confirm(
  724. '将永久删除该信息。是否继续?',
  725. '删除',
  726. {
  727. confirmButtonText: '确定',
  728. cancelButtonText: '取消',
  729. type: 'warning',
  730. }
  731. )
  732. .then(async() => {
  733. await deleteGoodsType(val.ID).then(res => {
  734. if (res.code === 0) {
  735. ElMessage.success('删除成功')
  736. getData()
  737. } else {
  738. ElMessage.error('删除失败')
  739. }
  740. })
  741. })
  742. .catch(() => {
  743. ElMessage({
  744. type: 'info',
  745. message: '删除已取消',
  746. })
  747. })
  748. }
  749. // 新增货物类型
  750. const goodsAddDate = reactive({
  751. name: '投光灯1',
  752. goodsGenreId: '',
  753. characteristic: '400w',
  754. specifications: '',
  755. unit: '盏',
  756. number: 5,
  757. position: '大仓库'
  758. })
  759. const isOpenGoodsAdd = ref(false)
  760. const goodsAddSubmit = async() => {
  761. if (goodsAddDate.name === '' || goodsAddDate.goodsGenreId === '' || goodsAddDate.unit === '' || Number(goodsAddDate.number) <= 0) {
  762. ElMessage.error('请将必要的数据填写完整')
  763. return
  764. }
  765. await createGoods(goodsAddDate).then(res => {
  766. if (res.code === 0) {
  767. ElMessage.success('新增成功')
  768. isOpenGoodsAdd.value = false
  769. getData()
  770. } else {
  771. ElMessage.error('新增失败')
  772. }
  773. })
  774. }
  775. // 查询货物列表
  776. const queryGoodsData = reactive({
  777. pageInfo: {
  778. page: 1,
  779. pageSize: 10
  780. },
  781. genre: 0,
  782. name: "",
  783. characteristic: "",
  784. specifications: ""
  785. })
  786. const changeQueryGoodsType = (val) => {
  787. queryGoodsData.genre= val[1]
  788. }
  789. // 分页
  790. const handleSizeChange = (val) => {
  791. queryGoodsData.pageSize = val
  792. getData()
  793. }
  794. const handleCurrentChange = (val) => {
  795. queryGoodsData.page = val
  796. getData()
  797. }
  798. const searchData = async () => {
  799. queryGoodsData.page = 1
  800. queryGoodsData.pageSize = 10
  801. await queryGoodsList(queryGoodsData).then(res => {
  802. if (res.code === 0) {
  803. goodsListData.length = 0
  804. goodsListData.push(...res.data.list)
  805. }
  806. })
  807. }
  808. // 获取数据
  809. const getData = async() => {
  810. await queryGoodsType().then(res => {
  811. if (res.code === 0) {
  812. goodsTypeData.value.length = 0
  813. goodsTypeData.value = res.data
  814. }
  815. })
  816. await queryGoodsList(queryGoodsData).then(res => {
  817. if (res.code === 0) {
  818. goodsListData.length = 0
  819. goodsListData.push(...res.data.list)
  820. }
  821. })
  822. }
  823. // 货品类型
  824. const isOpenCommodityGenre = ref(false)
  825. const searchCommodityGenre = ref()
  826. const isOpenAddGenre = ref(false)
  827. const isOpenUpdateGenre = ref(false)
  828. // 编辑货品
  829. const isOpenGoodsEdit = ref(false)
  830. const goodsEditData = reactive({
  831. id: 0,
  832. name: "",
  833. goodsGenreId: 0,
  834. characteristic: "",
  835. specifications: "",
  836. unit: "",
  837. number: 0
  838. })
  839. const openGoodsEdit = (val) => {
  840. goodsEditData.id = val.ID
  841. goodsEditData.name = val.name
  842. goodsEditData.goodsGenreId = val.goodsGenreId
  843. goodsEditData.characteristic = val.characteristic
  844. goodsEditData.specifications = val.specifications
  845. goodsEditData.unit = val.unit
  846. goodsEditData.number = val.number
  847. isOpenGoodsEdit.value = true
  848. }
  849. const editGoodsSubmit = async() => {
  850. await updateGoods(goodsEditData).then(res => {
  851. if (res.code === 0) {
  852. ElMessage.success('编辑成功')
  853. getData()
  854. } else {
  855. ElMessage.error('编辑失败')
  856. }
  857. isOpenGoodsEdit.value = false
  858. })
  859. }
  860. onMounted(() => {
  861. getData()
  862. })
  863. </script>