index.vue 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. <template>
  2. <div id="index">
  3. <el-row>
  4. <el-col :span="24" class="main">
  5. <div class="w_1200">
  6. <el-col :span="24" class="one">
  7. <el-col :span="24" class="btn">
  8. <!-- <el-button type="primary" size="mini" @click="back">返回</el-button> -->
  9. </el-col>
  10. <el-col :span="24" class="text">预约服务</el-col>
  11. <el-col :span="24" class="dwon">
  12. <el-form :model="form" :rules="rules" ref="form" label-width="80px">
  13. <el-form-item label="服务类型" prop="type">
  14. <el-radio-group v-model="form.type">
  15. <el-radio label="0">服务</el-radio>
  16. <el-radio label="1">设备</el-radio>
  17. </el-radio-group>
  18. </el-form-item>
  19. <el-form-item label="选取机构" prop="medium_id">
  20. <el-select v-model="form.medium_id" clearable filterable placeholder="请选择" @change="changeMed">
  21. <el-option v-for="item in mediumList" :key="item.id" :label="item.name" :value="item.id"> </el-option>
  22. </el-select>
  23. </el-form-item>
  24. <el-form-item label="服务名称" prop="project" v-if="form.type == '0'">
  25. <el-select v-model="form.project" clearable filterable placeholder="请选择">
  26. <el-option v-for="item in projectList" :key="item.id" :label="item.name" :value="item"> </el-option>
  27. </el-select>
  28. </el-form-item>
  29. <el-form-item label="设备名称" prop="project" v-if="form.type == '1'">
  30. <el-select v-model="form.project" clearable filterable placeholder="请选择">
  31. <el-option v-for="item in equipmentList" :key="item.id" :label="item.name" :value="item"> </el-option>
  32. </el-select>
  33. </el-form-item>
  34. <el-form-item label="联系人" prop="contact">
  35. <el-input v-model="form.contact" placeholder="请输入联系人"></el-input>
  36. </el-form-item>
  37. <el-form-item label="联系电话" prop="phone">
  38. <el-input v-model="form.phone" placeholder="请输入联系电话"></el-input>
  39. </el-form-item>
  40. <el-form-item label="邮件" prop="email">
  41. <el-input v-model="form.email" placeholder="请输入邮件"></el-input>
  42. </el-form-item>
  43. <el-form-item label="服务时间" prop="server_time">
  44. <el-date-picker v-model="form.server_time" placeholder="请选择" value-format="yyyy-MM-dd" format="yyyy-MM-dd" type="date"> </el-date-picker>
  45. </el-form-item>
  46. <el-form-item label="预约备注" prop="remark">
  47. <el-input
  48. v-model="form.remark"
  49. type="textarea"
  50. maxlength="200"
  51. :autosize="{ minRows: 4, maxRows: 6 }"
  52. show-word-limit
  53. placeholder="请输入预约备注"
  54. ></el-input>
  55. </el-form-item>
  56. <el-form-item label="开具发票" prop="invoice">
  57. <el-radio-group v-model="form.invoice">
  58. <el-radio label="0">否</el-radio>
  59. <el-radio label="1">是</el-radio>
  60. </el-radio-group>
  61. </el-form-item>
  62. <el-form-item label="单位名称" prop="company" v-if="form.invoice == '1'">
  63. <el-input v-model="form.company" placeholder="请输入单位名称"></el-input>
  64. </el-form-item>
  65. <el-form-item label="税号" prop="number" v-if="form.invoice == '1'">
  66. <el-input v-model="form.number" placeholder="请输入纳税人识别号"></el-input>
  67. </el-form-item>
  68. <el-col :span="24" class="formBtn">
  69. <el-button type="danger" size="mini" @click="back">取消预约</el-button>
  70. <el-button type="primary" size="mini" @click="onSubmit('form')">提交预约</el-button>
  71. </el-col>
  72. </el-form>
  73. </el-col>
  74. </el-col>
  75. </div>
  76. </el-col>
  77. </el-row>
  78. </div>
  79. </template>
  80. <script>
  81. import { mapState, createNamespacedHelpers } from 'vuex';
  82. const { mapActions: Medium } = createNamespacedHelpers('Medium');
  83. const { mapActions: Order } = createNamespacedHelpers('Order');
  84. export default {
  85. name: 'index',
  86. props: {},
  87. components: {},
  88. data: function() {
  89. return {
  90. form: {
  91. type: '0',
  92. },
  93. rules: {
  94. medium_id: [{ required: true, message: '请选取机构', trigger: 'change' }],
  95. type: [{ required: true, message: '请选取服务类型', trigger: 'change' }],
  96. project: [{ required: true, message: '请选取服务', trigger: 'change' }],
  97. contact: [{ required: true, message: '请输入联系人', trigger: 'blur' }],
  98. phone: [{ required: true, message: '请输入联系电话', trigger: 'blur' }],
  99. email: [{ required: true, message: '请输入邮件', trigger: 'blur' }],
  100. server_time: [{ required: true, message: '请输入服务时间', trigger: 'blur' }],
  101. remark: [{ required: true, message: '请输入预约备注', trigger: 'blur' }],
  102. },
  103. // 机构
  104. mediumList: [],
  105. // 服务
  106. projectList: [],
  107. // 设备
  108. equipmentList: [],
  109. };
  110. },
  111. created() {
  112. this.search();
  113. },
  114. methods: {
  115. ...Medium(['query']),
  116. ...Order(['create']),
  117. async search() {
  118. let res = await this.query();
  119. if (this.$checkRes(res)) {
  120. this.$set(this, `mediumList`, res.data);
  121. }
  122. },
  123. // 选择机构
  124. changeMed(id) {
  125. let data = this.mediumList.find(i => i.id == id);
  126. if (data) {
  127. this.$set(this, `projectList`, data.project);
  128. this.$set(this, `equipmentList`, data.equipment);
  129. }
  130. },
  131. onSubmit(formName) {
  132. this.$refs[formName].validate(async valid => {
  133. if (valid) {
  134. let data = form;
  135. data.openid = 'ooHQc5vSXiM5PxfpLSdgGURhbPKI';
  136. let res = await this.create(data);
  137. if (this.$checkRes(res, '预约成功', res.errmsg || '预约失败')) {
  138. this.back();
  139. }
  140. } else {
  141. console.log('error submit!!');
  142. return false;
  143. }
  144. });
  145. },
  146. // 取消
  147. back() {
  148. this.$router.push({ path: '/twoweb/service/index' });
  149. },
  150. },
  151. computed: {
  152. ...mapState(['user']),
  153. },
  154. metaInfo() {
  155. return { title: this.$route.meta.title };
  156. },
  157. watch: {
  158. test: {
  159. deep: true,
  160. immediate: true,
  161. handler(val) {},
  162. },
  163. },
  164. };
  165. </script>
  166. <style lang="less" scoped>
  167. .main {
  168. min-height: 500px;
  169. margin: 10px 0;
  170. .one {
  171. min-height: 500px;
  172. border-radius: 5px;
  173. border: 1px solid #ccc;
  174. padding: 0 10px;
  175. .btn {
  176. padding: 10px;
  177. text-align: right;
  178. }
  179. .text {
  180. font-size: 30px;
  181. text-align: center;
  182. margin: 0 0 10px 0;
  183. }
  184. .dwon {
  185. padding: 10px;
  186. border: 1px dashed #ccc;
  187. border-radius: 5px;
  188. .formBtn {
  189. margin-top: 10px;
  190. text-align: center;
  191. }
  192. }
  193. }
  194. }
  195. .el-date-editor {
  196. width: 100%;
  197. }
  198. .el-select {
  199. width: 100%;
  200. }
  201. </style>