basicMessage.vue 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259
  1. <template>
  2. <div>
  3. <!-- <el-button type="primary" @click="submit" style="float:right" v-if="!noEdit1">提交</el-button> -->
  4. <div style="width:500px;margin:0 auto">
  5. <el-form :model="form" ref="reportForm" label-width="120px">
  6. <el-form-item :label="form.type==3?'标的产品:':'标的专利号:'" prop="signPatentNo">
  7. <el-link type="primary" v-if="form.type!=3" @click="toPatentDetails(form.signPatentNo)">{{form.signPatentNo}}</el-link>
  8. <span v-else>{{form.signPatentNo}}</span>
  9. <!-- <el-input v-model="form.signPatentNo" autocomplete="off" placeholder="请输入标的专利号" @change="getPatentNo"></el-input>
  10. <p v-if="show==1" class="tips">查不到该专利请<span @click="imports">导入</span></p>
  11. <p v-if="show==2" class="tips" style="color:black"><span @click="toPatentDetails(form.signPatentNo)">查看详情</span></p> -->
  12. </el-form-item>
  13. <el-form-item label="报告名称:" prop="name">
  14. <span>{{form.name}}</span>
  15. </el-form-item>
  16. <el-form-item label="承担部门:" prop="departmentId">
  17. <span>{{form.departmentName}}</span>
  18. </el-form-item>
  19. <el-form-item label="负责人:" prop="personId">
  20. <span>{{form.personName}}</span>
  21. </el-form-item>
  22. <el-form-item label="委托方:" prop="clientId" >
  23. <span>{{form.clientName}}</span>
  24. </el-form-item>
  25. <el-form-item label="产品/技术:" v-if="form.proTec">
  26. <span>{{form.proTec}}</span>
  27. </el-form-item>
  28. <el-form-item label="应用场景:" prop="easFlag" v-if="form.scenarioNames">
  29. <div style="word-wrap:keep-all;">
  30. <span v-for="item in form.scenarioNames">{{item }}&nbsp;&nbsp;&nbsp;</span>
  31. </div>
  32. </el-form-item>
  33. <el-form-item label="关联报告:" v-if="form.associateReportName">
  34. <span>{{form.associateReportName}}</span>
  35. </el-form-item>
  36. <el-form-item label="卷号:" prop="volumeNumber" v-if="form.volumeNumber">
  37. <span>{{form.volumeNumber}}</span>
  38. </el-form-item>
  39. <el-form-item :label="noEdit1?'附件':'上传附件:'">
  40. <div v-if="form.reportFiles" class="upload-file">
  41. <div v-for="item in form.reportFiles" style="margin:0;display:flex;justify-content:space-around;align-items:center;">
  42. <p style="margin:0;width:calc(100% - 40px);overflow: hidden;white-space: nowrap;text-overflow:ellipsis;cursor: pointer" @click="checkFile(item)">{{item.name?item.name+'.'+item.suffix:item.fileName}}</p>
  43. <Menu :data="item" @delFile="delFile"></Menu>
  44. </div>
  45. </div>
  46. <el-upload v-if="!noEdit1 && Object.keys(form).length>1 && $reportPermission(reportId,[0,1])" ref="upload" class="upload-file" drag action="#" :auto-upload="false" :show-file-list="true" :on-change="onChange" multiple :on-preview="handlePreview" :on-remove="handleRemove">
  47. <i :class="!file ? 'el-icon-upload' : 'el-icon-refresh'"></i>
  48. <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
  49. <div class="el-upload__tip" slot="tip"></div>
  50. </el-upload>
  51. </el-form-item>
  52. <el-form-item label="核心结论:" prop="conclusions" v-if="form.status==3 && form.conclusions && form.conclusions.length>0">
  53. <span v-for="(item,index) in form.conclusions" :key="index" style="margin:0">{{ item }} <span v-if="index<form.conclusions.length-1">| </span></span>
  54. </el-form-item>
  55. <el-form-item label="核心结论论述:" prop="cronConclusion" v-if="form.status==3 && form.cronConclusion">
  56. <span >{{ form.cronConclusion }} </span>
  57. </el-form-item>
  58. <el-form-item label="备注:" prop="remark" v-if="form.remark">
  59. <span>{{form.remark}}</span>
  60. </el-form-item>
  61. </el-form>
  62. </div>
  63. <el-dialog title="查看文件" :visible.sync="FileVisible" width="1200px">
  64. <el-image v-if="srcList.length>0" :src="FileUrl" ref="image" :preview-src-list="srcList"></el-image>
  65. <iframe v-else :src="FileUrl" frameborder="0" width="1150px" :height="height"></iframe>
  66. </el-dialog>
  67. </div>
  68. </template>
  69. <script>
  70. import { PatentDetails } from "@/views/components/common/mixins";
  71. import Menu from '@/views/components/common/menu/index.vue'
  72. import { downLoad2 } from "@/utils";
  73. export default {
  74. mixins:[PatentDetails],
  75. components:{
  76. Menu
  77. },
  78. props:['reportId','noEdit'],
  79. data() {
  80. return {
  81. FileVisible:false,
  82. height:document.documentElement.clientHeight - 120,
  83. FileUrl:'',
  84. srcList:[],
  85. noEdit1:this.noEdit,
  86. file:[],
  87. form:{
  88. id:this.reportId
  89. },
  90. dictMessage:{},
  91. Already:[]
  92. }
  93. },
  94. watch:{
  95. reportId(val){
  96. this.form = {
  97. id:val
  98. }
  99. this.getList()
  100. }
  101. },
  102. mounted() {
  103. this.getList()
  104. },
  105. methods: {
  106. checkFile(item){
  107. return false;
  108. var arr = ['png','jpeg','bmp','jpg']
  109. if(arr.includes(item.suffix)){
  110. this.FileVisible = true
  111. this.FileUrl = this.$p + item.url
  112. this.srcList = [this.$p + item.url]
  113. }else if(item.suffix == 'pdf'){
  114. this.FileVisible = true
  115. this.FileUrl = this.$p + item.url
  116. this.srcList = []
  117. }else{
  118. this.FileUrl = 'http://192.168.1.24:8012/onlinePreview?url='+ btoa(encodeURIComponent(this.$p + item.url))
  119. console.log(this.FileUrl,this.$p + item.url)
  120. this.srcList = []
  121. this.FileVisible = true
  122. // downLoad2(item.url)
  123. }
  124. },
  125. delFile(id){
  126. var index = this.form.reportFiles.findIndex(item=>{
  127. return item.id == id
  128. })
  129. if(index!=-1){
  130. this.form.reportFiles.splice(index,1)
  131. this.submit()
  132. }
  133. },
  134. onChange(file, fileList) {
  135. if(this.form.reportFiles){
  136. var index3 = this.form.reportFiles.findIndex(item=>{
  137. return item.name+'.'+item.suffix == file.raw.name
  138. })
  139. if(index3!=-1){
  140. this.Already.push(this.form.reportFiles[index3].name)
  141. var index2 = fileList.reverse().findIndex(item=>{
  142. return item.raw.name == file.raw.name
  143. })
  144. fileList.splice(index2,1).reverse()
  145. }else{
  146. this.inFile(file, fileList)
  147. }
  148. }else{
  149. this.inFile(file, fileList)
  150. }
  151. this.$nextTick(()=>{
  152. var b = ''
  153. if(this.Already.length>0){
  154. this.Already.forEach(item=>{
  155. b = b+item+','
  156. })
  157. this.$alert('文件'+b+'已存在', '提示', {
  158. confirmButtonText: '确定',
  159. type:'warning',
  160. callback: action => {
  161. this.Already = []
  162. }
  163. });
  164. }
  165. this.submit()
  166. })
  167. },
  168. inFile(file, fileList){
  169. var index = this.file.findIndex(item=>{
  170. return item.name == file.raw.name
  171. })
  172. if(index!=-1){
  173. this.Already.push(this.file[index].name)
  174. var index2 = fileList.reverse().findIndex(item=>{
  175. return item.raw.name == file.raw.name
  176. })
  177. fileList.splice(index2,1).reverse()
  178. }else{
  179. this.file.push(file.raw)
  180. }
  181. },
  182. handleRemove(file, fileList) {
  183. var index = this.file.findIndex(item=>{
  184. return item.uid == file.raw.uid
  185. })
  186. if(index!=-1){
  187. this.file.splice(index,1)
  188. }
  189. },
  190. handlePreview(file) {
  191. // console.log(file);
  192. // return false
  193. var item={
  194. name:file.name,
  195. suffix:'',
  196. downLoad:true
  197. }
  198. var index = file.raw.type.lastIndexOf('/')
  199. var type = file.raw.type.substring(index+1,file.raw.type.length)
  200. var arr = ['png','jpeg','bmp','jpg']
  201. if(arr.includes(type)){
  202. // this.FileVisible = true
  203. this.FileUrl = URL.createObjectURL(file.raw)
  204. var isPicture = 1
  205. // this.srcList = [URL.createObjectURL(file.raw)]
  206. }else if(type == 'pdf'){
  207. // this.FileVisible = true
  208. this.FileUrl = URL.createObjectURL(file.raw)
  209. var isPicture = 0
  210. // this.srcList = []
  211. }else{
  212. return false
  213. }
  214. const router = this.$router.resolve({
  215. path: '/checkFile',
  216. query: {
  217. row: JSON.stringify(item),
  218. FileUrl: this.FileUrl,
  219. isPicture:isPicture
  220. }
  221. })
  222. window.open(router.href, '_blank');
  223. },
  224. submit(){
  225. let formData = new FormData()
  226. if(this.file){
  227. for (var i = 0; i < this.file.length; i++) {
  228. formData.append("files", this.file[i]);
  229. }
  230. }
  231. formData.append('report',JSON.stringify(this.form))
  232. this.$api.UpdateReport(formData).then(response=>{
  233. if(response.code == 200){
  234. this.file = []
  235. this.$message.success('附件修改成功')
  236. this.$refs.upload.clearFiles()
  237. this.getList()
  238. }
  239. })
  240. },
  241. getList() {
  242. this.loading = true
  243. let a = {
  244. reportId:this.form.id
  245. }
  246. this.$api.QueryReport(a).then(response=>{
  247. if(response.code == 200){
  248. this.$set(this,'form',response.data[0])
  249. // this.form = response.data[0]
  250. }
  251. })
  252. },
  253. },
  254. }
  255. </script>