addAndEdit.vue 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748
  1. <!--
  2. * @Description: 新增/编辑弹框
  3. * @Author: Sugar.
  4. * @Date: 2023-11-24 13:55:00
  5. * @LastEditors: gcz
  6. * @LastEditTime: 2024-04-22 16:20:30
  7. * @FilePath: \great_webui\src\views\ticket\ticketMr\dialog\addAndEdit.vue
  8. * @Copyright: Copyright (c) 2016~2023 by Sugar., All Rights Reserved.
  9. -->
  10. <template>
  11. <el-dialog
  12. :title="title"
  13. :visible.sync="open"
  14. width="95%"
  15. append-to-body
  16. :close-on-click-modal="false"
  17. @close="cancel"
  18. >
  19. <div class="dialog-box">
  20. <div class="dialog">
  21. <el-form :model="form" ref="form" size="mini" :rules="rules" label-width="120px">
  22. <div style="display: flex;">
  23. <el-form-item label="模板名称:" prop="name">
  24. <el-input
  25. style="width: 350px;"
  26. v-model="form.name"
  27. placeholder="模板名称"
  28. clearable
  29. />
  30. </el-form-item>
  31. <el-form-item label="演出厅:" prop="auditoriumId">
  32. <el-select v-model="form.auditoriumId" @change="countBySeatTypFun" placeholder="请选择演出厅">
  33. <el-option
  34. v-for="item in performList"
  35. :key="item.id"
  36. :label="item.name"
  37. :value="item.id">
  38. </el-option>
  39. </el-select>
  40. </el-form-item>
  41. <el-form-item label="可配置数量:">
  42. {{ seatNum }}
  43. </el-form-item>
  44. </div>
  45. <el-form-item label="库存模式:" class="is-required">
  46. <div class="inventory_box">
  47. <div class="inventory_channel" style="width: 200px;">
  48. <div class="inventory_channel_header">
  49. <span>序号</span>
  50. <span>渠道名称</span>
  51. <span>数量</span>
  52. </div>
  53. <div
  54. :class="['inventory_channel_item',index == chennelAtion ?'inventory_channel_item-action':'']"
  55. v-for="(item,index) in form.chennelListForm"
  56. :key="index"
  57. @click="setDictLabel(item,index)"
  58. >
  59. <span>{{ index+1 }}</span>
  60. <span>{{ item.channelName }}</span>
  61. <span>{{ item.stockNum }}</span>
  62. </div>
  63. </div>
  64. <div class="inventory_seat" v-if="chennelAtion !== null">
  65. <el-form-item label="选择模式:" label-width="85px" class="is-required">
  66. <el-radio-group
  67. v-model="form.chennelListForm[chennelAtion].stockType"
  68. @change="setStockType"
  69. >
  70. <el-radio :label="0">根据数量</el-radio>
  71. <el-radio :label="1">根据座位</el-radio>
  72. </el-radio-group>
  73. </el-form-item>
  74. <div v-if="!form.chennelListForm[chennelAtion].stockType">
  75. <el-table ref="tables" v-loading="loading" :data="form.chennelListForm[chennelAtion].seatTypeList" border>
  76. <el-table-column label="序号" align="center" type="index" width="60"></el-table-column>
  77. <el-table-column label="座位类型" align="center" prop="seatTypeName" />
  78. <el-table-column label="可配置数量" align="center" prop="stock"></el-table-column>
  79. <el-table-column label="配置数量" align="center">
  80. <template slot-scope="scope">
  81. <el-input v-model="form.chennelListForm[chennelAtion].seatTypeList[scope.$index].stockNum" type="number" clearable placeholder="请输入数量"></el-input>
  82. </template>
  83. </el-table-column>
  84. </el-table>
  85. </div>
  86. <div v-else>
  87. <seatBox
  88. ref="seatBox"
  89. :isOccupyStatus="false"
  90. @selectSeat="selectSeat"
  91. />
  92. </div>
  93. </div>
  94. </div>
  95. </el-form-item>
  96. <el-form-item label="备注:" prop="remark">
  97. <el-input
  98. v-model="form.remark"
  99. type="textarea"
  100. placeholder="请输入备注"
  101. clearable
  102. />
  103. </el-form-item>
  104. </el-form>
  105. </div>
  106. <div
  107. v-if="loading"
  108. class="dialog-loading"
  109. v-loading="loading"
  110. :element-loading-text="loadingText"
  111. element-loading-spinner="el-icon-loading"
  112. element-loading-background="rgba(0, 0, 0, 0.8)"
  113. ></div>
  114. </div>
  115. <span slot="footer" class="dialog-footer">
  116. <el-button @click="cancel">关闭</el-button>
  117. <el-button
  118. v-if="model !== 'DETAILS'"
  119. type="primary"
  120. @click="submitForm"
  121. :loading="loading"
  122. >
  123. <span v-if="loading">提交中...</span>
  124. <span v-else>保存</span>
  125. </el-button>
  126. </span>
  127. <!-- 添加或修改对话框 End -->
  128. <!-- -->
  129. </el-dialog>
  130. </template>
  131. <script>
  132. import { saveAndEdit, getSelectById,countBySeatTyp,channelType } from '@/api/ticketMr/InventoryTemplate'
  133. import { getSelectById as getSeatSelectByIdApi } from "@/api/performanceHallMr/performanceHallMr";
  134. import { merchantPageList } from '@/api/performanceHallMr/performanceHallMr'
  135. import seatBox from '@/components/seatBox/index.vue';
  136. export default {
  137. name: "addAndEdit",
  138. dicts: ['system_taxrate'],
  139. components: {
  140. seatBox
  141. },
  142. data() {
  143. return {
  144. open: false,
  145. title: "编辑",
  146. model: "EDIT",
  147. loading: false,
  148. loadingText: '获取数据中...',
  149. activeName: '01',
  150. // 演员信息弹窗
  151. performerVisible: false,
  152. // 演员信息
  153. performerList: [],
  154. // 演员上传图片索引
  155. performerIndex: 0,
  156. form: {
  157. id: undefined,
  158. chennelListForm: []
  159. },
  160. formStock: {
  161. stockType: null,
  162. chennelList: [],
  163. },
  164. rules: {
  165. name: [{ required: true, message: "请输入模板名称", trigger: ["change","blur"] }],
  166. auditoriumId: [{ required: true, message: "请选择演出厅", trigger: ["change","blur"] }],
  167. chennelList: [{ required: true, message: "请输入库存模式", trigger: ["change","blur"] }],
  168. remark: [{ required: false, message: "请输入备注", trigger: ["change","blur"] }],
  169. },
  170. statusList: [
  171. {id: 1, name: '是', value: 1},
  172. {id: 2, name: '否', value: 2},
  173. ],
  174. performList: [], // 演出厅
  175. channelTypeList: [], // 渠道
  176. dictValue: '',
  177. chennelAtion: null,
  178. countBySeatTypList: [], // 座位类型
  179. stockFormList: [],// 库存
  180. dataList: [], // 座位
  181. seatNum: '',
  182. };
  183. },
  184. created() {
  185. this.getList()// 演出厅
  186. this.channelTypeFun() // 渠道
  187. },
  188. methods: {
  189. /** 演出厅列表 */
  190. getList() {
  191. merchantPageList({pageNum: 1, pageSize: 100})
  192. .then(response => {
  193. this.performList = response.data.rows;
  194. }
  195. );
  196. },
  197. /**
  198. * 打开弹框
  199. * @date 2023-11-22
  200. * @param {any} obj
  201. * @returns {any}
  202. */
  203. async openDialog(title, obj, mode) {
  204. try {
  205. this.dataList = []
  206. this.model = mode
  207. this.loading = true
  208. this.loadingText = '获取数据中...'
  209. this.title = title
  210. this.chennelAtion = null
  211. this.open = true
  212. this.activeName = '01';
  213. if(this.channelTypeList.length<0) {
  214. await this.channelTypeFun()
  215. }
  216. if (obj){
  217. await this.getSelectByIdApi(obj)
  218. }else{
  219. this.form = {
  220. chennelListForm: this.setDataTree({})
  221. }
  222. console.log("list1====",this.form)
  223. this.setDictLabel(this.form.chennelListForm[0],0)
  224. }
  225. this.$nextTick(() => {
  226. this.$refs["form"].clearValidate();
  227. });
  228. } catch (error) {
  229. console.error("dfsdfdsf",error)
  230. }
  231. this.loading = false
  232. },
  233. /** 获取详情 */
  234. async getSelectByIdApi(row) {
  235. try {
  236. const id = row.id
  237. let res = await getSelectById({id})
  238. if(res.code == 200) {
  239. let obj = res.data;
  240. await this.countBySeatTypFun(obj.auditoriumId,true)
  241. obj.chennelListForm = this.setDataTree(obj)
  242. this.form = obj
  243. this.setDictLabel(obj.chennelListForm[0],0)
  244. console.log("list2====",this.form)
  245. }
  246. } catch (error) {
  247. console.log("error====",error)
  248. console.error("error====",error)
  249. }
  250. },
  251. setDataTree(obj){
  252. let list = []
  253. this.channelTypeList.forEach((item,index)=>{
  254. list.push({
  255. "channelType":item.dictValue,
  256. "channelName":item.dictLabel,
  257. "stockType": this.getStockType(item,obj),
  258. "stockNum": this.getStockAllNum(item,obj),
  259. "seatTypeList": [],
  260. "chennelSeatList": []
  261. })
  262. list[index].seatTypeList = this.getSeatTypeList(list[index],obj)
  263. list[index].chennelSeatList = this.getChennelSeatList(list[index],obj)
  264. })
  265. return list
  266. },
  267. /** 获取模式 */
  268. getStockType(obj,data){
  269. let stockType = 0
  270. if(data.chennelList && data.chennelList.length>0) {
  271. for(let i = 0;i < data.chennelList.length;i++) {
  272. if(obj.dictValue == data.chennelList[i].channelType) {
  273. stockType = data.chennelList[i].stockType
  274. break;
  275. }
  276. }
  277. }
  278. return stockType
  279. },
  280. /** 获取总数 */
  281. getStockAllNum(obj,data) {
  282. let num = 0
  283. let flog = false
  284. if(data.chennelList && data.chennelList.length>0) {
  285. data.chennelList.forEach((item,index)=>{
  286. if(obj.dictValue == item.channelType) {
  287. flog = true
  288. num = num + item.stockNum
  289. }
  290. })
  291. }
  292. if(flog) {
  293. return num
  294. }else {
  295. return ''
  296. }
  297. },
  298. /** 获取座位类型对应的数量 */
  299. getSeatTypeList(obj,data){
  300. let list1 = []
  301. this.countBySeatTypList.forEach((item1,index1)=>{
  302. list1.push({
  303. "seatTypeId": item1.seatTypeId,
  304. "seatTypeName": item1.seatTypeName,
  305. "stockNum": '',
  306. "stock": item1.stock,
  307. })
  308. if(obj.stockType == 0 && data.chennelList && data.chennelList.length>0) {
  309. data.chennelList.forEach((item2,index2)=>{
  310. if(item1.seatTypeId == item2.seatTypeId && obj.stockType == item2.stockType && obj.channelType == item2.channelType ) {
  311. list1[index1].stockNum = item2.stockNum
  312. }
  313. })
  314. }
  315. })
  316. return list1
  317. },
  318. /** 获取座位 */
  319. getChennelSeatList(obj,data) {
  320. let list = []
  321. let seat = {}
  322. if(data.chennelList && data.chennelList.length>0) {
  323. for(let i = 0;i<data.chennelList.length;i++) {
  324. if(obj.channelType == data.chennelList[i].channelType) {
  325. if(data.chennelList[i].chennelSeatList) {
  326. let srt = 'seat_'+ data.chennelList[i].seatTypeId
  327. if(seat[srt]) {
  328. seat[srt] = seat[srt].concat(data.chennelList[i].chennelSeatList)
  329. }else {
  330. seat[srt] = [...data.chennelList[i].chennelSeatList]
  331. }
  332. console.log("seat_",srt,seat,data.chennelList[i].chennelSeatList)
  333. }
  334. //list = data.chennelList[i].chennelSeatList ? JSON.parse(JSON.stringify(data.chennelList[i].chennelSeatList)):[]
  335. // break;
  336. }
  337. }
  338. }
  339. return JSON.stringify(seat) == '{}' ? null : seat
  340. },
  341. // setChennelList() {
  342. // },
  343. /** 价格输入事件 */
  344. changePriceAmount(key) {
  345. if(this.form[key] * 1 < 0){
  346. this.$message.error("输入需大于或等于0!");
  347. this.$set(this.form, key, '');
  348. return false
  349. }
  350. },
  351. /**
  352. * 保存
  353. * @date 2023-11-22
  354. * @returns {any}
  355. */
  356. submitForm() {
  357. this.$refs["form"].validate(async (valid,object) => {
  358. if (valid) {
  359. try {
  360. this.loading = true
  361. this.loadingText = '提交中...'
  362. console.log("this.form=====",this.form)
  363. let postMap = JSON.parse(JSON.stringify(this.form))
  364. postMap.chennelList = []
  365. for(let i = 0; i< this.form.chennelListForm.length ;i++) {
  366. let obj = {
  367. "id": null,
  368. "channelType": this.form.chennelListForm[i].channelType,
  369. "channelName": this.form.chennelListForm[i].channelName,
  370. "stockType": this.form.chennelListForm[i].stockType,
  371. }
  372. if(this.form.chennelListForm[i].stockType == 0) {
  373. if(this.form.chennelListForm[i].seatTypeList && this.form.chennelListForm[i].seatTypeList.length>0) {
  374. for(let j = 0;j< this.form.chennelListForm[i].seatTypeList.length;j++) {
  375. if(this.form.chennelListForm[i].seatTypeList[j].stockNum) {
  376. postMap.chennelList.push({
  377. ...obj,
  378. "seatTypeId": this.form.chennelListForm[i].seatTypeList[j].seatTypeId,
  379. "stockNum": this.form.chennelListForm[i].seatTypeList[j].stockNum,
  380. "chennelSeatList":null
  381. })
  382. }
  383. }
  384. }
  385. }else if(this.form.chennelListForm[i].stockType == 1 ){
  386. if(this.form.chennelListForm[i].chennelSeatList) {
  387. Object.keys(this.form.chennelListForm[i].chennelSeatList).forEach((item)=>{
  388. postMap.chennelList.push({
  389. "id": null,
  390. "channelType": this.form.chennelListForm[i].channelType,
  391. "channelName": this.form.chennelListForm[i].channelName,
  392. "stockType": this.form.chennelListForm[i].stockType,
  393. "seatTypeId": item.replace("seat_", ""),
  394. "stockNum": this.form.chennelListForm[i].chennelSeatList[item].length,
  395. "chennelSeatList": this.form.chennelListForm[i].chennelSeatList[item]
  396. })
  397. })
  398. }
  399. }
  400. }
  401. delete postMap.chennelListForm
  402. console.log("postMap=====",postMap)
  403. if(!postMap.chennelList || postMap.chennelList.length==0) {
  404. this.loading = false
  405. return
  406. }
  407. let res = await saveAndEdit(postMap)
  408. this.loading = false
  409. if(res.code) {
  410. this.$message.success(res.msg || res.message|| "操作成功");
  411. this.$emit('getList')
  412. this.cancel()
  413. }else {
  414. this.$message.error(error.msg || error.message|| "操作失败!");
  415. }
  416. } catch (error) {
  417. this.loading = false
  418. this.$message.error(error.msg || error.message|| "操作失败!");
  419. } finally {
  420. this.loading = false;
  421. }
  422. }else{
  423. // console.log('error submit!!',valid,object);
  424. if(object&&JSON.stringify(object) != '{}'){
  425. let str = ''
  426. for(let key in object){
  427. if(object.hasOwnProperty(key)){
  428. str = str + `[${object[key][0].message}]}]`
  429. }
  430. }
  431. this.$message.error(str);
  432. }
  433. }
  434. });
  435. },
  436. /**
  437. * 重置
  438. * @date 2023-11-22
  439. * @returns {any}
  440. */
  441. reset() {
  442. },
  443. /**
  444. * 关闭弹框
  445. * @date 2023-11-22
  446. * @returns {any}
  447. */
  448. cancel() {
  449. this.open = false;
  450. this.chennelAtion = null
  451. },
  452. /** 获取座位可用数量 */
  453. async countBySeatTypFun(value,type) {
  454. console.log("vlaue===",value)
  455. try {
  456. this.seatNum = ''
  457. this.chennelAtion = null
  458. if(!value) return
  459. let res = await countBySeatTyp({auditoriumId: value})
  460. let num = 0
  461. res.data.forEach((item,index)=>{
  462. num = num + item.stock
  463. })
  464. this.seatNum = num
  465. this.countBySeatTypList = res.data
  466. if(!type) {
  467. this.form.chennelListForm = this.setDataTree({})
  468. this.setDictLabel(this.form.chennelListForm[0],0)
  469. }
  470. } catch (error) {
  471. console.error("error1====",error)
  472. }
  473. },
  474. /** 获取渠道数据 */
  475. async channelTypeFun() {
  476. try {
  477. let res = await channelType({pageNum: 1, pageSize: 100})
  478. this.channelTypeList = res.data
  479. } catch (error) {
  480. console.error("dfsdfdsfsd====",error)
  481. }
  482. },
  483. setDictLabel(obj,index){
  484. this.chennelAtion = index
  485. if(obj.stockType == 1) {
  486. console.log('fsdfsdfsdfsdfsdfsdfsdfsfdsf')
  487. this.getSeatSelectById()
  488. }
  489. },
  490. setStockType(value) {
  491. console.log('fsdfsdfsdfsdfsdfsdfsdfsfdsf======',value)
  492. if(value == 1) {
  493. this.getSeatSelectById()
  494. }
  495. },
  496. /** 获取座位 */
  497. async getSeatSelectById() {
  498. if(!this.form.auditoriumId){ return }
  499. if(!this.dataList || this.dataList.length == 0 || this.dataList[0].auditoriumId !== this.form.auditoriumId) {
  500. let res = await getSeatSelectByIdApi(this.form.auditoriumId)
  501. this.dataList = res.data;
  502. }
  503. let list = []
  504. let list1 = []
  505. let list2 = []
  506. this.form.chennelListForm.forEach((item,index)=>{
  507. if(item.chennelSeatList && item.stockType == 1) {
  508. Object.keys(item.chennelSeatList).forEach((item1)=>{
  509. item.chennelSeatList[item1] ? list2 = list2.concat(item.chennelSeatList[item1]) : ''
  510. })
  511. }
  512. })
  513. if(this.form.chennelListForm[this.chennelAtion].chennelSeatList) {
  514. Object.keys(this.form.chennelListForm[this.chennelAtion].chennelSeatList).forEach((item)=>{
  515. list1 = list1.concat(this.form.chennelListForm[this.chennelAtion].chennelSeatList[item])
  516. })
  517. console.log("list2111=====",list2,list1)
  518. list = this.dataList.filter((item,index)=>{
  519. if(list1.includes(item.id)){
  520. this.dataList[index].occupyStatus = null // 解除被占用了
  521. return item
  522. }else if(!list1.includes(item.id) && list2.includes(item.id)){
  523. this.dataList[index].occupyStatus = 1 // 被占用了
  524. }
  525. if(!item.seatTypeId&&item.status != 2) {
  526. this.dataList[index].occupyStatus = 1 // 被占用了
  527. }
  528. })
  529. }else {
  530. this.dataList.forEach((item,index)=>{
  531. if(!list1.includes(item.id) && list2.includes(item.id)){
  532. this.dataList[index].occupyStatus = 1 // 被占用了
  533. }
  534. if(!item.seatTypeId&&item.status != 2) {
  535. this.dataList[index].occupyStatus = 1 // 被占用了
  536. }
  537. })
  538. }
  539. console.log("dfsdfdsfdsf====",list,this.form.chennelListForm[this.chennelAtion].chennelSeatList)
  540. this.$nextTick(() =>{
  541. this.$refs.seatBox.querySeatListFun(true,this.dataList,list)
  542. })
  543. },
  544. /** 选择座位 */
  545. selectSeat(list) {
  546. let obj = {}
  547. list.forEach((item)=>{
  548. let srt = 'seat_'+ item.seatTypeId
  549. Array.isArray(obj[srt]) ? obj[srt].push(item.id): obj[srt] = [item.id]
  550. })
  551. this.form.chennelListForm[this.chennelAtion].chennelSeatList = JSON.stringify(obj) == '{}'?null:obj
  552. this.form.chennelListForm[this.chennelAtion].stockNum = list.length>0 ? list.length : ''
  553. console.log("已选择的====",list,this.form.chennelListForm[this.chennelAtion].chennelSeatList)
  554. }
  555. },
  556. };
  557. </script>
  558. <style lang="scss" scoped>
  559. .dialog-box {
  560. width: 100%;
  561. position: relative;
  562. .dialog-loading {
  563. width: 100%;
  564. height: 100%;
  565. position: absolute;
  566. top: 0;
  567. left: 0;
  568. }
  569. }
  570. .dialog {
  571. max-height: 70vh;
  572. overflow-y: auto;
  573. .upload-btn {
  574. width: 100px;
  575. height: 100px;
  576. background-color: #fbfdff;
  577. border: dashed 1px #c0ccda;
  578. border-radius: 5px;
  579. i {
  580. font-size: 30px;
  581. margin-top: 20px;
  582. }
  583. &-text {
  584. margin-top: -10px;
  585. }
  586. }
  587. .avatar {
  588. cursor: pointer;
  589. }
  590. }
  591. .el-table{
  592. .upload-btn {
  593. width: 100px;
  594. height: 100px;
  595. background-color: #fbfdff;
  596. border: dashed 1px #c0ccda;
  597. border-radius: 5px;
  598. i {
  599. font-size: 30px;
  600. margin-top: 20px;
  601. }
  602. &-text {
  603. margin-top: -10px;
  604. }
  605. }
  606. .avatar {
  607. cursor: pointer;
  608. }
  609. }
  610. .area-container {
  611. min-height: 400px;
  612. }
  613. ::v-deep .area-wrap-city.el-cascader {
  614. line-height: normal;
  615. .el-input {
  616. cursor: pointer;
  617. width: 100% !important;
  618. height: 28px !important;
  619. .el-input__inner {
  620. display: none !important;
  621. }
  622. span.el-input__suffix {
  623. position: inherit !important;
  624. i.el-input__icon {
  625. line-height: inherit;
  626. margin-left: 5px;
  627. }
  628. }
  629. .el-input__wrapper {
  630. box-shadow: none;
  631. input {
  632. display: none;
  633. }
  634. }
  635. }
  636. .el-cascader__tags {
  637. display: none;
  638. }
  639. }
  640. .area-city-popper {
  641. .el-cascader-panel {
  642. .el-scrollbar.el-cascader-menu {
  643. .el-cascader-menu__wrap.el-scrollbar__wrap {
  644. height: 315px;
  645. }
  646. }
  647. }
  648. }
  649. .inventory_box{
  650. width: 100%;
  651. border: 1px solid #ccc;
  652. min-height: 400px;
  653. padding: 10px;
  654. box-sizing: border-box;
  655. display: flex;
  656. flex-shrink: 0;
  657. .inventory_channel {
  658. width: 200px;
  659. >div {
  660. width: 100%;
  661. box-sizing: border-box;
  662. >span {
  663. display: flex;
  664. justify-content: center;
  665. align-items: center;
  666. border-right: 1px solid #333;
  667. }
  668. >span:nth-child(1) {
  669. width: 40px;
  670. }
  671. >span:nth-child(2) {
  672. flex: auto;
  673. }
  674. >span:nth-child(3) {
  675. width: 50px;
  676. }
  677. }
  678. .inventory_channel_header {
  679. width: 100%;
  680. height: 40px;
  681. display: flex;
  682. background-color: #ccc;
  683. border-bottom: 1px solid #333;
  684. border-top: 1px solid #333;
  685. border-left: 1px solid #333;
  686. }
  687. .inventory_channel_item {
  688. width: 100%;
  689. display: flex;
  690. height: 40px;
  691. cursor: pointer;
  692. border-bottom: 1px solid #333;
  693. border-left: 1px solid #333;
  694. }
  695. .inventory_channel_item:hover {
  696. background-color: rgba(135, 206, 235,0.6);
  697. }
  698. .inventory_channel_item-action {
  699. background-color: rgba(135, 206, 235,0.6);
  700. }
  701. }
  702. .inventory_seat {
  703. flex: auto;
  704. padding-left: 20px;
  705. box-sizing: border-box;
  706. }
  707. }
  708. </style>
  709. <style>
  710. .custom-class-box {
  711. z-index: 999999 !important;
  712. }
  713. </style>