综合办公系统
Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

contractForm.vue 49KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233
  1. <!--
  2. * @Author: ysh
  3. * @Date: 2024-05-10 15:31:57
  4. * @LastEditors: Please set LastEditors
  5. * @LastEditTime: 2024-06-19 15:55:48
  6. -->
  7. <template>
  8. <div class="app-container">
  9. <el-row :gutter="20">
  10. <el-col :span="18" :xs="24">
  11. <h2 class="text-center"><b>承接合同评审表</b></h2>
  12. <el-divider></el-divider>
  13. <el-form ref="form" :model="form" :rules="rules" label-width="130px" :disabled="formDisabled">
  14. <el-row :gutter="20">
  15. <el-col :span="12" :xs="24">
  16. <el-form-item label="投标项目名称:" prop="tenderId">
  17. <el-button type="primary" size="mini" @click="tbOpen = true"
  18. v-if="taskName == '合同拟稿'">选择投标项目</el-button>
  19. <el-descriptions border v-if="isSelect" style="margin-top: 10px;" :column="3" direction="vertical">
  20. <el-descriptions-item label="投标项目名称" label-class-name="my-label" :span="3">{{ chooseTender.projectName
  21. }}</el-descriptions-item>
  22. <el-descriptions-item label="项目来源" label-class-name="my-label">{{ getProjectSource(chooseTender)
  23. }}</el-descriptions-item>
  24. <el-descriptions-item label="联系人" label-class-name="my-label">{{ chooseTender.aPerson
  25. }}</el-descriptions-item>
  26. <el-descriptions-item label="联系电话" label-class-name="my-label">{{ chooseTender.aPhone
  27. }}</el-descriptions-item>
  28. </el-descriptions>
  29. </el-form-item>
  30. <el-form-item label="合同名称" prop="contractName">
  31. <el-input type="textarea" :rows="3" style="width: 100%;" v-model="form.contractName"
  32. placeholder="请输入合同名称" :disabled="taskName != '合同拟稿'"></el-input>
  33. </el-form-item>
  34. <el-form-item label="甲方单位" prop="partyAId">
  35. <el-select v-model="form.partyAId" filterable placeholder="请选择" disabled style="width: 100%;">
  36. <el-option v-for="item in partyAList" :key="item.value" :label="item.partyAName"
  37. :value="item.partyAId" :disabled="taskName != '合同拟稿'">
  38. </el-option>
  39. </el-select>
  40. <el-button type="primary" @click="partyAOpen = true" size="mini"
  41. v-if="taskName == '合同拟稿'">选择单位</el-button>
  42. </el-form-item>
  43. <el-form-item label="合同编码" prop="contractCode">
  44. <el-input style="width: 100%;" v-model="form.contractCode" placeholder="请输入合同编码"
  45. :disabled="taskName != '合同拟稿'"></el-input>
  46. </el-form-item>
  47. <el-form-item label="合同编号" prop="contractNumber">
  48. <el-input style="width: 100%;" v-model="form.contractNumber" placeholder="请输入合同编号"
  49. :disabled="taskName != '合同拟稿'"></el-input>
  50. </el-form-item>
  51. <el-form-item label="合同金额" prop="amount">
  52. <el-input style="width:100%;" v-model="form.amount" placeholder="请输入合同金额"
  53. :disabled="taskName != '合同拟稿'">
  54. <template slot="append">元</template>
  55. </el-input>
  56. </el-form-item>
  57. <el-form-item style="text-align: left;" label="履约保证金" prop="deposit">
  58. <el-input style="width:100%;" v-model="form.deposit" placeholder="请输入履约保证金"
  59. :disabled="taskName != '合同拟稿'">
  60. <template slot="append">元</template>
  61. </el-input>
  62. </el-form-item>
  63. </el-col>
  64. <el-col :span="12" :xs="24">
  65. <el-alert title="后签合同的项目,必须选择关联项目;先签合同的项目不选关联项目" type="error">
  66. </el-alert>
  67. <el-form-item label="关联项目:" prop="projectIds">
  68. <el-button type="primary" size="mini" @click="open = true" v-if="taskName == '合同拟稿'">选择项目</el-button>
  69. </el-form-item>
  70. <el-table v-loading="projectloading" :data="chooseProjectList">
  71. <el-table-column label="项目编号" align="center" prop="projectNumber"></el-table-column>
  72. <el-table-column label="项目名称" align="center" prop="projectName"></el-table-column>
  73. <el-table-column label="项目负责人" align="center" prop="projectLeaderUser.nickName"></el-table-column>
  74. <el-table-column label="承担部门" align="center" prop="undertakingDeptName"></el-table-column>
  75. </el-table>
  76. </el-col>
  77. </el-row>
  78. <el-form-item label="合同文件" prop="contractDocument">
  79. <FileUpload v-if="taskName == '合同拟稿'" :disabled="taskName != '合同拟稿'" ref="contractFile" :limit="1"
  80. :filePathName="'承接合同/合同文件'" :fileType="['doc', 'docx', 'xls', 'xlsx', 'pdf']" @input="getContractPath">
  81. </FileUpload>
  82. <div v-if="form.contractDocument && taskName != '合同拟稿'">
  83. <el-link type="primary" @click="reviewWord(`${baseUrl}${'/profile/upload' + form.contractDocument}`)">
  84. {{ getFileName(form.contractDocument) }}
  85. </el-link>
  86. <el-link class="ml20" type="warning" :href="`${baseUrl}${'/profile/upload' + form.contractDocument}`"
  87. :underline="false" target="_blank">
  88. <span class="el-icon-download">下载文件</span>
  89. </el-link>
  90. </div>
  91. </el-form-item>
  92. <el-form-item label="合同计划工作量:">
  93. <table border="1">
  94. <tr>
  95. <td style="width: 50px;">序号</td>
  96. <td style="width:180px">工作内容</td>
  97. <td>等级或比例尺</td>
  98. <td>单位</td>
  99. <td>工作量</td>
  100. <td>要求完成时间</td>
  101. <td>备注</td>
  102. </tr>
  103. <tr v-for="(work, index) in workList" :key="index">
  104. <td>
  105. {{ index + 1 }}
  106. </td>
  107. <td>
  108. <el-input v-model="work.content" type="textarea" clearable :autosize="{ minRows: 4 }"
  109. :disabled="taskName != '合同拟稿'"></el-input>
  110. </td>
  111. <td>
  112. <el-select v-model="work.scale" placeholder="请选择" clearable :disabled="taskName != '合同拟稿'">
  113. <el-option v-for="dict in dict.type.cmc_scale_grade" :key="dict.value" :label="dict.label"
  114. :value="dict.label" />
  115. </el-select>
  116. </td>
  117. <td>
  118. <el-select v-model="work.unit" placeholder="请选择" clearable :disabled="taskName != '合同拟稿'">
  119. <el-option v-for="dict in dict.type.cmc_unit" :key="dict.value" :label="dict.label"
  120. :value="dict.label" />
  121. </el-select>
  122. </td>
  123. <td>
  124. <el-input-number :controls="false" style="width: 60px" v-model="work.workload" clearable
  125. :disabled="taskName != '合同拟稿'"></el-input-number>
  126. </td>
  127. <td>
  128. <el-date-picker style="width: 140px" v-model="work.deadline" value-format="yyyy-MM-dd" type="date"
  129. placeholder="选择日期" :disabled="taskName != '合同拟稿'">
  130. </el-date-picker>
  131. </td>
  132. <td>
  133. <el-input v-model="work.remark" type="textarea" clearable :autosize="{ minRows: 4 }"
  134. :disabled="taskName != '合同拟稿'"></el-input>
  135. </td>
  136. <td>
  137. <el-button type="danger" icon="el-icon-minus" size="mini" circle @click="deletWorkItem(index)"
  138. :disabled="taskName != '合同拟稿'"></el-button>
  139. </td>
  140. </tr>
  141. </table>
  142. <el-button icon="el-icon-plus" size="mini" @click="addWorkList()" type="primary" plain
  143. :disabled="taskName != '合同拟稿'"></el-button>
  144. </el-form-item>
  145. <el-form-item label="合同回款计划:">
  146. <table border="1">
  147. <tr>
  148. <td style="width: 50px;">序号</td>
  149. <td style="width: 250px;">回款条件</td>
  150. <td>回款比例(%)</td>
  151. <td>回款金额(元)</td>
  152. <td>预计时间</td>
  153. <td>备注</td>
  154. </tr>
  155. <tr v-for="(payment, index) in paymentList" :key="index">
  156. <td>
  157. {{ index + 1 }}
  158. </td>
  159. <td>
  160. <el-input v-model="payment.paymentCondition" type="textarea" clearable :autosize="{ minRows: 4 }"
  161. :disabled="taskName != '合同拟稿'"></el-input>
  162. </td>
  163. <td>
  164. <el-input-number style="width:100px" :controls="false" v-model="payment.paymentPercentage" clearable
  165. :disabled="taskName != '合同拟稿'" @change="calculatePaymentAmount(payment)"></el-input-number>
  166. </td>
  167. <td>
  168. <el-input-number style="width:150px" :controls="false" :precision="2" v-model="payment.paymentAmount"
  169. clearable :disabled="taskName != '合同拟稿'"></el-input-number>
  170. </td>
  171. <td>
  172. <el-date-picker style="width: 140px" v-model="payment.paymentTime" value-format="yyyy-MM-dd"
  173. type="date" placeholder="选择日期" :disabled="taskName != '合同拟稿'">
  174. </el-date-picker>
  175. </td>
  176. <td>
  177. <el-input v-model="payment.remark" type="textarea" clearable :autosize="{ minRows: 4 }"
  178. :disabled="taskName != '合同拟稿'"></el-input>
  179. </td>
  180. <td>
  181. <el-button type="danger" icon="el-icon-minus" size="mini" circle @click="deletPaymentItem(index)"
  182. :disabled="taskName != '合同拟稿'"></el-button>
  183. </td>
  184. </tr>
  185. </table>
  186. <el-button icon="el-icon-plus" size="mini" @click="addPaymentList()" type="primary" plain
  187. :disabled="taskName != '合同拟稿'"></el-button>
  188. </el-form-item>
  189. <el-form-item label="合同备注" prop="remark">
  190. <el-input v-model="form.remark" :autosize="{ minRows: 4 }" type="textarea" placeholder="请输入合同备注"
  191. :disabled="taskName != '合同拟稿'" />
  192. </el-form-item>
  193. <el-row>
  194. <el-col :span="6" :xs="24" :offset="12">
  195. <el-form-item label="拟稿人:" label-width="120px">
  196. <span class="auditor"> {{ form.draftUser ? form.draftUser.nickName : draftUser }} </span>
  197. </el-form-item>
  198. </el-col>
  199. <el-col :span="6">
  200. <el-form-item label="日期:" label-width="120px">
  201. <span> {{ form.draftTime ? form.draftTime : draftTime }} </span>
  202. </el-form-item>
  203. </el-col>
  204. </el-row>
  205. <el-form-item label="评审方式" prop="commentType">
  206. <el-radio-group v-model="form.commentType" @change="changeCommentType" :disabled="taskName != '合同拟稿'">
  207. <el-radio :label="'0'">无须评审</el-radio>
  208. <el-radio :label="'1'">会议评审</el-radio>
  209. <el-radio :label="'2'">线上会审</el-radio>
  210. </el-radio-group>
  211. </el-form-item>
  212. <el-form-item label="线上会审:" v-if="commentOpen">
  213. <table border="1">
  214. <tr>
  215. <td style="width: 50px;">序号</td>
  216. <td>会审部门</td>
  217. <td>会审人</td>
  218. <td>会审意见</td>
  219. <td style="width: 200px;">会审附件</td>
  220. <td style="width: 90px;">签名</td>
  221. <td style="width: 100px;">日期</td>
  222. </tr>
  223. <tr v-for="(comment, index) in commentList" :key="index">
  224. <td>
  225. {{ index + 1 }}
  226. </td>
  227. <td>
  228. <el-select v-model="comment.deptId" clearable style="width:120px"
  229. :disabled="(index < 4 && taskName == '合同拟稿') || taskName != '合同拟稿'" @change="getDeptLeader">
  230. <el-option v-for="item in deptList" :key="item.deptId" :label="item.deptName" :value="item.deptId">
  231. </el-option>
  232. </el-select>
  233. </td>
  234. <td>
  235. <el-select v-model="comment.userId" clearable style="width:120px"
  236. :disabled="(index < 4 && taskName == '合同拟稿') || taskName != '合同拟稿'">
  237. <el-option v-for="item in userList" :key="item.userId" :label="item.nickName" :value="item.userId">
  238. </el-option>
  239. </el-select>
  240. </td>
  241. <td>
  242. <el-input v-model="comment.comment" type="textarea" clearable :autosize="{ minRows: 4 }"
  243. :disabled="taskName != '线上会审' || (taskName == '线上会审' && comment.userId != userId)"></el-input>
  244. </td>
  245. <td style="text-align:left;" @click="clickFile(comment)">
  246. <FileUpload v-if="comment.document == '' || comment.document == null" ref="hs" :limit="1"
  247. :filePathName="'承接合同/线上会审意见'"
  248. :disabled="taskName != '线上会审' || (taskName == '线上会审' && comment.userId != userId)"
  249. :fileType="['doc', 'docx', 'xls', 'xlsx', 'pdf']" @input="setCommentDocument">
  250. </FileUpload>
  251. <!-- <el-input v-model="comment.document" clearable
  252. :disabled="taskName != '线上会审' || (taskName == '线上会审' && !comment.commentUser)"></el-input> -->
  253. <div v-if="comment.document != '' && comment.document != null">
  254. <transition-group class="upload-file-list el-upload-list el-upload-list--text"
  255. name="el-fade-in-linear" tag="ul">
  256. <li key="li01" class="el-upload-list__item ele-upload-list__item-content">
  257. <el-link :href="`${baseUrl}${'/profile/upload' + comment.document}`" :underline="false"
  258. target="_blank">
  259. <span class="el-icon-document" style="color:#0011ff;text-decoration: underline;">
  260. {{ getFileName(comment.document) }}
  261. </span>
  262. </el-link>
  263. <div class="ele-upload-list__item-content-action" v-if="comment.userId == userId">
  264. <el-link :underline="false" @click="handleFileDelete(comment, 'document')"
  265. type="danger">删除</el-link>
  266. </div>
  267. <button class="preview-btn" type="primary" size="mini" plain
  268. @click="reviewWord(`${baseUrl}${'/profile/upload' + comment.document}`)">在线预览</button>
  269. </li>
  270. </transition-group>
  271. </div>
  272. </td>
  273. <td>
  274. <span class="auditor"> {{ comment.commentUser ? comment.commentUser.nickName : '' }} </span>
  275. </td>
  276. <td>
  277. <span> {{ comment.commentTime }} </span>
  278. </td>
  279. <td>
  280. <el-button type="text" style="color: #F56C6C;" size="mini" @click="deletCommentItem(index)"
  281. :disabled="taskName != '合同拟稿'">删除行</el-button>
  282. </td>
  283. </tr>
  284. </table>
  285. <el-button icon="el-icon-plus" size="mini" @click="addCommentList()" type="primary" plain
  286. :disabled="taskName != '合同拟稿'"></el-button>
  287. </el-form-item>
  288. <el-form-item label="会议评审:" v-if="meetingOpen">
  289. <table border="1">
  290. <tr>
  291. <td>评审时间</td>
  292. <td>
  293. <el-date-picker clearable v-model="meetingForm.meetingTime" type="date" value-format="yyyy-MM-dd"
  294. placeholder="请选择评审日期" :disabled="taskName != '合同拟稿'">
  295. </el-date-picker>
  296. </td>
  297. <td>评审地点</td>
  298. <td>
  299. <el-select v-model="meetingForm.place" clearable style="width:120px" :disabled="taskName != '合同拟稿'">
  300. <el-option v-for="item in placeList" :key="item.id" :label="item.name" :value="item.id">
  301. </el-option>
  302. </el-select>
  303. </td>
  304. <td>评审主持人</td>
  305. <td>
  306. <el-select v-model="meetingForm.hostId" clearable style="width:120px" :disabled="taskName != '合同拟稿'">
  307. <el-option v-for="item in userList" :key="item.userId" :label="item.nickName" :value="item.userId">
  308. </el-option>
  309. </el-select>
  310. </td>
  311. </tr>
  312. <tr>
  313. <td>参与评审人员</td>
  314. <td colspan="5">
  315. <el-select v-model="meetingForm.users" multiple filterable clearable style="width:600px"
  316. :disabled="taskName != '合同拟稿'">
  317. <el-option v-for="item in userList" :key="item.userId" :label="item.nickName" :value="item.userId">
  318. </el-option>
  319. </el-select>
  320. </td>
  321. </tr>
  322. <tr>
  323. <td>评审意见表</td>
  324. <td colspan="5">
  325. <FileUpload :disabled="taskName != '会议评审'"
  326. v-if="meetingForm.document == '' || meetingForm.document == null" ref="meetingDocument" :limit="1"
  327. :filePathName="'承接合同/会议评审意见'" :fileType="['doc', 'docx', 'xls', 'xlsx', 'pdf']"
  328. @input="getMeetingPath"></FileUpload>
  329. <div v-if="meetingForm.document != '' && meetingForm.document != null">
  330. <file-item :document="meetingForm.document"></file-item>
  331. </div>
  332. <!-- <el-input v-model="meetingForm.document" clearable :disabled="taskName != '会议评审'"></el-input> -->
  333. </td>
  334. </tr>
  335. <tr>
  336. <td>评审结论</td>
  337. <td colspan="5">
  338. <el-input type="textarea" v-model="meetingForm.conclusion" clearable
  339. :disabled="taskName != '会议评审'"></el-input>
  340. </td>
  341. </tr>
  342. <tr>
  343. <td colspan="2"></td>
  344. <td>主持人签名</td>
  345. <td>
  346. <span class="auditor"> {{ meetingForm.hostUser ? meetingForm.hostUser.nickName : hostUser }} </span>
  347. </td>
  348. <td>日期</td>
  349. <td>
  350. <span> {{ meetingForm.commentTime ? meetingForm.commentTime : commentTime }} </span>
  351. </td>
  352. </tr>
  353. </table>
  354. </el-form-item>
  355. <el-divider></el-divider>
  356. <el-form-item label="分管审批意见" prop="remark">
  357. <el-input v-model="form.managerComment" type="textarea" :autosize="{ minRows: 4 }" placeholder="请输入审批意见"
  358. :disabled="taskName != '分管审核'" />
  359. </el-form-item>
  360. <el-row>
  361. <el-col :span="6" :xs="24" :offset="12">
  362. <el-form-item label="签名:" label-width="120px" v-if="taskName == '分管审核'">
  363. <span class="auditor"> {{ form.managerUser ? form.managerUser.nickName : managerUser }} </span>
  364. </el-form-item>
  365. </el-col>
  366. <el-col :span="6">
  367. <el-form-item label="日期:" label-width="120px" v-if="taskName == '分管审核'">
  368. <span> {{ form.managerTime ? form.managerTime : managerTime }} </span>
  369. </el-form-item>
  370. </el-col>
  371. </el-row>
  372. <el-divider></el-divider>
  373. <el-form-item label="签订日期" prop="signDate">
  374. <el-date-picker clearable v-model="form.signDate" type="date" value-format="yyyy-MM-dd"
  375. placeholder="请选择签订日期" :disabled="taskName != '合同签订'">
  376. </el-date-picker>
  377. </el-form-item>
  378. <el-form-item label="签订备注" prop="signRemark">
  379. <el-input v-model="form.signRemark" type="textarea" :autosize="{ minRows: 4 }" placeholder="请输入签订备注"
  380. :disabled="taskName != '合同签订'" />
  381. </el-form-item>
  382. <el-form-item label="签订扫描件" prop="signScan">
  383. <!-- <el-input v-model="form.signScan" placeholder="请输入签订扫描件" :disabled="taskName != '合同签订'" /> -->
  384. <FileUpload :disabled="taskName != '合同签订'" v-if="form.signScan == null || form.signScan == ''"
  385. ref="contractFile" :limit="1" :filePathName="'承接合同文件'" :fileType="['doc', 'docx', 'xls', 'xlsx', 'pdf']"
  386. @input="getSignScanPath">
  387. </FileUpload>
  388. <div v-if="form.signScan && taskName != '合同签订'">
  389. <!-- <transition-group class="upload-file-list el-upload-list el-upload-list--text" name="el-fade-in-linear"
  390. tag="ul">
  391. <li key="li01" class="el-upload-list__item ele-upload-list__item-content">
  392. <el-link :href="`${baseUrl}${'/profile/upload' + form.signScan}`" :underline="false" target="_blank">
  393. <span class="el-icon-document" style="color:#0011ff;text-decoration: underline;">
  394. {{ getFileName(form.signScan) }}
  395. </span>
  396. </el-link>
  397. <div class="ele-upload-list__item-content-action" v-if="taskName != ''">
  398. <el-link :underline="false" @click="handleFileDelete(form, 'signScan')" type="danger">删除</el-link>
  399. </div>
  400. <button class="preview-btn" type="primary" size="mini" plain
  401. @click="reviewWord(`${baseUrl}${'/profile/upload' + form.signScan}`)">在线预览</button>
  402. </li>
  403. </transition-group> -->
  404. <el-link type="primary" @click="reviewWord(`${baseUrl}${'/profile/upload' + form.signScan}`)">
  405. {{ getFileName(form.signScan) }}
  406. </el-link>
  407. <el-link class="ml20" type="warning" :href="`${baseUrl}${'/profile/upload' + form.signScan}`"
  408. :underline="false" target="_blank">
  409. <span class="el-icon-download">下载文件</span>
  410. </el-link>
  411. </div>
  412. </el-form-item>
  413. </el-form>
  414. <div style="text-align: center;" v-if="taskName">
  415. <el-button type="primary" @click="submitForm" :disabled="formDisabled">提 交</el-button>
  416. </div>
  417. </el-col>` `
  418. <el-col :span="6" :xs="24" v-if="flowDisabled">
  419. <el-card>
  420. <h2 style="text-align: center;">流程进度</h2>
  421. <div>
  422. <flow :flowData="flowData" />
  423. </div>
  424. </el-card>
  425. </el-col>
  426. </el-row>
  427. <el-dialog title="选择项目" :visible.sync="open" width="70%" append-to-body>
  428. <choose-project @chooseProject="confirmProject"></choose-project>
  429. </el-dialog>
  430. <el-dialog title="选择投标项目" :visible.sync="tbOpen" width="70%" append-to-body>
  431. <choose-tender @choose="confirmTender"></choose-tender>
  432. </el-dialog>
  433. <el-dialog title="选择甲方单位" :visible.sync="partyAOpen" width="70%" append-to-body>
  434. <choose-party-a @confirm="confirmPartyA"></choose-party-a>
  435. </el-dialog>
  436. </div>
  437. </template>
  438. <script>
  439. import { parseTime } from "@/utils/ruoyi";
  440. import { listProject, getProject } from "@/api/oa/project/project";
  441. import { listDept } from '@/api/system/dept'
  442. import { listUser } from '@/api/system/user'
  443. import { listContract, getContract, delContract, addContract, updateContract } from "@/api/oa/contract/contract";
  444. import { listContractWork, addContractWork, delContractWork } from "@/api/oa/contract/contractWork";
  445. import { listContractPayment, addContractPayment, delContractPayment } from "@/api/oa/contract/contractPayment";
  446. import { listContractComment, addContractComment, updateContractComment } from "@/api/oa/contract/contractComment";
  447. import { getContractMeeting, addContractMeeting, updateContractMeeting } from "@/api/oa/contract/contractMeeting";
  448. import { listProjectContract, addProjectContract, delProjectContract } from "@/api/oa/contract/projectContract";
  449. import { complete, rejectTask, returnList, returnTask, getNextFlowNode, delegate, flowTaskForm, } from "@/api/flowable/todo";
  450. import { listTender, getTender } from "@/api/oa/tender/tender";
  451. import { getUsersDeptLeader, getUsersManageLeader, getUsersDeptLeaderByDept } from '@/api/system/post.js'
  452. import flow from '@/views/flowable/task/todo/detail/flow'
  453. import { flowXmlAndNode } from "@/api/flowable/definition";
  454. import ChooseProject from '../components/chooseProject.vue';
  455. import ChooseTender from '../components/chooseTender.vue';
  456. import { listPartyA } from "@/api/oa/partyA/partyA";
  457. import FileItem from './fileItem.vue';
  458. import { mapGetters } from "vuex";
  459. import ChoosePartyA from '@/views/flowable/form/components/choosePartyA.vue';
  460. export default {
  461. dicts: ['cmc_scale_grade', 'cmc_unit'],
  462. components: {
  463. flow,
  464. ChooseProject,
  465. ChooseTender,
  466. FileItem,
  467. ChoosePartyA
  468. },
  469. props: {
  470. taskName: {
  471. type: String,
  472. required: true
  473. },
  474. taskForm: {
  475. type: Object,
  476. required: true
  477. },
  478. formDisabled: {
  479. type: Boolean,
  480. default: false
  481. },
  482. flowDisabled: {
  483. type: Boolean,
  484. default: true
  485. }
  486. },
  487. computed: {
  488. ...mapGetters(["userId"]),
  489. },
  490. watch: {
  491. 'taskForm.formId'(newval) {
  492. this.projectloading = true
  493. this.getProjectList();
  494. this.getDeptList();
  495. this.getTenderList();
  496. this.getUserList();
  497. this.initForm();
  498. }
  499. },
  500. name: "Contract",
  501. data() {
  502. return {
  503. baseUrl: process.env.VUE_APP_BASE_API,
  504. isTenderIdValid: true, // 用于跟踪tenderId是否有效
  505. isDocumentValid: true,
  506. draftUser: '',
  507. draftTime: undefined,
  508. managerUser: '',
  509. managerTime: undefined,
  510. hostUser: '',
  511. commentTime: undefined,
  512. // 遮罩层
  513. loading: true,
  514. projectloading: true,
  515. // 弹出层标题
  516. title: "",
  517. // 是否显示弹出层
  518. open: false,
  519. tbOpen: false,
  520. partyAOpen: false,
  521. // 表单参数
  522. form: {
  523. amount: 0,
  524. deposit: 0,
  525. },
  526. meetingForm: {
  527. users: [],
  528. },
  529. projectContractForm: {
  530. projectIds: [],
  531. },
  532. // 表单校验
  533. rules: {},
  534. meetingOpen: false,
  535. commentOpen: false,
  536. chooseProjectList: [],
  537. partyAList: [],
  538. projectList: [],
  539. deptList: [],
  540. userList: [],
  541. users: undefined,
  542. workList: [{
  543. content: "",
  544. scale: "",
  545. unit: "",
  546. workload: "",
  547. deadline: undefined,
  548. remark: "",
  549. }],
  550. paymentList: [{
  551. paymentCondition: "",
  552. paymentPercentage: "",
  553. paymentAmount: "",
  554. paymentTime: undefined,
  555. remark: "",
  556. }],
  557. placeList: [{ id: '0', name: '301会议室' }, { id: '1', name: '216会议室' }],
  558. commentList: [
  559. {
  560. deptId: 105,
  561. userId: '',
  562. comment: '',
  563. document: '',
  564. commentTime: undefined
  565. },
  566. {
  567. deptId: 110,
  568. userId: '',
  569. comment: '',
  570. document: '',
  571. commentTime: undefined
  572. },
  573. {
  574. deptId: 107,
  575. userId: '',
  576. comment: '',
  577. document: '',
  578. commentTime: undefined
  579. },
  580. {
  581. deptId: 106,
  582. userId: '',
  583. comment: '',
  584. document: '',
  585. commentTime: undefined
  586. },
  587. ],
  588. tenderList: [],
  589. chooseTender: {},
  590. isSelect: false,
  591. formTotal: 0,
  592. flowData: {},
  593. clickTd: {},
  594. };
  595. },
  596. created() {
  597. if (this.taskName == '合同拟稿') {
  598. this.draftUser = this.$store.getters.name;
  599. this.draftTime = parseTime(new Date(), '{y}-{m}-{d}')
  600. }
  601. else if (this.taskName == '会议评审') {
  602. this.hostUser = this.$store.getters.name;
  603. this.commentTime = parseTime(new Date(), '{y}-{m}-{d}')
  604. }
  605. else if (this.taskName == '分管审核') {
  606. this.managerUser = this.$store.getters.name;
  607. this.managerTime = parseTime(new Date(), '{y}-{m}-{d}')
  608. }
  609. this.getProjectList();
  610. this.getPartyAList();
  611. this.getDeptList();
  612. this.getTenderList();
  613. this.getUserList();
  614. if (this.flowDisabled) {
  615. flowXmlAndNode({ procInsId: this.taskForm.procInsId, deployId: this.taskForm.deployId }).then(res => {
  616. this.flowData = res.data;
  617. })
  618. }
  619. },
  620. mounted() {
  621. this.initRules();
  622. this.initForm();
  623. },
  624. methods: {
  625. initRules() {
  626. if (this.taskName == '合同拟稿') {
  627. this.rules = {
  628. contractCode: [
  629. { required: true, message: '请输入合同编码', trigger: 'blur' },
  630. ],
  631. commentType: [
  632. { required: true, message: '请选择评审方式', trigger: 'change' },
  633. ]
  634. }
  635. } else if (this.taskName == '分管审核') {
  636. this.rules = {
  637. managerComment: [
  638. { required: true, message: '请输入分管审批意见', trigger: 'blur' }
  639. ]
  640. }
  641. }
  642. },
  643. initForm() {
  644. getContract(this.taskForm.formId).then(res => {
  645. if (this.isEmptyObject(res.data)) {
  646. this.formTotal = 0;
  647. this.form.drafter = this.$store.getters.userId;
  648. this.form.draftTime = parseTime(new Date(), '{y}-{m}-{d}');
  649. this.projectloading = false;
  650. }
  651. else {
  652. this.formTotal = 1;
  653. this.form = res.data;
  654. if (this.form.commentType == '0') {
  655. this.commentOpen = false;
  656. this.meetingOpen = false;
  657. }
  658. else if (this.form.commentType == '1') {
  659. this.commentOpen = false;
  660. this.meetingOpen = true;
  661. }
  662. else if (this.form.commentType == '2') {
  663. this.commentOpen = true;
  664. this.meetingOpen = false;
  665. }
  666. if (res.data.tenderId) {
  667. getTender(res.data.tenderId).then(response => {
  668. this.chooseTender = response.data;
  669. this.isSelect = true
  670. })
  671. }
  672. listContractWork({ contractId: this.taskForm.formId }).then(res => {
  673. if (res.rows)
  674. this.workList = res.rows;
  675. });
  676. listContractPayment({ contractId: this.taskForm.formId }).then(res => {
  677. if (res.rows)
  678. this.paymentList = res.rows;
  679. });
  680. listContractComment({ contractId: this.taskForm.formId }).then(res => {
  681. if (res.rows && res.rows.length != 0) {
  682. this.commentList = res.rows;
  683. for (let comment of this.commentList) {
  684. if (comment.commentTime == undefined) {
  685. if (comment.userId != this.$store.getters.userId) {
  686. comment.commentUser = undefined;
  687. }
  688. else {
  689. comment.commentTime = parseTime(new Date(), '{y}-{m}-{d}');
  690. }
  691. }
  692. }
  693. } else {
  694. this.commentList = [
  695. {
  696. deptId: 105,
  697. userId: '',
  698. comment: '',
  699. document: '',
  700. commentTime: undefined
  701. },
  702. {
  703. deptId: 110,
  704. userId: '',
  705. comment: '',
  706. document: '',
  707. commentTime: undefined
  708. },
  709. {
  710. deptId: 107,
  711. userId: '',
  712. comment: '',
  713. document: '',
  714. commentTime: undefined
  715. },
  716. {
  717. deptId: 106,
  718. userId: '',
  719. comment: '',
  720. document: '',
  721. commentTime: undefined
  722. },
  723. ]
  724. for (let comment of this.commentList) {
  725. getUsersDeptLeaderByDept({ deptId: comment.deptId }).then(res => {
  726. comment.userId = res.data.userId;
  727. })
  728. }
  729. }
  730. });
  731. getContractMeeting(this.taskForm.formId).then(res => {
  732. if (res.data) {
  733. let data = res.data;
  734. if (res.data.users == null || res.data.users == undefined || res.data.users == "") {
  735. data.users = []
  736. } else {
  737. data.users = data.users.split(',');
  738. let arr = []
  739. for (let d of data.users) {
  740. arr.push(parseInt(d))
  741. }
  742. data.users = arr;
  743. }
  744. this.meetingForm = data;
  745. }
  746. });
  747. listProjectContract({ contractId: this.taskForm.formId }).then(res => {
  748. if (res.rows) {
  749. let list = []
  750. for (let row of res.rows) {
  751. this.projectContractForm.projectIds.push(row.projectId);
  752. getProject(row.projectId).then(response => {
  753. list.push(response.data)
  754. })
  755. }
  756. this.chooseProjectList = list;
  757. this.projectloading = false;
  758. }
  759. })
  760. }
  761. })
  762. },
  763. // 查询业主单位列表
  764. getPartyAList() {
  765. this.loading = true
  766. listPartyA({
  767. pageNum: 1,
  768. pageSize: 99999999
  769. }).then(response => {
  770. this.partyAList = response.rows;
  771. })
  772. },
  773. // 查询项目列表
  774. getProjectList() {
  775. this.loading = true
  776. listProject({
  777. pageNum: 1,
  778. pageSize: 99999999
  779. }).then(response => {
  780. this.projectList = response.rows;
  781. })
  782. },
  783. getUserList() {
  784. listUser({ pageSize: 9999, pageNum: 1 }).then(res => {
  785. this.userList = res.rows
  786. })
  787. },
  788. getDeptList() {
  789. listDept({ pageSize: 9999, pageNum: 1 }).then(res => {
  790. this.deptList = res.data
  791. })
  792. },
  793. // 查询项目列表
  794. getTenderList() {
  795. this.loading = true
  796. listTender({
  797. pageNum: 1,
  798. pageSize: 99999999
  799. }).then(response => {
  800. this.tenderList = response.rows;
  801. })
  802. },
  803. // 选择项目
  804. handleSelectTender(val) {
  805. if (val != "" && val != undefined && val != null) {
  806. getTender(val).then(res => {
  807. this.chooseTender = res.data;
  808. this.isSelect = true;
  809. })
  810. } else {
  811. this.isSelect = false
  812. }
  813. },
  814. isEmptyObject(obj) {
  815. for (var key in obj) {
  816. if (obj.hasOwnProperty(key)) {
  817. return false;
  818. }
  819. }
  820. return true;
  821. },
  822. getProjectSource(chooseTender) {
  823. const TARGET_COMPANY = '中国电建集团成都勘测设计研究院有限公司';
  824. if (!chooseTender || !chooseTender.partyA || !chooseTender.partyA.partyAName) {
  825. return '';
  826. }
  827. return chooseTender.partyA.partyAName.includes(TARGET_COMPANY) ? '院内' : '院外';
  828. },
  829. addWorkList() {
  830. this.workList.push({
  831. content: "",
  832. scale: "",
  833. unit: "",
  834. workload: "",
  835. deadline: undefined,
  836. remark: "",
  837. });
  838. },
  839. addPaymentList() {
  840. this.paymentList.push({
  841. paymentCondition: "",
  842. paymentPercentage: "",
  843. paymentAmount: "",
  844. paymentTime: undefined,
  845. remark: "",
  846. });
  847. },
  848. addCommentList() {
  849. this.commentList.push({
  850. deptId: "",
  851. userId: "",
  852. comment: "",
  853. document: "",
  854. commentTime: undefined,
  855. });
  856. },
  857. deletWorkItem(index) {
  858. let arr = this.workList;
  859. if (arr.length == 1) {
  860. return;
  861. }
  862. if (index >= 0 && index < arr.length) {
  863. arr.splice(index, 1);
  864. }
  865. },
  866. deletPaymentItem(index) {
  867. let arr = this.paymentList;
  868. if (arr.length == 1) {
  869. return;
  870. }
  871. if (index >= 0 && index < arr.length) {
  872. arr.splice(index, 1);
  873. }
  874. },
  875. setCommentDocument(val) {
  876. let arr = val.split('/upload');
  877. this.clickTd.document = arr[1];
  878. },
  879. handleFileDelete(key, val) {
  880. key[val] = ''
  881. },
  882. clickFile(val) {
  883. this.clickTd = val
  884. },
  885. deletCommentItem(index) {
  886. let arr = this.commentList;
  887. if (arr.length == 1) {
  888. return;
  889. }
  890. if (index >= 0 && index < arr.length) {
  891. arr.splice(index, 1);
  892. }
  893. },
  894. changeCommentType(val) {
  895. if (val == '0') {
  896. this.commentOpen = false;
  897. this.meetingOpen = false;
  898. }
  899. else if (val == '1') {
  900. this.commentOpen = false;
  901. this.meetingOpen = true;
  902. }
  903. else if (val == '2') {
  904. this.commentOpen = true;
  905. this.meetingOpen = false;
  906. for (let comment of this.commentList) {
  907. getUsersDeptLeaderByDept({ deptId: comment.deptId }).then(res => {
  908. comment.userId = res.data.userId;
  909. })
  910. }
  911. }
  912. },
  913. getDeptLeader(val) {
  914. getUsersDeptLeaderByDept({ deptId: Number(val) }).then(res => {
  915. for (let comment of this.commentList) {
  916. if (comment.deptId == val)
  917. comment.userId = res.data.userId;
  918. }
  919. })
  920. },
  921. handleSelectProject() {
  922. this.chooseProjectList = [];
  923. for (let projectId of this.projectContractForm.projectIds) {
  924. getProject(projectId).then(res => {
  925. this.chooseProjectList.push(res.data)
  926. })
  927. }
  928. },
  929. // 表单重置
  930. reset() {
  931. this.form = {
  932. contractId: null,
  933. contractCode: null,
  934. contractNumber: null,
  935. amount: null,
  936. deposit: null,
  937. contractDocument: null,
  938. drafter: null,
  939. draftTime: null,
  940. remark: null,
  941. signDate: null,
  942. signRemark: null,
  943. signScan: null,
  944. commentType: ''
  945. };
  946. this.resetForm("form");
  947. },
  948. // 手动验证tenderId的方法
  949. validateTenderId(tenderId) {
  950. // 这里添加你的验证逻辑
  951. // 例如,检查tenderId是否为空或者是否符合其他规则
  952. if (!tenderId || tenderId.trim() === '') {
  953. this.$message.error('请选择一个有效的投标项目');
  954. return false;
  955. }
  956. return true;
  957. },
  958. validateDocument(doc) {
  959. // 这里添加你的验证逻辑
  960. // 例如,检查tenderId是否为空或者是否符合其他规则
  961. if (!doc || doc.trim() === '') {
  962. this.$message.error('请上传合同文件');
  963. return false;
  964. }
  965. return true;
  966. },
  967. /** 提交按钮 */
  968. submitForm() {
  969. this.isTenderIdValid = this.validateTenderId(this.form.tenderId);
  970. this.isDocumentValid = this.validateDocument(this.form.contractDocument)
  971. if (!this.isTenderIdValid) {
  972. // tenderId无效,阻止提交
  973. return;
  974. }
  975. if (!this.isDocumentValid) {
  976. return;
  977. }
  978. this.$refs["form"].validate(valid => {
  979. if (valid) {
  980. if (this.formTotal != 0) {
  981. const params = { taskId: this.taskForm.taskId };
  982. this.updateContractData();
  983. this.updateRelatedProject();
  984. if (this.taskName == '合同拟稿') {
  985. this.firstGetNextFlow();
  986. return
  987. }
  988. getNextFlowNode(params).then(res => {
  989. if (this.taskName == '分管审核') {
  990. complete(this.taskForm).then(response => {
  991. this.$modal.msgSuccess(response.msg);
  992. this.$emit('goBack')
  993. });
  994. }
  995. else if (this.taskName == '线上会审') {
  996. for (let comment of this.commentList) {
  997. updateContractComment(comment);
  998. }
  999. getUsersManageLeader({ userId: this.form.drafter }).then(res => {
  1000. let userId = res.data.userId;
  1001. this.$set(this.taskForm.variables, "approval", userId);
  1002. complete(this.taskForm).then(response => {
  1003. this.$modal.msgSuccess(response.msg);
  1004. this.$emit('goBack')
  1005. });
  1006. })
  1007. }
  1008. else if (this.taskName == '会议评审') {
  1009. this.meetingForm.contractId = this.form.contractId;
  1010. let formData = new FormData();
  1011. let jsonForm = JSON.stringify(this.meetingForm);
  1012. formData.append("form", jsonForm);
  1013. updateContractMeeting(formData);
  1014. getUsersManageLeader({ userId: this.form.drafter }).then(res => {
  1015. let userId = res.data.userId;
  1016. this.$set(this.taskForm.variables, "approval", userId);
  1017. complete(this.taskForm).then(response => {
  1018. this.$modal.msgSuccess(response.msg);
  1019. this.$emit('goBack')
  1020. });
  1021. })
  1022. }
  1023. else if (this.taskName == '合同签订') {
  1024. complete(this.taskForm).then(response => {
  1025. this.$modal.msgSuccess(response.msg);
  1026. this.$emit('goBack')
  1027. });
  1028. }
  1029. })
  1030. } else {
  1031. this.form.contractId = this.taskForm.formId;
  1032. addContract(this.form).then(response => {
  1033. if (response.code == 200) {
  1034. this.$modal.msgSuccess("新增成功");
  1035. this.open = false;
  1036. for (let work of this.workList) {
  1037. work.contractId = this.form.contractId
  1038. addContractWork(work);
  1039. }
  1040. for (let payment of this.paymentList) {
  1041. payment.contractId = this.form.contractId
  1042. addContractPayment(payment);
  1043. }
  1044. for (let projectId of this.projectContractForm.projectIds) {
  1045. addProjectContract({ projectId: projectId, contractId: this.form.contractId });
  1046. }
  1047. this.firstGetNextFlow();
  1048. } else {
  1049. this.$message.error("新增失败,请确认合同编码是否唯一");
  1050. }
  1051. });
  1052. }
  1053. }
  1054. });
  1055. },
  1056. updateContractData() {
  1057. updateContract(this.form).then(response => {
  1058. this.$modal.msgSuccess("数据添加成功");
  1059. this.open = false;
  1060. delContractWork(this.form.contractId).then(res => {
  1061. for (let work of this.workList) {
  1062. work.contractId = this.form.contractId
  1063. addContractWork(work);
  1064. }
  1065. })
  1066. delContractPayment(this.form.contractId).then(res => {
  1067. for (let payment of this.paymentList) {
  1068. payment.contractId = this.form.contractId
  1069. addContractPayment(payment);
  1070. }
  1071. })
  1072. });
  1073. },
  1074. updateRelatedProject() {
  1075. delProjectContract(this.taskForm.formId).then(() => {
  1076. for (let projectId of this.projectContractForm.projectIds) {
  1077. addProjectContract({ projectId: projectId, contractId: this.taskForm.formId });
  1078. }
  1079. })
  1080. },
  1081. firstGetNextFlow() {
  1082. const params = { taskId: this.taskForm.taskId };
  1083. getNextFlowNode(params).then(res => {
  1084. if (this.commentOpen == false && this.meetingOpen == false) {
  1085. getUsersManageLeader({ userId: this.$store.getters.userId }).then(res => {
  1086. let userId = res.data.userId;
  1087. this.$set(this.taskForm.variables, "approval", userId);
  1088. this.$set(this.taskForm.variables, "commentType", '0');
  1089. complete(this.taskForm).then(response => {
  1090. this.$modal.msgSuccess(response.msg);
  1091. this.$emit('goBack')
  1092. });
  1093. })
  1094. }
  1095. else if (this.commentOpen == true && this.meetingOpen == false) {
  1096. let approvalList = [];
  1097. for (let comment of this.commentList) {
  1098. comment.contractId = this.form.contractId
  1099. addContractComment(comment);
  1100. approvalList.push(comment.userId)
  1101. }
  1102. this.$set(this.taskForm.variables, "approvalList", approvalList);
  1103. this.$set(this.taskForm.variables, "commentType", '2');
  1104. complete(this.taskForm).then(response => {
  1105. this.$modal.msgSuccess(response.msg);
  1106. this.$emit('goBack')
  1107. });
  1108. }
  1109. else if (this.commentOpen == false && this.meetingOpen == true) {
  1110. this.meetingForm.contractId = this.form.contractId;
  1111. let formData = new FormData();
  1112. let jsonForm = JSON.stringify(this.meetingForm);
  1113. formData.append("form", jsonForm);
  1114. addContractMeeting(formData);
  1115. this.$set(this.taskForm.variables, "approval", this.meetingForm.hostId);
  1116. this.$set(this.taskForm.variables, "commentType", '1');
  1117. complete(this.taskForm).then(response => {
  1118. this.$modal.msgSuccess(response.msg);
  1119. this.$emit('goBack')
  1120. });
  1121. }
  1122. })
  1123. },
  1124. getContractPath(val) {
  1125. let arr = val.split('/upload')
  1126. this.form.contractDocument = arr[1]
  1127. if (val == "") {
  1128. this.form.contractDocument = ""
  1129. }
  1130. },
  1131. getSignScanPath(val) {
  1132. let arr = val.split('/upload')
  1133. this.form.signScan = arr[1]
  1134. if (val == "") {
  1135. this.form.signScan = ""
  1136. }
  1137. },
  1138. getMeetingPath(val) {
  1139. },
  1140. getFileName(name) {
  1141. if (name) {
  1142. let arr = name.split('/')
  1143. return arr[arr.length - 1];
  1144. }
  1145. },
  1146. confirmProject(val) {
  1147. this.open = false
  1148. for (let v of val) {
  1149. this.projectContractForm.projectIds.push(v.projectId);
  1150. }
  1151. this.chooseProjectList = val
  1152. },
  1153. confirmTender(val) {
  1154. this.tbOpen = false
  1155. this.form.amount = val.quote
  1156. this.form.deposit = val.deposit
  1157. this.form.tenderId = val.tenderId
  1158. this.chooseTender = val
  1159. this.isSelect = true
  1160. this.form.partyAId = val.partyAId
  1161. },
  1162. confirmPartyA(val) {
  1163. this.partyAOpen = false
  1164. if (val && val.length > 1) {
  1165. return this.$message.error('请选择一个甲方单位')
  1166. }
  1167. if (val) {
  1168. this.$set(this.form, 'partyAId', val[0].partyAId)
  1169. }
  1170. },
  1171. calculatePaymentAmount(payment) {
  1172. let amount = (payment.paymentPercentage / 100) * this.form.amount
  1173. this.$set(payment, 'paymentAmount', Number(amount))
  1174. },
  1175. reviewWord(url) {
  1176. this.$router.push({
  1177. path: '/preview',
  1178. query: {
  1179. url: url
  1180. }
  1181. })
  1182. }
  1183. }
  1184. }
  1185. </script>
  1186. <style lang="scss" scoped>
  1187. @import "@/assets/styles/element-reset.scss";
  1188. table {
  1189. /*边框*/
  1190. /* border: 1px solid black; */
  1191. text-align: center;
  1192. border-collapse: collapse;
  1193. /*设置背景颜色*/
  1194. /* background-color: #bfa; */
  1195. td {
  1196. padding: 5px;
  1197. }
  1198. }
  1199. .upload-file-uploader {
  1200. margin-bottom: 5px;
  1201. }
  1202. .upload-file-list .el-upload-list__item {
  1203. border: 1px solid #e4e7ed;
  1204. line-height: 2;
  1205. margin-bottom: 10px;
  1206. position: relative;
  1207. }
  1208. .upload-file-list .ele-upload-list__item-content {
  1209. display: flex;
  1210. justify-content: space-between;
  1211. align-items: center;
  1212. color: inherit;
  1213. }
  1214. .ele-upload-list__item-content-action .el-link {
  1215. margin-right: 10px;
  1216. }
  1217. </style>