hourRoomForm.vue 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356
  1. <template>
  2. <a-spin :spinning="confirmLoading">
  3. <j-form-container :disabled="formDisabled">
  4. <a-form-model
  5. labelAlign="left"
  6. ref="form"
  7. :model="model"
  8. layout="horizontal"
  9. :rules="validatorRules"
  10. slot="detail"
  11. >
  12. <a-form-model-item
  13. label="名称"
  14. :labelCol="labelCol"
  15. :wrapperCol="wrapperCol"
  16. prop="hourRoomName"
  17. >
  18. <a-input
  19. style="width: 50%"
  20. v-model="model.hourRoomName"
  21. :min="1"
  22. placeholder="名称"
  23. />
  24. </a-form-model-item>
  25. <div class="item-wrapper">
  26. <div class="wrapper-content"><span style="color:red;">*</span>1、开房后</div>
  27. <div class="wrapper-form-item" style="width: 98px">
  28. <a-form-model-item
  29. label=""
  30. :labelCol="labelCol"
  31. :wrapperCol="wrapperCol"
  32. prop="afterOpenRoom"
  33. >
  34. <a-input-number v-model="model.afterOpenRoom" placeholder="请填写" />
  35. </a-form-model-item>
  36. </div>
  37. <div class="wrapper-content">
  38. 分钟内按
  39. </div>
  40. <div class="wrapper-form-item" style="width: 98px">
  41. <a-form-model-item
  42. label=""
  43. :labelCol="labelCol"
  44. :wrapperCol="wrapperCol"
  45. prop="afterOpenRoomPay"
  46. >
  47. <a-input-number v-model="model.afterOpenRoomPay" placeholder="请填写" />
  48. </a-form-model-item>
  49. </div>
  50. <div class="wrapper-content">
  51. 元收取
  52. </div>
  53. </div>
  54. <div class="item-wrapper">
  55. <div class="wrapper-content"><span style="color:red;">*</span>2、超时之后每</div>
  56. <div class="wrapper-form-item" style="width: 98px">
  57. <a-form-model-item
  58. label=""
  59. :labelCol="labelCol"
  60. :wrapperCol="wrapperCol"
  61. prop="exceedTime"
  62. >
  63. <a-input-number v-model="model.exceedTime" placeholder="请填写" />
  64. </a-form-model-item>
  65. </div>
  66. <div class="wrapper-content">
  67. 分钟收取
  68. </div>
  69. <div class="wrapper-form-item" style="width: 98px">
  70. <a-form-model-item
  71. label=""
  72. :labelCol="labelCol"
  73. :wrapperCol="wrapperCol"
  74. prop="exceedPay"
  75. >
  76. <a-input-number v-model="model.exceedPay" placeholder="请填写" />
  77. </a-form-model-item>
  78. </div>
  79. <div class="wrapper-content">
  80. 元,不足
  81. </div>
  82. <div class="wrapper-form-item" style="width: 98px">
  83. <a-form-model-item
  84. label=""
  85. :labelCol="labelCol"
  86. :wrapperCol="wrapperCol"
  87. prop="exceedTime"
  88. >
  89. <a-input-number v-model="model.exceedTime" placeholder="请填写" />
  90. </a-form-model-item>
  91. </div>
  92. <div class="wrapper-content">
  93. 分钟,超过
  94. </div>
  95. <div class="wrapper-form-item" style="width: 98px">
  96. <a-form-model-item
  97. label=""
  98. :labelCol="labelCol"
  99. :wrapperCol="wrapperCol"
  100. prop="notReachExceedTime"
  101. >
  102. <a-input-number v-model="model.notReachExceedTime" placeholder="请填写" />
  103. </a-form-model-item>
  104. </div>
  105. <div class="wrapper-content">
  106. 分钟加收
  107. </div>
  108. <div class="wrapper-form-item" style="width: 98px">
  109. <a-form-model-item
  110. label=""
  111. :labelCol="labelCol"
  112. :wrapperCol="wrapperCol"
  113. prop="notReachExceedTimePay"
  114. >
  115. <a-input-number v-model="model.notReachExceedTimePay" placeholder="请填写" />
  116. </a-form-model-item>
  117. </div>
  118. <div class="wrapper-content">
  119. </div>
  120. </div>
  121. <div class="item-wrapper">
  122. <div class="wrapper-content"><span style="color:red;">*</span>3、封顶;</div>
  123. <div class="wrapper-form-item" style="width: 98px">
  124. <a-form-model-item
  125. label=""
  126. :labelCol="labelCol"
  127. :wrapperCol="wrapperCol"
  128. prop="maxExtraPay"
  129. >
  130. <a-input-number v-model="model.maxExtraPay" placeholder="请填写" />
  131. </a-form-model-item>
  132. </div>
  133. <div class="wrapper-content">
  134. 元封顶 注意:0元视为不封顶
  135. </div>
  136. </div>
  137. <div class="item-wrapper">
  138. <div class="wrapper-content"><span style="color:red;">*</span>4、消费超过</div>
  139. <div class="wrapper-form-item" style="width: 98px">
  140. <a-form-model-item
  141. label=""
  142. :labelCol="labelCol"
  143. :wrapperCol="wrapperCol"
  144. prop="limitTimeTransferAllDay"
  145. >
  146. <a-input-number v-model="model.limitTimeTransferAllDay" placeholder="请填写" />
  147. </a-form-model-item>
  148. </div>
  149. <div class="wrapper-content">
  150. 分钟,自动转为全天房 注意:0分钟视为不自动转全天房
  151. </div>
  152. </div>
  153. </a-form-model>
  154. </j-form-container>
  155. </a-spin>
  156. </template>
  157. <script>
  158. import { getRoomPlans, getSelectList } from "@/api/api";
  159. import { httpAction, getAction } from "@/api/manage";
  160. import { validateDuplicateValue } from "@/utils/util";
  161. import { saveHourRule,editHourRule } from '@/api/allDaysPriceRuleApi.js'
  162. export default {
  163. name: "BusMarketMemberForm",
  164. props: {
  165. disabled: {
  166. type: Boolean,
  167. default: false,
  168. required: false,
  169. },
  170. },
  171. data() {
  172. return {
  173. model: {
  174. id: "",
  175. hourRoomName: "",
  176. afterOpenRoom: 60, // 钟点时间周期
  177. afterOpenRoomPay: 108, //钟点单价
  178. exceedTime: 60, // 超时周期
  179. exceedPay: 20, //超时周期付费
  180. notReachExceedTime:20, // 未超时周期
  181. notReachExceedTimePay: 10,// 未超时周期付费
  182. maxExtraPay: 0,// 封顶
  183. limitTimeTransferAllDay: 0, //超时多少分钟自动转全天房 0 不自动转
  184. },
  185. labelCol: {
  186. xs: { span: 24 },
  187. sm: { span: 1 },
  188. },
  189. wrapperCol: {
  190. xs: { span: 24 },
  191. sm: { span: 16 },
  192. },
  193. confirmLoading: false,
  194. validatorRules: {
  195. hourRoomName: [{ required: true, message: "请输入!" }],
  196. afterOpenRoom: [{ required: true, message: "请输入!" }],
  197. afterOpenRoomPay: [{ required: true, message: "请输入!" }],
  198. exceedTime: [{ required: true, message: "请输入!" }],
  199. exceedPay: [{ required: true, message: "请输入!" }],
  200. notReachExceedTime: [{ required: true, message: "请输入!" }],
  201. notReachExceedTimePay: [{ required: true, message: "请输入!" }],
  202. maxExtraPay: [{ required: true, message: "请输入!" }],
  203. limitTimeTransferAllDay: [{ required: true, message: "请输入!" }],
  204. },
  205. url: {
  206. add: "/rooms/cesRoomLayout/save",
  207. edit: "/rooms/cesRoomLayout/modify",
  208. queryById: "/rooms/cesRoomLayout/queryById",
  209. },
  210. iconChooseVisible: false,
  211. roomPlans: [],
  212. members: [],
  213. };
  214. },
  215. computed: {
  216. formDisabled() {
  217. return this.disabled;
  218. },
  219. },
  220. created() {
  221. var _info = JSON.parse(localStorage.getItem("storeInfo"));
  222. if (_info) {
  223. this.model.hotelId = _info.id;
  224. this.initData();
  225. }
  226. this.modelDefault = JSON.parse(JSON.stringify(this.model));
  227. },
  228. methods: {
  229. initData() {
  230. getRoomPlans(this.model.hotelId, null).then((res) => {
  231. if (res.success) {
  232. this.roomPlans = res.result;
  233. }
  234. });
  235. },
  236. selectIcons() {
  237. this.iconChooseVisible = true;
  238. },
  239. handleIconCancel() {
  240. this.iconChooseVisible = false;
  241. },
  242. handleIconChoose(value) {
  243. console.log(value);
  244. this.model.icon = value;
  245. this.iconChooseVisible = false;
  246. },
  247. add() {
  248. this.edit(this.modelDefault);
  249. },
  250. edit(record) {
  251. this.model = Object.assign({}, record);
  252. this.visible = true;
  253. getSelectList({ id: this.model.id }).then((res) => {
  254. if (res.success) {
  255. this.members = res.result;
  256. }
  257. });
  258. },
  259. submitForm() {
  260. const that = this;
  261. // 触发表单验证
  262. this.$refs.form.validate((valid) => {
  263. if (valid) {
  264. that.confirmLoading = true;
  265. if(this.model.id) {
  266. editHourRule(this.model).then(res => {
  267. if(res.code == 200 ) {
  268. this.confirmLoading = false
  269. this.model = {
  270. id: "",
  271. hourRoomName: "",
  272. afterOpenRoom: 60, // 钟点时间周期
  273. afterOpenRoomPay: 108, //钟点单价
  274. exceedTime: 60, // 超时周期
  275. exceedPay: 20, //超时周期付费
  276. notReachExceedTime:20, // 未超时周期
  277. notReachExceedTimePay: 10,// 未超时周期付费
  278. maxExtraPay: 0,// 封顶
  279. limitTimeTransferAllDay: 0, //超时多少分钟自动转全天房 0 不自动转
  280. }
  281. this.$message.success('保存成功')
  282. this.$emit('ok')
  283. }
  284. }).finally(_ => {
  285. this.confirmLoading = false
  286. })
  287. return
  288. }
  289. saveHourRule(this.model).then(res => {
  290. if(res.code == 200 ) {
  291. this.confirmLoading = false
  292. this.model = {
  293. id: "",
  294. hourRoomName: "",
  295. afterOpenRoom: 60, // 钟点时间周期
  296. afterOpenRoomPay: 108, //钟点单价
  297. exceedTime: 60, // 超时周期
  298. exceedPay: 20, //超时周期付费
  299. notReachExceedTime:20, // 未超时周期
  300. notReachExceedTimePay: 10,// 未超时周期付费
  301. maxExtraPay: 0,// 封顶
  302. limitTimeTransferAllDay: 0, //超时多少分钟自动转全天房 0 不自动转
  303. }
  304. this.$message.success('保存成功')
  305. this.$emit('ok')
  306. }
  307. }).finally(_ => {
  308. this.confirmLoading = false
  309. })
  310. }
  311. });
  312. },
  313. },
  314. };
  315. </script>
  316. <style lang="css" scoped>
  317. .avatar-uploader > .ant-upload {
  318. width: 104px;
  319. height: 104px;
  320. }
  321. /deep/ .ant-form-explain {
  322. width: 200% !important;
  323. }
  324. .item-wrapper {
  325. display: flex ;
  326. width: 100%;
  327. align-items: center;
  328. height: 50px;
  329. margin-top: 22px;
  330. margin-bottom: 22px;
  331. }
  332. .wrapper-form-item {
  333. height: 38px;
  334. /* margin-top: 22px; */
  335. }
  336. .item-data-wrapper {
  337. margin-top: 0 !important;
  338. border-top: 2px solid #1890ff;
  339. width: fit-content;
  340. padding: 0 40px;
  341. background-color: #1890ff;
  342. border-top-right-radius: 4px;
  343. color: white;
  344. }
  345. .header-title {
  346. font-weight: 600;
  347. width: fit-content;
  348. padding: 10px 20px;
  349. background-color: #1890ff;
  350. color: white;
  351. border-top-left-radius: 4px;
  352. border-top-right-radius: 4px;
  353. }
  354. </style>