handleTask1.vue 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290
  1. <template>
  2. <!-- 处理挖掘任务1(项目审核任务弹窗) -->
  3. <div class="handleTask1">
  4. <el-dialog :title="title" :visible.sync="dialogVisible" width="800px" :before-close="handleClose"
  5. :close-on-click-modal="false">
  6. <el-form :model="form" status-icon :rules="rules" ref="form" label-width="120px" class="demo-ruleForm"
  7. :disabled="!form.isLook">
  8. <el-row>
  9. <el-col :span="12">
  10. <el-form-item label="项目名称:" prop="name">
  11. <el-input v-model="form.name" placeholder="请输入项目名称"></el-input>
  12. </el-form-item>
  13. </el-col>
  14. <el-col :span="12">
  15. <el-form-item label="技术方向:">
  16. <el-input v-model="form.technicalDirection" placeholder="请输入技术方向"></el-input>
  17. </el-form-item>
  18. </el-col>
  19. </el-row>
  20. <el-row>
  21. <el-col :span="12">
  22. <el-form-item label="产品阶段:">
  23. <el-input v-model="form.productPhase" placeholder="请输入产品阶段"></el-input>
  24. </el-form-item>
  25. </el-col>
  26. <el-col :span="12">
  27. <el-form-item label="产品产出:">
  28. <el-input v-model="form.output" placeholder="请输入产品产出"></el-input>
  29. </el-form-item>
  30. </el-col>
  31. </el-row>
  32. <el-row>
  33. <el-col :span="12">
  34. <el-form-item label="相关竞争对手:">
  35. <el-input v-model="form.relatedCompetitors" placeholder="请输入相关竞争对手"></el-input>
  36. </el-form-item>
  37. </el-col>
  38. <el-col :span="12">
  39. <el-form-item label="技术关键词:">
  40. <el-input v-model="form.technicalKeyword" placeholder="请输入技术关键词"></el-input>
  41. </el-form-item>
  42. </el-col>
  43. </el-row>
  44. <el-row>
  45. <el-col :span="24">
  46. <el-form-item label="参与人:">
  47. <div class="manage">
  48. <el-button size="small" @click="showDialog()">选择</el-button>
  49. <div v-html="getNames(form.involvedPersons)">
  50. </div>
  51. </div>
  52. <!-- <el-input v-model="form.involvedPersons" placeholder="请输入参与人"></el-input> -->
  53. </el-form-item>
  54. </el-col>
  55. </el-row>
  56. <el-row>
  57. <el-col :span="12">
  58. <el-form-item label="负责人:">
  59. <el-select v-model="form.headId" placeholder="请选择负责人" style="width: 100%;" filterable remote
  60. :remote-method="remoteMethodPerson" v-SelectLazyLoading="lazyLoadingPerson"
  61. :loading="personnelList.loading">
  62. <el-option v-for="item in personnelList.data" :key="item.id" :label="item.name" :value="item.id">
  63. </el-option>
  64. </el-select>
  65. <!-- <el-select v-model="form.value" placeholder="请选择负责人" style="width: 100%;">
  66. <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value">
  67. </el-option>
  68. </el-select> -->
  69. </el-form-item>
  70. </el-col>
  71. <el-col :span="12">
  72. <el-form-item label="是否检索:">
  73. <el-switch v-model="form.ifSearch" active-color="#13ce66" inactive-color="#ff4949">
  74. </el-switch>
  75. </el-form-item>
  76. </el-col>
  77. </el-row>
  78. <el-row>
  79. <el-col :span="24">
  80. <el-form-item label="附件:">
  81. <myUpload :file-list="form.systemFileList" @on-change="onchangeFile" @on-remove="onRemove"
  82. @on-preview="onPreview" style="height: 180px;" :autoUpload="true"></myUpload>
  83. </el-form-item>
  84. </el-col>
  85. </el-row>
  86. <el-row>
  87. <el-col :span="24">
  88. <el-form-item label="备注:">
  89. <el-input type="textarea" :rows="3" placeholder="请输入内容" v-model="form.description"></el-input>
  90. </el-form-item>
  91. </el-col>
  92. </el-row>
  93. </el-form>
  94. <span slot="footer" class="dialog-footer">
  95. <el-button @click="handleClose">取 消</el-button>
  96. <el-dropdown v-if="form.isLook" split-button type="primary" @click="submit">
  97. <span>{{ btn.label }}</span>
  98. <el-dropdown-menu slot="dropdown" class="text-align_center">
  99. <el-dropdown-item v-for="item in btnObj" :key="item.label" @click.native="onChangeFamily(item)">{{ item.label
  100. }}</el-dropdown-item>
  101. </el-dropdown-menu>
  102. </el-dropdown>
  103. </span>
  104. </el-dialog>
  105. <choosePerson ref="choosePerson" @getPersonIds="getPersonIds"></choosePerson>
  106. </div>
  107. </template>
  108. <script>
  109. import { personnelLoading } from '../mixins/index2'
  110. import choosePerson from '@/views/components/dialog/person.vue'
  111. export default {
  112. mixins: [personnelLoading],
  113. components: {
  114. choosePerson,
  115. },
  116. props: {},
  117. data() {
  118. return {
  119. dialogVisible: false,
  120. title: '',
  121. form: {
  122. systemFileList: [],
  123. },
  124. rules: {
  125. name: [{ required: true, message: '请输入项目名称', trigger: 'blur' },],
  126. },
  127. btnObj: [
  128. {
  129. label: '同意创建',
  130. value: 1
  131. },
  132. {
  133. label: '取消创建',
  134. value: 4
  135. },
  136. {
  137. label: '缺少材料',
  138. value: 5
  139. }
  140. ],
  141. btn: {
  142. label: '同意创建',
  143. value: 1
  144. },
  145. options: [],
  146. fileList: [],
  147. };
  148. },
  149. watch: {},
  150. computed: {},
  151. created() { },
  152. mounted() { },
  153. methods: {
  154. // 打开参与人 人员弹窗
  155. showDialog() {
  156. this.$refs.choosePerson.open(this.form.involvedPersonsIds, this.form.involvedPersons)
  157. },
  158. //获取参与人员信息
  159. getPersonIds({ personIds, persons }) {
  160. if (personIds.length > 0) {
  161. // adminPersons存储返回的人员id数组
  162. this.$set(this.form, 'involvedPersons', persons)
  163. this.$set(this.form, 'involvedPersonsIds', personIds)
  164. } else {
  165. this.$set(this.form, 'involvedPersons', [])
  166. this.$set(this.form, 'involvedPersonsIds', [])
  167. }
  168. },
  169. // 处理参与人数据
  170. getNames(row) {
  171. if (!row) {
  172. return ''
  173. }
  174. var arr = row.map(item => {
  175. return item.name
  176. })
  177. return arr.join('、')
  178. },
  179. // 上传的文件监听
  180. onchangeFile(file, fileList) {
  181. if (file.guid && this.form.systemFileList && this.form.systemFileList.length > 0) {
  182. let index = this.form.systemFileList.findIndex(item => {
  183. return item.uid == file.uid
  184. })
  185. if (index != -1) {
  186. this.form.systemFileList.splice(index, 1, file)
  187. } else {
  188. this.form.systemFileList.push(file.raw)
  189. }
  190. } else {
  191. this.form.systemFileList.push(file.raw)
  192. }
  193. },
  194. // 删除上传的文件
  195. onRemove(file, fileList) {
  196. let index = this.form.systemFileList.findIndex(item => {
  197. return item.uid == file.uid
  198. })
  199. if (index != -1) {
  200. this.form.systemFileList.splice(index, 1)
  201. }
  202. },
  203. // 点击文件
  204. onPreview(file) { },
  205. // 切换按钮
  206. onChangeFamily(val) {
  207. this.btn = val
  208. },
  209. //打开弹窗
  210. async open(form, val) {
  211. this.form = JSON.parse(JSON.stringify(form))
  212. // 是否可以处理任务
  213. this.form.isLook = val
  214. // 负责人
  215. if (this.form.headId) {
  216. this.personnelList.queryParams.id = this.form.headId
  217. await this.getPermissionPersonnel(1)
  218. this.personnelList.queryParams.id = null
  219. }
  220. // 文件
  221. if (!this.form.systemFileList) {
  222. this.$set(this.form, 'systemFileList', [])
  223. }
  224. // 参与人
  225. if (this.form.involvedPersons && this.form.involvedPersons.length > 0) {
  226. this.form.involvedPersonsIds = []
  227. this.form.involvedPersonsIds = this.form.involvedPersons.map(item => {
  228. item.name = item.personName
  229. return item.personId
  230. })
  231. }
  232. if (this.form.isLook) {
  233. this.title = '处理任务'
  234. } else {
  235. this.title = '查看任务'
  236. }
  237. this.getPermissionPersonnel()
  238. this.dialogVisible = true
  239. },
  240. //关闭弹窗
  241. handleClose() {
  242. this.form = {
  243. systemFileList: [],
  244. }
  245. this.clear()
  246. this.dialogVisible = false
  247. },
  248. // 清空负责人
  249. clear() {
  250. this.personnelList.queryParams.name = null
  251. this.personnelList.queryParams.current = 1
  252. this.personnelList.queryParams.data = []
  253. },
  254. //提交数据
  255. submit() {
  256. this.$refs.form.validate((valid) => {
  257. if (valid) {
  258. // 判断文件是否都上传完毕
  259. if (this.form.systemFileList && this.form.systemFileList.length > 0) {
  260. this.form.fileGuids = []
  261. for (let i = 0; i < this.form.systemFileList.length; i++) {
  262. if (this.form.systemFileList[i].guid) {
  263. this.form.fileGuids.push(this.form.systemFileList[i].guid)
  264. } else {
  265. this.$message.error('文件未全部上传,请耐心等待')
  266. return false
  267. }
  268. }
  269. }
  270. this.$api.submit(this.form).then(res => {
  271. if (res.code == 200) {
  272. this.$message.success('任务已处理')
  273. this.handleClose()
  274. }
  275. })
  276. }
  277. })
  278. }
  279. },
  280. };
  281. </script>
  282. <style lang="scss" scoped></style>