plm前端
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.

2348 lines
93 KiB

2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
  1. <template>
  2. <div class="mod-config">
  3. <!-- 查询条件 -->
  4. <el-form :inline="true" label-position="top" :model="searchData" @keyup.enter.native="getDataList()">
  5. <el-form-item :label="'申请编码'">
  6. <el-input v-model="searchData.changeNo" clearable style="width: 120px"></el-input>
  7. </el-form-item>
  8. <el-form-item :label="' '">
  9. <el-button @click="getDataList()">查询</el-button>
  10. <download-excel
  11. :fields="fields()"
  12. :data="exportData"
  13. type="xls"
  14. :name="exportName"
  15. :header="exportHeader"
  16. :footer="exportFooter"
  17. :fetch="createExportData"
  18. :before-generate="startDownload"
  19. :before-finish="finishDownload"
  20. worksheet="导出信息"
  21. class="el-button el-button--primary el-button--medium">
  22. {{ "导出" }}
  23. </download-excel>
  24. </el-form-item>
  25. </el-form>
  26. <!-- 变更记录列表 -->
  27. <el-table
  28. :height="height"
  29. :data="dataList"
  30. border
  31. :row-style="rowStyle"
  32. ref="changeTable"
  33. @row-click="changeClickRow"
  34. @current-change="currentChange"
  35. style="width: 100%;">
  36. <el-table-column
  37. v-for="(item,index) in columnList" :key="index"
  38. :sortable="item.columnSortable"
  39. :prop="item.columnProp"
  40. :header-align="item.headerAlign"
  41. :show-overflow-tooltip="item.showOverflowTooltip"
  42. :align="item.align"
  43. :fixed="item.fixed === ''?false:item.fixed"
  44. :min-width="item.columnWidth"
  45. :label="item.columnLabel">
  46. <template slot-scope="scope">
  47. <span v-if="!item.columnHidden">{{ scope.row[item.columnProp] }}</span>
  48. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
  49. </template>
  50. </el-table-column>
  51. <el-table-column
  52. fixed="right"
  53. header-align="center"
  54. align="center"
  55. width="100"
  56. label="操作">
  57. <template slot-scope="scope">
  58. <el-link style="cursor: pointer" @click="updateModal(scope.row)">编辑</el-link>
  59. </template>
  60. </el-table-column>
  61. </el-table>
  62. <!-- 分页插件 -->
  63. <el-pagination style="margin-top: 0px"
  64. @size-change="sizeChangeHandle"
  65. @current-change="currentChangeHandle"
  66. :current-page="pageIndex"
  67. :page-sizes="[20, 50, 100, 200, 500]"
  68. :page-size="pageSize"
  69. :total="totalPage"
  70. layout="total, sizes, prev, pager, next, jumper">
  71. </el-pagination>
  72. <!-- 变更单模态框 -->
  73. <el-dialog :close-on-click-modal="false" v-drag :visible.sync="modalFlag" width="1060px" :showClose="false">
  74. <el-tabs tab-position="left" type="border-card" v-model="activeName" @tab-click="refreshChangeTab" style="width: 100%;height: 720px;">
  75. <el-tab-pane label="基本信息" name="basicInformation">
  76. <div style="height: 675px">
  77. <el-form :inline="true" label-position="top" :model="modalData" :rules="rules" style="margin-top: -5px;">
  78. <el-form-item prop="applicantId" :rules="rules.applicantId">
  79. <span style="cursor: pointer" slot="label" @click="getBaseList(103, 1)"><a herf="#">申请人</a></span>
  80. <el-input v-model="modalData.applicantId" style="width: 120px"></el-input>
  81. <el-input v-model="modalData.applicantName" disabled style="width: 300px"></el-input>
  82. </el-form-item>
  83. <el-form-item label="申请部门" >
  84. <el-input v-model="modalData.applicationDepartmentId" readonly style="width: 120px"></el-input>
  85. <el-input v-model="modalData.applicationDepartmentName" disabled style="width: 300px"></el-input>
  86. </el-form-item>
  87. </el-form>
  88. <el-form :inline="true" label-position="top" :model="modalData" :rules="rules">
  89. <el-form-item label="申请日期" prop="applicantId" :rules="rules.applyDate">
  90. <el-date-picker
  91. style="width: 205px"
  92. v-model="modalData.applyDate"
  93. type="date"
  94. value-format="yyyy-MM-dd"
  95. placeholder="请选择日期"
  96. :editable=false>
  97. </el-date-picker>
  98. </el-form-item>
  99. <el-form-item label="ECN变更影响" prop="changeImpact" :rules="rules.changeImpact">
  100. <dict-data-select v-model="modalData.changeImpact" style="width: 205px" dict-type="change_change_Impact"></dict-data-select>
  101. </el-form-item>
  102. <el-form-item label="变更影响描述" prop="changeImpactDesc" :rules="[{required: modalData.changeImpact === 'Y',message: ' ',trigger: ['blur','change']}]">
  103. <el-input v-model="modalData.changeImpactDesc" style="width: 423px"></el-input>
  104. </el-form-item>
  105. </el-form>
  106. <el-form :inline="true" label-position="top" :model="modalData" :rules="rules">
  107. <el-form-item label="ECN阶段" prop="ecnStage" :rules="rules.ecnStage">
  108. <dict-data-select v-model="modalData.ecnStage" style="width: 205px" dict-type="change_ecn_stage"></dict-data-select>
  109. </el-form-item>
  110. <el-form-item label="变更类别" prop="changeType" :rules="rules.changeType">
  111. <dict-data-select v-model="modalData.changeType" style="width: 100px" dict-type="change_change_type"></dict-data-select>
  112. </el-form-item>
  113. <el-form-item label=" ">
  114. <el-button type="primary" @click="chooseEcnTypeModal" style="width: 90px">ECN种类</el-button>
  115. </el-form-item>
  116. <el-form-item prop="tpEngineerId" :rules="rules.tpEngineerId">
  117. <span style="cursor: pointer" slot="label" @click="getBaseList(103,2)"><a href="#">TP工程师</a></span>
  118. <el-input v-model="modalData.tpEngineerId" style="width: 120px"></el-input>
  119. <el-input v-model="modalData.tpEngineerName" disabled style="width: 300px"></el-input>
  120. </el-form-item>
  121. </el-form>
  122. <el-form :inline="true" label-position="top" :model="modalData" :rules="rules">
  123. <el-form-item label="变更生效日期" prop="changePhaseInDate" :rules="rules.changePhaseInDate">
  124. <el-date-picker
  125. style="width: 205px"
  126. v-model="modalData.changePhaseInDate"
  127. type="date"
  128. value-format="yyyy-MM-dd"
  129. placeholder="请选择日期"
  130. :editable=false>
  131. </el-date-picker>
  132. </el-form-item>
  133. <el-form-item label="是否DF是产品" prop="dfIsProduct" :rules="rules.dfIsProduct">
  134. <dict-data-select v-model="modalData.dfIsProduct" style="width: 205px" dict-type="change_df_is_product"></dict-data-select>
  135. </el-form-item>
  136. <el-form-item label="印刷方式" prop="printing" :rules="rules.printing">
  137. <dict-data-select v-model="modalData.printing" style="width: 205px" dict-type="change_printing"></dict-data-select>
  138. </el-form-item>
  139. <el-form-item label="制造成本是否变更" prop="manufacturingCostIsChange" :rules="rules.manufacturingCostIsChange">
  140. <dict-data-select v-model="modalData.manufacturingCostIsChange" style="width: 205px" dict-type="change_manufacturing_cost_is_change"></dict-data-select>
  141. </el-form-item>
  142. </el-form>
  143. <el-form :inline="true" label-position="top" :model="modalData" :rules="rules">
  144. <el-form-item label="变更要求描述" prop="changeRequestDesc" :rules="rules.changeRequestDesc">
  145. <el-input type="textarea" v-model="modalData.changeRequestDesc" :rows="3" resize='none' show-word-limit style="width: 643px;height: 30px"></el-input>
  146. </el-form-item>
  147. <el-form-item label="是否重新报价" prop="isReQuote" :rules="rules.isReQuote">
  148. <dict-data-select v-model="modalData.isReQuote" style="width: 205px" dict-type="change_is_re_quote"></dict-data-select>
  149. </el-form-item>
  150. </el-form>
  151. <el-form :inline="true" label-position="top" :model="modalData" :rules="rules" style="margin-top: 50px">
  152. <el-form-item label="原产品是否UL认证要求" prop="ulCertificationRequirements" :rules="rules.ulCertificationRequirements">
  153. <dict-data-select v-model="modalData.ulCertificationRequirements" style="width: 423px" dict-type="change_ul_certification_requirements"></dict-data-select>
  154. </el-form-item>
  155. <el-form-item label="如果有,变更后能否继续满足此需求" prop="ulContinueToMeetDemand" :rules="rules.ulContinueToMeetDemand">
  156. <dict-data-select v-model="modalData.ulContinueToMeetDemand" style="width: 423px" dict-type="change_ul_continue_to_meet_demand"></dict-data-select>
  157. </el-form-item>
  158. </el-form>
  159. <el-form :inline="true" label-position="top" :model="modalData" :rules="rules">
  160. <el-form-item label="原产品是否GP要求" prop="gpCertificationRequirements" :rules="rules.gpCertificationRequirements">
  161. <dict-data-select v-model="modalData.gpCertificationRequirements" style="width: 423px" dict-type="change_gp_certification_requirements"></dict-data-select>
  162. </el-form-item>
  163. <el-form-item label="如果有,变更后能否继续满足此需求" prop="gpContinueToMeetDemand" :rules="rules.gpContinueToMeetDemand">
  164. <dict-data-select v-model="modalData.gpContinueToMeetDemand" style="width: 423px" dict-type="change_gp_continue_to_meet_demand"></dict-data-select>
  165. </el-form-item>
  166. </el-form>
  167. <el-form :inline="true" label-position="top">
  168. <div class="rq">
  169. <el-table
  170. :data="chooseDataList"
  171. height="300px"
  172. border
  173. style="width:100%">
  174. <el-table-column
  175. v-for="(item,index) in columnChooseDataList" :key="index"
  176. :sortable="item.columnSortable"
  177. :prop="item.columnProp"
  178. :header-align="item.headerAlign"
  179. :show-overflow-tooltip="item.showOverflowTooltip"
  180. :align="item.align"
  181. :fixed="item.fixed == ''?false:item.fixed"
  182. :min-width="item.columnWidth"
  183. :label="item.columnLabel">
  184. <template slot-scope="scope">
  185. <span v-if="!item.columnHidden">{{scope.row[item.columnProp]}}</span>
  186. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
  187. </template>
  188. </el-table-column>
  189. <el-table-column
  190. prop=""
  191. header-align="center"
  192. align="center"
  193. min-width="170"
  194. label="新物料编码">
  195. <template slot-scope="scope">
  196. <el-input @input="(val)=>partInput(scope.row, val)" :ref="`newPartNo${scope.$index}`" v-model="scope.row.newPartNo" @keyup.enter.native="focusNextInput(scope.$index, 'newPartNo')" style="width:77%"></el-input>
  197. <el-button type="primary" @click="choosePartNo(scope.row)" style="width:18%;padding: 3px 7px">·&nbsp;·&nbsp;·</el-button>
  198. </template>
  199. </el-table-column>
  200. <el-table-column
  201. prop=""
  202. header-align="center"
  203. align="center"
  204. min-width="90"
  205. label="新图纸编码">
  206. <template slot-scope="scope">
  207. <el-input :ref="`newDrawingNo${scope.$index}`" v-model="scope.row.newDrawingNo" @keyup.enter.native="focusNextInput(scope.$index, 'newDrawingNo')" style="width:98%"></el-input>
  208. </template>
  209. </el-table-column>
  210. <el-table-column
  211. prop=""
  212. header-align="center"
  213. align="center"
  214. min-width="90"
  215. label="新图稿编码">
  216. <template slot-scope="scope">
  217. <el-input :ref="`newDraftNo${scope.$index}`" v-model="scope.row.newDraftNo" @keyup.enter.native="focusNextInput(scope.$index, 'newDraftNo')" style="width:98%"></el-input>
  218. </template>
  219. </el-table-column>
  220. <el-table-column
  221. fixed="right"
  222. header-align="center"
  223. align="center"
  224. width="60"
  225. label="操作">
  226. <template slot-scope="scope">
  227. <el-link style="cursor: pointer" @click="deleteChooseDataModal(scope.row)">删除</el-link>
  228. </template>
  229. </el-table-column>
  230. </el-table>
  231. </div>
  232. </el-form>
  233. </div>
  234. <el-footer style="height:25px;text-align:center">
  235. <el-button type="primary" @click="saveData">保存</el-button>
  236. <el-button type="primary" @click="modalFlag = false">关闭</el-button>
  237. </el-footer>
  238. </el-tab-pane>
  239. <el-tab-pane label="库存成本影响" name="inventoryCostImpact">
  240. <div style="height: 675px">
  241. <el-form :inline="true" label-position="top" :model="costImpactData" style="margin-top: -5px;">
  242. <el-form-item style="margin-top: 20px;width: 155px">
  243. <el-checkbox v-model="costImpactData.productionProductFlag" true-label="Y">在生产品</el-checkbox>
  244. </el-form-item>
  245. <el-form-item label="数量">
  246. <el-input class="inlineNumber numInput" v-model="costImpactData.productionProductNumber" :disabled="costImpactData.productionProductFlag !== 'Y'" type="number" style="width: 100px"></el-input>
  247. </el-form-item>
  248. <el-form-item label="处理意见">
  249. <dict-data-select v-model="costImpactData.productionProductOpinions" :disabled="costImpactData.productionProductFlag !== 'Y'" style="width: 130px" dict-type="change_production_product_opinions"></dict-data-select>
  250. </el-form-item>
  251. <el-form-item label=" " style="margin-left: -10px">
  252. <el-input v-model="costImpactData.productionProductRemark" :disabled="costImpactData.productionProductFlag !== 'Y'" style="width: 300px"></el-input>
  253. </el-form-item>
  254. <el-form-item>
  255. <span style="cursor: pointer" slot="label" @click="getBaseList(103, 3)"><a herf="#">执行人</a></span>
  256. <el-input v-model="costImpactData.productionProductExecutorName" :disabled="costImpactData.productionProductFlag !== 'Y'" style="width: 130px"></el-input>
  257. </el-form-item>
  258. </el-form>
  259. <el-form :inline="true" label-position="top" :model="costImpactData" style="margin-top: 10px;">
  260. <el-form-item style="margin-top: 20px;width: 155px">
  261. <el-checkbox v-model="costImpactData.inventoryProductFlag" true-label="Y">成品库存</el-checkbox>
  262. </el-form-item>
  263. <el-form-item label="数量">
  264. <el-input class="inlineNumber numInput" v-model="costImpactData.inventoryProductNumber" :disabled="costImpactData.inventoryProductFlag !== 'Y'" type="number" style="width: 100px"></el-input>
  265. </el-form-item>
  266. <el-form-item label="处理意见">
  267. <dict-data-select v-model="costImpactData.inventoryProductOpinions" :disabled="costImpactData.inventoryProductFlag !== 'Y'" style="width: 130px" dict-type="change_inventory_product_opinions"></dict-data-select>
  268. </el-form-item>
  269. <el-form-item label=" " style="margin-left: -10px">
  270. <el-input v-model="costImpactData.inventoryProductRemark" :disabled="costImpactData.inventoryProductFlag !== 'Y'" style="width: 300px"></el-input>
  271. </el-form-item>
  272. <el-form-item>
  273. <span style="cursor: pointer" slot="label" @click="getBaseList(103, 4)"><a herf="#">执行人</a></span>
  274. <el-input v-model="costImpactData.inventoryProductExecutorName" :disabled="costImpactData.inventoryProductFlag !== 'Y'" style="width: 130px"></el-input>
  275. </el-form-item>
  276. </el-form>
  277. <el-form :inline="true" label-position="top" :model="costImpactData" style="margin-top: 10px;">
  278. <el-form-item style="margin-top: 20px;width: 155px">
  279. <el-checkbox v-model="costImpactData.newOrderFlag" true-label="Y">新订单</el-checkbox>
  280. </el-form-item>
  281. <el-form-item label="数量">
  282. <el-input class="inlineNumber numInput" v-model="costImpactData.newOrderNumber" :disabled="costImpactData.newOrderFlag !== 'Y'" type="number" style="width: 100px"></el-input>
  283. </el-form-item>
  284. </el-form>
  285. <el-form :inline="true" label-position="top" :model="costImpactData" style="margin-top: 10px;">
  286. <el-form-item style="margin-top: 20px;width: 155px">
  287. <el-checkbox v-model="costImpactData.affectedFlag" true-label="Y">影响的原材料及其库存量</el-checkbox>
  288. </el-form-item>
  289. <el-form-item label="数量">
  290. <el-input class="inlineNumber numInput" v-model="costImpactData.affectedNumber" :disabled="costImpactData.affectedFlag !== 'Y'" type="number" style="width: 100px"></el-input>
  291. </el-form-item>
  292. <el-form-item label="处理意见">
  293. <dict-data-select v-model="costImpactData.affectedOpinions" :disabled="costImpactData.affectedFlag !== 'Y'" style="width: 130px" dict-type="change_affected_opinions"></dict-data-select>
  294. </el-form-item>
  295. <el-form-item label=" " style="margin-left: -10px">
  296. <el-input v-model="costImpactData.affectedRemark" :disabled="costImpactData.affectedFlag !== 'Y'" style="width: 300px"></el-input>
  297. </el-form-item>
  298. <el-form-item>
  299. <span style="cursor: pointer" slot="label" @click="getBaseList(103, 5)"><a herf="#">执行人</a></span>
  300. <el-input v-model="costImpactData.affectedExecutorName" :disabled="costImpactData.affectedFlag !== 'Y'" style="width: 130px"></el-input>
  301. </el-form-item>
  302. </el-form>
  303. <el-form :inline="true" label-position="top" :model="costImpactData" style="margin-top: 10px;">
  304. <el-form-item label="ECN变更总成本" style="width: 155px">
  305. <el-input class="inlineNumber numInput" v-model="costImpactData.changeTotalCost" type="number" style="width: 125px"></el-input>
  306. </el-form-item>
  307. <el-form-item label="备注">
  308. <el-input v-model="costImpactData.remark" style="width: 300px"></el-input>
  309. </el-form-item>
  310. </el-form>
  311. </div>
  312. <el-footer style="height:25px;text-align:center">
  313. <el-button type="primary" @click="inventoryCostImpactSave">保存</el-button>
  314. <el-button type="primary" @click="modalFlag = false">关闭</el-button>
  315. </el-footer>
  316. </el-tab-pane>
  317. <el-tab-pane label="TP&执行信息" name="actionInformation">
  318. <div style="height: 675px">
  319. <el-form :inline="true" label-position="top" :model="executionInfoData" style="margin-top: -5px;">
  320. <el-form-item label="原菲林编号">
  321. <el-input v-model="executionInfoData.originalFilmNo" style="width: 230px"></el-input>
  322. </el-form-item>
  323. <el-form-item label="原啤刀编号">
  324. <el-input v-model="executionInfoData.originalDieCuttingRuleNo" style="width: 230px"></el-input>
  325. </el-form-item>
  326. <el-form-item label="原网板/印版编号">
  327. <el-input v-model="executionInfoData.originalStencilNo" style="width: 230px"></el-input>
  328. </el-form-item>
  329. <el-form-item label="ECN执行日期">
  330. <el-date-picker style="width: 130px" v-model="executionInfoData.executionDate" type="date" value-format="yyyy-MM-dd" placeholder="请选择日期" :editable=false></el-date-picker>
  331. </el-form-item>
  332. </el-form>
  333. <el-form :inline="true" label-position="top" :model="executionInfoData" style="margin-top: -5px;">
  334. <el-form-item label="新菲林编号">
  335. <el-input v-model="executionInfoData.newFilmNo" style="width: 230px"></el-input>
  336. </el-form-item>
  337. <el-form-item label="新啤刀编号">
  338. <el-input v-model="executionInfoData.newDieCuttingRuleNo" style="width: 230px"></el-input>
  339. </el-form-item>
  340. <el-form-item label="新网板/印版编号">
  341. <el-input v-model="executionInfoData.newStencilNo" style="width: 230px"></el-input>
  342. </el-form-item>
  343. </el-form>
  344. <div style="text-align: center ;font-size: 11px">
  345. <span> --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- </span>
  346. </div>
  347. <!-- <el-button type="primary" @click="chooseModel">选择执行模板</el-button>-->
  348. <div class="rq">
  349. <el-table
  350. :data="chooseItemList"
  351. height="500px"
  352. border
  353. style="width: 100%">
  354. <el-table-column
  355. v-for="(item,index) in columnChooseItemList" :key="index"
  356. :sortable="item.columnSortable"
  357. :prop="item.columnProp"
  358. :header-align="item.headerAlign"
  359. :show-overflow-tooltip="item.showOverflowTooltip"
  360. :align="item.align"
  361. :fixed="item.fixed == ''?false:item.fixed"
  362. :min-width="item.columnWidth"
  363. :label="item.columnLabel">
  364. <template slot-scope="scope">
  365. <span v-if="!item.columnHidden">{{scope.row[item.columnProp]}}</span>
  366. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
  367. </template>
  368. </el-table-column>
  369. <el-table-column
  370. prop=""
  371. header-align="center"
  372. align="center"
  373. min-width="100"
  374. label="备注">
  375. <template slot-scope="scope">
  376. <el-input v-model="scope.row.itemRemark" style="height: 11px" allow-create>;width:98%"></el-input>
  377. </template>
  378. </el-table-column>
  379. <el-table-column
  380. fixed="right"
  381. header-align="center"
  382. align="center"
  383. width="60"
  384. label="操作">
  385. <template slot-scope="scope">
  386. <el-link v-if="scope.row.executeFlag !== 'Y'" style="cursor: pointer" @click="executeModal(scope.row)">执行</el-link>
  387. </template>
  388. </el-table-column>
  389. </el-table>
  390. </div>
  391. </div>
  392. <el-footer style="height:25px;text-align:center">
  393. <el-button type="primary" @click="executionInformationSave">保存</el-button>
  394. <el-button type="primary" @click="modalFlag = false">关闭</el-button>
  395. </el-footer>
  396. </el-tab-pane>
  397. <el-tab-pane label="会签信息" name="countersignature">
  398. <div style="height: 675px">
  399. <div class="rq">
  400. <el-table
  401. :data="chooseCSItemList"
  402. height="600px"
  403. border
  404. style="width: 100%">
  405. <el-table-column
  406. v-for="(item,index) in columnCSChooseItemList" :key="index"
  407. :sortable="item.columnSortable"
  408. :prop="item.columnProp"
  409. :header-align="item.headerAlign"
  410. :show-overflow-tooltip="item.showOverflowTooltip"
  411. :align="item.align"
  412. :fixed="item.fixed == ''?false:item.fixed"
  413. :min-width="item.columnWidth"
  414. :label="item.columnLabel">
  415. <template slot-scope="scope">
  416. <span v-if="!item.columnHidden">{{scope.row[item.columnProp]}}</span>
  417. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
  418. </template>
  419. </el-table-column>
  420. <el-table-column
  421. prop=""
  422. header-align="center"
  423. align="center"
  424. min-width="100"
  425. label="备注">
  426. <template slot-scope="scope">
  427. <el-input v-model="scope.row.itemRemark" style="height: 11px" allow-create>;width:98%"></el-input>
  428. </template>
  429. </el-table-column>
  430. <el-table-column
  431. fixed="right"
  432. header-align="center"
  433. align="center"
  434. width="60"
  435. label="操作">
  436. <template slot-scope="scope">
  437. <el-link v-if="scope.row.executeFlag !== 'Y'" style="cursor: pointer" @click="executeCSModal(scope.row)">执行</el-link>
  438. </template>
  439. </el-table-column>
  440. </el-table>
  441. </div>
  442. </div>
  443. <el-footer style="height:25px;text-align:center">
  444. <el-button type="primary" @click="countersignatureSave">保存</el-button>
  445. <el-button type="primary" @click="modalFlag = false">关闭</el-button>
  446. </el-footer>
  447. </el-tab-pane>
  448. </el-tabs>
  449. </el-dialog>
  450. <!-- 页签 -->
  451. <el-tabs v-model="activeTable" style="width: 100%; height: 100%;" type="border-card" @tab-click="refreshCurrentTabTable" class="customer-tab">
  452. <!-- 基本信息页签 -->
  453. <el-tab-pane label="基本信息" name="basicInformation">
  454. <el-table
  455. :data="detailList"
  456. :height="secondHeight"
  457. border
  458. ref="detailTable"
  459. style="width: 100%;">
  460. <el-table-column
  461. v-for="(item,index) in detailColumnList" :key="index"
  462. :sortable="item.columnSortable"
  463. :prop="item.columnProp"
  464. :header-align="item.headerAlign"
  465. :show-overflow-tooltip="item.showOverflowTooltip"
  466. :align="item.align"
  467. :fixed="item.fixed === '' ? false : item.fixed"
  468. :min-width="item.columnWidth"
  469. :label="item.columnLabel">
  470. <template slot-scope="scope">
  471. <span v-if="!item.columnHidden">{{scope.row[item.columnProp]}}</span>
  472. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
  473. </template>
  474. </el-table-column>
  475. </el-table>
  476. </el-tab-pane>
  477. <!-- 附件信息页签 -->
  478. <el-tab-pane label="附件信息" name="fileInformation">
  479. <el-form :inline="true" label-position="top" style="margin-top: 5px">
  480. <el-button type="primary" @click="uploadFileModal">新增</el-button>
  481. <el-button type="primary" @click="deleteChangeFile">删除</el-button>
  482. </el-form>
  483. <el-table
  484. :data="fileList"
  485. :height="secondHeight - 25"
  486. border
  487. ref="fileTable"
  488. @selection-change="selectionFile"
  489. style="width: 100%;">
  490. <el-table-column
  491. type="selection"
  492. header-align="center"
  493. align="center"
  494. :selectable="selectFlag"
  495. width="50">
  496. </el-table-column>
  497. <el-table-column
  498. v-for="(item,index) in fileColumnList" :key="index"
  499. :sortable="item.columnSortable"
  500. :prop="item.columnProp"
  501. :header-align="item.headerAlign"
  502. :show-overflow-tooltip="item.showOverflowTooltip"
  503. :align="item.align"
  504. :fixed="item.fixed === '' ? false : item.fixed"
  505. :min-width="item.columnWidth"
  506. :label="item.columnLabel">
  507. <template slot-scope="scope">
  508. <span v-if="!item.columnHidden">{{scope.row[item.columnProp]}}</span>
  509. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
  510. </template>
  511. </el-table-column>
  512. <el-table-column
  513. fixed="right"
  514. header-align="center"
  515. align="center"
  516. width="100"
  517. label="操作">
  518. <template slot-scope="scope">
  519. <el-link style="cursor: pointer" @click="">预览</el-link>
  520. <el-link style="cursor: pointer" @click="downloadFile(scope.row)">下载</el-link>
  521. </template>
  522. </el-table-column>
  523. </el-table>
  524. </el-tab-pane>
  525. <!-- 库存成本影响页签 -->
  526. <el-tab-pane label="库存成本影响" name="inventoryCostImpact">
  527. <div :style="{height: secondHeight - 15 + 'px'}" style="margin-left: 20px;margin-top: 15px">
  528. <el-form :inline="true" label-position="top" :model="currentCostImpactData">
  529. <el-form-item style="margin-top: 20px;width: 155px">
  530. <el-checkbox v-model="currentCostImpactData.productionProductFlag" disabled true-label="Y">在生产品</el-checkbox>
  531. </el-form-item>
  532. <el-form-item label="数量">
  533. <el-input class="inlineNumber numInput" v-model="currentCostImpactData.productionProductNumber" readonly :disabled="currentCostImpactData.productionProductFlag !== 'Y'" type="number" style="width: 100px"></el-input>
  534. </el-form-item>
  535. <el-form-item label="处理意见">
  536. <dict-data-select v-model="currentCostImpactData.productionProductOpinions" :disabled="currentCostImpactData.productionProductFlag !== 'Y'" style="width: 130px" dict-type="change_production_product_opinions"></dict-data-select>
  537. </el-form-item>
  538. <el-form-item label=" " style="margin-left: -10px">
  539. <el-input v-model="currentCostImpactData.productionProductRemark" readonly :disabled="currentCostImpactData.productionProductFlag !== 'Y'" style="width: 300px"></el-input>
  540. </el-form-item>
  541. <el-form-item label="执行人">
  542. <el-input v-model="currentCostImpactData.productionProductExecutorName" readonly :disabled="currentCostImpactData.productionProductFlag !== 'Y'" style="width: 130px"></el-input>
  543. </el-form-item>
  544. </el-form>
  545. <el-form :inline="true" label-position="top" :model="currentCostImpactData" style="margin-top: 10px;">
  546. <el-form-item style="margin-top: 20px;width: 155px">
  547. <el-checkbox v-model="currentCostImpactData.inventoryProductFlag" disabled true-label="Y">成品库存</el-checkbox>
  548. </el-form-item>
  549. <el-form-item label="数量">
  550. <el-input class="inlineNumber numInput" v-model="currentCostImpactData.inventoryProductNumber" readonly :disabled="currentCostImpactData.inventoryProductFlag !== 'Y'" type="number" style="width: 100px"></el-input>
  551. </el-form-item>
  552. <el-form-item label="处理意见">
  553. <dict-data-select v-model="currentCostImpactData.inventoryProductOpinions" :disabled="currentCostImpactData.inventoryProductFlag !== 'Y'" style="width: 130px" dict-type="change_inventory_product_opinions"></dict-data-select>
  554. </el-form-item>
  555. <el-form-item label=" " style="margin-left: -10px">
  556. <el-input v-model="currentCostImpactData.inventoryProductRemark" readonly :disabled="currentCostImpactData.inventoryProductFlag !== 'Y'" style="width: 300px"></el-input>
  557. </el-form-item>
  558. <el-form-item label="执行人">
  559. <el-input v-model="currentCostImpactData.inventoryProductExecutorName" :disabled="currentCostImpactData.inventoryProductFlag !== 'Y'" style="width: 130px"></el-input>
  560. </el-form-item>
  561. </el-form>
  562. <el-form :inline="true" label-position="top" :model="currentCostImpactData" style="margin-top: 10px;">
  563. <el-form-item style="margin-top: 20px;width: 155px">
  564. <el-checkbox v-model="currentCostImpactData.newOrderFlag" disabled true-label="Y">新订单</el-checkbox>
  565. </el-form-item>
  566. <el-form-item label="数量">
  567. <el-input class="inlineNumber numInput" v-model="currentCostImpactData.newOrderNumber" readonly :disabled="currentCostImpactData.newOrderFlag !== 'Y'" type="number" style="width: 100px"></el-input>
  568. </el-form-item>
  569. </el-form>
  570. <el-form :inline="true" label-position="top" :model="currentCostImpactData" style="margin-top: 10px;">
  571. <el-form-item style="margin-top: 20px;width: 155px">
  572. <el-checkbox v-model="currentCostImpactData.affectedFlag" disabled true-label="Y">影响的原材料及其库存量</el-checkbox>
  573. </el-form-item>
  574. <el-form-item label="数量">
  575. <el-input class="inlineNumber numInput" v-model="currentCostImpactData.affectedNumber" readonly :disabled="currentCostImpactData.affectedFlag !== 'Y'" type="number" style="width: 100px"></el-input>
  576. </el-form-item>
  577. <el-form-item label="处理意见">
  578. <dict-data-select v-model="currentCostImpactData.affectedOpinions" :disabled="currentCostImpactData.affectedFlag !== 'Y'" style="width: 130px" dict-type="change_affected_opinions"></dict-data-select>
  579. </el-form-item>
  580. <el-form-item label=" " style="margin-left: -10px">
  581. <el-input v-model="currentCostImpactData.affectedRemark" readonly :disabled="currentCostImpactData.affectedFlag !== 'Y'" style="width: 300px"></el-input>
  582. </el-form-item>
  583. <el-form-item label="执行人">
  584. <el-input v-model="currentCostImpactData.affectedExecutorName" :disabled="currentCostImpactData.affectedFlag !== 'Y'" style="width: 130px"></el-input>
  585. </el-form-item>
  586. </el-form>
  587. <el-form :inline="true" label-position="top" :model="currentCostImpactData" style="margin-top: 10px;">
  588. <el-form-item label="ECN变更总成本" style="width: 155px">
  589. <el-input class="inlineNumber numInput" v-model="currentCostImpactData.changeTotalCost" readonly type="number" style="width: 125px"></el-input>
  590. </el-form-item>
  591. <el-form-item label="备注">
  592. <el-input v-model="currentCostImpactData.remark" readonly style="width: 300px"></el-input>
  593. </el-form-item>
  594. </el-form>
  595. </div>
  596. </el-tab-pane>
  597. </el-tabs>
  598. <!-- ECN种类模态框 -->
  599. <el-dialog title="ECN种类" :close-on-click-modal="false" v-drag :visible.sync="ecnTypeModalFlag" width="900px">
  600. <el-form ref="dataForm" label-position="right">
  601. <el-row v-for="(item, index) in form" :key="index" style="margin-top: 10px">
  602. <el-col :span="8">
  603. <el-form-item :prop="'input.'+index+'.value'">
  604. <el-checkbox v-model="item.flag" @change="(val)=>ecnTypeHeaderChange(val,index)" :indeterminate="item.list.filter(a => a.flag === 'Y').length !== 0 && item.list.filter(a => a.flag === 'Y').length !== item.list.length" true-label="Y">{{item.value}}</el-checkbox>
  605. </el-form-item>
  606. </el-col>
  607. <el-col :span="16">
  608. <div v-for="i in item.list">
  609. <el-form-item :prop="'input.'+index+'.value'">
  610. <el-checkbox v-model="i.flag" @change="(val)=>ecnTypeDetailChange(val,index)" true-label="Y">{{i.value}}</el-checkbox>
  611. </el-form-item>
  612. </div>
  613. </el-col>
  614. </el-row>
  615. </el-form>
  616. <el-footer style="height:30px;text-align:center">
  617. <el-button type="primary" @click="saveEcnTypeData">保存</el-button>
  618. <el-button type="primary" @click="ecnTypeModalFlag = false">关闭</el-button>
  619. </el-footer>
  620. </el-dialog>
  621. <!-- 模板属性清单 -->
  622. <el-dialog title="属性清单" :close-on-click-modal="false" v-drag :visible.sync="chooseModelFlag" width="820px">
  623. <div class="rq">
  624. <el-form :inline="true" label-position="top" :model="chooseModelData">
  625. <el-form-item :label="'模板'">
  626. <el-select value="roleName" v-model="chooseModelData.codeNo" placeholder="请选择" style="width: 120px">
  627. <el-option
  628. v-for = "i in modelList"
  629. :key = "i.codeNo"
  630. :label = "i.codeDesc"
  631. :value = "i.codeNo">
  632. </el-option>
  633. </el-select>
  634. </el-form-item>
  635. <el-form-item label="属性编码">
  636. <el-input v-model="chooseModelData.itemNo" clearable style="width: 120px"></el-input>
  637. </el-form-item>
  638. <el-form-item label="属性名称">
  639. <el-input v-model="chooseModelData.itemDesc" clearable style="width: 120px"></el-input>
  640. </el-form-item>
  641. <el-form-item :label="' '">
  642. <el-button type="primary" @click="searchItemList()">查询</el-button>
  643. </el-form-item>
  644. </el-form>
  645. <el-table
  646. :height="300"
  647. :data="itemList"
  648. ref="itemTable"
  649. @row-click="itemClickRow"
  650. @selection-change="selectionItem"
  651. border
  652. style="width: 100%;">
  653. <el-table-column
  654. type="selection"
  655. header-align="center"
  656. align="center"
  657. width="50">
  658. </el-table-column>
  659. <el-table-column
  660. v-for="(item,index) in columnItemList" :key="index"
  661. :sortable="item.columnSortable"
  662. :prop="item.columnProp"
  663. :header-align="item.headerAlign"
  664. :show-overflow-tooltip="item.showOverflowTooltip"
  665. :align="item.align"
  666. :fixed="item.fixed==''?false:item.fixed"
  667. :min-width="item.columnWidth"
  668. :label="item.columnLabel">
  669. <template slot-scope="scope">
  670. <span v-if="!item.columnHidden">{{ scope.row[item.columnProp] }}</span>
  671. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
  672. </template>
  673. </el-table-column>
  674. </el-table>
  675. </div>
  676. <el-footer style="height:40px;margin-top: 20px;text-align:center">
  677. <el-button type="primary" @click="confirmItem">确认</el-button>
  678. <el-button type="primary" @click="chooseModelFlag = false">关闭</el-button>
  679. </el-footer>
  680. </el-dialog>
  681. <ChooseList ref="baseList" @getBaseData="getBaseData"></ChooseList>
  682. <!-- 上传文件的modal -->
  683. <changeUploadFile ref="changeUploadFile" @refreshPageTables="getChangeFileList" v-drag></changeUploadFile>
  684. </div>
  685. </template>
  686. <script>
  687. import {
  688. changeRecordSearch, // 获取工程变更记录列表
  689. changeDetailSearch, // 变更单详情的列表
  690. changeFileSearch, // 变更单文件的列表
  691. deleteChangeFile, // 删除变更单文件
  692. costImpactSearch, // 查询库存成本影响
  693. costImpactUpdate, // 编辑库存成本影响
  694. executionInfoSearch, // 查询执行信息
  695. requestDetailSearch, // 查询变更明细
  696. deleteChangeDetail, // 删除变更明细
  697. getDepartmentByUserName, // 根据用户编码获得用户部门
  698. changeRequestUpdate, // 编辑变更单基础信息
  699. getEcnModel, // 查询ECN的模板
  700. getChooseEcnType, // 查询所选择的ECN种类
  701. getItemList, // 查询模板属性
  702. executionUpdate, // 修改执行信息
  703. countersignatureSearch, // 查询会签信息
  704. countersignatureUpdate, // 编辑会签信息
  705. } from '@/api/changeManagement/changeManagement.js'
  706. import ChooseList from '@/views/modules/common/Chooselist'
  707. import changeUploadFile from "../base/upload_file.vue";
  708. import {downLoadQuotationFile} from '@/api/quotation/quotationInformation.js'
  709. import DictDataSelect from "../sys/dict-data-select.vue";
  710. export default {
  711. components: {
  712. DictDataSelect,
  713. changeUploadFile,
  714. ChooseList,
  715. },
  716. watch: {
  717. },
  718. data () {
  719. return {
  720. // 导出
  721. exportData: [],
  722. exportName: '工程变更记录' + this.dayjs().format('YYYYMMDDHHmmss'),
  723. exportHeader: ['工程变更记录'],
  724. exportFooter: [],
  725. resultList: [],
  726. // ======== 行高 ========
  727. height: 200,
  728. secondHeight: 200,
  729. // ======== 分页 ========
  730. pageIndex: 1,
  731. pageSize: 50,
  732. totalPage: 0,
  733. // 条件查询
  734. searchData: {
  735. site: this.$store.state.user.site,
  736. changeNo: '',
  737. page: 1,
  738. limit: 10
  739. },
  740. // 初始页签
  741. activeTable: 'basicInformation',
  742. activeName: 'basicInformation',
  743. tempPartRow: {},
  744. // ======== 数据对象 ========
  745. modalData: {
  746. site: this.$store.state.user.site,
  747. changeNo: '',
  748. applicantId: '',
  749. applicantName: '',
  750. applicationDepartmentId: '',
  751. applicationDepartmentName: '',
  752. applyDate: '',
  753. ecnType: '',
  754. changeImpact: '',
  755. changeImpactDesc: '',
  756. ecnStage: '',
  757. changeType: '',
  758. tpEngineerId: '',
  759. tpEngineerName: '',
  760. changePhaseInDate: '',
  761. dfIsProduct: '',
  762. printing: '',
  763. manufacturingCostIsChange: '',
  764. changeRequestDesc: '',
  765. isReQuote: '',
  766. ulCertificationRequirements: '',
  767. ulContinueToMeetDemand: '',
  768. gpCertificationRequirements: '',
  769. gpContinueToMeetDemand: '',
  770. detailList: [],
  771. ecnTypeData: []
  772. },
  773. costImpactData: {
  774. site: this.$store.state.user.site,
  775. changeNo: '',
  776. productionProductFlag: '',
  777. inventoryProductFlag: '',
  778. newOrderFlag: '',
  779. affectedFlag: '',
  780. productionProductNumber: '',
  781. productionProductOpinions: '',
  782. productionProductRemark: '',
  783. productionProductExecutor: '',
  784. productionProductExecutorName: '',
  785. inventoryProductNumber: '',
  786. inventoryProductOpinions: '',
  787. inventoryProductRemark: '',
  788. inventoryProductExecutor: '',
  789. inventoryProductExecutorName: '',
  790. newOrderNumber: '',
  791. affectedNumber: '',
  792. affectedOpinions: '',
  793. affectedRemark: '',
  794. affectedExecutor: '',
  795. affectedExecutorName: '',
  796. changeTotalCost: '',
  797. remark: '',
  798. createBy: '',
  799. updateBy: ''
  800. },
  801. executionInfoData: {
  802. site: this.$store.state.user.site,
  803. changeNo: '',
  804. originalFilmNo: '',
  805. newFilmNo: '',
  806. originalDieCuttingRuleNo: '',
  807. newDieCuttingRuleNo: '',
  808. originalStencilNo: '',
  809. newStencilNo: '',
  810. executionDate: '',
  811. createBy: '',
  812. updateBy: '',
  813. chooseItemList: []
  814. },
  815. chooseModelData: {
  816. site: this.$store.state.user.site,
  817. functionType: 'ECN',
  818. itemNo: '',
  819. itemDesc: '',
  820. codeNo: ''
  821. },
  822. countersignatureData: {
  823. site: this.$store.state.user.site,
  824. changeNo: '',
  825. createBy: '',
  826. updateBy: '',
  827. chooseCSItemList: []
  828. },
  829. // ======== 数据列表 ========
  830. dataList: [],
  831. detailList: [],
  832. fileList: [],
  833. chooseItemList: [],
  834. chooseCSItemList: [],
  835. chooseDataList: [],
  836. form: [],
  837. modelList: [],
  838. itemList: [],
  839. // ======== 列表表头 ========
  840. columnList: [
  841. {
  842. userId: this.$store.state.user.name,
  843. functionId: 108002,
  844. serialNumber: '108002Table1ChangeNo',
  845. tableId: '108002Table1',
  846. tableName: '工程变更记录表',
  847. columnProp: 'changeNo',
  848. headerAlign: 'center',
  849. align: 'center',
  850. columnLabel: '申请编号',
  851. columnHidden: false,
  852. columnImage: false,
  853. status: true,
  854. fixed: '',
  855. columnWidth: 120
  856. },
  857. {
  858. userId: this.$store.state.user.name,
  859. functionId: 108002,
  860. serialNumber: '108002Table1ApplicantName',
  861. tableId: '108002Table1',
  862. tableName: '工程变更记录表',
  863. columnProp: 'applicantName',
  864. headerAlign: 'center',
  865. align: 'center',
  866. columnLabel: '申请人',
  867. columnHidden: false,
  868. columnImage: false,
  869. status: true,
  870. fixed: '',
  871. columnWidth: 120
  872. },
  873. {
  874. userId: this.$store.state.user.name,
  875. functionId: 108002,
  876. serialNumber: '108002Table1DepartmentName',
  877. tableId: '108002Table1',
  878. tableName: '工程变更记录表',
  879. columnProp: 'applicationDepartmentName',
  880. headerAlign: 'center',
  881. align: 'center',
  882. columnLabel: '申请部门',
  883. columnHidden: false,
  884. columnImage: false,
  885. status: true,
  886. fixed: '',
  887. columnWidth: 120
  888. },
  889. {
  890. userId: this.$store.state.user.name,
  891. functionId: 108002,
  892. serialNumber: '108002Table1EcnStage',
  893. tableId: '108002Table1',
  894. tableName: '工程变更记录表',
  895. columnProp: 'ecnStage',
  896. headerAlign: 'center',
  897. align: 'center',
  898. columnLabel: 'ECN阶段',
  899. columnHidden: false,
  900. columnImage: false,
  901. status: true,
  902. fixed: '',
  903. columnWidth: 100
  904. },
  905. {
  906. userId: this.$store.state.user.name,
  907. functionId: 108002,
  908. serialNumber: '108002Table1ChangeType',
  909. tableId: '108002Table1',
  910. tableName: '工程变更记录表',
  911. columnProp: 'changeType',
  912. headerAlign: 'center',
  913. align: 'center',
  914. columnLabel: '变更类别',
  915. columnHidden: false,
  916. columnImage: false,
  917. status: true,
  918. fixed: '',
  919. columnWidth: 100
  920. },
  921. {
  922. userId: this.$store.state.user.name,
  923. functionId: 108002,
  924. serialNumber: '108002Table1EcnType',
  925. tableId: '108002Table1',
  926. tableName: '工程变更记录表',
  927. columnProp: 'ecnType',
  928. headerAlign: 'center',
  929. align: 'center',
  930. columnLabel: 'ECN种类',
  931. columnHidden: false,
  932. columnImage: false,
  933. status: true,
  934. fixed: '',
  935. columnWidth: 100
  936. },
  937. {
  938. userId: this.$store.state.user.name,
  939. functionId: 108002,
  940. serialNumber: '108002Table1ApplyDate',
  941. tableId: '108002Table1',
  942. tableName: '工程变更记录表',
  943. columnProp: 'applyDate',
  944. headerAlign: 'center',
  945. align: 'center',
  946. columnLabel: '申请日期',
  947. columnHidden: false,
  948. columnImage: false,
  949. status: true,
  950. fixed: '',
  951. columnWidth: 100
  952. },
  953. {
  954. userId: this.$store.state.user.name,
  955. functionId: 108002,
  956. serialNumber: '108002Table1ChangePhaseInDate',
  957. tableId: '108002Table1',
  958. tableName: '工程变更记录表',
  959. columnProp: 'changePhaseInDate',
  960. headerAlign: 'center',
  961. align: 'center',
  962. columnLabel: '变更生效日期',
  963. columnHidden: false,
  964. columnImage: false,
  965. status: true,
  966. fixed: '',
  967. columnWidth: 100
  968. },
  969. {
  970. userId: this.$store.state.user.name,
  971. functionId: 108002,
  972. serialNumber: '108002Table1xxx',
  973. tableId: '108002Table1',
  974. tableName: '工程变更记录表',
  975. columnProp: 'xxx',
  976. headerAlign: 'center',
  977. align: 'center',
  978. columnLabel: 'ECN执行日期',
  979. columnHidden: false,
  980. columnImage: false,
  981. status: true,
  982. fixed: '',
  983. columnWidth: 100
  984. },
  985. ],
  986. detailColumnList: [
  987. {
  988. userId: this.$store.state.user.name,
  989. functionId: 108002,
  990. serialNumber: '108002Table2PartNo',
  991. tableId: '108002Table2',
  992. tableName: '变更单基本信息表',
  993. columnProp: 'partNo',
  994. headerAlign: 'center',
  995. align: 'center',
  996. columnLabel: '物料编码',
  997. columnHidden: false,
  998. columnImage: false,
  999. status: true,
  1000. fixed: '',
  1001. columnWidth: 120
  1002. },
  1003. {
  1004. userId: this.$store.state.user.name,
  1005. functionId: 108002,
  1006. serialNumber: '108002Table2PartDesc',
  1007. tableId: '108002Table2',
  1008. tableName: '变更单基本信息表',
  1009. columnProp: 'partDesc',
  1010. headerAlign: 'center',
  1011. align: 'left',
  1012. columnLabel: '物料描述',
  1013. columnHidden: false,
  1014. columnImage: false,
  1015. status: true,
  1016. fixed: '',
  1017. columnWidth: 180
  1018. },
  1019. {
  1020. userId: this.$store.state.user.name,
  1021. functionId: 108002,
  1022. serialNumber: '108002Table2NewPartNo',
  1023. tableId: '108002Table2',
  1024. tableName: '变更单基本信息表',
  1025. columnProp: 'newPartNo',
  1026. headerAlign: 'center',
  1027. align: 'center',
  1028. columnLabel: '新物料编码',
  1029. columnHidden: false,
  1030. columnImage: false,
  1031. status: true,
  1032. fixed: '',
  1033. columnWidth: 100
  1034. },
  1035. {
  1036. userId: this.$store.state.user.name,
  1037. functionId: 108002,
  1038. serialNumber: '108002Table2NewDrawingNo',
  1039. tableId: '108002Table2',
  1040. tableName: '变更单基本信息表',
  1041. columnProp: 'newDrawingNo',
  1042. headerAlign: 'center',
  1043. align: 'center',
  1044. columnLabel: '新图纸编码',
  1045. columnHidden: false,
  1046. columnImage: false,
  1047. status: true,
  1048. fixed: '',
  1049. columnWidth: 100
  1050. },
  1051. {
  1052. userId: this.$store.state.user.name,
  1053. functionId: 108002,
  1054. serialNumber: '108002Table2NewDraftNo',
  1055. tableId: '108002Table2',
  1056. tableName: '变更单基本信息表',
  1057. columnProp: 'newDraftNo',
  1058. headerAlign: 'center',
  1059. align: 'center',
  1060. columnLabel: '新图稿编码',
  1061. columnHidden: false,
  1062. columnImage: false,
  1063. status: true,
  1064. fixed: '',
  1065. columnWidth: 100
  1066. },
  1067. {
  1068. userId: this.$store.state.user.name,
  1069. functionId: 108002,
  1070. serialNumber: '108002Table2CodeNo',
  1071. tableId: '108002Table2',
  1072. tableName: '变更单基本信息表',
  1073. columnProp: 'codeNo',
  1074. headerAlign: 'center',
  1075. align: 'center',
  1076. columnLabel: '技术参数卡编码',
  1077. columnHidden: false,
  1078. columnImage: false,
  1079. status: true,
  1080. fixed: '',
  1081. columnWidth: 100
  1082. },
  1083. ],
  1084. fileColumnList: [
  1085. {
  1086. userId: this.$store.state.user.name,
  1087. functionId: 108002,
  1088. serialNumber: '108002Table3FileName',
  1089. tableId: '108002Table3',
  1090. tableName: '变更单文件信息表',
  1091. columnProp: 'fileName',
  1092. headerAlign: 'center',
  1093. align: 'left',
  1094. columnLabel: '文件名称',
  1095. columnHidden: false,
  1096. columnImage: false,
  1097. status: true,
  1098. fixed: '',
  1099. columnWidth: 120
  1100. },
  1101. {
  1102. userId: this.$store.state.user.name,
  1103. functionId: 108002,
  1104. serialNumber: '108002Table3FileType',
  1105. tableId: '108002Table3',
  1106. tableName: '变更单文件信息表',
  1107. columnProp: 'fileType',
  1108. headerAlign: 'center',
  1109. align: 'left',
  1110. columnLabel: '文件类型',
  1111. columnHidden: false,
  1112. columnImage: false,
  1113. status: true,
  1114. fixed: '',
  1115. columnWidth: 80
  1116. },
  1117. {
  1118. userId: this.$store.state.user.name,
  1119. functionId: 108002,
  1120. serialNumber: '108002Table3Url',
  1121. tableId: '108002Table3',
  1122. tableName: '变更单文件信息表',
  1123. columnProp: 'url',
  1124. headerAlign: 'center',
  1125. align: 'left',
  1126. columnLabel: '文件地址',
  1127. columnHidden: false,
  1128. columnImage: false,
  1129. status: true,
  1130. fixed: '',
  1131. columnWidth: 180
  1132. },
  1133. {
  1134. userId: this.$store.state.user.name,
  1135. functionId: 108002,
  1136. serialNumber: '108002Table3CreateBy',
  1137. tableId: '108002Table3',
  1138. tableName: '变更单文件信息表',
  1139. columnProp: 'createBy',
  1140. headerAlign: 'center',
  1141. align: 'center',
  1142. columnLabel: '创建人',
  1143. columnHidden: false,
  1144. columnImage: false,
  1145. status: true,
  1146. fixed: '',
  1147. columnWidth: 100
  1148. },
  1149. {
  1150. userId: this.$store.state.user.name,
  1151. functionId: 108002,
  1152. serialNumber: '108002Table3CreateDate',
  1153. tableId: '108002Table3',
  1154. tableName: '变更单文件信息表',
  1155. columnProp: 'createDate',
  1156. headerAlign: 'center',
  1157. align: 'center',
  1158. columnLabel: '创建时间',
  1159. columnHidden: false,
  1160. columnImage: false,
  1161. status: true,
  1162. fixed: '',
  1163. columnWidth: 150
  1164. },
  1165. ],
  1166. columnChooseDataList: [
  1167. {
  1168. userId: this.$store.state.user.name,
  1169. functionId: 108002,
  1170. serialNumber: '108002Table4PartNo',
  1171. tableId: '108002Table4',
  1172. tableName: '所选变更列表',
  1173. columnProp: 'partNo',
  1174. headerAlign: 'center',
  1175. align: 'center',
  1176. columnLabel: '物料编码',
  1177. columnHidden: false,
  1178. columnImage: false,
  1179. status: true,
  1180. fixed: '',
  1181. columnWidth: 100
  1182. },
  1183. {
  1184. userId: this.$store.state.user.name,
  1185. functionId: 108002,
  1186. serialNumber: '108002Table4PartDesc',
  1187. tableId: '108002Table4',
  1188. tableName: '所选变更列表',
  1189. columnProp: 'partDesc',
  1190. headerAlign: 'center',
  1191. align: 'left',
  1192. columnLabel: '物料描述',
  1193. columnHidden: false,
  1194. columnImage: false,
  1195. status: true,
  1196. fixed: '',
  1197. columnWidth: 180
  1198. },
  1199. {
  1200. userId: this.$store.state.user.name,
  1201. functionId: 108002,
  1202. serialNumber: '108002Table4DrawingNo',
  1203. tableId: '108002Table4',
  1204. tableName: '所选变更列表',
  1205. columnProp: 'drawingNo',
  1206. headerAlign: 'center',
  1207. align: 'center',
  1208. columnLabel: '图纸编码',
  1209. columnHidden: false,
  1210. columnImage: false,
  1211. status: true,
  1212. fixed: '',
  1213. columnWidth: 90
  1214. },
  1215. {
  1216. userId: this.$store.state.user.name,
  1217. functionId: 108002,
  1218. serialNumber: '108002Table4DraftNo',
  1219. tableId: '108002Table4',
  1220. tableName: '所选变更列表',
  1221. columnProp: 'draftNo',
  1222. headerAlign: 'center',
  1223. align: 'center',
  1224. columnLabel: '图稿编码',
  1225. columnHidden: false,
  1226. columnImage: false,
  1227. status: true,
  1228. fixed: '',
  1229. columnWidth: 90
  1230. },
  1231. ],
  1232. columnChooseItemList: [
  1233. {
  1234. userId: this.$store.state.user.name,
  1235. functionId: 108002,
  1236. serialNumber: '108002Table5ItemNo',
  1237. tableId: '108002Table5',
  1238. tableName: '执行属性表',
  1239. columnProp: 'itemNo',
  1240. headerAlign: 'center',
  1241. align: 'center',
  1242. columnLabel: '属性编码',
  1243. columnHidden: false,
  1244. columnImage: false,
  1245. status: true,
  1246. fixed: '',
  1247. columnWidth: 80
  1248. },
  1249. {
  1250. userId: this.$store.state.user.name,
  1251. functionId: 108002,
  1252. serialNumber: '108002Table5ItemDesc',
  1253. tableId: '108002Table5',
  1254. tableName: '执行属性表',
  1255. columnProp: 'itemDesc',
  1256. headerAlign: 'center',
  1257. align: 'center',
  1258. columnLabel: '属性名称',
  1259. columnHidden: false,
  1260. columnImage: false,
  1261. status: true,
  1262. fixed: '',
  1263. columnWidth: 150
  1264. },
  1265. {
  1266. userId: this.$store.state.user.name,
  1267. functionId: 108002,
  1268. serialNumber: '108002Table5ExecuteFlag',
  1269. tableId: '108002Table5',
  1270. tableName: '执行属性表',
  1271. columnProp: 'executeFlag',
  1272. headerAlign: 'center',
  1273. align: 'center',
  1274. columnLabel: '是否执行',
  1275. columnHidden: false,
  1276. columnImage: false,
  1277. status: true,
  1278. fixed: '',
  1279. columnWidth: 80
  1280. },
  1281. {
  1282. userId: this.$store.state.user.name,
  1283. functionId: 108002,
  1284. serialNumber: '108002Table5Executor',
  1285. tableId: '108002Table5',
  1286. tableName: '执行属性表',
  1287. columnProp: 'executor',
  1288. headerAlign: 'center',
  1289. align: 'center',
  1290. columnLabel: '执行人',
  1291. columnHidden: false,
  1292. columnImage: false,
  1293. status: true,
  1294. fixed: '',
  1295. columnWidth: 100
  1296. },{
  1297. userId: this.$store.state.user.name,
  1298. functionId: 108002,
  1299. serialNumber: '108002Table5ExecuteDate',
  1300. tableId: '108002Table5',
  1301. tableName: '执行属性表',
  1302. columnProp: 'itemExecutionDate',
  1303. headerAlign: 'center',
  1304. align: 'center',
  1305. columnLabel: '执行时间',
  1306. columnHidden: false,
  1307. columnImage: false,
  1308. status: true,
  1309. fixed: '',
  1310. columnWidth: 150
  1311. },
  1312. ],
  1313. columnItemList: [
  1314. {
  1315. userId: this.$store.state.user.name,
  1316. functionId: 108002,
  1317. serialNumber: '108002Table6ItemNo',
  1318. tableId: '108002Table6',
  1319. tableName: '执行属性表',
  1320. columnProp: 'itemNo',
  1321. headerAlign: 'center',
  1322. align: 'center',
  1323. columnLabel: '属性编码',
  1324. columnHidden: false,
  1325. columnImage: false,
  1326. status: true,
  1327. fixed: '',
  1328. columnWidth: 80
  1329. },
  1330. {
  1331. userId: this.$store.state.user.name,
  1332. functionId: 108002,
  1333. serialNumber: '108002Table6ItemDesc',
  1334. tableId: '108002Table6',
  1335. tableName: '执行属性表',
  1336. columnProp: 'itemDesc',
  1337. headerAlign: 'center',
  1338. align: 'center',
  1339. columnLabel: '属性名称',
  1340. columnHidden: false,
  1341. columnImage: false,
  1342. status: true,
  1343. fixed: '',
  1344. columnWidth: 150
  1345. },
  1346. ],
  1347. columnCSChooseItemList: [
  1348. {
  1349. userId: this.$store.state.user.name,
  1350. functionId: 108002,
  1351. serialNumber: '108002Table7ItemNo',
  1352. tableId: '108002Table7',
  1353. tableName: '执行属性表',
  1354. columnProp: 'itemNo',
  1355. headerAlign: 'center',
  1356. align: 'center',
  1357. columnLabel: '属性编码',
  1358. columnHidden: false,
  1359. columnImage: false,
  1360. status: true,
  1361. fixed: '',
  1362. columnWidth: 80
  1363. },
  1364. {
  1365. userId: this.$store.state.user.name,
  1366. functionId: 108002,
  1367. serialNumber: '108002Table7ItemDesc',
  1368. tableId: '108002Table7',
  1369. tableName: '执行属性表',
  1370. columnProp: 'itemDesc',
  1371. headerAlign: 'center',
  1372. align: 'center',
  1373. columnLabel: '属性名称',
  1374. columnHidden: false,
  1375. columnImage: false,
  1376. status: true,
  1377. fixed: '',
  1378. columnWidth: 150
  1379. },
  1380. {
  1381. userId: this.$store.state.user.name,
  1382. functionId: 108002,
  1383. serialNumber: '108002Table7ExecuteFlag',
  1384. tableId: '108002Table7',
  1385. tableName: '执行属性表',
  1386. columnProp: 'executeFlag',
  1387. headerAlign: 'center',
  1388. align: 'center',
  1389. columnLabel: '是否执行',
  1390. columnHidden: false,
  1391. columnImage: false,
  1392. status: true,
  1393. fixed: '',
  1394. columnWidth: 80
  1395. },
  1396. {
  1397. userId: this.$store.state.user.name,
  1398. functionId: 108002,
  1399. serialNumber: '108002Table7Executor',
  1400. tableId: '108002Table7',
  1401. tableName: '执行属性表',
  1402. columnProp: 'executor',
  1403. headerAlign: 'center',
  1404. align: 'center',
  1405. columnLabel: '执行人',
  1406. columnHidden: false,
  1407. columnImage: false,
  1408. status: true,
  1409. fixed: '',
  1410. columnWidth: 100
  1411. },{
  1412. userId: this.$store.state.user.name,
  1413. functionId: 108002,
  1414. serialNumber: '108002Table7ExecuteDate',
  1415. tableId: '108002Table7',
  1416. tableName: '执行属性表',
  1417. columnProp: 'itemExecutionDate',
  1418. headerAlign: 'center',
  1419. align: 'center',
  1420. columnLabel: '执行时间',
  1421. columnHidden: false,
  1422. columnImage: false,
  1423. status: true,
  1424. fixed: '',
  1425. columnWidth: 150
  1426. },
  1427. ],
  1428. // ======== 必填规则 ========
  1429. rules: {},
  1430. // ======== 复选数据集 ========
  1431. fileSelections: [],
  1432. itemSelections: [],
  1433. // ======== 选中的当前行数据 ========
  1434. currentRow: {},
  1435. currentCostImpactData: {},
  1436. // ======== 模态框开关控制 ========
  1437. modalFlag: false,
  1438. modalDisableFlag: false,
  1439. ecnTypeModalFlag: false,
  1440. chooseModelFlag: false
  1441. }
  1442. },
  1443. mounted () {
  1444. this.$nextTick(() => {
  1445. this.height = window.innerHeight / 2 - 30
  1446. /*第二个表格高度的动态调整*/
  1447. this.secondHeight = window.innerHeight / 2 - 186
  1448. })
  1449. },
  1450. created () {
  1451. this.getDataList()
  1452. this.getEcnModel()
  1453. },
  1454. methods: {
  1455. partInput (row, val) {
  1456. row.newPartNo = val.toUpperCase()
  1457. },
  1458. choosePartNo (row) {
  1459. this.tempPartRow = row
  1460. this.getBaseList(133)
  1461. },
  1462. ecnTypeHeaderChange (val,index) {
  1463. if (val === 'Y') {
  1464. for (let i = 0; i < this.form[index].list.length; i++) {
  1465. this.form[index].list[i].flag = 'Y'
  1466. }
  1467. } else {
  1468. for (let i = 0; i < this.form[index].list.length; i++) {
  1469. this.form[index].list[i].flag = 'N'
  1470. }
  1471. }
  1472. },
  1473. ecnTypeDetailChange (val,index) {
  1474. if (this.form[index].list.every(x => x.flag === 'Y')) {
  1475. this.form[index].flag = 'Y'
  1476. }else {
  1477. this.form[index].flag = 'N'
  1478. }
  1479. },
  1480. // ======== 分页相关方法 ========
  1481. // 每页数
  1482. sizeChangeHandle (val) {
  1483. this.pageSize = val
  1484. this.pageIndex = 1
  1485. this.getDataList()
  1486. },
  1487. // 当前页
  1488. currentChangeHandle (val) {
  1489. this.pageIndex = val
  1490. this.getDataList()
  1491. },
  1492. // ======== 列表选择相关方法 ========
  1493. selectFlag () {
  1494. return true
  1495. },
  1496. // ======== 页签切换相关方法 ========
  1497. // 单机选中询价信息
  1498. changeClickRow (row) {
  1499. this.$refs.changeTable.toggleRowSelection(row)
  1500. this.currentRow = JSON.parse(JSON.stringify(row))
  1501. },
  1502. // // 列表表格选择替换
  1503. // tabClick (tab, event) {
  1504. // // 刷新列表数据
  1505. // this.refreshCurrentTabTable()
  1506. // },
  1507. // 当前值发生变化的时候修改
  1508. currentChange (row, oldRow) {
  1509. // 判断是否是获取焦点的事件
  1510. if (row) {
  1511. this.currentRow = JSON.parse(JSON.stringify(row))
  1512. // 刷新当前页表
  1513. this.refreshCurrentTabTable()
  1514. }
  1515. },
  1516. // 刷新页签的table数据
  1517. refreshChangeTab () {
  1518. if (this.activeName === 'inventoryCostImpact') {
  1519. } else if (this.activeName === 'actionInformation') {
  1520. }
  1521. },
  1522. // 新增库存成本影响
  1523. inventoryCostImpactSave () {
  1524. if (this.costImpactData.productionProductFlag === 'Y') { // 在生产品
  1525. if (this.costImpactData.productionProductNumber == null || this.costImpactData.productionProductNumber === '') {
  1526. this.$message.warning('请填写在生产品数量!')
  1527. return
  1528. }
  1529. if (this.costImpactData.productionProductNumber <= 0) {
  1530. this.$message.warning('在生产品数量不能小于等于0!')
  1531. return
  1532. }
  1533. if (this.costImpactData.productionProductOpinions == null || this.costImpactData.productionProductOpinions === '') {
  1534. this.$message.warning('请填写在生产品处理意见!')
  1535. return
  1536. }
  1537. if (this.costImpactData.productionProductExecutor == null || this.costImpactData.productionProductExecutor === '') {
  1538. this.$message.warning('请填写在生产品执行人!')
  1539. return
  1540. }
  1541. }
  1542. if (this.costImpactData.inventoryProductFlag === 'Y') { // 成品库存
  1543. if (this.costImpactData.inventoryProductNumber == null || this.costImpactData.inventoryProductNumber === '') {
  1544. this.$message.warning('请填写成品库存数量!')
  1545. return
  1546. }
  1547. if (this.costImpactData.inventoryProductNumber <= 0) {
  1548. this.$message.warning('成品库存数量不能小于等于0!')
  1549. return
  1550. }
  1551. if (this.costImpactData.inventoryProductOpinions == null || this.costImpactData.inventoryProductOpinions === '') {
  1552. this.$message.warning('请填写成品库存处理意见!')
  1553. return
  1554. }
  1555. if (this.costImpactData.inventoryProductExecutor == null || this.costImpactData.inventoryProductExecutor === '') {
  1556. this.$message.warning('请填写成品库存执行人!')
  1557. return
  1558. }
  1559. }
  1560. if (this.costImpactData.newOrderFlag === 'Y') { // 新订单
  1561. if (this.costImpactData.newOrderNumber == null || this.costImpactData.newOrderNumber === '') {
  1562. this.$message.warning('请填写新订单数量!')
  1563. return
  1564. }
  1565. if (this.costImpactData.newOrderNumber <= 0) {
  1566. this.$message.warning('新订单数量不能小于等于0!')
  1567. return
  1568. }
  1569. }
  1570. if (this.costImpactData.affectedFlag === 'Y') { // 影响的原材料及其库存量
  1571. if (this.costImpactData.affectedNumber == null || this.costImpactData.affectedNumber === '') {
  1572. this.$message.warning('请填写影响的原材料及其库存量数量!')
  1573. return
  1574. }
  1575. if (this.costImpactData.affectedNumber <= 0) {
  1576. this.$message.warning('影响的原材料及其库存量数量不能小于等于0!')
  1577. return
  1578. }
  1579. if (this.costImpactData.affectedOpinions == null || this.costImpactData.affectedOpinions === '') {
  1580. this.$message.warning('请填写影响的原材料及其库存量处理意见!')
  1581. return
  1582. }
  1583. if (this.costImpactData.affectedExecutor == null || this.costImpactData.affectedExecutor === '') {
  1584. this.$message.warning('请填写影响的原材料及其库存量执行人!')
  1585. return
  1586. }
  1587. }
  1588. if (this.costImpactData.changeTotalCost == null || this.costImpactData.changeTotalCost === '') {
  1589. this.$message.warning('请填写ECN变更总成本!')
  1590. return
  1591. }
  1592. if (this.costImpactData.changeTotalCost <= 0) {
  1593. this.$message.warning('ECN变更总成本不能小于等于0!')
  1594. return
  1595. }
  1596. costImpactUpdate(this.costImpactData).then(({data}) => {
  1597. if (data && data.code === 0) {
  1598. this.costImpactData = data.rows.costImpactData
  1599. this.getDataList()
  1600. this.$message({
  1601. message: '操作成功',
  1602. type: 'success',
  1603. duration: 1500,
  1604. onClose: () => {}
  1605. })
  1606. } else {
  1607. this.$alert(data.msg, '错误', {
  1608. confirmButtonText: '确定'
  1609. })
  1610. }
  1611. })
  1612. },
  1613. // 刷新页签的table数据
  1614. refreshCurrentTabTable () {
  1615. if (this.activeTable === 'basicInformation') {
  1616. this.getChangeDetailList()
  1617. } else if (this.activeTable === 'fileInformation') {
  1618. this.getChangeFileList()
  1619. } else if (this.activeTable === 'inventoryCostImpact') {
  1620. this.inventoryCostImpactSearch2()
  1621. }
  1622. },
  1623. // ======== 列表数据刷新方法 ========
  1624. // 获取数据列表
  1625. getDataList () {
  1626. this.searchData.limit = this.pageSize
  1627. this.searchData.page = this.pageIndex
  1628. changeRecordSearch(this.searchData).then(({data}) => {
  1629. if (data.code === 0) {
  1630. this.dataList = data.page.list
  1631. this.pageIndex = data.page.currPage
  1632. this.pageSize = data.page.pageSize
  1633. this.totalPage = data.page.totalCount
  1634. // 判断是否全部存在数据
  1635. if (this.totalPage > 0) {
  1636. // 设置选中行
  1637. this.$refs.changeTable.setCurrentRow(this.dataList[0])
  1638. // 加载当前的页签的table
  1639. this.refreshCurrentTabTable()
  1640. }
  1641. }
  1642. })
  1643. },
  1644. // 变更单详情的列表
  1645. getChangeDetailList () {
  1646. let tempData = {
  1647. site: this.$store.state.user.site,
  1648. changeNo: this.currentRow.changeNo
  1649. }
  1650. changeDetailSearch(tempData).then(({data}) => {
  1651. if (data && data.code === 0) {
  1652. this.detailList = data.rows
  1653. } else {
  1654. this.detailList = []
  1655. }
  1656. })
  1657. },
  1658. // 变更单文件的列表
  1659. getChangeFileList () {
  1660. let tempData = {
  1661. orderRef1: this.$store.state.user.site,
  1662. orderRef2: this.currentRow.changeNo
  1663. }
  1664. changeFileSearch(tempData).then(({data}) => {
  1665. if (data && data.code === 0) {
  1666. this.fileList = data.rows
  1667. } else {
  1668. this.fileList = []
  1669. }
  1670. })
  1671. },
  1672. // 复选变更单文件
  1673. selectionFile (val) {
  1674. this.fileSelections = val
  1675. },
  1676. // 上传文件
  1677. uploadFileModal () {
  1678. let currentData = {
  1679. titleCon: '工程变更文件上传',
  1680. site: this.currentRow.site,
  1681. createBy: this.$store.state.user.name,
  1682. dataNo: this.currentRow.changeNo,
  1683. fileRemark: '',
  1684. folder: 'change',
  1685. }
  1686. //打开组件 去做新增业务
  1687. this.$nextTick(() => {
  1688. this.$refs.changeUploadFile.init(currentData);
  1689. })
  1690. },
  1691. // 删除变更单文件
  1692. deleteChangeFile () {
  1693. if (this.fileSelections.length === 0) {
  1694. this.$message.warning('请选择要删除的文件!')
  1695. return
  1696. }
  1697. let tempData = {
  1698. fileList: this.fileSelections
  1699. }
  1700. this.$confirm('确定删除文件?', '提示', {
  1701. confirmButtonText: '确定',
  1702. cancelButtonText: '取消',
  1703. type: 'warning'
  1704. }).then(() => {
  1705. deleteChangeFile(tempData).then(({data}) => {
  1706. if (data && data.code === 0) {
  1707. this.getChangeFileList()
  1708. this.$message({
  1709. message: '操作成功',
  1710. type: 'success',
  1711. duration: 1500,
  1712. onClose: () => {}
  1713. })
  1714. } else {
  1715. this.$alert(data.msg, '错误', {
  1716. confirmButtonText: '确定'
  1717. })
  1718. }
  1719. })
  1720. })
  1721. },
  1722. // 下载
  1723. downloadFile (row) {
  1724. downLoadQuotationFile(row)
  1725. .then(({data}) => {
  1726. // 不限制文件下载类型
  1727. const blob = new Blob([data], {type:'application/octet-stream;charset=utf-8'})
  1728. // 下载文件名称
  1729. const fileName = row.fileName
  1730. // a标签下载
  1731. const linkNode = document.createElement('a')
  1732. linkNode.download = fileName // a标签的download属性规定下载文件的名称
  1733. linkNode.style.display = 'none'
  1734. linkNode.href = URL.createObjectURL(blob) // 生成一个Blob URL
  1735. document.body.appendChild(linkNode)
  1736. linkNode.click() // 模拟在按钮上的一次鼠标单击
  1737. URL.revokeObjectURL(linkNode.href) // 释放URL 对象
  1738. document.body.removeChild(linkNode)
  1739. })
  1740. },
  1741. // 修改变更单模态框
  1742. updateModal (row) {
  1743. this.modalData = {
  1744. site: row.site,
  1745. changeNo: row.changeNo,
  1746. applicantId: row.applicantId,
  1747. applicantName: row.applicantName,
  1748. applicationDepartmentId: row.applicationDepartmentId,
  1749. applicationDepartmentName: row.applicationDepartmentName,
  1750. applyDate: row.applyDate,
  1751. ecnType: row.ecnType,
  1752. changeImpact: row.changeImpact,
  1753. changeImpactDesc: row.changeImpactDesc,
  1754. ecnStage: row.ecnStage,
  1755. changeType: row.changeType,
  1756. tpEngineerId: row.tpEngineerId,
  1757. tpEngineerName: row.tpEngineerName,
  1758. changePhaseInDate: row.changePhaseInDate,
  1759. dfIsProduct: row.dfIsProduct,
  1760. printing: row.printing,
  1761. manufacturingCostIsChange: row.manufacturingCostIsChange,
  1762. changeRequestDesc: row.changeRequestDesc,
  1763. isReQuote: row.isReQuote,
  1764. ulCertificationRequirements: row.ulCertificationRequirements,
  1765. ulContinueToMeetDemand: row.ulContinueToMeetDemand,
  1766. gpCertificationRequirements: row.gpCertificationRequirements,
  1767. gpContinueToMeetDemand: row.gpContinueToMeetDemand,
  1768. updateBy: this.$store.state.user.name,
  1769. detailList: [],
  1770. ecnTypeData: []
  1771. }
  1772. // 查选择的ECN种类
  1773. this.getChangeChooseEcnType()
  1774. // 查变更单明细
  1775. this.changeRequestDetailSearch()
  1776. // 查变更单库存成本影响
  1777. this.inventoryCostImpactSearch()
  1778. // 查变更单TP&执行信息
  1779. this.tpExecutionInfoSearch()
  1780. // 查变更单会签信息
  1781. this.countersignatureSearch()
  1782. this.activeName = 'basicInformation'
  1783. this.modalFlag = true
  1784. this.modalDisableFlag = true
  1785. },
  1786. // 获取选择的ECN种类
  1787. getChangeChooseEcnType () {
  1788. getChooseEcnType(this.modalData).then(({data}) => {
  1789. if (data && data.code === 0) {
  1790. this.form = data.rows
  1791. } else {
  1792. this.$alert(data.msg, '错误', {
  1793. confirmButtonText: '确定'
  1794. })
  1795. }
  1796. })
  1797. },
  1798. // 打开ECN种类模态框
  1799. chooseEcnTypeModal () {
  1800. this.ecnTypeModalFlag = true
  1801. },
  1802. // 保存ECN种类
  1803. saveEcnTypeData () {
  1804. this.ecnTypeModalFlag = false
  1805. },
  1806. // 查询ECN的模板
  1807. getEcnModel () {
  1808. let tempData = {
  1809. site: this.$store.state.user.site,
  1810. functionType: 'ECN'
  1811. }
  1812. getEcnModel(tempData).then(({data}) => {
  1813. if (data.code === 0) {
  1814. this.modelList = data.rows
  1815. }
  1816. })
  1817. },
  1818. // 查询变更明细表
  1819. changeRequestDetailSearch () {
  1820. requestDetailSearch(this.modalData).then(({data}) => {
  1821. if (data && data.code === 0) {
  1822. this.chooseDataList = data.rows
  1823. } else {
  1824. this.$alert(data.msg, '错误', {
  1825. confirmButtonText: '确定'
  1826. })
  1827. }
  1828. })
  1829. },
  1830. // 查询库存成本影响对象
  1831. inventoryCostImpactSearch () {
  1832. costImpactSearch(this.modalData).then(({data}) => {
  1833. if (data && data.code === 0) {
  1834. this.costImpactData = data.rows
  1835. } else {
  1836. this.$alert(data.msg, '错误', {
  1837. confirmButtonText: '确定'
  1838. })
  1839. }
  1840. })
  1841. },
  1842. // 查询库存成本影响对象
  1843. inventoryCostImpactSearch2 () {
  1844. costImpactSearch(this.currentRow).then(({data}) => {
  1845. if (data && data.code === 0) {
  1846. this.currentCostImpactData = data.rows
  1847. } else {
  1848. this.$alert(data.msg, '错误', {
  1849. confirmButtonText: '确定'
  1850. })
  1851. }
  1852. })
  1853. },
  1854. // 查询执行信息
  1855. tpExecutionInfoSearch () {
  1856. executionInfoSearch(this.modalData).then(({data}) => {
  1857. if (data && data.code === 0) {
  1858. this.executionInfoData = data.rows.executionInfoData
  1859. this.executionInfoData.createBy = this.$store.state.user.name
  1860. this.chooseItemList = data.rows.chooseItemList
  1861. } else {
  1862. this.$alert(data.msg, '错误', {
  1863. confirmButtonText: '确定'
  1864. })
  1865. }
  1866. })
  1867. },
  1868. // 查询会签信息
  1869. countersignatureSearch () {
  1870. countersignatureSearch(this.modalData).then(({data}) => {
  1871. if (data && data.code === 0) {
  1872. this.chooseCSItemList = data.rows.chooseCSItemList
  1873. } else {
  1874. this.$alert(data.msg, '错误', {
  1875. confirmButtonText: '确定'
  1876. })
  1877. }
  1878. })
  1879. },
  1880. // 删除所选技术参数卡
  1881. deleteChooseDataModal (row) {
  1882. this.$confirm(`是否删除该技术参数卡的变更?`, '提示', {
  1883. confirmButtonText: '确定',
  1884. cancelButtonText: '取消',
  1885. type: 'warning'
  1886. }).then(() => {
  1887. deleteChangeDetail(row).then(({data}) => {
  1888. if (data && data.code === 0) {
  1889. this.changeRequestDetailSearch()
  1890. this.$message({
  1891. message: '操作成功',
  1892. type: 'success',
  1893. duration: 1500,
  1894. onClose: () => {}
  1895. })
  1896. } else {
  1897. this.$alert(data.msg, '错误', {
  1898. confirmButtonText: '确定'
  1899. })
  1900. }
  1901. })
  1902. })
  1903. },
  1904. // 修改变更申请
  1905. saveData () {
  1906. this.modalData.detailList = this.chooseDataList
  1907. this.modalData.ecnTypeData = this.form
  1908. if (this.modalData.applicantId === '' || this.modalData.applicantId == null) {
  1909. this.$message.warning('请选择申请人员!')
  1910. return
  1911. }
  1912. if (this.modalData.applyDate === '' || this.modalData.applyDate == null) {
  1913. this.$message.warning('请选择申请日期!')
  1914. return
  1915. }
  1916. if (this.modalData.changeImpact === '' || this.modalData.changeImpact == null) {
  1917. this.$message.warning('请选择ECN变更影响!')
  1918. return
  1919. }
  1920. if ((this.modalData.changeImpactDesc === '' || this.modalData.changeImpactDesc == null) && this.modalData.changeImpact === 'Y') {
  1921. this.$message.warning('请填写变更影响描述!')
  1922. return
  1923. }
  1924. if (this.modalData.ecnStage === '' || this.modalData.ecnStage == null) {
  1925. this.$message.warning('请选择ECN阶段!')
  1926. return
  1927. }
  1928. if (this.modalData.changeType === '' || this.modalData.changeType == null) {
  1929. this.$message.warning('请选择变更类别!')
  1930. return
  1931. }
  1932. if (this.modalData.tpEngineerId === '' || this.modalData.tpEngineerId == null) {
  1933. this.$message.warning('请选择TP工程师!')
  1934. return
  1935. }
  1936. if (this.modalData.changePhaseInDate === '' || this.modalData.changePhaseInDate == null) {
  1937. this.$message.warning('请选择变更生效日期!')
  1938. return
  1939. }
  1940. if (this.modalData.dfIsProduct === '' || this.modalData.dfIsProduct == null) {
  1941. this.$message.warning('请选择是否DF是产品!')
  1942. return
  1943. }
  1944. if (this.modalData.printing === '' || this.modalData.printing == null) {
  1945. this.$message.warning('请选择印刷方式!')
  1946. return
  1947. }
  1948. if (this.modalData.manufacturingCostIsChange === '' || this.modalData.manufacturingCostIsChange == null) {
  1949. this.$message.warning('请选择制造成本是否变更!')
  1950. return
  1951. }
  1952. if (this.modalData.changeRequestDesc === '' || this.modalData.changeRequestDesc == null) {
  1953. this.$message.warning('请填写变更要求描述!')
  1954. return
  1955. }
  1956. if (this.modalData.isReQuote === '' || this.modalData.isReQuote == null) {
  1957. this.$message.warning('请选择是否重新报价!')
  1958. return
  1959. }
  1960. if (this.modalData.ulCertificationRequirements === '' || this.modalData.ulCertificationRequirements == null) {
  1961. this.$message.warning('请选择原产品是否UL认证要求!')
  1962. return
  1963. }
  1964. if (this.modalData.ulContinueToMeetDemand === '' || this.modalData.ulContinueToMeetDemand == null) {
  1965. this.$message.warning('请选择变更后能否继续满足此需求(UL)!')
  1966. return
  1967. }
  1968. if (this.modalData.gpCertificationRequirements === '' || this.modalData.gpCertificationRequirements == null) {
  1969. this.$message.warning('请选择原产品是否GP要求!')
  1970. return
  1971. }
  1972. if (this.modalData.gpContinueToMeetDemand === '' || this.modalData.gpContinueToMeetDemand == null) {
  1973. this.$message.warning('请选择变更后能否继续满足此需求(GP)!')
  1974. return
  1975. }
  1976. changeRequestUpdate(this.modalData).then(({data}) => {
  1977. if (data && data.code === 0) {
  1978. this.modalData = data.rows.modalData
  1979. this.getDataList()
  1980. // 查选择的ECN种类
  1981. this.getChangeChooseEcnType()
  1982. // 查变更单明细
  1983. this.changeRequestDetailSearch()
  1984. this.$message({
  1985. message: '操作成功',
  1986. type: 'success',
  1987. duration: 1500,
  1988. onClose: () => {}
  1989. })
  1990. } else {
  1991. this.$alert(data.msg, '错误', {
  1992. confirmButtonText: '确定'
  1993. })
  1994. }
  1995. })
  1996. },
  1997. // 选择模板属性
  1998. chooseModel () {
  1999. this.chooseModelData = {
  2000. site: this.$store.state.user.site,
  2001. itemNo: '',
  2002. itemDesc: '',
  2003. functionType: 'ECN',
  2004. codeNo: this.chooseItemList.length > 0 ? this.chooseItemList[0].codeNo : this.modelList.length > 0 ? this.modelList[0].codeNo : ''
  2005. }
  2006. // 先清空缓存选中
  2007. this.$nextTick(() => this.$refs.itemTable.clearSelection())
  2008. // 查询所有属性
  2009. getItemList(this.chooseModelData).then(({data}) => {
  2010. if (data && data.code === 0) {
  2011. this.itemList = data.rows
  2012. this.itemList.forEach(val => {
  2013. // 回显选中的部门
  2014. if (this.chooseItemList.map(val => val.itemNo).includes(val.itemNo)) {
  2015. this.$nextTick(() => this.$refs.itemTable.toggleRowSelection(val, true))
  2016. }
  2017. })
  2018. } else {
  2019. this.$alert(data.msg, '错误', {
  2020. confirmButtonText: '确定'
  2021. })
  2022. }
  2023. })
  2024. this.chooseModelFlag = true
  2025. },
  2026. // 查询属性
  2027. searchItemList () {
  2028. getItemList(this.chooseModelData).then(({data}) => {
  2029. if (data.code === 0) {
  2030. this.itemList = data.rows
  2031. }
  2032. })
  2033. },
  2034. // 单机选择
  2035. itemClickRow (row) {
  2036. this.$refs.itemTable.toggleRowSelection(row)
  2037. },
  2038. // 复选属性
  2039. selectionItem (val) {
  2040. this.itemSelections = val
  2041. },
  2042. // 确认多选属性
  2043. confirmItem () {
  2044. if (this.itemSelections.length === 0) {
  2045. this.$message.warning("请勾选属性!")
  2046. return
  2047. }
  2048. this.chooseItemList = this.itemSelections
  2049. this.chooseModelFlag = false
  2050. },
  2051. // 执行所选属性
  2052. executeModal (row) {
  2053. row.executeFlag = 'Y'
  2054. row.itemExecutionDate = new Date(+ new Date() + 8 * 3600 * 1000).toISOString().replace(/T/g, ' ').replace(/\.[\d]{3}Z/, '')
  2055. row.executor = this.$store.state.user.name
  2056. },
  2057. // 执行所选属性
  2058. executeCSModal (row) {
  2059. row.executeFlag = 'Y'
  2060. row.itemExecutionDate = new Date(+ new Date() + 8 * 3600 * 1000).toISOString().replace(/T/g, ' ').replace(/\.[\d]{3}Z/, '')
  2061. row.executor = this.$store.state.user.name
  2062. },
  2063. // 编辑执行信息
  2064. executionInformationSave () {
  2065. this.executionInfoData.chooseItemList = this.chooseItemList
  2066. if (this.executionInfoData.originalDieCuttingRuleNo == null || this.executionInfoData.originalDieCuttingRuleNo === '') {
  2067. this.$message.warning('请填写原啤刀编号!')
  2068. return;
  2069. }
  2070. if (this.executionInfoData.newDieCuttingRuleNo == null || this.executionInfoData.newDieCuttingRuleNo === '') {
  2071. this.$message.warning('请填写新啤刀编号!')
  2072. return;
  2073. }
  2074. if (this.executionInfoData.originalStencilNo == null || this.executionInfoData.originalStencilNo === '') {
  2075. this.$message.warning('请填写原网板/印版编号!')
  2076. return;
  2077. }
  2078. if (this.executionInfoData.newStencilNo == null || this.executionInfoData.newStencilNo === '') {
  2079. this.$message.warning('请填写新网板/印版编号!')
  2080. return;
  2081. }
  2082. if (this.executionInfoData.executionDate == null || this.executionInfoData.executionDate === '') {
  2083. this.$message.warning('请选择ECN执行日期!')
  2084. return;
  2085. }
  2086. executionUpdate(this.executionInfoData).then(({data}) => {
  2087. if (data && data.code === 0) {
  2088. this.executionInfoData = data.rows.executionInfoData
  2089. this.executionInfoData.createBy = this.$store.state.user.name
  2090. this.chooseItemList = data.rows.chooseItemList
  2091. this.getDataList()
  2092. this.$message({
  2093. message: '操作成功',
  2094. type: 'success',
  2095. duration: 1500,
  2096. onClose: () => {}
  2097. })
  2098. } else {
  2099. this.$alert(data.msg, '错误', {
  2100. confirmButtonText: '确定'
  2101. })
  2102. }
  2103. })
  2104. },
  2105. // 编辑会签信息
  2106. countersignatureSave () {
  2107. this.countersignatureData.changeNo = this.modalData.changeNo
  2108. this.countersignatureData.chooseCSItemList = this.chooseCSItemList
  2109. countersignatureUpdate(this.countersignatureData).then(({data}) => {
  2110. if (data && data.code === 0) {
  2111. this.chooseCSItemList = data.rows.chooseCSItemList
  2112. this.getDataList()
  2113. this.$message({
  2114. message: '操作成功',
  2115. type: 'success',
  2116. duration: 1500,
  2117. onClose: () => {}
  2118. })
  2119. } else {
  2120. this.$alert(data.msg, '错误', {
  2121. confirmButtonText: '确定'
  2122. })
  2123. }
  2124. })
  2125. },
  2126. // 回车换行
  2127. focusNextInput (index, type) {
  2128. let aaa = ''
  2129. if (this.chooseDataList.length - 1 === index) {
  2130. aaa = `${type}0`
  2131. } else {
  2132. aaa = `${type}${index + 1}`
  2133. }
  2134. this.$nextTick(() => {
  2135. this.$refs[aaa].focus()
  2136. })
  2137. },
  2138. // 根据人员编码查人员部门
  2139. getDepartmentByUserName () {
  2140. let tempData = {
  2141. site: this.$store.state.user.site,
  2142. username: this.modalData.applicantId
  2143. }
  2144. getDepartmentByUserName(tempData).then(({data}) => {
  2145. if (data.code === 0) {
  2146. this.modalData.applicationDepartmentId = data.rows[0].departmentNo
  2147. this.modalData.applicationDepartmentName = data.rows[0].departmentName
  2148. }
  2149. })
  2150. },
  2151. // ======== chooseList相关方法 ========
  2152. // 获取基础数据列表S
  2153. getBaseList (val, type) {
  2154. this.tagNo = val
  2155. this.tagNo1 = type
  2156. this.$nextTick(() => {
  2157. let strVal = ''
  2158. if (val === 103) {
  2159. if (type === 1) {
  2160. strVal = this.modalData.applicantId
  2161. } else if (type === 2) {
  2162. strVal = this.modalData.tpEngineerId
  2163. } else if (type === 3) {
  2164. if (this.costImpactData.productionProductFlag !== 'Y') {
  2165. return
  2166. } else {
  2167. strVal = this.costImpactData.productionProductExecutor
  2168. }
  2169. } else if (type === 4) {
  2170. if (this.costImpactData.inventoryProductFlag !== 'Y') {
  2171. return
  2172. } else {
  2173. strVal = this.costImpactData.inventoryProductExecutor
  2174. }
  2175. } else if (type === 5) {
  2176. if (this.costImpactData.affectedFlag !== 'Y') {
  2177. return
  2178. } else {
  2179. strVal = this.costImpactData.affectedExecutor
  2180. }
  2181. }
  2182. }
  2183. if (val === 133) {
  2184. strVal = this.tempPartRow.newPartNo
  2185. }
  2186. this.$refs.baseList.init(val, strVal)
  2187. })
  2188. },
  2189. // 列表方法的回调
  2190. getBaseData (val) {
  2191. if (this.tagNo === 103) {
  2192. if (this.tagNo1 === 1) {
  2193. this.modalData.applicantId = val.username
  2194. this.modalData.applicantName = val.user_display
  2195. this.getDepartmentByUserName()
  2196. } else if (this.tagNo1 === 2) {
  2197. this.modalData.tpEngineerId = val.username
  2198. this.modalData.tpEngineerName = val.user_display
  2199. } else if (this.tagNo1 === 3) {
  2200. this.costImpactData.productionProductExecutor = val.username
  2201. this.costImpactData.productionProductExecutorName = val.user_display
  2202. //this.$set(this.costImpactData,'productionProductExecutorName',val.user_display)
  2203. } else if (this.tagNo1 === 4) {
  2204. this.costImpactData.inventoryProductExecutor = val.username
  2205. this.costImpactData.inventoryProductExecutorName = val.user_display
  2206. //this.$set(this.costImpactData,'inventoryProductExecutorName',val.user_display)
  2207. } else if (this.tagNo1 === 5) {
  2208. this.costImpactData.affectedExecutor = val.username
  2209. this.costImpactData.affectedExecutorName = val.user_display
  2210. //this.$set(this.costImpactData,'affectedExecutorName',val.user_display)
  2211. }
  2212. }
  2213. if (this.tagNo === 133) {
  2214. this.tempPartRow.newPartNo = val.part_no
  2215. }
  2216. },
  2217. // ======== 导出相关方法 ========
  2218. /**
  2219. * 导出excel
  2220. */
  2221. async createExportData () {
  2222. this.searchData.limit = -1
  2223. this.searchData.page = 1
  2224. await changeRecordSearch(this.searchData).then(({data}) => {
  2225. this.resultList = data.page.list
  2226. })
  2227. return this.resultList
  2228. },
  2229. startDownload () {},
  2230. finishDownload () {},
  2231. fields () {
  2232. let json = '{'
  2233. this.columnList.forEach((item, index) => {
  2234. if (index === this.columnList.length - 1) {
  2235. json += '"' + item.columnLabel + '"' + ':' + '"' + item.columnProp + '"'
  2236. } else {
  2237. json += '"' + item.columnLabel + '"' + ':' + '"' + item.columnProp + '"' + ','
  2238. }
  2239. })
  2240. json += '}'
  2241. let s = eval('(' + json + ')')
  2242. return s
  2243. },
  2244. rowStyle ({row}) {
  2245. if (this.currentRow.changeNo === row.changeNo) {
  2246. return { 'background-color': '#E8F7F6', cursor: 'pointer' };
  2247. }
  2248. },
  2249. }
  2250. }
  2251. </script>
  2252. <style scoped lang="scss">
  2253. /deep/ .customer-tab .el-tabs__content {
  2254. padding: 0px !important;
  2255. }
  2256. .numInput /deep/ .el-input__inner{
  2257. text-align: right;
  2258. }
  2259. /deep/ .inlineNumber input::-webkit-outer-spin-button,
  2260. /deep/ .inlineNumber input::-webkit-inner-spin-button {
  2261. -webkit-appearance: none;
  2262. }
  2263. /deep/ .inlineNumber input[type="number"]{
  2264. -moz-appearance: textfield;
  2265. padding-right: 5px !important;
  2266. }
  2267. </style>