瀏覽代碼

技术交底、人员部门更新、领导分管

lamphua 11 月之前
父節點
當前提交
2d7185b986
共有 40 個檔案被更改,包括 8173 行新增9179 行删除
  1. 97
    0
      oa-back/ruoyi-admin/src/main/java/com/ruoyi/web/controller/oa/CmcManageDeptController.java
  2. 97
    0
      oa-back/ruoyi-admin/src/main/java/com/ruoyi/web/controller/oa/CmcTechnicalController.java
  3. 18
    0
      oa-back/ruoyi-flowable/src/main/java/com/ruoyi/flowable/oa/CallPlanActivityExecutionListener.java
  4. 5
    3
      oa-back/ruoyi-flowable/src/main/java/com/ruoyi/flowable/oa/CallTechActivityExecutionListener.java
  5. 63
    0
      oa-back/ruoyi-system/src/main/java/com/ruoyi/oa/domain/CmcManageDept.java
  6. 1
    1
      oa-back/ruoyi-system/src/main/java/com/ruoyi/oa/domain/CmcSafe.java
  7. 210
    0
      oa-back/ruoyi-system/src/main/java/com/ruoyi/oa/domain/CmcTechnical.java
  8. 61
    0
      oa-back/ruoyi-system/src/main/java/com/ruoyi/oa/mapper/CmcManageDeptMapper.java
  9. 61
    0
      oa-back/ruoyi-system/src/main/java/com/ruoyi/oa/mapper/CmcTechnicalMapper.java
  10. 61
    0
      oa-back/ruoyi-system/src/main/java/com/ruoyi/oa/service/ICmcManageDeptService.java
  11. 61
    0
      oa-back/ruoyi-system/src/main/java/com/ruoyi/oa/service/ICmcTechnicalService.java
  12. 93
    0
      oa-back/ruoyi-system/src/main/java/com/ruoyi/oa/service/impl/CmcManageDeptServiceImpl.java
  13. 93
    0
      oa-back/ruoyi-system/src/main/java/com/ruoyi/oa/service/impl/CmcTechnicalServiceImpl.java
  14. 1
    1
      oa-back/ruoyi-system/src/main/resources/mapper/oa/CmcContractMapper.xml
  15. 61
    0
      oa-back/ruoyi-system/src/main/resources/mapper/oa/CmcManageDeptMapper.xml
  16. 121
    0
      oa-back/ruoyi-system/src/main/resources/mapper/oa/CmcTechnicalMapper.xml
  17. 5841
    9098
      oa-back/sql/sql.sql
  18. 44
    0
      oa-ui/src/api/oa/manage/manageDept.js
  19. 44
    0
      oa-ui/src/api/oa/technical/technical.js
  20. 2
    2
      oa-ui/src/views/flowable/form/business/contractForm.vue
  21. 50
    12
      oa-ui/src/views/flowable/form/business/subContract.vue
  22. 6
    3
      oa-ui/src/views/flowable/form/components/conditionDisplay.vue
  23. 4
    0
      oa-ui/src/views/flowable/form/components/detailDisplay.vue
  24. 2
    2
      oa-ui/src/views/flowable/form/inProgress/achiData.vue
  25. 3
    3
      oa-ui/src/views/flowable/form/projectProcess/arrangeProject.vue
  26. 7
    3
      oa-ui/src/views/flowable/form/projectProcess/index.vue
  27. 2
    2
      oa-ui/src/views/flowable/form/projectProcess/planTab.vue
  28. 146
    0
      oa-ui/src/views/flowable/form/projectProcess/technicalTab.vue
  29. 349
    0
      oa-ui/src/views/flowable/form/technicalForm.vue
  30. 2
    2
      oa-ui/src/views/flowable/form/technicalPlan.vue
  31. 3
    3
      oa-ui/src/views/flowable/task/myProcess/index.vue
  32. 3
    3
      oa-ui/src/views/flowable/task/myProcess/progressTree.vue
  33. 5
    5
      oa-ui/src/views/flowable/task/todo/detail/index.vue
  34. 9
    9
      oa-ui/src/views/oa/archive/index.vue
  35. 11
    9
      oa-ui/src/views/oa/contract/index.vue
  36. 13
    6
      oa-ui/src/views/oa/contract/subContract.vue
  37. 235
    0
      oa-ui/src/views/oa/manage/index.vue
  38. 4
    3
      oa-ui/src/views/oa/project/info.vue
  39. 275
    0
      oa-ui/src/views/oa/technical/index.vue
  40. 9
    9
      oa-ui/src/views/oa/technical/plan.vue

+ 97
- 0
oa-back/ruoyi-admin/src/main/java/com/ruoyi/web/controller/oa/CmcManageDeptController.java 查看文件

1
+package com.ruoyi.web.controller.oa;
2
+
3
+import java.util.List;
4
+import javax.servlet.http.HttpServletResponse;
5
+import org.springframework.beans.factory.annotation.Autowired;
6
+import org.springframework.web.bind.annotation.GetMapping;
7
+import org.springframework.web.bind.annotation.PostMapping;
8
+import org.springframework.web.bind.annotation.PutMapping;
9
+import org.springframework.web.bind.annotation.DeleteMapping;
10
+import org.springframework.web.bind.annotation.PathVariable;
11
+import org.springframework.web.bind.annotation.RequestBody;
12
+import org.springframework.web.bind.annotation.RequestMapping;
13
+import org.springframework.web.bind.annotation.RestController;
14
+import com.ruoyi.common.annotation.Log;
15
+import com.ruoyi.common.core.controller.BaseController;
16
+import com.ruoyi.common.core.domain.AjaxResult;
17
+import com.ruoyi.common.enums.BusinessType;
18
+import com.ruoyi.oa.domain.CmcManageDept;
19
+import com.ruoyi.oa.service.ICmcManageDeptService;
20
+import com.ruoyi.common.utils.poi.ExcelUtil;
21
+import com.ruoyi.common.core.page.TableDataInfo;
22
+
23
+/**
24
+ * cmc领导分管Controller
25
+ * 
26
+ * @author cmc
27
+ * @date 2024-07-04
28
+ */
29
+@RestController
30
+@RequestMapping("/oa/manageDept")
31
+public class CmcManageDeptController extends BaseController
32
+{
33
+    @Autowired
34
+    private ICmcManageDeptService cmcManageDeptService;
35
+
36
+    /**
37
+     * 查询cmc领导分管列表
38
+     */
39
+    @GetMapping("/list")
40
+    public TableDataInfo list(CmcManageDept cmcManageDept)
41
+    {
42
+        startPage();
43
+        List<CmcManageDept> list = cmcManageDeptService.selectCmcManageDeptList(cmcManageDept);
44
+        return getDataTable(list);
45
+    }
46
+
47
+    /**
48
+     * 导出cmc领导分管列表
49
+     */
50
+    @Log(title = "cmc领导分管", businessType = BusinessType.EXPORT)
51
+    @PostMapping("/export")
52
+    public void export(HttpServletResponse response, CmcManageDept cmcManageDept)
53
+    {
54
+        List<CmcManageDept> list = cmcManageDeptService.selectCmcManageDeptList(cmcManageDept);
55
+        ExcelUtil<CmcManageDept> util = new ExcelUtil<CmcManageDept>(CmcManageDept.class);
56
+        util.exportExcel(response, list, "cmc领导分管数据");
57
+    }
58
+
59
+    /**
60
+     * 获取cmc领导分管详细信息
61
+     */
62
+    @GetMapping(value = "/{userId}")
63
+    public AjaxResult getInfo(@PathVariable("userId") Long userId)
64
+    {
65
+        return success(cmcManageDeptService.selectCmcManageDeptByUserId(userId));
66
+    }
67
+
68
+    /**
69
+     * 新增cmc领导分管
70
+     */
71
+    @Log(title = "cmc领导分管", businessType = BusinessType.INSERT)
72
+    @PostMapping
73
+    public AjaxResult add(@RequestBody CmcManageDept cmcManageDept)
74
+    {
75
+        return toAjax(cmcManageDeptService.insertCmcManageDept(cmcManageDept));
76
+    }
77
+
78
+    /**
79
+     * 修改cmc领导分管
80
+     */
81
+    @Log(title = "cmc领导分管", businessType = BusinessType.UPDATE)
82
+    @PutMapping
83
+    public AjaxResult edit(@RequestBody CmcManageDept cmcManageDept)
84
+    {
85
+        return toAjax(cmcManageDeptService.updateCmcManageDept(cmcManageDept));
86
+    }
87
+
88
+    /**
89
+     * 删除cmc领导分管
90
+     */
91
+    @Log(title = "cmc领导分管", businessType = BusinessType.DELETE)
92
+	@DeleteMapping("/{userIds}")
93
+    public AjaxResult remove(@PathVariable Long[] userIds)
94
+    {
95
+        return toAjax(cmcManageDeptService.deleteCmcManageDeptByUserIds(userIds));
96
+    }
97
+}

+ 97
- 0
oa-back/ruoyi-admin/src/main/java/com/ruoyi/web/controller/oa/CmcTechnicalController.java 查看文件

1
+package com.ruoyi.web.controller.oa;
2
+
3
+import java.util.List;
4
+import javax.servlet.http.HttpServletResponse;
5
+import org.springframework.beans.factory.annotation.Autowired;
6
+import org.springframework.web.bind.annotation.GetMapping;
7
+import org.springframework.web.bind.annotation.PostMapping;
8
+import org.springframework.web.bind.annotation.PutMapping;
9
+import org.springframework.web.bind.annotation.DeleteMapping;
10
+import org.springframework.web.bind.annotation.PathVariable;
11
+import org.springframework.web.bind.annotation.RequestBody;
12
+import org.springframework.web.bind.annotation.RequestMapping;
13
+import org.springframework.web.bind.annotation.RestController;
14
+import com.ruoyi.common.annotation.Log;
15
+import com.ruoyi.common.core.controller.BaseController;
16
+import com.ruoyi.common.core.domain.AjaxResult;
17
+import com.ruoyi.common.enums.BusinessType;
18
+import com.ruoyi.oa.domain.CmcTechnical;
19
+import com.ruoyi.oa.service.ICmcTechnicalService;
20
+import com.ruoyi.common.utils.poi.ExcelUtil;
21
+import com.ruoyi.common.core.page.TableDataInfo;
22
+
23
+/**
24
+ * cmc技术交底Controller
25
+ * 
26
+ * @author cmc
27
+ * @date 2024-07-04
28
+ */
29
+@RestController
30
+@RequestMapping("/oa/technical")
31
+public class CmcTechnicalController extends BaseController
32
+{
33
+    @Autowired
34
+    private ICmcTechnicalService cmcTechnicalService;
35
+
36
+    /**
37
+     * 查询cmc技术交底列表
38
+     */
39
+    @GetMapping("/list")
40
+    public TableDataInfo list(CmcTechnical cmcTechnical)
41
+    {
42
+        startPage();
43
+        List<CmcTechnical> list = cmcTechnicalService.selectCmcTechnicalList(cmcTechnical);
44
+        return getDataTable(list);
45
+    }
46
+
47
+    /**
48
+     * 导出cmc技术交底列表
49
+     */
50
+    @Log(title = "cmc技术交底", businessType = BusinessType.EXPORT)
51
+    @PostMapping("/export")
52
+    public void export(HttpServletResponse response, CmcTechnical cmcTechnical)
53
+    {
54
+        List<CmcTechnical> list = cmcTechnicalService.selectCmcTechnicalList(cmcTechnical);
55
+        ExcelUtil<CmcTechnical> util = new ExcelUtil<CmcTechnical>(CmcTechnical.class);
56
+        util.exportExcel(response, list, "cmc技术交底数据");
57
+    }
58
+
59
+    /**
60
+     * 获取cmc技术交底详细信息
61
+     */
62
+    @GetMapping(value = "/{technicalId}")
63
+    public AjaxResult getInfo(@PathVariable("technicalId") String technicalId)
64
+    {
65
+        return success(cmcTechnicalService.selectCmcTechnicalByTechnicalId(technicalId));
66
+    }
67
+
68
+    /**
69
+     * 新增cmc技术交底
70
+     */
71
+    @Log(title = "cmc技术交底", businessType = BusinessType.INSERT)
72
+    @PostMapping
73
+    public AjaxResult add(@RequestBody CmcTechnical cmcTechnical)
74
+    {
75
+        return toAjax(cmcTechnicalService.insertCmcTechnical(cmcTechnical));
76
+    }
77
+
78
+    /**
79
+     * 修改cmc技术交底
80
+     */
81
+    @Log(title = "cmc技术交底", businessType = BusinessType.UPDATE)
82
+    @PutMapping
83
+    public AjaxResult edit(@RequestBody CmcTechnical cmcTechnical)
84
+    {
85
+        return toAjax(cmcTechnicalService.updateCmcTechnical(cmcTechnical));
86
+    }
87
+
88
+    /**
89
+     * 删除cmc技术交底
90
+     */
91
+    @Log(title = "cmc技术交底", businessType = BusinessType.DELETE)
92
+	@DeleteMapping("/{technicalIds}")
93
+    public AjaxResult remove(@PathVariable String[] technicalIds)
94
+    {
95
+        return toAjax(cmcTechnicalService.deleteCmcTechnicalByTechnicalIds(technicalIds));
96
+    }
97
+}

+ 18
- 0
oa-back/ruoyi-flowable/src/main/java/com/ruoyi/flowable/oa/CallPlanActivityExecutionListener.java 查看文件

1
+package com.ruoyi.flowable.oa;
2
+
3
+import com.ruoyi.common.utils.spring.SpringUtils;
4
+import com.ruoyi.system.mapper.SysUserPostMapper;
5
+import org.flowable.common.engine.impl.identity.Authentication;
6
+import org.flowable.engine.delegate.DelegateExecution;
7
+import org.flowable.engine.delegate.ExecutionListener;
8
+import org.springframework.stereotype.Component;
9
+
10
+@Component("CallPlanActivityExecutionListener")
11
+public class CallPlanActivityExecutionListener implements ExecutionListener {
12
+    @Override
13
+    public void notify(DelegateExecution delegateExecution) {
14
+        SysUserPostMapper userPostMapper = SpringUtils.getBean(SysUserPostMapper.class);
15
+        Authentication.setAuthenticatedUserId(userPostMapper.selectDeptLeaderByDeptId("110").getUserId().toString());
16
+        delegateExecution.setVariable("approval", userPostMapper.selectDeptLeaderByDeptId("110").getUserId().toString());
17
+    }
18
+}

+ 5
- 3
oa-back/ruoyi-flowable/src/main/java/com/ruoyi/flowable/oa/CallTechActivityExecutionListener.java 查看文件

7
 import org.flowable.engine.delegate.ExecutionListener;
7
 import org.flowable.engine.delegate.ExecutionListener;
8
 import org.springframework.stereotype.Component;
8
 import org.springframework.stereotype.Component;
9
 
9
 
10
+import java.util.Map;
11
+
10
 @Component("CallTechActivityExecutionListener")
12
 @Component("CallTechActivityExecutionListener")
11
 public class CallTechActivityExecutionListener implements ExecutionListener {
13
 public class CallTechActivityExecutionListener implements ExecutionListener {
12
     @Override
14
     @Override
13
     public void notify(DelegateExecution delegateExecution) {
15
     public void notify(DelegateExecution delegateExecution) {
14
-        SysUserPostMapper userPostMapper = SpringUtils.getBean(SysUserPostMapper.class);
15
-        Authentication.setAuthenticatedUserId(userPostMapper.selectDeptLeaderByDeptId("110").getUserId().toString());
16
-        delegateExecution.setVariable("approval", userPostMapper.selectDeptLeaderByDeptId("110").getUserId().toString());
16
+        Map<String, Object> variables = delegateExecution.getVariables();
17
+        Authentication.setAuthenticatedUserId(variables.get("techInitiator").toString());
18
+        delegateExecution.setVariable("approval", variables.get("techInitiator").toString());
17
     }
19
     }
18
 }
20
 }

+ 63
- 0
oa-back/ruoyi-system/src/main/java/com/ruoyi/oa/domain/CmcManageDept.java 查看文件

1
+package com.ruoyi.oa.domain;
2
+
3
+import org.apache.commons.lang3.builder.ToStringBuilder;
4
+import org.apache.commons.lang3.builder.ToStringStyle;
5
+import com.ruoyi.common.annotation.Excel;
6
+import com.ruoyi.common.core.domain.BaseEntity;
7
+
8
+/**
9
+ * cmc领导分管对象 cmc_manage_dept
10
+ * 
11
+ * @author cmc
12
+ * @date 2024-07-04
13
+ */
14
+public class CmcManageDept extends BaseEntity
15
+{
16
+    private static final long serialVersionUID = 1L;
17
+
18
+    /** 分管领导id */
19
+    private Long userId;
20
+
21
+    /** 分管部门id */
22
+    private Long deptId;
23
+
24
+    /** 院内对接单位 */
25
+    private String partyAId;
26
+
27
+    public void setUserId(Long userId) 
28
+    {
29
+        this.userId = userId;
30
+    }
31
+
32
+    public Long getUserId() 
33
+    {
34
+        return userId;
35
+    }
36
+    public void setDeptId(Long deptId) 
37
+    {
38
+        this.deptId = deptId;
39
+    }
40
+
41
+    public Long getDeptId() 
42
+    {
43
+        return deptId;
44
+    }
45
+    public void setPartyAId(String partyAId) 
46
+    {
47
+        this.partyAId = partyAId;
48
+    }
49
+
50
+    public String getPartyAId() 
51
+    {
52
+        return partyAId;
53
+    }
54
+
55
+    @Override
56
+    public String toString() {
57
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
58
+            .append("userId", getUserId())
59
+            .append("deptId", getDeptId())
60
+            .append("partyAId", getPartyAId())
61
+            .toString();
62
+    }
63
+}

