addProtocol.vue 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. <template>
  2. <div id="addProtocol">
  3. <el-form :model="form" label-width="100px" class="form" ref="form">
  4. <el-form-item
  5. label="协议名称"
  6. prop="name"
  7. :rules="[
  8. {
  9. required: true,
  10. message: '请输入协议名称',
  11. trigger: 'blur'
  12. }
  13. ]"
  14. >
  15. <el-input
  16. v-model="form.name"
  17. placeholder="请输入协议名称"
  18. style="width: 100%"
  19. ></el-input>
  20. </el-form-item>
  21. <el-form-item
  22. label="协议号"
  23. prop="code"
  24. :rules="[
  25. {
  26. required: true,
  27. message: '请输入协议号',
  28. trigger: 'blur'
  29. }
  30. ]"
  31. >
  32. <el-input
  33. v-model="form.code"
  34. placeholder="请输入协议号"
  35. style="width: 100%"
  36. ></el-input>
  37. </el-form-item>
  38. <el-form-item
  39. label="上传协议"
  40. prop="url"
  41. :rules="[
  42. {
  43. required: true,
  44. message: '请上传协议',
  45. trigger: 'blur, change'
  46. }
  47. ]"
  48. >
  49. <singe-file-upload
  50. tips="仅支持上传 doc/docx 格式文件"
  51. buttonText="点击上传协议"
  52. accept=".doc, .docx"
  53. @inputFile="readFileInputEventAsArrayBuffer"
  54. v-model="form.url"
  55. />
  56. </el-form-item>
  57. </el-form>
  58. <span slot="footer" class="dialog-footer">
  59. <el-button @click="$listeners.close()">取 消</el-button>
  60. <el-button type="primary" @click="addSubmit">下一步</el-button>
  61. </span>
  62. <el-dialog
  63. title="查看协议"
  64. :visible.sync="lookVisible"
  65. width="415px"
  66. append-to-body
  67. >
  68. <previewProtocol
  69. @close="lookVisible = false"
  70. :form="form"
  71. v-if="lookVisible"
  72. />
  73. </el-dialog>
  74. </div>
  75. </template>
  76. <script>
  77. import previewProtocol from "@/views/tenantSetting/model/previewProtocol";
  78. import mammoth from "mammoth";
  79. import { headHtml, footerHtml } from './protocolTemplate'
  80. export default {
  81. components: { previewProtocol },
  82. data() {
  83. return {
  84. form: {
  85. name: null,
  86. code: null,
  87. url: null,
  88. fileSubmit: null, // 后台需要html内容
  89. fileContent: null, // 文件内容
  90. },
  91. lookVisible: false
  92. };
  93. },
  94. mounted() {
  95. },
  96. methods: {
  97. addSubmit() {
  98. this.$refs['form'].validate((_) => {
  99. if(_) {
  100. this.lookVisible = true
  101. console.log(this.form)
  102. }
  103. })
  104. },
  105. displayResult(result) {
  106. let html = result.value;
  107. let newHTML = html.replace(//g, '')
  108. .replace('<h1>', '<h2 style="font-size: 16px;font-weight: bold; padding-top: 15px;">')
  109. this.form.fileSubmit = headHtml(false) + newHTML + footerHtml(false)
  110. this.form.fileContent = headHtml() + newHTML + footerHtml()
  111. },
  112. readFileInputEventAsArrayBuffer(file) {
  113. let reader = new FileReader();
  114. let that = this
  115. reader.onload = function(loadEvent) {
  116. let arrayBuffer = loadEvent.target.result; //arrayBuffer
  117. mammoth
  118. .convertToHtml({ arrayBuffer: arrayBuffer })
  119. .then(function(result) {
  120. console.log(result)
  121. that.displayResult(result)
  122. })
  123. .done();
  124. };
  125. reader.readAsArrayBuffer(file.raw);
  126. }
  127. }
  128. };
  129. </script>
  130. <style lang="less" scoped>
  131. .dialog-footer {
  132. display: block;
  133. text-align: right;
  134. }
  135. /deep/ .el-dialog__body {
  136. padding: 10px 10px 20px;
  137. }
  138. </style>