index.vue 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271
  1. <template>
  2. <view class="addactiyity-container">
  3. <van-form>
  4. <van-field
  5. :value="formatterLabelTime(formData.startTime)"
  6. is-link
  7. readonly
  8. clickable
  9. name="datetimePicker"
  10. label="开始时间"
  11. placeholder="选择开始时间"
  12. @click.native="clickTimeChoose('start')"
  13. />
  14. <van-field
  15. :value="formatterLabelTime(formData.endTime)"
  16. is-link
  17. readonly
  18. clickable
  19. name="datetimePicker"
  20. label="结束时间"
  21. placeholder="选择结束时间"
  22. @click.native="clickTimeChoose('end')"
  23. />
  24. <van-field
  25. :value="formData.matterContent"
  26. clickable
  27. label="事项内容"
  28. type="textarea"
  29. rows="1"
  30. autosize
  31. placeholder="请输入事项内容"
  32. @change="bindInputHandle('matterContent',$event)"
  33. />
  34. </van-form>
  35. <div class="submit-bot">
  36. <van-button type="primary" plain color="#3385FF" size="small" class="btn" block round @click="cancelHandle">取消</van-button>
  37. <van-button type="primary" color="#3385FF" size="small" class="btn" block round @click="submitHandle">确定</van-button>
  38. </div>
  39. <!-- 选择时间 -->
  40. <van-popup :show="isTimePicker" position="bottom">
  41. <van-datetime-picker
  42. :value="pickerForm.time"
  43. type="datetime"
  44. :formatter="formatterPickerTime"
  45. @confirm="confirmTime"
  46. @cancel="() => {isTimePicker = false;pickerForm.time=''}"
  47. />
  48. </van-popup>
  49. </view>
  50. </template>
  51. <script>
  52. import {
  53. getDefaultOption
  54. } from '../addActivity/common.js';
  55. import { validateForm } from '../utils/validate.js';
  56. import { addMatter,editMatter } from '@/api/roadshow/index.js';
  57. const moment = require('../utils/_moment.js');
  58. export default {
  59. data() {
  60. return {
  61. edit_matter_id:'',
  62. isTimePicker: false,
  63. select_type: '',
  64. pickerForm: {
  65. time: ''
  66. },
  67. formData: {
  68. startTime: '',
  69. endTime: '',
  70. matterContent: "",
  71. },
  72. weekMap: new Map([
  73. ['1','周一'],
  74. ['2','周二'],
  75. ['3','周三'],
  76. ['4','周四'],
  77. ['5','周五'],
  78. ['6','周六'],
  79. ['7','周日']
  80. ]),
  81. };
  82. },
  83. methods: {
  84. /* 取消 */
  85. cancelHandle() {
  86. uni.navigateBack({
  87. delta:1
  88. })
  89. },
  90. /* 提交表单 */
  91. async submitHandle() {
  92. let isCheck = validateForm('事项',this.formData);
  93. console.log(isCheck)
  94. if(!isCheck) return
  95. let params = {
  96. MatterContent: this.formData.matterContent,
  97. StartDate: moment(this.formData.startTime).format('YYYY-MM-DD'),
  98. EndDate: moment(this.formData.endTime).format('YYYY-MM-DD'),
  99. StartTime: moment(this.formData.startTime).format('HH:mm:ss'),
  100. EndTime: moment(this.formData.endTime).format('HH:mm:ss'),
  101. StartWeek: moment(this.formData.startTime
  102. ).format('ddd'),
  103. EndWeek: moment(this.formData.endTime
  104. ).format('ddd')
  105. }
  106. // 发送请求
  107. const { code } = this.edit_matter_id ? await editMatter({
  108. RsMattersId: Number(this.edit_matter_id),
  109. ...params
  110. }) : await addMatter(params);
  111. if(code !== 200) return;
  112. uni.showToast({
  113. title: this.edit_matter_id ? '提交成功' : '添加成功',
  114. icon: 'success',
  115. })
  116. setTimeout(() => {
  117. this.cancelHandle();
  118. },1800)
  119. },
  120. /* 点击选择时间 */
  121. clickTimeChoose(type) {
  122. this.pickerForm.time = type === 'start' ? this.formData.startTime : this.formData.endTime;
  123. this.select_type = type;
  124. setTimeout(() => {
  125. this.isTimePicker = true;
  126. })
  127. },
  128. /* 选择时间 */
  129. confirmTime({detail}) {
  130. // console.log(val)
  131. if (this.select_type === 'start') {
  132. this.formData.startTime = detail;
  133. } else {
  134. this.formData.endTime = detail;
  135. }
  136. this.isTimePicker = false;
  137. this.pickerForm.time = '';
  138. },
  139. /* 绑定input输入value */
  140. bindInputHandle(key,{detail}) {
  141. this.formData[key] = detail;
  142. },
  143. /* 格式化时间显示 */
  144. formatterLabelTime(val) {
  145. if(!val) return '';
  146. const date = moment(val).format('MM.DD(ddd) HH:mm');
  147. return date;
  148. },
  149. /* 格式化弹窗时间显示 */
  150. formatterPickerTime(type, val) {
  151. switch (type) {
  152. case 'year':
  153. return val + '年';
  154. case 'month':
  155. return val + '月';
  156. case 'day':
  157. return val + '日';
  158. case 'hour':
  159. return val + '时';
  160. case 'minute':
  161. return val + '分';
  162. }
  163. },
  164. /* 设置默认状态 */
  165. initSetState(options) {
  166. const {
  167. RoleTypeCode
  168. } = JSON.parse(uni.getStorageSync('userInfo')) || null;
  169. const {
  170. startTime,
  171. endTime
  172. } = getDefaultOption(RoleTypeCode, 2);
  173. this.formData = {
  174. startTime: startTime,
  175. endTime: endTime,
  176. matterContent: ''
  177. };
  178. /* 编辑时回显表单 */
  179. if(options.edit_matter_id) {
  180. const { form,edit_matter_id } = options;
  181. this.formData = {...this.formData,...JSON.parse(form)};
  182. this.edit_matter_id = Number(edit_matter_id);
  183. }
  184. // console.log(this.formData)
  185. uni.setNavigationBarTitle({
  186. title: this.edit_matter_id ? '修改事项' : '添加事项'
  187. })
  188. }
  189. },
  190. onLoad(options) {
  191. this.initSetState(options);
  192. this.getOpenerEventChannel().on('emitBackData', (data)=> {
  193. this.initSetState(data);
  194. })
  195. },
  196. onShow() {
  197. }
  198. }
  199. </script>
  200. <style lang="scss" scoped>
  201. .addactiyity-container {
  202. padding-bottom: 200rpx;
  203. .submit-bot {
  204. position: fixed;
  205. left: 0;
  206. right: 0;
  207. bottom: 0;
  208. z-index: 99;
  209. height: 140rpx;
  210. padding: 0 150rpx;
  211. background-color: #fff;
  212. display: flex;
  213. align-items: center;
  214. padding-bottom: constant(safe-area-inset-bottom);
  215. padding-bottom: env(safe-area-inset-bottom);
  216. box-shadow: 0px -2px 6px rgba(110, 119, 141, 0.07);
  217. .btn {
  218. width: 220rpx;
  219. height: 60rpx;
  220. margin-right: 30rpx;
  221. }
  222. }
  223. }
  224. </style>
  225. <style lang="scss">
  226. .van-tree-select {
  227. .van-tree-select__item--active {
  228. color: #1989fa !important;
  229. }
  230. .van-sidebar-item--selected {
  231. border-color: #1989fa !important;
  232. }
  233. }
  234. </style>