roomType.vue 52 KB

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