edit.vue 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227
  1. <template>
  2. <ion-page class="list-page">
  3. <ion-header class="header-theme2">
  4. <ion-toolbar>
  5. <ion-buttons slot="start">
  6. <ion-icon :icon="arrowBackOutline" @click="onCancel"></ion-icon>
  7. </ion-buttons>
  8. <ion-title>工作备忘编辑</ion-title>
  9. </ion-toolbar>
  10. </ion-header>
  11. <ion-content>
  12. <!-- 编辑 -->
  13. <form>
  14. <div class="bw-vue-form">
  15. <div class="form-title">基本信息</div>
  16. <div class="form-input">
  17. <ion-label>
  18. 工作备忘日期
  19. <span class="danger">*</span>
  20. </ion-label>
  21. <div class="dateTimeBox">
  22. <ion-datetime-button class="dateTimeBtn" datetime="workTime"></ion-datetime-button>
  23. <ion-modal :keep-contents-mounted="true">
  24. <ion-datetime id="workTime" placeholder="日期"
  25. v-model="dataModel.workTime" :prefer-wheel="true"
  26. dataformatas="YYYY-MM-DD" presentation="date" cancel-text="取消" done-text="确定"
  27. :show-default-buttons="true" @ion-change="workTimeChange">
  28. </ion-datetime>
  29. </ion-modal>
  30. </div>
  31. </div>
  32. <div class="form-select">
  33. <ion-label>
  34. 备忘类型
  35. <span class="danger">*</span>
  36. </ion-label>
  37. <ion-select name="doTypeID" id="doTypeID" interface="action-sheet" okText="确定" cancelText="取消" v-model="dataModel.doTypeID" placeholder="请选择日志类型">
  38. <ion-select-option v-for="(it,key) in logTypeList" :key="key" :value="it.value">
  39. {{ it.name }}
  40. </ion-select-option>
  41. </ion-select>
  42. </div>
  43. <div class="form-input">
  44. <ion-label>
  45. 工作备忘内容
  46. <span class="danger">*</span>
  47. </ion-label>
  48. <ion-textarea name="workContent" id="workContent" placeholder="请输入工作备忘内容" :rows="3" v-model="dataModel.workContent"></ion-textarea>
  49. </div>
  50. <div class="form-input">
  51. <ion-label>
  52. 照片
  53. </ion-label>
  54. <b-image v-if="dataModel.doWorkID" :file-ref-id="dataModel.doWorkID" :readonly="false"
  55. :is-single="false"></b-image>
  56. </div>
  57. </div>
  58. </form>
  59. </ion-content>
  60. <ion-footer>
  61. <ion-button shape="round" expand="block" @click="onSave">提交</ion-button>
  62. </ion-footer>
  63. <ion-loading
  64. :is-open="loading"
  65. message="加载中..."
  66. @didDismiss="setOpen(false)" >
  67. </ion-loading>
  68. </ion-page>
  69. </template>
  70. <script lang="ts">
  71. import {computed, defineComponent, reactive, ref, toRefs} from "vue";
  72. import {getSysDictionaryList} from '@/api/system/dictionary';
  73. import {getWorkLogById, saveWorkLog} from '@/api/workLog';
  74. import {useRoute, useRouter} from "vue-router";
  75. import {alertController, onIonViewDidEnter} from "@ionic/vue";
  76. import {arrowBackOutline} from 'ionicons/icons';
  77. import {required} from "@vuelidate/validators";
  78. import {useVuelidate} from "@vuelidate/core";
  79. import dayjs from "dayjs";
  80. import BImage from "@/components/bImage.vue";
  81. interface workLogModel {
  82. dataModel:any
  83. }
  84. interface SelectProps {
  85. name: string,
  86. value: string
  87. }
  88. export default defineComponent({
  89. name: 'WorkLogEdit',
  90. components: {BImage},
  91. setup() {
  92. const router = useRouter();
  93. const route = useRoute();
  94. const loading = ref(false);
  95. const logTypeList=ref<SelectProps[]>([]);
  96. const workLogData = reactive<workLogModel>({
  97. dataModel:{
  98. doWorkID: null,
  99. workTime: null,
  100. doTypeID:null,
  101. workContent: null
  102. }});
  103. // 日志当天完成工作量数据
  104. const recordsCount = reactive<any>({
  105. RecordsCompanyNum: null,
  106. RecordsJobuserNum: null,
  107. RecordsPostNum: null,
  108. RecordsJobhuntNum: null,
  109. });
  110. const workLogRules = computed(()=>{
  111. return {dataModel:{
  112. workTime:{required},
  113. doTypeID:{required},
  114. workContent:{required},
  115. }}});
  116. const workLogValid = useVuelidate(workLogRules,workLogData);
  117. const presentAlert = async (message: string) => {
  118. const alert = await alertController.create({
  119. header: '错误!',
  120. message: message,
  121. buttons: [
  122. '确定'
  123. ],
  124. });
  125. await alert.present();
  126. }
  127. const onSave = async function (){
  128. const isFormCorrect = await workLogValid.value.$validate();
  129. if(!isFormCorrect){
  130. await presentAlert("请填写完整的信息!");
  131. return null;
  132. }
  133. saveWorkLog(workLogData.dataModel).then(result => {
  134. if (result) {
  135. router.push("./list");
  136. }
  137. });
  138. }
  139. const onCancel = () => {
  140. router.push("./list");
  141. }
  142. const getWorkTypeList = async function(){
  143. const data:any =await getSysDictionaryList("LogType");
  144. logTypeList.value = data;
  145. };
  146. const setOpen = (isOpen: boolean) => {
  147. loading.value = isOpen;
  148. };
  149. const loadData = async (doWorkID: any) => {
  150. loading.value = true;
  151. await getWorkTypeList();
  152. const reqData = await getWorkLogById(doWorkID);
  153. workLogData.dataModel = reqData;
  154. if (workLogData.dataModel.workTime == null) {
  155. workLogData.dataModel.workTime = dayjs(new Date().toLocaleDateString()).format("YYYY-MM-DD") + "T00:00:00.000+08:00";
  156. }
  157. loading.value = false;
  158. };
  159. // 日期选择器选择当天日期,值为null bug
  160. function workTimeChange(value: any) {
  161. if (value.detail.value == null) {
  162. workLogData.dataModel.workTime = dayjs(new Date().toLocaleDateString()).format("YYYY-MM-DD") + "T00:00:00.000+08:00";
  163. }
  164. }
  165. const reload = (doWorkID: any) => {
  166. workLogData.dataModel = {};
  167. loadData(doWorkID);
  168. }
  169. onIonViewDidEnter(() => {
  170. if (route.query.reload)
  171. reload(route.query.doWorkID);
  172. });
  173. return {
  174. ...toRefs(workLogData),
  175. arrowBackOutline,
  176. logTypeList,
  177. setOpen,
  178. onSave,
  179. onCancel,
  180. loadData,
  181. route,
  182. router,
  183. loading,
  184. workLogValid,
  185. recordsCount,
  186. workTimeChange
  187. }
  188. }
  189. });
  190. </script>
  191. <style lang="less">
  192. .custom{
  193. --placeholder-color: gray;
  194. --placeholder-opacity: 0.5;
  195. }
  196. .title-item{
  197. margin-left: 15px;
  198. color:#1c3d70 !important;
  199. font-size: 14px !important;
  200. font-weight: bold;
  201. }
  202. .dateTimeBox {
  203. width: 100%;
  204. display: flex;
  205. margin-top: 5px;
  206. justify-content: space-between;
  207. align-content: center;
  208. }
  209. </style>