+ 1
- 1
oa-back/ruoyi-system/src/main/java/com/ruoyi/oa/domain/CmcSafe.java 查看文件

18
 {
18
 {
19
     private static final long serialVersionUID = 1L;
19
     private static final long serialVersionUID = 1L;
20
 
20
 
21
-    /** 项目id */
21
+    /** 安全交底id */
22
     private String safeId;
22
     private String safeId;
23
 
23
 
24
     /** 项目id */
24
     /** 项目id */

+ 210
- 0
oa-back/ruoyi-system/src/main/java/com/ruoyi/oa/domain/CmcTechnical.java 查看文件

1
+package com.ruoyi.oa.domain;
2
+
3
+import java.util.Date;
4
+import com.fasterxml.jackson.annotation.JsonFormat;
5
+import com.ruoyi.common.core.domain.entity.SysUser;
6
+import org.apache.commons.lang3.builder.ToStringBuilder;
7
+import org.apache.commons.lang3.builder.ToStringStyle;
8
+import com.ruoyi.common.annotation.Excel;
9
+import com.ruoyi.common.core.domain.BaseEntity;
10
+
11
+/**
12
+ * cmc技术交底对象 cmc_technical
13
+ * 
14
+ * @author cmc
15
+ * @date 2024-07-04
16
+ */
17
+public class CmcTechnical extends BaseEntity
18
+{
19
+    private static final long serialVersionUID = 1L;
20
+
21
+    /** 技术交底id */
22
+    private String technicalId;
23
+
24
+    /** 项目id */
25
+    private String projectId;
26
+    @Excel(name = "项目编号")
27
+    private String projectNumber;
28
+    @Excel(name = "项目名称")
29
+    private String projectName;
30
+    private CmcProject project;
31
+
32
+    /** 接受交底人 */
33
+    private Long disclosureAccepter;
34
+    @Excel(name = "接受交底人")
35
+    private String acceptUserName;
36
+
37
+    private SysUser accepterUser;
38
+
39
+    /** 安全交底人 */
40
+    private Long disclosurer;
41
+    @Excel(name = "安全交底人")
42
+    private String disclosurerUserName;
43
+
44
+    private SysUser disclosurerUser;
45
+
46
+    /** 技术交底内容 */
47
+    @Excel(name = "技术交底内容")
48
+    private String content;
49
+
50
+    /** 附件 */
51
+    @Excel(name = "附件")
52
+    private String document;
53
+
54
+    /** 技术交底意见 */
55
+    @Excel(name = "技术交底意见")
56
+    private String disclosureComment;
57
+
58
+    /** 接受交底意见 */
59
+    @Excel(name = "接受交底意见")
60
+    private String acceptComment;
61
+
62
+    /** 技术交底时间 */
63
+    @JsonFormat(pattern = "yyyy-MM-dd")
64
+    @Excel(name = "技术交底时间", width = 30, dateFormat = "yyyy-MM-dd")
65
+    private Date disclosureTime;
66
+
67
+    /** 接受交底时间 */
68
+    @JsonFormat(pattern = "yyyy-MM-dd")
69
+    @Excel(name = "接受交底时间", width = 30, dateFormat = "yyyy-MM-dd")
70
+    private Date acceptTime;
71
+
72
+    public void setTechnicalId(String technicalId) 
73
+    {
74
+        this.technicalId = technicalId;
75
+    }
76
+
77
+    public String getTechnicalId() 
78
+    {
79
+        return technicalId;
80
+    }
81
+    public void setProjectId(String projectId) 
82
+    {
83
+        this.projectId = projectId;
84
+    }
85
+
86
+    public String getProjectId() 
87
+    {
88
+        return projectId;
89
+    }
90
+    public void setProject(CmcProject project)
91
+    {
92
+        this.project = project;
93
+        this.projectNumber = project == null ? "" : project.getProjectNumber();
94
+        this.projectName = project == null ? "" : project.getProjectName();
95
+    }
96
+
97
+    public CmcProject getProject()
98
+    {
99
+        return project;
100
+    }
101
+    public void setDisclosureAccepter(Long disclosureAccepter) 
102
+    {
103
+        this.disclosureAccepter = disclosureAccepter;
104
+    }
105
+
106
+    public Long getDisclosureAccepter() 
107
+    {
108
+        return disclosureAccepter;
109
+    }
110
+    public void setAccepterUser(SysUser accepterUser)
111
+    {
112
+        this.accepterUser = accepterUser;
113
+        this.acceptUserName = accepterUser == null ? "" : accepterUser.getNickName();
114
+    }
115
+
116
+    public SysUser getAccepterUser()
117
+    {
118
+        return accepterUser;
119
+    }
120
+    public void setDisclosurer(Long disclosurer)
121
+    {
122
+        this.disclosurer = disclosurer;
123
+    }
124
+
125
+    public Long getDisclosurer()
126
+    {
127
+        return disclosurer;
128
+    }
129
+
130
+    public void setDisclosurerUser(SysUser disclosurerUser)
131
+    {
132
+        this.disclosurerUser = disclosurerUser;
133
+        this.disclosurerUserName = disclosurerUser == null ? "" : disclosurerUser.getNickName();
134
+    }
135
+
136
+    public SysUser getDisclosurerUser()
137
+    {
138
+        return disclosurerUser;
139
+    }
140
+    public void setContent(String content) 
141
+    {
142
+        this.content = content;
143
+    }
144
+
145
+    public String getContent() 
146
+    {
147
+        return content;
148
+    }
149
+    public void setDocument(String document) 
150
+    {
151
+        this.document = document;
152
+    }
153
+
154
+    public String getDocument() 
155
+    {
156
+        return document;
157
+    }
158
+    public void setDisclosureComment(String disclosureComment) 
159
+    {
160
+        this.disclosureComment = disclosureComment;
161
+    }
162
+
163
+    public String getDisclosureComment() 
164
+    {
165
+        return disclosureComment;
166
+    }
167
+    public void setAcceptComment(String acceptComment) 
168
+    {
169
+        this.acceptComment = acceptComment;
170
+    }
171
+
172
+    public String getAcceptComment() 
173
+    {
174
+        return acceptComment;
175
+    }
176
+    public void setDisclosureTime(Date disclosureTime) 
177
+    {
178
+        this.disclosureTime = disclosureTime;
179
+    }
180
+
181
+    public Date getDisclosureTime() 
182
+    {
183
+        return disclosureTime;
184
+    }
185
+    public void setAcceptTime(Date acceptTime) 
186
+    {
187
+        this.acceptTime = acceptTime;
188
+    }
189
+
190
+    public Date getAcceptTime() 
191
+    {
192
+        return acceptTime;
193
+    }
194
+
195
+    @Override
196
+    public String toString() {
197
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
198
+            .append("technicalId", getTechnicalId())
199
+            .append("projectId", getProjectId())
200
+            .append("disclosureAccepter", getDisclosureAccepter())
201
+            .append("disclosurer", getDisclosurer())
202
+            .append("content", getContent())
203
+            .append("document", getDocument())
204
+            .append("disclosureComment", getDisclosureComment())
205
+            .append("acceptComment", getAcceptComment())
206
+            .append("disclosureTime", getDisclosureTime())
207
+            .append("acceptTime", getAcceptTime())
208
+            .toString();
209
+    }
210
+}

+ 61
- 0
oa-back/ruoyi-system/src/main/java/com/ruoyi/oa/mapper/CmcManageDeptMapper.java 查看文件

1
+package com.ruoyi.oa.mapper;
2
+
3
+import java.util.List;
4
+import com.ruoyi.oa.domain.CmcManageDept;
5
+
6
+/**
7
+ * cmc领导分管Mapper接口
8
+ * 
9
+ * @author cmc
10
+ * @date 2024-07-04
11
+ */
12
+public interface CmcManageDeptMapper 
13
+{
14
+    /**
15
+     * 查询cmc领导分管
16
+     * 
17
+     * @param userId cmc领导分管主键
18
+     * @return cmc领导分管
19
+     */
20
+    public CmcManageDept selectCmcManageDeptByUserId(Long userId);
21
+
22
+    /**
23
+     * 查询cmc领导分管列表
24
+     * 
25
+     * @param cmcManageDept cmc领导分管
26
+     * @return cmc领导分管集合
27
+     */
28
+    public List<CmcManageDept> selectCmcManageDeptList(CmcManageDept cmcManageDept);
29
+
30
+    /**
31
+     * 新增cmc领导分管
32
+     * 
33
+     * @param cmcManageDept cmc领导分管
34
+     * @return 结果
35
+     */
36
+    public int insertCmcManageDept(CmcManageDept cmcManageDept);
37
+
38
+    /**
39
+     * 修改cmc领导分管
40
+     * 
41
+     * @param cmcManageDept cmc领导分管
42
+     * @return 结果
43
+     */
44
+    public int updateCmcManageDept(CmcManageDept cmcManageDept);
45
+
46
+    /**
47
+     * 删除cmc领导分管
48
+     * 
49
+     * @param userId cmc领导分管主键
50
+     * @return 结果
51
+     */
52
+    public int deleteCmcManageDeptByUserId(Long userId);
53
+
54
+    /**
55
+     * 批量删除cmc领导分管
56
+     * 
57
+     * @param userIds 需要删除的数据主键集合
58
+     * @return 结果
59
+     */
60
+    public int deleteCmcManageDeptByUserIds(Long[] userIds);
61
+}

+ 61
- 0
oa-back/ruoyi-system/src/main/java/com/ruoyi/oa/mapper/CmcTechnicalMapper.java 查看文件

1
+package com.ruoyi.oa.mapper;
2
+
3
+import java.util.List;
4
+import com.ruoyi.oa.domain.CmcTechnical;
5
+
6
+/**
7
+ * cmc技术交底Mapper接口
8
+ * 
9
+ * @author cmc
10
+ * @date 2024-07-04
11
+ */
12
+public interface CmcTechnicalMapper 
13
+{
14
+    /**
15
+     * 查询cmc技术交底
16
+     * 
17
+     * @param technicalId cmc技术交底主键
18
+     * @return cmc技术交底
19
+     */
20
+    public CmcTechnical selectCmcTechnicalByTechnicalId(String technicalId);
21
+
22
+    /**
23
+     * 查询cmc技术交底列表
24
+     * 
25
+     * @param cmcTechnical cmc技术交底
26
+     * @return cmc技术交底集合
27
+     */
28
+    public List<CmcTechnical> selectCmcTechnicalList(CmcTechnical cmcTechnical);
29
+
30
+    /**
31
+     * 新增cmc技术交底
32
+     * 
33
+     * @param cmcTechnical cmc技术交底
34
+     * @return 结果
35
+     */
36
+    public int insertCmcTechnical(CmcTechnical cmcTechnical);
37
+
38
+    /**
39
+     * 修改cmc技术交底
40
+     * 
41
+     * @param cmcTechnical cmc技术交底
42
+     * @return 结果
43
+     */
44
+    public int updateCmcTechnical(CmcTechnical cmcTechnical);
45
+
46
+    /**
47
+     * 删除cmc技术交底
48
+     * 
49
+     * @param technicalId cmc技术交底主键
50
+     * @return 结果
51
+     */
52
+    public int deleteCmcTechnicalByTechnicalId(String technicalId);
53
+
54
+    /**
55
+     * 批量删除cmc技术交底
56
+     * 
57
+     * @param technicalIds 需要删除的数据主键集合
58
+     * @return 结果
59
+     */
60
+    public int deleteCmcTechnicalByTechnicalIds(String[] technicalIds);
61
+}

+ 61
- 0
oa-back/ruoyi-system/src/main/java/com/ruoyi/oa/service/ICmcManageDeptService.java 查看文件

1
+package com.ruoyi.oa.service;
2
+
3
+import java.util.List;
4
+import com.ruoyi.oa.domain.CmcManageDept;
5
+
6
+/**
7
+ * cmc领导分管Service接口
8
+ * 
9
+ * @author cmc
10
+ * @date 2024-07-04
11
+ */
12
+public interface ICmcManageDeptService 
13
+{
14
+    /**
15
+     * 查询cmc领导分管
16
+     * 
17
+     * @param userId cmc领导分管主键
18
+     * @return cmc领导分管
19
+     */
20
+    public CmcManageDept selectCmcManageDeptByUserId(Long userId);
21
+
22
+    /**
23
+     * 查询cmc领导分管列表
24
+     * 
25
+     * @param cmcManageDept cmc领导分管
26
+     * @return cmc领导分管集合
27
+     */
28
+    public List<CmcManageDept> selectCmcManageDeptList(CmcManageDept cmcManageDept);
29
+
30
+    /**
31
+     * 新增cmc领导分管
32
+     * 
33
+     * @param cmcManageDept cmc领导分管
34
+     * @return 结果
35
+     */
36
+    public int insertCmcManageDept(CmcManageDept cmcManageDept);
37
+
38
+    /**
39
+     * 修改cmc领导分管
40
+     * 
41
+     * @param cmcManageDept cmc领导分管
42
+     * @return 结果
43
+     */
44
+    public int updateCmcManageDept(CmcManageDept cmcManageDept);
45
+
46
+    /**
47
+     * 批量删除cmc领导分管
48
+     * 
49
+     * @param userIds 需要删除的cmc领导分管主键集合
50
+     * @return 结果
51
+     */
52
+    public int deleteCmcManageDeptByUserIds(Long[] userIds);
53
+
54
+    /**
55
+     * 删除cmc领导分管信息
56
+     * 
57
+     * @param userId cmc领导分管主键
58
+     * @return 结果
59
+     */
60
+    public int deleteCmcManageDeptByUserId(Long userId);
61
+}

+ 61
- 0
oa-back/ruoyi-system/src/main/java/com/ruoyi/oa/service/ICmcTechnicalService.java 查看文件

1
+package com.ruoyi.oa.service;
2
+
3
+import java.util.List;
4
+import com.ruoyi.oa.domain.CmcTechnical;
5
+
6
+/**
7
+ * cmc技术交底Service接口
8
+ * 
9
+ * @author cmc
10
+ * @date 2024-07-04
11
+ */
12
+public interface ICmcTechnicalService 
13
+{
14
+    /**
15
+     * 查询cmc技术交底
16
+     * 
17
+     * @param technicalId cmc技术交底主键
18
+     * @return cmc技术交底
19
+     */
20
+    public CmcTechnical selectCmcTechnicalByTechnicalId(String technicalId);
21
+
22
+    /**
23
+     * 查询cmc技术交底列表
24
+     * 
25
+     * @param cmcTechnical cmc技术交底
26
+     * @return cmc技术交底集合
27
+     */
28
+    public List<CmcTechnical> selectCmcTechnicalList(CmcTechnical cmcTechnical);
29
+
30
+    /**
31
+     * 新增cmc技术交底
32
+     * 
33
+     * @param cmcTechnical cmc技术交底
34
+     * @return 结果
35
+     */
36
+    public int insertCmcTechnical(CmcTechnical cmcTechnical);
37
+
38
+    /**
39
+     * 修改cmc技术交底
40
+     * 
41
+     * @param cmcTechnical cmc技术交底
42
+     * @return 结果
43
+     */
44
+    public int updateCmcTechnical(CmcTechnical cmcTechnical);
45
+
46
+    /**
47
+     * 批量删除cmc技术交底
48
+     * 
49
+     * @param technicalIds 需要删除的cmc技术交底主键集合
50
+     * @return 结果
51
+     */
52
+    public int deleteCmcTechnicalByTechnicalIds(String[] technicalIds);
53
+
54
+    /**
55
+     * 删除cmc技术交底信息
56
+     * 
57
+     * @param technicalId cmc技术交底主键
58
+     * @return 结果
59
+     */
60
+    public int deleteCmcTechnicalByTechnicalId(String technicalId);
61
+}

+ 93
- 0
oa-back/ruoyi-system/src/main/java/com/ruoyi/oa/service/impl/CmcManageDeptServiceImpl.java 查看文件

1
+package com.ruoyi.oa.service.impl;
2
+
3
+import java.util.List;
4
+import org.springframework.beans.factory.annotation.Autowired;
5
+import org.springframework.stereotype.Service;
6
+import com.ruoyi.oa.mapper.CmcManageDeptMapper;
7
+import com.ruoyi.oa.domain.CmcManageDept;
8
+import com.ruoyi.oa.service.ICmcManageDeptService;
9
+
10
+/**
11
+ * cmc领导分管Service业务层处理
12
+ * 
13
+ * @author cmc
14
+ * @date 2024-07-04
15
+ */
16
+@Service
17
+public class CmcManageDeptServiceImpl implements ICmcManageDeptService 
18
+{
19
+    @Autowired
20
+    private CmcManageDeptMapper cmcManageDeptMapper;
21
+
22
+    /**
23
+     * 查询cmc领导分管
24
+     * 
25
+     * @param userId cmc领导分管主键
26
+     * @return cmc领导分管
27
+     */
28
+    @Override
29
+    public CmcManageDept selectCmcManageDeptByUserId(Long userId)
30
+    {
31
+        return cmcManageDeptMapper.selectCmcManageDeptByUserId(userId);
32
+    }
33
+
34
+    /**
35
+     * 查询cmc领导分管列表
36
+     * 
37
+     * @param cmcManageDept cmc领导分管
38
+     * @return cmc领导分管
39
+     */
40
+    @Override
41
+    public List<CmcManageDept> selectCmcManageDeptList(CmcManageDept cmcManageDept)
42
+    {
43
+        return cmcManageDeptMapper.selectCmcManageDeptList(cmcManageDept);
44
+    }
45
+
46
+    /**
47
+     * 新增cmc领导分管
48
+     * 
49
+     * @param cmcManageDept cmc领导分管
50
+     * @return 结果
51
+     */
52
+    @Override
53
+    public int insertCmcManageDept(CmcManageDept cmcManageDept)
54
+    {
55
+        return cmcManageDeptMapper.insertCmcManageDept(cmcManageDept);
56
+    }
57
+
58
+    /**
59
+     * 修改cmc领导分管
60
+     * 
61
+     * @param cmcManageDept cmc领导分管
62
+     * @return 结果
63
+     */
64
+    @Override
65
+    public int updateCmcManageDept(CmcManageDept cmcManageDept)
66
+    {
67
+        return cmcManageDeptMapper.updateCmcManageDept(cmcManageDept);
68
+    }
69
+
70
+    /**
71
+     * 批量删除cmc领导分管
72
+     * 
73
+     * @param userIds 需要删除的cmc领导分管主键
74
+     * @return 结果
75
+     */
76
+    @Override
77
+    public int deleteCmcManageDeptByUserIds(Long[] userIds)
78
+    {
79
+        return cmcManageDeptMapper.deleteCmcManageDeptByUserIds(userIds);
80
+    }
81
+
82
+    /**
83
+     * 删除cmc领导分管信息
84
+     * 
85
+     * @param userId cmc领导分管主键
86
+     * @return 结果
87
+     */
88
+    @Override
89
+    public int deleteCmcManageDeptByUserId(Long userId)
90
+    {
91
+        return cmcManageDeptMapper.deleteCmcManageDeptByUserId(userId);
92
+    }
93
+}

+ 93
- 0
oa-back/ruoyi-system/src/main/java/com/ruoyi/oa/service/impl/CmcTechnicalServiceImpl.java 查看文件

1
+package com.ruoyi.oa.service.impl;
2
+
3
+import java.util.List;
4
+import org.springframework.beans.factory.annotation.Autowired;
5
+import org.springframework.stereotype.Service;
6
+import com.ruoyi.oa.mapper.CmcTechnicalMapper;
7
+import com.ruoyi.oa.domain.CmcTechnical;
8
+import com.ruoyi.oa.service.ICmcTechnicalService;
9
+
10
+/**
11
+ * cmc技术交底Service业务层处理
12
+ * 
13
+ * @author cmc
14
+ * @date 2024-07-04
15
+ */
16
+@Service
17
+public class CmcTechnicalServiceImpl implements ICmcTechnicalService 
18
+{
19
+    @Autowired
20
+    private CmcTechnicalMapper cmcTechnicalMapper;
21
+
22
+    /**
23
+     * 查询cmc技术交底
24
+     * 
25
+     * @param technicalId cmc技术交底主键
26
+     * @return cmc技术交底
27
+     */
28
+    @Override
29
+    public CmcTechnical selectCmcTechnicalByTechnicalId(String technicalId)
30
+    {
31
+        return cmcTechnicalMapper.selectCmcTechnicalByTechnicalId(technicalId);
32
+    }
33
+
34
+    /**
35
+     * 查询cmc技术交底列表
36
+     * 
37
+     * @param cmcTechnical cmc技术交底
38
+     * @return cmc技术交底
39
+     */
40
+    @Override
41
+    public List<CmcTechnical> selectCmcTechnicalList(CmcTechnical cmcTechnical)
42
+    {
43
+        return cmcTechnicalMapper.selectCmcTechnicalList(cmcTechnical);
44
+    }
45
+
46
+    /**
47
+     * 新增cmc技术交底
48
+     * 
49
+     * @param cmcTechnical cmc技术交底
50
+     * @return 结果
51
+     */
52
+    @Override
53
+    public int insertCmcTechnical(CmcTechnical cmcTechnical)
54
+    {
55
+        return cmcTechnicalMapper.insertCmcTechnical(cmcTechnical);
56
+    }
57
+
58
+    /**
59
+     * 修改cmc技术交底
60
+     * 
61
+     * @param cmcTechnical cmc技术交底
62
+     * @return 结果
63
+     */
64
+    @Override
65
+    public int updateCmcTechnical(CmcTechnical cmcTechnical)
66
+    {
67
+        return cmcTechnicalMapper.updateCmcTechnical(cmcTechnical);
68
+    }
69
+
70
+    /**
71
+     * 批量删除cmc技术交底
72
+     * 
73
+     * @param technicalIds 需要删除的cmc技术交底主键
74
+     * @return 结果
75
+     */
76
+    @Override
77
+    public int deleteCmcTechnicalByTechnicalIds(String[] technicalIds)
78
+    {
79
+        return cmcTechnicalMapper.deleteCmcTechnicalByTechnicalIds(technicalIds);
80
+    }
81
+
82
+    /**
83
+     * 删除cmc技术交底信息
84
+     * 
85
+     * @param technicalId cmc技术交底主键
86
+     * @return 结果
87
+     */
88
+    @Override
89
+    public int deleteCmcTechnicalByTechnicalId(String technicalId)
90
+    {
91
+        return cmcTechnicalMapper.deleteCmcTechnicalByTechnicalId(technicalId);
92
+    }
93
+}

+ 1
- 1
oa-back/ruoyi-system/src/main/resources/mapper/oa/CmcContractMapper.xml 查看文件

85
             <if test="signScan != null  and signScan != ''"> and c.sign_scan = #{signScan}</if>
85
             <if test="signScan != null  and signScan != ''"> and c.sign_scan = #{signScan}</if>
86
             <if test="commentType != null  and commentType != ''"> and c.comment_type = #{commentType}</if>
86
             <if test="commentType != null  and commentType != ''"> and c.comment_type = #{commentType}</if>
87
         </where>
87
         </where>
88
-        order by c.contract_code desc
88
+        order by c.draft_time desc
89
     </select>
89
     </select>
90
 
90
 
91
     <select id="selectCmcContractByContractId" parameterType="String" resultMap="CmcContractResult">
91
     <select id="selectCmcContractByContractId" parameterType="String" resultMap="CmcContractResult">

+ 61
- 0
oa-back/ruoyi-system/src/main/resources/mapper/oa/CmcManageDeptMapper.xml 查看文件

1
+<?xml version="1.0" encoding="UTF-8" ?>
2
+<!DOCTYPE mapper
3
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
4
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
5
+<mapper namespace="com.ruoyi.oa.mapper.CmcManageDeptMapper">
6
+    
7
+    <resultMap type="CmcManageDept" id="CmcManageDeptResult">
8
+        <result property="userId"    column="user_id"    />
9
+        <result property="deptId"    column="dept_id"    />
10
+        <result property="partyAId"    column="party_a_id"    />
11
+    </resultMap>
12
+
13
+    <sql id="selectCmcManageDeptVo">
14
+        select user_id, dept_id, party_a_id from cmc_manage_dept
15
+    </sql>
16
+
17
+    <select id="selectCmcManageDeptList" parameterType="CmcManageDept" resultMap="CmcManageDeptResult">
18
+        <include refid="selectCmcManageDeptVo"/>
19
+        <where>  
20
+        </where>
21
+    </select>
22
+    
23
+    <select id="selectCmcManageDeptByUserId" parameterType="Long" resultMap="CmcManageDeptResult">
24
+        <include refid="selectCmcManageDeptVo"/>
25
+        where user_id = #{userId}
26
+    </select>
27
+        
28
+    <insert id="insertCmcManageDept" parameterType="CmcManageDept">
29
+        insert into cmc_manage_dept
30
+        <trim prefix="(" suffix=")" suffixOverrides=",">
31
+            <if test="userId != null">user_id,</if>
32
+            <if test="deptId != null">dept_id,</if>
33
+            <if test="partyAId != null">party_a_id,</if>
34
+         </trim>
35
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
36
+            <if test="userId != null">#{userId},</if>
37
+            <if test="deptId != null">#{deptId},</if>
38
+            <if test="partyAId != null">#{partyAId},</if>
39
+         </trim>
40
+    </insert>
41
+
42
+    <update id="updateCmcManageDept" parameterType="CmcManageDept">
43
+        update cmc_manage_dept
44
+        <trim prefix="SET" suffixOverrides=",">
45
+            <if test="deptId != null">dept_id = #{deptId},</if>
46
+            <if test="partyAId != null">party_a_id = #{partyAId},</if>
47
+        </trim>
48
+        where user_id = #{userId}
49
+    </update>
50
+
51
+    <delete id="deleteCmcManageDeptByUserId" parameterType="Long">
52
+        delete from cmc_manage_dept where user_id = #{userId}
53
+    </delete>
54
+
55
+    <delete id="deleteCmcManageDeptByUserIds" parameterType="String">
56
+        delete from cmc_manage_dept where user_id in 
57
+        <foreach item="userId" collection="array" open="(" separator="," close=")">
58
+            #{userId}
59
+        </foreach>
60
+    </delete>
61
+</mapper>

+ 121
- 0
oa-back/ruoyi-system/src/main/resources/mapper/oa/CmcTechnicalMapper.xml 查看文件

1
+<?xml version="1.0" encoding="UTF-8" ?>
2
+<!DOCTYPE mapper
3
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
4
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
5
+<mapper namespace="com.ruoyi.oa.mapper.CmcTechnicalMapper">
6
+    
7
+    <resultMap type="CmcTechnical" id="CmcTechnicalResult">
8
+        <result property="technicalId"    column="technical_id"    />
9
+        <result property="projectId"    column="project_id"    />
10
+        <result property="disclosureAccepter"    column="disclosure_accepter"    />
11
+        <result property="disclosurer"    column="disclosurer"    />
12
+        <result property="content"    column="content"    />
13
+        <result property="document"    column="document"    />
14
+        <result property="disclosureComment"    column="disclosure_comment"    />
15
+        <result property="acceptComment"    column="accept_comment"    />
16
+        <result property="disclosureTime"    column="disclosure_time"    />
17
+        <result property="acceptTime"    column="accept_time"    />
18
+        <association property="accepterUser"    javaType="SysUser"         resultMap="AccepterUserResult" />
19
+        <association property="disclosurerUser"    javaType="SysUser"         resultMap="DisclosurerUserResult" />
20
+        <association property="project"    javaType="CmcProject"         resultMap="CmcProjectResult" />
21
+    </resultMap>
22
+
23
+    <resultMap type="SysUser" id="AccepterUserResult">
24
+        <result property="userId"    column="user_id"    />
25
+        <result property="nickName"    column="accepter_nick_name"    />
26
+    </resultMap>
27
+
28
+    <resultMap type="SysUser" id="DisclosurerUserResult">
29
+        <result property="userId"    column="user_id"    />
30
+        <result property="nickName"    column="disclosurer_nick_name"    />
31
+    </resultMap>
32
+
33
+    <resultMap type="CmcProject" id="CmcProjectResult">
34
+        <result property="projectId"    column="project_id"    />
35
+        <result property="projectNumber"    column="project_number"    />
36
+        <result property="projectName"    column="project_name"    />
37
+    </resultMap>
38
+
39
+    <sql id="selectCmcTechnicalVo">
40
+        select t.technical_id, t.project_id, p.project_number, p.project_name, t.disclosure_accepter, u.nick_name as accepter_nick_name, t.disclosurer, 
41
+        u1.nick_name as disclosurer_nick_name, t.content, t.document, t.disclosure_comment, t.accept_comment, t.disclosure_time, t.accept_time from cmc_technical as t
42
+        left join sys_user as u on u.user_id = t.disclosure_accepter
43
+        left join sys_user as u1 on u1.user_id = t.disclosurer
44
+        left join cmc_project as p on p.project_id = t.project_id
45
+    </sql>
46
+
47
+    <select id="selectCmcTechnicalList" parameterType="CmcTechnical" resultMap="CmcTechnicalResult">
48
+        <include refid="selectCmcTechnicalVo"/>
49
+        <where>  
50
+            <if test="projectId != null  and projectId != ''"> and t.project_id = #{projectId}</if>
51
+            <if test="disclosureAccepter != null "> and t.disclosure_accepter = #{disclosureAccepter}</if>
52
+            <if test="disclosurer != null "> and t.disclosurer = #{disclosurer}</if>
53
+            <if test="content != null  and content != ''"> and t.content = #{content}</if>
54
+            <if test="document != null  and document != ''"> and t.document = #{document}</if>
55
+            <if test="disclosureComment != null  and disclosureComment != ''"> and t.disclosure_comment = #{disclosureComment}</if>
56
+            <if test="acceptComment != null  and acceptComment != ''"> and t.accept_comment = #{acceptComment}</if>
57
+            <if test="disclosureTime != null "> and t.disclosure_time = #{disclosureTime}</if>
58
+            <if test="acceptTime != null "> and t.accept_time = #{acceptTime}</if>
59
+        </where>
60
+    </select>
61
+    
62
+    <select id="selectCmcTechnicalByTechnicalId" parameterType="String" resultMap="CmcTechnicalResult">
63
+        <include refid="selectCmcTechnicalVo"/>
64
+        where t.technical_id = #{technicalId}
65
+    </select>
66
+        
67
+    <insert id="insertCmcTechnical" parameterType="CmcTechnical">
68
+        insert into cmc_technical
69
+        <trim prefix="(" suffix=")" suffixOverrides=",">
70
+            <if test="technicalId != null">technical_id,</if>
71
+            <if test="projectId != null">project_id,</if>
72
+            <if test="disclosureAccepter != null">disclosure_accepter,</if>
73
+            <if test="disclosurer != null">disclosurer,</if>
74
+            <if test="content != null">content,</if>
75
+            <if test="document != null">document,</if>
76
+            <if test="disclosureComment != null">disclosure_comment,</if>
77
+            <if test="acceptComment != null">accept_comment,</if>
78
+            <if test="disclosureTime != null">disclosure_time,</if>
79
+            <if test="acceptTime != null">accept_time,</if>
80
+         </trim>
81
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
82
+            <if test="technicalId != null">#{technicalId},</if>
83
+            <if test="projectId != null">#{projectId},</if>
84
+            <if test="disclosureAccepter != null">#{disclosureAccepter},</if>
85
+            <if test="disclosurer != null">#{disclosurer},</if>
86
+            <if test="content != null">#{content},</if>
87
+            <if test="document != null">#{document},</if>
88
+            <if test="disclosureComment != null">#{disclosureComment},</if>
89
+            <if test="acceptComment != null">#{acceptComment},</if>
90
+            <if test="disclosureTime != null">#{disclosureTime},</if>
91
+            <if test="acceptTime != null">#{acceptTime},</if>
92
+         </trim>
93
+    </insert>
94
+
95
+    <update id="updateCmcTechnical" parameterType="CmcTechnical">
96
+        update cmc_technical
97
+        <trim prefix="SET" suffixOverrides=",">
98
+            <if test="projectId != null">project_id = #{projectId},</if>
99
+            <if test="disclosureAccepter != null">disclosure_accepter = #{disclosureAccepter},</if>
100
+            <if test="disclosurer != null">disclosurer = #{disclosurer},</if>
101
+            <if test="content != null">content = #{content},</if>
102
+            <if test="document != null">document = #{document},</if>
103
+            <if test="disclosureComment != null">disclosure_comment = #{disclosureComment},</if>
104
+            <if test="acceptComment != null">accept_comment = #{acceptComment},</if>
105
+            <if test="disclosureTime != null">disclosure_time = #{disclosureTime},</if>
106
+            <if test="acceptTime != null">accept_time = #{acceptTime},</if>
107
+        </trim>
108
+        where technical_id = #{technicalId}
109
+    </update>
110
+
111
+    <delete id="deleteCmcTechnicalByTechnicalId" parameterType="String">
112
+        delete from cmc_technical where technical_id = #{technicalId}
113
+    </delete>
114
+
115
+    <delete id="deleteCmcTechnicalByTechnicalIds" parameterType="String">
116
+        delete from cmc_technical where technical_id in 
117
+        <foreach item="technicalId" collection="array" open="(" separator="," close=")">
118
+            #{technicalId}
119
+        </foreach>
120
+    </delete>
121
+</mapper>

+ 5841
- 9098
oa-back/sql/sql.sql
文件差異過大導致無法顯示
查看文件


+ 44
- 0
oa-ui/src/api/oa/manage/manageDept.js 查看文件

1
+import request from '@/utils/request'
2
+
3
+// 查询cmc领导分管列表
4
+export function listManageDept(query) {
5
+  return request({
6
+    url: '/oa/manageDept/list',
7
+    method: 'get',
8
+    params: query
9
+  })
10
+}
11
+
12
+// 查询cmc领导分管详细
13
+export function getManageDept(userId) {
14
+  return request({
15
+    url: '/oa/manageDept/' + userId,
16
+    method: 'get'
17
+  })
18
+}
19
+
20
+// 新增cmc领导分管
21
+export function addManageDept(data) {
22
+  return request({
23
+    url: '/oa/manageDept',
24
+    method: 'post',
25
+    data: data
26
+  })
27
+}
28
+
29
+// 修改cmc领导分管
30
+export function updateManageDept(data) {
31
+  return request({
32
+    url: '/oa/manageDept',
33
+    method: 'put',
34
+    data: data
35
+  })
36
+}
37
+
38
+// 删除cmc领导分管
39
+export function delManageDept(userId) {
40
+  return request({
41
+    url: '/oa/manageDept/' + userId,
42
+    method: 'delete'
43
+  })
44
+}

+ 44
- 0
oa-ui/src/api/oa/technical/technical.js 查看文件

1
+import request from '@/utils/request'
2
+
3
+// 查询cmc技术交底列表
4
+export function listTechnical(query) {
5
+  return request({
6
+    url: '/oa/technical/list',
7
+    method: 'get',
8
+    params: query
9
+  })
10
+}
11
+
12
+// 查询cmc技术交底详细
13
+export function getTechnical(technicalId) {
14
+  return request({
15
+    url: '/oa/technical/' + technicalId,
16
+    method: 'get'
17
+  })
18
+}
19
+
20
+// 新增cmc技术交底
21
+export function addTechnical(data) {
22
+  return request({
23
+    url: '/oa/technical',
24
+    method: 'post',
25
+    data: data
26
+  })
27
+}
28
+
29
+// 修改cmc技术交底
30
+export function updateTechnical(data) {
31
+  return request({
32
+    url: '/oa/technical',
33
+    method: 'put',
34
+    data: data
35
+  })
36
+}
37
+
38
+// 删除cmc技术交底
39
+export function delTechnical(technicalId) {
40
+  return request({
41
+    url: '/oa/technical/' + technicalId,
42
+    method: 'delete'
43
+  })
44
+}

+ 2
- 2
oa-ui/src/views/flowable/form/business/contractForm.vue 查看文件

362
           </el-form-item>
362
           </el-form-item>
363
           <el-row>
363
           <el-row>
364
             <el-col :span="6" :xs="24" :offset="12">
364
             <el-col :span="6" :xs="24" :offset="12">
365
-              <el-form-item label="签名:" label-width="120px" v-if="taskName == '分管审核'">
365
+              <el-form-item label="签名:" label-width="120px" v-if="taskName != '合同拟稿' && taskName != '线上会审' && taskName != '会议评审'">
366
                 <span class="auditor"> {{ form.managerUser ? form.managerUser.nickName : managerUser }} </span>
366
                 <span class="auditor"> {{ form.managerUser ? form.managerUser.nickName : managerUser }} </span>
367
               </el-form-item>
367
               </el-form-item>
368
             </el-col>
368
             </el-col>
369
             <el-col :span="6">
369
             <el-col :span="6">
370
-              <el-form-item label="日期:" label-width="120px" v-if="taskName == '分管审核'">
370
+              <el-form-item label="日期:" label-width="120px" v-if="taskName != '合同拟稿' && taskName != '线上会审' && taskName != '会议评审'">
371
                 <span> {{ form.managerTime ? form.managerTime : managerTime }} </span>
371
                 <span> {{ form.managerTime ? form.managerTime : managerTime }} </span>
372
               </el-form-item>
372
               </el-form-item>
373
             </el-col>
373
             </el-col>

+ 50
- 12
oa-ui/src/views/flowable/form/business/subContract.vue 查看文件

1
 <!--
1
 <!--
2
  * @Author: ysh
2
  * @Author: ysh
3
  * @Date: 2024-05-10 15:31:57
3
  * @Date: 2024-05-10 15:31:57
4
- * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2024-07-02 10:11:22
4
+ * @LastEditors: wrh
5
+ * @LastEditTime: 2024-07-03 13:51:41
6
 -->
6
 -->
7
 <template>
7
 <template>
8
   <div class="app-container">
8
   <div class="app-container">
357
           </el-form-item>
357
           </el-form-item>
358
           <el-row>
358
           <el-row>
359
             <el-col :span="6" :xs="24" :offset="12">
359
             <el-col :span="6" :xs="24" :offset="12">
360
-              <el-form-item label="签名:" label-width="120px" v-if="taskName == '分管审核'">
360
+              <el-form-item label="签名:" label-width="120px" v-if="taskName != '合同拟稿' && taskName != '线上会审' && taskName != '会议评审'">
361
                 <span class="auditor"> {{ form.managerUser ? form.managerUser.nickName : managerUser }} </span>
361
                 <span class="auditor"> {{ form.managerUser ? form.managerUser.nickName : managerUser }} </span>
362
               </el-form-item>
362
               </el-form-item>
363
             </el-col>
363
             </el-col>
364
             <el-col :span="6">
364
             <el-col :span="6">
365
-              <el-form-item label="日期:" label-width="120px" v-if="taskName == '分管审核'">
365
+              <el-form-item label="日期:" label-width="120px" v-if="taskName != '合同拟稿' && taskName != '线上会审' && taskName != '会议评审'">
366
                 <span> {{ form.managerTime ? form.managerTime : managerTime }} </span>
366
                 <span> {{ form.managerTime ? form.managerTime : managerTime }} </span>
367
               </el-form-item>
367
               </el-form-item>
368
             </el-col>
368
             </el-col>
689
               this.paymentList = res.rows;
689
               this.paymentList = res.rows;
690
           });
