editorDetail.vue 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228
  1. <template>
  2. <div class="editorDetailBox">
  3. <div class="formBox">
  4. <el-form ref="form" :model="formData" label-width="100px">
  5. <el-row :gutter="24">
  6. <el-col :span="8">
  7. <el-form-item class="label-item" label="日志日期">
  8. <div class="write-date">
  9. {{ props.writeData?.date ?? moment().format('YYYY-MM-DD') }}
  10. </div>
  11. </el-form-item>
  12. </el-col>
  13. <el-col :span="16">
  14. <el-form-item class="label-item report" label="接收人" required>
  15. <ReportReceive :onChange="getReceiveUserIds" key="daily" />
  16. </el-form-item>
  17. </el-col>
  18. </el-row>
  19. <el-row style="height: calc(100% - 120px)">
  20. <el-col :span="24" style="height: 100%">
  21. <el-form-item class="label-item" label="今日工作" required>
  22. <el-input
  23. type="textarea"
  24. rows="9"
  25. v-model="formData.reportContent"
  26. resize="none"
  27. style="width: 100%"
  28. :show-word-limit="true"
  29. @input="getReportContent"
  30. />
  31. </el-form-item>
  32. </el-col>
  33. </el-row>
  34. </el-form>
  35. </div>
  36. <AmountOfWork
  37. :onChange="getWorkTimeList"
  38. :initialData="formData.weeklyWorkloadList"
  39. :nowDate="writeData?.date"
  40. />
  41. <div class="footBox" v-if="isUpDate">
  42. <el-button type="primary" @click="sendReportHandle(false)">更新</el-button>
  43. </div>
  44. <div class="footBox" v-else>
  45. <el-button type="primary" @click="sendReportHandle(true)">暂存</el-button>
  46. <el-button type="primary" @click="sendReportHandle(false)">发送</el-button>
  47. </div>
  48. </div>
  49. </template>
  50. <script setup lang="ts">
  51. import request from '@/config/axios'
  52. import AmountOfWork from '../components/AmountOfWork.vue'
  53. import ReportReceive from '../components/ReportReceive.vue'
  54. import { getUserInfo } from '@/utils/tool'
  55. import moment from 'moment'
  56. import PubsubService from '@/utils/PubsubService'
  57. defineOptions({ name: 'EditorDetail' })
  58. interface IProp {
  59. writeData: any
  60. }
  61. const props = defineProps<IProp>()
  62. const { writeData } = toRefs(props)
  63. const isUpDate = ref(false) // 是否是更新日志
  64. const updateLogId = ref('') // 更新日志id
  65. onMounted(() => {
  66. if (!writeData.value?.date) {
  67. writeData.value.date = moment().format('YYYY-MM-DD')
  68. }
  69. initLog()
  70. })
  71. watch(
  72. () => [writeData.value?.date, writeData.value?.isLog?.id],
  73. () => {
  74. initLog()
  75. }
  76. )
  77. const initLog = () => {
  78. if (writeData.value?.isLog) {
  79. const { reportContent, workload, receiveIds } = writeData.value.isLog
  80. formData.value.reportContent = reportContent
  81. formData.value.weeklyWorkloadList = workload
  82. formData.value.receiveUserIds = receiveIds
  83. isUpDate.value = true
  84. } else {
  85. formData.value.reportContent = ''
  86. formData.value.weeklyWorkloadList = []
  87. formData.value.receiveUserIds = []
  88. isUpDate.value = false
  89. // 发布更新日志接收人事件
  90. PubsubService.publish('init-report-receive', {})
  91. }
  92. // 如果是暂存数据回填
  93. if (writeData.value?.isLog?.isTemp) {
  94. isUpDate.value = false
  95. }
  96. }
  97. const formData = ref<{
  98. fillingDate: any
  99. receiveUserIds: string[]
  100. reportContent: string
  101. weeklyWorkloadList: any[]
  102. }>({
  103. fillingDate: writeData.value.date,
  104. receiveUserIds: [],
  105. reportContent: '',
  106. weeklyWorkloadList: []
  107. })
  108. // 接收人数据改变时触发
  109. const getReceiveUserIds = (list) => {
  110. formData.value.receiveUserIds = list
  111. }
  112. // 工作内容改变时触发
  113. const getReportContent = (val) => {
  114. formData.value.reportContent = val
  115. }
  116. // 工作量分配改变时触发
  117. const getWorkTimeList = (val) => {
  118. formData.value.weeklyWorkloadList = val
  119. }
  120. // 获取用户信息
  121. const userInfo = getUserInfo()
  122. // 提交(暂存)
  123. const message = useMessage()
  124. const sendReportHandle = async (isTemp) => {
  125. // if (formData.value.receiveUserIds.length === 0) {
  126. // message.warning('请选择接收人')
  127. // return
  128. // }
  129. // if (formData.value.weeklyWorkloadList.length === 0) {
  130. // message.warning('请对工作量进行分配')
  131. // return
  132. // }
  133. const params: any = {
  134. userId: userInfo.id ?? '',
  135. deptId: userInfo.deptId ?? '',
  136. reportStartDate: moment(writeData.value.date).valueOf(),
  137. reportEndDate: moment(writeData.value.date).valueOf(),
  138. receiveUserIds: formData.value.receiveUserIds,
  139. // receiveUserIds: ['ea81aaf2-74fe-429f-acaa-25a9a898abcf'],
  140. reportType: 'daily',
  141. reportContent: formData.value.reportContent,
  142. isTemp,
  143. weeklyWorkloadList: formData.value.weeklyWorkloadList,
  144. reportYear: writeData.value.year, // 报告年份
  145. reportMonth: writeData.value.month, // 月份
  146. reportWeek: writeData.value.week, // 周
  147. reportDay: writeData.value.dayOfWeek // 天
  148. }
  149. // 如果是更新的话要传一下报告id(需求禁止更新,代码先留着)
  150. if (isUpDate.value) {
  151. const reportId = writeData.value?.isLog?.id ?? updateLogId.value ?? ''
  152. params.reportId = reportId
  153. }
  154. // console.log('提交(暂存)~~~~~~~~~~~~~~~~~~~', params)
  155. // return
  156. const result: any = await request.postOriginal({
  157. url: '/adm/report/add-report-info',
  158. data: params
  159. })
  160. // console.log('提交(暂存)~~~~~~~result~~~~~~', result)
  161. if (result?.msg && !isTemp) {
  162. message.success('日志发送成功')
  163. // 发布提交(暂存)事件
  164. PubsubService.publish('sendReportHandle-init', {})
  165. // 禁止更新
  166. // isUpDate.value = true
  167. // if (isUpDate.value) {
  168. // updateLogId.value = result?.data ?? ''
  169. // }
  170. } else if (result?.msg && isTemp) {
  171. message.success('日志暂存成功')
  172. // 发布提交(暂存)事件
  173. PubsubService.publish('sendReportHandle-init', {})
  174. } else {
  175. message.error('日志发送失败')
  176. }
  177. }
  178. </script>
  179. <style lang="scss" scoped>
  180. .editorDetailBox {
  181. width: 100%;
  182. height: 100%;
  183. .formBox {
  184. width: 100%;
  185. .label-item {
  186. .el-form-item__label {
  187. font-weight: 400 !important;
  188. font-size: 16px !important;
  189. }
  190. .write-date {
  191. width: 90%;
  192. border: 1px solid #dee0e3;
  193. border-radius: 4px;
  194. text-align: center;
  195. }
  196. }
  197. .report {
  198. width: 100%;
  199. :deep(.el-form-item__content) {
  200. > div:first-child {
  201. width: 100%;
  202. }
  203. .el-select {
  204. width: 100%;
  205. }
  206. }
  207. }
  208. }
  209. .footBox {
  210. // height: 100%;
  211. margin-top: 20px;
  212. text-align: right;
  213. }
  214. }
  215. </style>