Addtrans.vue 23KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671
  1. <template>
  2. <div class="main-contain">
  3. <div class="position">
  4. <bread-crumb :crumbs="crumbs"></bread-crumb>
  5. <div>
  6. <el-button type="primary" @click="submit" v-show="showButton">保存</el-button>
  7. <el-button type="warning" @click="examine" v-show="showCheck">审核</el-button>
  8. </div>
  9. </div>
  10. <div class="app-container" v-loading="loading">
  11. <div
  12. style="
  13. justify-content: flex-start;
  14. margin: 0px 0 12px 0;
  15. display: flex;
  16. align-items: center;
  17. "
  18. >
  19. <el-form
  20. :inline="true"
  21. :model="formInline"
  22. class="demo-form-inline"
  23. >
  24. <el-form-item label="单据日期:">
  25. <el-date-picker
  26. v-model="warehousing_time"
  27. format="yyyy-MM-dd"
  28. value-format="yyyy-MM-dd"
  29. type="date"
  30. placeholder="选择日期"
  31. ></el-date-picker>
  32. </el-form-item>
  33. <span style="display: inline-block;margin-top: 8px;font-size: 14px;"><span style="color:red;font-size: 14px;">*</span>调出仓库:</span>
  34. <el-form-item prop="storehouse_out_id">
  35. <el-select size="small" v-model="storehouse_out_id" filterable placeholder="请选择调出仓库" @change="changeHouseList">
  36. <el-option
  37. v-for="(option, index) in houseList"
  38. :key="index"
  39. :label="option.storehouse_name"
  40. :value="option.id">
  41. </el-option>
  42. </el-select>
  43. </el-form-item>
  44. <span style="display: inline-block;margin-top: 8px;font-size: 14px;"><span style="color:red;font-size: 14px;">*</span>调入仓库:</span>
  45. <el-form-item prop="storehouse_in_id">
  46. <el-select size="small" v-model="storehouse_in_id" filterable placeholder="请选择调入仓库">
  47. <el-option
  48. v-for="(option, index) in houseList"
  49. :key="index"
  50. :label="option.storehouse_name"
  51. :value="option.id">
  52. </el-option>
  53. </el-select>
  54. </el-form-item>
  55. </el-form>
  56. </div>
  57. <el-form :rules="tableRules" :model="recordInfo" ref="tableForm">
  58. <el-table
  59. :header-cell-style="{
  60. backgroundColor: 'rgb(245, 247, 250)',
  61. color: '#606266',
  62. }"
  63. :data="recordInfo.recordData"
  64. border
  65. >
  66. >
  67. <el-table-column align="center" width="230">
  68. <template slot="header" slot-scope="scope" >
  69. 商品名称<span style="color:red;">*</span>
  70. </template>
  71. <template slot-scope="scope">
  72. <el-form-item
  73. :prop="'recordData.' + scope.$index + '.name'"
  74. :rules="tableRules.name"
  75. >
  76. <el-select
  77. @blur="selectGoodName"
  78. v-model="scope.row.name"
  79. style="width:200"
  80. filterable
  81. placeholder="请选择商品"
  82. @change="changeName"
  83. @input="changeGoodName(scope.$index)"
  84. :disabled="disabled"
  85. >
  86. <el-option
  87. v-for="(item, index) in tabList"
  88. :key="index"
  89. :label="item.project_name"
  90. :value="item"
  91. >
  92. </el-option>
  93. </el-select>
  94. </el-form-item>
  95. </template>
  96. </el-table-column>
  97. <el-table-column align="center" width="200">
  98. <template slot="header" slot-scope="scope">
  99. <span>商品类型<span style="color: red">*</span></span>
  100. </template>
  101. <template slot-scope="scope">
  102. <el-form-item style="padding-top: 20px;">
  103. <el-input v-model="scope.row.project_type" :disabled="true" style="width:180px"></el-input>
  104. </el-form-item>
  105. </template>
  106. </el-table-column>
  107. <el-table-column align="center" width="250">
  108. <template slot="header" slot-scope="scope" >
  109. <span>规格<span style="color: red">*</span></span>
  110. </template>
  111. <template slot-scope="scope">
  112. <el-form-item style="padding-top: 20px">
  113. <el-input v-model="scope.row.second_specification_name" style="width:200px" :disabled="true"></el-input>
  114. </el-form-item>
  115. </template>
  116. </el-table-column>
  117. <el-table-column align="center" width="250">
  118. <template slot="header" slot-scope="scope">
  119. <span>调拨数量<span style="color: red">*</span></span>
  120. </template>
  121. <template slot-scope="scope">
  122. <el-form-item style="padding-top: 20px" :prop="'recordData.' + scope.$index + '.count'"
  123. :rules='tableRules.count' >
  124. <el-input v-model="scope.row.count" style="width:100px" @input="selectCount(scope.row.project_id,scope.row.sencond_unit,scope.row.is_source,scope.row.count,scope.$index)"></el-input>
  125. <el-select
  126. v-model="scope.row.sencond_unit"
  127. style="width: 100px"
  128. filterable
  129. placeholder="请选择"
  130. :disabled="disabled"
  131. >
  132. <el-option
  133. v-for="(item, index) in scope.row.unitList"
  134. :key="index"
  135. :label="item.name"
  136. :value="item.name"
  137. >
  138. </el-option>
  139. </el-select>
  140. </el-form-item>
  141. </template>
  142. </el-table-column>
  143. <el-table-column label="库存总数" align="center" width="200">
  144. <template slot="header" slot-scope="scope">
  145. <span>库存总数<span style="color: red">*</span></span>
  146. </template>
  147. <template slot-scope="scope">
  148. <el-form-item style="padding-top: 20px">
  149. <el-input v-model="scope.row.second_total" style="width:150px" :disabled="true"></el-input>
  150. </el-form-item>
  151. </template>
  152. </el-table-column>
  153. <el-table-column label="备注" align="center" width="200">
  154. <template slot-scope="scope">
  155. <el-input v-model="scope.row.remake" style="width:160px"></el-input>
  156. </template>
  157. </el-table-column>
  158. <el-table-column label="操作" align="center" width="190px">
  159. <template slot-scope="scope">
  160. <el-tooltip class="item" content="新增" placement="top-start">
  161. <el-button
  162. icon="el-icon-plus"
  163. size="small"
  164. type="primary"
  165. @click="toAdd(scope.row)"
  166. >
  167. </el-button>
  168. </el-tooltip>
  169. <el-tooltip class="item" content="删除" placement="top-start">
  170. <el-button
  171. icon="el-icon-delete"
  172. size="small"
  173. type="danger"
  174. @click="toDelete(scope.row, scope.$index)"
  175. >
  176. </el-button>
  177. </el-tooltip>
  178. </template>
  179. </el-table-column>
  180. </el-table>
  181. </el-form>
  182. </div>
  183. </div>
  184. </template>
  185. <script>
  186. import BreadCrumb from "@/xt_pages/components/bread-crumb";
  187. import { uParseTime } from '@/utils/tools'
  188. import {getSencondeGoodList,saveSencondOrder,checkSecondOrder,getStoreHouseGoodList,getSumSecondeCount} from '@/api/seconde'
  189. export default {
  190. components: {
  191. BreadCrumb,
  192. },
  193. data() {
  194. return {
  195. crumbs: [
  196. { path: false, name: "库房管理" },
  197. { path: "/stock/warehousequery", name: "新增调拨" },
  198. ],
  199. value1: "",
  200. total: 0,
  201. page: 1,
  202. limit: 10,
  203. tableData: [{}, {}],
  204. formInline: {
  205. user: "",
  206. region: "",
  207. },
  208. currentIndex: 0,
  209. tableRules: {
  210. name: [
  211. { required: true, message: '商品名称不能为空', trigger: 'blur' }
  212. ],
  213. count: [
  214. { required: true, message: '调拨数量不能为空', trigger: 'blur' }
  215. ],
  216. },
  217. goodType: [],
  218. manufacturerList:[],
  219. goodList:[],
  220. loading:false,
  221. list:[],
  222. configlist:{},
  223. recordInfo: {
  224. recordData: [],
  225. },
  226. drugList:[],
  227. goodTypeList:[],
  228. drugTypeList:[],
  229. houseList:[],
  230. tabList:[],
  231. disabled:false,
  232. storehouse_out_id:"",
  233. storehouse_in_id:"",
  234. loading:false,
  235. warehousing_time:"",
  236. showButton:true,
  237. showCheck:false,
  238. };
  239. },
  240. methods: {
  241. // 初始化数据
  242. init() {},
  243. // 反审核
  244. approval() {},
  245. // 审核
  246. examine() {
  247. this.loading = true
  248. var array = []
  249. array.push(this.id)
  250. var ids = array.join(",")
  251. checkSecondOrder(ids).then(response=>{
  252. if(response.data.state == 1){
  253. var msg = response.data.data.msg
  254. this.loading = false
  255. if(msg == 1){
  256. this.$message.success("审核成功!")
  257. this.$router.push({path:"/stock/inventoryTransfer"})
  258. }
  259. if(msg == 2){
  260. var good_name = response.data.data.good_name
  261. var specification_name = response.data.data.specification_name
  262. var storehose_name = response.data.data.storehose_name
  263. this.$message.error(storehose_name + " "+good_name+"*"+specification_name+"库存不足,无法调拨,请修改调拨数量!")
  264. }
  265. if(msg == 3){
  266. var drug_name = response.data.data.drug_name
  267. var dose = response.data.data.dose
  268. var dose_unit = response.data.data.dose_unit
  269. var min_number = response.data.data.min_number
  270. var min_unit = response.data.data.min_unit
  271. var max_unit = response.data.data.max_unit
  272. var str = drug_name + " " + dose + dose_unit + "*" + min_number + min_unit+"/"+max_unit
  273. var storehose_name = response.data.data.storehose_name
  274. this.$message.error(storehose_name +" "+str +"库存不足,无法调拨,请修改调拨数量!")
  275. }
  276. }
  277. })
  278. },
  279. // 表单添加
  280. toAdd() {
  281. const tempObj = {}
  282. tempObj["name"] = "";
  283. tempObj['project_name'] = ""
  284. tempObj['project_type'] = ""
  285. tempObj['second_specification_name'] = ''
  286. tempObj['sencond_unit'] = ''
  287. tempObj['count'] = ''
  288. tempObj['second_total'] = ''
  289. tempObj["is_source"] = 0
  290. tempObj["remake"] = ''
  291. tempObj["project_id"] = 0
  292. tempObj["min_price"] = 0
  293. this.recordInfo.recordData.push(tempObj)
  294. },
  295. // 删除
  296. toDelete(row,index) {
  297. if (this.recordInfo.recordData.length <= 1) {
  298. this.$message.error('只有一条记录的时候无法删除')
  299. return
  300. } else {
  301. this.recordInfo.recordData.splice(index, 1)
  302. }
  303. },
  304. // 详情查看
  305. toDetails() {},
  306. // 表单全选
  307. handleSelectionChange() {},
  308. // 页表操作
  309. handleSizeChange(val) {
  310. this.limit = val;
  311. this.init();
  312. },
  313. handleCurrentChange(val) {
  314. this.page = val;
  315. this.init();
  316. },
  317. // 表格样式
  318. changColor({ rowIndex }) {
  319. if (rowIndex % 2 == 1) {
  320. return {
  321. backgroundColor: "#C4E1FF",
  322. color: "#303133",
  323. };
  324. } else {
  325. return {
  326. backgroundColor: "#ACD6FF",
  327. color: "#303133",
  328. };
  329. }
  330. },
  331. //获取基本数据信息
  332. getlist(){
  333. getSencondeGoodList().then(response=>{
  334. if(response.data.state == 1){
  335. var houseList = response.data.data.houseList
  336. this.houseList = houseList
  337. }
  338. })
  339. },
  340. getTime(val, temp) {
  341. if (val != 0) {
  342. return uParseTime(val, temp)
  343. } else {
  344. return ''
  345. }
  346. },
  347. submit() {
  348. this.loading = true
  349. const loading = this.$loading({
  350. lock: true,
  351. text: 'Loading',
  352. spinner: 'el-icon-loading',
  353. background: 'rgba(0, 0, 0, 0.7)'
  354. })
  355. if(this.storehouse_out_id <=0){
  356. this.$message.error("调出仓库不能为空!")
  357. this.loading = false
  358. loading.close()
  359. return
  360. }
  361. if(this.storehouse_in_id <=0){
  362. this.$message.error("调入仓库不能为空!")
  363. this.loading = false
  364. loading.close()
  365. return
  366. }
  367. this.$refs['tableForm'].validate((valid) => {
  368. if(valid) {
  369. const array = this.recordInfo.recordData
  370. for (let i = 0; i < array.length; i++) {
  371. array[i].count = parseInt(array[i].count)
  372. array[i].second_total = array[i].second_total.toString()
  373. }
  374. const params = {
  375. 'stockIn': this.recordInfo.recordData
  376. }
  377. var storehouse_in_id = parseInt(this.storehouse_in_id)
  378. var storehouse_out_id = parseInt(this.storehouse_out_id)
  379. var warehouse_time = this.warehousing_time
  380. console.log("@3232332323232",warehouse_time)
  381. saveSencondOrder(params,warehouse_time,storehouse_in_id,storehouse_out_id).then(response => {
  382. if (response.data.state == 1) {
  383. this.showCheck = true
  384. this.showButton = false
  385. var warehousingInfo = response.data.data.warehousingInfo
  386. this.$message.success('保存成功')
  387. this.loading = false
  388. loading.close()
  389. this.id = response.data.data.id
  390. } else {
  391. this.$message.error("保存失败")
  392. loading.close()
  393. }
  394. })
  395. } else {
  396. return false
  397. }
  398. })
  399. },
  400. changeGoodName(val) {
  401. this.currentIndex = val;
  402. },
  403. selectGoodName(val){
  404. if(this.storehouse_out_id == ""){
  405. this.$message.error("请先选择调出仓库!")
  406. return
  407. }
  408. },
  409. changeName(val) {
  410. for (let i = 0; i < this.recordInfo.recordData.length; i++) {
  411. if (this.currentIndex == i) {
  412. this.recordInfo.recordData[i].project_id = val.id;
  413. this.recordInfo.recordData[i].is_source = val.is_source;
  414. this.recordInfo.recordData[i].name = val.name;
  415. this.recordInfo.recordData[i].project_name = val.project_name;
  416. this.recordInfo.recordData[i].project_type = val.project_type;
  417. this.recordInfo.recordData[i].second_specification_name = val.second_specification_name;
  418. this.recordInfo.recordData[i].second_total = val.second_total;
  419. this.recordInfo.recordData[i].sencond_unit = val.sencond_unit
  420. this.recordInfo.recordData[i].min_price = val.min_price
  421. if (val.count == NaN) {
  422. this.recordInfo.recordData[i].count = "";
  423. } else {
  424. this.recordInfo.recordData[i].count = val.count? val.count : "";
  425. }
  426. this.recordInfo.recordData[i].unitList = val.unitList;
  427. }
  428. }
  429. },
  430. getWarehoseInfo(arr, max_unit, min_unit, min_number) {
  431. var total = 0;
  432. var max_str = "";
  433. var min_str = "";
  434. if (arr.length > 0) {
  435. for (let i = 0; i < arr.length; i++) {
  436. total += parseInt(arr[i].stock_max_number + arr[i].stock_min_number);
  437. }
  438. }
  439. if (total < min_number) {
  440. min_str = total + min_unit;
  441. }
  442. if (total == 0) {
  443. min_str = "";
  444. max_str = "";
  445. }
  446. if (total >= min_number) {
  447. if (parseInt(total / min_number) != 0) {
  448. max_str = parseInt(total / min_number) + max_unit;
  449. }
  450. if (total % min_number != 0) {
  451. min_str = (total % min_number) + min_unit;
  452. }
  453. }
  454. return max_str + min_str;
  455. },
  456. getTotalStockCount(arr) {
  457. var total_count = 0;
  458. for (let i = 0; i < arr.length; i++) {
  459. total_count += arr[i].stock_count;
  460. }
  461. return total_count;
  462. },
  463. changeHouseList(){
  464. var params = {
  465. storehouse_out_id:this.storehouse_out_id,
  466. }
  467. this.tabList = []
  468. getStoreHouseGoodList(params).then(response=>{
  469. var drugList = response.data.data.drugList
  470. this.drugList= drugList
  471. var goodList = response.data.data.goodList
  472. this.goodList = goodList
  473. var manufactuerList = response.data.data.manufacturerList
  474. var goodTypeList = response.data.data.goodTypeList
  475. this.goodTypeList = goodTypeList
  476. var drugTypeList = response.data.data.drugTypeList
  477. this.drugTypeList = drugTypeList
  478. for(let i=0;i<drugList.length;i++){
  479. for (let j = 0; j < manufactuerList.length; j++) {
  480. if (drugList[i].manufacturer == manufactuerList[j].id) {
  481. drugList[i].manufacturer = manufactuerList[j].manufacturer_name;
  482. }
  483. }
  484. for (let z = 0; z < drugList[i].drug_warehouse_info.length; z++) {
  485. if (drugList[i].max_unit ==drugList[i].drug_warehouse_info[z].max_unit) {
  486. drugList[i].drug_warehouse_info[z].stock_max_number = drugList[i].drug_warehouse_info[z].stock_max_number *drugList[i].min_number;
  487. }
  488. }
  489. for (let y = 0; y < this.drugTypeList.length; y++) {
  490. if (drugList[i].drug_type == this.drugTypeList[y].value) {
  491. drugList[i].drug_type = this.drugTypeList[y].name;
  492. }
  493. }
  494. drugList[i].name = drugList[i].drug_name
  495. drugList[i].project_name =drugList[i].drug_name + " " +drugList[i].dose + drugList[i].dose_unit + "*" +drugList[i].min_number +drugList[i].min_unit + "/" + drugList[i].max_unit + " " +drugList[i].manufacturer;
  496. drugList[i].project_type = drugList[i].drug_type;
  497. drugList[i].second_specification_name = drugList[i].dose + drugList[i].dose_unit +"*" + drugList[i].min_number +drugList[i].min_unit +"/" + drugList[i].max_unit;
  498. drugList[i].second_total = this.getWarehoseInfo(drugList[i].drug_warehouse_info,drugList[i].max_unit,drugList[i].min_unit,drugList[i].min_number);
  499. drugList[i].is_source = 1
  500. drugList[i].count = ""
  501. drugList[i].remake = ""
  502. drugList[i].min_price = drugList[i].min_price
  503. if (drugList[i].max_unit != drugList[i].min_unit) {
  504. drugList[i].unitList = [
  505. { id: 1, name: "" },
  506. { id: 2, name: "" },
  507. ];
  508. }
  509. if (drugList[i].max_unit == drugList[i].min_unit) {
  510. drugList[i].unitList = [{ id: 1, name: "" }];
  511. }
  512. drugList[i].sencond_unit = drugList[i].max_unit;
  513. for (let j = 0; j < drugList[i].unitList.length; j++) {
  514. if (drugList[i].max_unit != drugList[i].min_unit) {
  515. drugList[i].unitList[0].name = drugList[i].max_unit;
  516. drugList[i].unitList[1].name = drugList[i].min_unit;
  517. }
  518. if (drugList[i].max_unit == drugList[i].min_unit) {
  519. drugList[i].unitList[0].name = drugList[i].max_unit;
  520. }
  521. }
  522. this.tabList.push(drugList[i]);
  523. }
  524. for (let i = 0; i < goodList.length; i++) {
  525. for (let j = 0; j < manufactuerList.length; j++) {
  526. if (goodList[i].manufacturer == manufactuerList[j].id) {
  527. goodList[i].manufacturer = manufactuerList[j].manufacturer_name;
  528. }
  529. }
  530. for (let y = 0; y < this.goodTypeList.length; y++) {
  531. if (goodList[i].good_type_id == this.goodTypeList[y].id) {
  532. goodList[i].good_type_id = this.goodTypeList[y].type_name;
  533. }
  534. }
  535. goodList[i].name = goodList[i].good_name
  536. goodList[i].project_name = goodList[i].good_name + " " + goodList[i].specification_name + " " + goodList[i].manufacturer;
  537. goodList[i].project_type = goodList[i].good_type_id;
  538. goodList[i].second_specification_name = goodList[i].specification_name;
  539. goodList[i].second_total = this.getTotalStockCount(
  540. goodList[i].good_warehouse_info
  541. );
  542. goodList[i].count = ""
  543. goodList[i].is_source = 2;
  544. goodList[i].name = goodList[i].good_name;
  545. goodList[i].unitList = [{ id: 1, name: "" }];
  546. goodList[i].sencond_unit = goodList[i].packing_unit;
  547. goodList[i].remake = ""
  548. goodList[i].min_price = goodList[i].retail_price
  549. for (let j = 0; j < goodList[i].unitList.length; j++) {
  550. goodList[i].unitList[0].name = goodList[i].packing_unit;
  551. }
  552. this.tabList.push(goodList[i]);
  553. }
  554. })
  555. },
  556. selectCount(project_id,sencond_unit,is_source,count,index){
  557. var params = {
  558. project_id:project_id,
  559. sencond_unit:sencond_unit,
  560. is_source:parseInt(is_source),
  561. count:parseInt(count),
  562. storehouse_out_id:this.storehouse_out_id
  563. }
  564. getSumSecondeCount(params).then(response=>{
  565. if(response.data.state == 1){
  566. var msg = response.data.data.msg
  567. if(msg == 2){
  568. this.$message.error("调拨数量不能大于库存总量!")
  569. for(let i=0;i<this.recordInfo.recordData.length;i++){
  570. if(index == i){
  571. this.recordInfo.recordData[i].count = ""
  572. }
  573. }
  574. }
  575. }
  576. })
  577. }
  578. },
  579. created(){
  580. var nowDate = new Date()
  581. var nowYear = nowDate.getFullYear()
  582. var nowMonth = nowDate.getMonth() + 1
  583. var nowDay = nowDate.getDate()
  584. this.warehousing_time =
  585. nowYear +
  586. '-' +
  587. (nowMonth < 10 ? '0' + nowMonth : nowMonth) +
  588. '-' +
  589. (nowDay < 10 ? '0' + nowDay : nowDay)
  590. const tempObj = {}
  591. tempObj["name"] = "";
  592. tempObj['project_name'] = ""
  593. tempObj['project_type'] = ""
  594. tempObj['second_specification_name'] = ''
  595. tempObj['sencond_unit'] = ''
  596. tempObj['count'] = ''
  597. tempObj['second_total'] = ''
  598. tempObj["remake"] = ''
  599. tempObj["is_source"] = 0
  600. tempObj["project_id"] = 0
  601. tempObj["min_price"] = 0
  602. this.recordInfo.recordData.push(tempObj)
  603. this.getlist()
  604. }
  605. };
  606. </script>
  607. <style rel="stylesheet/css" lang="scss" scoped>
  608. </style>
  609. <style scoped>
  610. /deep/ .el-table__body{
  611. width: 100% !important;
  612. }
  613. /deep/ .el-table__header{
  614. width: 100% !important;
  615. }
  616. /deep/ .el-table--scrollable-x .el-table__body-wrapper {
  617. overflow: auto;
  618. }
  619. /deep/ .gutter {
  620. width: 15px !important;
  621. display: inline-block !important;
  622. }
  623. /deep/ .el-table__fixed-right-patch {
  624. width: 15px !important;
  625. }
  626. /deep/ .el-table__fixed-right {
  627. bottom: 0 !important;
  628. left: auto;
  629. right: 0;
  630. }
  631. /deep/ .el-table__body-wrapper::-webkit-scrollbar {
  632. width: 15px !important;
  633. height: 15px !important;
  634. }
  635. </style>