edit.vue 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. <template>
  2. <a-modal
  3. :width="1200"
  4. v-model:visible="visible"
  5. :title="title"
  6. :confirm-loading="confirmLoading"
  7. @ok="handleOk"
  8. ok-text="提交"
  9. @cancel="handleCancel"
  10. cancel-text="取消"
  11. :keyboard="false"
  12. :mask-closable="false" >
  13. <a-form :model="dataModel" autocomplete="off" >
  14. <a-divider orientation="left">基础信息管理</a-divider>
  15. <a-row type="flex">
  16. <a-col :span="7">
  17. <a-form-item label="姓名" name="siteUserID" :label-col="{span:7}" :rules="[{ required: true, message: '请选择站点人员!' }]">
  18. <label v-if="opCategory==3">{{dataModel.userName}}</label>
  19. <a-select ref="select" v-model:value="dataModel.siteUserID" :options="siteUserList"
  20. :field-names="{ label: 'text', value: 'value' }" :allow-clear="true" > </a-select>
  21. <!-- <a-input v-model:value="dataModel.userName" placeholder=""/>-->
  22. </a-form-item>
  23. </a-col>
  24. <a-col :span="8">
  25. <a-form-item label="日志类型" name="doTypeID" :label-col="{span:8}" :rules="[{ required: true, message: '请选择日志类型!' }]">
  26. <label v-if="opCategory==3">{{dataModel.logTypeName }}</label>
  27. <a-select ref="select" v-model:value="dataModel.doTypeID" :options="logTypeList"
  28. :field-names="{ label: 'name', value: 'value' }" :allow-clear="false" > </a-select>
  29. <!-- <a-input v-model:value="dataModel.logTypeName" placeholder=""/>-->
  30. </a-form-item>
  31. </a-col>
  32. <a-col :span="8">
  33. <a-form-item label="完成时间" name="workTime" :label-col="{span:7}" :rules="[{ required: true, message: '请选择完成时间!' }]">
  34. <label v-if="opCategory==3">{{dataModel.workTime}}</label>
  35. <a-date-picker v-model:value="dataModel.workTime" picker="date" value-format="YYYY-MM-DD" />
  36. </a-form-item>
  37. </a-col>
  38. </a-row>
  39. <a-row type="flex">
  40. <a-col :span="7">
  41. <a-form-item label="所属县区" name="regionCode" :label-col="{span:7}" :rules="[{ required: true, message: '请选择所属县区!' }]">
  42. <label v-if="opCategory==3">{{dataModel.regionCode}}</label>
  43. <a-select ref="select" v-model:value="dataModel.regionCode" :options="regionList"
  44. :field-names="{ label: 'name', value: 'code' }" :allow-clear="true" @change="getStreetList()" ></a-select>
  45. </a-form-item>
  46. </a-col>
  47. <a-col :span="8">
  48. <a-form-item label="所属街道" name="streetCode" :label-col="{span:8}" :rules="[{ required: true, message: '请选择所属街道!' }]">
  49. <label v-if="opCategory==3">{{dataModel.streetCode }}</label>
  50. <a-select ref="select" v-model:value="dataModel.streetCode" :options="streetList"
  51. :field-names="{ label: 'name', value: 'code' }" :allow-clear="true" > </a-select>
  52. </a-form-item>
  53. </a-col>
  54. <a-col :span="8">
  55. </a-col>
  56. </a-row>
  57. <a-row>
  58. <a-textarea :auto-size="{ minRows: 4, maxRows: 10 }" v-model:value="dataModel.workContent" :disabled="opCategory==3"
  59. placeholder="完成情况" style="text-align: center;" />
  60. </a-row>
  61. <a-divider orientation="left">其他</a-divider>
  62. <b-upload-file :fileRefId="dataModel.doWorkID" :readonly="false" :multiple="true"
  63. :setFileList="setFileList" :accept="'.pdf,.png,.jpg'" :disabled="opCategory==3"></b-upload-file>
  64. </a-form>
  65. </a-modal>
  66. </template>
  67. <script lang="ts">
  68. import {defineComponent, reactive, ref, toRefs} from "vue";
  69. import {get, save} from "@/api/taskAndLog/dowork";
  70. import BUploadFile from "@/components/file/uploadFile.vue";
  71. import type {SelectProps} from "ant-design-vue";
  72. import {getSysDictionaryList} from "@/api/system/dictionary";
  73. import {getRegionCodeList, getStreetCodeList} from "@/api/system/area/index";
  74. import {getSiteUserDataList} from "@/api/baseSettings/userInfo";
  75. import {message} from "ant-design-vue";
  76. interface InstitutionModel {
  77. dataModel: any;
  78. }
  79. export default defineComponent({
  80. name:'DoWorkEditForm',
  81. components: {BUploadFile},
  82. props: {
  83. loadData: {
  84. type: Function,
  85. default: null
  86. }
  87. },
  88. setup(props) {
  89. const formData = reactive<InstitutionModel>({ dataModel:{}});
  90. const visible = ref<boolean>(false);
  91. const isAllowCommit = ref<boolean>(true);
  92. const confirmLoading = ref<boolean>(false);
  93. const title = ref();
  94. const opCategory = ref<any>();
  95. const formState = reactive({
  96. total: 0,
  97. selectedRowKeys: [],
  98. loading: false
  99. });
  100. const regionList = ref<SelectProps['options']>();
  101. const streetList = ref<SelectProps['options']>();
  102. const logTypeList = ref<SelectProps["options"]>();
  103. const siteUserList = ref<SelectProps["options"]>();
  104. const fileList = ref();
  105. const setFileList = (files) => {
  106. fileList.value = files;
  107. };
  108. const getRegionList = async function(){
  109. const regionResult: any = await getRegionCodeList();
  110. regionList.value = regionResult;
  111. }
  112. const getStreetList = async function(){
  113. const streetResult: any = await getStreetCodeList(formData.dataModel.regionCode);
  114. streetList.value = streetResult;
  115. }
  116. const getSiteUserList = async function(){
  117. const siteUserResult :any = await getSiteUserDataList();
  118. console.log('siteUserResult',siteUserResult);
  119. siteUserList.value = siteUserResult;
  120. }
  121. const getLogTypeList = async function(){
  122. const logTypeResult :any = await getSysDictionaryList("LogType");
  123. logTypeList.value = logTypeResult;
  124. }
  125. const loadData = (doWorkID: string) => {
  126. get(doWorkID).then((result: any) => {
  127. formData.dataModel = result;
  128. console.log("dataModel",formData.dataModel);
  129. if (formData.dataModel.regionCode != null){
  130. getStreetList();
  131. }
  132. });
  133. }
  134. const show = (id: any,method:string,category:any) => {
  135. loadData(id);
  136. title.value ="工作日志管理-"+method;
  137. opCategory.value = category;
  138. getRegionList();
  139. getLogTypeList();
  140. getSiteUserList();
  141. visible.value = true;
  142. };
  143. const onSelectChange = (selectedRowKeys: any) => {
  144. formState.selectedRowKeys = selectedRowKeys;
  145. };
  146. const handleOk = () => {
  147. if(formData.dataModel.siteUserID==null||formData.dataModel.doTypeID ==null||formData.dataModel.workTime==null||
  148. formData.dataModel.regionCode==null||formData.dataModel.streetCode==null||formData.dataModel.workContent==null){
  149. message.error("请填写完整的工作日志!");
  150. isAllowCommit.value = false;
  151. }
  152. if (isAllowCommit.value){
  153. save(formData.dataModel).then(result => {
  154. if (result) {
  155. visible.value = false;
  156. props.loadData();
  157. }
  158. });
  159. }
  160. };
  161. const handleCancel = () => {
  162. visible.value = false;
  163. };
  164. return {
  165. ...toRefs(formData),
  166. formState,
  167. opCategory,
  168. visible,
  169. title,
  170. confirmLoading,
  171. logTypeList,
  172. siteUserList,
  173. regionList,
  174. streetList,
  175. isAllowCommit,
  176. show,
  177. getRegionList,
  178. getStreetList,
  179. setFileList,
  180. onSelectChange,
  181. handleOk,
  182. handleCancel
  183. };
  184. },
  185. created() {
  186. },
  187. })
  188. </script>