690
           });
691
           listContractComment({ contractId: this.taskForm.formId }).then(res => {
691
           listContractComment({ contractId: this.taskForm.formId }).then(res => {
692
-            if (res.rows)
692
+            if (res.rows && res.rows.length != 0) {
693
               this.commentList = res.rows;
693
               this.commentList = res.rows;
694
-            for (let comment of this.commentList) {
695
-              if (comment.commentTime == undefined) {
696
-                if (comment.userId != this.$store.getters.userId) {
697
-                  comment.commentUser = undefined;
698
-                }
699
-                else {
700
-                  comment.commentTime = parseTime(new Date(), '{y}-{m}-{d}');
694
+              for (let comment of this.commentList) {
695
+                if (comment.commentTime == undefined) {
696
+                  if (comment.userId != this.$store.getters.userId) {
697
+                    comment.commentUser = undefined;
698
+                  }
699
+                  else {
700
+                    comment.commentTime = parseTime(new Date(), '{y}-{m}-{d}');
701
+                  }
701
                 }
702
                 }
702
               }
703
               }
703
             }
704
             }
705
+            else {
706
+              this.commentList = [
707
+                {
708
+                  deptId: 105,
709
+                  userId: '',
710
+                  comment: '',
711
+                  document: '',
712
+                  commentTime: undefined
713
+                },
714
+                {
715
+                  deptId: 110,
716
+                  userId: '',
717
+                  comment: '',
718
+                  document: '',
719
+                  commentTime: undefined
720
+                },
721
+                {
722
+                  deptId: 107,
723
+                  userId: '',
724
+                  comment: '',
725
+                  document: '',
726
+                  commentTime: undefined
727
+                },
728
+                {
729
+                  deptId: 106,
730
+                  userId: '',
731
+                  comment: '',
732
+                  document: '',
733
+                  commentTime: undefined
734
+                },
735
+              ]
736
+              for (let comment of this.commentList) {
737
+                getUsersDeptLeaderByDept({ deptId: comment.deptId }).then(res => {
738
+                  comment.userId = res.data.userId;
739
+                })
740
+              }
741
+            }
704
           });
742
           });
