index.vue 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870
  1. <template>
  2. <div id="stockManagement_index">
  3. <el-card shadow="never">
  4. <el-form :model="formData" ref="formName" label-width="80px">
  5. <el-row :gutter="10">
  6. <el-col :span="6">
  7. <el-form-item label="入库时间" prop="time">
  8. <el-date-picker
  9. class="w100"
  10. size="small"
  11. v-model="formData.time"
  12. type="daterange"
  13. range-separator="至"
  14. start-placeholder="开始日期"
  15. end-placeholder="结束日期"
  16. value-format="yyyy-MM-dd"
  17. ></el-date-picker>
  18. </el-form-item>
  19. </el-col>
  20. <el-col :span="6">
  21. <el-form-item label="入库单号" prop="sourceBizNo">
  22. <el-input
  23. size="small"
  24. class="w100"
  25. placeholder="请输入"
  26. v-model="formData.sourceBizNo"
  27. ></el-input>
  28. </el-form-item>
  29. </el-col>
  30. <el-col :span="6">
  31. <el-form-item label="入库类型" prop="bizType">
  32. <el-select
  33. style="width: 100%"
  34. filterable
  35. placeholder="请选择"
  36. v-model="formData.bizType"
  37. clearable
  38. >
  39. <el-option
  40. v-for="item in sceneState"
  41. :key="item.code"
  42. :value="item.code + ''"
  43. :label="item.label"
  44. ></el-option>
  45. </el-select>
  46. </el-form-item>
  47. </el-col>
  48. <el-col :span="6">
  49. <el-form-item label="物品编码" prop="categoryCode">
  50. <el-input
  51. size="small"
  52. class="w100"
  53. placeholder="请输入"
  54. v-model="formData.categoryCode"
  55. ></el-input>
  56. </el-form-item>
  57. </el-col>
  58. <el-col :span="6">
  59. <el-form-item label="物品名称" prop="categoryName">
  60. <el-input
  61. size="small"
  62. class="w100"
  63. placeholder="请输入"
  64. v-model="formData.categoryName"
  65. ></el-input>
  66. </el-form-item>
  67. </el-col>
  68. <el-col :span="6">
  69. <el-form-item label="状态" prop="status">
  70. <el-select
  71. filterable
  72. size="small"
  73. class="w100"
  74. v-model="formData.status"
  75. placeholder="请选择"
  76. clearable
  77. >
  78. <el-option
  79. v-for="item in auditStatus"
  80. :key="item.code"
  81. :value="item.code"
  82. :label="item.label"
  83. ></el-option>
  84. </el-select>
  85. </el-form-item>
  86. </el-col>
  87. <!-- <el-col :span="6">
  88. <el-form-item label="组织机构:" prop="deptIds">
  89. <auth-selection
  90. v-model="formData.deptIds"
  91. style="width: 100%"
  92. ></auth-selection>
  93. </el-form-item>
  94. </el-col> -->
  95. <el-col :span="6">
  96. <el-form-item label="所属工厂" prop="factoryId">
  97. <el-select
  98. filterable
  99. placeholder="请选择"
  100. v-model="formData.factoryId"
  101. clearable
  102. class="w100"
  103. @change="getTreeData"
  104. >
  105. <el-option
  106. v-for="item in factoryList"
  107. :key="item.id"
  108. :label="item.name"
  109. :value="item.id"
  110. ></el-option>
  111. </el-select>
  112. </el-form-item>
  113. </el-col>
  114. <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
  115. <el-form-item label="仓库名称" prop="warehouseId">
  116. <el-select
  117. filterable
  118. placeholder="请选择"
  119. v-model="formData.warehouseId"
  120. clearable
  121. class="w100"
  122. >
  123. <el-option
  124. v-for="item in warehouseList"
  125. :key="item.id"
  126. :label="item.name"
  127. :value="item.id"
  128. ></el-option>
  129. </el-select>
  130. </el-form-item>
  131. </el-col>
  132. <el-col
  133. style="
  134. display: flex;
  135. justify-content: flex-end;
  136. margin-bottom: 10px;
  137. "
  138. >
  139. <div>
  140. <el-button icon="el-icon-refresh-left" size="small" @click="reset"
  141. >重置</el-button
  142. >
  143. <el-button
  144. type="primary"
  145. icon="el-icon-search"
  146. size="small"
  147. @click="search"
  148. >搜索</el-button
  149. >
  150. </div>
  151. </el-col>
  152. </el-row>
  153. </el-form>
  154. <ele-pro-table
  155. ref="table"
  156. :columns="columns"
  157. height="calc(100vh-300px)"
  158. :pageSize="20"
  159. :datasource="datasource"
  160. @cell-click="cellClick"
  161. v-loading="loading"
  162. >
  163. <template v-slot:selection="{ row }">
  164. <el-radio class="radio" v-model="currentRow.id" :label="row.id"
  165. ><i></i
  166. ></el-radio>
  167. </template>
  168. <!-- 表头工具栏 -->
  169. <template v-slot:toolbar>
  170. <el-button icon="el-icon-plus" type="primary" @click="add"
  171. >新建</el-button
  172. >
  173. <el-button
  174. icon="el-icon-edit-outline"
  175. type="primary"
  176. @click="priceMaintenance"
  177. v-if="isPrice == 1"
  178. >单价维护</el-button
  179. >
  180. <!-- <el-button icon="el-icon-top" type="primary" @click="shelves"
  181. >上下架</el-button
  182. > -->
  183. <el-button icon="el-icon-receiving" type="primary" @click="outbound"
  184. >出库</el-button
  185. >
  186. <el-button icon="el-icon-printer" type="primary" @click="print"
  187. >打印</el-button
  188. >
  189. <el-button icon="el-icon-printer" type="primary" @click="printkEnter" v-if="$hasPermission('wms:outin:printIn')"
  190. >打印入库单</el-button
  191. >
  192. <el-button icon="el-icon-printer" type="primary" @click="handlePrint('printTemplateTrRef')" v-if="$hasPermission('wms:outin:printIn1')"
  193. >打印采购入库单</el-button
  194. >
  195. <!-- <el-button
  196. icon="el-icon-plus"
  197. v-if="clientEnvironmentId == 4"
  198. type="primary"
  199. @click="exportExcel"
  200. >导入</el-button
  201. > -->
  202. </template>
  203. <!-- 状态 -->
  204. <template v-slot:verifyStatus="{ row }">
  205. <span :class="status[row.verifyStatus]?.class">
  206. {{ status[row.verifyStatus]?.label }}
  207. </span>
  208. </template>
  209. <!-- 单号链接 -->
  210. <template v-slot:bizNo="{ row }">
  211. <el-link type="primary" @click="details(row)">
  212. {{ row.bizNo }}
  213. </el-link>
  214. </template>
  215. <!-- 操作列 -->
  216. <template v-slot:action="{ row }">
  217. <el-link
  218. type="success"
  219. :underline="false"
  220. icon="el-icon-position"
  221. v-if="row.verifyStatus == 0 || row.verifyStatus == 3"
  222. @click="submit(row)"
  223. >
  224. 提交
  225. </el-link>
  226. <el-link
  227. type="primary"
  228. :underline="false"
  229. icon="el-icon-view"
  230. @click="edit(row)"
  231. v-if="row.verifyStatus == 0 || row.verifyStatus == 3"
  232. >
  233. 修改
  234. </el-link>
  235. <!-- <el-link v-if="row.verifyStatus == 2 && clientEnvironmentId == 3" type="primary" :underline="false"
  236. icon="el-icon-view" @click="quality(row)">
  237. 质检
  238. </el-link> -->
  239. <el-link
  240. v-if="row.verifyStatus == 2"
  241. type="primary"
  242. :underline="false"
  243. icon="el-icon-sort-up"
  244. @click="details(row)"
  245. >
  246. 上架
  247. </el-link>
  248. <el-link
  249. v-if="row.verifyStatus == 2"
  250. type="primary"
  251. :underline="false"
  252. icon="el-icon-sort-down"
  253. @click="details(row)"
  254. >
  255. 下架
  256. </el-link>
  257. <el-link
  258. type="primary"
  259. v-if="row.verifyStatus == 0 || row.verifyStatus == 3"
  260. :underline="false"
  261. icon="el-icon-delete"
  262. @click="deleted(row)"
  263. >
  264. 删除
  265. </el-link>
  266. </template>
  267. <template v-slot:bizType="{ row }">
  268. {{ handleBizType(row.bizType) }}
  269. </template>
  270. <template v-slot:assetType="{ row }">
  271. {{ handleAssetType(row.extInfo.assetType) }}
  272. </template>
  273. </ele-pro-table>
  274. </el-card>
  275. <printQRCode ref="printQRCodeRef"></printQRCode>
  276. <printStockEnter ref="printStockEnterRef" :groupName="groupName"></printStockEnter>
  277. <printTemplateTr ref="printTemplateTrRef" :groupName="groupName"></printTemplateTr>
  278. <!-- <priceMaintenanceDialog ref="priceMaintenanceDialogRef" /> -->
  279. </div>
  280. </template>
  281. <script>
  282. import storageApi from '@/api/warehouseManagement';
  283. import warehouseDefinition from '@/api/warehouseManagement/warehouseDefinition';
  284. /* import priceMaintenanceDialog from './components/priceMaintenanceDialog.vue'; */
  285. import { allCategoryLevel } from '@/api/classifyManage';
  286. import { parameterGetByCode } from '@/api/sys/index.js';
  287. ('@/view/warehouseManagement/stockManagement/components/priceMaintenanceDialog.vue');
  288. import printQRCode from './components/printQRCode.vue';
  289. import printStockEnter from './components/printStockEnter.vue';
  290. import printTemplateTr from './components/print-template-tr.vue';
  291. import {
  292. warehousingType,
  293. sceneState,
  294. auditStatus,
  295. useDict
  296. } from '@/utils/dict/index';
  297. import { enterprisePage } from '@/api/bpm/index.js';
  298. export default {
  299. components: { printQRCode, printStockEnter, printTemplateTr },
  300. data() {
  301. return {
  302. auditStatus,
  303. warehousingType,
  304. sceneState,
  305. codeList: [],
  306. factoryList: [],
  307. warehouseList: [],
  308. tableData: [],
  309. formData: {
  310. deptIds: '',
  311. categoryCode: '',
  312. categoryName: '',
  313. sourceBizNo: '',
  314. startTime: '',
  315. endTime: '',
  316. status: '',
  317. factoryId: '',
  318. time: [],
  319. warehouseId: ''
  320. // type: 1
  321. },
  322. loading: false,
  323. isPrice: 1,
  324. total: 0,
  325. status: [
  326. { label: '未审核', class: 'ele-text-info' },
  327. { label: '审核中', class: 'ele-text-primary' },
  328. { label: '审核通过', class: 'ele-text-success' },
  329. { label: '驳回', class: 'ele-text-danger' }
  330. ],
  331. currentRow: {},
  332. columns: [
  333. {
  334. slot: 'selection',
  335. label: '选择',
  336. width: 50,
  337. align: 'center'
  338. },
  339. {
  340. type: 'index',
  341. label: '序号',
  342. width: 50,
  343. align: 'center'
  344. },
  345. {
  346. prop: 'bizNo',
  347. label: '单号',
  348. align: 'center',
  349. slot: 'bizNo',
  350. showOverflowTooltip: true,
  351. width: 150
  352. },
  353. {
  354. prop: 'warehouseName',
  355. label: '仓库名称',
  356. align: 'center',
  357. showOverflowTooltip: true,
  358. minWidth: 100,
  359. },
  360. {
  361. prop: 'bizType',
  362. slot: 'bizType',
  363. label: '入库类型',
  364. align: 'center',
  365. showOverflowTooltip: true,
  366. width: 100
  367. },
  368. {
  369. prop: 'assetType',
  370. slot: 'assetType',
  371. label: '物品类型',
  372. align: 'center',
  373. showOverflowTooltip: true,
  374. width: 120
  375. },
  376. {
  377. prop: 'categoryNames',
  378. label: '物品名称',
  379. align: 'center',
  380. showOverflowTooltip: true,
  381. width: 150
  382. },
  383. {
  384. prop: 'categoryCodes',
  385. label: '物品编码',
  386. align: 'center',
  387. showOverflowTooltip: true,
  388. width: 150
  389. },
  390. {
  391. prop: 'specification',
  392. label: '规格',
  393. align: 'center',
  394. showOverflowTooltip: true
  395. },
  396. {
  397. prop: 'modelType',
  398. label: '型号',
  399. align: 'center',
  400. showOverflowTooltip: true
  401. },
  402. {
  403. prop: 'colorKey',
  404. label: '颜色',
  405. align: 'center',
  406. showOverflowTooltip: true
  407. },
  408. {
  409. prop: 'modelKey',
  410. label: '机型',
  411. align: 'center',
  412. showOverflowTooltip: true
  413. },
  414. {
  415. prop: 'sourceBizNo',
  416. label: '来源单据',
  417. align: 'center',
  418. showOverflowTooltip: true
  419. },
  420. {
  421. prop: 'createUserName',
  422. label: '入库人',
  423. align: 'center',
  424. showOverflowTooltip: true
  425. },
  426. {
  427. width: 160,
  428. prop: 'storageTime',
  429. label: '入库时间',
  430. align: 'center',
  431. showOverflowTooltip: true
  432. },
  433. {
  434. prop: 'verifyName',
  435. label: '审核人',
  436. align: 'center',
  437. showOverflowTooltip: true
  438. },
  439. // {
  440. // prop: 'startTime',
  441. // label: '开始时间',
  442. // align: 'center',
  443. // showOverflowTooltip: true
  444. // },
  445. {
  446. prop: 'outInStatus',
  447. label: '入库状态',
  448. align: 'center',
  449. showOverflowTooltip: true,
  450. width: 100,
  451. formatter: (row, column, cellValue) => {
  452. if (row.verifyStatus == 2) {
  453. return row.outInStatus == 1
  454. ? '预入库'
  455. : row.outInStatus == 2
  456. ? '部分入库'
  457. : row.outInStatus == 3
  458. ? '已入库'
  459. : '';
  460. }
  461. }
  462. },
  463. {
  464. prop: 'verifyStatus',
  465. label: '状态',
  466. align: 'center',
  467. slot: 'verifyStatus',
  468. showOverflowTooltip: true,
  469. width: 100
  470. },
  471. {
  472. columnKey: 'action',
  473. label: '操作',
  474. width: 250,
  475. align: 'center',
  476. slot: 'action',
  477. showOverflowTooltip: true
  478. }
  479. ],
  480. groupName:'',
  481. };
  482. },
  483. computed: {
  484. clientEnvironmentId() {
  485. return this.$store.state.user.info.clientEnvironmentId;
  486. },
  487. // 是否开启响应式布局
  488. styleResponsive() {
  489. return this.$store.state.theme.styleResponsive;
  490. }
  491. },
  492. created() {
  493. //仓库出入库是否显示金额(0:不显示 1:显示)
  494. parameterGetByCode({
  495. code: 'wms_price'
  496. }).then((res) => {
  497. this.isPrice = res.value;
  498. });
  499. },
  500. mounted() {
  501. this.getCompanyInfo();
  502. this.getTypeList();
  503. this.getFactoryList();
  504. this.getTreeData();
  505. },
  506. methods: {
  507. getCompanyInfo() {
  508. enterprisePage({
  509. pageNum: 1,
  510. size: 200
  511. }).then((res) => {
  512. if (res.list?.length > 0) {
  513. this.groupName = res.list[0].name;
  514. }
  515. });
  516. },
  517. async getTreeData() {
  518. this.formData.warehouseId = '';
  519. try {
  520. let res = await storageApi.getWarehouseTrees({
  521. factoryId: this.formData.factoryId
  522. });
  523. if (res?.code === '0') {
  524. this.warehouseList = res.data;
  525. }
  526. } catch (error) {
  527. console.log(error);
  528. }
  529. },
  530. //获取工厂列表
  531. async getFactoryList() {
  532. const res = await warehouseDefinition.getFactoryarea({
  533. pageNum: 1,
  534. size: 9999,
  535. type: 1
  536. });
  537. this.factoryList = res.list;
  538. },
  539. // 单击获取id
  540. cellClick(row) {
  541. this.currentRow = row;
  542. },
  543. shelves() {
  544. console.log('上架');
  545. },
  546. unShelves() {
  547. console.log('下架');
  548. },
  549. priceMaintenance() {
  550. if (Object.keys(this.currentRow).length == 0) {
  551. return this.$message.error('请选择单据');
  552. } else {
  553. if (this.currentRow.verifyStatus == 2) {
  554. this.$router.push({
  555. path: '/warehouseManagement/stockManagement/priceMaintenance',
  556. query: {
  557. ids: this.currentRow.id
  558. }
  559. });
  560. /* this.$refs.priceMaintenanceDialogRef.open(this.currentRow.id); */
  561. } else {
  562. this.$message.error('该单据未审核通过');
  563. }
  564. }
  565. },
  566. async outbound() {
  567. if (Object.keys(this.currentRow).length == 0) {
  568. return this.$message.error('请选择单据');
  569. } else {
  570. if (this.currentRow.verifyStatus == 2) {
  571. const res = await storageApi.getInboundDetailsById(
  572. this.currentRow.id
  573. );
  574. const arr = [];
  575. for (const key in res.outInDetailList) {
  576. for (const k in res.outInDetailList[key]
  577. .outInDetailRecordRequestList) {
  578. arr.push({
  579. ...res.outInDetailList[key].outInDetailRecordRequestList[k]
  580. });
  581. }
  582. }
  583. let ids = arr.map((item) => item.id).join(',');
  584. this.$router.push({
  585. path: '/warehouseManagement/outgoingManagement/add',
  586. query: {
  587. ids,
  588. bizType: this.currentRow.bizType,
  589. assetType: this.currentRow.extInfo.assetType
  590. }
  591. });
  592. } else {
  593. this.$message.error('该单据未审核通过');
  594. }
  595. }
  596. },
  597. handleAssetType(r) {
  598. let arr = r?.split(',') || [];
  599. const filteredData = this.codeList.filter((item) =>
  600. arr.includes(item.dictCode)
  601. );
  602. return filteredData.map((item) => item.dictValue).join(',');
  603. },
  604. async getTypeList() {
  605. const { data } = await allCategoryLevel();
  606. this.codeList = data.map((item) => {
  607. return { dictCode: item.id, dictValue: item.name };
  608. });
  609. },
  610. submit(row) {
  611. this.$confirm('此操作将提交流程, 是否继续?', '提示', {
  612. confirmButtonText: '确定',
  613. cancelButtonText: '取消',
  614. type: 'warning'
  615. })
  616. .then(async () => {
  617. this.loading = true;
  618. const data = await storageApi.submitTwo({ outInId: row.id });
  619. this.loading = false;
  620. if (data.code == 0) {
  621. this.$message.success(data.message);
  622. this.getList();
  623. }
  624. })
  625. .catch(() => {});
  626. },
  627. handleBizType(code) {
  628. for (const key in this.sceneState) {
  629. if (this.sceneState[key].code == code) {
  630. return this.sceneState[key].label;
  631. }
  632. }
  633. },
  634. async datasource({ page, limit, where }) {
  635. const params = Object.assign({}, this.formData);
  636. if (params.time?.length) {
  637. params.startTime = params.time[0];
  638. params.endTime = params.time[1];
  639. }
  640. delete params.time;
  641. // params.bizStatus = 1;
  642. const res = await storageApi.getInboundList({
  643. pageNum: page,
  644. size: limit,
  645. type: 1,
  646. ...params
  647. });
  648. return res;
  649. },
  650. getAuditStatus: useDict(auditStatus),
  651. getList() {
  652. this.$refs.table.reload();
  653. },
  654. add(row) {
  655. const query = {};
  656. if (row?.id) {
  657. query.id = row.id;
  658. }
  659. this.$router.push({
  660. path: '/warehouseManagement/stockManagement/add'
  661. // query
  662. });
  663. },
  664. quality(row) {
  665. this.$router.push({
  666. path: '/warehouseManagement/stockManagement/quality',
  667. query: {
  668. id: row.id
  669. }
  670. });
  671. },
  672. exportExcel() {
  673. this.$router.push({
  674. path: '/warehouseManagement/stockManagement/add_export'
  675. // query
  676. });
  677. },
  678. edit(row) {
  679. this.$router.push({
  680. path: '/warehouseManagement/stockManagement/add',
  681. query: {
  682. detailId: row.id
  683. }
  684. });
  685. },
  686. details(row) {
  687. this.$router.push({
  688. path: '/warehouseManagement/stockManagement/details',
  689. query: {
  690. id: row.id,
  691. verifyStatus: row.verifyStatus
  692. }
  693. });
  694. },
  695. async deleted(row) {
  696. this.$confirm('是否确定删除?', '提示', {
  697. confirmButtonText: '确定',
  698. cancelButtonText: '取消',
  699. type: 'warning'
  700. })
  701. .then(async () => {
  702. const data = await storageApi.delete([row.id]);
  703. if (data.code == '0') {
  704. this.$message.success('删除成功!');
  705. this.getList();
  706. }
  707. })
  708. .catch(() => {});
  709. },
  710. handleCurrentChange() {
  711. this.getList();
  712. },
  713. handleSizeChange() {
  714. this.formData.page = 1;
  715. this.getList();
  716. },
  717. search() {
  718. this.formData.page = 1;
  719. this.getList();
  720. },
  721. reset() {
  722. this.$refs.formName.resetFields();
  723. this.search();
  724. },
  725. print() {
  726. if (!this.currentRow.id) {
  727. return this.$message({
  728. message: '请先选择单据',
  729. type: 'warning',
  730. duration: 2000
  731. });
  732. }
  733. if (this.currentRow.verifyStatus !== 2) {
  734. return this.$message({
  735. message: '该单据未审核通过',
  736. type: 'warning',
  737. duration: 2000
  738. });
  739. }
  740. console.log(this.currentRow);
  741. this.$refs.printQRCodeRef.init(this.currentRow.id);
  742. console.log('print');
  743. },
  744. printkEnter() {
  745. if (!this.currentRow.id) {
  746. return this.$message({
  747. message: '请先选择单据',
  748. type: 'warning',
  749. duration: 2000
  750. });
  751. }
  752. this.$refs.printStockEnterRef.init(this.currentRow.id, this.currentRow);
  753. },
  754. handlePrint(refName) {
  755. if (!this.currentRow.id) {
  756. return this.$message({
  757. message: '请先选择单据',
  758. type: 'warning',
  759. duration: 2000
  760. });
  761. }
  762. if (this.currentRow.verifyStatus !== 2) {
  763. return this.$message({
  764. message: '该单据未审核通过',
  765. type: 'warning',
  766. duration: 2000
  767. });
  768. }
  769. this.$refs[refName].init(this.currentRow.id, this.currentRow);
  770. }
  771. }
  772. };
  773. </script>
  774. <style lang="scss" scoped>
  775. #stockManagement_index {
  776. height: calc(100vh - 96px);
  777. width: 100%;
  778. padding: 10px;
  779. box-sizing: border-box;
  780. // element-ui样式穿透
  781. :deep(.el-card) {
  782. height: 100%;
  783. .el-card__body {
  784. height: 100%;
  785. box-sizing: border-box;
  786. display: flex;
  787. flex-direction: column;
  788. .ele-pro-table {
  789. flex: 1;
  790. display: flex;
  791. flex-direction: column;
  792. .el-table {
  793. flex: 1;
  794. // display: flex;
  795. // flex-direction: column;
  796. // .el-table__body-wrapper {
  797. // flex: 1;
  798. // }
  799. }
  800. }
  801. }
  802. .el-form-item {
  803. margin-bottom: 5px !important;
  804. }
  805. }
  806. .w100 {
  807. width: 100% !important;
  808. }
  809. .p20 {
  810. padding: 20px;
  811. }
  812. .mt20 {
  813. margin-top: 20px;
  814. }
  815. .mt10 {
  816. margin-top: 10px;
  817. }
  818. .el-form {
  819. overflow: hidden;
  820. }
  821. .float-right {
  822. float: right;
  823. text-align: right;
  824. margin-right: 20px;
  825. }
  826. .right {
  827. text-align: right;
  828. }
  829. .col {
  830. color: #aaa;
  831. }
  832. .pr10 {
  833. padding-right: 10px;
  834. }
  835. }
  836. </style>