add.vue 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  1. <template>
  2. <div id="add">
  3. <el-row>
  4. <el-col :span="24" class="style">
  5. <el-col :span="24" class="top">
  6. <NavBar v-show="navShow" :title="title" :isleftarrow="isleftarrow" @onClickLeft="onClickLeft"> </NavBar>
  7. </el-col>
  8. <el-col :span="24" class="main">
  9. <van-form>
  10. <van-field v-model="form.title" name="标题" label="标题" placeholder="标题" />
  11. <van-field readonly clickable name="datetimePicker" :value="form.start_time" label="开始时间" placeholder="点击选择时间" @click="onepic = true" />
  12. <van-popup v-model="onepic" position="bottom">
  13. <van-datetime-picker type="datetime" @confirm="oneSubmit" @cancel="onepic = false" />
  14. </van-popup>
  15. <van-field readonly clickable name="datetimePicker" :value="form.end_time" label="结束时间" placeholder="点击选择时间" @click="twopic = true" />
  16. <van-popup v-model="twopic" position="bottom">
  17. <van-datetime-picker type="datetime" @confirm="twoSubmit" @cancel="twopic = false" />
  18. </van-popup>
  19. <van-field readonly clickable name="datetimePicker" :value="form.join_end" label="报名截止" placeholder="点击选择时间" @click="threepic = true" />
  20. <van-popup v-model="threepic" position="bottom">
  21. <van-datetime-picker type="datetime" @confirm="threeSubmit" @cancel="threepic = false" />
  22. </van-popup>
  23. <van-field readonly clickable name="picker" :value="form.province" label="省份" placeholder="点击选择省份" @click="provincepic = true" />
  24. <van-popup v-model="provincepic" position="bottom">
  25. <van-picker show-toolbar :columns="prodata" @confirm="proSubmit" @cancel="provincepic = false" />
  26. </van-popup>
  27. <van-field readonly clickable name="picker" :value="form.place" label="市区" placeholder="点击选择市区" @click="placepic = true" />
  28. <van-popup v-model="placepic" position="bottom">
  29. <van-picker show-toolbar :columns="placedate" @confirm="plaSubmit" @cancel="placepic = false" />
  30. </van-popup>
  31. <van-field v-model="form.desc" rows="1" autosize label="简介" type="textarea" placeholder="企业简介" />
  32. <van-field v-model="form.adminuser" name="负责人" label="负责人" placeholder="负责人" />
  33. <van-field v-model="form.phone" name="手机号" label="手机号" placeholder="手机号" />
  34. <van-field v-model="form.sponsor" name="主办方" label="主办方" placeholder="主办方" />
  35. <van-field v-model="form.organizer" name="承办方" label="承办方" placeholder="承办方" />
  36. <van-field v-model="form.videointro" name="文件标题" label="文件标题" placeholder="文件标题" />
  37. <van-field name="radio" label="展会状态">
  38. <template #input>
  39. <van-radio-group v-model="form.status" direction="horizontal">
  40. <van-radio name="0">准备中</van-radio>
  41. <van-radio name="1">开始</van-radio>
  42. <van-radio name="2">结束</van-radio>
  43. </van-radio-group>
  44. </template>
  45. </van-field>
  46. <!-- <van-field v-model="form.file_path" name="视频" label="视频" placeholder="视频" /> -->
  47. <div style="margin: 16px;">
  48. <van-button round block type="info" @click="onSubmit">
  49. 提交
  50. </van-button>
  51. </div>
  52. </van-form>
  53. </el-col>
  54. </el-col>
  55. </el-row>
  56. <van-dialog v-model="show" title="展会信息" @confirm="closedia">
  57. <p style="padding: 10px 15px;">房间号:{{ dockinfo.room_id }}</p>
  58. <p style="padding: 10px 15px;">手机号:{{ dockinfo.phone }}</p>
  59. <p style="padding: 10px 15px;">密码:{{ dockinfo.passwd }}</p>
  60. </van-dialog>
  61. </div>
  62. </template>
  63. <script>
  64. import NavBar from '@/layout/common/topInfo.vue';
  65. import { mapState, createNamespacedHelpers } from 'vuex';
  66. const { mapActions: place } = createNamespacedHelpers('place');
  67. const { mapActions: dock } = createNamespacedHelpers('dock');
  68. var moment = require('moment');
  69. // import { Dialog } from 'vant';
  70. const jwt = require('jsonwebtoken');
  71. export default {
  72. name: 'add',
  73. props: {},
  74. components: {
  75. NavBar,
  76. },
  77. data: function() {
  78. return {
  79. // 头部标题
  80. title: '',
  81. // meta为true
  82. isleftarrow: '',
  83. // 返回
  84. navShow: true,
  85. form: {},
  86. onepic: false,
  87. twopic: false,
  88. threepic: false,
  89. // 字典表
  90. // 省份
  91. // 原数组
  92. province: [],
  93. // 重组
  94. prodata: [],
  95. // 市区
  96. // 原数组
  97. place: [],
  98. // 重组
  99. placedate: [],
  100. // 省份选择
  101. provincepic: false,
  102. // 市区选择
  103. placepic: false,
  104. // 展会成功信息
  105. dockinfo: {},
  106. show: false,
  107. };
  108. },
  109. async created() {
  110. await this.searchother();
  111. if (this.id) {
  112. await this.searchinfo();
  113. }
  114. },
  115. methods: {
  116. ...place({ placequery: 'query' }),
  117. ...dock(['create', 'fetch', 'update']),
  118. // 提交
  119. async onSubmit() {
  120. let data = this.form;
  121. let province = this.province.find(i => i.name == data.province);
  122. if (province) data.province = province.code;
  123. let place = this.place.find(i => i.name == data.place);
  124. if (place) data.place = place.code;
  125. if (data.id) {
  126. let res = await this.update(data);
  127. if (this.$checkRes(res)) {
  128. this.$notify({
  129. message: '修改成功',
  130. type: 'success',
  131. });
  132. this.closedia();
  133. }
  134. } else {
  135. data.user_id = this.user.uid;
  136. let res = await this.create(data);
  137. if (this.$checkRes(res)) {
  138. res.data.passwd = jwt.decode(res.data.password);
  139. this.$set(this, `dockinfo`, res.data);
  140. this.show = true;
  141. }
  142. }
  143. },
  144. // 关闭
  145. closedia() {
  146. this.show = false;
  147. this.$router.push({ path: '/adminCenter/duijiehui/index' });
  148. },
  149. // 查询其他信息
  150. async searchother() {
  151. let res = await this.placequery({ level: 1 });
  152. let arr = await this.placequery({ level: 2 });
  153. if (res || arr) {
  154. this.$set(this, `province`, res.data);
  155. var prodata = res.data.map(item => item.name);
  156. this.$set(this, `prodata`, prodata);
  157. this.$set(this, `place`, arr.data);
  158. var placedate = arr.data.map(item => item.name);
  159. this.$set(this, `placedate`, placedate);
  160. }
  161. },
  162. // 省份选择
  163. async proSubmit(value) {
  164. this.$set(this.form, `province`, value);
  165. let parentdata = this.province.find(i => i.name == value);
  166. if (parentdata) {
  167. let arr = await this.placequery({ level: 2, parent: parentdata.code });
  168. this.$set(this, `place`, arr.data);
  169. var placedate = arr.data.map(item => item.name);
  170. this.$set(this, `placedate`, placedate);
  171. }
  172. this.provincepic = false;
  173. },
  174. // 市区选择
  175. plaSubmit(value) {
  176. this.$set(this.form, `place`, value);
  177. this.placepic = false;
  178. },
  179. // 开始时间
  180. oneSubmit(time) {
  181. let date = moment(time).format('YYYY-MM-DD HH:mm:ss');
  182. if (date) this.$set(this.form, `start_time`, date);
  183. this.onepic = false;
  184. },
  185. // 结束时间
  186. twoSubmit(time) {
  187. let date = moment(time).format('YYYY-MM-DD HH:mm:ss');
  188. if (date) this.$set(this.form, `end_time`, date);
  189. this.twopic = false;
  190. },
  191. // 报名截止
  192. threeSubmit(time) {
  193. let date = moment(time).format('YYYY-MM-DD HH:mm:ss');
  194. if (date) this.$set(this.form, `join_end`, date);
  195. this.threepic = false;
  196. },
  197. // 查询详情
  198. async searchinfo() {
  199. let res = await this.fetch(this.id);
  200. if (this.$checkRes(res)) {
  201. let data = res.data;
  202. let province = this.province.find(i => i.code == res.data.province);
  203. if (province) data.province = province.name;
  204. let place = this.place.find(i => i.code == res.data.place);
  205. if (place) data.place = place.name;
  206. this.$set(this, `form`, data);
  207. }
  208. },
  209. // 返回
  210. onClickLeft() {
  211. this.$router.push({ path: '/adminCenter/duijiehui/index' });
  212. },
  213. },
  214. computed: {
  215. ...mapState(['user']),
  216. id() {
  217. return this.$route.query.id;
  218. },
  219. },
  220. mounted() {
  221. this.title = this.$route.meta.title;
  222. this.isleftarrow = this.$route.meta.isleftarrow;
  223. },
  224. metaInfo() {
  225. return { title: this.$route.meta.title };
  226. },
  227. };
  228. </script>
  229. <style lang="less" scoped>
  230. .style {
  231. width: 100%;
  232. min-height: 667px;
  233. position: relative;
  234. background-color: #f9fafc;
  235. }
  236. .top {
  237. height: 46px;
  238. overflow: hidden;
  239. }
  240. .main {
  241. min-height: 570px;
  242. }
  243. </style>