detail.vue 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. <template>
  2. <CusDialog
  3. title="通知公告"
  4. :show="show"
  5. @close="$emit('update:show', false)"
  6. @submit="onSubmit"
  7. height="500px"
  8. :closeConfirm="!isViewCpt"
  9. :loading="loading"
  10. :showSubmit="!isViewCpt"
  11. :submitText="transfer.method === 'add' ? '确认发布' : '确认'"
  12. >
  13. <div class="__normal-form">
  14. <CusForm labelWidth="100px" ref="ref_form" :formView="isViewCpt">
  15. <CusFormColumn
  16. :span="24"
  17. required
  18. label="标题:"
  19. v-model:param="cusDetail.title"/>
  20. <CusFormColumn
  21. :span="24"
  22. required
  23. label="内容:"
  24. type="textarea"
  25. :rows="8"
  26. v-model:param="cusDetail.noticeBody"/>
  27. <CusFormColumn
  28. :span="24"
  29. required
  30. label="类型:"
  31. link="select"
  32. v-model:param="cusDetail.type"
  33. :options="$store.state.dictionary.noticeTypeList"/>
  34. <CusFormColumn
  35. :span="24"
  36. label="上传附件:"
  37. link="upload"
  38. v-model:param="fileList"
  39. :delRule="(file) => true"/>
  40. </CusForm>
  41. </div>
  42. </CusDialog>
  43. </template>
  44. <script lang="ts">
  45. import {
  46. defineComponent,
  47. computed,
  48. onMounted,
  49. ref,
  50. reactive,
  51. watch,
  52. getCurrentInstance,
  53. ComponentInternalInstance,
  54. toRefs,
  55. nextTick
  56. } from 'vue'
  57. import {useStore} from 'vuex'
  58. import {useRouter, useRoute} from 'vue-router'
  59. import {ElMessage, ElMessageBox} from "element-plus";
  60. export default defineComponent({
  61. name: '',
  62. components: {},
  63. props: {
  64. show: {},
  65. transfer: <any>{}
  66. },
  67. setup(props, {emit}) {
  68. const store = useStore();
  69. const router = useRouter();
  70. const route = useRoute();
  71. const that = (getCurrentInstance() as ComponentInternalInstance).appContext.config.globalProperties
  72. const state = reactive({
  73. loading: false,
  74. cusDetail: {},
  75. fileList: []
  76. })
  77. watch(() => props.show, (n) => {
  78. if (n) {
  79. state.loading = false
  80. state.fileList = []
  81. state.cusDetail = {
  82. deptId: store.state.app.userInfo.dept.id,
  83. deptName: store.state.app.userInfo.dept.organizationName,
  84. status: '1',
  85. publisher: store.state.app.userInfo.displayName,
  86. publishTime: that.$util.YMDHms(new Date(store.state.app.timestamp)),
  87. }
  88. if (props.transfer.method !== 'add') {
  89. state.loading = true
  90. that.$api.getNoticeSearch({id: props.transfer.detail.id}).then((res) => {
  91. if (res.code === 200) {
  92. state.cusDetail = res.data
  93. if (state.cusDetail.fileUrl) {
  94. const urlArr = state.cusDetail.fileUrl.split(',')
  95. const nameArr = state.cusDetail.fileName.split(',')
  96. state.fileList = urlArr.map((v, i) => {
  97. return {
  98. name: nameArr?.[i] || v,
  99. url: v
  100. }
  101. })
  102. }
  103. emit('onView')
  104. } else {
  105. ElMessage.error(res.message)
  106. emit('update:show', false)
  107. }
  108. state.loading = false
  109. }).catch(() => {
  110. ElMessage.error('请求失败')
  111. })
  112. }
  113. nextTick(() => {
  114. ref_form.value.reset()
  115. })
  116. }
  117. })
  118. const ref_form = ref()
  119. const isViewCpt = computed(() => {
  120. return props.transfer.method === 'view'
  121. })
  122. const onSubmit = () => {
  123. ref_form.value.submit().then(() => {
  124. ElMessageBox.confirm("是否提交?", "提示", {
  125. confirmButtonText: "确定",
  126. cancelButtonText: "取消",
  127. type: "warning",
  128. }).then(() => {
  129. state.loading = true
  130. const params = state.cusDetail
  131. if (state.fileList?.length > 0) {
  132. params.fileName = state.fileList.map(v => v.name).join(',')
  133. params.fileUrl = state.fileList.map(v => v.url).join(',')
  134. } else {
  135. params.fileName = ''
  136. params.fileUrl = ''
  137. }
  138. const apiHandle = props.transfer.method === 'edit' ? that.$api.editNoticeEdit(params) : that.$api.addNoticeSave(params)
  139. apiHandle.then(res => {
  140. if (res.code === 200) {
  141. ElMessage.success(res.message)
  142. emit('update:show', false)
  143. emit('refresh')
  144. } else {
  145. ElMessage.error(res.message)
  146. }
  147. state.loading = false
  148. }).catch(() => {
  149. state.loading = false
  150. })
  151. }).catch(() => {})
  152. }).catch((e) => {
  153. ElMessage({
  154. message: e[0].message,
  155. grouping: true,
  156. type: 'warning',
  157. })
  158. })
  159. }
  160. return {
  161. ...toRefs(state),
  162. onSubmit,
  163. isViewCpt,
  164. ref_form
  165. }
  166. },
  167. })
  168. </script>
  169. <style scoped lang="scss">
  170. </style>