705
           getContractMeeting(this.taskForm.formId).then(res => {
743
           getContractMeeting(this.taskForm.formId).then(res => {
706
             if (res.data) {
744
             if (res.data) {

+ 6
- 3
oa-ui/src/views/flowable/form/components/conditionDisplay.vue 查看文件

1
 <!--
1
 <!--
2
  * @Author: ysh
2
  * @Author: ysh
3
  * @Date: 2024-04-23 17:08:16
3
  * @Date: 2024-04-23 17:08:16
4
- * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2024-06-07 16:13:25
4
+ * @LastEditors: wrh
5
+ * @LastEditTime: 2024-07-04 12:58:36
6
 -->
6
 -->
7
 <template>
7
 <template>
8
   <div>
8
   <div>
16
     <car-form :taskForm="taskForm" :taskName="''" v-else-if="taskForm.procDefName == '用车审批'"></car-form>
16
     <car-form :taskForm="taskForm" :taskName="''" v-else-if="taskForm.procDefName == '用车审批'"></car-form>
17
     <technical-plan :key="'tec'+taskForm.taskId" :taskForm="taskForm" v-else-if="taskForm.procDefName == '技术方案'"></technical-plan>
17
     <technical-plan :key="'tec'+taskForm.taskId" :taskForm="taskForm" v-else-if="taskForm.procDefName == '技术方案'"></technical-plan>
18
     <safe-form :key="'safe'+taskForm.taskId" :taskForm="taskForm" :taskName="''" v-else-if="taskForm.procDefName == '安全交底'"></safe-form>
18
     <safe-form :key="'safe'+taskForm.taskId" :taskForm="taskForm" :taskName="''" v-else-if="taskForm.procDefName == '安全交底'"></safe-form>
19
+    <technical-form :key="'technical'+taskForm.taskId" :taskForm="taskForm" :taskName="''" v-else-if="taskForm.procDefName == '技术交底'"></technical-form>
19
     <settle-form :key="'fb'+taskForm.taskId" :taskForm="taskForm" :taskName="''" :disabled="true"
20
     <settle-form :key="'fb'+taskForm.taskId" :taskForm="taskForm" :taskName="''" :disabled="true"
20
       v-else-if="taskForm.procDefName == '项目结算'"></settle-form>
21
       v-else-if="taskForm.procDefName == '项目结算'"></settle-form>
21
     <!-- <budget-in :key="'budget'+taskForm.taskId" :taskForm="taskForm" v-else-if="taskForm.procDefName == '项目预算'"></budget-in> -->
22
     <!-- <budget-in :key="'budget'+taskForm.taskId" :taskForm="taskForm" v-else-if="taskForm.procDefName == '项目预算'"></budget-in> -->
41
 import CwTable from "@/views/flowable/form/access/cwTable.vue";
42
 import CwTable from "@/views/flowable/form/access/cwTable.vue";
42
 import CarForm from '@/views/flowable/form/oa/carForm.vue';
43
 import CarForm from '@/views/flowable/form/oa/carForm.vue';
43
 import projectProcess from '@/views/flowable/form/projectProcess/index'
44
 import projectProcess from '@/views/flowable/form/projectProcess/index'
44
-import TechnicalForm from '@/views/flowable/form/technicalPlan.vue';
45
+import TechnicalPlan from '@/views/flowable/form/technicalPlan.vue';
45
 import SafeForm from '@/views/flowable/form/safeForm.vue';
46
 import SafeForm from '@/views/flowable/form/safeForm.vue';
47
+import TechnicalForm from '@/views/flowable/form/technicalForm.vue';
46
 import SettleForm from '@/views/flowable/form/settleForm.vue';
48
 import SettleForm from '@/views/flowable/form/settleForm.vue';
47
 import BudgetInfo from '../budget/budgetInfo.vue';
49
 import BudgetInfo from '../budget/budgetInfo.vue';
48
 import ContractForm from '../business/contractForm.vue';
50
 import ContractForm from '../business/contractForm.vue';
73
     JyTable,
75
     JyTable,
74
     CarForm,
76
     CarForm,
75
     projectProcess,
77
     projectProcess,
78
+    TechnicalPlan,
76
     TechnicalForm,
79
     TechnicalForm,
77
     SafeForm,
80
     SafeForm,
78
     SettleForm,
81
     SettleForm,

+ 4
- 0
oa-ui/src/views/flowable/form/components/detailDisplay.vue 查看文件

24
       @goBack="goBack"></borrow-form>
24
       @goBack="goBack"></borrow-form>
25
     <safe-form :taskName="taskName" :taskForm="taskForm" v-else-if="taskForm.procDefName == '安全交底'"
25
     <safe-form :taskName="taskName" :taskForm="taskForm" v-else-if="taskForm.procDefName == '安全交底'"
26
       @goBack="goBack"></safe-form>
26
       @goBack="goBack"></safe-form>
27
+    <technical-form :taskName="taskName" :taskForm="taskForm" v-else-if="taskForm.procDefName == '技术交底'"
28
+      @goBack="goBack"></technical-form>
27
     <technical-plan :taskName="taskName" :taskForm="taskForm" v-else-if="taskForm.procDefName == '技术方案'"
29
     <technical-plan :taskName="taskName" :taskForm="taskForm" v-else-if="taskForm.procDefName == '技术方案'"
28
       @goBack="goBack"></technical-plan>
30
       @goBack="goBack"></technical-plan>
29
     <contract-form :taskName="taskName" :taskForm="taskForm" v-else-if="taskForm.procDefName == '承接合同评审'"
31
     <contract-form :taskName="taskName" :taskForm="taskForm" v-else-if="taskForm.procDefName == '承接合同评审'"
55
 import projectProcess from "@/views/flowable/form/projectProcess/index.vue"
57
 import projectProcess from "@/views/flowable/form/projectProcess/index.vue"
56
 import AddBudget from '@/views/flowable/form/budget/addBudget.vue';
58
 import AddBudget from '@/views/flowable/form/budget/addBudget.vue';
57
 import safeForm from '@/views/flowable/form/safeForm.vue';
59
 import safeForm from '@/views/flowable/form/safeForm.vue';
60
+import technicalForm from '@/views/flowable/form/technicalForm.vue';
58
 import technicalPlan from '@/views/flowable/form/technicalPlan.vue';
61
 import technicalPlan from '@/views/flowable/form/technicalPlan.vue';
59
 import budgetIndex from '@/views/flowable/form/budget/budget.vue';
62
 import budgetIndex from '@/views/flowable/form/budget/budget.vue';
60
 import businessReview from '@/views/flowable/form/projectProcess/businessReview.vue';
63
 import businessReview from '@/views/flowable/form/projectProcess/businessReview.vue';
80
     AddBudget,
83
     AddBudget,
81
     borrowForm,
84
     borrowForm,
82
     safeForm,
85
     safeForm,
86
+    technicalForm,
83
     technicalPlan,
87
     technicalPlan,
84
     budgetIndex,
88
     budgetIndex,
85
     businessReview,
89
     businessReview,

+ 2
- 2
oa-ui/src/views/flowable/form/inProgress/achiData.vue 查看文件

22
           {{ findUserName(scope.row.qualityInspector) }}
22
           {{ findUserName(scope.row.qualityInspector) }}
23
         </template>
23
         </template>
24
       </el-table-column>
24
       </el-table-column>
25
-      <el-table-column label="技术部负责人" prop="deptLeader" show-overflow-tooltip width="120">
25
+      <el-table-column label="技术质量与安全部负责人" prop="deptLeader" show-overflow-tooltip width="120">
26
         <template slot-scope="scope">
26
         <template slot-scope="scope">
27
           {{ findUserName(scope.row.deptLeader) }}
27
           {{ findUserName(scope.row.deptLeader) }}
28
         </template>
28
         </template>
38
       <el-table-column label="归档时间" prop="archiveTime" show-overflow-tooltip width="120" />
38
       <el-table-column label="归档时间" prop="archiveTime" show-overflow-tooltip width="120" />
39
       <el-table-column label="生产部门意见" prop="produceComment" show-overflow-tooltip width="120" />
39
       <el-table-column label="生产部门意见" prop="produceComment" show-overflow-tooltip width="120" />
40
       <el-table-column label="质量检查意见" prop="qualityComment" show-overflow-tooltip width="120" />
40
       <el-table-column label="质量检查意见" prop="qualityComment" show-overflow-tooltip width="120" />
41
-      <el-table-column label="技术部审核意见" prop="deptComment" show-overflow-tooltip width="120" />
41
+      <el-table-column label="技术质量与安全部审核意见" prop="deptComment" show-overflow-tooltip width="120" />
42
       <el-table-column label="归档意见" prop="archiveComment" show-overflow-tooltip width="120" />
42
       <el-table-column label="归档意见" prop="archiveComment" show-overflow-tooltip width="120" />
43
       <el-table-column label="操作" fixed="right" header-align="center">
43
       <el-table-column label="操作" fixed="right" header-align="center">
44
         <template slot-scope="scope">
44
         <template slot-scope="scope">

+ 3
- 3
oa-ui/src/views/flowable/form/projectProcess/arrangeProject.vue 查看文件

1
 <!--
1
 <!--
2
  * @Author: ysh
2
  * @Author: ysh
3
  * @Date: 2024-03-19 09:24:06
3
  * @Date: 2024-03-19 09:24:06
4
- * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2024-07-02 17:36:44
4
+ * @LastEditors: wrh
5
+ * @LastEditTime: 2024-07-04 13:00:36
6
 -->
6
 -->
7
 <template>
7
 <template>
8
   <div class="app-container">
8
   <div class="app-container">
234
       updateProject(this.form)
234
       updateProject(this.form)
235
     },
235
     },
236
     confirmPlanForm() {
236
     confirmPlanForm() {
237
-      this.$confirm('项目安排之后会自动发起预算编制、技术方案、安全交底个子流程,将无法进行撤回操作,是否继续提交?', '提示', {
237
+      this.$confirm('项目安排之后会自动发起预算编制、技术方案、安全交底、技术交底四个子流程,将无法进行撤回操作,是否继续提交?', '提示', {
238
         confirmButtonText: '确定',
238
         confirmButtonText: '确定',
239
         cancelButtonText: '取消',
239
         cancelButtonText: '取消',
240
         type: 'warning'
240
         type: 'warning'

+ 7
- 3
oa-ui/src/views/flowable/form/projectProcess/index.vue 查看文件

1
 <!--
1
 <!--
2
  * @Author: ysh
2
  * @Author: ysh
3
  * @Date: 2024-02-27 14:49:15
3
  * @Date: 2024-02-27 14:49:15
4
- * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2024-07-02 15:13:18
4
+ * @LastEditors: wrh
5
+ * @LastEditTime: 2024-07-04 13:02:34
6
 -->
6
 -->
7
 
7
 
8
 <template>
8
 <template>
22
           <el-tab-pane label="安全交底" name="安全交底">
22
           <el-tab-pane label="安全交底" name="安全交底">
23
             <safe-tab :taskForm="taskForm"  @goBack="goBack"></safe-tab>
23
             <safe-tab :taskForm="taskForm"  @goBack="goBack"></safe-tab>
24
           </el-tab-pane>
24
           </el-tab-pane>
25
+          <el-tab-pane label="技术交底" name="技术交底">
26
+            <technical-tab :taskForm="taskForm"  @goBack="goBack"></technical-tab>
27
+          </el-tab-pane>
25
           <el-tab-pane label="技术方案" name="技术方案">
28
           <el-tab-pane label="技术方案" name="技术方案">
26
             <plan-tab :taskForm="taskForm" :taskName="taskName"  @goBack="goBack"></plan-tab>
29
             <plan-tab :taskForm="taskForm" :taskName="taskName"  @goBack="goBack"></plan-tab>
27
           </el-tab-pane>
30
           </el-tab-pane>
71
 import BudgetTab from './budgetTab.vue'
74
 import BudgetTab from './budgetTab.vue'
72
 import planTab from './planTab.vue'
75
 import planTab from './planTab.vue'
73
 import SafeTab from './safeTab.vue'
76
 import SafeTab from './safeTab.vue'
77
+import TechnicalTab from './technicalTab.vue'
74
 export default {
78
 export default {
75
   props: {
79
   props: {
76
     taskName: {
80
     taskName: {
80
       type: Object,
84
       type: Object,
81
     }
85
     }
82
   },
86
   },
83
-  components: { addproject, arrangeProject, businessReview, flow, ManageReview, ScConfirm, InProgress, BudgetTab, planTab, SafeTab },
87
+  components: { addproject, arrangeProject, businessReview, flow, ManageReview, ScConfirm, InProgress, BudgetTab, planTab, SafeTab, TechnicalTab },
84
   data() {
88
   data() {
85
     return {
89
     return {
86
       activeName: '项目登记',
90
       activeName: '项目登记',

+ 2
- 2
oa-ui/src/views/flowable/form/projectProcess/planTab.vue 查看文件

89
             </el-link>
89
             </el-link>
90
           </div>
90
           </div>
91
         </el-form-item>
91
         </el-form-item>
92
-        <el-form-item label="技术部审核意见" prop="technicalComment">
93
-          <el-input type="textarea" v-model="form.technicalComment" placeholder="请输入技术审核意见" />
92
+        <el-form-item label="技术质量与安全部审核意见" prop="technicalComment">
93
+          <el-input type="textarea" v-model="form.technicalComment" placeholder="请输入技术质量与安全部审核意见" />
94
         </el-form-item>
94
         </el-form-item>
95
         <el-row>
95
         <el-row>
96
           <el-col :span="6" :xs="24" :offset="12">
96
           <el-col :span="6" :xs="24" :offset="12">

+ 146
- 0
oa-ui/src/views/flowable/form/projectProcess/technicalTab.vue 查看文件

1
+<template>
2
+  <div class="app-container">
3
+    <el-empty description="未进行技术交底" v-if="isEmpty"></el-empty>
4
+    <div v-if="!isEmpty">
5
+      <h3 class="text-center"><b>{{ form.projectNumber + '-' + form.projectName + ' 技术交底' }}</b></h3>
6
+      <el-form ref="technicalForm" :model="form" :rules="rules" label-width="125px" disabled>
7
+        <el-form-item label="项目编号:" prop="projectNumber">
8
+          {{ form.projectNumber }}
9
+        </el-form-item>
10
+        <el-form-item label="项目名称:" prop="projectName">
11
+          {{ form.projectName }}
12
+        </el-form-item>
13
+        <el-form-item label="接受交底人" prop="disclosureAccepter">
14
+          <el-select v-model="form.disclosureAccepter" filterable clearable style="width:220px">
15
+            <el-option v-for="item in userList" :key="item.userId" :label="item.nickName" :value="item.userId">
16
+            </el-option>
17
+          </el-select>
18
+        </el-form-item>
19
+        <el-form-item label="技术交底内容" prop="content">
20
+          <el-input v-model="form.content" placeholder="请输入技术交底内容" type="textarea"
21
+            :autosize="{ minRows: 8 }" />
22
+        </el-form-item>
23
+        <el-form-item label="附件" prop="document">
24
+          <el-input v-model="form.document" placeholder="请输入附件" type="textarea"
25
+            :autosize="{ minRows: 8 }" />
26
+        </el-form-item>
27
+        <el-form-item label="技术交底意见" prop="disclosureComment">
28
+          <el-input v-model="form.disclosureComment" placeholder="请输入技术交底意见" type="textarea" :autosize="{ minRows: 4 }" />
29
+        </el-form-item>
30
+        <el-row>
31
+          <el-col :span="6" :xs="24" :offset="12">
32
+            <el-form-item label="签名" prop="disclosurer">
33
+              <span class="auditor"> {{ form.disclosurerUser ? form.disclosurerUser.nickName : '' }}
34
+              </span>
35
+            </el-form-item>
36
+          </el-col>
37
+          <el-col :span="6">
38
+            <el-form-item label="日期:" label-width="120px">
39
+              <span> {{ parseTime(form.disclosureTime, '{y}-{m}-{d}') }} </span>
40
+            </el-form-item>
41
+          </el-col>
42
+        </el-row>
43
+        <el-form-item label="接受交底意见" prop="acceptComment">
44
+          <el-input v-model="form.acceptComment" placeholder="请输入接受交底意见" type="textarea" :autosize="{ minRows: 4 }" />
45
+        </el-form-item>
46
+        <el-row>
47
+          <el-col :span="6" :xs="24" :offset="12">
48
+            <el-form-item label="签名">
49
+              <span class="auditor"> {{ form.accepterUser ? form.accepterUser.nickName : '' }} </span>
50
+            </el-form-item>
51
+          </el-col>
52
+          <el-col :span="6">
53
+            <el-form-item label="日期:" label-width="120px">
54
+              <span> {{ parseTime(form.acceptTime, '{y}-{m}-{d}') }} </span>
55
+            </el-form-item>
56
+          </el-col>
57
+        </el-row>
58
+      </el-form>
59
+    </div>
60
+  </div>
61
+</template>
62
+
63
+<script>
64
+import { listTechnical, getTechnical, delTechnical, addTechnical, updateTechnical } from "@/api/oa/technical/technical";
65
+import { listUser } from '@/api/system/user';
66
+import { getProject } from "@/api/oa/project/project";
67
+export default {
68
+  props: {
69
+    taskForm: {
70
+      type: Object,
71
+      required: true
72
+    }
73
+  },
74
+  computed: {
75
+    projectNumber() {
76
+      return this.$store.state.projectProcess.projectNumber;
77
+    },
78
+    projectName() {
79
+      return this.$store.state.projectProcess.projectName;
80
+    },
81
+  },
82
+  watch: {
83
+    projectNumber(newval) {
84
+      this.$set(this.form, "projectNumber", newval);
85
+    },
86
+    projectName(newval) {
87
+      this.$set(this.form, "projectName", newval);
88
+    }
89
+  },
90
+  data() {
91
+    return {
92
+      isEmpty: true,
93
+      form: {},
94
+      rules: {},
95
+      userList: [],
96
+    }
97
+  },
98
+  mounted() {
99
+    this.initForm();
100
+    this.getUserList();
101
+  },
102
+  methods: {
103
+    /** 查询cmc技术方案列表 */
104
+    initForm() {
105
+      getTechnical(this.taskForm.formId).then((res) => {
106
+        if (res.data) {
107
+          this.isEmpty = false;
108
+          this.form = res.data;
109
+          if (this.projectNumber != '' && this.projectName != '') {
110
+            this.$set(this.form, "projectNumber", this.projectNumber);
111
+            this.$set(this.form, "projectName", this.projectName);
112
+          } else {
113
+            getProject(this.taskForm.formId).then(res => {
114
+              if (res.data) {
115
+                this.$set(this.form, "projectNumber", res.data.projectNumber);
116
+                this.$set(this.form, "projectName", res.data.projectName);
117
+              }
118
+            })
119
+          }
120
+        }
121
+      });
122
+    },
123
+    // 查询用户列表
124
+    getUserList() {
125
+      listUser({ pageSize: 9999, pageNum: 1 }).then((res) => {
126
+        this.userList = res.rows;
127
+      });
128
+    },
129
+  }
130
+}
131
+</script>
132
+
133
+<style lang="scss" scoped>
134
+::v-deep .el-input.is-disabled .el-input__inner {
135
+  color: #686a6e;
136
+}
137
+
138
+::v-deep .el-textarea.is-disabled .el-textarea__inner,
139
+.el-radio__input.is-disabled+span.el-radio__label {
140
+  color: #686a6e;
141
+}
142
+
143
+::v-deep .el-radio__input.is-disabled+span.el-radio__label {
144
+  color: #686a6e;
145
+}
146
+</style>

+ 349
- 0
oa-ui/src/views/flowable/form/technicalForm.vue 查看文件

1
+<template>
2
+  <div class="app-container">
3
+    <el-row :gutter="20">
4
+      <el-col :span="18" :xs="24">
5
+        <el-form ref="form" :model="form" :rules="rules" label-width="150px">
6
+          <el-form-item label="项目编号:" prop="projectId" v-if="taskForm.procDefName == '技术交底'">
7
+            <el-input v-model="chooseProject.projectNumber" placeholder="请输入项目编号" disabled style="width: 300px" />
8
+            <el-descriptions border v-if="isSelect" style="margin-top: 10px;" :column="1">
9
+              <el-descriptions-item label="项目编号" label-class-name="my-label">{{ chooseProject.projectNumber
10
+              }}</el-descriptions-item>
11
+              <el-descriptions-item label="项目名称" label-class-name="my-label">{{ chooseProject.projectName
12
+              }}</el-descriptions-item>
13
+              <el-descriptions-item label="项目负责人" label-class-name="my-label">{{ chooseProject.projectLeaderUser ?
14
+                chooseProject.projectLeaderUser.nickName : ''
15
+              }}</el-descriptions-item>
16
+              <el-descriptions-item label="承担部门" label-class-name="my-label">
17
+                <el-tag size="small">{{ chooseProject.undertakingDeptName }}</el-tag>
18
+              </el-descriptions-item>
19
+              <el-descriptions-item label="项目类型" label-class-name="my-label">{{ chooseProject.projectType
20
+              }}</el-descriptions-item>
21
+            </el-descriptions>
22
+          </el-form-item>
23
+          <el-form-item label="接受交底人" prop="disclosureAccepter">
24
+            <el-select v-model="form.disclosureAccepter" style="width:220px" :disabled="true">
25
+              <el-option v-for="item in userList" :key="item.userId" :label="item.nickName" :value="item.userId"
26
+                v-if="item.nickName != 'admin'">
27
+              </el-option>
28
+            </el-select>
29
+          </el-form-item>
30
+          <el-form-item label="技术交底内容" prop="content">
31
+            <el-input v-model="form.content" placeholder="请输入技术交底内容" type="textarea"
32
+              :disabled="taskName != '技术交底'" :autosize="{ minRows: 8 }" />
33
+          </el-form-item>
34
+          <el-form-item label="附件" prop="document">
35
+            <el-input v-model="form.document" placeholder="请输入附件" type="textarea"
36
+              :disabled="taskName != '技术交底'" :autosize="{ minRows: 8 }" />
37
+          </el-form-item>
38
+          <el-form-item label="技术交底意见" prop="disclosureComment">
39
+            <el-input v-model="form.disclosureComment" placeholder="请输入技术交底意见" type="textarea"
40
+              :disabled="taskName != '技术交底'" :autosize="{ minRows: 4 }" />
41
+          </el-form-item>
42
+          <el-row>
43
+            <el-col :span="6" :xs="24" :offset="12">
44
+              <el-form-item label="签名" prop="disclosurer">
45
+                <span class="auditor"> {{ form.disclosurerUser ? form.disclosurerUser.nickName : disclosurerUser }}
46
+                </span>
47
+              </el-form-item>
48
+            </el-col>
49
+            <el-col :span="6">
50
+              <el-form-item label="日期:" label-width="120px">
51
+                <span> {{ parseTime(form.disclosureTime, '{y}-{m}-{d}') }} </span>
52
+              </el-form-item>
53
+            </el-col>
54
+          </el-row>
55
+          <el-form-item label="接受交底意见" prop="acceptComment" v-if="taskName != '技术交底'">
56
+            <el-input v-model="form.acceptComment" placeholder="请输入接受交底意见" type="textarea" :autosize="{ minRows: 4 }"
57
+              :disabled="taskName == ''" />
58
+          </el-form-item>
59
+          <el-row>
60
+            <el-col :span="6" :xs="24" :offset="12">
61
+              <el-form-item label="签名" v-if="taskName != '技术交底'">
62
+                <span class="auditor"> {{ form.accepterUser ? form.accepterUser.nickName : accepterUser }} </span>
63
+              </el-form-item>
64
+            </el-col>
65
+            <el-col :span="6">
66
+              <el-form-item label="日期:" label-width="120px" v-if="taskName != '技术交底'">
67
+                <span> {{ parseTime(form.acceptTime, '{y}-{m}-{d}') }} </span>
68
+              </el-form-item>
69
+            </el-col>
70
+          </el-row>
71
+        </el-form>
72
+        <div style="text-align: center;" v-if="taskName">
73
+          <el-button type="primary" @click="submitForm">提 交</el-button>
74
+        </div>
75
+      </el-col>
76
+      <el-col :span="6" :xs="24">
77
+        <el-card>
78
+          <h2 style="text-align: center;">流程进度</h2>
79
+          <div>
80
+            <flow :flowData="flowData" />
81
+          </div>
82
+        </el-card>
83
+      </el-col>
84
+    </el-row>
85
+  </div>
86
+</template>
87
+
88
+<script>
89
+import { listTechnical, getTechnical, delTechnical, addTechnical, updateTechnical } from "@/api/oa/technical/technical";
90
+import { getProject } from "@/api/oa/project/project";
91
+import { listUser } from '@/api/system/user';
92
+import flow from '@/views/flowable/task/todo/detail/flow';
93
+import { complete, getNextFlowNode } from "@/api/flowable/todo";
94
+import { flowXmlAndNode } from "@/api/flowable/definition";
95
+
96
+export default {
97
+  components: {
98
+    flow
99
+  },
100
+  name: "Technical",
101
+  props: {
102
+    taskName: {
103
+      type: String,
104
+      required: true
105
+    },
106
+    taskForm: {
107
+      type: Object,
108
+      required: true
109
+    }
110
+  },
111
+  data() {
112
+    return {
113
+      disclosurerUser: '',
114
+      accepterUser: '',
115
+      // 遮罩层
116
+      loading: true,
117
+      // 选中数组
118
+      ids: [],
119
+      // 非单个禁用
120
+      single: true,
121
+      // 非多个禁用
122
+      multiple: true,
123
+      // 显示搜索条件
124
+      showSearch: true,
125
+      // 总条数
126
+      total: 0,
127
+      // cmc技术交底表格数据
128
+      technicalList: [],
129
+      // 弹出层标题
130
+      title: "",
131
+      // 是否显示弹出层
132
+      open: false,
133
+      // 查询参数
134
+      queryParams: {
135
+        pageNum: 1,
136
+        pageSize: 10,
137
+        projectId: null,
138
+        disclosureAccepter: null,
139
+        disclosurer: null,
140
+        content: null,
141
+        document: null,
142
+        disclosureComment: null,
143
+        disclosureTime: null,
144
+        acceptTime: null
145
+      },
146
+      userList: [],
147
+      chooseProject: {},
148
+      isSelect: false,
149
+      // 表单参数
150
+      form: {
151
+        user: {
152
+          nickName: '',
153
+        }
154
+      },
155
+      // 表单校验
156
+      rules: {},
157
+      formTotal: 0,
158
+      flowData: {}
159
+    };
160
+  },
161
+  created() {
162
+    this.getProjectById();
163
+    this.getUserList();
164
+    this.getList();
165
+    flowXmlAndNode({ procInsId: this.taskForm.procInsId, deployId: this.taskForm.deployId }).then(res => {
166
+      this.flowData = res.data;
167
+    })
168
+  },
169
+  mounted() {
170
+    this.initRules();
171
+    this.initForm();
172
+  },
173
+  methods: {
174
+    initRules() {
175
+      if (this.taskName == '技术交底') {
176
+        this.rules = {
177
+          disclosureComment: [
178
+            { required: true, message: '请输入技术交底意见', trigger: 'blur' },
179
+          ],
180
+        }
181
+      }
182
+      else if (this.taskName == '接受交底') {
183
+        this.rules = {
184
+          acceptComment: [
185
+            { required: true, message: '请输入接受交底意见', trigger: 'blur' },
186
+          ],
187
+        }
188
+      }
189
+    },
190
+    initForm() {
191
+      getTechnical(this.taskForm.formId).then(res => {
192
+        if (this.isEmptyObject(res.data)) {
193
+          this.formTotal = 0;
194
+          this.form.disclosurer = this.$store.getters.userId;
195
+          this.disclosurerUser = this.$store.getters.name;
196
+          this.form.disclosureTime = new Date();
197
+        }
198
+        else {
199
+          this.formTotal = 1;
200
+          this.form = res.data;
201
+          this.accepterUser = this.$store.getters.name;
202
+          this.form.acceptTime = new Date();
203
+        }
204
+      })
205
+    },
206
+    // 查询项目
207
+    getProjectById() {
208
+      getProject(this.taskForm.formId).then(response => {
209
+        this.chooseProject = response.data;
210
+        this.isSelect = true;
211
+        this.form.disclosureAccepter = response.data.projectLeader;
212
+      });
213
+    },
214
+    // 查询用户列表
215
+    getUserList() {
216
+      listUser({ pageSize: 9999, pageNum: 1 }).then(res => {
217
+        this.userList = res.rows
218
+      })
219
+    },
220
+    /** 查询cmc技术交底列表 */
221
+    getList() {
222
+      this.loading = true;
223
+      listTechnical(this.queryParams).then(response => {
224
+        this.technicalList = response.rows;
225
+        this.total = response.total;
226
+        this.loading = false;
227
+      });
228
+    },
229
+    // 取消按钮
230
+    cancel() {
231
+      this.open = false;
232
+      this.reset();
233
+    },
234
+    isEmptyObject(obj) {
235
+      for (var key in obj) {
236
+        if (obj.hasOwnProperty(key)) {
237
+          return false;
238
+        }
239
+      }
240
+      return true;
241
+    },
242
+    // 表单重置
243
+    reset() {
244
+      this.form = {
245
+        technicalId: null,
246
+        projectId: null,
247
+        disclosureAccepter: null,
248
+        disclosurer: null,
249
+        content: null,
250
+        document: null,
251
+        disclosureComment: null,
252
+        disclosureTime: null,
253
+        acceptTime: null
254
+      };
255
+      this.resetForm("form");
256
+    },
257
+    /** 搜索按钮操作 */
258
+    handleQuery() {
259
+      this.queryParams.pageNum = 1;
260
+      this.getList();
261
+    },
262
+    /** 重置按钮操作 */
263
+    resetQuery() {
264
+      this.resetForm("queryForm");
265
+      this.handleQuery();
266
+    },
267
+    // 多选框选中数据
268
+    handleSelectionChange(selection) {
269
+      this.ids = selection.map(item => item.technicalId)
270
+      this.single = selection.length !== 1
271
+      this.multiple = !selection.length
272
+    },
273
+    /** 新增按钮操作 */
274
+    handleAdd() {
275
+      this.reset();
276
+      this.open = true;
277
+      this.title = "添加cmc技术交底";
278
+    },
279
+    /** 修改按钮操作 */
280
+    handleUpdate(row) {
281
+      this.reset();
282
+      const technicalId = row.technicalId || this.ids
283
+      getTechnical(technicalId).then(response => {
284
+        this.form = response.data;
285
+        this.open = true;
286
+        this.title = "修改cmc技术交底";
287
+      });
288
+    },
289
+    /** 提交按钮 */
290
+    submitForm() {
291
+      this.$refs["form"].validate(valid => {
292
+        if (valid) {
293
+          if (this.formTotal != 0) {
294
+            updateTechnical(this.form).then(response => {
295
+              this.$modal.msgSuccess("修改成功");
296
+              this.open = false;
297
+              this.getList();
298
+            });
299
+            const params = { taskId: this.taskForm.taskId };
300
+            getNextFlowNode(params).then(res => {
301
+              complete(this.taskForm).then(response => {
302
+                this.$modal.msgSuccess(response.msg);
303
+                this.$emit('goBack')
304
+              });
305
+            })
306
+          } else {
307
+            this.form.technicalId = this.taskForm.formId;
308
+            this.form.projectId = this.taskForm.formId;
309
+            addTechnical(this.form).then(response => {
310
+              this.$modal.msgSuccess("新增成功");
311
+              this.open = false;
312
+              this.getList();
313
+            });
314
+            const params = { taskId: this.taskForm.taskId };
315
+            getNextFlowNode(params).then(res => {
316
+              this.$set(this.taskForm.variables, "formId", this.taskForm.formId);
317
+              this.$set(this.taskForm.variables, "approval", this.form.disclosureAccepter);
318
+              complete(this.taskForm).then(response => {
319
+                this.$modal.msgSuccess(response.msg);
320
+                this.$emit('goBack')
321
+              });
322
+            })
323
+          }
324
+        }
325
+      });
326
+    },
327
+    /** 删除按钮操作 */
328
+    handleDelete(row) {
329
+      const technicalIds = row.technicalId || this.ids;
330
+      this.$modal.confirm('是否确认删除cmc技术交底编号为"' + technicalIds + '"的数据项?').then(function () {
331
+        return delTechnical(technicalIds);
332
+      }).then(() => {
333
+        this.getList();
334
+        this.$modal.msgSuccess("删除成功");
335
+      }).catch(() => { });
336
+    },
337
+    /** 导出按钮操作 */
338
+    handleExport() {
339
+      this.download('oa/technical/export', {
340
+        ...this.queryParams
341
+      }, `technical_${new Date().getTime()}.xlsx`)
342
+    }
343
+  }
344
+};
345
+</script>
346
+
347
+<style lang="scss" scoped>
348
+@import "@/assets/styles/element-reset.scss";
349
+</style>

+ 2
- 2
oa-ui/src/views/flowable/form/technicalPlan.vue 查看文件

120
               </el-link>
120
               </el-link>
121
             </div>
121
             </div>
122
           </el-form-item>
122
           </el-form-item>
123
-          <el-form-item label="技术部审核意见" prop="technicalComment">
124
-            <el-input type="textarea" v-model="form.technicalComment" :autosize="{ minRows: 4 }" placeholder="请输入技术审核意见"
123
+          <el-form-item label="技术质量与安全部审核意见" prop="technicalComment">
124
+            <el-input type="textarea" v-model="form.technicalComment" :autosize="{ minRows: 4 }" placeholder="请输入技术质量与安全部审核意见"
125
               :disabled="taskName != '技术审核'" />
125
               :disabled="taskName != '技术审核'" />
126
           </el-form-item>
126
           </el-form-item>
127
           <el-row>
127
           <el-row>

+ 3
- 3
oa-ui/src/views/flowable/task/myProcess/index.vue 查看文件

1
 <!--
1
 <!--
2
  * @Author: ysh
2
  * @Author: ysh
3
  * @Date: 2024-01-03 09:23:11
3
  * @Date: 2024-01-03 09:23:11
4
- * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2024-06-19 16:29:56
4
+ * @LastEditors: wrh
5
+ * @LastEditTime: 2024-07-04 13:06:15
6
 -->
6
 -->
7
 <template>
7
 <template>
8
   <div class="app-container">
8
   <div class="app-container">
476
     },
476
     },
477
     // 子流程不可以删除
477
     // 子流程不可以删除
478
     beDeleted(row) {
478
     beDeleted(row) {
479
-      if (row.procDefName == '项目预算' || row.procDefName == '技术方案' || row.procDefName == '安全交底' || row.finishTime != null) {
479
+      if (row.procDefName == '项目预算' || row.procDefName == '技术方案' || row.procDefName == '安全交底' || row.procDefName == '技术交底' || row.finishTime != null) {
480
         return true
480
         return true
481
       } else if (row.procDefName == '项目流转' && row.taskName != '项目登记') {
481
       } else if (row.procDefName == '项目流转' && row.taskName != '项目登记') {
482
         return true
482
         return true

+ 3
- 3
oa-ui/src/views/flowable/task/myProcess/progressTree.vue 查看文件

1
 <!--
1
 <!--
2
  * @Author: ysh
2
  * @Author: ysh
3
  * @Date: 2024-04-18 15:14:45
3
  * @Date: 2024-04-18 15:14:45
4
- * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2024-06-03 14:49:25
4
+ * @LastEditors: wrh
5
+ * @LastEditTime: 2024-07-04 13:06:39
6
 -->
6
 -->
7
 <template>
7
 <template>
8
   <div>
8
   <div>
80
           this.treeData[0].children.push(i);
80
           this.treeData[0].children.push(i);
81
         }
81
         }
82
         else if (i.category == "project") {
82
         else if (i.category == "project") {
83
-          if (i.name != "项目预算" && i.name != "安全交底" && i.name != "技术方案")
83
+          if (i.name != "项目预算" && i.name != "安全交底" && i.name != "技术交底" && i.name != "技术方案")
84
             this.treeData[1].children.push(i);
84
             this.treeData[1].children.push(i);
85
         } else if (i.category == "finance") {
85
         } else if (i.category == "finance") {
86
           this.treeData[2].children.push(i);
86
           this.treeData[2].children.push(i);

+ 5
- 5
oa-ui/src/views/flowable/task/todo/detail/index.vue 查看文件

1
 <!--
1
 <!--
2
  * @Author: ysh
2
  * @Author: ysh
3
  * @Date: 2024-01-03 09:23:11
3
  * @Date: 2024-01-03 09:23:11
4
- * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2024-05-27 14:54:08
4
+ * @LastEditors: wrh
5
+ * @LastEditTime: 2024-07-04 13:07:30
6
 -->
6
 -->
7
 <template>
7
 <template>
8
   <div class="app-container">
8
   <div class="app-container">
478
     // 是否显示审批通过
478
     // 是否显示审批通过
479
     isShowApprove() {
479
     isShowApprove() {
480
       if (this.taskName == '员工填报' || this.taskForm.procDefName == '用车审批' || this.taskForm.procDefName == '设备审批' || this.taskForm.procDefName == '项目流转'
480
       if (this.taskName == '员工填报' || this.taskForm.procDefName == '用车审批' || this.taskForm.procDefName == '设备审批' || this.taskForm.procDefName == '项目流转'
481
-        || (this.taskForm.procDefName == '项目预算' && this.taskName != '预算审核') || this.taskForm.procDefName == '借款审批' || this.taskForm.procDefName == '安全交底' || this.taskForm.procDefName == '技术方案'
482
-        || this.taskForm.procDefName == '承接合同评审' || this.taskForm.procDefName == '分包合同评审' || this.taskForm.procDefName == '品牌项目支付' || this.taskForm.procDefName == '保证金审批'
483
-        || this.taskForm.procDefName == '成果归档' || this.taskForm.procDefName == '项目结算') {
481
+        || (this.taskForm.procDefName == '项目预算' && this.taskName != '预算审核') || this.taskForm.procDefName == '借款审批' || this.taskForm.procDefName == '安全交底' ||
482
+        this.taskForm.procDefName == '技术交底' || this.taskForm.procDefName == '技术方案' || this.taskForm.procDefName == '承接合同评审' || this.taskForm.procDefName == '分包合同评审'
483
+        || this.taskForm.procDefName == '品牌项目支付' || this.taskForm.procDefName == '保证金审批' || this.taskForm.procDefName == '成果归档' || this.taskForm.procDefName == '项目结算') {
484
         return false
484
         return false
485
       } else {
485
       } else {
486
         return true
486
         return true

+ 9
- 9
oa-ui/src/views/oa/archive/index.vue 查看文件

48
       <el-table-column label="项目负责人" align="center" prop="leaderUser.nickName" />
48
       <el-table-column label="项目负责人" align="center" prop="leaderUser.nickName" />
49
       <el-table-column label="生产部门检查员" align="center" prop="produceUser.nickName" />
49
       <el-table-column label="生产部门检查员" align="center" prop="produceUser.nickName" />
50
       <el-table-column label="质量检查员" align="center" prop="qualityUser.nickName" />
50
       <el-table-column label="质量检查员" align="center" prop="qualityUser.nickName" />
51
-      <el-table-column label="技术部负责人" align="center" prop="deptUser.nickName" />
51
+      <el-table-column label="技术质量与安全部负责人" align="center" prop="deptUser.nickName" />
52
       <el-table-column label="归档人" align="center" prop="archiverUser.nickName" />
52
       <el-table-column label="归档人" align="center" prop="archiverUser.nickName" />
53
       <el-table-column label="成果提交日期" align="center" prop="submitTime" width="180">
53
       <el-table-column label="成果提交日期" align="center" prop="submitTime" width="180">
54
         <template slot-scope="scope">
54
         <template slot-scope="scope">
70
           <span>{{ parseTime(scope.row.produceTime, '{y}-{m}-{d}') }}</span>
70
           <span>{{ parseTime(scope.row.produceTime, '{y}-{m}-{d}') }}</span>
71
         </template>
71
         </template>
72
       </el-table-column>
72
       </el-table-column>
73
-      <el-table-column label="技术部审核时间" align="center" prop="deptTime" width="180">
73
+      <el-table-column label="技术质量与安全部审核时间" align="center" prop="deptTime" width="180">
74
         <template slot-scope="scope">
74
         <template slot-scope="scope">
75
           <span>{{ parseTime(scope.row.deptTime, '{y}-{m}-{d}') }}</span>
75
           <span>{{ parseTime(scope.row.deptTime, '{y}-{m}-{d}') }}</span>
76
         </template>
76
         </template>
82
       </el-table-column>
82
       </el-table-column>
83
       <!-- <el-table-column label="生产部门意见" align="center" prop="produceComment" />
83
       <!-- <el-table-column label="生产部门意见" align="center" prop="produceComment" />
84
       <el-table-column label="质量检查意见" align="center" prop="qualityComment" />
84
       <el-table-column label="质量检查意见" align="center" prop="qualityComment" />
85
-      <el-table-column label="技术部审核意见" align="center" prop="deptComment" />
85
+      <el-table-column label="技术质量与安全部审核意见" align="center" prop="deptComment" />
86
       <el-table-column label="归档审核意见" align="center" prop="archiveComment" /> -->
86
       <el-table-column label="归档审核意见" align="center" prop="archiveComment" /> -->
87
       <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
87
       <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
88
         <template slot-scope="scope">
88
         <template slot-scope="scope">
121
         <el-form-item label="质量检查员" prop="qualityInspector">
121
         <el-form-item label="质量检查员" prop="qualityInspector">
122
           <el-input v-model="form.qualityInspector" placeholder="请输入质量检查员" />
122
           <el-input v-model="form.qualityInspector" placeholder="请输入质量检查员" />
123
         </el-form-item>
123
         </el-form-item>
124
-        <el-form-item label="技术部负责人" prop="deptLeader">
125
-          <el-input v-model="form.deptLeader" placeholder="请输入技术部负责人" />
124
+        <el-form-item label="技术质量与安全部负责人" prop="deptLeader">
125
+          <el-input v-model="form.deptLeader" placeholder="请输入技术质量与安全部负责人" />
126
         </el-form-item>
126
         </el-form-item>
127
         <el-form-item label="归档人" prop="archiver">
127
         <el-form-item label="归档人" prop="archiver">
128
           <el-input v-model="form.archiver" placeholder="请输入归档人" />
128
           <el-input v-model="form.archiver" placeholder="请输入归档人" />
142
             placeholder="请选择生产部门检查时间">
142
             placeholder="请选择生产部门检查时间">
143
           </el-date-picker>
143
           </el-date-picker>
144
         </el-form-item>
144
         </el-form-item>
145
-        <el-form-item label="技术部审核时间" prop="deptTime">
145
+        <el-form-item label="技术质量与安全部审核时间" prop="deptTime">
146
           <el-date-picker clearable v-model="form.deptTime" type="date" value-format="yyyy-MM-dd"
146
           <el-date-picker clearable v-model="form.deptTime" type="date" value-format="yyyy-MM-dd"
147
-            placeholder="请选择技术部审核时间">
147
+            placeholder="请选择技术质量与安全部审核时间">
148
           </el-date-picker>
148
           </el-date-picker>
149
         </el-form-item>
149
         </el-form-item>
150
         <el-form-item label="归档时间" prop="archiveTime">
150
         <el-form-item label="归档时间" prop="archiveTime">
158
         <el-form-item label="质量检查意见" prop="qualityComment">
158
         <el-form-item label="质量检查意见" prop="qualityComment">
159
           <el-input v-model="form.qualityComment" placeholder="请输入质量检查意见" />
159
           <el-input v-model="form.qualityComment" placeholder="请输入质量检查意见" />
160
         </el-form-item>
160
         </el-form-item>
161
-        <el-form-item label="技术部审核意见" prop="deptComment">
162
-          <el-input v-model="form.deptComment" placeholder="请输入技术部审核意见" />
161
+        <el-form-item label="技术质量与安全部审核意见" prop="deptComment">
162
+          <el-input v-model="form.deptComment" placeholder="请输入技术质量与安全部审核意见" />
163
         </el-form-item>
163
         </el-form-item>
164
         <el-form-item label="归档审核意见" prop="archiveComment">
164
         <el-form-item label="归档审核意见" prop="archiveComment">
165
           <el-input v-model="form.archiveComment" placeholder="请输入归档审核意见" />
165
           <el-input v-model="form.archiveComment" placeholder="请输入归档审核意见" />

+ 11
- 9
oa-ui/src/views/oa/contract/index.vue 查看文件

2
  * @Author: ysh
2
  * @Author: ysh
3
  * @Date: 2024-03-18 09:05:41
3
  * @Date: 2024-03-18 09:05:41
4
  * @LastEditors: wrh
4
  * @LastEditors: wrh
5
- * @LastEditTime: 2024-06-27 11:21:23
5
+ * @LastEditTime: 2024-07-03 11:33:28
6
 -->
6
 -->
7
 <template>
7
 <template>
8
   <div class="app-container">
8
   <div class="app-container">
62
     </el-row>
62
     </el-row>
63
 
63
 
64
     <el-table v-loading="loading" border :data="contractList" @selection-change="handleSelectionChange">
64
     <el-table v-loading="loading" border :data="contractList" @selection-change="handleSelectionChange">
65
-      <el-table-column type="selection" width="55" align="center" />
66
       <!-- <el-table-column label="合同id" align="center" prop="contractId" /> -->
65
       <!-- <el-table-column label="合同id" align="center" prop="contractId" /> -->
67
-      <el-table-column label="甲方单位" align="center" prop="partyA.partyAName" width="220px" />
66
+      <el-table-column type="index" label="序号" width="55" align="center" />
68
       <el-table-column label="合同名称" align="center" prop="contractName" width="220px" />
67
       <el-table-column label="合同名称" align="center" prop="contractName" width="220px" />
68
+      <el-table-column label="合同金额" align="center" prop="amount" />
69
+      <el-table-column label="甲方单位" align="center" prop="partyA.partyAName" width="220px" />
69
       <el-table-column label="合同编码" align="center" prop="contractCode" />
70
       <el-table-column label="合同编码" align="center" prop="contractCode" />
70
       <el-table-column label="合同编号" align="center" prop="contractNumber" />
71
       <el-table-column label="合同编号" align="center" prop="contractNumber" />
71
-      <el-table-column label="合同金额" align="center" prop="amount" />
72
-      <el-table-column label="履约保证金" align="center" prop="deposit" />
72
+      <!-- <el-table-column label="履约保证金" align="center" prop="deposit" /> -->
73
       <el-table-column label="合同文件" align="center" prop="contractDocument" show-overflow-tooltip>
73
       <el-table-column label="合同文件" align="center" prop="contractDocument" show-overflow-tooltip>
74
         <template slot-scope="scope">
74
         <template slot-scope="scope">
75
           <el-link type="primary" @click="reviewWord(`${baseUrl}${'/profile/upload' + scope.row.contractDocument}`)">
75
           <el-link type="primary" @click="reviewWord(`${baseUrl}${'/profile/upload' + scope.row.contractDocument}`)">
77
           </el-link>
77
           </el-link>
78
         </template>
78
         </template>
79
       </el-table-column>
79
       </el-table-column>
80
-      <!-- <el-table-column label="拟稿日期" align="center" prop="draftTime" width="180">
80
+      <el-table-column label="拟稿日期" align="center" prop="draftTime" width="180">
81
         <template slot-scope="scope">
81
         <template slot-scope="scope">
82
           <span>{{ parseTime(scope.row.draftTime, '{y}-{m}-{d}') }}</span>
82
           <span>{{ parseTime(scope.row.draftTime, '{y}-{m}-{d}') }}</span>
83
         </template>
83
         </template>
84
-      </el-table-column> -->
84
+      </el-table-column>
85
       <el-table-column label="签订日期" align="center" prop="signDate" width="180">
85
       <el-table-column label="签订日期" align="center" prop="signDate" width="180">
86
         <template slot-scope="scope">
86
         <template slot-scope="scope">
87
           <span>{{ parseTime(scope.row.signDate, '{y}-{m}-{d}') }}</span>
87
           <span>{{ parseTime(scope.row.signDate, '{y}-{m}-{d}') }}</span>
97
       </el-table-column>
97
       </el-table-column>
98
       <el-table-column label="评审方式" align="center" prop="commentType">
98
       <el-table-column label="评审方式" align="center" prop="commentType">
99
         <template slot-scope="scope">
99
         <template slot-scope="scope">
100
-          {{ getCommentType(scope.row.commentType) }}
100
+          <el-tag :type="scope.row.commentType == '2' ? 'success' : 'warning'">
101
+            {{ getCommentType(scope.row.commentType) }}
102
+          </el-tag>
101
         </template>
103
         </template>
102
       </el-table-column>
104
       </el-table-column>
103
-      <el-table-column label="合同备注" align="center" prop="remark" />
105
+      <!-- <el-table-column label="合同备注" align="center" prop="remark" /> -->
104
       <el-table-column label="拟稿人" align="center" prop="drafter">
106
       <el-table-column label="拟稿人" align="center" prop="drafter">
105
         <template slot-scope="scope">
107
         <template slot-scope="scope">
106
           {{ getUserName(scope.row.drafter) }}
108
           {{ getUserName(scope.row.drafter) }}

+ 13
- 6
oa-ui/src/views/oa/contract/subContract.vue 查看文件

40
       <el-table-column label="分包合同金额" align="center" prop="subAmount" />
40
       <el-table-column label="分包合同金额" align="center" prop="subAmount" />
41
       <el-table-column label="承接单位" align="center" prop="partner.partnerName" />
41
       <el-table-column label="承接单位" align="center" prop="partner.partnerName" />
42
       <!-- <el-table-column label="承接单位联系人" align="center" prop="contactPerson" /> -->
42
       <!-- <el-table-column label="承接单位联系人" align="center" prop="contactPerson" /> -->
43
-      <el-table-column label="拟稿人" align="center" prop="drafter">
43
+      <el-table-column label="合同文件" align="center" prop="contractDocument" show-overflow-tooltip>
44
         <template slot-scope="scope">
44
         <template slot-scope="scope">
45
-          {{ getUserName(scope.row.drafter) }}
45
+          <el-link type="primary" @click="reviewWord(`${baseUrl}${'/profile/upload' + scope.row.contractDocument}`)">
46
+            {{ getFileName(scope.row.contractDocument) }}
47
+          </el-link>
46
         </template>
48
         </template>
47
       </el-table-column>
49
       </el-table-column>
48
-
49
       <el-table-column label="拟稿日期" align="center" prop="draftTime" width="180">
50
       <el-table-column label="拟稿日期" align="center" prop="draftTime" width="180">
50
         <template slot-scope="scope">
51
         <template slot-scope="scope">
51
           <span>{{ parseTime(scope.row.draftTime, '{y}-{m}-{d}') }}</span>
52
           <span>{{ parseTime(scope.row.draftTime, '{y}-{m}-{d}') }}</span>
52
         </template>
53
         </template>
53
       </el-table-column>
54
       </el-table-column>
54
-      <el-table-column label="合同备注" align="center" prop="remark" />
55
+      <!-- <el-table-column label="合同备注" align="center" prop="remark" /> -->
55
       <el-table-column label="签订日期" align="center" prop="signDate" width="180">
56
       <el-table-column label="签订日期" align="center" prop="signDate" width="180">
56
         <template slot-scope="scope">
57
         <template slot-scope="scope">
57
           <span>{{ parseTime(scope.row.signDate, '{y}-{m}-{d}') }}</span>
58
           <span>{{ parseTime(scope.row.signDate, '{y}-{m}-{d}') }}</span>
58
         </template>
59
         </template>
59
       </el-table-column>
60
       </el-table-column>
60
-      <el-table-column label="签订备注" align="center" prop="signRemark" />
61
+      <!-- <el-table-column label="签订备注" align="center" prop="signRemark" /> -->
61
       <el-table-column label="签订扫描件" align="center" prop="signScan">
62
       <el-table-column label="签订扫描件" align="center" prop="signScan">
62
         <template slot-scope="scope">
63
         <template slot-scope="scope">
63
           <el-link type="primary" @click="reviewWord(`${baseUrl}${'/profile/upload' + scope.row.signScan}`)">
64
           <el-link type="primary" @click="reviewWord(`${baseUrl}${'/profile/upload' + scope.row.signScan}`)">
72
           </el-tag>
73
           </el-tag>
73
         </template>
74
         </template>
74
       </el-table-column>
75
       </el-table-column>
76
+      <el-table-column label="拟稿人" align="center" prop="drafter">
77
+        <template slot-scope="scope">
78
+          {{ getUserName(scope.row.drafter) }}
79
+        </template>
80
+      </el-table-column>
81
+
75
       <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
82
       <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
76
         <template slot-scope="scope">
83
         <template slot-scope="scope">
77
           <el-button size="mini" type="text" icon="el-icon-view" @click="handleView(scope.row)"
84
           <el-button size="mini" type="text" icon="el-icon-view" @click="handleView(scope.row)"
129
     </el-dialog>
136
     </el-dialog>
130
 
137
 
131
     <el-dialog :title="title" :visible.sync="openInfo" append-to-body width="70%">
138
     <el-dialog :title="title" :visible.sync="openInfo" append-to-body width="70%">
132
-      <sub-contract :taskForm="taskForm" :flowDisabled="false"></sub-contract>
139
+      <sub-contract :taskForm="taskForm" :taskName="''" :flowDisabled="false"></sub-contract>
133
     </el-dialog>
140
     </el-dialog>
134
   </div>
141
   </div>
135
 </template>
142
 </template>

+ 235
- 0
oa-ui/src/views/oa/manage/index.vue 查看文件

1
+<template>
2
+  <div class="app-container">
3
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
4
+      <el-form-item>
5
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
6
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
7
+      </el-form-item>
8
+    </el-form>
9
+
10
+    <el-row :gutter="10" class="mb8">
11
+      <el-col :span="1.5">
12
+        <el-button
13
+          type="primary"
14
+          plain
15
+          icon="el-icon-plus"
16
+          size="mini"
17
+          @click="handleAdd"
18
+          v-hasPermi="['oa:manageDept:add']"
19
+        >新增</el-button>
20
+      </el-col>
21
+      <el-col :span="1.5">
22
+        <el-button
23
+          type="success"
24
+          plain
25
+          icon="el-icon-edit"
26
+          size="mini"
27
+          :disabled="single"
28
+          @click="handleUpdate"
29
+          v-hasPermi="['oa:manageDept:edit']"
30
+        >修改</el-button>
31
+      </el-col>
32
+      <el-col :span="1.5">
33
+        <el-button
34
+          type="danger"
35
+          plain
36
+          icon="el-icon-delete"
37
+          size="mini"
38
+          :disabled="multiple"
39
+          @click="handleDelete"
40
+          v-hasPermi="['oa:manageDept:remove']"
41
+        >删除</el-button>
42
+      </el-col>
43
+      <el-col :span="1.5">
44
+        <el-button
45
+          type="warning"
46
+          plain
47
+          icon="el-icon-download"
48
+          size="mini"
49
+          @click="handleExport"
50
+          v-hasPermi="['oa:manageDept:export']"
51
+        >导出</el-button>
52
+      </el-col>
53
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
54
+    </el-row>
55
+
56
+    <el-table v-loading="loading" :data="manageDeptList" @selection-change="handleSelectionChange">
57
+      <el-table-column type="selection" width="55" align="center" />
58
+      <el-table-column label="分管领导id" align="center" prop="userId" />
59
+      <el-table-column label="分管部门id" align="center" prop="deptId" />
60
+      <el-table-column label="院内对接单位" align="center" prop="partyAId" />
61
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
62
+        <template slot-scope="scope">
63
+          <el-button
64
+            size="mini"
65
+            type="text"
66
+            icon="el-icon-edit"
67
+            @click="handleUpdate(scope.row)"
68
+            v-hasPermi="['oa:manageDept:edit']"
69
+          >修改</el-button>
70
+          <el-button
71
+            size="mini"
72
+            type="text"
73
+            icon="el-icon-delete"
74
+            @click="handleDelete(scope.row)"
75
+            v-hasPermi="['oa:manageDept:remove']"
76
+          >删除</el-button>
77
+        </template>
78
+      </el-table-column>
79
+    </el-table>
80
+    
81
+    <pagination
82
+      v-show="total>0"
83
+      :total="total"
84
+      :page.sync="queryParams.pageNum"
85
+      :limit.sync="queryParams.pageSize"
86
+      @pagination="getList"
87
+    />
88
+
89
+    <!-- 添加或修改cmc领导分管对话框 -->
90
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
91
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
92
+      </el-form>
93
+      <div slot="footer" class="dialog-footer">
94
+        <el-button type="primary" @click="submitForm">确 定</el-button>
95
+        <el-button @click="cancel">取 消</el-button>
96
+      </div>
97
+    </el-dialog>
98
+  </div>
99
+</template>
100
+
101
+<script>
102
+import { listManageDept, getManageDept, delManageDept, addManageDept, updateManageDept } from "@/api/oa/manage/manageDept";
103
+
104
+export default {
105
+  name: "ManageDept",
106
+  data() {
107
+    return {
108
+      // 遮罩层
109
+      loading: true,
110
+      // 选中数组
111
+      ids: [],
112
+      // 非单个禁用
113
+      single: true,
114
+      // 非多个禁用
115
+      multiple: true,
116
+      // 显示搜索条件
117
+      showSearch: true,
118
+      // 总条数
119
+      total: 0,
120
+      // cmc领导分管表格数据
121
+      manageDeptList: [],
122
+      // 弹出层标题
123
+      title: "",
124
+      // 是否显示弹出层
125
+      open: false,
126
+      // 查询参数
127
+      queryParams: {
128
+        pageNum: 1,
129
+        pageSize: 10,
130
+      },
131
+      // 表单参数
132
+      form: {},
133
+      // 表单校验
134
+      rules: {
135
+      }
136
+    };
137
+  },
138
+  created() {
139
+    this.getList();
140
+  },
141
+  methods: {
142
+    /** 查询cmc领导分管列表 */
143
+    getList() {
144
+      this.loading = true;
145
+      listManageDept(this.queryParams).then(response => {
146
+        this.manageDeptList = response.rows;
147
+        this.total = response.total;
148
+        this.loading = false;
149
+      });
150
+    },
151
+    // 取消按钮
152
+    cancel() {
153
+      this.open = false;
154
+      this.reset();
155
+    },
156
+    // 表单重置
157
+    reset() {
158
+      this.form = {
159
+        userId: null,
160
+        deptId: null,
161
+        partyAId: null
162
+      };
163
+      this.resetForm("form");
164
+    },
165
+    /** 搜索按钮操作 */
166
+    handleQuery() {
167
+      this.queryParams.pageNum = 1;
168
+      this.getList();
169
+    },
170
+    /** 重置按钮操作 */
171
+    resetQuery() {
172
+      this.resetForm("queryForm");
173
+      this.handleQuery();
174
+    },
175
+    // 多选框选中数据
176
+    handleSelectionChange(selection) {
177
+      this.ids = selection.map(item => item.userId)
178
+      this.single = selection.length!==1
179
+      this.multiple = !selection.length
180
+    },
181
+    /** 新增按钮操作 */
182
+    handleAdd() {
183
+      this.reset();
184
+      this.open = true;
185
+      this.title = "添加cmc领导分管";
186
+    },
187
+    /** 修改按钮操作 */
188
+    handleUpdate(row) {
189
+      this.reset();
190
+      const userId = row.userId || this.ids
191
+      getManageDept(userId).then(response => {
192
+        this.form = response.data;
193
+        this.open = true;
194
+        this.title = "修改cmc领导分管";
195
+      });
196
+    },
197
+    /** 提交按钮 */
198
+    submitForm() {
199
+      this.$refs["form"].validate(valid => {
200
+        if (valid) {
201
+          if (this.form.userId != null) {
202
+            updateManageDept(this.form).then(response => {
203
+              this.$modal.msgSuccess("修改成功");
204
+              this.open = false;
205
+              this.getList();
206
+            });
207
+          } else {
208
+            addManageDept(this.form).then(response => {
209
+              this.$modal.msgSuccess("新增成功");
210
+              this.open = false;
211
+              this.getList();
212
+            });
213
+          }
214
+        }
215
+      });
216
+    },
217
+    /** 删除按钮操作 */
218
+    handleDelete(row) {
219
+      const userIds = row.userId || this.ids;
220
+      this.$modal.confirm('是否确认删除cmc领导分管编号为"' + userIds + '"的数据项?').then(function() {
221
+        return delManageDept(userIds);
222
+      }).then(() => {
223
+        this.getList();
224
+        this.$modal.msgSuccess("删除成功");
225
+      }).catch(() => {});
226
+    },
227
+    /** 导出按钮操作 */
228
+    handleExport() {
229
+      this.download('oa/manageDept/export', {
230
+        ...this.queryParams
231
+      }, `manageDept_${new Date().getTime()}.xlsx`)
232
+    }
233
+  }
234
+};
235
+</script>

+ 4
- 3
oa-ui/src/views/oa/project/info.vue 查看文件

444
       <safe-tab :taskForm="taskForm"></safe-tab>
444
       <safe-tab :taskForm="taskForm"></safe-tab>
445
     </el-dialog>
445
     </el-dialog>
446
     <el-dialog title="技术交底记录表" :visible.sync="openTech" width="1000px" append-to-body>
446
     <el-dialog title="技术交底记录表" :visible.sync="openTech" width="1000px" append-to-body>
447
-      <plan-tab :taskForm="taskForm"></plan-tab>
447
+      <technical-tab :taskForm="taskForm"></technical-tab>
448
     </el-dialog>
448
     </el-dialog>
449
     <el-dialog title="更换项目负责人" :visible.sync="prLeaderOpen" width="1000px" append-to-body>
449
     <el-dialog title="更换项目负责人" :visible.sync="prLeaderOpen" width="1000px" append-to-body>
450
       <choose-people :multiple="false" @chooseUser="changeProjectLeader"></choose-people>
450
       <choose-people :multiple="false" @chooseUser="changeProjectLeader"></choose-people>
466
 import { listCar } from '@/api/oa/car/car';
466
 import { listCar } from '@/api/oa/car/car';
467
 import budgetInfo from '@/views/flowable/form/budget/budgetInfo.vue';
467
 import budgetInfo from '@/views/flowable/form/budget/budgetInfo.vue';
468
 import SafeTab from '@/views/flowable/form/projectProcess/safeTab.vue';
468
 import SafeTab from '@/views/flowable/form/projectProcess/safeTab.vue';
469
-import PlanTab from '@/views/flowable/form/projectProcess/planTab.vue';
469
+import PlanTab from '@/views/flowable/form/projectProcess/technicalTab.vue';
470
+import TechnicalTab from '@/views/flowable/form/projectProcess/planTab.vue';
470
 import SettleData from '@/views/flowable/form/inProgress/settleData.vue';
471
 import SettleData from '@/views/flowable/form/inProgress/settleData.vue';
471
 import BorrowData from '@/views/flowable/form/inProgress/borrowData.vue';
472
 import BorrowData from '@/views/flowable/form/inProgress/borrowData.vue';
472
 import BudgetTab from '@/views/flowable/form/projectProcess/budgetTab.vue';
473
 import BudgetTab from '@/views/flowable/form/projectProcess/budgetTab.vue';
473
 import achiData from "@/views/flowable/form/inProgress/achiData.vue";
474
 import achiData from "@/views/flowable/form/inProgress/achiData.vue";
474
 import choosePeople from '@/views/flowable/form/budget/components/choosePeople.vue'
475
 import choosePeople from '@/views/flowable/form/budget/components/choosePeople.vue'
475
 export default {
476
 export default {
476
-  components: { budgetInfo, SafeTab, PlanTab, SettleData, BorrowData, BudgetTab, achiData, choosePeople },
477
+  components: { budgetInfo, SafeTab, TechnicalTab, PlanTab, SettleData, BorrowData, BudgetTab, achiData, choosePeople },
477
   created() {
478
   created() {
478
     this.getUserList();
479
     this.getUserList();
479
     this.getDeviceList();
480
     this.getDeviceList();

+ 275
- 0
oa-ui/src/views/oa/technical/index.vue 查看文件

1
+<template>
2
+  <div class="app-container">
3
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="120px">
4
+      <el-form-item label="项目编号" prop="projectId">
5
+        <el-select v-model="queryParams.projectId" clearable filterable remote reserve-keyword placeholder="请输入项目编号"
6
+          :remote-method="remoteMethod" :loading="loading" style="width: 400px;">
7
+          <el-option v-for="project in projectList" :key="project.projectId"
8
+            :label="project.projectNumber + '-' + project.projectName" :value="project.projectId">
9
+          </el-option>
10
+        </el-select>
11
+      </el-form-item>
12
+      <el-form-item label="接受交底人" prop="disclosureAccepter">
13
+        <el-select v-model="queryParams.disclosureAccepter" filterable clearable @change="handleQuery">
14
+          <el-option v-for="item in $store.state.user.userList" :key="item.userId" :label="item.nickName"
15
+            :value="item.userId">
16
+          </el-option>
17
+        </el-select>
18
+      </el-form-item>
19
+      <el-form-item>
20
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
21
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
22
+      </el-form-item>
23
+    </el-form>
24
+
25
+    <el-row :gutter="10" class="mb8">      
26
+      <el-col :span="1.5">
27
+        <el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport"
28
+          v-hasPermi="['oa:technical:export']">导出</el-button>
29
+      </el-col>
30
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
31
+    </el-row>
32
+
33
+    <el-table v-loading="loading" :data="technicalList" @selection-change="handleSelectionChange">
34
+      <el-table-column type="index" label="序号" width="55" align="center" />
35
+      <el-table-column label="项目编号" align="center" prop="project.projectNumber" />
36
+      <el-table-column label="项目名称" align="center" prop="project.projectName" />
37
+      <el-table-column label="接受交底人" align="center" prop="accepterUser.nickName" />
38
+      <el-table-column label="技术交底人" align="center" prop="disclosurerUser.nickName" />
39
+      <el-table-column label="技术交底意见" align="center" prop="disclosureComment" width="180" show-overflow-tooltip />
40
+      <el-table-column label="技术交底时间" align="center" prop="disclosureTime" width="180">
41
+        <template slot-scope="scope">
42
+          <span>{{ parseTime(scope.row.disclosureTime, '{y}-{m}-{d}') }}</span>
43
+        </template>
44
+      </el-table-column>
45
+      <el-table-column label="接受交底时间" align="center" prop="acceptTime" width="180">
46
+        <template slot-scope="scope">
47
+          <span>{{ parseTime(scope.row.acceptTime, '{y}-{m}-{d}') }}</span>
48
+        </template>
49
+      </el-table-column>
50
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
51
+        <template slot-scope="scope">
52
+          <el-button size="mini" type="text" icon="el-icon-view" @click="handleView(scope.row)"
53
+            v-hasPermi="['oa:technical:query']">查看</el-button>
54
+        </template>
55
+      </el-table-column>
56
+    </el-table>
57
+
58
+    <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize"
59
+      @pagination="getList" />
60
+
61
+    <!-- 添加或修改cmc技术交底对话框 -->
62
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
63
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
64
+        <el-form-item label="项目id" prop="projectId">
65
+          <el-input v-model="form.projectId" placeholder="请输入项目id" />
66
+        </el-form-item>
67
+        <el-form-item label="接受交底人" prop="disclosureAccepter">
68
+          <el-input v-model="form.disclosureAccepter" placeholder="请输入接受交底人" />
69
+        </el-form-item>
70
+        <el-form-item label="技术交底人" prop="disclosurer">
71
+          <el-input v-model="form.disclosurer" placeholder="请输入技术交底人" />
72
+        </el-form-item>
73
+        <el-form-item label="环境要求" prop="environmentComment">
74
+          <el-input v-model="form.environmentComment" placeholder="请输入环境要求" />
75
+        </el-form-item>
76
+        <el-form-item label="外业要求" prop="outsideComment">
77
+          <el-input v-model="form.outsideComment" placeholder="请输入外业要求" />
78
+        </el-form-item>
79
+        <el-form-item label="内业要求" prop="insideComment">
80
+          <el-input v-model="form.insideComment" placeholder="请输入内业要求" />
81
+        </el-form-item>
82
+        <el-form-item label="技术交底意见" prop="disclosureComment">
83
+          <el-input v-model="form.disclosureComment" placeholder="请输入技术交底意见" />
84
+        </el-form-item>
85
+        <el-form-item label="技术交底时间" prop="disclosureTime">
86
+          <el-date-picker clearable v-model="form.disclosureTime" type="date" value-format="yyyy-MM-dd"
87
+            placeholder="请选择技术交底时间">
88
+          </el-date-picker>
89
+        </el-form-item>
90
+        <el-form-item label="接受交底时间" prop="acceptTime">
91
+          <el-date-picker clearable v-model="form.acceptTime" type="date" value-format="yyyy-MM-dd"
92
+            placeholder="请选择接受交底时间">
93
+          </el-date-picker>
94
+        </el-form-item>
95
+      </el-form>
96
+      <div slot="footer" class="dialog-footer">
97
+        <el-button type="primary" @click="submitForm">确 定</el-button>
98
+        <el-button @click="cancel">取 消</el-button>
99
+      </div>
100
+    </el-dialog>
101
+    <el-dialog :title="title" :visible.sync="infoOpen" width="50%" append-to-body>
102
+      <technical-tab :taskForm="taskForm"></technical-tab>
103
+    </el-dialog>
104
+  </div>
105
+</template>
106
+
107
+<script>
108
+import { listTechnical, getTechnical, delTechnical, addTechnical, updateTechnical } from "@/api/oa/technical/technical";
109
+import { listProject } from '@/api/oa/project/project';
110
+import technicalTab from '../../flowable/form/projectProcess/technicalTab.vue';
111
+
112
+export default {
113
+  name: "Technical",
114
+  components: { technicalTab, },
115
+  data() {
116
+    return {
117
+      // 遮罩层
118
+      loading: true,
119
+      // 选中数组
120
+      ids: [],
121
+      // 非单个禁用
122
+      single: true,
123
+      // 非多个禁用
124
+      multiple: true,
125
+      // 显示搜索条件
126
+      showSearch: true,
127
+      // 总条数
128
+      total: 0,
129
+      // cmc技术交底表格数据
130
+      technicalList: [],
131
+      projectList: [],
132
+      // 弹出层标题
133
+      title: "",
134
+      // 是否显示弹出层
135
+      open: false,
136
+      infoOpen: false,
137
+      // 查询参数
138
+      queryParams: {
139
+        pageNum: 1,
140
+        pageSize: 10,
141
+        projectId: null,
142
+        disclosureAccepter: null,
143
+        disclosurer: null,
144
+        environmentComment: null,
145
+        outsideComment: null,
146
+        insideComment: null,
147
+        disclosureComment: null,
148
+        disclosureTime: null,
149
+        acceptTime: null
150
+      },
151
+      // 表单参数
152
+      form: {},
153
+      taskForm: {
154
+        formId:''
155
+      },
156
+      // 表单校验
157
+      rules: {
158
+      }
159
+    };
160
+  },
161
+  created() {
162
+    this.getList();
163
+  },
164
+  methods: {
165
+    /** 查询cmc技术交底列表 */
166
+    getList() {
167
+      this.loading = true;
168
+      listTechnical(this.queryParams).then(response => {
169
+        this.technicalList = response.rows;
170
+        this.total = response.total;
171
+        this.loading = false;
172
+      });
173
+    },
174
+    remoteMethod(val) {
175
+      listProject({
176
+        pageNum: 1,
177
+        pageSize: 20, 
178
+        projectNumber: val
179
+      }).then(res => {
180
+        this.projectList = res.rows;
181
+      })
182
+    },
183
+    // 取消按钮
184
+    cancel() {
185
+      this.open = false;
186
+      this.reset();
187
+    },
188
+    // 表单重置
189
+    reset() {
190
+      this.form = {
191
+        technicalId: null,
192
+        projectId: null,
193
+        disclosureAccepter: null,
194
+        disclosurer: null,
195
+        disclosureComment: null,
196
+        disclosureTime: null,
197
+        acceptTime: null
198
+      };
199
+      this.resetForm("form");
200
+    },
201
+    /** 搜索按钮操作 */
202
+    handleQuery() {
203
+      this.queryParams.pageNum = 1;
204
+      this.getList();
205
+    },
206
+    /** 重置按钮操作 */
207
+    resetQuery() {
208
+      this.resetForm("queryForm");
209
+      this.handleQuery();
210
+    },
211
+    // 多选框选中数据
212
+    handleSelectionChange(selection) {
213
+      this.ids = selection.map(item => item.technicalId)
214
+      this.single = selection.length !== 1
215
+      this.multiple = !selection.length
216
+    },
217
+    /** 新增按钮操作 */
218
+    handleAdd() {
219
+      this.reset();
220
+      this.open = true;
221
+      this.title = "添加cmc技术交底";
222
+    },
223
+    handleView(row){
224
+      this.taskForm.formId = row.projectId;
225
+      this.infoOpen = true;
226
+    },
227
+    /** 修改按钮操作 */
228
+    handleUpdate(row) {
229
+      this.reset();
230
+      const technicalId = row.technicalId || this.ids
231
+      getTechnical(technicalId).then(response => {
232
+        this.form = response.data;
233
+        this.open = true;
234
+        this.title = "修改cmc技术交底";
235
+      });
236
+    },
237
+    /** 提交按钮 */
238
+    submitForm() {
239
+      this.$refs["form"].validate(valid => {
240
+        if (valid) {
241
+          if (this.form.technicalId != null) {
242
+            updateTechnical(this.form).then(response => {
243
+              this.$modal.msgSuccess("修改成功");
244
+              this.open = false;
245
+              this.getList();
246
+            });
247
+          } else {
248
+            addTechnical(this.form).then(response => {
249
+              this.$modal.msgSuccess("新增成功");
250
+              this.open = false;
251
+              this.getList();
252
+            });
253
+          }
254
+        }
255
+      });
256
+    },
257
+    /** 删除按钮操作 */
258
+    handleDelete(row) {
259
+      const technicalIds = row.technicalId || this.ids;
260
+      this.$modal.confirm('是否确认删除cmc技术交底编号为"' + technicalIds + '"的数据项?').then(function () {
261
+        return delTechnical(technicalIds);
262
+      }).then(() => {
263
+        this.getList();
264
+        this.$modal.msgSuccess("删除成功");
265
+      }).catch(() => { });
266
+    },
267
+    /** 导出按钮操作 */
268
+    handleExport() {
269
+      this.download('oa/technical/export', {
270
+        ...this.queryParams
271
+      }, `technical_${new Date().getTime()}.xlsx`)
272
+    }
273
+  }
274
+};
275
+</script>

+ 9
- 9
oa-ui/src/views/oa/technical/plan.vue 查看文件

32
     <el-row :gutter="10" class="mb8">    
32
     <el-row :gutter="10" class="mb8">    
33
       <el-col :span="1.5">
33
       <el-col :span="1.5">
34
         <el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport"
34
         <el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport"
35
-          v-hasPermi="['oa:technical:export']">导出</el-button>
35
+          v-hasPermi="['oa:plan:export']">导出</el-button>
36
       </el-col>
36
       </el-col>
37
       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
37
       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
38
     </el-row>
38
     </el-row>
69
       </el-table-column> -->
69
       </el-table-column> -->
70
       <el-table-column label="技术方案" align="center" prop="technicalDocument" />
70
       <el-table-column label="技术方案" align="center" prop="technicalDocument" />
71
       <el-table-column label="方案说明" align="center" prop="designDescription" />
71
       <el-table-column label="方案说明" align="center" prop="designDescription" />
72
-      <!-- <el-table-column label="技术审核意见" align="center" prop="technicalComment" />
72
+      <!-- <el-table-column label="技术质量与安全部审核意见" align="center" prop="technicalComment" />
73
       <el-table-column label="总工审核意见" align="center" prop="manageComment" /> -->
73
       <el-table-column label="总工审核意见" align="center" prop="manageComment" /> -->
74
       <el-table-column label="方案上传时间" align="center" prop="technicalUploadTime" width="180">
74
       <el-table-column label="方案上传时间" align="center" prop="technicalUploadTime" width="180">
75
         <template slot-scope="scope">
75
         <template slot-scope="scope">
76
           <span>{{ parseTime(scope.row.technicalUploadTime, '{y}-{m}-{d}') }}</span>
76
           <span>{{ parseTime(scope.row.technicalUploadTime, '{y}-{m}-{d}') }}</span>
77
         </template>
77
         </template>
78
       </el-table-column>
78
       </el-table-column>
79
-      <!-- <el-table-column label="技术审核时间" align="center" prop="techApprovalTime" width="180">
79
+      <!-- <el-table-column label="技术质量与安全部审核时间" align="center" prop="techApprovalTime" width="180">
80
         <template slot-scope="scope">
80
         <template slot-scope="scope">
81
           <span>{{ parseTime(scope.row.techApprovalTime, '{y}-{m}-{d}') }}</span>
81
           <span>{{ parseTime(scope.row.techApprovalTime, '{y}-{m}-{d}') }}</span>
82
         </template>
82
         </template>
89
       <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
89
       <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
90
         <template slot-scope="scope">
90
         <template slot-scope="scope">
91
           <el-button size="mini" type="text" icon="el-icon-view" @click="handleView(scope.row)"
91
           <el-button size="mini" type="text" icon="el-icon-view" @click="handleView(scope.row)"
92
-            v-hasPermi="['oa:technical:query']">查看</el-button>
92
+            v-hasPermi="['oa:plan:query']">查看</el-button>
93
           <!-- <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
93
           <!-- <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
94
-            v-hasPermi="['oa:technical:remove']">删除</el-button> -->
94
+            v-hasPermi="['oa:plan:remove']">删除</el-button> -->
95
         </template>
95
         </template>
96
       </el-table-column>
96
       </el-table-column>
97
     </el-table>
97
     </el-table>
131
         <el-form-item label="方案说明" prop="designDescription">
131
         <el-form-item label="方案说明" prop="designDescription">
132
           <el-input v-model="form.designDescription" placeholder="请输入方案说明" />
132
           <el-input v-model="form.designDescription" placeholder="请输入方案说明" />
133
         </el-form-item>
133
         </el-form-item>
134
-        <el-form-item label="技术审核意见" prop="technicalComment">
135
-          <el-input v-model="form.technicalComment" placeholder="请输入技术审核意见" />
134
+        <el-form-item label="技术质量与安全部审核意见" prop="technicalComment">
135
+          <el-input v-model="form.technicalComment" placeholder="请输入技术质量与安全部审核意见" />
136
         </el-form-item>
136
         </el-form-item>
137
         <el-form-item label="总工审核意见" prop="manageComment">
137
         <el-form-item label="总工审核意见" prop="manageComment">
138
           <el-input v-model="form.manageComment" placeholder="请输入总工审核意见" />
138
           <el-input v-model="form.manageComment" placeholder="请输入总工审核意见" />
142
             placeholder="请选择方案上传时间">
142
             placeholder="请选择方案上传时间">
143
           </el-date-picker>
143
           </el-date-picker>
144
         </el-form-item>
144
         </el-form-item>
145
-        <el-form-item label="技术审核时间" prop="techApprovalTime">
145
+        <el-form-item label="技术质量与安全部审核时间" prop="techApprovalTime">
146
           <el-date-picker clearable v-model="form.techApprovalTime" type="date" value-format="yyyy-MM-dd"
146
           <el-date-picker clearable v-model="form.techApprovalTime" type="date" value-format="yyyy-MM-dd"
147
-            placeholder="请选择技术审核时间">
147
+            placeholder="请选择技术质量与安全部审核时间">
148
           </el-date-picker>
148
           </el-date-picker>
149
         </el-form-item>
149
         </el-form-item>
150
         <el-form-item label="总工审核时间" prop="manageApprovalTime">
150
         <el-form-item label="总工审核时间" prop="manageApprovalTime">

Loading…
取消
儲存