综合办公系统
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

assessWork.vue 6.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. <!--
  2. * @Author: ysh
  3. * @Date: 2024-07-08 16:16:27
  4. * @LastEditors: Please set LastEditors
  5. * @LastEditTime: 2024-09-05 16:54:57
  6. -->
  7. <template>
  8. <div class="app-container">
  9. <h2 style="text-align: center" id="scrollToMe">核定工作</h2>
  10. <el-form :model="form" :disabled="disabled" label-width="100px">
  11. <el-form-item label="项目任务书:">
  12. <div v-if="form.taskDocument">
  13. <el-link type="primary" @click="reviewWord(`${baseUrl}${'/profile/upload' + form.taskDocument}`)">
  14. {{ getFileName(form.taskDocument) }}
  15. </el-link>
  16. <el-link class="ml20" type="warning" :href="`${baseUrl}${'/profile/upload' + form.taskDocument}`"
  17. :underline="false" target="_blank">
  18. <span class="el-icon-download">下载文件</span>
  19. </el-link>
  20. </div>
  21. </el-form-item>
  22. <el-form-item label="核定工作量:">
  23. <table class="table" border="1">
  24. <tr>
  25. <td style="width: 180px">工作内容</td>
  26. <td>等级或比例尺</td>
  27. <td>单位</td>
  28. <td>工作量</td>
  29. <td style="width: 100px">要求完成时间</td>
  30. <td>备注</td>
  31. </tr>
  32. <tr v-for="(work, index) in workList" :key="index">
  33. <td>
  34. <el-input v-model="work.content" type="textarea" clearable
  35. :autosize="{ minRows: 4, maxRows: 10 }"></el-input>
  36. </td>
  37. <td>
  38. <el-select v-model="work.scale" placeholder="请选择" clearable>
  39. <el-option v-for="dict in dict.type.cmc_scale_grade" :key="dict.value" :label="dict.label"
  40. :value="dict.label" />
  41. </el-select>
  42. </td>
  43. <td>
  44. <el-select v-model="work.unit" placeholder="请选择" clearable>
  45. <el-option v-for="dict in dict.type.cmc_unit" :key="dict.value" :label="dict.label"
  46. :value="dict.label" />
  47. </el-select>
  48. </td>
  49. <td>
  50. <el-input v-model="work.workload" clearable></el-input>
  51. </td>
  52. <td>
  53. <el-date-picker style="width: 140px" v-model="work.deadline" value-format="yyyy-MM-dd" type="date"
  54. placeholder="选择日期">
  55. </el-date-picker>
  56. </td>
  57. <td>
  58. <el-input v-model="work.remark" type="textarea" clearable
  59. :autosize="{ minRows: 4, maxRows: 10 }"></el-input>
  60. </td>
  61. <td>
  62. <el-button type="text" style="color:#F56C6C" size="mini" @click="deletWorkItem(index)">删除行</el-button>
  63. </td>
  64. </tr>
  65. </table>
  66. <el-button icon="el-icon-plus" type="primary" plain size="mini" @click="addWorkList"></el-button>
  67. </el-form-item>
  68. </el-form>
  69. <div slot="footer" class="dialog-footer" style="text-align: center;">
  70. <el-button type="warning" @click="save" :disabled="disabled">保 存</el-button>
  71. <el-button type="primary" @click="confirm" :disabled="disabled">提 交</el-button>
  72. </div>
  73. </div>
  74. </template>
  75. <script>
  76. import { listProject, getProject, addProject, updateProject, delProject } from "@/api/oa/project/project";
  77. import { listProjectWork, addProjectWork, delProjectWork } from "@/api/oa/project/projectWork";
  78. import { getUsersDeptLeaderByDept, getDeptLeadersByDeptId } from "@/api/system/post";
  79. import { complete, getNextFlowNode } from "@/api/flowable/todo";
  80. export default {
  81. dicts: ['cmc_scale_grade', 'cmc_unit'],
  82. props: {
  83. disabled: {
  84. type: Boolean
  85. },
  86. taskForm: {
  87. type: Object,
  88. required: true
  89. },
  90. taskName: {
  91. type: String,
  92. required: true
  93. }
  94. },
  95. data() {
  96. return {
  97. baseUrl: process.env.VUE_APP_BASE_API,
  98. form: {},
  99. total: 0,
  100. workList: [
  101. {
  102. content: "",
  103. scale: "",
  104. unit: "",
  105. workload: "",
  106. deadline: undefined,
  107. remark: "",
  108. },
  109. ],
  110. }
  111. },
  112. created() {
  113. },
  114. mounted() {
  115. if (this.taskName != '项目登记')
  116. this.initForm();
  117. },
  118. methods: {
  119. async initForm() {
  120. let projectRes = await getProject(this.taskForm.formId)
  121. if (projectRes.code == 200 && projectRes.data) {
  122. this.form = projectRes.data
  123. if (this.form.undertakingDept) {
  124. let arr = (this.form.undertakingDept.split(',')).map(Number)
  125. this.getDeptLeader(arr)
  126. }
  127. this.total = 1
  128. this.getProjectWorkList();
  129. }
  130. },
  131. getProjectWorkList() {
  132. listProjectWork({ pageNum: 1, pageSize: 100, projectId: this.taskForm.formId }).then(res => {
  133. if (res.rows.length != 0) {
  134. this.workList = res.rows;
  135. }
  136. })
  137. },
  138. addWorkList() {
  139. this.workList.push({
  140. content: "",
  141. scale: "",
  142. unit: "",
  143. workload: "",
  144. deadline: undefined,
  145. remark: "",
  146. });
  147. },
  148. deletWorkItem(index) {
  149. let arr = this.workList;
  150. if (arr.length == 1) {
  151. return;
  152. }
  153. if (index >= 0 && index < arr.length) {
  154. arr.splice(index, 1);
  155. }
  156. },
  157. // 更新工作量
  158. updateWorkList() {
  159. delProjectWork(this.taskForm.formId).then(res => {
  160. this.workList.forEach(work => {
  161. work.projectId = this.taskForm.formId;
  162. addProjectWork(work);
  163. })
  164. this.$message.success('保存成功')
  165. })
  166. },
  167. // 保存按钮
  168. save() {
  169. if (!this.total) {
  170. this.workList.forEach(work => {
  171. work.projectId = this.taskForm.formId;
  172. addProjectWork(work).then(res => {
  173. this.$message.success('保存成功')
  174. });
  175. })
  176. } else {
  177. this.updateWorkList();
  178. }
  179. },
  180. async confirm() {
  181. this.save();
  182. const params = { taskId: this.taskForm.taskId };
  183. getNextFlowNode(params).then(res => {
  184. complete(this.taskForm).then(response => {
  185. this.$modal.msgSuccess(response.msg);
  186. this.$emit('goBack');
  187. });
  188. })
  189. },
  190. getDeptLeader(val) {
  191. let deptId = Number(val[0])
  192. getUsersDeptLeaderByDept({ deptId: Number(deptId) }).then(res => {
  193. this.$set(this.taskForm.variables, "approval", res.data.userId);
  194. })
  195. }
  196. },
  197. }
  198. </script>
  199. <style lang="scss" scoped>
  200. table {
  201. /*居中*/
  202. margin: 0 auto;
  203. /*边框*/
  204. /* border: 1px solid black; */
  205. text-align: center;
  206. border-collapse: collapse;
  207. /*设置背景颜色*/
  208. /* background-color: #bfa; */
  209. }
  210. </style>