DeviceModal.vue 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. <template>
  2. <BasicModal
  3. :defaultFullscreen="defaultScreen"
  4. v-bind="$attrs"
  5. @register="registerModal"
  6. :title="title"
  7. :width="widthV"
  8. :showCancelBtn="false"
  9. :showOkBtn="false"
  10. :footer="null"
  11. destroyOnClose
  12. :mask-closable="false"
  13. @cancel="closeModalFn"
  14. >
  15. <!-- 报表新增 -->
  16. <div v-if="addOredit == 'add'">
  17. <a-form :model="formState" :label-col="{ style: { width: '130px' } }" :wrapper-col="{ span: 14 }">
  18. <a-form-item label="报表类型:">
  19. <JDictSelectTag v-model:value="formState.reportType" placeholder="请选择报表类型..." dictCode="reportType" />
  20. </a-form-item>
  21. <!-- <a-form-item label="报表类型:">
  22. <JDictSelectTag v-model:value="formState.reportVersion" placeholder="请选择报表版本..." dictCode="reportVersion" />
  23. </a-form-item> -->
  24. <div class="footer">
  25. <a-button type="primary" style="margin-right: 20px" @click="save">保存</a-button>
  26. <a-button type="primar" @click="closeModalFn">取消</a-button>
  27. </div>
  28. </a-form>
  29. </div>
  30. <!--历史记录 -->
  31. <div v-else-if="addOredit=='hisRecord'">
  32. <NormalHisTable :columns="columnsHis" :reportIds="reportId"
  33. :downLoad="hisdownload" :list="hisList" designScope="device-tabel" title="报表历史记录管理"
  34. :showTab="false"/>
  35. </div>
  36. <!-- 报表编辑 -->
  37. <div v-else>
  38. <div id="fileEdit"></div>
  39. </div>
  40. </BasicModal>
  41. </template>
  42. <script lang="ts" setup>
  43. import { computed, unref, inject, reactive, ref, watch, defineProps } from 'vue';
  44. import NormalHisTable from '../comment/NormalHisTable.vue';
  45. import JDictSelectTag from '/@/components/Form/src/jeecg/components/JDictSelectTag.vue';
  46. import { BasicModal, useModalInner } from '/@/components/Modal';
  47. import { useUserStore } from '/@/store/modules/user';
  48. import { hisList, hisdownload } from '../reportManager.api';
  49. import { columnsHis } from '../reportManager.data';
  50. let props = defineProps({
  51. addOredit: {
  52. type: String,
  53. default: '',
  54. },
  55. editID: {
  56. type: String,
  57. default: '',
  58. },
  59. fileType: {
  60. type: String,
  61. default: '',
  62. },
  63. reportLogHis:{
  64. type:String,
  65. default:''
  66. },
  67. reportId:{
  68. type:String,
  69. default:''
  70. }
  71. });
  72. const remoteUrl = import.meta.env.DEV ? 'http://182.92.126.35' : 'http://' + window.location.hostname;
  73. const userStore = useUserStore(); //获取用户信息
  74. let userId = unref(userStore.getUserInfo).id;
  75. let userName = unref(userStore.getUserInfo).username;
  76. let formState = reactive({
  77. reportType: '',
  78. // reportVersion: '',
  79. });
  80. //设置标题
  81. let title = computed(() => {
  82. if (props.addOredit == 'add') {
  83. return '报表新增';
  84. } else if (props.addOredit == 'hisRecord') {
  85. return '历史记录';
  86. } else {
  87. return '报表编辑';
  88. }
  89. });
  90. //弹窗宽度
  91. let widthV = computed(() => {
  92. if (props.addOredit == 'add') {
  93. return '600px';
  94. } else {
  95. return '1000px';
  96. }
  97. });
  98. //弹窗是否全屏
  99. let defaultScreen = computed(() => {
  100. if (props.addOredit == 'add') {
  101. return false;
  102. } else {
  103. return true;
  104. }
  105. });
  106. // 声明Emits
  107. const emit = defineEmits(['saveOrUpdate', 'register']);
  108. //表单赋值
  109. const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
  110. //重置表单
  111. setModalProps({ confirmLoading: false });
  112. // Object.assign(deviceData, data.record);
  113. new DocsAPI.DocEditor(
  114. 'fileEdit', // 元素id
  115. {
  116. type: 'desktop',
  117. width: '100%',
  118. height: '860px',
  119. document: {
  120. title: '文档管理',
  121. url: remoteUrl + ':9999/ventanaly-device/safety/reportInfo/onlyOffice/read?id=' + props.editID + '&type=' + props.reportLogHis, //id表示文件id,后端接口用这个id来加载文件
  122. fileType: props.fileType == 'doc' ? 'docx' : props.fileType == 'xls' ? 'xlsx' : props.fileType == 'ppt' ? 'pptx' : props.fileType, //当文件类型为doc、xls、ppt时,对应用docx、xlsx、pptx否则会保存异常。
  123. key: '',
  124. lang: 'zh-CN',
  125. permissions: {
  126. download: true, //是否可下载
  127. edit: true,
  128. fillForms: true,
  129. print: true, //是否可打印
  130. },
  131. },
  132. editorConfig: {
  133. lang: 'zh-CN',
  134. mode: props.reportLogHis ? 'view' : 'edit', //view:只读且可复制内容,edit:可编辑
  135. callbackUrl: remoteUrl + ':9999/ventanaly-device/safety/reportInfo/onlyOffice/save?id=' + props.editID + '&type=' + props.reportLogHis, //id表示文件id,后端接口用这个id来加载文件
  136. coEditing: {
  137. mode: 'fast',
  138. change: true,
  139. },
  140. customization: {
  141. toolbarNoTabs: true,
  142. autosave: false, //是否自动保存
  143. forcesave: true, //定义保存按钮是否显示
  144. hideRightMenu: true,
  145. },
  146. //用户信息
  147. user: {
  148. id: userId, //用户ID
  149. name: userName, //用户名称
  150. },
  151. },
  152. }
  153. );
  154. });
  155. //点击图标关闭弹框
  156. const closeModalFn = () => {
  157. formState.reportType = '';
  158. // formState.reportVersion = '';
  159. closeModal();
  160. // emit('closeModal')
  161. };
  162. //新增保存
  163. let save = () => {
  164. emit('saveOrUpdate', formState);
  165. };
  166. </script>
  167. <style scoped lang="less">
  168. ::v-deep .suffix {
  169. height: 32px;
  170. line-height: 32px;
  171. margin-left: 5px;
  172. color: #fff;
  173. }
  174. ::v-deep .zxm-form{
  175. padding-top: 40px;
  176. }
  177. .footer {
  178. width: 100%;
  179. text-align: center;
  180. padding-top: 30px;
  181. }
  182. </style>