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.

2357 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
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 :title="changeTitle" :close-on-click-modal="false" top="10vh" 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. changeTitle: '',
  745. // ======== 数据对象 ========
  746. modalData: {
  747. site: this.$store.state.user.site,
  748. changeNo: '',
  749. applicantId: '',
  750. applicantName: '',
  751. applicationDepartmentId: '',
  752. applicationDepartmentName: '',
  753. applyDate: '',
  754. ecnType: '',
  755. changeImpact: '',
  756. changeImpactDesc: '',
  757. ecnStage: '',
  758. changeType: '',
  759. tpEngineerId: '',
  760. tpEngineerName: '',
  761. changePhaseInDate: '',
  762. dfIsProduct: '',
  763. printing: '',
  764. manufacturingCostIsChange: '',
  765. changeRequestDesc: '',
  766. isReQuote: '',
  767. ulCertificationRequirements: '',
  768. ulContinueToMeetDemand: '',
  769. gpCertificationRequirements: '',
  770. gpContinueToMeetDemand: '',
  771. detailList: [],
  772. ecnTypeData: []
  773. },
  774. costImpactData: {
  775. site: this.$store.state.user.site,
  776. changeNo: '',
  777. productionProductFlag: '',
  778. inventoryProductFlag: '',
  779. newOrderFlag: '',
  780. affectedFlag: '',
  781. productionProductNumber: '',
  782. productionProductOpinions: '',
  783. productionProductRemark: '',
  784. productionProductExecutor: '',
  785. productionProductExecutorName: '',
  786. inventoryProductNumber: '',
  787. inventoryProductOpinions: '',
  788. inventoryProductRemark: '',
  789. inventoryProductExecutor: '',
  790. inventoryProductExecutorName: '',
  791. newOrderNumber: '',
  792. affectedNumber: '',
  793. affectedOpinions: '',
  794. affectedRemark: '',
  795. affectedExecutor: '',
  796. affectedExecutorName: '',
  797. changeTotalCost: '',
  798. remark: '',
  799. createBy: '',
  800. updateBy: ''
  801. },
  802. executionInfoData: {
  803. site: this.$store.state.user.site,
  804. changeNo: '',
  805. originalFilmNo: '',
  806. newFilmNo: '',
  807. originalDieCuttingRuleNo: '',
  808. newDieCuttingRuleNo: '',
  809. originalStencilNo: '',
  810. newStencilNo: '',
  811. executionDate: '',
  812. createBy: '',
  813. updateBy: '',
  814. chooseItemList: []
  815. },
  816. chooseModelData: {
  817. site: this.$store.state.user.site,
  818. functionType: 'ECN',
  819. itemNo: '',
  820. itemDesc: '',
  821. codeNo: ''
  822. },
  823. countersignatureData: {
  824. site: this.$store.state.user.site,
  825. changeNo: '',
  826. createBy: '',
  827. updateBy: '',
  828. chooseCSItemList: []
  829. },
  830. // ======== 数据列表 ========
  831. dataList: [],
  832. detailList: [],
  833. fileList: [],
  834. chooseItemList: [],
  835. chooseCSItemList: [],
  836. chooseDataList: [],
  837. form: [],
  838. modelList: [],
  839. itemList: [],
  840. // ======== 列表表头 ========
  841. columnList: [
  842. {
  843. userId: this.$store.state.user.name,
  844. functionId: 108002,
  845. serialNumber: '108002Table1ChangeNo',
  846. tableId: '108002Table1',
  847. tableName: '工程变更记录表',
  848. columnProp: 'changeNo',
  849. headerAlign: 'center',
  850. align: 'center',
  851. columnLabel: '申请编号',
  852. columnHidden: false,
  853. columnImage: false,
  854. status: true,
  855. fixed: '',
  856. columnWidth: 120
  857. },
  858. {
  859. userId: this.$store.state.user.name,
  860. functionId: 108002,
  861. serialNumber: '108002Table1ApplicantName',
  862. tableId: '108002Table1',
  863. tableName: '工程变更记录表',
  864. columnProp: 'applicantName',
  865. headerAlign: 'center',
  866. align: 'center',
  867. columnLabel: '申请人',
  868. columnHidden: false,
  869. columnImage: false,
  870. status: true,
  871. fixed: '',
  872. columnWidth: 120
  873. },
  874. {
  875. userId: this.$store.state.user.name,
  876. functionId: 108002,
  877. serialNumber: '108002Table1DepartmentName',
  878. tableId: '108002Table1',
  879. tableName: '工程变更记录表',
  880. columnProp: 'applicationDepartmentName',
  881. headerAlign: 'center',
  882. align: 'center',
  883. columnLabel: '申请部门',
  884. columnHidden: false,
  885. columnImage: false,
  886. status: true,
  887. fixed: '',
  888. columnWidth: 120
  889. },
  890. {
  891. userId: this.$store.state.user.name,
  892. functionId: 108002,
  893. serialNumber: '108002Table1EcnStage',
  894. tableId: '108002Table1',
  895. tableName: '工程变更记录表',
  896. columnProp: 'ecnStage',
  897. headerAlign: 'center',
  898. align: 'center',
  899. columnLabel: 'ECN阶段',
  900. columnHidden: false,
  901. columnImage: false,
  902. status: true,
  903. fixed: '',
  904. columnWidth: 100
  905. },
  906. {
  907. userId: this.$store.state.user.name,
  908. functionId: 108002,
  909. serialNumber: '108002Table1ChangeType',
  910. tableId: '108002Table1',
  911. tableName: '工程变更记录表',
  912. columnProp: 'changeType',
  913. headerAlign: 'center',
  914. align: 'center',
  915. columnLabel: '变更类别',
  916. columnHidden: false,
  917. columnImage: false,
  918. status: true,
  919. fixed: '',
  920. columnWidth: 100
  921. },
  922. {
  923. userId: this.$store.state.user.name,
  924. functionId: 108002,
  925. serialNumber: '108002Table1EcnType',
  926. tableId: '108002Table1',
  927. tableName: '工程变更记录表',
  928. columnProp: 'ecnType',
  929. headerAlign: 'center',
  930. align: 'center',
  931. columnLabel: 'ECN种类',
  932. columnHidden: false,
  933. columnImage: false,
  934. status: true,
  935. fixed: '',
  936. columnWidth: 100
  937. },
  938. {
  939. userId: this.$store.state.user.name,
  940. functionId: 108002,
  941. serialNumber: '108002Table1ApplyDate',
  942. tableId: '108002Table1',
  943. tableName: '工程变更记录表',
  944. columnProp: 'applyDate',
  945. headerAlign: 'center',
  946. align: 'center',
  947. columnLabel: '申请日期',
  948. columnHidden: false,
  949. columnImage: false,
  950. status: true,
  951. fixed: '',
  952. columnWidth: 100
  953. },
  954. {
  955. userId: this.$store.state.user.name,
  956. functionId: 108002,
  957. serialNumber: '108002Table1ChangePhaseInDate',
  958. tableId: '108002Table1',
  959. tableName: '工程变更记录表',
  960. columnProp: 'changePhaseInDate',
  961. headerAlign: 'center',
  962. align: 'center',
  963. columnLabel: '变更生效日期',
  964. columnHidden: false,
  965. columnImage: false,
  966. status: true,
  967. fixed: '',
  968. columnWidth: 100
  969. },
  970. {
  971. userId: this.$store.state.user.name,
  972. functionId: 108002,
  973. serialNumber: '108002Table1xxx',
  974. tableId: '108002Table1',
  975. tableName: '工程变更记录表',
  976. columnProp: 'xxx',
  977. headerAlign: 'center',
  978. align: 'center',
  979. columnLabel: 'ECN执行日期',
  980. columnHidden: false,
  981. columnImage: false,
  982. status: true,
  983. fixed: '',
  984. columnWidth: 100
  985. },
  986. ],
  987. detailColumnList: [
  988. {
  989. userId: this.$store.state.user.name,
  990. functionId: 108002,
  991. serialNumber: '108002Table2PartNo',
  992. tableId: '108002Table2',
  993. tableName: '变更单基本信息表',
  994. columnProp: 'partNo',
  995. headerAlign: 'center',
  996. align: 'center',
  997. columnLabel: '物料编码',
  998. columnHidden: false,
  999. columnImage: false,
  1000. status: true,
  1001. fixed: '',
  1002. columnWidth: 120
  1003. },
  1004. {
  1005. userId: this.$store.state.user.name,
  1006. functionId: 108002,
  1007. serialNumber: '108002Table2PartDesc',
  1008. tableId: '108002Table2',
  1009. tableName: '变更单基本信息表',
  1010. columnProp: 'partDesc',
  1011. headerAlign: 'center',
  1012. align: 'left',
  1013. columnLabel: '物料描述',
  1014. columnHidden: false,
  1015. columnImage: false,
  1016. status: true,
  1017. fixed: '',
  1018. columnWidth: 180
  1019. },
  1020. {
  1021. userId: this.$store.state.user.name,
  1022. functionId: 108002,
  1023. serialNumber: '108002Table2NewPartNo',
  1024. tableId: '108002Table2',
  1025. tableName: '变更单基本信息表',
  1026. columnProp: 'newPartNo',
  1027. headerAlign: 'center',
  1028. align: 'center',
  1029. columnLabel: '新物料编码',
  1030. columnHidden: false,
  1031. columnImage: false,
  1032. status: true,
  1033. fixed: '',
  1034. columnWidth: 100
  1035. },
  1036. {
  1037. userId: this.$store.state.user.name,
  1038. functionId: 108002,
  1039. serialNumber: '108002Table2NewDrawingNo',
  1040. tableId: '108002Table2',
  1041. tableName: '变更单基本信息表',
  1042. columnProp: 'newDrawingNo',
  1043. headerAlign: 'center',
  1044. align: 'center',
  1045. columnLabel: '新图纸编码',
  1046. columnHidden: false,
  1047. columnImage: false,
  1048. status: true,
  1049. fixed: '',
  1050. columnWidth: 100
  1051. },
  1052. {
  1053. userId: this.$store.state.user.name,
  1054. functionId: 108002,
  1055. serialNumber: '108002Table2NewDraftNo',
  1056. tableId: '108002Table2',
  1057. tableName: '变更单基本信息表',
  1058. columnProp: 'newDraftNo',
  1059. headerAlign: 'center',
  1060. align: 'center',
  1061. columnLabel: '新图稿编码',
  1062. columnHidden: false,
  1063. columnImage: false,
  1064. status: true,
  1065. fixed: '',
  1066. columnWidth: 100
  1067. },
  1068. {
  1069. userId: this.$store.state.user.name,
  1070. functionId: 108002,
  1071. serialNumber: '108002Table2CodeNo',
  1072. tableId: '108002Table2',
  1073. tableName: '变更单基本信息表',
  1074. columnProp: 'codeNo',
  1075. headerAlign: 'center',
  1076. align: 'center',
  1077. columnLabel: '技术参数卡编码',
  1078. columnHidden: false,
  1079. columnImage: false,
  1080. status: true,
  1081. fixed: '',
  1082. columnWidth: 100
  1083. },
  1084. ],
  1085. fileColumnList: [
  1086. {
  1087. userId: this.$store.state.user.name,
  1088. functionId: 108002,
  1089. serialNumber: '108002Table3FileName',
  1090. tableId: '108002Table3',
  1091. tableName: '变更单文件信息表',
  1092. columnProp: 'fileName',
  1093. headerAlign: 'center',
  1094. align: 'left',
  1095. columnLabel: '文件名称',
  1096. columnHidden: false,
  1097. columnImage: false,
  1098. status: true,
  1099. fixed: '',
  1100. columnWidth: 120
  1101. },
  1102. {
  1103. userId: this.$store.state.user.name,
  1104. functionId: 108002,
  1105. serialNumber: '108002Table3FileType',
  1106. tableId: '108002Table3',
  1107. tableName: '变更单文件信息表',
  1108. columnProp: 'fileType',
  1109. headerAlign: 'center',
  1110. align: 'left',
  1111. columnLabel: '文件类型',
  1112. columnHidden: false,
  1113. columnImage: false,
  1114. status: true,
  1115. fixed: '',
  1116. columnWidth: 80
  1117. },
  1118. {
  1119. userId: this.$store.state.user.name,
  1120. functionId: 108002,
  1121. serialNumber: '108002Table3Url',
  1122. tableId: '108002Table3',
  1123. tableName: '变更单文件信息表',
  1124. columnProp: 'url',
  1125. headerAlign: 'center',
  1126. align: 'left',
  1127. columnLabel: '文件地址',
  1128. columnHidden: false,
  1129. columnImage: false,
  1130. status: true,
  1131. fixed: '',
  1132. columnWidth: 180
  1133. },
  1134. {
  1135. userId: this.$store.state.user.name,
  1136. functionId: 108002,
  1137. serialNumber: '108002Table3CreateBy',
  1138. tableId: '108002Table3',
  1139. tableName: '变更单文件信息表',
  1140. columnProp: 'createBy',
  1141. headerAlign: 'center',
  1142. align: 'center',
  1143. columnLabel: '创建人',
  1144. columnHidden: false,
  1145. columnImage: false,
  1146. status: true,
  1147. fixed: '',
  1148. columnWidth: 100
  1149. },
  1150. {
  1151. userId: this.$store.state.user.name,
  1152. functionId: 108002,
  1153. serialNumber: '108002Table3CreateDate',
  1154. tableId: '108002Table3',
  1155. tableName: '变更单文件信息表',
  1156. columnProp: 'createDate',
  1157. headerAlign: 'center',
  1158. align: 'center',
  1159. columnLabel: '创建时间',
  1160. columnHidden: false,
  1161. columnImage: false,
  1162. status: true,
  1163. fixed: '',
  1164. columnWidth: 150
  1165. },
  1166. ],
  1167. columnChooseDataList: [
  1168. {
  1169. userId: this.$store.state.user.name,
  1170. functionId: 108002,
  1171. serialNumber: '108002Table4PartNo',
  1172. tableId: '108002Table4',
  1173. tableName: '所选变更列表',
  1174. columnProp: 'partNo',
  1175. headerAlign: 'center',
  1176. align: 'center',
  1177. columnLabel: '物料编码',
  1178. columnHidden: false,
  1179. columnImage: false,
  1180. status: true,
  1181. fixed: '',
  1182. columnWidth: 100
  1183. },
  1184. {
  1185. userId: this.$store.state.user.name,
  1186. functionId: 108002,
  1187. serialNumber: '108002Table4PartDesc',
  1188. tableId: '108002Table4',
  1189. tableName: '所选变更列表',
  1190. columnProp: 'partDesc',
  1191. headerAlign: 'center',
  1192. align: 'left',
  1193. columnLabel: '物料描述',
  1194. columnHidden: false,
  1195. columnImage: false,
  1196. status: true,
  1197. fixed: '',
  1198. columnWidth: 180
  1199. },
  1200. {
  1201. userId: this.$store.state.user.name,
  1202. functionId: 108002,
  1203. serialNumber: '108002Table4DrawingNo',
  1204. tableId: '108002Table4',
  1205. tableName: '所选变更列表',
  1206. columnProp: 'drawingNo',
  1207. headerAlign: 'center',
  1208. align: 'center',
  1209. columnLabel: '图纸编码',
  1210. columnHidden: false,
  1211. columnImage: false,
  1212. status: true,
  1213. fixed: '',
  1214. columnWidth: 90
  1215. },
  1216. {
  1217. userId: this.$store.state.user.name,
  1218. functionId: 108002,
  1219. serialNumber: '108002Table4DraftNo',
  1220. tableId: '108002Table4',
  1221. tableName: '所选变更列表',
  1222. columnProp: 'draftNo',
  1223. headerAlign: 'center',
  1224. align: 'center',
  1225. columnLabel: '图稿编码',
  1226. columnHidden: false,
  1227. columnImage: false,
  1228. status: true,
  1229. fixed: '',
  1230. columnWidth: 90
  1231. },
  1232. ],
  1233. columnChooseItemList: [
  1234. {
  1235. userId: this.$store.state.user.name,
  1236. functionId: 108002,
  1237. serialNumber: '108002Table5ItemNo',
  1238. tableId: '108002Table5',
  1239. tableName: '执行属性表',
  1240. columnProp: 'itemNo',
  1241. headerAlign: 'center',
  1242. align: 'center',
  1243. columnLabel: '属性编码',
  1244. columnHidden: false,
  1245. columnImage: false,
  1246. status: true,
  1247. fixed: '',
  1248. columnWidth: 80
  1249. },
  1250. {
  1251. userId: this.$store.state.user.name,
  1252. functionId: 108002,
  1253. serialNumber: '108002Table5ItemDesc',
  1254. tableId: '108002Table5',
  1255. tableName: '执行属性表',
  1256. columnProp: 'itemDesc',
  1257. headerAlign: 'center',
  1258. align: 'center',
  1259. columnLabel: '属性名称',
  1260. columnHidden: false,
  1261. columnImage: false,
  1262. status: true,
  1263. fixed: '',
  1264. columnWidth: 150
  1265. },
  1266. {
  1267. userId: this.$store.state.user.name,
  1268. functionId: 108002,
  1269. serialNumber: '108002Table5ExecuteFlag',
  1270. tableId: '108002Table5',
  1271. tableName: '执行属性表',
  1272. columnProp: 'executeFlag',
  1273. headerAlign: 'center',
  1274. align: 'center',
  1275. columnLabel: '是否执行',
  1276. columnHidden: false,
  1277. columnImage: false,
  1278. status: true,
  1279. fixed: '',
  1280. columnWidth: 80
  1281. },
  1282. {
  1283. userId: this.$store.state.user.name,
  1284. functionId: 108002,
  1285. serialNumber: '108002Table5Executor',
  1286. tableId: '108002Table5',
  1287. tableName: '执行属性表',
  1288. columnProp: 'executor',
  1289. headerAlign: 'center',
  1290. align: 'center',
  1291. columnLabel: '执行人',
  1292. columnHidden: false,
  1293. columnImage: false,
  1294. status: true,
  1295. fixed: '',
  1296. columnWidth: 100
  1297. },{
  1298. userId: this.$store.state.user.name,
  1299. functionId: 108002,
  1300. serialNumber: '108002Table5ExecuteDate',
  1301. tableId: '108002Table5',
  1302. tableName: '执行属性表',
  1303. columnProp: 'itemExecutionDate',
  1304. headerAlign: 'center',
  1305. align: 'center',
  1306. columnLabel: '执行时间',
  1307. columnHidden: false,
  1308. columnImage: false,
  1309. status: true,
  1310. fixed: '',
  1311. columnWidth: 150
  1312. },
  1313. ],
  1314. columnItemList: [
  1315. {
  1316. userId: this.$store.state.user.name,
  1317. functionId: 108002,
  1318. serialNumber: '108002Table6ItemNo',
  1319. tableId: '108002Table6',
  1320. tableName: '执行属性表',
  1321. columnProp: 'itemNo',
  1322. headerAlign: 'center',
  1323. align: 'center',
  1324. columnLabel: '属性编码',
  1325. columnHidden: false,
  1326. columnImage: false,
  1327. status: true,
  1328. fixed: '',
  1329. columnWidth: 80
  1330. },
  1331. {
  1332. userId: this.$store.state.user.name,
  1333. functionId: 108002,
  1334. serialNumber: '108002Table6ItemDesc',
  1335. tableId: '108002Table6',
  1336. tableName: '执行属性表',
  1337. columnProp: 'itemDesc',
  1338. headerAlign: 'center',
  1339. align: 'center',
  1340. columnLabel: '属性名称',
  1341. columnHidden: false,
  1342. columnImage: false,
  1343. status: true,
  1344. fixed: '',
  1345. columnWidth: 150
  1346. },
  1347. ],
  1348. columnCSChooseItemList: [
  1349. {
  1350. userId: this.$store.state.user.name,
  1351. functionId: 108002,
  1352. serialNumber: '108002Table7ItemNo',
  1353. tableId: '108002Table7',
  1354. tableName: '执行属性表',
  1355. columnProp: 'itemNo',
  1356. headerAlign: 'center',
  1357. align: 'center',
  1358. columnLabel: '属性编码',
  1359. columnHidden: false,
  1360. columnImage: false,
  1361. status: true,
  1362. fixed: '',
  1363. columnWidth: 80
  1364. },
  1365. {
  1366. userId: this.$store.state.user.name,
  1367. functionId: 108002,
  1368. serialNumber: '108002Table7ItemDesc',
  1369. tableId: '108002Table7',
  1370. tableName: '执行属性表',
  1371. columnProp: 'itemDesc',
  1372. headerAlign: 'center',
  1373. align: 'center',
  1374. columnLabel: '属性名称',
  1375. columnHidden: false,
  1376. columnImage: false,
  1377. status: true,
  1378. fixed: '',
  1379. columnWidth: 150
  1380. },
  1381. {
  1382. userId: this.$store.state.user.name,
  1383. functionId: 108002,
  1384. serialNumber: '108002Table7ExecuteFlag',
  1385. tableId: '108002Table7',
  1386. tableName: '执行属性表',
  1387. columnProp: 'executeFlag',
  1388. headerAlign: 'center',
  1389. align: 'center',
  1390. columnLabel: '是否执行',
  1391. columnHidden: false,
  1392. columnImage: false,
  1393. status: true,
  1394. fixed: '',
  1395. columnWidth: 80
  1396. },
  1397. {
  1398. userId: this.$store.state.user.name,
  1399. functionId: 108002,
  1400. serialNumber: '108002Table7Executor',
  1401. tableId: '108002Table7',
  1402. tableName: '执行属性表',
  1403. columnProp: 'executor',
  1404. headerAlign: 'center',
  1405. align: 'center',
  1406. columnLabel: '执行人',
  1407. columnHidden: false,
  1408. columnImage: false,
  1409. status: true,
  1410. fixed: '',
  1411. columnWidth: 100
  1412. },{
  1413. userId: this.$store.state.user.name,
  1414. functionId: 108002,
  1415. serialNumber: '108002Table7ExecuteDate',
  1416. tableId: '108002Table7',
  1417. tableName: '执行属性表',
  1418. columnProp: 'itemExecutionDate',
  1419. headerAlign: 'center',
  1420. align: 'center',
  1421. columnLabel: '执行时间',
  1422. columnHidden: false,
  1423. columnImage: false,
  1424. status: true,
  1425. fixed: '',
  1426. columnWidth: 150
  1427. },
  1428. ],
  1429. // ======== 必填规则 ========
  1430. rules: {},
  1431. // ======== 复选数据集 ========
  1432. fileSelections: [],
  1433. itemSelections: [],
  1434. // ======== 选中的当前行数据 ========
  1435. currentRow: {},
  1436. currentCostImpactData: {},
  1437. // ======== 模态框开关控制 ========
  1438. modalFlag: false,
  1439. modalDisableFlag: false,
  1440. ecnTypeModalFlag: false,
  1441. chooseModelFlag: false
  1442. }
  1443. },
  1444. mounted () {
  1445. this.$nextTick(() => {
  1446. this.height = window.innerHeight / 2 - 30
  1447. /*第二个表格高度的动态调整*/
  1448. this.secondHeight = window.innerHeight / 2 - 186
  1449. })
  1450. },
  1451. created () {
  1452. this.getDataList()
  1453. this.getEcnModel()
  1454. },
  1455. methods: {
  1456. partInput (row, val) {
  1457. row.newPartNo = val.toUpperCase()
  1458. },
  1459. choosePartNo (row) {
  1460. this.tempPartRow = row
  1461. this.getBaseList(133)
  1462. },
  1463. ecnTypeHeaderChange (val,index) {
  1464. if (val === 'Y') {
  1465. for (let i = 0; i < this.form[index].list.length; i++) {
  1466. this.form[index].list[i].flag = 'Y'
  1467. }
  1468. } else {
  1469. for (let i = 0; i < this.form[index].list.length; i++) {
  1470. this.form[index].list[i].flag = 'N'
  1471. }
  1472. }
  1473. },
  1474. ecnTypeDetailChange (val,index) {
  1475. if (this.form[index].list.every(x => x.flag === 'Y')) {
  1476. this.form[index].flag = 'Y'
  1477. }else {
  1478. this.form[index].flag = 'N'
  1479. }
  1480. },
  1481. // ======== 分页相关方法 ========
  1482. // 每页数
  1483. sizeChangeHandle (val) {
  1484. this.pageSize = val
  1485. this.pageIndex = 1
  1486. this.getDataList()
  1487. },
  1488. // 当前页
  1489. currentChangeHandle (val) {
  1490. this.pageIndex = val
  1491. this.getDataList()
  1492. },
  1493. // ======== 列表选择相关方法 ========
  1494. selectFlag () {
  1495. return true
  1496. },
  1497. // ======== 页签切换相关方法 ========
  1498. // 单机选中询价信息
  1499. changeClickRow (row) {
  1500. this.$refs.changeTable.toggleRowSelection(row)
  1501. this.currentRow = JSON.parse(JSON.stringify(row))
  1502. },
  1503. // // 列表表格选择替换
  1504. // tabClick (tab, event) {
  1505. // // 刷新列表数据
  1506. // this.refreshCurrentTabTable()
  1507. // },
  1508. // 当前值发生变化的时候修改
  1509. currentChange (row, oldRow) {
  1510. // 判断是否是获取焦点的事件
  1511. if (row) {
  1512. this.currentRow = JSON.parse(JSON.stringify(row))
  1513. // 刷新当前页表
  1514. this.refreshCurrentTabTable()
  1515. }
  1516. },
  1517. // 刷新页签的table数据
  1518. refreshChangeTab () {
  1519. if (this.activeName === 'inventoryCostImpact') {
  1520. } else if (this.activeName === 'actionInformation') {
  1521. }
  1522. },
  1523. // 新增库存成本影响
  1524. inventoryCostImpactSave () {
  1525. if (this.costImpactData.productionProductFlag === 'Y') { // 在生产品
  1526. if (this.costImpactData.productionProductNumber == null || this.costImpactData.productionProductNumber === '') {
  1527. this.$message.warning('请填写在生产品数量!')
  1528. return
  1529. }
  1530. if (this.costImpactData.productionProductNumber <= 0) {
  1531. this.$message.warning('在生产品数量不能小于等于0!')
  1532. return
  1533. }
  1534. if (this.costImpactData.productionProductOpinions == null || this.costImpactData.productionProductOpinions === '') {
  1535. this.$message.warning('请填写在生产品处理意见!')
  1536. return
  1537. }
  1538. if (this.costImpactData.productionProductExecutor == null || this.costImpactData.productionProductExecutor === '') {
  1539. this.$message.warning('请填写在生产品执行人!')
  1540. return
  1541. }
  1542. }
  1543. if (this.costImpactData.inventoryProductFlag === 'Y') { // 成品库存
  1544. if (this.costImpactData.inventoryProductNumber == null || this.costImpactData.inventoryProductNumber === '') {
  1545. this.$message.warning('请填写成品库存数量!')
  1546. return
  1547. }
  1548. if (this.costImpactData.inventoryProductNumber <= 0) {
  1549. this.$message.warning('成品库存数量不能小于等于0!')
  1550. return
  1551. }
  1552. if (this.costImpactData.inventoryProductOpinions == null || this.costImpactData.inventoryProductOpinions === '') {
  1553. this.$message.warning('请填写成品库存处理意见!')
  1554. return
  1555. }
  1556. if (this.costImpactData.inventoryProductExecutor == null || this.costImpactData.inventoryProductExecutor === '') {
  1557. this.$message.warning('请填写成品库存执行人!')
  1558. return
  1559. }
  1560. }
  1561. if (this.costImpactData.newOrderFlag === 'Y') { // 新订单
  1562. if (this.costImpactData.newOrderNumber == null || this.costImpactData.newOrderNumber === '') {
  1563. this.$message.warning('请填写新订单数量!')
  1564. return
  1565. }
  1566. if (this.costImpactData.newOrderNumber <= 0) {
  1567. this.$message.warning('新订单数量不能小于等于0!')
  1568. return
  1569. }
  1570. }
  1571. if (this.costImpactData.affectedFlag === 'Y') { // 影响的原材料及其库存量
  1572. if (this.costImpactData.affectedNumber == null || this.costImpactData.affectedNumber === '') {
  1573. this.$message.warning('请填写影响的原材料及其库存量数量!')
  1574. return
  1575. }
  1576. if (this.costImpactData.affectedNumber <= 0) {
  1577. this.$message.warning('影响的原材料及其库存量数量不能小于等于0!')
  1578. return
  1579. }
  1580. if (this.costImpactData.affectedOpinions == null || this.costImpactData.affectedOpinions === '') {
  1581. this.$message.warning('请填写影响的原材料及其库存量处理意见!')
  1582. return
  1583. }
  1584. if (this.costImpactData.affectedExecutor == null || this.costImpactData.affectedExecutor === '') {
  1585. this.$message.warning('请填写影响的原材料及其库存量执行人!')
  1586. return
  1587. }
  1588. }
  1589. if (this.costImpactData.changeTotalCost == null || this.costImpactData.changeTotalCost === '') {
  1590. this.$message.warning('请填写ECN变更总成本!')
  1591. return
  1592. }
  1593. if (this.costImpactData.changeTotalCost <= 0) {
  1594. this.$message.warning('ECN变更总成本不能小于等于0!')
  1595. return
  1596. }
  1597. costImpactUpdate(this.costImpactData).then(({data}) => {
  1598. if (data && data.code === 0) {
  1599. this.costImpactData = data.rows.costImpactData
  1600. this.getDataList()
  1601. this.$message({
  1602. message: '操作成功',
  1603. type: 'success',
  1604. duration: 1500,
  1605. onClose: () => {}
  1606. })
  1607. } else {
  1608. this.$alert(data.msg, '错误', {
  1609. confirmButtonText: '确定'
  1610. })
  1611. }
  1612. })
  1613. },
  1614. // 刷新页签的table数据
  1615. refreshCurrentTabTable () {
  1616. if (this.activeTable === 'basicInformation') {
  1617. this.getChangeDetailList()
  1618. } else if (this.activeTable === 'fileInformation') {
  1619. this.getChangeFileList()
  1620. } else if (this.activeTable === 'inventoryCostImpact') {
  1621. this.inventoryCostImpactSearch2()
  1622. }
  1623. },
  1624. // ======== 列表数据刷新方法 ========
  1625. // 获取数据列表
  1626. getDataList () {
  1627. if(localStorage.getItem('ecnData')!=undefined){
  1628. let data=JSON.parse(localStorage.getItem('ecnData'));
  1629. this.searchData.changeNo=data.ecnNo
  1630. localStorage.removeItem('ecnData');
  1631. }
  1632. this.searchData.limit = this.pageSize
  1633. this.searchData.page = this.pageIndex
  1634. changeRecordSearch(this.searchData).then(({data}) => {
  1635. if (data.code === 0) {
  1636. this.dataList = data.page.list
  1637. this.pageIndex = data.page.currPage
  1638. this.pageSize = data.page.pageSize
  1639. this.totalPage = data.page.totalCount
  1640. // 判断是否全部存在数据
  1641. if (this.totalPage > 0) {
  1642. // 设置选中行
  1643. this.$refs.changeTable.setCurrentRow(this.dataList[0])
  1644. // 加载当前的页签的table
  1645. this.refreshCurrentTabTable()
  1646. }
  1647. }
  1648. })
  1649. },
  1650. // 变更单详情的列表
  1651. getChangeDetailList () {
  1652. let tempData = {
  1653. site: this.$store.state.user.site,
  1654. changeNo: this.currentRow.changeNo
  1655. }
  1656. changeDetailSearch(tempData).then(({data}) => {
  1657. if (data && data.code === 0) {
  1658. this.detailList = data.rows
  1659. } else {
  1660. this.detailList = []
  1661. }
  1662. })
  1663. },
  1664. // 变更单文件的列表
  1665. getChangeFileList () {
  1666. let tempData = {
  1667. orderRef1: this.$store.state.user.site,
  1668. orderRef2: this.currentRow.changeNo
  1669. }
  1670. changeFileSearch(tempData).then(({data}) => {
  1671. if (data && data.code === 0) {
  1672. this.fileList = data.rows
  1673. } else {
  1674. this.fileList = []
  1675. }
  1676. })
  1677. },
  1678. // 复选变更单文件
  1679. selectionFile (val) {
  1680. this.fileSelections = val
  1681. },
  1682. // 上传文件
  1683. uploadFileModal () {
  1684. let currentData = {
  1685. titleCon: '工程变更文件上传',
  1686. site: this.currentRow.site,
  1687. createBy: this.$store.state.user.name,
  1688. dataNo: this.currentRow.changeNo,
  1689. fileRemark: '',
  1690. folder: 'change',
  1691. }
  1692. //打开组件 去做新增业务
  1693. this.$nextTick(() => {
  1694. this.$refs.changeUploadFile.init(currentData);
  1695. })
  1696. },
  1697. // 删除变更单文件
  1698. deleteChangeFile () {
  1699. if (this.fileSelections.length === 0) {
  1700. this.$message.warning('请选择要删除的文件!')
  1701. return
  1702. }
  1703. let tempData = {
  1704. fileList: this.fileSelections
  1705. }
  1706. this.$confirm('确定删除文件?', '提示', {
  1707. confirmButtonText: '确定',
  1708. cancelButtonText: '取消',
  1709. type: 'warning'
  1710. }).then(() => {
  1711. deleteChangeFile(tempData).then(({data}) => {
  1712. if (data && data.code === 0) {
  1713. this.getChangeFileList()
  1714. this.$message({
  1715. message: '操作成功',
  1716. type: 'success',
  1717. duration: 1500,
  1718. onClose: () => {}
  1719. })
  1720. } else {
  1721. this.$alert(data.msg, '错误', {
  1722. confirmButtonText: '确定'
  1723. })
  1724. }
  1725. })
  1726. })
  1727. },
  1728. // 下载
  1729. downloadFile (row) {
  1730. downLoadQuotationFile(row)
  1731. .then(({data}) => {
  1732. // 不限制文件下载类型
  1733. const blob = new Blob([data], {type:'application/octet-stream;charset=utf-8'})
  1734. // 下载文件名称
  1735. const fileName = row.fileName
  1736. // a标签下载
  1737. const linkNode = document.createElement('a')
  1738. linkNode.download = fileName // a标签的download属性规定下载文件的名称
  1739. linkNode.style.display = 'none'
  1740. linkNode.href = URL.createObjectURL(blob) // 生成一个Blob URL
  1741. document.body.appendChild(linkNode)
  1742. linkNode.click() // 模拟在按钮上的一次鼠标单击
  1743. URL.revokeObjectURL(linkNode.href) // 释放URL 对象
  1744. document.body.removeChild(linkNode)
  1745. })
  1746. },
  1747. // 修改变更单模态框
  1748. updateModal (row) {
  1749. this.modalData = {
  1750. site: row.site,
  1751. changeNo: row.changeNo,
  1752. applicantId: row.applicantId,
  1753. applicantName: row.applicantName,
  1754. applicationDepartmentId: row.applicationDepartmentId,
  1755. applicationDepartmentName: row.applicationDepartmentName,
  1756. applyDate: row.applyDate,
  1757. ecnType: row.ecnType,
  1758. changeImpact: row.changeImpact,
  1759. changeImpactDesc: row.changeImpactDesc,
  1760. ecnStage: row.ecnStage,
  1761. changeType: row.changeType,
  1762. tpEngineerId: row.tpEngineerId,
  1763. tpEngineerName: row.tpEngineerName,
  1764. changePhaseInDate: row.changePhaseInDate,
  1765. dfIsProduct: row.dfIsProduct,
  1766. printing: row.printing,
  1767. manufacturingCostIsChange: row.manufacturingCostIsChange,
  1768. changeRequestDesc: row.changeRequestDesc,
  1769. isReQuote: row.isReQuote,
  1770. ulCertificationRequirements: row.ulCertificationRequirements,
  1771. ulContinueToMeetDemand: row.ulContinueToMeetDemand,
  1772. gpCertificationRequirements: row.gpCertificationRequirements,
  1773. gpContinueToMeetDemand: row.gpContinueToMeetDemand,
  1774. updateBy: this.$store.state.user.name,
  1775. detailList: [],
  1776. ecnTypeData: []
  1777. }
  1778. this.changeTitle = '变更申请-' + this.modalData.changeNo
  1779. // 查选择的ECN种类
  1780. this.getChangeChooseEcnType()
  1781. // 查变更单明细
  1782. this.changeRequestDetailSearch()
  1783. // 查变更单库存成本影响
  1784. this.inventoryCostImpactSearch()
  1785. // 查变更单TP&执行信息
  1786. this.tpExecutionInfoSearch()
  1787. // 查变更单会签信息
  1788. this.countersignatureSearch()
  1789. this.activeName = 'basicInformation'
  1790. this.modalFlag = true
  1791. this.modalDisableFlag = true
  1792. },
  1793. // 获取选择的ECN种类
  1794. getChangeChooseEcnType () {
  1795. getChooseEcnType(this.modalData).then(({data}) => {
  1796. if (data && data.code === 0) {
  1797. this.form = data.rows
  1798. } else {
  1799. this.$alert(data.msg, '错误', {
  1800. confirmButtonText: '确定'
  1801. })
  1802. }
  1803. })
  1804. },
  1805. // 打开ECN种类模态框
  1806. chooseEcnTypeModal () {
  1807. this.ecnTypeModalFlag = true
  1808. },
  1809. // 保存ECN种类
  1810. saveEcnTypeData () {
  1811. this.ecnTypeModalFlag = false
  1812. },
  1813. // 查询ECN的模板
  1814. getEcnModel () {
  1815. let tempData = {
  1816. site: this.$store.state.user.site,
  1817. functionType: 'ECN'
  1818. }
  1819. getEcnModel(tempData).then(({data}) => {
  1820. if (data.code === 0) {
  1821. this.modelList = data.rows
  1822. }
  1823. })
  1824. },
  1825. // 查询变更明细表
  1826. changeRequestDetailSearch () {
  1827. requestDetailSearch(this.modalData).then(({data}) => {
  1828. if (data && data.code === 0) {
  1829. this.chooseDataList = data.rows
  1830. } else {
  1831. this.$alert(data.msg, '错误', {
  1832. confirmButtonText: '确定'
  1833. })
  1834. }
  1835. })
  1836. },
  1837. // 查询库存成本影响对象
  1838. inventoryCostImpactSearch () {
  1839. costImpactSearch(this.modalData).then(({data}) => {
  1840. if (data && data.code === 0) {
  1841. this.costImpactData = data.rows
  1842. } else {
  1843. this.$alert(data.msg, '错误', {
  1844. confirmButtonText: '确定'
  1845. })
  1846. }
  1847. })
  1848. },
  1849. // 查询库存成本影响对象
  1850. inventoryCostImpactSearch2 () {
  1851. costImpactSearch(this.currentRow).then(({data}) => {
  1852. if (data && data.code === 0) {
  1853. this.currentCostImpactData = data.rows
  1854. } else {
  1855. this.$alert(data.msg, '错误', {
  1856. confirmButtonText: '确定'
  1857. })
  1858. }
  1859. })
  1860. },
  1861. // 查询执行信息
  1862. tpExecutionInfoSearch () {
  1863. executionInfoSearch(this.modalData).then(({data}) => {
  1864. if (data && data.code === 0) {
  1865. this.executionInfoData = data.rows.executionInfoData
  1866. this.executionInfoData.createBy = this.$store.state.user.name
  1867. this.chooseItemList = data.rows.chooseItemList
  1868. } else {
  1869. this.$alert(data.msg, '错误', {
  1870. confirmButtonText: '确定'
  1871. })
  1872. }
  1873. })
  1874. },
  1875. // 查询会签信息
  1876. countersignatureSearch () {
  1877. countersignatureSearch(this.modalData).then(({data}) => {
  1878. if (data && data.code === 0) {
  1879. this.chooseCSItemList = data.rows.chooseCSItemList
  1880. } else {
  1881. this.$alert(data.msg, '错误', {
  1882. confirmButtonText: '确定'
  1883. })
  1884. }
  1885. })
  1886. },
  1887. // 删除所选技术参数卡
  1888. deleteChooseDataModal (row) {
  1889. this.$confirm(`是否删除该技术参数卡的变更?`, '提示', {
  1890. confirmButtonText: '确定',
  1891. cancelButtonText: '取消',
  1892. type: 'warning'
  1893. }).then(() => {
  1894. deleteChangeDetail(row).then(({data}) => {
  1895. if (data && data.code === 0) {
  1896. this.changeRequestDetailSearch()
  1897. this.$message({
  1898. message: '操作成功',
  1899. type: 'success',
  1900. duration: 1500,
  1901. onClose: () => {}
  1902. })
  1903. } else {
  1904. this.$alert(data.msg, '错误', {
  1905. confirmButtonText: '确定'
  1906. })
  1907. }
  1908. })
  1909. })
  1910. },
  1911. // 修改变更申请
  1912. saveData () {
  1913. this.modalData.detailList = this.chooseDataList
  1914. this.modalData.ecnTypeData = this.form
  1915. if (this.modalData.applicantId === '' || this.modalData.applicantId == null) {
  1916. this.$message.warning('请选择申请人员!')
  1917. return
  1918. }
  1919. if (this.modalData.applyDate === '' || this.modalData.applyDate == null) {
  1920. this.$message.warning('请选择申请日期!')
  1921. return
  1922. }
  1923. if (this.modalData.changeImpact === '' || this.modalData.changeImpact == null) {
  1924. this.$message.warning('请选择ECN变更影响!')
  1925. return
  1926. }
  1927. if ((this.modalData.changeImpactDesc === '' || this.modalData.changeImpactDesc == null) && this.modalData.changeImpact === 'Y') {
  1928. this.$message.warning('请填写变更影响描述!')
  1929. return
  1930. }
  1931. if (this.modalData.ecnStage === '' || this.modalData.ecnStage == null) {
  1932. this.$message.warning('请选择ECN阶段!')
  1933. return
  1934. }
  1935. if (this.modalData.changeType === '' || this.modalData.changeType == null) {
  1936. this.$message.warning('请选择变更类别!')
  1937. return
  1938. }
  1939. if (this.modalData.tpEngineerId === '' || this.modalData.tpEngineerId == null) {
  1940. this.$message.warning('请选择TP工程师!')
  1941. return
  1942. }
  1943. if (this.modalData.changePhaseInDate === '' || this.modalData.changePhaseInDate == null) {
  1944. this.$message.warning('请选择变更生效日期!')
  1945. return
  1946. }
  1947. if (this.modalData.dfIsProduct === '' || this.modalData.dfIsProduct == null) {
  1948. this.$message.warning('请选择是否DF是产品!')
  1949. return
  1950. }
  1951. if (this.modalData.printing === '' || this.modalData.printing == null) {
  1952. this.$message.warning('请选择印刷方式!')
  1953. return
  1954. }
  1955. if (this.modalData.manufacturingCostIsChange === '' || this.modalData.manufacturingCostIsChange == null) {
  1956. this.$message.warning('请选择制造成本是否变更!')
  1957. return
  1958. }
  1959. if (this.modalData.changeRequestDesc === '' || this.modalData.changeRequestDesc == null) {
  1960. this.$message.warning('请填写变更要求描述!')
  1961. return
  1962. }
  1963. if (this.modalData.isReQuote === '' || this.modalData.isReQuote == null) {
  1964. this.$message.warning('请选择是否重新报价!')
  1965. return
  1966. }
  1967. if (this.modalData.ulCertificationRequirements === '' || this.modalData.ulCertificationRequirements == null) {
  1968. this.$message.warning('请选择原产品是否UL认证要求!')
  1969. return
  1970. }
  1971. if (this.modalData.ulContinueToMeetDemand === '' || this.modalData.ulContinueToMeetDemand == null) {
  1972. this.$message.warning('请选择变更后能否继续满足此需求(UL)!')
  1973. return
  1974. }
  1975. if (this.modalData.gpCertificationRequirements === '' || this.modalData.gpCertificationRequirements == null) {
  1976. this.$message.warning('请选择原产品是否GP要求!')
  1977. return
  1978. }
  1979. if (this.modalData.gpContinueToMeetDemand === '' || this.modalData.gpContinueToMeetDemand == null) {
  1980. this.$message.warning('请选择变更后能否继续满足此需求(GP)!')
  1981. return
  1982. }
  1983. changeRequestUpdate(this.modalData).then(({data}) => {
  1984. if (data && data.code === 0) {
  1985. this.modalData = data.rows.modalData
  1986. this.getDataList()
  1987. // 查选择的ECN种类
  1988. this.getChangeChooseEcnType()
  1989. // 查变更单明细
  1990. this.changeRequestDetailSearch()
  1991. this.$message({
  1992. message: '操作成功',
  1993. type: 'success',
  1994. duration: 1500,
  1995. onClose: () => {}
  1996. })
  1997. } else {
  1998. this.$alert(data.msg, '错误', {
  1999. confirmButtonText: '确定'
  2000. })
  2001. }
  2002. })
  2003. },
  2004. // 选择模板属性
  2005. chooseModel () {
  2006. this.chooseModelData = {
  2007. site: this.$store.state.user.site,
  2008. itemNo: '',
  2009. itemDesc: '',
  2010. functionType: 'ECN',
  2011. codeNo: this.chooseItemList.length > 0 ? this.chooseItemList[0].codeNo : this.modelList.length > 0 ? this.modelList[0].codeNo : ''
  2012. }
  2013. // 先清空缓存选中
  2014. this.$nextTick(() => this.$refs.itemTable.clearSelection())
  2015. // 查询所有属性
  2016. getItemList(this.chooseModelData).then(({data}) => {
  2017. if (data && data.code === 0) {
  2018. this.itemList = data.rows
  2019. this.itemList.forEach(val => {
  2020. // 回显选中的部门
  2021. if (this.chooseItemList.map(val => val.itemNo).includes(val.itemNo)) {
  2022. this.$nextTick(() => this.$refs.itemTable.toggleRowSelection(val, true))
  2023. }
  2024. })
  2025. } else {
  2026. this.$alert(data.msg, '错误', {
  2027. confirmButtonText: '确定'
  2028. })
  2029. }
  2030. })
  2031. this.chooseModelFlag = true
  2032. },
  2033. // 查询属性
  2034. searchItemList () {
  2035. getItemList(this.chooseModelData).then(({data}) => {
  2036. if (data.code === 0) {
  2037. this.itemList = data.rows
  2038. }
  2039. })
  2040. },
  2041. // 单机选择
  2042. itemClickRow (row) {
  2043. this.$refs.itemTable.toggleRowSelection(row)
  2044. },
  2045. // 复选属性
  2046. selectionItem (val) {
  2047. this.itemSelections = val
  2048. },
  2049. // 确认多选属性
  2050. confirmItem () {
  2051. if (this.itemSelections.length === 0) {
  2052. this.$message.warning("请勾选属性!")
  2053. return
  2054. }
  2055. this.chooseItemList = this.itemSelections
  2056. this.chooseModelFlag = false
  2057. },
  2058. // 执行所选属性
  2059. executeModal (row) {
  2060. row.executeFlag = 'Y'
  2061. row.itemExecutionDate = new Date(+ new Date() + 8 * 3600 * 1000).toISOString().replace(/T/g, ' ').replace(/\.[\d]{3}Z/, '')
  2062. row.executor = this.$store.state.user.name
  2063. },
  2064. // 执行所选属性
  2065. executeCSModal (row) {
  2066. row.executeFlag = 'Y'
  2067. row.itemExecutionDate = new Date(+ new Date() + 8 * 3600 * 1000).toISOString().replace(/T/g, ' ').replace(/\.[\d]{3}Z/, '')
  2068. row.executor = this.$store.state.user.name
  2069. },
  2070. // 编辑执行信息
  2071. executionInformationSave () {
  2072. this.executionInfoData.chooseItemList = this.chooseItemList
  2073. if (this.executionInfoData.originalDieCuttingRuleNo == null || this.executionInfoData.originalDieCuttingRuleNo === '') {
  2074. this.$message.warning('请填写原啤刀编号!')
  2075. return;
  2076. }
  2077. if (this.executionInfoData.newDieCuttingRuleNo == null || this.executionInfoData.newDieCuttingRuleNo === '') {
  2078. this.$message.warning('请填写新啤刀编号!')
  2079. return;
  2080. }
  2081. if (this.executionInfoData.originalStencilNo == null || this.executionInfoData.originalStencilNo === '') {
  2082. this.$message.warning('请填写原网板/印版编号!')
  2083. return;
  2084. }
  2085. if (this.executionInfoData.newStencilNo == null || this.executionInfoData.newStencilNo === '') {
  2086. this.$message.warning('请填写新网板/印版编号!')
  2087. return;
  2088. }
  2089. if (this.executionInfoData.executionDate == null || this.executionInfoData.executionDate === '') {
  2090. this.$message.warning('请选择ECN执行日期!')
  2091. return;
  2092. }
  2093. executionUpdate(this.executionInfoData).then(({data}) => {
  2094. if (data && data.code === 0) {
  2095. this.executionInfoData = data.rows.executionInfoData
  2096. this.executionInfoData.createBy = this.$store.state.user.name
  2097. this.chooseItemList = data.rows.chooseItemList
  2098. this.getDataList()
  2099. this.$message({
  2100. message: '操作成功',
  2101. type: 'success',
  2102. duration: 1500,
  2103. onClose: () => {}
  2104. })
  2105. } else {
  2106. this.$alert(data.msg, '错误', {
  2107. confirmButtonText: '确定'
  2108. })
  2109. }
  2110. })
  2111. },
  2112. // 编辑会签信息
  2113. countersignatureSave () {
  2114. this.countersignatureData.changeNo = this.modalData.changeNo
  2115. this.countersignatureData.chooseCSItemList = this.chooseCSItemList
  2116. countersignatureUpdate(this.countersignatureData).then(({data}) => {
  2117. if (data && data.code === 0) {
  2118. this.chooseCSItemList = data.rows.chooseCSItemList
  2119. this.getDataList()
  2120. this.$message({
  2121. message: '操作成功',
  2122. type: 'success',
  2123. duration: 1500,
  2124. onClose: () => {}
  2125. })
  2126. } else {
  2127. this.$alert(data.msg, '错误', {
  2128. confirmButtonText: '确定'
  2129. })
  2130. }
  2131. })
  2132. },
  2133. // 回车换行
  2134. focusNextInput (index, type) {
  2135. let aaa = ''
  2136. if (this.chooseDataList.length - 1 === index) {
  2137. aaa = `${type}0`
  2138. } else {
  2139. aaa = `${type}${index + 1}`
  2140. }
  2141. this.$nextTick(() => {
  2142. this.$refs[aaa].focus()
  2143. })
  2144. },
  2145. // 根据人员编码查人员部门
  2146. getDepartmentByUserName () {
  2147. let tempData = {
  2148. site: this.$store.state.user.site,
  2149. username: this.modalData.applicantId
  2150. }
  2151. getDepartmentByUserName(tempData).then(({data}) => {
  2152. if (data.code === 0) {
  2153. this.modalData.applicationDepartmentId = data.rows[0].departmentNo
  2154. this.modalData.applicationDepartmentName = data.rows[0].departmentName
  2155. }
  2156. })
  2157. },
  2158. // ======== chooseList相关方法 ========
  2159. // 获取基础数据列表S
  2160. getBaseList (val, type) {
  2161. this.tagNo = val
  2162. this.tagNo1 = type
  2163. this.$nextTick(() => {
  2164. let strVal = ''
  2165. if (val === 103) {
  2166. if (type === 1) {
  2167. strVal = this.modalData.applicantId
  2168. } else if (type === 2) {
  2169. strVal = this.modalData.tpEngineerId
  2170. } else if (type === 3) {
  2171. if (this.costImpactData.productionProductFlag !== 'Y') {
  2172. return
  2173. } else {
  2174. strVal = this.costImpactData.productionProductExecutor
  2175. }
  2176. } else if (type === 4) {
  2177. if (this.costImpactData.inventoryProductFlag !== 'Y') {
  2178. return
  2179. } else {
  2180. strVal = this.costImpactData.inventoryProductExecutor
  2181. }
  2182. } else if (type === 5) {
  2183. if (this.costImpactData.affectedFlag !== 'Y') {
  2184. return
  2185. } else {
  2186. strVal = this.costImpactData.affectedExecutor
  2187. }
  2188. }
  2189. }
  2190. if (val === 133) {
  2191. strVal = this.tempPartRow.newPartNo
  2192. }
  2193. this.$refs.baseList.init(val, strVal)
  2194. })
  2195. },
  2196. // 列表方法的回调
  2197. getBaseData (val) {
  2198. if (this.tagNo === 103) {
  2199. if (this.tagNo1 === 1) {
  2200. this.modalData.applicantId = val.username
  2201. this.modalData.applicantName = val.user_display
  2202. this.getDepartmentByUserName()
  2203. } else if (this.tagNo1 === 2) {
  2204. this.modalData.tpEngineerId = val.username
  2205. this.modalData.tpEngineerName = val.user_display
  2206. } else if (this.tagNo1 === 3) {
  2207. this.costImpactData.productionProductExecutor = val.username
  2208. this.costImpactData.productionProductExecutorName = val.user_display
  2209. //this.$set(this.costImpactData,'productionProductExecutorName',val.user_display)
  2210. } else if (this.tagNo1 === 4) {
  2211. this.costImpactData.inventoryProductExecutor = val.username
  2212. this.costImpactData.inventoryProductExecutorName = val.user_display
  2213. //this.$set(this.costImpactData,'inventoryProductExecutorName',val.user_display)
  2214. } else if (this.tagNo1 === 5) {
  2215. this.costImpactData.affectedExecutor = val.username
  2216. this.costImpactData.affectedExecutorName = val.user_display
  2217. //this.$set(this.costImpactData,'affectedExecutorName',val.user_display)
  2218. }
  2219. }
  2220. if (this.tagNo === 133) {
  2221. //this.tempPartRow.newPartNo = val.part_no
  2222. this.$set(this.tempPartRow,'newPartNo',val.part_no)
  2223. }
  2224. },
  2225. // ======== 导出相关方法 ========
  2226. /**
  2227. * 导出excel
  2228. */
  2229. async createExportData () {
  2230. this.searchData.limit = -1
  2231. this.searchData.page = 1
  2232. await changeRecordSearch(this.searchData).then(({data}) => {
  2233. this.resultList = data.page.list
  2234. })
  2235. return this.resultList
  2236. },
  2237. startDownload () {},
  2238. finishDownload () {},
  2239. fields () {
  2240. let json = '{'
  2241. this.columnList.forEach((item, index) => {
  2242. if (index === this.columnList.length - 1) {
  2243. json += '"' + item.columnLabel + '"' + ':' + '"' + item.columnProp + '"'
  2244. } else {
  2245. json += '"' + item.columnLabel + '"' + ':' + '"' + item.columnProp + '"' + ','
  2246. }
  2247. })
  2248. json += '}'
  2249. let s = eval('(' + json + ')')
  2250. return s
  2251. },
  2252. rowStyle ({row}) {
  2253. if (this.currentRow.changeNo === row.changeNo) {
  2254. return { 'background-color': '#E8F7F6', cursor: 'pointer' };
  2255. }
  2256. },
  2257. }
  2258. }
  2259. </script>
  2260. <style scoped lang="scss">
  2261. /deep/ .customer-tab .el-tabs__content {
  2262. padding: 0px !important;
  2263. }
  2264. .numInput /deep/ .el-input__inner{
  2265. text-align: right;
  2266. }
  2267. /deep/ .inlineNumber input::-webkit-outer-spin-button,
  2268. /deep/ .inlineNumber input::-webkit-inner-spin-button {
  2269. -webkit-appearance: none;
  2270. }
  2271. /deep/ .inlineNumber input[type="number"]{
  2272. -moz-appearance: textfield;
  2273. padding-right: 5px !important;
  2274. }
  2275. </style>