DeviceModal.vue 5.8 KB

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