addAndEditReport1.vue 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329
  1. <template>
  2. <div>
  3. <el-dialog :title="title" :visible.sync="showDialog" width="600px" :close-on-click-modal="false" @close="handleClose(false)" >
  4. <el-form :model="form" :rules="rules" ref="reportForm" label-width="120px" v-loading="loading" :element-loading-text="load_text" element-loading-spinner="el-icon-loading"
  5. element-loading-background-color="rgba(0, 0, 0, 0.8)">
  6. <el-form-item :label="[3].includes(Number(form.type))?'标的产品':'标的专利'" prop="signPatentNo">
  7. <el-input v-model="form.signPatentNo" autocomplete="off" :placeholder="[3].includes(Number(form.type))?'请输入标的产品':'请输入标的专利'" @change="getPatentNo"></el-input>
  8. <!-- <p v-if="show==1" class="tips">查不到该专利请
  9. <span @click="importPatentNo()">导入</span>
  10. </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. <el-input v-model="form.name" autocomplete="off" placeholder="请输入报告名称"></el-input>
  15. </el-form-item>
  16. <el-form-item label="是否完成" v-if="!form.id">
  17. <el-switch
  18. v-model="form.status"
  19. active-color="#13ce66"
  20. inactive-color="#ff4949"
  21. @change="changeStatus"
  22. :active-value="3"
  23. :inactive-value="1">
  24. </el-switch>
  25. </el-form-item>
  26. <template v-if="!form.id && form.status == 3">
  27. <div>
  28. <el-form-item label="核心结论">
  29. <el-checkbox-group v-model="form.conclusionIds">
  30. <el-checkbox v-for="item in conclusion" :key="item.dictChildValue" :label="item.dictChildValue">{{ item.dictChildLabel }}</el-checkbox>
  31. </el-checkbox-group>
  32. </el-form-item>
  33. <el-form-item label="结论论述">
  34. <el-input v-model="form.cronConclusion" type="textarea" placeholder="请输入结论论述"></el-input>
  35. </el-form-item>
  36. <el-form-item label="后续跟进事项" v-if="$permission('/rms/matter')">
  37. <span v-if="form.followUps"><span v-for="item in form.followUps" :key="item.followUpName" style="margin-right:10px">{{ item.followUpName}}</span></span>
  38. <span>
  39. <el-popover
  40. ref="popover"
  41. placement="bottom"
  42. @hide="hidePopover"
  43. @show="showPopover"
  44. trigger="click">
  45. <div>
  46. <addMatter :type="matterType" :sign="matterSign" @value="getMatter"></addMatter>
  47. </div>
  48. <el-button slot="reference">添加后续事项</el-button>
  49. </el-popover>
  50. </span>
  51. </el-form-item>
  52. </div>
  53. </template>
  54. <el-form-item label="承担部门" prop="departmentId">
  55. <mySelectTree style="width:100%" v-model="form.departmentId" :options="departmentList"></mySelectTree>
  56. </el-form-item>
  57. <el-form-item label="负责人" prop="personId">
  58. <el-select style="width:100%" v-model="form.personId" placeholder="请选择负责人" filterable :popper-append-to-body="false">
  59. <el-option v-for="item in personnelList" :key="item.id" :label="item.personnelName" :value="item.id"></el-option>
  60. </el-select>
  61. </el-form-item>
  62. <template>
  63. <div>
  64. <el-form-item label="委托方" prop="clientId" v-if="userinfo.tenantType == 1">
  65. <el-select style="width:100%" v-model="form.clientId" placeholder="请选择委托方" filterable :popper-append-to-body="false">
  66. <el-option v-for="item in clientList" :key="item.id" :label="item.name" :value="item.id"></el-option>
  67. </el-select>
  68. </el-form-item>
  69. <el-form-item label="委托部门" prop="departmentId" v-else>
  70. <mySelectTree style="width:100%" v-model="form.departmentId" :options="departmentList"></mySelectTree>
  71. </el-form-item>
  72. </div>
  73. </template>
  74. <el-form-item label="产品/技术">
  75. <el-input v-model="form.proTec" autocomplete="off" placeholder="请输入产品/技术"></el-input>
  76. </el-form-item>
  77. <el-form-item label="应用场景">
  78. <el-checkbox-group v-model="form.scenarioList">
  79. <el-checkbox v-for="item in commonData.ENTERPRISE_APPLICATION_SCENARIO" :key="item.value" :label="parseInt(item.value)">{{ item.label }}</el-checkbox>
  80. </el-checkbox-group>
  81. </el-form-item>
  82. <el-form-item label="关联报告">
  83. <el-input v-model="form.associateReportName" autocomplete="off" placeholder="请输入关联报告"></el-input>
  84. </el-form-item>
  85. <el-form-item label="需要复制的选项" v-show="form.track">
  86. <el-select v-model="form.copyIds" multiple clearable placeholder="请选择需要复制的选项" :popper-append-to-body="false" @change="changeCopyIds">
  87. <el-option v-for="item in copyList" :key="item.dictChildValue" :label="item.dictChildLabel" :value="item.dictChildValue"></el-option>
  88. </el-select>
  89. </el-form-item>
  90. <template v-if="form.type==7">
  91. <div>
  92. <el-form-item label="案件编号">
  93. <el-input v-model="form.caseNumber" autocomplete="off" placeholder="请输入案件编号"></el-input>
  94. </el-form-item>
  95. <el-form-item label="发文序号">
  96. <el-input v-model="form.issueNumber" autocomplete="off" placeholder="请输入发文序号"></el-input>
  97. </el-form-item>
  98. <el-form-item label="发明创造名称">
  99. <el-input v-model="form.inventionName" autocomplete="off" placeholder="请输入发明创造名称"></el-input>
  100. </el-form-item>
  101. <el-form-item label="专利权人">
  102. <el-input v-model="form.currentApplication" autocomplete="off" placeholder="请输入专利权人"></el-input>
  103. </el-form-item>
  104. <el-form-item label="无效宣告请求人">
  105. <el-input v-model="form.invalidApplication" autocomplete="off" placeholder="请输入无效宣告请求人"></el-input>
  106. </el-form-item>
  107. </div>
  108. </template>
  109. <el-form-item label="卷号" prop="volumeNumber" >
  110. <el-input v-model="form.volumeNumber" autocomplete="off" placeholder="请输入卷号"></el-input>
  111. </el-form-item>
  112. <el-form-item :label="(!form.id &&form.status==3)?'上传报告文档':'上传附件'">
  113. <div v-if="form.reportFiles" class="upload-file">
  114. <div v-for="item in form.reportFiles" style="margin:0;display:flex;justify-content:space-around;">
  115. <p style="margin:0;width:calc(100% - 40px);overflow: hidden;white-space: nowrap;text-overflow:ellipsis;cursor: pointer">{{item.name?item.name+'.'+item.suffix:item.fileName}}</p>
  116. <Menu :data="item" @delFile="delFile"></Menu>
  117. </div>
  118. </div>
  119. <el-upload ref="upload" class="upload-file" drag action="#" :auto-upload="false" :show-file-list="true" :on-change="onChange" multiple :on-preview="handlePreview" :on-remove="handleRemove">
  120. <i :class="!file ? 'el-icon-upload' : 'el-icon-refresh'"></i>
  121. <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
  122. <div class="el-upload__tip" slot="tip"></div>
  123. </el-upload>
  124. </el-form-item>
  125. <el-form-item label="备注" prop="remark" >
  126. <el-input type='textarea' v-model="form.remark" autocomplete="off" placeholder="请输入备注"></el-input>
  127. </el-form-item>
  128. </el-form>
  129. <div slot="footer" class="dialog-footer" v-if="$reportPermission(form.id,[0,1])">
  130. <el-button @click="handleClose(false)">取 消</el-button>
  131. <el-button type="primary" @click="ifNext " v-if="form.type==7 && !form.id">下一步</el-button>
  132. <el-button type="primary" @click="submit " v-else>确 定</el-button>
  133. </div>
  134. </el-dialog>
  135. </div>
  136. </template>
  137. <script>
  138. import { mapGetters } from 'vuex'
  139. export default {
  140. components: {},
  141. props: {},
  142. data() {
  143. return {
  144. //弹窗标题
  145. title:'',
  146. //控制弹窗是否打开
  147. showDialog:false,
  148. //表单数据
  149. form:{},
  150. //表单规则
  151. rules:{},
  152. //加载
  153. loading:false,
  154. //加载时显示的文字
  155. load_text:'加载中',
  156. //应用场景
  157. commonData:{},
  158. //核心结论
  159. conclusion:[],
  160. //部门数据
  161. departmentList:[],
  162. //需要复制的选项集合
  163. copyList:[],
  164. //人员列表
  165. personnelList:[],
  166. //客户列表
  167. clientList:[],
  168. //上传文件列表
  169. file:[],
  170. //核心结论类型字典
  171. reportAsDicItem:{
  172. "0":"INVALID_ASSESS",
  173. "1":"THIRD_ASSESS",
  174. "2":"STABILITY_ASSESS",
  175. "3":"FTO_ASSESS",
  176. "4":"TORT_ASSESS",
  177. "5":"AVOID_ASSESS",
  178. "7":"REINVALID_ASSESS",
  179. },
  180. //需要复制的内容字典
  181. reportAsDicItemCopy:{
  182. "0":"INVALID_COPY",
  183. "1":"THIRD_COPY",
  184. "2":"STABILITY_COPY",
  185. "3":"FTO_COPY",
  186. "4":"TORT_COPY",
  187. "5":"AVOID_COPY",
  188. },
  189. };
  190. },
  191. watch: {},
  192. computed: {
  193. ...mapGetters(['webSocket','userinfo']),
  194. dictMessage() {
  195. return this.$store.state.dictMessage.dictMessage
  196. },
  197. },
  198. created() {},
  199. mounted() {
  200. //获取字典项(接口还是通过字典获取)
  201. this.$api.getCommonData({ keys: 'QUERY_GROUP,ENTERPRISE_APPLICATION_SCENARIO,INVESTIGATION_TYPE' }).then(response => {
  202. this.commonData = response.data
  203. })
  204. // console.log(1)
  205. //获取所有人员列表(修改不要一次性获取,可以使用懒加载加远程搜索 )
  206. this.getAllPersonnelList()
  207. //获取所有客户列表(修改不要一次性获取,可以使用懒加载加远程搜索 )
  208. this.getAllClientList()
  209. //获取所有部门列表
  210. this.getAllDepartmentList()
  211. },
  212. methods: {
  213. //打开弹窗
  214. open(form){
  215. this.form = JSON.parse(JSON.stringify(form))
  216. var a = ''
  217. if (this.form.id) {
  218. if (this.$reportPermission(this.form.id,[0,1])) {
  219. a = '编辑'
  220. } else {
  221. a = '查看'
  222. }
  223. } else {
  224. a = '创建'
  225. }
  226. var reportType = this.dictMessage.REPORT_TYPE.filter(item=>{return item.dictChildValue == this.form.type})[0].dictChildLabel
  227. this.title = a + reportType + '报告'
  228. this.showDialog = true
  229. },
  230. //获取所有人员列表(修改不要一次性获取,可以使用懒加载加远程搜索 )
  231. getAllPersonnelList(){},
  232. //获取所有客户列表(修改不要一次性获取,可以使用懒加载加远程搜索 )
  233. getAllClientList(){},
  234. //获取所有部门列表
  235. getAllDepartmentList(){},
  236. //关闭弹窗
  237. handleClose(){
  238. this.showDialog = false
  239. },
  240. //切换是否完成状态
  241. changeStatus(val){
  242. },
  243. //获取专利号且填入报告名称
  244. getPatentNo(){
  245. if(!this.form.name){
  246. var a = this.dictMessage.REPORT_TYPE.filter(item=>{return item.dictChildValue == this.form.type})[0].dictChildLabel
  247. this.$set(this.form,'name',this.form.signPatentNo + a)
  248. }
  249. },
  250. //修改需要复制的选项
  251. changeCopyIds(val){
  252. if(Object.keys(this.copyIndex).length>0){
  253. var index = this.copyList.findIndex(item=>{
  254. return item.dictChildLabel == '对比文件'
  255. })
  256. if(index!=-1){
  257. var id = this.copyList[index].dictChildValue
  258. var index2 = this.copyList.findIndex(item=>{
  259. return item.dictChildLabel == '标引信息'
  260. })
  261. if(val.indexOf(id)!=-1){
  262. if(index2==-1){
  263. this.copyList.splice(index+1,0,this.copyIndex)
  264. }
  265. }else{
  266. if(index2!=-1){
  267. this.copyList.splice(index2,1)
  268. this.form.copyIds.splice(this.form.copyIds.indexOf(this.copyIndex.dictChildValue),1)
  269. }
  270. }
  271. }else{
  272. }
  273. }
  274. },
  275. //切换上传的文件
  276. onChange(file, fileList){
  277. },
  278. //删除未提交的附件
  279. handleRemove(file, fileList) {
  280. var index = this.file.findIndex(item=>{
  281. return item.uid == file.raw.uid
  282. })
  283. if(index!=-1){
  284. this.file.splice(index,1)
  285. }
  286. },
  287. //上传附件时查看附件内容
  288. handlePreview(file) {
  289. var item={
  290. name:file.name,
  291. suffix:'',
  292. downLoad:true
  293. }
  294. var index = file.raw.type.lastIndexOf('/')
  295. var type = file.raw.type.substring(index+1,file.raw.type.length)
  296. var arr = ['png','jpeg','bmp','jpg']
  297. if(arr.includes(type)){
  298. var FileUrl = URL.createObjectURL(file.raw)
  299. var isPicture = 1
  300. }else if(type == 'pdf'){
  301. var FileUrl = URL.createObjectURL(file.raw)
  302. var isPicture = 0
  303. }else{
  304. return false
  305. }
  306. const router = this.$router.resolve({
  307. path: '/checkFile',
  308. query: {
  309. row: JSON.stringify(item),
  310. FileUrl: FileUrl,
  311. isPicture:isPicture
  312. }
  313. })
  314. window.open(router.href, '_blank');
  315. },
  316. //创建无效应对报告下一步
  317. ifNext(){},
  318. //提交填写的信息
  319. submit(){},
  320. },
  321. };
  322. </script>
  323. <style lang="scss" scoped>
  324. </style>