roomType.vue 51 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795
  1. <template>
  2. <div class="content-box">
  3. <div class="left">
  4. <!-- <el-icon :size="23" class="camera"><VideoCameraFilled /></el-icon> -->
  5. <span class="cameratxt">房型管理</span>
  6. </div>
  7. <div>
  8. <div class="middle">
  9. <div class="filter">
  10. <div class="condition">
  11. <el-input
  12. :clearable="true"
  13. @clear="searchBtn"
  14. v-model="searchInput.keyWord"
  15. class="w-50 m-2"
  16. placeholder="请输入房号"
  17. style="width: 180px"
  18. />
  19. </div>
  20. <el-button
  21. color="rgba(0, 97, 255, 1)"
  22. type="primary"
  23. class="search"
  24. @click="searchBtn"
  25. ><el-icon>
  26. <Search />
  27. </el-icon>
  28. <span>查询</span></el-button
  29. >
  30. <div class="condition" style="margin-left: 50px">
  31. <span>房间类型</span>
  32. <el-select
  33. :clearable="false"
  34. v-model="searchInput.type"
  35. @change="getList"
  36. class="m-2"
  37. placeholder="请选择房间类型"
  38. style="width: 120px"
  39. >
  40. <el-option label="全日房" :value="1" />
  41. <el-option label="钟点房" :value="2" />
  42. </el-select>
  43. </div>
  44. </div>
  45. <!-- 按钮列表 -->
  46. <div class="gongneng" v-if="flagBtn.tianjia==1">
  47. <el-button type="primary" color="rgba(0, 97, 255, 1)" @click="addlist"
  48. ><img
  49. src="@/assets/add.png"
  50. style="width: 14px; height: 14px; margin-right: 4px"
  51. alt=""
  52. /><span>添加房型</span></el-button
  53. >
  54. </div>
  55. </div>
  56. <div class="footer" v-loading="loading">
  57. <el-table
  58. :row-class-name="tableRowClassName"
  59. :data="tableData.list"
  60. @selection-change="handleSelectionChange"
  61. style="width: 100%"
  62. :header-cell-style="{
  63. background: 'rgba(240, 243, 247, 1)',
  64. height: '50px',
  65. border: 0,
  66. }"
  67. >
  68. <!-- <el-table-column align="center" type="selection" width="80" /> -->
  69. <el-table-column
  70. width="150"
  71. align="center "
  72. type="index"
  73. label="序号"
  74. />
  75. <el-table-column
  76. v-if="searchInput.type == 2"
  77. align="center"
  78. prop="time"
  79. label="钟点时长"
  80. />
  81. <el-table-column align="center" prop="name" label="房型" />
  82. <el-table-column align="center" prop="roomId" label="房号" />
  83. <el-table-column align="center" prop="price" label="房费(元)" />
  84. <!-- <el-table-column align="center" prop="visibleName" label="可见范围" /> -->
  85. <el-table-column align="center" prop="count" label="数量" />
  86. <el-table-column align="center" prop="count" label="类型">
  87. <template #default="scope">
  88. <span v-if="scope.row.type == 1">全日房</span>
  89. <span v-if="scope.row.type == 2">钟点房</span>
  90. </template>
  91. </el-table-column>
  92. <el-table-column align="center" label="操作" width="150">
  93. <template #default="scope">
  94. <div class="edit">
  95. <div class="look" v-if="flagBtn.xiugai==1" @click="edit(scope.row)">编辑</div>
  96. <el-popconfirm
  97. v-if="flagBtn.shanchu==1"
  98. width="220"
  99. confirm-button-text="确认"
  100. cancel-button-text="取消"
  101. :icon="InfoFilled"
  102. icon-color="#f89626"
  103. title="是否删除此房型?"
  104. @confirm="del(scope.row)"
  105. @cancel="cancelEvent"
  106. >
  107. <template #reference>
  108. <div class="del">删除</div>
  109. </template>
  110. </el-popconfirm>
  111. </div>
  112. </template>
  113. </el-table-column>
  114. </el-table>
  115. <!-- 添加房型弹窗 -->
  116. <el-dialog
  117. class="addStaff"
  118. v-model="addDialogVisible"
  119. :close-on-click-modal="false"
  120. :close-on-press-escape="false"
  121. :title="dialongTitle"
  122. align-center
  123. width="900"
  124. :before-close="cancelAdd"
  125. >
  126. <div class="slider">
  127. <el-form
  128. ref="ruleFormRef"
  129. :model="ruleForm"
  130. :rules="rules"
  131. label-width="100px"
  132. class="demo-ruleForm"
  133. size="default"
  134. label-position="left"
  135. status-icon
  136. :inline="true"
  137. >
  138. <div class="titles"><span>房型信息</span></div>
  139. <div class="form_item tag">
  140. <div class="items">
  141. <!-- prop="fileListJson" -->
  142. <el-form-item label="房间图片 :" prop="roomPicture">
  143. <div class="tooltips" v-loading="imgShow">
  144. <div class="img img1">
  145. <div class="updateImg">
  146. <div class="imglist" v-if="fileList.list.length">
  147. <div
  148. class="imgItem"
  149. v-for="i in fileList.list"
  150. :key="i.id"
  151. >
  152. <img :src="i.url" alt="" />
  153. <div class="lookImg">
  154. <img
  155. src="@/assets/lookImg.png"
  156. alt=""
  157. @click="lookImg(i)"
  158. />
  159. <div
  160. class="delimg"
  161. @click="handleRemove(i)"
  162. ></div>
  163. </div>
  164. </div>
  165. </div>
  166. <div class="imglist" v-else>
  167. <img src="#" alt="" />
  168. </div>
  169. <el-upload
  170. class="avatar-uploader"
  171. action=""
  172. list-type="picture"
  173. :on-preview="handlePreview"
  174. :on-change="handleChange"
  175. :http-request="handleUpload"
  176. :before-upload="beforeAvatarUpload"
  177. >
  178. <template #trigger>
  179. <el-button
  180. type="primary"
  181. color="rgba(0, 97, 255, 1)"
  182. @click="updateImg"
  183. >上传图片</el-button
  184. >
  185. <span class="zhu"
  186. >(注:最多可上传6张图片,建议按16:9的比例)</span
  187. >
  188. </template>
  189. <!-- <template #tip>
  190. <div class="el-upload__tip">
  191. (注:图片大小不超过10M,建议按3:2比例)
  192. </div>
  193. </template> -->
  194. </el-upload>
  195. </div>
  196. </div>
  197. </div>
  198. </el-form-item>
  199. </div>
  200. </div>
  201. <div class="form_item">
  202. <div class="items">
  203. <el-form-item label="房型名称 :" prop="roomName">
  204. <el-input
  205. v-model="ruleForm.roomName"
  206. placeholder="请输入房型名称"
  207. clearable
  208. />
  209. <!-- <el-select
  210. v-model="ruleForm.hName"
  211. class="m-2"
  212. placeholder="请选择民宿类型"
  213. >
  214. <el-option
  215. v-for="i in houseType"
  216. :label="i.name"
  217. :value="i.name"
  218. />
  219. </el-select> -->
  220. </el-form-item>
  221. </div>
  222. <div class="items">
  223. <el-form-item label="房费 :" prop="roomPrice">
  224. <el-input
  225. v-model="ruleForm.roomPrice"
  226. placeholder="请输入房费"
  227. clearable
  228. />
  229. </el-form-item>
  230. </div>
  231. </div>
  232. <div class="form_item">
  233. <div class="items">
  234. <el-form-item label="数量 :" prop="number">
  235. <el-input
  236. v-model="ruleForm.number"
  237. placeholder="请输入此房型数量"
  238. clearable
  239. />
  240. </el-form-item>
  241. </div>
  242. <div class="items">
  243. <el-form-item label="面积 :" prop="roomArea">
  244. <el-input
  245. v-model="ruleForm.roomArea"
  246. placeholder="请输入面积大小"
  247. clearable
  248. ></el-input>
  249. &nbsp;&nbsp;㎡
  250. </el-form-item>
  251. </div>
  252. </div>
  253. <div class="form_item">
  254. <div class="roomUl">
  255. <div class="title">房间</div>
  256. <div class="delRoom">
  257. <div class="ul">
  258. <!-- <div class="li">
  259. <span>102</span>
  260. <div class="del"></div>
  261. </div>
  262. <div class="li">
  263. <span>103</span>
  264. <div class="del"></div>
  265. </div> -->
  266. <div class="li">
  267. <div
  268. class="li_items"
  269. v-for="i in ruleForm.roomNumbers"
  270. :key="i.id"
  271. >
  272. <!-- <span>{{ i.numberName }}</span> -->
  273. <div
  274. class="li_item"
  275. :class="i.numberName ? '' : 'li_item_warning'"
  276. >
  277. <el-input
  278. v-model="i.numberName"
  279. placeholder="房间号"
  280. @input="roomNumber"
  281. />
  282. <div class="del" @click="delRoom(i)"></div>
  283. </div>
  284. <div class="warning" v-if="!i.numberName">
  285. 请填写房间号
  286. </div>
  287. </div>
  288. <div class="addRoom" @click="addRoom">
  289. <img src="@/assets/addRoom.png" alt="" />
  290. <span>新增房间</span>
  291. </div>
  292. </div>
  293. </div>
  294. </div>
  295. </div>
  296. </div>
  297. <div class="form_item">
  298. <!-- <div class="items">
  299. <el-form-item label="可见范围 :" prop="visible">
  300. <el-select
  301. v-model="ruleForm.visible"
  302. multiple
  303. placeholder="选择可见范围"
  304. style="width: 200px"
  305. >
  306. <el-option label="全部" value="0" />
  307. <el-option label="学生" value="1" />
  308. <el-option label="教职工" value="2" />
  309. <el-option label="校友" value="3" />
  310. <el-option label="访客" value="4" />
  311. <el-option label="临时人员" value="5" />
  312. <el-option label="其他" value="6" />
  313. <el-option label="领导" value="7" />
  314. </el-select>
  315. </el-form-item>
  316. </div> -->
  317. <div class="items">
  318. <el-form-item label="类型 :" prop="roomType">
  319. <el-select
  320. v-model="ruleForm.roomType"
  321. class="m-2"
  322. placeholder="请选择类型"
  323. style="width: 200px"
  324. >
  325. <el-option label="全日房" value="1" />
  326. <el-option label="钟点房" value="2" />
  327. </el-select>
  328. </el-form-item>
  329. </div>
  330. </div>
  331. <div class="form_item" v-if="ruleForm.roomType == 2">
  332. <div class="items">
  333. <el-form-item label="钟点时长 :" prop="roomLiveTime">
  334. <el-select
  335. v-model="ruleForm.roomLiveTime"
  336. class="m-2"
  337. placeholder="请选择类型"
  338. style="width: 200px"
  339. >
  340. <el-option label="1小时" value="1" />
  341. <el-option label="2小时" value="2" />
  342. <el-option label="3小时" value="3" />
  343. <el-option label="4小时" value="4" />
  344. </el-select>
  345. </el-form-item>
  346. </div>
  347. <!-- <div class="items">
  348. <el-form-item label="使用时间 :" prop="receivingTime">
  349. <el-time-picker
  350. v-model="ruleForm.receivingTime"
  351. is-range
  352. range-separator="-"
  353. format="HH:ss"
  354. value-format="HH:ss"
  355. start-placeholder="开始时间"
  356. end-placeholder="结束时间"
  357. style="width: 200px"
  358. />
  359. </el-form-item>
  360. </div> -->
  361. </div>
  362. <div class="titles">
  363. <span>房型配置</span
  364. ><span>(最多可选择5个描述展示,管理端房型配置管理)</span>
  365. </div>
  366. <div class="form_item">
  367. <div class="items">
  368. <el-form-item label="选择配置 :" prop="roomConfig">
  369. <!-- <el-checkbox-group
  370. @change="checkHouse"
  371. v-model="ruleForm.roomConfig"
  372. :max="5"
  373. >
  374. <el-checkbox
  375. v-for="city in cities"
  376. :key="city.id"
  377. :label="city.id"
  378. >{{ city.name }}</el-checkbox
  379. >
  380. </el-checkbox-group> -->
  381. <el-checkbox-group
  382. @change="checkHouse"
  383. v-model="ruleForm.roomConfig"
  384. :max="5"
  385. >
  386. <el-checkbox
  387. v-for="i in roomConfig"
  388. :label="i.houseService"
  389. >{{ i.houseService }}</el-checkbox
  390. >
  391. <!-- <el-checkbox label="电视">电视</el-checkbox>
  392. <el-checkbox label="双人床">双人床</el-checkbox>
  393. <el-checkbox label="浴室">浴室</el-checkbox>
  394. <el-checkbox label="投影机">投影机</el-checkbox> -->
  395. </el-checkbox-group>
  396. </el-form-item>
  397. </div>
  398. </div>
  399. <el-form-item class="options">
  400. <el-button
  401. color="rgba(41, 109, 227, 1)"
  402. class="queding"
  403. type="primary"
  404. @click="submitAdd(ruleFormRef)"
  405. >
  406. 确认
  407. </el-button>
  408. <el-button type="primary" plain @click="cancelAdd(ruleFormRef)"
  409. >取消</el-button
  410. >
  411. </el-form-item>
  412. </el-form>
  413. </div>
  414. </el-dialog>
  415. </div>
  416. <!-- 分页组件 -->
  417. <div class="pageSize">
  418. <span></span>
  419. <el-pagination
  420. background
  421. :current-page="currentPage"
  422. :page-size="pageSize"
  423. layout="total, prev, pager, next, jumper, slot"
  424. :total="total"
  425. @update:current-page="handleCurrentChange"
  426. />
  427. </div>
  428. </div>
  429. <div class="bgImg" v-if="bgImg">
  430. <el-carousel
  431. @click="bgImg = false"
  432. ref="bgImgs"
  433. indicator-position
  434. arrow="always"
  435. :autoplay="false"
  436. trigger
  437. >
  438. <el-carousel-item v-for="item in bgImgList" :key="item.id">
  439. <img :src="item.url" alt="" />
  440. </el-carousel-item>
  441. </el-carousel>
  442. </div>
  443. </div>
  444. </template>
  445. <script setup>
  446. import {
  447. ref,
  448. reactive,
  449. watch,
  450. nextTick,
  451. onBeforeMount,
  452. onUnmounted,
  453. } from "vue";
  454. import { useRouter } from "vue-router";
  455. import { ElMessage, ElMessageBox } from "element-plus";
  456. import { Calendar } from "@element-plus/icons-vue";
  457. import vidiconsApi from "@/api/vidicons.js";
  458. import { dayjs } from "element-plus";
  459. import lodash from "lodash";
  460. import axios from "axios";
  461. import { useStore } from "vuex";
  462. const store = useStore();
  463. const api = ref("");
  464. const router = useRouter();
  465. const flagBtn = ref(); // 按钮权限
  466. // 表格数据
  467. const loading = ref(false);
  468. const tableData = reactive({
  469. list: [],
  470. });
  471. // 添加员工弹窗数据 (------------------------------------)
  472. const dialongTitle = ref("添加房型"); // 弹窗标题
  473. const cities = ref([
  474. "会议室",
  475. "订车场",
  476. "免费WIFI",
  477. "储物柜",
  478. "无早餐",
  479. "无停车场",
  480. ]); // 名宿配置数据
  481. const houseType = ref(); // 房型选择
  482. const searchInput = reactive({
  483. keyWord: "",
  484. type: 1,
  485. }); // 搜索按钮数据
  486. // 查看图片按钮
  487. const bgImg = ref(false);
  488. const bgImgList = ref();
  489. const currentPage = ref(1); // 当前页
  490. const pageSize = ref(10);
  491. const total = ref(); // 当前总数
  492. const selectData = reactive({ list: [] }); // 多选框选择的数据
  493. const addDialogVisible = ref(false); // 控制添加员工弹窗
  494. // 添加员工表单数据
  495. const ruleFormRef = ref();
  496. const ruleForm = reactive({
  497. roomName: "", // 房型名称
  498. roomArea: "", //房型面积
  499. roomPrice: "", //单价
  500. number: "", //数量
  501. visible: "", // 可见范围
  502. roomType: "", // 类型
  503. roomLiveTime: "", // 钟点时长
  504. receivingTime: "", // 使用时间
  505. roomConfig: "", //房型配置
  506. roomNumbers: [], // 房间号列表
  507. roomPicture: [], // 房间图片
  508. id: "",
  509. });
  510. const imgShow = ref(false);
  511. const fileList = reactive({ list: [] }); // 添加多张图片的文件
  512. const roomConfig = ref([]); //房型配置
  513. // 房费验证
  514. const validatePrice = (rule, value, callback) => {
  515. if (/^(?!0+(?:\.0+)?$)(?:[1-9]\d*|0)(?:\.\d{1,2})?$/.test(value)) {
  516. callback();
  517. } else {
  518. callback(new Error("最多包含两位小数的正数"));
  519. }
  520. };
  521. // 房费验证
  522. const area = (rule, value, callback) => {
  523. if (/^(?!0+(?:\.0+)?$)(?:[1-9]\d*|0)(?:\.\d{1,4})?$/.test(value)) {
  524. callback();
  525. } else {
  526. callback(new Error("最多包含四位小数的正数"));
  527. }
  528. };
  529. // 房间数量验证
  530. const validateNumber = (rule, value, callback) => {
  531. console.log(value, "房间数量");
  532. if (/^\+?[1-9]\d*$/.test(value)) {
  533. callback();
  534. } else {
  535. callback(new Error("房间数量最大不能超过三位数"));
  536. }
  537. };
  538. // 表单验证
  539. const rules = reactive({
  540. roomPicture: [
  541. { required: true, message: "民宿图片不能为空", trigger: "blur" },
  542. ],
  543. roomName: [{ required: true, message: "房型名称不能为空", trigger: "blur" }],
  544. roomPrice: [
  545. { required: true, message: "房费不能为空", trigger: "blur" },
  546. { validator: validatePrice, trigger: "blur" },
  547. ],
  548. number: [
  549. { required: true, message: "数量不能为空", trigger: "blur" },
  550. { validator: validateNumber, trigger: "blur" },
  551. // {
  552. // pattern: /^\+?[1-9]\d*$/,
  553. // message: "请输入大于0的正整数",
  554. // trigger: "blur",
  555. // },
  556. ],
  557. visible: [{ required: true, message: "请选择可见范围", trigger: "blur" }],
  558. roomType: [{ required: true, message: "类型不能为空", trigger: "blur" }],
  559. roomLiveTime: [
  560. { required: true, message: "钟点时长不能为空", trigger: "blur" },
  561. ],
  562. receivingTime: [
  563. { required: true, message: "使用时间不能为空", trigger: "blur" },
  564. ],
  565. roomArea: [
  566. { required: true, message: "房型面积不能为空", trigger: "blur" },
  567. { validator: area, trigger: "blur" },
  568. ],
  569. roomConfig: [
  570. { required: true, message: "房型配置不能为空", trigger: "blur" },
  571. ],
  572. });
  573. // 查看房型列表
  574. const getList = async () => {
  575. loading.value = true;
  576. let data = {
  577. page: currentPage.value,
  578. size: pageSize.value,
  579. keyWord: searchInput.keyWord, // 房型名称
  580. type: searchInput.type,
  581. };
  582. let res = await axios({
  583. method: "get",
  584. url: api.value + "/house/list",
  585. headers: {
  586. token: sessionStorage.getItem("token"),
  587. user_head: sessionStorage.getItem("user_head"),
  588. },
  589. params: data,
  590. });
  591. console.log(res, "房型管理");
  592. if (res.data.code == 200) {
  593. loading.value = false;
  594. // res.data.data.list.forEach((item) => {
  595. // let arr = [];
  596. // item.visible.split(",").forEach((i) => {
  597. // if (i == 0) {
  598. // arr.push("全部");
  599. // } else if (i == 1) {
  600. // arr.push("学生");
  601. // } else if (i == 2) {
  602. // arr.push("教职工");
  603. // } else if (i == 3) {
  604. // arr.push("校友");
  605. // } else if (i == 4) {
  606. // arr.push("访客");
  607. // } else if (i == 5) {
  608. // arr.push("临时人员");
  609. // } else if (i == 6) {
  610. // arr.push("其他");
  611. // } else if (i == 7) {
  612. // arr.push("领导");
  613. // }
  614. // });
  615. // item.visibleName = arr.join(",");
  616. // });
  617. tableData.list = res.data.data.list;
  618. total.value = res.data.data.totalCount;
  619. } else {
  620. loading.value = false;
  621. ElMessage({
  622. type: "error",
  623. showClose: true,
  624. message: res.data.message,
  625. center: true,
  626. });
  627. }
  628. };
  629. const systemList = async () => {
  630. let data = {
  631. permissionSettingId: sessionStorage.getItem("permissionSettingId"),
  632. };
  633. let res = await axios({
  634. method: "get",
  635. url: api.value + "/facility-services/list",
  636. headers: {
  637. token: sessionStorage.getItem("token"),
  638. user_head: sessionStorage.getItem("user_head"),
  639. },
  640. params: data,
  641. });
  642. console.log(res, "房型配置");
  643. if (res.data.code == 200) {
  644. roomConfig.value = res.data.data;
  645. } else {
  646. loading.value = false;
  647. ElMessage({
  648. type: "error",
  649. showClose: true,
  650. message: res.data.message,
  651. center: true,
  652. });
  653. }
  654. };
  655. // 搜索功能
  656. const searchBtn = lodash.debounce(async () => {
  657. getList();
  658. }, 300);
  659. // 移出照片
  660. const handleRemove = (uploadFile, uploadFiles) => {
  661. // console.log(uploadFile.uid, uploadFiles);
  662. fileList.list = fileList.list.filter((item) => {
  663. return item.uid != uploadFile.uid;
  664. });
  665. ruleForm.roomPicture = fileList.list;
  666. };
  667. // 点击图片的查看按钮
  668. const handlePreview = (file) => {
  669. imgUrl.value = file.url;
  670. imgVisible.value = true;
  671. // console.log(file);
  672. };
  673. // 限制上传图片的大小
  674. const beforeAvatarUpload = (rawFile) => {
  675. console.log(rawFile.type);
  676. if (rawFile.type !== "image/jpeg" && rawFile.type !== "image/png") {
  677. ElMessage.error("图片格式必须为JPG/PNG格式!");
  678. return false;
  679. } else if (rawFile.size / 1024 / 1024 > 10) {
  680. ElMessage.erroapi.valuer("图片的大小不能超过10MB!");
  681. return false;
  682. }
  683. return true;
  684. };
  685. // 添加照片时往fileList列表中添加图片信息
  686. const handleChange = async (file, fileLists) => {
  687. console.log(file, "1111");
  688. // fileList.list.push(file);
  689. };
  690. // 可以获取图片参数
  691. const handleUpload = async (file) => {
  692. if (fileList.list.length >= 6) {
  693. ElMessage.warning("最多可上传6张图片!");
  694. return false;
  695. }
  696. imgShow.value = true;
  697. console.log(file, "2222");
  698. let data = new FormData();
  699. data.set("file", file.file);
  700. let res = await axios({
  701. method: "post",
  702. url: api.value + "/upload/save",
  703. headers: {
  704. token: sessionStorage.getItem("token"),
  705. user_head: sessionStorage.getItem("user_head"),
  706. },
  707. data: data,
  708. });
  709. console.log(res, "图片上传成功");
  710. if (res.data.code == 200) {
  711. // res.data.uid = file.file.uid;
  712. fileList.list.push({ url: res.data.data.url, uid: file.file.uid });
  713. ruleForm.roomPicture = fileList.list;
  714. console.log(fileList.list);
  715. imgShow.value = false;
  716. } else {
  717. imgShow.value = false;
  718. ElMessage({
  719. type: "error",
  720. showClose: true,
  721. message: res.data.message,
  722. center: true,
  723. });
  724. }
  725. };
  726. //添加房型 (--------------------------------------)
  727. const addlist = async () => {
  728. dialongTitle.value = "添加房型";
  729. addDialogVisible.value = true;
  730. systemList();
  731. ruleForm.roomPicture = []; // 房间图片
  732. fileList.list = []; // 将选中的图片文件置为空
  733. ruleForm.roomName = ""; // 房型名称
  734. ruleForm.roomArea = ""; //房型面积
  735. ruleForm.roomPrice = ""; //单价
  736. ruleForm.number = ""; //数量
  737. ruleForm.roomType = ""; // 类型
  738. ruleForm.visible = ""; // 可见范围
  739. // roomConfig.value = []; //房型配置
  740. ruleForm.roomConfig = []; //房型配置
  741. ruleForm.id = ""; // id
  742. ruleForm.roomNumbers = []; // 房间号列表
  743. ruleForm.roomLiveTime = ""; // 钟点时长
  744. ruleForm.receivingTime = ""; // 使用时间
  745. };
  746. //编辑按钮 (-------------------------------------------)
  747. const edit = async (row) => {
  748. console.log(row, "编辑房型");
  749. dialongTitle.value = "编辑房型";
  750. ruleForm.id = row.id;
  751. let data = {
  752. houseId: row.id,
  753. };
  754. let res = await axios({
  755. method: "get",
  756. url: api.value + "/house/details",
  757. headers: {
  758. token: sessionStorage.getItem("token"),
  759. user_head: sessionStorage.getItem("user_head"),
  760. },
  761. params: data,
  762. });
  763. console.log(res, "编辑详情");
  764. if (res.data.code == 200) {
  765. addDialogVisible.value = true;
  766. ruleForm.roomName = res.data.data.roomName;
  767. ruleForm.roomArea = res.data.data.roomArea;
  768. ruleForm.roomPrice = res.data.data.roomPrice;
  769. ruleForm.number = res.data.data.number;
  770. // ruleForm.visible = res.data.data.visible.split(",");
  771. ruleForm.roomType = String(res.data.data.roomType);
  772. ruleForm.roomLiveTime = res.data.data.roomLiveTime;
  773. if (res.data.data.receivingTime) {
  774. ruleForm.receivingTime = res.data.data.receivingTime.split("-");
  775. } else {
  776. ruleForm.receivingTime = "";
  777. }
  778. systemList().then(() => {
  779. ruleForm.roomConfig = res.data.data.roomConfiguration.split(",");
  780. });
  781. let imgArr = [];
  782. if (res.data.data.housePicture) {
  783. res.data.data.housePicture.split(",").forEach((i, ind) => {
  784. imgArr.push({
  785. url: i,
  786. uid: ind,
  787. });
  788. });
  789. ruleForm.roomPicture = imgArr;
  790. fileList.list = imgArr;
  791. } else {
  792. ruleForm.roomPicture = imgArr;
  793. fileList.list = imgArr;
  794. }
  795. let arr = [];
  796. res.data.data.roomIds.split(",").forEach((item, ind) => {
  797. arr.push({
  798. numberName: item,
  799. id: ind,
  800. });
  801. });
  802. ruleForm.roomNumbers = arr;
  803. } else {
  804. ElMessage({
  805. type: "error",
  806. showClose: true,
  807. message: res.data.message,
  808. center: true,
  809. });
  810. }
  811. // dialongTitle.value = "编辑房型";
  812. // addDialogVisible.value = true;
  813. // ruleForm.hName = row.hName; // 房型名称
  814. // ruleForm.hAreas = row.hAreas; //房型面积
  815. // ruleForm.price = row.price; //单价
  816. // ruleForm.number = row.number; //数量
  817. // return Number(item);
  818. // });
  819. // ruleForm.hConfig = row.hConfig; //房型配置
  820. // ruleForm.houseNumbers = row.houseNumbers; // 房间号列表
  821. // ruleForm.id = row.id; //id
  822. };
  823. // 取消添加房型
  824. const cancelAdd = () => {
  825. addDialogVisible.value = false;
  826. ruleFormRef.value.resetFields();
  827. ruleForm.roomName = "";
  828. ruleForm.roomArea = "";
  829. ruleForm.roomPrice = "";
  830. ruleForm.number = "";
  831. ruleForm.visible = "";
  832. ruleForm.roomType = "";
  833. ruleForm.roomLiveTime = "";
  834. ruleForm.receivingTime = "";
  835. ruleForm.roomConfig = "";
  836. // roomConfig.value = '';
  837. ruleForm.roomNumbers = "";
  838. ruleForm.roomPicture = [];
  839. fileList.list = [];
  840. };
  841. // 选择房型配置
  842. const checkHouse = (val) => {
  843. console.log(val);
  844. // ruleForm.roomConfig = val
  845. ruleForm.roomConfig = val;
  846. // console.log(ruleForm.roomConfig);
  847. };
  848. // 监听房间数量
  849. watch(
  850. () => ruleForm.number,
  851. (newVal, oldVal) => {
  852. console.log(newVal, "监听房间数量");
  853. if (ruleForm.number <= 999) {
  854. let arr = [];
  855. if (newVal > 0) {
  856. for (let i = 0; i < newVal; i++) {
  857. arr[i] = {
  858. numberName: "",
  859. id: Math.random()
  860. .toString(36)
  861. .substr(3, i + 1),
  862. };
  863. }
  864. }
  865. arr.forEach((item, index) => {
  866. ruleForm.roomNumbers.forEach((i, ind) => {
  867. if (index == ind) {
  868. item.numberName = i.numberName;
  869. item.id = i.id;
  870. }
  871. });
  872. });
  873. ruleForm.roomNumbers = arr;
  874. console.log(arr, "根据数量添加空房间");
  875. } else {
  876. ElMessage({
  877. type: "warning",
  878. showClose: true,
  879. message: "房间数量最大为三位数",
  880. center: true,
  881. });
  882. console.log(newVal.slice(0, 3));
  883. ruleForm.number = newVal.slice(0, 3);
  884. }
  885. }
  886. );
  887. // 新增房间号
  888. const addRoom = () => {
  889. console.log(ruleForm.roomNumbers);
  890. let arr = {
  891. numberName: "",
  892. id: Math.random().toString(36).substr(3, 6),
  893. };
  894. ruleForm.roomNumbers.push(arr);
  895. if (ruleForm.roomNumbers.length > 0) {
  896. ruleForm.number = ruleForm.roomNumbers.length;
  897. }
  898. // console.log(ruleForm.roomNumbers.length, "房间数量");
  899. };
  900. // 删除房间号
  901. const delRoom = (i) => {
  902. ruleForm.roomNumbers = ruleForm.roomNumbers.filter((item) => {
  903. return i.id != item.id;
  904. });
  905. if (ruleForm.roomNumbers.length > 0) {
  906. ruleForm.number = ruleForm.roomNumbers.length;
  907. } else {
  908. ruleForm.number = "";
  909. }
  910. // console.log(ruleForm.roomNumbers.length, "房间数量");
  911. };
  912. // 确认添加房型
  913. const submitAdd = lodash.debounce(async (formEl) => {
  914. if (!formEl) return;
  915. await formEl.validate(async (valid, fields) => {
  916. if (valid) {
  917. if (dialongTitle.value == "添加房型") {
  918. const arr = [];
  919. let flag = ruleForm.roomNumbers.some(i=>{
  920. return i.numberName==''
  921. })
  922. if(flag){
  923. ElMessage({
  924. type: "warning",
  925. showClose: true,
  926. message: '房间号不能为空',
  927. center: true,
  928. });
  929. return false
  930. }
  931. ruleForm.roomNumbers.forEach((item) => {
  932. arr.push(item.numberName);
  933. console.log(item);
  934. });
  935. const imgArr = [];
  936. ruleForm.roomPicture.forEach((i) => {
  937. imgArr.push(i.url);
  938. });
  939. console.log(ruleForm.roomPicture, "图片列表");
  940. console.log(imgArr, "图片列表");
  941. let data = {
  942. roomNumbers: arr, //房间号
  943. house: {
  944. roomName: ruleForm.roomName, //房间名字
  945. roomType: ruleForm.roomType, //1:全日房,2:钟点房
  946. roomPrice: ruleForm.roomPrice,
  947. number: ruleForm.number,
  948. roomArea: ruleForm.roomArea,
  949. roomLiveTime: ruleForm.roomLiveTime,
  950. // receivingTime: `${ruleForm.receivingTime[0]}-${ruleForm.receivingTime[1]}`,
  951. // visible: ruleForm.visible.join(","), //可见类型(0:全部,1:学生,2:教职工,3:校友,4:访客,5:临时人员,6:其他,7:领导)
  952. roomConfiguration: ruleForm.roomConfig.join(","),
  953. roomPicture: imgArr[0], // 房型首页图
  954. housePicture: imgArr.join(","), //房型图,多张用逗号隔开
  955. },
  956. adminId: sessionStorage.getItem("permissionSettingId"),
  957. };
  958. console.log(data, "添加房型参数");
  959. let res = await axios({
  960. method: "post",
  961. url: api.value + "/house/save",
  962. headers: {
  963. token: sessionStorage.getItem("token"),
  964. user_head: sessionStorage.getItem("user_head"),
  965. },
  966. data: data,
  967. });
  968. console.log(res, "添加房型");
  969. if (res.data.code == 200) {
  970. getList();
  971. ElMessage({
  972. type: "success",
  973. showClose: true,
  974. message: res.data.message,
  975. center: true,
  976. });
  977. addDialogVisible.value = false;
  978. ruleFormRef.value.resetFields();
  979. } else {
  980. ElMessage({
  981. type: "error",
  982. showClose: true,
  983. message: res.data.message,
  984. center: true,
  985. });
  986. }
  987. } else {
  988. const arr = [];
  989. let flag = ruleForm.roomNumbers.some(i=>{
  990. return i.numberName==''
  991. })
  992. if(flag){
  993. ElMessage({
  994. type: "warning",
  995. showClose: true,
  996. message: '房间号不能为空',
  997. center: true,
  998. });
  999. return false
  1000. }
  1001. ruleForm.roomNumbers.forEach((item) => {
  1002. arr.push(item.numberName);
  1003. console.log(item);
  1004. });
  1005. const imgArr = [];
  1006. ruleForm.roomPicture.forEach((i) => {
  1007. imgArr.push(i.url);
  1008. });
  1009. console.log(ruleForm.roomPicture, "图片列表");
  1010. console.log(imgArr, "图片列表");
  1011. let data = {
  1012. roomNumbers: arr, //房间号
  1013. house: {
  1014. id: ruleForm.id,
  1015. roomName: ruleForm.roomName, //房间名字
  1016. roomType: ruleForm.roomType, //1:全日房,2:钟点房
  1017. roomPrice: ruleForm.roomPrice,
  1018. number: ruleForm.number,
  1019. roomArea: ruleForm.roomArea,
  1020. roomLiveTime: ruleForm.roomLiveTime,
  1021. // receivingTime: `${ruleForm.receivingTime[0]}-${ruleForm.receivingTime[1]}`,
  1022. // visible: ruleForm.visible.join(","), //可见类型(0:全部,1:学生,2:教职工,3:校友,4:访客,5:临时人员,6:其他,7:领导)
  1023. roomConfiguration: ruleForm.roomConfig.join(","),
  1024. roomPicture: imgArr[0], // 房型首页图
  1025. housePicture: imgArr.join(","), //房型图,多张用逗号隔开
  1026. },
  1027. adminId: sessionStorage.getItem("permissionSettingId"),
  1028. };
  1029. console.log(data, "添加房型参数");
  1030. let res = await axios({
  1031. method: "post",
  1032. url: api.value + "/house/update",
  1033. headers: {
  1034. token: sessionStorage.getItem("token"),
  1035. user_head: sessionStorage.getItem("user_head"),
  1036. },
  1037. data: data,
  1038. });
  1039. console.log(res, "修改房型");
  1040. if (res.data.code == 200) {
  1041. getList();
  1042. ElMessage({
  1043. type: "success",
  1044. showClose: true,
  1045. message: res.data.message,
  1046. center: true,
  1047. });
  1048. addDialogVisible.value = false;
  1049. ruleFormRef.value.resetFields();
  1050. } else {
  1051. ElMessage({
  1052. type: "error",
  1053. showClose: true,
  1054. message: res.data.message,
  1055. center: true,
  1056. });
  1057. }
  1058. }
  1059. } else {
  1060. console.log("error submit!", fields);
  1061. }
  1062. });
  1063. }, 1000);
  1064. //删除按钮
  1065. const del = async (row) => {
  1066. console.log(row);
  1067. let data = {
  1068. houseId: row.id,
  1069. adminId: sessionStorage.getItem("permissionSettingId"),
  1070. };
  1071. let res = await axios({
  1072. method: "get",
  1073. url: api.value + "/house/delete",
  1074. headers: {
  1075. token: sessionStorage.getItem("token"),
  1076. user_head: sessionStorage.getItem("user_head"),
  1077. },
  1078. params: data,
  1079. });
  1080. if (res.data.code == 200) {
  1081. if (tableData.list.length == 1 && currentPage.value != 1) {
  1082. currentPage.value = currentPage.value - 1;
  1083. }
  1084. getList();
  1085. ElMessage({
  1086. type: "success",
  1087. showClose: true,
  1088. message: res.data.message,
  1089. center: true,
  1090. });
  1091. } else {
  1092. ElMessage({
  1093. type: "error",
  1094. showClose: true,
  1095. message: res.data.message,
  1096. center: true,
  1097. });
  1098. }
  1099. // console.log(res);
  1100. };
  1101. // 多选框功能
  1102. const handleSelectionChange = (val) => {
  1103. console.log(val);
  1104. selectData.list = val;
  1105. };
  1106. //导出功能
  1107. // const importExcel = async () => {
  1108. // if (searchInput.createTime == null) {
  1109. // searchInput.createTime = "";
  1110. // }
  1111. // let data = new FormData();
  1112. // data.set("car_number", searchInput.carnumber);
  1113. // data.set("create_time", searchInput.createTime);
  1114. // let res = await axios({
  1115. // method: "post",
  1116. // url: api.value + "/carBook/cinfotoExcel.action",
  1117. // headers: {
  1118. // token: sessionStorage.getItem("token"),
  1119. // },
  1120. // data: data,
  1121. // });
  1122. // // console.log(res, "导出账号");
  1123. // if (res.data.code == 200) {
  1124. // // const elt = document.createElement("a");
  1125. // // elt.setAttribute(
  1126. // // "href",
  1127. // // "https://chtech.ncjti.edu.cn/carstop" + res.data.downurl
  1128. // // );
  1129. // // elt.setAttribute("download", "file.png");
  1130. // // elt.style.display = "none";
  1131. // // document.body.appendChild(elt);
  1132. // // elt.click();
  1133. // var downloadPath = "https://chtech.ncjti.edu.cn/carstop" + res.data.downurl;
  1134. // console.log("获得地址数据:", downloadPath);
  1135. // var downloadLink = document.createElement("a");
  1136. // downloadLink.style.display = "none"; // 使其隐藏
  1137. // downloadLink.href = downloadPath;
  1138. // downloadLink.download = "";
  1139. // downloadLink.click();
  1140. // document.body.appendChild(downloadLink);
  1141. // document.body.removeChild(downloadLink);
  1142. // ElMessage({
  1143. // type: "success",
  1144. // showClose: true,
  1145. // message: res.data.message,
  1146. // center: true,
  1147. // });
  1148. // } else {
  1149. // ElMessage({
  1150. // type: "error",
  1151. // showClose: true,
  1152. // message: res.data.message,
  1153. // center: true,
  1154. // });
  1155. // }
  1156. // };
  1157. // 表格斑马纹颜色修改
  1158. const tableRowClassName = ({ row, rowIndex }) => {
  1159. if (rowIndex % 2 === 0) {
  1160. return "even";
  1161. } else if (rowIndex % 2 !== 0) {
  1162. return "odd";
  1163. }
  1164. return "";
  1165. };
  1166. // 分页
  1167. const handleCurrentChange = (value) => {
  1168. // console.log(value);
  1169. currentPage.value = value;
  1170. getList();
  1171. };
  1172. // 查看图片
  1173. const lookImg = (i) => {
  1174. console.log(i);
  1175. bgImg.value = true;
  1176. let arr = [
  1177. {
  1178. url: i.url,
  1179. id: i.uid,
  1180. },
  1181. ];
  1182. bgImgList.value = arr;
  1183. };
  1184. onBeforeMount(async () => {
  1185. api.value = store.state.user.api;
  1186. const btnflag = JSON.parse(sessionStorage.getItem("btnflag"));
  1187. flagBtn.value = btnflag.roomType;
  1188. console.log(flagBtn.value, "按钮权限");
  1189. getList();
  1190. // 查看房型配置
  1191. let data = {
  1192. code: 4,
  1193. };
  1194. // let res = await axios({
  1195. // method: "get",
  1196. // url: api.value + "/mhotel/hotelqueryList.action",
  1197. // headers: {},
  1198. // params: data,
  1199. // });
  1200. // console.log(res, "房型配置");
  1201. // cities.value = res.data.data;
  1202. // 查看房型
  1203. let datas = {
  1204. code: 3,
  1205. };
  1206. // let ress = await axios({
  1207. // method: "get",
  1208. // url: api.value + "/mhotel/hotelqueryList.action",
  1209. // headers: {},
  1210. // params: datas,
  1211. // });
  1212. // console.log(ress, "查看房型");
  1213. // houseType.value = ress.data.data;
  1214. });
  1215. onUnmounted(() => {
  1216. // document.removeEventListener("keyup", Enters);
  1217. });
  1218. </script>
  1219. <style scoped lang="scss">
  1220. .content-box {
  1221. width: 97.5%;
  1222. height: 89%;
  1223. margin: 20px auto;
  1224. background-color: #fff;
  1225. color: #fff;
  1226. display: flex;
  1227. flex-direction: column;
  1228. box-shadow: 0px 3px 10px rgba(0, 97, 255, 0.2);
  1229. .left {
  1230. // width: calc(100wh - 40px);
  1231. display: flex;
  1232. align-items: center;
  1233. height: 60px;
  1234. margin: 0 30px;
  1235. border-bottom: 1px solid #ccc;
  1236. color: rgb(0, 0, 0);
  1237. font-size: 18px;
  1238. font-weight: 600;
  1239. span {
  1240. margin-right: 20px;
  1241. cursor: pointer;
  1242. }
  1243. .is_active {
  1244. color: rgba(111, 182, 184, 1);
  1245. }
  1246. }
  1247. .middle {
  1248. width: 96%;
  1249. margin: 0 auto;
  1250. color: #000;
  1251. // border-bottom: 1px solid rgb(231, 231, 231);
  1252. .filter {
  1253. display: flex;
  1254. flex-wrap: wrap;
  1255. align-items: center;
  1256. margin: 10px 0 0 0;
  1257. .search {
  1258. color: #fff;
  1259. }
  1260. .condition {
  1261. display: flex;
  1262. align-items: center;
  1263. margin: 10px 30px 10px 0;
  1264. :deep(.el-input .el-input__inner) {
  1265. font-size: 14px;
  1266. }
  1267. span {
  1268. margin: 0 10px 0 0;
  1269. }
  1270. }
  1271. }
  1272. .gongneng {
  1273. margin: 10px 0 20px 0;
  1274. span {
  1275. color: #fff;
  1276. }
  1277. }
  1278. :deep(.cont) {
  1279. width: 60%;
  1280. margin: 20px auto;
  1281. }
  1282. :deep(.download) {
  1283. display: flex;
  1284. align-items: center;
  1285. margin: 10px;
  1286. }
  1287. :deep(.download span) {
  1288. font-size: 16px;
  1289. margin-left: 20px;
  1290. }
  1291. :deep(.cont .el-button) {
  1292. margin-left: 60px;
  1293. margin-bottom: 30px;
  1294. }
  1295. :deep(.cont .accomplish) {
  1296. width: 100%;
  1297. display: flex;
  1298. justify-content: center;
  1299. }
  1300. :deep(.cont .accomplish .el-button) {
  1301. width: 50%;
  1302. margin: 0;
  1303. }
  1304. }
  1305. .footer {
  1306. width: 96%;
  1307. height: 550px;
  1308. margin: 10px auto 30px;
  1309. .el-table--fit {
  1310. height: 100%;
  1311. :deep(.el-table__header-wrapper) {
  1312. background-color: #000;
  1313. font-size: 16px;
  1314. tr {
  1315. color: #000;
  1316. }
  1317. }
  1318. :deep(.el-table__row) {
  1319. height: 50px;
  1320. font-size: 16px;
  1321. color: #000;
  1322. }
  1323. :deep(.el-table__row):nth-child(2n) {
  1324. .el-table-fixed-column--right {
  1325. background-color: rgba(240, 243, 247, 1);
  1326. }
  1327. }
  1328. :deep(.el-table__row td) {
  1329. padding: 0;
  1330. border: 0;
  1331. }
  1332. .el-button--primary {
  1333. margin-left: 5px;
  1334. }
  1335. :deep(.el-table__body .even) {
  1336. background-color: #fff;
  1337. }
  1338. :deep(.el-table__body .odd) {
  1339. background-color: rgba(240, 243, 247, 1);
  1340. }
  1341. :deep(.edit) {
  1342. display: flex;
  1343. align-items: center;
  1344. justify-content: center;
  1345. color: rgba(111, 182, 184, 1);
  1346. }
  1347. :deep(.look) {
  1348. padding: 0 10px;
  1349. cursor: pointer;
  1350. color: rgba(30, 125, 251, 1);
  1351. }
  1352. .del {
  1353. color: rgba(212, 48, 48, 1);
  1354. cursor: pointer;
  1355. }
  1356. // :deep(.look):hover {
  1357. // color: red;
  1358. // }
  1359. // :deep(.del):hover {
  1360. // color: red;
  1361. // }
  1362. }
  1363. // 添加房型弹窗样式
  1364. :deep(.addStaff) {
  1365. height: 650px;
  1366. border-radius: 11px;
  1367. .el-dialog__header {
  1368. border-radius: 11px 11px 0 0;
  1369. background: rgba(237, 241, 245, 1);
  1370. font-weight: 600;
  1371. margin: 0;
  1372. .el-dialog__headerbtn {
  1373. outline: none;
  1374. }
  1375. }
  1376. .el-dialog__body {
  1377. padding: 10px 30px 10px 35px;
  1378. .slider {
  1379. height: 560px;
  1380. overflow: auto;
  1381. }
  1382. .tooltips {
  1383. display: flex;
  1384. .img {
  1385. display: flex;
  1386. .img_title {
  1387. span {
  1388. display: inline-block;
  1389. width: 60px;
  1390. }
  1391. }
  1392. .updateImg {
  1393. display: flex;
  1394. flex-direction: column;
  1395. width: 720px;
  1396. .el-upload {
  1397. // margin-top: 20px;
  1398. .zhu {
  1399. color: rgba(212, 48, 48, 1);
  1400. }
  1401. }
  1402. }
  1403. }
  1404. }
  1405. .img1 {
  1406. img {
  1407. width: 183px;
  1408. height: 121px;
  1409. opacity: 1;
  1410. border-radius: 10px;
  1411. }
  1412. .updateImg {
  1413. .el-upload__tip {
  1414. color: rgba(212, 48, 48, 1);
  1415. transform: translateX(-30px);
  1416. }
  1417. .el-upload-list {
  1418. display: none;
  1419. }
  1420. .imglist {
  1421. display: flex;
  1422. flex-wrap: wrap;
  1423. margin-bottom: 15px;
  1424. img {
  1425. margin-right: 15px;
  1426. }
  1427. .imgItem {
  1428. position: relative;
  1429. }
  1430. .lookImg {
  1431. width: 183px;
  1432. height: 121px;
  1433. cursor: pointer;
  1434. position: absolute;
  1435. top: 0;
  1436. left: 0;
  1437. border-radius: 10px;
  1438. display: flex;
  1439. justify-content: center;
  1440. align-items: center;
  1441. img {
  1442. width: 30px;
  1443. height: 30px;
  1444. opacity: 0;
  1445. }
  1446. .delimg {
  1447. width: 30px;
  1448. height: 30px;
  1449. background-image: url("@/assets/imgDel.png");
  1450. background-size: 100%;
  1451. opacity: 0;
  1452. margin-left: 5px;
  1453. }
  1454. }
  1455. .lookImg:hover {
  1456. background-color: rgba(0, 0, 0, 0.2);
  1457. img {
  1458. opacity: 1;
  1459. cursor: pointer;
  1460. }
  1461. .delimg {
  1462. opacity: 1;
  1463. cursor: pointer;
  1464. }
  1465. }
  1466. }
  1467. }
  1468. }
  1469. .el-input {
  1470. width: 200px;
  1471. }
  1472. .el-form {
  1473. .titles {
  1474. font-weight: 600;
  1475. color: #000;
  1476. font-size: 18px;
  1477. margin: 10px 0 20px 0;
  1478. span:nth-child(2) {
  1479. color: rgba(212, 48, 48, 1);
  1480. }
  1481. }
  1482. .footer {
  1483. color: rgba(212, 48, 48, 1);
  1484. }
  1485. .form_item {
  1486. display: flex;
  1487. margin-bottom: 10px;
  1488. .intro {
  1489. .el-form-item__content {
  1490. width: 550px;
  1491. }
  1492. }
  1493. .default {
  1494. .el-form-item__label {
  1495. width: 160px !important;
  1496. }
  1497. }
  1498. }
  1499. .tag {
  1500. .el-form-item__content {
  1501. width: 200px;
  1502. }
  1503. }
  1504. .roomUl {
  1505. display: flex;
  1506. // margin: 10px 0;
  1507. // align-items: center;
  1508. .title {
  1509. width: 100px;
  1510. height: 40px;
  1511. text-align: left;
  1512. line-height: 40px;
  1513. }
  1514. .delRoom {
  1515. .ul {
  1516. width: 680px;
  1517. list-style: none;
  1518. border: none;
  1519. display: flex;
  1520. flex-wrap: wrap;
  1521. margin: 0;
  1522. padding: 0;
  1523. .li {
  1524. display: flex;
  1525. flex-wrap: wrap;
  1526. .li_items {
  1527. // span {
  1528. // margin-right: 40px;
  1529. // }
  1530. .li_item {
  1531. display: flex;
  1532. justify-content: space-around;
  1533. align-items: center;
  1534. width: 120px;
  1535. height: 40px;
  1536. border: 1px solid #e0e0e0;
  1537. margin: 0 10px 10px 0;
  1538. border-radius: 7px;
  1539. }
  1540. .li_item_warning {
  1541. border: 1px solid red;
  1542. }
  1543. .warning {
  1544. color: red;
  1545. // text-align: center;
  1546. font-size: 12px;
  1547. }
  1548. .el-input {
  1549. width: 70px;
  1550. .el-input__wrapper {
  1551. box-shadow: none;
  1552. }
  1553. }
  1554. .del {
  1555. width: 14px;
  1556. height: 14px;
  1557. background-image: url("@/assets/delete.png");
  1558. background-size: 100%;
  1559. }
  1560. .del:hover {
  1561. background-image: url("@/assets/delete_hover.png");
  1562. cursor: pointer;
  1563. }
  1564. }
  1565. }
  1566. .addRoom {
  1567. cursor: pointer;
  1568. margin-left: 10px;
  1569. height: 42px;
  1570. color: rgba(9, 101, 98, 1);
  1571. display: flex;
  1572. justify-content: space-around;
  1573. align-items: center;
  1574. img {
  1575. width: 15px;
  1576. margin-right: 5px;
  1577. }
  1578. }
  1579. }
  1580. }
  1581. }
  1582. }
  1583. .options {
  1584. width: 100%;
  1585. margin: 25px 0 15px 0;
  1586. .el-form-item__content {
  1587. .queding {
  1588. margin-left: 20px;
  1589. color: #fff;
  1590. }
  1591. display: flex;
  1592. flex-direction: row-reverse;
  1593. }
  1594. }
  1595. }
  1596. }
  1597. }
  1598. .bgImg {
  1599. position: absolute;
  1600. left: 0;
  1601. top: 0;
  1602. z-index: 99999999;
  1603. width: 100%;
  1604. height: 100%;
  1605. background-color: rgba(255, 255, 255, 0.8);
  1606. // border-radius: 50px;
  1607. :deep(.el-carousel__container) {
  1608. width: 100%;
  1609. height: calc(100vh);
  1610. .el-carousel__item {
  1611. display: flex;
  1612. justify-content: center;
  1613. img {
  1614. height: 100%;
  1615. }
  1616. }
  1617. }
  1618. }
  1619. .pageSize {
  1620. display: flex;
  1621. align-items: center;
  1622. justify-content: space-between;
  1623. margin: 0 30px;
  1624. span {
  1625. color: #000;
  1626. }
  1627. .el-pagination {
  1628. // width: 1600px;
  1629. :deep(.el-pagination__total) {
  1630. color: #000;
  1631. }
  1632. :deep(.el-pagination__goto) {
  1633. color: #000;
  1634. }
  1635. :deep(.el-pagination__classifier) {
  1636. color: #000;
  1637. }
  1638. :deep(.el-input__wrapper) {
  1639. border: 1px solid rgba(0, 0, 0, 1);
  1640. border-radius: 5px;
  1641. box-shadow: none;
  1642. }
  1643. :deep(.el-pager li) {
  1644. margin: 0 5px;
  1645. border: 1px solid rgba(0, 0, 0, 1);
  1646. border-radius: 5px;
  1647. background-color: transparent;
  1648. }
  1649. :deep(.el-pager li.is-active) {
  1650. // background-color: rgba(0, 97, 255, 0.8);
  1651. border: 1px solid rgba(0, 97, 255, 1);
  1652. color: rgba(0, 97, 255, 1);
  1653. }
  1654. :deep(.btn-prev) {
  1655. margin-right: 5px;
  1656. border: 1px solid rgba(0, 0, 0, 1);
  1657. border-radius: 5px;
  1658. background-color: transparent;
  1659. }
  1660. :deep(.btn-next) {
  1661. margin-left: 5px;
  1662. border: 1px solid rgba(0, 0, 0, 1);
  1663. border-radius: 5px;
  1664. background-color: transparent;
  1665. }
  1666. }
  1667. }
  1668. }
  1669. .el-input {
  1670. width: 192px;
  1671. }
  1672. </style>