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.

3502 lines
136 KiB

2 years ago
9 months ago
2 years ago
2 years ago
2 years ago
8 months ago
2 years ago
7 months 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
7 months 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
9 months ago
12 months ago
12 months ago
12 months ago
2 years ago
7 months ago
2 years ago
2 years ago
2 years ago
12 months ago
2 years ago
2 years ago
7 months ago
2 years ago
7 months ago
2 years ago
2 years ago
2 years ago
12 months 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
12 months ago
2 years ago
2 years ago
12 months 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
9 months ago
2 years ago
2 years ago
2 years ago
2 years ago
9 months ago
2 years ago
2 years ago
2 years ago
2 years ago
9 months ago
2 years ago
12 months ago
12 months ago
12 months ago
12 months ago
12 months ago
2 years ago
2 years ago
2 years ago
12 months ago
8 months ago
7 months ago
7 months ago
2 years ago
2 years ago
2 years ago
2 years ago
12 months ago
12 months ago
2 years ago
2 years ago
7 months ago
2 years ago
7 months ago
2 years ago
8 months ago
2 years ago
8 months ago
2 years ago
8 months ago
2 years ago
7 months 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
7 months ago
2 years ago
7 months ago
2 years ago
7 months ago
2 years ago
7 months ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
7 months ago
2 years ago
2 years ago
2 years ago
2 years ago
11 months ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months 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">
  5. <el-form-item :label="'BU'">
  6. <el-select v-model="searchData.buNo" placeholder="请选择" clearable style="width: 80px">
  7. <el-option
  8. v-for = "i in buList"
  9. :key = "i.buNo"
  10. :label = "i.buNo"
  11. :value = "i.buNo">
  12. </el-option>
  13. </el-select>
  14. </el-form-item>
  15. <el-form-item label="PLM物料编码">
  16. <el-input v-model="searchData.testPartNo" clearable style="width: 120px"/>
  17. </el-form-item>
  18. <el-form-item label="IFS物料编码">
  19. <el-input v-model="searchData.partNo" clearable style="width: 120px"/>
  20. </el-form-item>
  21. <el-form-item label="物料名称">
  22. <el-input v-model="searchData.partDesc" clearable style="width: 300px"/>
  23. </el-form-item>
  24. <el-form-item label="客户编码">
  25. <el-input v-model="searchData.customerId" clearable style="width: 120px"/>
  26. </el-form-item>
  27. <el-form-item label="客户名称">
  28. <el-input v-model="searchData.customerDesc" clearable style="width: 150px"/>
  29. </el-form-item>
  30. </el-form>
  31. <el-form :inline="true" label-position="top" :model="searchData">
  32. <el-form-item :label="'状态'">
  33. <el-select v-model="searchData.status" clearable style="width: 80px">
  34. <el-option label="草稿" value="cg"></el-option>
  35. <el-option label="审批中" value="spz"></el-option>
  36. <el-option label="已升版" value="death"></el-option>
  37. <el-option label="已完成" value="已完成"></el-option>
  38. <el-option label="Dead" value="dead"></el-option>
  39. </el-select>
  40. </el-form-item>
  41. <el-form-item label="项目号">
  42. <el-input v-model="searchData.projectId" clearable style="width: 120px"/>
  43. </el-form-item>
  44. <el-form-item label="项目名称">
  45. <el-input v-model="searchData.projectDesc" clearable style="width: 215px"/>
  46. </el-form-item>
  47. <el-form-item label="技术参数卡编码">
  48. <el-input v-model="searchData.oriCodeNo" clearable style="width: 150px"/>
  49. </el-form-item>
  50. <el-form-item label=" ">
  51. <el-button plain type="primary" :loading="searchLoading" @click="getDataList">查询</el-button>
  52. <el-button type="warning" :loading="updateAbnormalDataLoading" @click="handleUpdateAbnormalData">异常数据更新</el-button>
  53. <el-button type="primary" :loading="saveDataLoading" @click="changeModel">变更申请</el-button>
  54. <download-excel
  55. :fields="fields()"
  56. :data="exportData"
  57. type="xls"
  58. :name="exportName"
  59. :header="exportHeader"
  60. :footer="exportFooter"
  61. :fetch="createExportData"
  62. :before-generate="startDownload"
  63. :before-finish="finishDownload"
  64. worksheet="导出信息"
  65. class="el-button el-button--primary el-button--medium">
  66. {{ "导出" }}
  67. </download-excel>
  68. <el-button @click="filterVisible = true">搜索</el-button>
  69. </el-form-item>
  70. </el-form>
  71. <!-- 数据列表 -->
  72. <el-table
  73. :height="height"
  74. :data="dataList"
  75. border
  76. @selection-change="selectionData"
  77. style="width: 100%;">
  78. <el-table-column
  79. type="selection"
  80. header-align="center"
  81. align="center"
  82. width="50">
  83. </el-table-column>
  84. <el-table-column
  85. v-for="(item,index) in columnList" :key="index"
  86. :sortable="item.columnSortable"
  87. :prop="item.columnProp"
  88. :header-align="item.headerAlign"
  89. :show-overflow-tooltip="item.showOverflowTooltip"
  90. :align="item.align"
  91. :fixed="item.fixed === ''?false:item.fixed"
  92. :min-width="item.columnWidth"
  93. :label="item.columnLabel">
  94. <template slot-scope="scope">
  95. <span v-if="!item.columnHidden">{{ scope.row[item.columnProp] }}</span>
  96. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
  97. </template>
  98. </el-table-column>
  99. </el-table>
  100. <selectDiv ref="selectDiv"></selectDiv>
  101. <!-- 分页插件 -->
  102. <el-pagination style="margin-top: 0px"
  103. @size-change="sizeChangeHandle"
  104. @current-change="currentChangeHandle"
  105. :current-page="pageIndex"
  106. :page-sizes="[20, 50, 100, 200, 500]"
  107. :page-size="pageSize"
  108. :total="totalPage"
  109. layout="total, sizes, prev, pager, next, jumper">
  110. </el-pagination>
  111. <!-- 变更申请模态框 -->
  112. <el-dialog :title="changeTitle" :close-on-click-modal="false" top="8vh" v-drag :visible.sync="modalFlag" width="1060px" :showClose="false">
  113. <el-tabs tab-position="left" type="border-card" v-model="activeName" @tab-click="refreshCurrentTabTable" style="width: 100%;height: 720px;">
  114. <el-tab-pane label="基本信息" name="basicInformation">
  115. <div style="height: 705px">
  116. <el-form :inline="true" label-position="top" :model="modalData" :rules="rules" style="margin-top: -5px;">
  117. <el-form-item prop="applicantId" :rules="rules.applicantId">
  118. <span style="cursor: pointer" slot="label" @click="getBaseList(103, 1)"><a herf="#">申请人/Applicant</a></span>
  119. <el-input v-model="modalData.applicantId" @blur="applicantBlur(103)" style="width: 120px"></el-input>
  120. <el-input v-model="modalData.applicantName" disabled style="width: 293px"></el-input>
  121. </el-form-item>
  122. <el-form-item label="申请部门/Department">
  123. <el-input v-model="modalData.applicationDepartmentId" readonly style="width: 120px"></el-input>
  124. <el-input v-model="modalData.applicationDepartmentName" disabled style="width: 293px"></el-input>
  125. </el-form-item>
  126. </el-form>
  127. <el-form :inline="true" label-position="top" :model="modalData" :rules="rules">
  128. <el-form-item label="申请日期/Apply Date" prop="applyDate" :rules="rules.applyDate">
  129. <el-date-picker
  130. style="width: 205px"
  131. v-model="modalData.applyDate"
  132. type="date"
  133. value-format="yyyy-MM-dd"
  134. placeholder="请选择日期"
  135. :editable=false>
  136. </el-date-picker>
  137. </el-form-item>
  138. <!-- <el-form-item label="ECN变更影响" prop="changeImpact" :rules="rules.changeImpact">-->
  139. <!-- <dict-data-select v-if="modalFlag" v-model="modalData.changeImpact" style="width: 205px" dict-type="change_change_Impact"></dict-data-select>-->
  140. <!-- </el-form-item>-->
  141. <el-form-item label="变更影响描述/Description">
  142. <el-input v-model="modalData.changeImpactDesc" style="width: 629px"></el-input>
  143. </el-form-item>
  144. </el-form>
  145. <el-form :inline="true" label-position="top" :model="modalData" :rules="rules">
  146. <el-form-item label="ECN阶段/Stage" prop="ecnStage" :rules="rules.ecnStage">
  147. <dict-data-select v-if="modalFlag" v-model="modalData.ecnStage" style="width: 95px" dict-type="change_ecn_stage"></dict-data-select>
  148. </el-form-item>
  149. <el-form-item label="变更类别/Change Category" prop="changeType" :rules="rules.changeType">
  150. <dict-data-select v-if="modalFlag" v-model="modalData.changeType" style="width: 160px" dict-type="change_change_type"></dict-data-select>
  151. </el-form-item>
  152. <el-form-item label="ECN种类/ECN Category" prop="ecnType" :rules="rules.ecnType">
  153. <dict-data-select v-if="modalFlag" v-model="modalData.ecnType" style="width: 160px" dict-type="change_ecn_type"></dict-data-select>
  154. </el-form-item>
  155. <el-form-item label=" " style="margin-left: -10px">
  156. <el-button type="primary" @click="chooseEcnTypeModal" style="width: 70px">ECN种类</el-button>
  157. </el-form-item>
  158. <el-form-item label="变更生效日期/Change Effictive Date" prop="changePhaseInDate" :rules="rules.changePhaseInDate" style="margin-left: -10px">
  159. <el-date-picker
  160. style="width: 205px"
  161. v-model="modalData.changePhaseInDate"
  162. type="date"
  163. value-format="yyyy-MM-dd"
  164. placeholder="请选择日期"
  165. :editable=false>
  166. </el-date-picker>
  167. </el-form-item>
  168. <el-form-item label="是否DF产品/DF(Y/N)" prop="dfIsProduct" :rules="rules.dfIsProduct">
  169. <dict-data-select v-if="modalFlag" v-model="modalData.dfIsProduct" style="width: 108px" dict-type="change_df_is_product"></dict-data-select>
  170. </el-form-item>
  171. </el-form>
  172. <el-form :inline="true" label-position="top" :model="modalData" :rules="rules">
  173. <el-form-item prop="tpEngineerId" :rules="rules.tpEngineerId">
  174. <span style="cursor: pointer" slot="label" @click="getBaseList(2005)"><a herf="#">TP工程师/CS/TP Engineer/CS</a></span>
  175. <el-input v-model="modalData.tpEngineerId" @blur="tpEngineerBlur(2005)" style="width: 120px"></el-input>
  176. <el-input v-model="modalData.tpEngineerName" disabled style="width: 293px"></el-input>
  177. </el-form-item>
  178. <el-form-item label=" " prop="industrialEngineerId" :rules="[{required: modalData.dfIsProduct === 'Yes',message: ' ',trigger: ['blur','change']}]">
  179. <span style="cursor: pointer" slot="label" @click="getBaseList(2006)"><a herf="#">关务人员/Customs</a></span>
  180. <el-input v-model="modalData.industrialEngineerId" @blur="industrialEngineerBlur(2006)" style="width: 120px"></el-input>
  181. <el-input v-model="modalData.industrialEngineerName" disabled style="width: 293px"></el-input>
  182. </el-form-item>
  183. <!-- <el-form-item label="制造成本是否变更" prop="manufacturingCostIsChange" :rules="rules.manufacturingCostIsChange">-->
  184. <!-- <dict-data-select v-model="modalData.manufacturingCostIsChange" style="width: 205px" dict-type="change_manufacturing_cost_is_change"></dict-data-select>-->
  185. <!-- </el-form-item>-->
  186. </el-form>
  187. <el-form :inline="true" label-position="top" :model="modalData">
  188. <el-form-item label=" ">
  189. <span style="cursor: pointer" slot="label" @click="getBaseList(2007)"><a herf="#">质检人员/CQC</a></span>
  190. <el-input v-model="modalData.cqcOperatorId" @blur="cqcOperatorBlur(2007)" style="width: 120px"></el-input>
  191. <el-input v-model="modalData.cqcOperatorName" disabled style="width: 293px"></el-input>
  192. </el-form-item>
  193. <el-form-item label=" ">
  194. <span style="cursor: pointer" slot="label" @click="getBaseList(2008)"><a herf="#">首件检测/FAI</a></span>
  195. <el-input v-model="modalData.faiOperatorId" @blur="faiOperatorBlur(2008)" style="width: 120px"></el-input>
  196. <el-input v-model="modalData.faiOperatorName" disabled style="width: 293px"></el-input>
  197. </el-form-item>
  198. </el-form>
  199. <el-form :inline="true" label-position="top" :model="modalData">
  200. <el-form-item label="DelegateAccess">
  201. <span style="cursor: pointer" slot="label" @click="delegateAccessVisible = true"><a herf="#">DelegateAccess</a></span>
  202. <el-input type="textarea" v-model="delegateAccessName" readonly :rows="2" resize='none' style="width: 848px"></el-input>
  203. </el-form-item>
  204. </el-form>
  205. <el-form :inline="true" label-position="top" :model="modalData" :rules="rules" style="margin-top: 30px">
  206. <el-form-item label="变更要求描述/Requirements Desc." prop="changeRequestDesc" :rules="rules.changeRequestDesc">
  207. <el-input type="textarea" v-model="modalData.changeRequestDesc" :rows="3" resize='none' show-word-limit style="width: 636px;height: 30px"></el-input>
  208. </el-form-item>
  209. <!-- <el-form-item label="是否重新报价" prop="isReQuote" :rules="rules.isReQuote">-->
  210. <!-- <dict-data-select v-model="modalData.isReQuote" style="width: 205px" dict-type="change_is_re_quote"></dict-data-select>-->
  211. <!-- <el-button type="primary" icon="el-icon-upload" @click="uploadFileModal" style="margin-top: 12px;width: 105px">文件上传</el-button>-->
  212. <!-- </el-form-item>-->
  213. <el-form-item label="印刷方式/Print Type" prop="printing" :rules="rules.printing">
  214. <dict-data-select v-if="modalFlag" v-model="modalData.printing" style="width: 198px" dict-type="change_printing"></dict-data-select>
  215. <el-button type="primary" icon="el-icon-upload" @click="uploadFileModal" style="margin-top: 15px;width: 105px">文件上传</el-button>
  216. </el-form-item>
  217. </el-form>
  218. <!-- <el-form :inline="true" label-position="top" :model="modalData" :rules="rules" style="margin-top: 50px">-->
  219. <!-- <el-form-item label="原产品是否UL认证要求" prop="ulCertificationRequirements" :rules="rules.ulCertificationRequirements">-->
  220. <!-- <dict-data-select v-model="modalData.ulCertificationRequirements" style="width: 423px" dict-type="change_ul_certification_requirements"></dict-data-select>-->
  221. <!-- </el-form-item>-->
  222. <!-- <el-form-item label="如果有,变更后能否继续满足此需求" prop="ulContinueToMeetDemand" :rules="rules.ulContinueToMeetDemand">-->
  223. <!-- <dict-data-select v-model="modalData.ulContinueToMeetDemand" style="width: 423px" dict-type="change_ul_continue_to_meet_demand"></dict-data-select>-->
  224. <!-- </el-form-item>-->
  225. <!-- </el-form>-->
  226. <!-- <el-form :inline="true" label-position="top" :model="modalData" :rules="rules">-->
  227. <!-- <el-form-item label="原产品是否GP要求" prop="gpCertificationRequirements" :rules="rules.gpCertificationRequirements">-->
  228. <!-- <dict-data-select v-model="modalData.gpCertificationRequirements" style="width: 423px" dict-type="change_gp_certification_requirements"></dict-data-select>-->
  229. <!-- </el-form-item>-->
  230. <!-- <el-form-item label="如果有,变更后能否继续满足此需求" prop="gpContinueToMeetDemand" :rules="rules.gpContinueToMeetDemand">-->
  231. <!-- <dict-data-select v-model="modalData.gpContinueToMeetDemand" style="width: 423px" dict-type="change_gp_continue_to_meet_demand"></dict-data-select>-->
  232. <!-- </el-form-item>-->
  233. <!-- </el-form>-->
  234. <el-form :inline="true" label-position="top" style="margin-top: 50px">
  235. <el-button type="primary" @click="addChangeDetail">新增</el-button>
  236. <div class="rq">
  237. <el-table
  238. :data="chooseDataList"
  239. height="273px"
  240. border
  241. style="width:100%">
  242. <!-- <el-table-column-->
  243. <!-- v-for="(item,index) in columnChooseDataList" :key="index"-->
  244. <!-- :sortable="item.columnSortable"-->
  245. <!-- :prop="item.columnProp"-->
  246. <!-- :header-align="item.headerAlign"-->
  247. <!-- :show-overflow-tooltip="item.showOverflowTooltip"-->
  248. <!-- :align="item.align"-->
  249. <!-- :fixed="item.fixed == ''?false:item.fixed"-->
  250. <!-- :min-width="item.columnWidth"-->
  251. <!-- :label="item.columnLabel">-->
  252. <!-- <template slot-scope="scope">-->
  253. <!-- <span v-if="!item.columnHidden">{{scope.row[item.columnProp]}}</span>-->
  254. <!-- <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>-->
  255. <!-- </template>-->
  256. <!-- </el-table-column>-->
  257. <el-table-column label="PLM物料编码" header-align="center">
  258. <el-table-column
  259. prop="testPartNo"
  260. header-align="center"
  261. align="left"
  262. min-width="120"
  263. label="PLM Part No.">
  264. </el-table-column>
  265. </el-table-column>
  266. <el-table-column label="IFS物料编码" header-align="center">
  267. <el-table-column
  268. prop="partNo"
  269. header-align="center"
  270. align="left"
  271. min-width="120"
  272. label="IFS Part No.">
  273. </el-table-column>
  274. </el-table-column>
  275. <el-table-column label="物料名称" header-align="center">
  276. <el-table-column
  277. prop="partDesc"
  278. header-align="center"
  279. align="left"
  280. min-width="180"
  281. label="Part Desc.">
  282. </el-table-column>
  283. </el-table-column>
  284. <el-table-column label="图纸编码" header-align="center">
  285. <el-table-column
  286. prop="drawingNo"
  287. header-align="center"
  288. align="center"
  289. min-width="100"
  290. label="Drawing No.">
  291. </el-table-column>
  292. </el-table-column>
  293. <el-table-column label="图稿编码" header-align="center">
  294. <el-table-column
  295. prop="draftNo"
  296. header-align="center"
  297. align="center"
  298. min-width="100"
  299. label="Proof No.">
  300. </el-table-column>
  301. </el-table-column>
  302. <el-table-column label="新IFS料号" header-align="center">
  303. <el-table-column
  304. prop=""
  305. header-align="center"
  306. align="center"
  307. min-width="170"
  308. label="New IFS Part No.">
  309. <template slot-scope="scope">
  310. <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>
  311. <el-button type="primary" @click="choosePartNo(scope.row)" style="width:18%;padding: 3px 7px">·&nbsp;·&nbsp;·</el-button>
  312. </template>
  313. </el-table-column>
  314. </el-table-column>
  315. <el-table-column label="新图纸编码" header-align="center">
  316. <el-table-column
  317. prop=""
  318. header-align="center"
  319. align="center"
  320. min-width="110"
  321. label="New Drawing No.">
  322. <template slot-scope="scope">
  323. <el-input :ref="`newDrawingNo${scope.$index}`" v-model="scope.row.newDrawingNo" @keyup.enter.native="focusNextInput(scope.$index, 'newDrawingNo')" style="width:98%"></el-input>
  324. </template>
  325. </el-table-column>
  326. </el-table-column>
  327. <el-table-column label="新图稿编码" header-align="center">
  328. <el-table-column
  329. prop=""
  330. header-align="center"
  331. align="center"
  332. min-width="100"
  333. label="New Proof No.">
  334. <template slot-scope="scope">
  335. <el-input :ref="`newDraftNo${scope.$index}`" v-model="scope.row.newDraftNo" @keyup.enter.native="focusNextInput(scope.$index, 'newDraftNo')" style="width:98%"></el-input>
  336. </template>
  337. </el-table-column>
  338. </el-table-column>
  339. <el-table-column
  340. fixed="right"
  341. header-align="center"
  342. align="center"
  343. width="60"
  344. label="操作">
  345. <template slot-scope="scope">
  346. <el-link style="cursor: pointer" @click="deleteChooseDataModal(scope.row)">删除</el-link>
  347. </template>
  348. </el-table-column>
  349. </el-table>
  350. </div>
  351. </el-form>
  352. </div>
  353. </el-tab-pane>
  354. <el-tab-pane label="库存成本影响" name="inventoryCostImpact">
  355. <div style="height: 705px">
  356. <el-form :inline="true" label-position="top" :model="costImpactData" style="margin-top: -5px;">
  357. <el-form-item style="margin-top: 7px;width: 155px">
  358. <el-checkbox v-model="costImpactData.productionProductFlag" true-label="Y">在制品<br>On-line product</el-checkbox>
  359. </el-form-item>
  360. <el-form-item style="margin-left: 50px" label="数量/Qty.">
  361. <el-input class="inlineNumber numInput" v-model="costImpactData.productionProductNumber" :disabled="costImpactData.productionProductFlag !== 'Y'" type="number" style="width: 100px"></el-input>
  362. </el-form-item>
  363. <el-form-item label="处理意见/Disposition">
  364. <!-- <dict-data-select v-if="modalFlag" v-model="costImpactData.productionProductOpinions" :disabled="costImpactData.productionProductFlag !== 'Y'" style="width: 200px" dict-type="change_production_product_opinions"></dict-data-select>-->
  365. <el-input v-if="modalFlag" v-model="costImpactData.productionProductOpinions" :disabled="costImpactData.productionProductFlag !== 'Y'" style="width: 200px"></el-input>
  366. </el-form-item>
  367. <el-form-item label="报废金额/Scrap Amount">
  368. <el-input class="inlineNumber numInput" v-model="costImpactData.productionProductScrapAmount" :disabled="costImpactData.productionProductFlag !== 'Y'" @input="handleInput(costImpactData.productionProductScrapAmount,1)" type="number" style="width: 140px"></el-input>
  369. </el-form-item>
  370. <!-- <el-form-item label=" " style="margin-left: -10px">-->
  371. <!-- <el-input v-model="costImpactData.productionProductRemark" :disabled="costImpactData.productionProductFlag !== 'Y'" style="width: 300px"></el-input>-->
  372. <!-- </el-form-item>-->
  373. <el-form-item>
  374. <span style="cursor: pointer" slot="label" @click="getBaseList(103, 3)"><a herf="#">执行人/Executor</a></span>
  375. <el-input v-model="costImpactData.productionProductExecutorName" :disabled="costImpactData.productionProductFlag !== 'Y'" style="width: 130px"></el-input>
  376. </el-form-item>
  377. </el-form>
  378. <el-form :inline="true" label-position="top" :model="costImpactData" style="margin-top: 10px;">
  379. <el-form-item style="margin-top: 7px;width: 155px">
  380. <el-checkbox v-model="costImpactData.inventoryProductFlag" true-label="Y">成品库存<br>FG Stock</el-checkbox>
  381. </el-form-item>
  382. <el-form-item style="margin-left: 50px" label="数量/Qty.">
  383. <el-input class="inlineNumber numInput" v-model="costImpactData.inventoryProductNumber" :disabled="costImpactData.inventoryProductFlag !== 'Y'" type="number" style="width: 100px"></el-input>
  384. </el-form-item>
  385. <el-form-item label="处理意见/Disposition">
  386. <!-- <dict-data-select v-if="modalFlag" v-model="costImpactData.inventoryProductOpinions" :disabled="costImpactData.inventoryProductFlag !== 'Y'" style="width: 200px" dict-type="change_inventory_product_opinions"></dict-data-select>-->
  387. <el-input v-if="modalFlag" v-model="costImpactData.inventoryProductOpinions" :disabled="costImpactData.inventoryProductFlag !== 'Y'" style="width: 200px"></el-input>
  388. </el-form-item>
  389. <el-form-item label="报废金额/Scrap Amount">
  390. <el-input class="inlineNumber numInput" v-model="costImpactData.inventoryProductScrapAmount" :disabled="costImpactData.inventoryProductFlag !== 'Y'" @input="handleInput(costImpactData.inventoryProductScrapAmount,2)" type="number" style="width: 140px"></el-input>
  391. </el-form-item>
  392. <!-- <el-form-item label=" " style="margin-left: -10px">-->
  393. <!-- <el-input v-model="costImpactData.inventoryProductRemark" :disabled="costImpactData.inventoryProductFlag !== 'Y'" style="width: 300px"></el-input>-->
  394. <!-- </el-form-item>-->
  395. <el-form-item>
  396. <span style="cursor: pointer" slot="label" @click="getBaseList(103, 4)"><a herf="#">执行人/Executor</a></span>
  397. <el-input v-model="costImpactData.inventoryProductExecutorName" :disabled="costImpactData.inventoryProductFlag !== 'Y'" style="width: 130px"></el-input>
  398. </el-form-item>
  399. </el-form>
  400. <el-form :inline="true" label-position="top" :model="costImpactData" style="margin-top: 10px;">
  401. <el-form-item style="margin-top: 7px;width: 155px">
  402. <el-checkbox v-model="costImpactData.newOrderFlag" true-label="Y">新订单<br>New Order</el-checkbox>
  403. </el-form-item>
  404. <el-form-item style="margin-left: 50px" label="数量/Qty.">
  405. <el-input class="inlineNumber numInput" v-model="costImpactData.newOrderNumber" :disabled="costImpactData.newOrderFlag !== 'Y'" type="number" style="width: 100px"></el-input>
  406. </el-form-item>
  407. </el-form>
  408. <el-form :inline="true" label-position="top" :model="costImpactData" style="margin-top: 10px;">
  409. <el-form-item style="margin-top: 7px;width: 155px">
  410. <el-checkbox v-model="costImpactData.affectedFlag" true-label="Y">影响的原材料及其库存量<br>Raw material influencing and stock</el-checkbox>
  411. </el-form-item>
  412. <el-form-item style="margin-left: 50px" label="数量/Qty.">
  413. <el-input class="inlineNumber numInput" v-model="costImpactData.affectedNumber" :disabled="costImpactData.affectedFlag !== 'Y'" type="number" style="width: 100px"></el-input>
  414. </el-form-item>
  415. <el-form-item label="处理意见/Disposition">
  416. <!-- <dict-data-select v-if="modalFlag" v-model="costImpactData.affectedOpinions" :disabled="costImpactData.affectedFlag !== 'Y'" style="width: 200px" dict-type="change_affected_opinions"></dict-data-select>-->
  417. <el-input v-if="modalFlag" v-model="costImpactData.affectedOpinions" :disabled="costImpactData.affectedFlag !== 'Y'" style="width: 200px"></el-input>
  418. </el-form-item>
  419. <el-form-item label="报废金额/Scrap Amount">
  420. <el-input class="inlineNumber numInput" v-model="costImpactData.affectedScrapAmount" :disabled="costImpactData.affectedFlag !== 'Y'" @input="handleInput(costImpactData.affectedScrapAmount,3)" type="number" style="width: 140px"></el-input>
  421. </el-form-item>
  422. <!-- <el-form-item label=" " style="margin-left: -10px">-->
  423. <!-- <el-input v-model="costImpactData.affectedRemark" :disabled="costImpactData.affectedFlag !== 'Y'" style="width: 300px"></el-input>-->
  424. <!-- </el-form-item>-->
  425. <el-form-item>
  426. <span style="cursor: pointer" slot="label" @click="getBaseList(103, 5)"><a herf="#">执行人/Executor</a></span>
  427. <el-input v-model="costImpactData.affectedExecutorName" :disabled="costImpactData.affectedFlag !== 'Y'" style="width: 130px"></el-input>
  428. </el-form-item>
  429. </el-form>
  430. <el-form :inline="true" label-position="top" :model="costImpactData" style="margin-top: 10px;">
  431. <el-form-item label="ECN变更总成本/Total ECN Cost">
  432. <el-input class="inlineNumber numInput" v-model="totalCost" readonly type="number" style="width: 205px"></el-input>
  433. </el-form-item>
  434. <el-form-item label="备注/Remark">
  435. <el-input v-model="costImpactData.remark" style="width: 611px"></el-input>
  436. </el-form-item>
  437. </el-form>
  438. </div>
  439. </el-tab-pane>
  440. <el-tab-pane label="TP&执行信息" name="actionInformation">
  441. <div style="height: 705px">
  442. <el-button type="primary" @click="chooseFeasibilityAssessmentModel">选择评估信息</el-button>
  443. <div class="rq">
  444. <el-table
  445. :data="chooseItemList2"
  446. height="230px"
  447. border
  448. style="width: 100%">
  449. <el-table-column
  450. v-for="(item,index) in columnChooseItemList2" :key="index"
  451. :sortable="item.columnSortable"
  452. :prop="item.columnProp"
  453. :header-align="item.headerAlign"
  454. :show-overflow-tooltip="item.showOverflowTooltip"
  455. :align="item.align"
  456. :fixed="item.fixed == ''?false:item.fixed"
  457. :min-width="item.columnWidth"
  458. :label="item.columnLabel">
  459. <template slot-scope="scope">
  460. <span v-if="!item.columnHidden">{{scope.row[item.columnProp]}}</span>
  461. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
  462. </template>
  463. </el-table-column>
  464. <el-table-column
  465. prop=""
  466. header-align="center"
  467. align="center"
  468. min-width="60"
  469. label="可选值">
  470. <template slot-scope="scope">
  471. <el-select v-model="scope.row.chooseValue" placeholder="请选择">
  472. <el-option v-for="item in scope.row.availableValueList" :key="item.availableValue" :label="item.availableValue" :value="item.availableValue"></el-option>
  473. </el-select>
  474. </template>
  475. </el-table-column>
  476. <el-table-column
  477. prop=""
  478. header-align="center"
  479. align="center"
  480. min-width="100"
  481. label="备注">
  482. <template slot-scope="scope">
  483. <el-input v-model="scope.row.itemRemark" style="width:98%"></el-input>
  484. </template>
  485. </el-table-column>
  486. </el-table>
  487. </div>
  488. <div style="text-align: center;font-size: 11px;margin-top: 5px">
  489. <span> --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- </span>
  490. </div>
  491. <el-form :inline="true" label-position="top" :model="executionInfoData">
  492. <el-form-item label="原菲林编号/Original Film No.">
  493. <el-input v-model="executionInfoData.originalFilmNo" style="width: 226px"></el-input>
  494. </el-form-item>
  495. <el-form-item label="原碑刀编号/Original Cutter No.">
  496. <el-input v-model="executionInfoData.originalDieCuttingRuleNo" style="width: 226px"></el-input>
  497. </el-form-item>
  498. <el-form-item label="原网板/印版编号/Original Plate No.">
  499. <el-input v-model="executionInfoData.originalStencilNo" style="width: 226px"></el-input>
  500. </el-form-item>
  501. <el-form-item label="ECN执行日期/Exec Date">
  502. <el-date-picker style="width: 135px" v-model="executionInfoData.executionDate" type="date" value-format="yyyy-MM-dd" placeholder="请选择日期" :editable=false></el-date-picker>
  503. </el-form-item>
  504. </el-form>
  505. <el-form :inline="true" label-position="top" :model="executionInfoData" style="margin-top: -5px;">
  506. <el-form-item label="新菲林编号/New Film No.">
  507. <el-input v-model="executionInfoData.newFilmNo" style="width: 226px"></el-input>
  508. </el-form-item>
  509. <el-form-item label="新碑刀编号/New Cutter No.">
  510. <el-input v-model="executionInfoData.newDieCuttingRuleNo" style="width: 226px"></el-input>
  511. </el-form-item>
  512. <el-form-item label="新网板/印版编号/New Plate No.">
  513. <el-input v-model="executionInfoData.newStencilNo" style="width: 226px"></el-input>
  514. </el-form-item>
  515. </el-form>
  516. <div style="text-align: center ;font-size: 11px">
  517. <span> --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- </span>
  518. </div>
  519. <el-button type="primary" @click="chooseModel">选择执行信息</el-button>
  520. <div class="rq">
  521. <el-table
  522. :data="chooseItemList"
  523. height="285px"
  524. border
  525. style="width: 100%">
  526. <el-table-column
  527. v-for="(item,index) in columnChooseItemList" :key="index"
  528. :sortable="item.columnSortable"
  529. :prop="item.columnProp"
  530. :header-align="item.headerAlign"
  531. :show-overflow-tooltip="item.showOverflowTooltip"
  532. :align="item.align"
  533. :fixed="item.fixed == ''?false:item.fixed"
  534. :min-width="item.columnWidth"
  535. :label="item.columnLabel">
  536. <template slot-scope="scope">
  537. <span v-if="!item.columnHidden">{{scope.row[item.columnProp]}}</span>
  538. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
  539. </template>
  540. </el-table-column>
  541. <el-table-column
  542. prop=""
  543. header-align="center"
  544. align="center"
  545. min-width="130"
  546. label="执行人">
  547. <template slot-scope="scope">
  548. <el-input @input="(val)=>executorInput(scope.row, val)" v-model="scope.row.executor" style="width:77%"></el-input>
  549. <el-button type="primary" @click="chooseExecutor(scope.row)" style="width:18%;padding: 3px 7px">·&nbsp;·&nbsp;·</el-button>
  550. </template>
  551. </el-table-column>
  552. <el-table-column
  553. prop=""
  554. header-align="center"
  555. align="center"
  556. min-width="150"
  557. label="备注">
  558. <template slot-scope="scope">
  559. <el-input v-model="scope.row.itemRemark" style="height: 11px;width:98%"></el-input>
  560. </template>
  561. </el-table-column>
  562. </el-table>
  563. </div>
  564. </div>
  565. </el-tab-pane>
  566. <el-tab-pane label="会签信息" name="countersignature">
  567. <div style="height: 705px">
  568. <el-form :inline="true" label-position="top" style="margin-top: -19px">
  569. <el-form-item label=" ">
  570. <el-button type="primary" @click="chooseCSModel">选择会签信息</el-button>
  571. </el-form-item>
  572. <el-form-item label="印刷方式/Print Type">
  573. <dict-data-select v-if="modalFlag" v-model="modalData.printing" disabled style="width: 198px" dict-type="change_printing"></dict-data-select>
  574. </el-form-item>
  575. </el-form>
  576. <div class="rq">
  577. <el-table
  578. :data="chooseCSItemList"
  579. height="675px"
  580. border
  581. style="width: 100%">
  582. <el-table-column
  583. v-for="(item,index) in columnChooseCSItemList" :key="index"
  584. :sortable="item.columnSortable"
  585. :prop="item.columnProp"
  586. :header-align="item.headerAlign"
  587. :show-overflow-tooltip="item.showOverflowTooltip"
  588. :align="item.align"
  589. :fixed="item.fixed == ''?false:item.fixed"
  590. :min-width="item.columnWidth"
  591. :label="item.columnLabel">
  592. <template slot-scope="scope">
  593. <span v-if="!item.columnHidden">{{scope.row[item.columnProp]}}</span>
  594. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
  595. </template>
  596. </el-table-column>
  597. <el-table-column
  598. prop=""
  599. header-align="center"
  600. align="center"
  601. min-width="200"
  602. label="备注">
  603. <template slot-scope="scope">
  604. <el-input v-model="scope.row.itemRemark" style="height: 11px;width:98%"></el-input>
  605. </template>
  606. </el-table-column>
  607. </el-table>
  608. </div>
  609. </div>
  610. </el-tab-pane>
  611. </el-tabs>
  612. <el-footer style="height:35px;margin-top: 15px;text-align:center">
  613. <el-button type="primary" :loading="saveDataLoading" @click="saveData(1)">应用</el-button>
  614. <el-button type="primary" :loading="saveDataLoading" @click="closeModalFlag">关闭</el-button>
  615. <el-button type="primary" :loading="saveDataLoading" @click="saveData(2)">保存并跳转</el-button>
  616. </el-footer>
  617. </el-dialog>
  618. <!-- ECN种类模态框 -->
  619. <el-dialog title="ECN种类" :close-on-click-modal="false" v-drag :visible.sync="EcnTypeModalFlag" width="900px">
  620. <el-form ref="dataForm" label-position="right">
  621. <el-row v-for="(item, index) in form" :key="index" style="padding-top: 10px;" :style="{borderTop:index === 0?'':'1px solid #ccc'}">
  622. <el-col :span="8">
  623. <el-form-item :prop="'input.'+index+'.value'">
  624. <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>
  625. </el-form-item>
  626. </el-col>
  627. <el-col :span="16">
  628. <div v-for="i in item.list">
  629. <el-form-item :prop="'input.'+index+'.value'">
  630. <el-checkbox v-model="i.flag" @change="(val)=>ecnTypeDetailChange(val,index)" true-label="Y">{{i.value}}</el-checkbox>
  631. </el-form-item>
  632. </div>
  633. </el-col>
  634. </el-row>
  635. </el-form>
  636. <el-footer style="height:30px;text-align:center">
  637. <el-button type="primary" @click="saveEcnTypeData">保存</el-button>
  638. <el-button type="primary" @click="EcnTypeModalFlag = false">关闭</el-button>
  639. </el-footer>
  640. </el-dialog>
  641. <!-- ECN模板属性清单 -->
  642. <el-dialog title="属性清单" :close-on-click-modal="false" v-drag :visible.sync="chooseModelFlag" width="820px">
  643. <div class="rq">
  644. <el-form :inline="true" label-position="top" :model="chooseModelData">
  645. <el-form-item :label="'模板'">
  646. <el-select v-model="chooseModelData.codeNo" placeholder="请选择" style="width: 120px">
  647. <el-option
  648. v-for = "i in modelList"
  649. :key = "i.codeNo"
  650. :label = "i.codeDesc"
  651. :value = "i.codeNo">
  652. </el-option>
  653. </el-select>
  654. </el-form-item>
  655. <el-form-item label="属性编码">
  656. <el-input v-model="chooseModelData.itemNo" clearable style="width: 120px"></el-input>
  657. </el-form-item>
  658. <el-form-item label="属性名称">
  659. <el-input v-model="chooseModelData.itemDesc" clearable style="width: 120px"></el-input>
  660. </el-form-item>
  661. <el-form-item :label="' '">
  662. <el-button type="primary" @click="searchItemList()">查询</el-button>
  663. </el-form-item>
  664. </el-form>
  665. <el-table
  666. :height="300"
  667. :data="itemList"
  668. ref="itemTable"
  669. @row-click="itemClickRow"
  670. @selection-change="selectionItem"
  671. border
  672. style="width: 100%;">
  673. <el-table-column
  674. type="selection"
  675. header-align="center"
  676. align="center"
  677. width="50">
  678. </el-table-column>
  679. <el-table-column
  680. v-for="(item,index) in columnItemList" :key="index"
  681. :sortable="item.columnSortable"
  682. :prop="item.columnProp"
  683. :header-align="item.headerAlign"
  684. :show-overflow-tooltip="item.showOverflowTooltip"
  685. :align="item.align"
  686. :fixed="item.fixed==''?false:item.fixed"
  687. :min-width="item.columnWidth"
  688. :label="item.columnLabel">
  689. <template slot-scope="scope">
  690. <span v-if="!item.columnHidden">{{ scope.row[item.columnProp] }}</span>
  691. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
  692. </template>
  693. </el-table-column>
  694. </el-table>
  695. </div>
  696. <el-footer style="height:40px;margin-top: 20px;text-align:center">
  697. <el-button type="primary" @click="confirmItem">确认</el-button>
  698. <el-button type="primary" @click="chooseModelFlag = false">关闭</el-button>
  699. </el-footer>
  700. </el-dialog>
  701. <!-- ECN模板属性清单 -->
  702. <el-dialog title="属性清单" :close-on-click-modal="false" v-drag :visible.sync="chooseModelFlag2" width="820px">
  703. <div class="rq">
  704. <el-form :inline="true" label-position="top" :model="chooseModelData2">
  705. <el-form-item :label="'模板'">
  706. <el-select v-model="chooseModelData2.codeNo" placeholder="请选择" style="width: 120px">
  707. <el-option
  708. v-for = "i in modelList2"
  709. :key = "i.codeNo"
  710. :label = "i.codeDesc"
  711. :value = "i.codeNo">
  712. </el-option>
  713. </el-select>
  714. </el-form-item>
  715. <el-form-item label="属性编码">
  716. <el-input v-model="chooseModelData2.itemNo" clearable style="width: 120px"></el-input>
  717. </el-form-item>
  718. <el-form-item label="属性名称">
  719. <el-input v-model="chooseModelData2.itemDesc" clearable style="width: 120px"></el-input>
  720. </el-form-item>
  721. <el-form-item :label="' '">
  722. <el-button type="primary" @click="searchItemList2">查询</el-button>
  723. </el-form-item>
  724. </el-form>
  725. <el-table
  726. :height="300"
  727. :data="itemList2"
  728. ref="itemTable2"
  729. @row-click="itemClickRow2"
  730. @selection-change="selectionItem2"
  731. border
  732. style="width: 100%;">
  733. <el-table-column
  734. type="selection"
  735. header-align="center"
  736. align="center"
  737. width="50">
  738. </el-table-column>
  739. <el-table-column
  740. v-for="(item,index) in columnItemList2" :key="index"
  741. :sortable="item.columnSortable"
  742. :prop="item.columnProp"
  743. :header-align="item.headerAlign"
  744. :show-overflow-tooltip="item.showOverflowTooltip"
  745. :align="item.align"
  746. :fixed="item.fixed==''?false:item.fixed"
  747. :min-width="item.columnWidth"
  748. :label="item.columnLabel">
  749. <template slot-scope="scope">
  750. <span v-if="!item.columnHidden">{{ scope.row[item.columnProp] }}</span>
  751. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
  752. </template>
  753. </el-table-column>
  754. </el-table>
  755. </div>
  756. <el-footer style="height:40px;margin-top: 20px;text-align:center">
  757. <el-button type="primary" @click="confirmItem2">确认</el-button>
  758. <el-button type="primary" @click="chooseModelFlag2 = false">关闭</el-button>
  759. </el-footer>
  760. </el-dialog>
  761. <!-- 会签模板属性清单 -->
  762. <el-dialog title="属性清单" :close-on-click-modal="false" v-drag :visible.sync="chooseCSModelFlag" width="820px">
  763. <div class="rq">
  764. <el-form :inline="true" label-position="top" :model="chooseCSModelData">
  765. <el-form-item :label="'模板'">
  766. <el-select value="roleName" v-model="chooseCSModelData.codeNo" placeholder="请选择" style="width: 120px">
  767. <el-option
  768. v-for = "i in modelCSList"
  769. :key = "i.codeNo"
  770. :label = "i.codeDesc"
  771. :value = "i.codeNo">
  772. </el-option>
  773. </el-select>
  774. </el-form-item>
  775. <el-form-item label="属性编码">
  776. <el-input v-model="chooseCSModelData.itemNo" clearable style="width: 120px"></el-input>
  777. </el-form-item>
  778. <el-form-item label="属性名称">
  779. <el-input v-model="chooseCSModelData.itemDesc" clearable style="width: 120px"></el-input>
  780. </el-form-item>
  781. <el-form-item :label="' '">
  782. <el-button type="primary" @click="searchCSItemList()">查询</el-button>
  783. </el-form-item>
  784. </el-form>
  785. <el-table
  786. :height="300"
  787. :data="itemCSList"
  788. ref="itemCSTable"
  789. @row-click="itemCSClickRow"
  790. @selection-change="selectionCSItem"
  791. border
  792. style="width: 100%;">
  793. <el-table-column
  794. type="selection"
  795. header-align="center"
  796. align="center"
  797. width="50">
  798. </el-table-column>
  799. <el-table-column
  800. v-for="(item,index) in columnCSItemList" :key="index"
  801. :sortable="item.columnSortable"
  802. :prop="item.columnProp"
  803. :header-align="item.headerAlign"
  804. :show-overflow-tooltip="item.showOverflowTooltip"
  805. :align="item.align"
  806. :fixed="item.fixed==''?false:item.fixed"
  807. :min-width="item.columnWidth"
  808. :label="item.columnLabel">
  809. <template slot-scope="scope">
  810. <span v-if="!item.columnHidden">{{ scope.row[item.columnProp] }}</span>
  811. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
  812. </template>
  813. </el-table-column>
  814. </el-table>
  815. </div>
  816. <el-footer style="height:40px;margin-top: 20px;text-align:center">
  817. <el-button type="primary" @click="confirmCSItem">确认</el-button>
  818. <el-button type="primary" @click="chooseCSModelFlag = false">关闭</el-button>
  819. </el-footer>
  820. </el-dialog>
  821. <!-- 可选技术参数卡清单 -->
  822. <el-dialog title="技术参数卡清单" :close-on-click-modal="false" v-drag :visible.sync="addDetailModal" width="881px">
  823. <div class="rq">
  824. <el-form :inline="true" label-position="top" :model="searchData2">
  825. <el-form-item :label="'BU'">
  826. <el-select v-model="searchData2.buNo" placeholder="请选择" clearable style="width: 70px">
  827. <el-option
  828. v-for = "i in buList"
  829. :key = "i.buNo"
  830. :label = "i.buNo"
  831. :value = "i.buNo">
  832. </el-option>
  833. </el-select>
  834. </el-form-item>
  835. <el-form-item label="技术参数卡编码">
  836. <el-input v-model="searchData2.codeNo" clearable style="width: 120px"></el-input>
  837. </el-form-item>
  838. <el-form-item label="PLM物料编码">
  839. <el-input v-model="searchData2.testPartNo" clearable style="width: 120px"/>
  840. </el-form-item>
  841. <el-form-item label="IFS物料编码">
  842. <el-input v-model="searchData2.partNo" clearable style="width: 120px"/>
  843. </el-form-item>
  844. <el-form-item label="客户编码">
  845. <el-input v-model="searchData2.customerId" clearable style="width: 120px"/>
  846. </el-form-item>
  847. <el-form-item label="项目号">
  848. <el-input v-model="searchData2.projectId" clearable style="width: 120px"/>
  849. </el-form-item>
  850. <el-form-item :label="' '">
  851. <el-button type="primary" @click="addChangeDetail()">查询</el-button>
  852. </el-form-item>
  853. </el-form>
  854. <el-table
  855. :height="300"
  856. :data="dataList2"
  857. @selection-change="selectionData2"
  858. border
  859. style="width: 100%;">
  860. <el-table-column
  861. type="selection"
  862. header-align="center"
  863. align="center"
  864. width="50">
  865. </el-table-column>
  866. <el-table-column
  867. v-for="(item,index) in columnList2" :key="index"
  868. :sortable="item.columnSortable"
  869. :prop="item.columnProp"
  870. :header-align="item.headerAlign"
  871. :show-overflow-tooltip="item.showOverflowTooltip"
  872. :align="item.align"
  873. :fixed="item.fixed==''?false:item.fixed"
  874. :min-width="item.columnWidth"
  875. :label="item.columnLabel">
  876. <template slot-scope="scope">
  877. <span v-if="!item.columnHidden">{{ scope.row[item.columnProp] }}</span>
  878. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
  879. </template>
  880. </el-table-column>
  881. </el-table>
  882. </div>
  883. <el-footer style="height:40px;margin-top: 20px;text-align:center">
  884. <el-button type="primary" @click="addDetail">确认</el-button>
  885. <el-button type="primary" @click="addDetailModal = false">关闭</el-button>
  886. </el-footer>
  887. </el-dialog>
  888. <!-- 物料模态框 -->
  889. <el-dialog title="物料清单" :close-on-click-modal="false" v-drag :visible.sync="partModelFlag" width="940px">
  890. <div class="rq">
  891. <el-form :inline="true" label-position="top" :model="partData">
  892. <el-form-item :label="'IFS物料编码'">
  893. <el-input v-model="partData.finalPartNo" clearable style="width: 120px"></el-input>
  894. </el-form-item>
  895. <el-form-item :label="'PLM物料编码'">
  896. <el-input v-model="partData.testPartNo" clearable style="width: 120px"></el-input>
  897. </el-form-item>
  898. <el-form-item :label="'客户料号'">
  899. <el-input v-model="partData.customerPartNo" clearable style="width: 120px"></el-input>
  900. </el-form-item>
  901. <el-form-item :label="'物料名称'">
  902. <el-input v-model="partData.partDesc" clearable style="width: 120px"></el-input>
  903. </el-form-item>
  904. <el-form-item :label="' '">
  905. <el-button type="primary" @click="queryPartList()">查询</el-button>
  906. </el-form-item>
  907. </el-form>
  908. <el-table
  909. :height="300"
  910. :data="partList"
  911. @row-dblclick="getRowData"
  912. border
  913. style="width: 100%;">
  914. <el-table-column
  915. v-for="(item,index) in partColumnList" :key="index"
  916. :sortable="item.columnSortable"
  917. :prop="item.columnProp"
  918. :header-align="item.headerAlign"
  919. :show-overflow-tooltip="item.showOverflowTooltip"
  920. :align="item.align"
  921. :fixed="item.fixed==''?false:item.fixed"
  922. :min-width="item.columnWidth"
  923. :label="item.columnLabel">
  924. <template slot-scope="scope">
  925. <span v-if="!item.columnHidden">{{scope.row[item.columnProp]}}</span>
  926. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
  927. </template>
  928. </el-table-column>
  929. </el-table>
  930. <!-- 分页插件 -->
  931. <el-pagination
  932. style="margin-top: 5px"
  933. @size-change="sizeChangeHandle2"
  934. @current-change="currentChangeHandle2"
  935. :current-page="pageIndex2"
  936. :page-sizes="[20, 50, 100, 200, 500]"
  937. :page-size="pageSize2"
  938. :total="totalPage2"
  939. layout="total, sizes, prev, pager, next, jumper">
  940. </el-pagination>
  941. </div>
  942. <el-footer style="height:35px;margin-top: 10px;text-align:center">
  943. <el-button type="primary" @click="partModelFlag=false">关闭</el-button>
  944. </el-footer>
  945. </el-dialog>
  946. <el-dialog title="人员选择" @open="openDelegateAccess" @close="closeDelegateAccess" v-drag :visible.sync="delegateAccessVisible" width="40vw">
  947. <el-form :inline="true" label-position="top" :model="changeDelegateAccess">
  948. <el-form-item label="编码">
  949. <el-input v-model="changeDelegateAccess.delegateAccess" clearable style="width: 120px"></el-input>
  950. </el-form-item>
  951. <el-form-item label="名称">
  952. <el-input v-model="changeDelegateAccess.delegateAccessName" clearable style="width: 120px"></el-input>
  953. </el-form-item>
  954. <el-form-item label=" ">
  955. <el-button type="primary" @click="searchDelegateAccessByUser()">查询</el-button>
  956. </el-form-item>
  957. </el-form>
  958. <el-table
  959. v-if="delegateAccessVisible"
  960. :height="300"
  961. :data="baseDelegateAccessList"
  962. @selection-change="handleSelectionChange"
  963. @row-click="(row,column, event)=>handleTableClick(row,column, event,'delegateAccesstTable')"
  964. ref="delegateAccesstTable"
  965. border row-key="delegateAccess"
  966. style="width: 100%;">
  967. <el-table-column
  968. type="selection"
  969. header-align="center"
  970. align="center"
  971. :reserve-selection="true"
  972. width="50">
  973. </el-table-column>
  974. <el-table-column label="编码" property="delegateAccess" align="left" header-align="center"/>
  975. <el-table-column label="名称" property="delegateAccessName" align="left" header-align="center"/>
  976. </el-table>
  977. <el-footer style="height:40px;margin-top: 20px;text-align:center">
  978. <el-button type="primary" @click="confirmDelegateAccess">确定</el-button>
  979. <el-button type="primary" @click="delegateAccessVisible=false">关闭</el-button>
  980. </el-footer>
  981. </el-dialog>
  982. <ChooseList ref="baseList" @getBaseData="getBaseData"></ChooseList>
  983. <upload-file-list ref="changeRef" v-if="modalFlag" folder="change" title="工程变更文件上传" :label="'变更单号'" :file-list.sync="fileData.file" :no="modalData.changeNo" :upload-dialog.sync="uploadDialog" path="/upload/test"></upload-file-list>
  984. <filter-search :visible.sync="filterVisible" @search="queryByAnyField"></filter-search>
  985. </div>
  986. </template>
  987. <script>
  988. import {
  989. technicalSpecificationSearch, // 获取技术参数卡列表
  990. technicalSpecificationSearch2, // 获取技术参数卡列表
  991. getDepartmentByUserName, // 根据用户编码获得用户部门
  992. changeRequestSave, // 新增变更申请
  993. changeRequestUpdate, // 新增变更申请
  994. changeRequestTempSave, // 新增变更单(临时)
  995. deleteChangeFiles, // 根据变更单号删除文件,
  996. costImpactSave, // 新增库存成本影响
  997. executionSave, // 新增执行信息
  998. getEcnTypeData, // 查询ECN种类数据
  999. getEcnModel, // 查询ECN的模板
  1000. getItemList, // 查询模板属性
  1001. countersignatureSave, // 新增会签信息
  1002. getBuBySite, // 根据site查bu
  1003. choosePartNoList, // 根据视图查物料计划
  1004. deleteTempChangeInfo, // 删除临时变更数据
  1005. updateShowInQueryFlag, // 更新异常数据
  1006. } from "@/api/changeManagement/changeManagement.js"
  1007. import {getChooselistData, verifyData} from "@/api/chooselist/chooselist.js"
  1008. import { searchDelegateAccessByUser} from "@/api/proofing/proofingInformation.js"
  1009. import ChooseList from '@/views/modules/common/Chooselist'
  1010. import DictDataSelect from '../sys/dict-data-select.vue'
  1011. import UploadFileList from "../common/uploadFileList.vue"
  1012. import FilterSearch from "../../common/filterSearch.vue";
  1013. import {routingAllInfoSearchAny} from "../../../api/part/routingManagement";
  1014. import {technicalSpecificationSearchAny} from "../../../api/changeManagement/changeManagement";
  1015. export default {
  1016. components: {
  1017. FilterSearch,
  1018. UploadFileList,
  1019. DictDataSelect,
  1020. ChooseList
  1021. },
  1022. watch: {
  1023. modalData: {
  1024. deep: true,
  1025. handler: function (newV, oldV) {
  1026. if (this.modalData.tpEngineerId === '' || this.modalData.tpEngineerId == null) {
  1027. this.modalData.tpEngineerName = ''
  1028. }
  1029. if (this.modalData.industrialEngineerId === '' || this.modalData.industrialEngineerId == null) {
  1030. this.modalData.industrialEngineerName = ''
  1031. }
  1032. if (this.modalData.cqcOperatorId === '' || this.modalData.cqcOperatorId == null) {
  1033. this.modalData.cqcOperatorName = ''
  1034. }
  1035. if (this.modalData.faiOperatorId === '' || this.modalData.faiOperatorId == null) {
  1036. this.modalData.faiOperatorName = ''
  1037. }
  1038. }
  1039. },
  1040. 'costImpactData.productionProductFlag': function(newVal) {
  1041. if (newVal !== 'Y') {
  1042. this.costImpactData.productionProductNumber = ''
  1043. this.costImpactData.productionProductOpinions = ''
  1044. this.costImpactData.productionProductScrapAmount = 0
  1045. this.costImpactData.productionProductExecutor = ''
  1046. this.costImpactData.productionProductExecutorName = ''
  1047. }
  1048. },
  1049. 'costImpactData.inventoryProductFlag': function(newVal) {
  1050. if (newVal !== 'Y') {
  1051. this.costImpactData.inventoryProductNumber = ''
  1052. this.costImpactData.inventoryProductOpinions = ''
  1053. this.costImpactData.inventoryProductScrapAmount = 0
  1054. this.costImpactData.inventoryProductExecutor = ''
  1055. this.costImpactData.inventoryProductExecutorName = ''
  1056. }
  1057. },
  1058. 'costImpactData.newOrderFlag': function(newVal) {
  1059. if (newVal !== 'Y') {
  1060. this.costImpactData.newOrderNumber = ''
  1061. }
  1062. },
  1063. 'costImpactData.affectedFlag': function(newVal) {
  1064. if (newVal !== 'Y') {
  1065. this.costImpactData.affectedNumber = ''
  1066. this.costImpactData.affectedOpinions = ''
  1067. this.costImpactData.affectedScrapAmount = 0
  1068. this.costImpactData.affectedExecutor = ''
  1069. this.costImpactData.affectedExecutorName = ''
  1070. }
  1071. },
  1072. },
  1073. data() {
  1074. return {
  1075. uploadDialog: false,
  1076. form: [],
  1077. buList: [],
  1078. // DelegateAccess 相关
  1079. selectionDelegateAccess: [],
  1080. selectionDelegateAccess2: [],
  1081. delegateAccessVisible: false,
  1082. baseDelegateAccessList: [],
  1083. changeDelegateAccess: {
  1084. delegateAccess: '',
  1085. delegateAccessName: '',
  1086. },
  1087. // 导出
  1088. exportData: [],
  1089. exportName: '工程变更申请' + this.dayjs().format('YYYYMMDDHHmmss'),
  1090. exportHeader: ['工程变更申请'],
  1091. exportFooter: [],
  1092. resultList: [],
  1093. // ======== 行高 ========
  1094. height: 200,
  1095. // ======== 分页 ========
  1096. pageIndex: 1,
  1097. pageSize: 50,
  1098. totalPage: 0,
  1099. pageIndex2: 1,
  1100. pageSize2: 20,
  1101. totalPage2: 0,
  1102. activeName: 'basicInformation',
  1103. tempPartRow: {},
  1104. tempExecutorRow: {},
  1105. changeTitle: '',
  1106. // 条件查询
  1107. searchData: {
  1108. site: this.$store.state.user.site,
  1109. partNo: '',
  1110. testPartNo: '',
  1111. partDesc: '',
  1112. customerId: '',
  1113. customerDesc: '',
  1114. projectId: '',
  1115. projectDesc: '',
  1116. codeNo: '',
  1117. oriCodeNo: '',
  1118. status: '',
  1119. buNo: '',
  1120. page: 1,
  1121. limit: 10
  1122. },
  1123. searchData2: {
  1124. site: this.$store.state.user.site,
  1125. partNo: '',
  1126. testPartNo: '',
  1127. partDesc: '',
  1128. customerId: '',
  1129. customerDesc: '',
  1130. projectId: '',
  1131. projectDesc: '',
  1132. codeNo: '',
  1133. buNo: '',
  1134. },
  1135. // ======== 数据对象 ========
  1136. modalData: {
  1137. site: this.$store.state.user.site,
  1138. changeNo: '',
  1139. applicantId: '',
  1140. applicantName: '',
  1141. applicationDepartmentId: '',
  1142. applicationDepartmentName: '',
  1143. applyDate: '',
  1144. changeImpact: '',
  1145. changeImpactDesc: '',
  1146. ecnStage: '',
  1147. changeType: '',
  1148. tpEngineerId: '',
  1149. tpEngineerName: '',
  1150. changePhaseInDate: '',
  1151. dfIsProduct: '',
  1152. printing: '',
  1153. manufacturingCostIsChange: '',
  1154. changeRequestDesc: '',
  1155. isReQuote: '',
  1156. ulCertificationRequirements: '',
  1157. ulContinueToMeetDemand: '',
  1158. gpCertificationRequirements: '',
  1159. gpContinueToMeetDemand: '',
  1160. createBy: '',
  1161. detailList: [],
  1162. ecnTypeData: [],
  1163. industrialEngineerId: '',
  1164. industrialEngineerName: '',
  1165. changeStatus: '',
  1166. ecnType: '',
  1167. cqcOperatorId: '',
  1168. cqcOperatorName: '',
  1169. faiOperatorId: '',
  1170. faiOperatorName: '',
  1171. showInQueryFlag: ''
  1172. },
  1173. costImpactData: {
  1174. site: this.$store.state.user.site,
  1175. changeNo: '',
  1176. productionProductFlag: '',
  1177. inventoryProductFlag: '',
  1178. newOrderFlag: '',
  1179. affectedFlag: '',
  1180. productionProductNumber: '',
  1181. productionProductOpinions: '',
  1182. productionProductScrapAmount: 0,
  1183. productionProductRemark: '',
  1184. productionProductExecutor: '',
  1185. productionProductExecutorName: '',
  1186. inventoryProductNumber: '',
  1187. inventoryProductOpinions: '',
  1188. inventoryProductScrapAmount: 0,
  1189. inventoryProductRemark: '',
  1190. inventoryProductExecutor: '',
  1191. inventoryProductExecutorName: '',
  1192. newOrderNumber: '',
  1193. affectedNumber: '',
  1194. affectedOpinions: '',
  1195. affectedScrapAmount: 0,
  1196. affectedRemark: '',
  1197. affectedExecutor: '',
  1198. affectedExecutorName: '',
  1199. changeTotalCost: '',
  1200. remark: '',
  1201. createBy: '',
  1202. updateBy: ''
  1203. },
  1204. executionInfoData: {
  1205. site: this.$store.state.user.site,
  1206. changeNo: '',
  1207. originalFilmNo: '',
  1208. newFilmNo: '',
  1209. originalDieCuttingRuleNo: '',
  1210. newDieCuttingRuleNo: '',
  1211. originalStencilNo: '',
  1212. newStencilNo: '',
  1213. executionDate: '',
  1214. createBy: '',
  1215. updateBy: '',
  1216. chooseItemList: [],
  1217. chooseItemList2: [],
  1218. },
  1219. countersignatureData: {
  1220. site: this.$store.state.user.site,
  1221. changeNo: '',
  1222. createBy: '',
  1223. updateBy: '',
  1224. chooseCSItemList: []
  1225. },
  1226. chooseModelData: {
  1227. site: this.$store.state.user.site,
  1228. functionType: 'ECN',
  1229. itemNo: '',
  1230. itemDesc: '',
  1231. codeNo: ''
  1232. },
  1233. chooseModelData2: {
  1234. site: this.$store.state.user.site,
  1235. functionType: 'ECN',
  1236. itemNo: '',
  1237. itemDesc: '',
  1238. codeNo: ''
  1239. },
  1240. chooseCSModelData: {
  1241. site: this.$store.state.user.site,
  1242. functionType: 'ECN',
  1243. itemNo: '',
  1244. itemDesc: '',
  1245. codeNo: ''
  1246. },
  1247. fileData: {
  1248. file: [],
  1249. orderRef1: '',
  1250. orderRef2: '',
  1251. fileRemark: '',
  1252. folder: ''
  1253. },
  1254. partData: {
  1255. site: '',
  1256. buNo: '',
  1257. finalPartNo: '',
  1258. testPartNo: '',
  1259. customerPartNo: '',
  1260. partDesc: '',
  1261. page: 1,
  1262. limit: 10
  1263. },
  1264. // ======== 数据列表 ========
  1265. dataList: [],
  1266. dataList2: [],
  1267. chooseDataList: [],
  1268. fileList: [],
  1269. modelList: [],
  1270. modelList2: [],
  1271. modelCSList: [],
  1272. itemList: [],
  1273. itemList2: [],
  1274. itemCSList: [],
  1275. chooseItemList: [],
  1276. chooseItemList2: [],
  1277. chooseCSItemList: [],
  1278. partList: [],
  1279. // ======== 列表表头 ========
  1280. columnList: [
  1281. {
  1282. userId: this.$store.state.user.name,
  1283. functionId: 108001,
  1284. serialNumber: '108001Table1BuNo',
  1285. tableId: '108001Table1',
  1286. tableName: '技术参数卡',
  1287. columnProp: 'buNo',
  1288. headerAlign: 'center',
  1289. align: 'center',
  1290. columnLabel: 'BU',
  1291. columnHidden: false,
  1292. columnImage: false,
  1293. status: true,
  1294. fixed: '',
  1295. columnWidth: 80
  1296. },
  1297. {
  1298. userId: this.$store.state.user.name,
  1299. functionId: 108001,
  1300. serialNumber: '108001Table1TestPartNo',
  1301. tableId: '108001Table1',
  1302. tableName: '技术参数卡',
  1303. columnProp: 'testPartNo',
  1304. headerAlign: 'center',
  1305. align: 'center',
  1306. columnLabel: 'PLM物料编码',
  1307. columnHidden: false,
  1308. columnImage: false,
  1309. status: true,
  1310. fixed: '',
  1311. columnWidth: 120
  1312. },
  1313. {
  1314. userId: this.$store.state.user.name,
  1315. functionId: 108001,
  1316. serialNumber: '108001Table1PartNo',
  1317. tableId: '108001Table1',
  1318. tableName: '技术参数卡',
  1319. columnProp: 'partNo',
  1320. headerAlign: 'center',
  1321. align: 'center',
  1322. columnLabel: 'IFS物料编码',
  1323. columnHidden: false,
  1324. columnImage: false,
  1325. status: true,
  1326. fixed: '',
  1327. columnWidth: 120
  1328. },
  1329. {
  1330. userId: this.$store.state.user.name,
  1331. functionId: 108001,
  1332. serialNumber: '108001Table1PartDesc',
  1333. tableId: '108001Table1',
  1334. tableName: '技术参数卡',
  1335. columnProp: 'partDesc',
  1336. headerAlign: 'center',
  1337. align: 'left',
  1338. columnLabel: '物料名称',
  1339. columnHidden: false,
  1340. columnImage: false,
  1341. status: true,
  1342. fixed: '',
  1343. columnWidth: 180
  1344. },
  1345. {
  1346. userId: this.$store.state.user.name,
  1347. functionId: 108001,
  1348. serialNumber: '108001Table1ProjectId',
  1349. tableId: '108001Table1',
  1350. tableName: '技术参数卡',
  1351. columnProp: 'projectId',
  1352. headerAlign: 'center',
  1353. align: 'center',
  1354. columnLabel: '项目号',
  1355. columnHidden: false,
  1356. columnImage: false,
  1357. status: true,
  1358. fixed: '',
  1359. columnWidth: 120
  1360. },
  1361. {
  1362. userId: this.$store.state.user.name,
  1363. functionId: 108001,
  1364. serialNumber: '108001Table1ProjectDesc',
  1365. tableId: '108001Table1',
  1366. tableName: '技术参数卡',
  1367. columnProp: 'projectDesc',
  1368. headerAlign: 'center',
  1369. align: 'left',
  1370. columnLabel: '项目名称',
  1371. columnHidden: false,
  1372. columnImage: false,
  1373. status: true,
  1374. fixed: '',
  1375. columnWidth: 180
  1376. },
  1377. {
  1378. userId: this.$store.state.user.name,
  1379. functionId: 108001,
  1380. serialNumber: '108001Table1CustomerId',
  1381. tableId: '108001Table1',
  1382. tableName: '技术参数卡',
  1383. columnProp: 'customerId',
  1384. headerAlign: 'center',
  1385. align: 'center',
  1386. columnLabel: '客户编码',
  1387. columnHidden: false,
  1388. columnImage: false,
  1389. status: true,
  1390. fixed: '',
  1391. columnWidth: 120
  1392. },
  1393. {
  1394. userId: this.$store.state.user.name,
  1395. functionId: 108001,
  1396. serialNumber: '108001Table1CustomerDesc',
  1397. tableId: '108001Table1',
  1398. tableName: '技术参数卡',
  1399. columnProp: 'customerDesc',
  1400. headerAlign: 'center',
  1401. align: 'left',
  1402. columnLabel: '客户名称',
  1403. columnHidden: false,
  1404. columnImage: false,
  1405. status: true,
  1406. fixed: '',
  1407. columnWidth: 180
  1408. },
  1409. {
  1410. userId: this.$store.state.user.name,
  1411. functionId: 108001,
  1412. serialNumber: '108001Table1CodeNo',
  1413. tableId: '108001Table1',
  1414. tableName: '技术参数卡',
  1415. columnProp: 'oriCodeNo',
  1416. headerAlign: 'center',
  1417. align: 'center',
  1418. columnLabel: '技术参数卡',
  1419. columnHidden: false,
  1420. columnImage: false,
  1421. status: true,
  1422. fixed: '',
  1423. columnWidth: 120
  1424. },
  1425. {
  1426. userId: this.$store.state.user.name,
  1427. functionId: 108001,
  1428. serialNumber: '108001Table1CodeNo',
  1429. tableId: '108001Table1',
  1430. tableName: '技术参数卡',
  1431. columnProp: 'ecnFlag',
  1432. headerAlign: 'center',
  1433. align: 'center',
  1434. columnLabel: '状态',
  1435. columnHidden: false,
  1436. columnImage: false,
  1437. status: true,
  1438. fixed: '',
  1439. columnWidth: 100
  1440. },
  1441. {
  1442. userId: this.$store.state.user.name,
  1443. functionId: 108001,
  1444. serialNumber: '108001Table1RevNo',
  1445. tableId: '108001Table1',
  1446. tableName: '技术参数卡',
  1447. columnProp: 'revNo',
  1448. headerAlign: 'center',
  1449. align: 'center',
  1450. columnLabel: '版本号',
  1451. columnHidden: false,
  1452. columnImage: false,
  1453. status: true,
  1454. fixed: '',
  1455. columnWidth: 80
  1456. },
  1457. ],
  1458. columnList2: [
  1459. {
  1460. columnProp: 'buNo',
  1461. headerAlign: 'center',
  1462. align: 'center',
  1463. columnLabel: 'BU',
  1464. columnHidden: false,
  1465. columnImage: false,
  1466. status: true,
  1467. fixed: '',
  1468. columnWidth: 70
  1469. },
  1470. {
  1471. columnProp: 'testPartNo',
  1472. headerAlign: 'center',
  1473. align: 'left',
  1474. columnLabel: 'PLM物料编码',
  1475. columnHidden: false,
  1476. columnImage: false,
  1477. status: true,
  1478. fixed: '',
  1479. columnWidth: 120
  1480. },
  1481. {
  1482. columnProp: 'partNo',
  1483. headerAlign: 'center',
  1484. align: 'left',
  1485. columnLabel: 'IFS物料编码',
  1486. columnHidden: false,
  1487. columnImage: false,
  1488. status: true,
  1489. fixed: '',
  1490. columnWidth: 120
  1491. },
  1492. {
  1493. columnProp: 'partDesc',
  1494. headerAlign: 'center',
  1495. align: 'left',
  1496. columnLabel: '物料名称',
  1497. columnHidden: false,
  1498. columnImage: false,
  1499. status: true,
  1500. fixed: '',
  1501. columnWidth: 200
  1502. },
  1503. {
  1504. columnProp: 'projectId',
  1505. headerAlign: 'center',
  1506. align: 'left',
  1507. columnLabel: '项目号',
  1508. columnHidden: false,
  1509. columnImage: false,
  1510. status: true,
  1511. fixed: '',
  1512. columnWidth: 120
  1513. },
  1514. {
  1515. columnProp: 'projectDesc',
  1516. headerAlign: 'center',
  1517. align: 'left',
  1518. columnLabel: '项目名称',
  1519. columnHidden: false,
  1520. columnImage: false,
  1521. status: true,
  1522. fixed: '',
  1523. columnWidth: 180
  1524. },
  1525. {
  1526. columnProp: 'customerId',
  1527. headerAlign: 'center',
  1528. align: 'left',
  1529. columnLabel: '客户编码',
  1530. columnHidden: false,
  1531. columnImage: false,
  1532. status: true,
  1533. fixed: '',
  1534. columnWidth: 120
  1535. },
  1536. {
  1537. columnProp: 'customerDesc',
  1538. headerAlign: 'center',
  1539. align: 'left',
  1540. columnLabel: '客户名称',
  1541. columnHidden: false,
  1542. columnImage: false,
  1543. status: true,
  1544. fixed: '',
  1545. columnWidth: 180
  1546. },
  1547. {
  1548. columnProp: 'codeNo',
  1549. headerAlign: 'center',
  1550. align: 'left',
  1551. columnLabel: '技术参数卡',
  1552. columnHidden: false,
  1553. columnImage: false,
  1554. status: true,
  1555. fixed: '',
  1556. columnWidth: 120
  1557. },
  1558. {
  1559. columnProp: 'ecnFlag',
  1560. headerAlign: 'center',
  1561. align: 'center',
  1562. columnLabel: '状态',
  1563. columnHidden: false,
  1564. columnImage: false,
  1565. status: true,
  1566. fixed: '',
  1567. columnWidth: 100
  1568. },
  1569. {
  1570. columnProp: 'revNo',
  1571. headerAlign: 'center',
  1572. align: 'center',
  1573. columnLabel: '版本号',
  1574. columnHidden: false,
  1575. columnImage: false,
  1576. status: true,
  1577. fixed: '',
  1578. columnWidth: 80
  1579. },
  1580. ],
  1581. columnChooseDataList: [
  1582. {
  1583. userId: this.$store.state.user.name,
  1584. functionId: 108001,
  1585. serialNumber: '108001Table2TestPartNo',
  1586. tableId: '108001Table2',
  1587. tableName: '所选变更列表',
  1588. columnProp: 'testPartNo',
  1589. headerAlign: 'center',
  1590. align: 'left',
  1591. columnLabel: 'PLM物料编码',
  1592. columnHidden: false,
  1593. columnImage: false,
  1594. status: true,
  1595. fixed: '',
  1596. columnWidth: 120
  1597. },
  1598. {
  1599. userId: this.$store.state.user.name,
  1600. functionId: 108001,
  1601. serialNumber: '108001Table2PartNo',
  1602. tableId: '108001Table2',
  1603. tableName: '所选变更列表',
  1604. columnProp: 'partNo',
  1605. headerAlign: 'center',
  1606. align: 'left',
  1607. columnLabel: 'IFS物料编码',
  1608. columnHidden: false,
  1609. columnImage: false,
  1610. status: true,
  1611. fixed: '',
  1612. columnWidth: 120
  1613. },
  1614. {
  1615. userId: this.$store.state.user.name,
  1616. functionId: 108001,
  1617. serialNumber: '108001Table2PartDesc',
  1618. tableId: '108001Table2',
  1619. tableName: '所选变更列表',
  1620. columnProp: 'partDesc',
  1621. headerAlign: 'center',
  1622. align: 'left',
  1623. columnLabel: '物料名称',
  1624. columnHidden: false,
  1625. columnImage: false,
  1626. status: true,
  1627. fixed: '',
  1628. columnWidth: 180
  1629. },
  1630. {
  1631. userId: this.$store.state.user.name,
  1632. functionId: 108001,
  1633. serialNumber: '108001Table2DrawingNo',
  1634. tableId: '108001Table2',
  1635. tableName: '所选变更列表',
  1636. columnProp: 'drawingNo',
  1637. headerAlign: 'center',
  1638. align: 'center',
  1639. columnLabel: '图纸编码',
  1640. columnHidden: false,
  1641. columnImage: false,
  1642. status: true,
  1643. fixed: '',
  1644. columnWidth: 90
  1645. },
  1646. {
  1647. userId: this.$store.state.user.name,
  1648. functionId: 108001,
  1649. serialNumber: '108001Table2DraftNo',
  1650. tableId: '108001Table2',
  1651. tableName: '所选变更列表',
  1652. columnProp: 'draftNo',
  1653. headerAlign: 'center',
  1654. align: 'center',
  1655. columnLabel: '图稿编码',
  1656. columnHidden: false,
  1657. columnImage: false,
  1658. status: true,
  1659. fixed: '',
  1660. columnWidth: 90
  1661. },
  1662. ],
  1663. columnChooseItemList: [
  1664. {
  1665. userId: this.$store.state.user.name,
  1666. functionId: 108001,
  1667. serialNumber: '108001Table3ItemNo',
  1668. tableId: '108001Table3',
  1669. tableName: '执行属性表',
  1670. columnProp: 'itemNo',
  1671. headerAlign: 'center',
  1672. align: 'center',
  1673. columnLabel: '属性编码',
  1674. columnHidden: false,
  1675. columnImage: false,
  1676. status: true,
  1677. fixed: '',
  1678. columnWidth: 80
  1679. },
  1680. {
  1681. userId: this.$store.state.user.name,
  1682. functionId: 108001,
  1683. serialNumber: '108001Table3ItemDesc',
  1684. tableId: '108001Table3',
  1685. tableName: '执行属性表',
  1686. columnProp: 'itemDesc',
  1687. headerAlign: 'center',
  1688. align: 'center',
  1689. columnLabel: '属性名称',
  1690. columnHidden: false,
  1691. columnImage: false,
  1692. status: true,
  1693. fixed: '',
  1694. columnWidth: 150
  1695. },
  1696. // {
  1697. // userId: this.$store.state.user.name,
  1698. // functionId: 108001,
  1699. // serialNumber: '108001Table3ExecuteFlag',
  1700. // tableId: '108001Table3',
  1701. // tableName: '执行属性表',
  1702. // columnProp: 'executeFlag',
  1703. // headerAlign: 'center',
  1704. // align: 'center',
  1705. // columnLabel: '是否执行',
  1706. // columnHidden: false,
  1707. // columnImage: false,
  1708. // status: true,
  1709. // fixed: '',
  1710. // columnWidth: 80
  1711. // },
  1712. // {
  1713. // userId: this.$store.state.user.name,
  1714. // functionId: 108001,
  1715. // serialNumber: '108001Table3Executor',
  1716. // tableId: '108001Table3',
  1717. // tableName: '执行属性表',
  1718. // columnProp: 'executor',
  1719. // headerAlign: 'center',
  1720. // align: 'center',
  1721. // columnLabel: '执行人',
  1722. // columnHidden: false,
  1723. // columnImage: false,
  1724. // status: true,
  1725. // fixed: '',
  1726. // columnWidth: 100
  1727. // },
  1728. {
  1729. userId: this.$store.state.user.name,
  1730. functionId: 108001,
  1731. serialNumber: '108001Table3ExecuteDate',
  1732. tableId: '108001Table3',
  1733. tableName: '执行属性表',
  1734. columnProp: 'itemExecutionDate',
  1735. headerAlign: 'center',
  1736. align: 'center',
  1737. columnLabel: '执行时间',
  1738. columnHidden: false,
  1739. columnImage: false,
  1740. status: true,
  1741. fixed: '',
  1742. columnWidth: 130
  1743. }
  1744. ],
  1745. columnChooseItemList2: [
  1746. {
  1747. userId: this.$store.state.user.name,
  1748. functionId: 108001,
  1749. serialNumber: '108001Table7ItemNo',
  1750. tableId: '108001Table7',
  1751. tableName: '可行性评估属性表',
  1752. columnProp: 'itemNo',
  1753. headerAlign: 'center',
  1754. align: 'center',
  1755. columnLabel: '属性编码',
  1756. columnHidden: false,
  1757. columnImage: false,
  1758. status: true,
  1759. fixed: '',
  1760. columnWidth: 80
  1761. },
  1762. {
  1763. userId: this.$store.state.user.name,
  1764. functionId: 108001,
  1765. serialNumber: '108001Table7ItemDesc',
  1766. tableId: '108001Table7',
  1767. tableName: '可行性评估属性表',
  1768. columnProp: 'itemDesc',
  1769. headerAlign: 'center',
  1770. align: 'center',
  1771. columnLabel: '属性名称',
  1772. columnHidden: false,
  1773. columnImage: false,
  1774. status: true,
  1775. fixed: '',
  1776. columnWidth: 150
  1777. },
  1778. // {
  1779. // userId: this.$store.state.user.name,
  1780. // functionId: 108001,
  1781. // serialNumber: '108001Table7ExecuteFlag',
  1782. // tableId: '108001Table7',
  1783. // tableName: '可行性评估属性表',
  1784. // columnProp: 'executeFlag',
  1785. // headerAlign: 'center',
  1786. // align: 'center',
  1787. // columnLabel: '是否执行',
  1788. // columnHidden: false,
  1789. // columnImage: false,
  1790. // status: true,
  1791. // fixed: '',
  1792. // columnWidth: 80
  1793. // },
  1794. // {
  1795. // userId: this.$store.state.user.name,
  1796. // functionId: 108001,
  1797. // serialNumber: '108001Table7Executor',
  1798. // tableId: '108001Table7',
  1799. // tableName: '可行性评估属性表',
  1800. // columnProp: 'executor',
  1801. // headerAlign: 'center',
  1802. // align: 'center',
  1803. // columnLabel: '执行人',
  1804. // columnHidden: false,
  1805. // columnImage: false,
  1806. // status: true,
  1807. // fixed: '',
  1808. // columnWidth: 100
  1809. // },{
  1810. // userId: this.$store.state.user.name,
  1811. // functionId: 108001,
  1812. // serialNumber: '108001Table7ExecuteDate',
  1813. // tableId: '108001Table7',
  1814. // tableName: '可行性评估属性表',
  1815. // columnProp: 'itemExecutionDate',
  1816. // headerAlign: 'center',
  1817. // align: 'center',
  1818. // columnLabel: '执行时间',
  1819. // columnHidden: false,
  1820. // columnImage: false,
  1821. // status: true,
  1822. // fixed: '',
  1823. // columnWidth: 150
  1824. // },
  1825. ],
  1826. columnChooseCSItemList: [
  1827. {
  1828. userId: this.$store.state.user.name,
  1829. functionId: 108001,
  1830. serialNumber: '108001Table6ItemNo',
  1831. tableId: '108001Table6',
  1832. tableName: '执行属性表',
  1833. columnProp: 'itemNo',
  1834. headerAlign: 'center',
  1835. align: 'left',
  1836. columnLabel: '属性编码',
  1837. columnHidden: false,
  1838. columnImage: false,
  1839. status: true,
  1840. fixed: '',
  1841. columnWidth: 100
  1842. },
  1843. {
  1844. userId: this.$store.state.user.name,
  1845. functionId: 108001,
  1846. serialNumber: '108001Table6ItemDesc',
  1847. tableId: '108001Table6',
  1848. tableName: '执行属性表',
  1849. columnProp: 'itemDesc',
  1850. headerAlign: 'center',
  1851. align: 'left',
  1852. columnLabel: '属性名称',
  1853. columnHidden: false,
  1854. columnImage: false,
  1855. status: true,
  1856. fixed: '',
  1857. columnWidth: 200
  1858. },
  1859. // {
  1860. // userId: this.$store.state.user.name,
  1861. // functionId: 108001,
  1862. // serialNumber: '108001Table6ExecuteFlag',
  1863. // tableId: '108001Table6',
  1864. // tableName: '执行属性表',
  1865. // columnProp: 'executeFlag',
  1866. // headerAlign: 'center',
  1867. // align: 'center',
  1868. // columnLabel: '是否执行',
  1869. // columnHidden: false,
  1870. // columnImage: false,
  1871. // status: true,
  1872. // fixed: '',
  1873. // columnWidth: 80
  1874. // },
  1875. // {
  1876. // userId: this.$store.state.user.name,
  1877. // functionId: 108001,
  1878. // serialNumber: '108001Table6Executor',
  1879. // tableId: '108001Table6',
  1880. // tableName: '执行属性表',
  1881. // columnProp: 'executor',
  1882. // headerAlign: 'center',
  1883. // align: 'center',
  1884. // columnLabel: '执行人',
  1885. // columnHidden: false,
  1886. // columnImage: false,
  1887. // status: true,
  1888. // fixed: '',
  1889. // columnWidth: 100
  1890. // },{
  1891. // userId: this.$store.state.user.name,
  1892. // functionId: 108001,
  1893. // serialNumber: '108001Table6ExecuteDate',
  1894. // tableId: '108001Table6',
  1895. // tableName: '执行属性表',
  1896. // columnProp: 'itemExecutionDate',
  1897. // headerAlign: 'center',
  1898. // align: 'center',
  1899. // columnLabel: '执行时间',
  1900. // columnHidden: false,
  1901. // columnImage: false,
  1902. // status: true,
  1903. // fixed: '',
  1904. // columnWidth: 150
  1905. // },
  1906. ],
  1907. columnItemList: [
  1908. {
  1909. columnProp: 'itemNo',
  1910. headerAlign: 'center',
  1911. align: 'center',
  1912. columnLabel: '属性编码',
  1913. columnHidden: false,
  1914. columnImage: false,
  1915. status: true,
  1916. fixed: '',
  1917. columnWidth: 80
  1918. },
  1919. {
  1920. columnProp: 'itemDesc',
  1921. headerAlign: 'center',
  1922. align: 'center',
  1923. columnLabel: '属性名称',
  1924. columnHidden: false,
  1925. columnImage: false,
  1926. status: true,
  1927. fixed: '',
  1928. columnWidth: 150
  1929. },
  1930. ],
  1931. columnItemList2: [
  1932. {
  1933. columnProp: 'itemNo',
  1934. headerAlign: 'center',
  1935. align: 'center',
  1936. columnLabel: '属性编码',
  1937. columnHidden: false,
  1938. columnImage: false,
  1939. status: true,
  1940. fixed: '',
  1941. columnWidth: 80
  1942. },
  1943. {
  1944. columnProp: 'itemDesc',
  1945. headerAlign: 'center',
  1946. align: 'center',
  1947. columnLabel: '属性名称',
  1948. columnHidden: false,
  1949. columnImage: false,
  1950. status: true,
  1951. fixed: '',
  1952. columnWidth: 150
  1953. },
  1954. ],
  1955. columnCSItemList: [
  1956. {
  1957. userId: this.$store.state.user.name,
  1958. functionId: 108001,
  1959. serialNumber: '108001Table5ItemNo',
  1960. tableId: '108001Table5',
  1961. tableName: '执行属性表',
  1962. columnProp: 'itemNo',
  1963. headerAlign: 'center',
  1964. align: 'center',
  1965. columnLabel: '属性编码',
  1966. columnHidden: false,
  1967. columnImage: false,
  1968. status: true,
  1969. fixed: '',
  1970. columnWidth: 80
  1971. },
  1972. {
  1973. userId: this.$store.state.user.name,
  1974. functionId: 108001,
  1975. serialNumber: '108001Table5ItemDesc',
  1976. tableId: '108001Table5',
  1977. tableName: '执行属性表',
  1978. columnProp: 'itemDesc',
  1979. headerAlign: 'center',
  1980. align: 'center',
  1981. columnLabel: '属性名称',
  1982. columnHidden: false,
  1983. columnImage: false,
  1984. status: true,
  1985. fixed: '',
  1986. columnWidth: 150
  1987. },
  1988. ],
  1989. partColumnList: [
  1990. {
  1991. columnProp: 'testPartNo',
  1992. headerAlign: "center",
  1993. align: "left",
  1994. columnLabel: 'PLM物料编码',
  1995. columnHidden: false,
  1996. columnImage: false,
  1997. columnSortable: false,
  1998. sortLv: 0,
  1999. status: true,
  2000. fixed: '',
  2001. columnWidth: 120
  2002. },
  2003. {
  2004. columnProp: 'finalPartNo',
  2005. headerAlign: "center",
  2006. align: "left",
  2007. columnLabel: 'IFS物料编码',
  2008. columnHidden: false,
  2009. columnImage: false,
  2010. columnSortable: false,
  2011. sortLv: 0,
  2012. status: true,
  2013. fixed: '',
  2014. columnWidth: 120
  2015. },
  2016. {
  2017. columnProp: 'customerPartNo',
  2018. headerAlign: "center",
  2019. align: "left",
  2020. columnLabel: '客户料号',
  2021. columnHidden: false,
  2022. columnImage: false,
  2023. columnSortable: false,
  2024. sortLv: 0,
  2025. status: true,
  2026. fixed: '',
  2027. columnWidth: 120
  2028. },
  2029. {
  2030. columnProp: 'partDesc',
  2031. headerAlign: "center",
  2032. align: "left",
  2033. columnLabel: '物料名称',
  2034. columnHidden: false,
  2035. columnImage: false,
  2036. status: true,
  2037. fixed: '',
  2038. columnWidth: 200
  2039. },
  2040. ],
  2041. // ======== 必填规则 ========
  2042. rules: {
  2043. applicantId: [
  2044. {
  2045. required: true,
  2046. message: ' ',
  2047. trigger: ['blur','change']
  2048. }
  2049. ],
  2050. applyDate: [
  2051. {
  2052. required: true,
  2053. message: ' ',
  2054. trigger: ['blur','change']
  2055. }
  2056. ],
  2057. changeImpact: [
  2058. {
  2059. required: true,
  2060. message: ' ',
  2061. trigger: ['blur','change']
  2062. }
  2063. ],
  2064. ecnStage: [
  2065. {
  2066. required: true,
  2067. message: ' ',
  2068. trigger: ['blur','change']
  2069. }
  2070. ],
  2071. changeType: [
  2072. {
  2073. required: true,
  2074. message: ' ',
  2075. trigger: ['blur','change']
  2076. }
  2077. ],
  2078. tpEngineerId: [
  2079. {
  2080. required: true,
  2081. message: ' ',
  2082. trigger: ['blur','change']
  2083. }
  2084. ],
  2085. changePhaseInDate: [
  2086. {
  2087. required: true,
  2088. message: ' ',
  2089. trigger: ['blur','change']
  2090. }
  2091. ],
  2092. dfIsProduct: [
  2093. {
  2094. required: true,
  2095. message: ' ',
  2096. trigger: ['blur','change']
  2097. }
  2098. ],
  2099. printing: [
  2100. {
  2101. required: true,
  2102. message: ' ',
  2103. trigger: ['blur','change']
  2104. }
  2105. ],
  2106. manufacturingCostIsChange: [
  2107. {
  2108. required: true,
  2109. message: ' ',
  2110. trigger: ['blur','change']
  2111. }
  2112. ],
  2113. changeRequestDesc: [
  2114. {
  2115. required: true,
  2116. message: ' ',
  2117. trigger: ['blur','change']
  2118. }
  2119. ],
  2120. isReQuote: [
  2121. {
  2122. required: true,
  2123. message: ' ',
  2124. trigger: ['blur','change']
  2125. }
  2126. ],
  2127. ulCertificationRequirements: [
  2128. {
  2129. required: true,
  2130. message: ' ',
  2131. trigger: ['blur','change']
  2132. }
  2133. ],
  2134. ulContinueToMeetDemand: [
  2135. {
  2136. required: true,
  2137. message: ' ',
  2138. trigger: ['blur','change']
  2139. }
  2140. ],
  2141. gpCertificationRequirements: [
  2142. {
  2143. required: true,
  2144. message: ' ',
  2145. trigger: ['blur','change']
  2146. }
  2147. ],
  2148. gpContinueToMeetDemand: [
  2149. {
  2150. required: true,
  2151. message: ' ',
  2152. trigger: ['blur','change']
  2153. }
  2154. ],
  2155. ecnType: [
  2156. {
  2157. required: true,
  2158. message: ' ',
  2159. trigger: ['blur','change']
  2160. }
  2161. ],
  2162. },
  2163. // ======== 复选数据集 ========
  2164. dataSelections: [],
  2165. dataSelections2: [],
  2166. itemSelections: [],
  2167. itemSelections2: [],
  2168. itemCSSelections: [],
  2169. // ======== 模态框开关控制 ========
  2170. modalFlag: false,
  2171. modalDisableFlag: false,
  2172. EcnTypeModalFlag: false,
  2173. chooseModelFlag: false,
  2174. chooseModelFlag2: false,
  2175. chooseCSModelFlag: false,
  2176. addDetailModal: false,
  2177. partModelFlag: false,
  2178. saveDataLoading: false,
  2179. searchLoading: false,
  2180. updateAbnormalDataLoading: false,
  2181. filterVisible: false,
  2182. isFilterSearch: false,
  2183. filterSearchData: {},
  2184. }
  2185. },
  2186. created () {
  2187. this.getDataList()
  2188. this.getEcnModel()
  2189. this.getEcnModel2()
  2190. this.getEcnCSModel()
  2191. this.getBuBySite()
  2192. },
  2193. mounted() {
  2194. this.$nextTick(() => {
  2195. this.height = window.innerHeight - 211
  2196. })
  2197. },
  2198. computed:{
  2199. delegateAccessName: {
  2200. get() {
  2201. return this.selectionDelegateAccess.map(item => item.delegateAccessName).join(';')
  2202. },
  2203. set(val) {
  2204. }
  2205. },
  2206. totalCost: {
  2207. get () {
  2208. let total = 0
  2209. if (this.costImpactData.productionProductFlag === 'Y') {
  2210. total += +this.costImpactData.productionProductScrapAmount
  2211. }
  2212. if (this.costImpactData.inventoryProductFlag === 'Y') {
  2213. total += +this.costImpactData.inventoryProductScrapAmount
  2214. }
  2215. if (this.costImpactData.affectedFlag === 'Y') {
  2216. total += +this.costImpactData.affectedScrapAmount
  2217. }
  2218. return total
  2219. }
  2220. }
  2221. },
  2222. methods: {
  2223. // 获取用户的bu
  2224. getBuBySite () {
  2225. let tempData = {
  2226. site: this.$store.state.user.site,
  2227. }
  2228. getBuBySite(tempData).then(({data}) => {
  2229. if (data.code === 0) {
  2230. this.buList = data.rows
  2231. }
  2232. })
  2233. },
  2234. // ======= 正则校验 =======
  2235. handleInput (value, type) {
  2236. // 大于等于0,且只能输入16位小数
  2237. let val = value.replace(/^\D*([0-9]\d*\.?\d{0,16})?.*$/,'$1')
  2238. if (val === null || val === undefined || val === '') {
  2239. val = 0
  2240. }
  2241. if (type === 1) {
  2242. this.costImpactData.productionProductScrapAmount = val
  2243. } else if (type === 2) {
  2244. this.costImpactData.inventoryProductScrapAmount = val
  2245. } else if (type === 3) {
  2246. this.costImpactData.affectedScrapAmount = val
  2247. }
  2248. },
  2249. partInput (row, val) {
  2250. row.newPartNo = val.toUpperCase()
  2251. },
  2252. executorInput (row, val) {
  2253. //row.executor = val.toUpperCase()
  2254. },
  2255. choosePartNo (row) {
  2256. this.partData.site = row.site
  2257. this.partData.buNo = row.buNo
  2258. this.tempPartRow = row
  2259. this.queryPartList()
  2260. //this.getBaseList(133)
  2261. },
  2262. // 查询物料
  2263. queryPartList () {
  2264. this.partData.limit = this.pageSize2
  2265. this.partData.page = this.pageIndex2
  2266. choosePartNoList(this.partData).then(({data}) => {
  2267. if (data && data.code === 0) {
  2268. this.partList = data.page.list
  2269. this.pageIndex2 = data.page.currPage
  2270. this.pageSize2 = data.page.pageSize
  2271. this.totalPage2 = data.page.totalCount
  2272. this.partModelFlag = true
  2273. } else {
  2274. this.partList = []
  2275. }
  2276. })
  2277. },
  2278. // 双击选中物料
  2279. getRowData (row) {
  2280. this.$set(this.tempPartRow,'newPartNo', row.testPartNo)
  2281. this.partModelFlag = false
  2282. },
  2283. // 每页数
  2284. sizeChangeHandle2 (val) {
  2285. this.pageSize2 = val
  2286. this.pageIndex2 = 1
  2287. this.queryPartList()
  2288. },
  2289. // 当前页
  2290. currentChangeHandle2 (val) {
  2291. this.pageIndex2 = val
  2292. this.queryPartList()
  2293. },
  2294. chooseExecutor (row) {
  2295. this.tempExecutorRow = row
  2296. this.getBaseList(2010)
  2297. },
  2298. ecnTypeHeaderChange (val,index) {
  2299. if (val === 'Y') {
  2300. for (let i = 0; i < this.form[index].list.length; i++) {
  2301. this.form[index].list[i].flag = 'Y'
  2302. }
  2303. } else {
  2304. for (let i = 0; i < this.form[index].list.length; i++) {
  2305. this.form[index].list[i].flag = 'N'
  2306. }
  2307. }
  2308. },
  2309. ecnTypeDetailChange (val,index) {
  2310. if (this.form[index].list.every(x => x.flag === 'Y')) {
  2311. this.form[index].flag = 'Y'
  2312. }else {
  2313. this.form[index].flag = 'N'
  2314. }
  2315. },
  2316. selectFlag (row) {
  2317. if (row.ecnFlag === '变更中') {
  2318. return false
  2319. } else {
  2320. return true
  2321. }
  2322. },
  2323. //每页数
  2324. sizeChangeHandle (val) {
  2325. this.pageSize = val
  2326. this.pageIndex = 1
  2327. if ( this.isFilterSearch === false){
  2328. this.getDataList()
  2329. } else {
  2330. this.queryByAnyField(this.filterSearchData)
  2331. }
  2332. },
  2333. // 当前页
  2334. currentChangeHandle (val) {
  2335. this.pageIndex = val
  2336. if ( this.isFilterSearch === false){
  2337. this.getDataList()
  2338. } else {
  2339. this.queryByAnyField(this.filterSearchData)
  2340. }
  2341. },
  2342. // 获取数据列表
  2343. getDataList () {
  2344. this.searchData.limit = this.pageSize
  2345. this.searchData.page = this.pageIndex
  2346. this.searchLoading = true
  2347. technicalSpecificationSearch(this.searchData).then(({data}) => {
  2348. if (data.code === 0) {
  2349. this.dataList = data.page.list
  2350. this.pageIndex = data.page.currPage
  2351. this.pageSize = data.page.pageSize
  2352. this.totalPage = data.page.totalCount
  2353. this.$refs.selectDiv.setLengthAll( this.dataList.length)
  2354. this.searchLoading = false
  2355. } else {
  2356. this.searchLoading = false
  2357. }
  2358. }).catch(()=>{
  2359. this.searchLoading = false
  2360. })
  2361. this.isFilterSearch = false
  2362. },
  2363. // 异常数据更新
  2364. handleUpdateAbnormalData() {
  2365. this.$confirm('此操作将更新异常数据, 是否继续?', '提示', {
  2366. confirmButtonText: '确定',
  2367. cancelButtonText: '取消',
  2368. type: 'warning'
  2369. }).then(() => {
  2370. this.updateAbnormalDataLoading = true
  2371. const params = {
  2372. site: this.$store.state.user.site
  2373. }
  2374. updateShowInQueryFlag(params).then(({data}) => {
  2375. this.updateAbnormalDataLoading = false
  2376. if (data && data.code === 0) {
  2377. this.$message.success('异常数据更新成功')
  2378. this.getDataList()
  2379. } else {
  2380. this.$message.error(data.msg || '更新失败')
  2381. }
  2382. }).catch((error) => {
  2383. this.updateAbnormalDataLoading = false
  2384. this.$message.error(error || '更新失败')
  2385. })
  2386. }).catch(() => {
  2387. this.$message.info('已取消操作')
  2388. })
  2389. },
  2390. // 复选物料信息
  2391. selectionData (val) {
  2392. this.dataSelections = val
  2393. this.$refs.selectDiv.setLengthselected(this.dataSelections.length)
  2394. },
  2395. // 复选物料信息
  2396. selectionData2 (val) {
  2397. this.dataSelections2 = val
  2398. },
  2399. // 页签切换
  2400. refreshCurrentTabTable () {
  2401. },
  2402. // 变更申请模态框
  2403. changeModel () {
  2404. if (this.dataSelections.length === 0) {
  2405. this.$message.warning('请选择要变更的技术参数卡!')
  2406. return
  2407. }
  2408. if (!this.dataSelections.every(item => item.buNo === this.dataSelections[0].buNo)) {
  2409. this.$message.warning('请选择相同BU的技术参数卡!')
  2410. return
  2411. }
  2412. // 获取申请单号
  2413. let tempData = {
  2414. site: this.$store.state.user.site,
  2415. buNo: this.dataSelections[0].buNo,
  2416. transType: 'change_no',
  2417. detailList: this.dataSelections
  2418. }
  2419. this.saveDataLoading = true
  2420. changeRequestTempSave(tempData).then(({data}) => {
  2421. if (data.code === 0) {
  2422. this.modalData = {
  2423. site: this.$store.state.user.site,
  2424. changeNo: data.rows.changeNo,
  2425. applicantId: this.$store.state.user.name,
  2426. applicantName: this.$store.state.user.userDisplay,
  2427. applicationDepartmentId: '',
  2428. applicationDepartmentName: '',
  2429. applyDate: new Date(+ new Date() + 8 * 3600 * 1000).toISOString().replace(/T/g, ' ').replace(/\.[\d]{3}Z/, ''),
  2430. changeImpact: '',
  2431. changeImpactDesc: '',
  2432. ecnStage: '',
  2433. changeType: '',
  2434. tpEngineerId: '',
  2435. tpEngineerName: '',
  2436. changePhaseInDate: new Date(+ new Date() + 8 * 3600 * 1000).toISOString().replace(/T/g, ' ').replace(/\.[\d]{3}Z/, ''),
  2437. dfIsProduct: '',
  2438. printing: '',
  2439. manufacturingCostIsChange: '',
  2440. changeRequestDesc: '',
  2441. isReQuote: '',
  2442. ulCertificationRequirements: '',
  2443. ulContinueToMeetDemand: '',
  2444. gpCertificationRequirements: '',
  2445. gpContinueToMeetDemand: '',
  2446. createBy: this.$store.state.user.name,
  2447. detailList: [],
  2448. ecnTypeData: [],
  2449. industrialEngineerId: '',
  2450. industrialEngineerName: '',
  2451. changeStatus: '草稿',
  2452. ecnType: '',
  2453. cqcOperatorId: '',
  2454. cqcOperatorName: '',
  2455. faiOperatorId: '',
  2456. faiOperatorName: ''
  2457. }
  2458. this.changeTitle = '变更申请-' + this.modalData.changeNo
  2459. this.costImpactData = {
  2460. site: this.$store.state.user.site,
  2461. changeNo: data.rows.changeNo,
  2462. productionProductFlag: '',
  2463. inventoryProductFlag: '',
  2464. newOrderFlag: '',
  2465. affectedFlag: '',
  2466. productionProductNumber: '',
  2467. productionProductOpinions: '',
  2468. productionProductScrapAmount: 0,
  2469. productionProductRemark: '',
  2470. productionProductExecutor: '',
  2471. productionProductExecutorName: '',
  2472. inventoryProductNumber: '',
  2473. inventoryProductOpinions: '',
  2474. inventoryProductScrapAmount: 0,
  2475. inventoryProductRemark: '',
  2476. inventoryProductExecutor: '',
  2477. inventoryProductExecutorName: '',
  2478. newOrderNumber: '',
  2479. affectedNumber: '',
  2480. affectedOpinions: '',
  2481. affectedScrapAmount: 0,
  2482. affectedRemark: '',
  2483. affectedExecutor: '',
  2484. affectedExecutorName: '',
  2485. changeTotalCost: '',
  2486. remark: '',
  2487. createBy: this.$store.state.user.name,
  2488. }
  2489. this.executionInfoData = {
  2490. site: this.$store.state.user.site,
  2491. changeNo: data.rows.changeNo,
  2492. originalFilmNo: '',
  2493. newFilmNo: '',
  2494. originalDieCuttingRuleNo: '',
  2495. newDieCuttingRuleNo: '',
  2496. originalStencilNo: '',
  2497. newStencilNo: '',
  2498. executionDate: new Date(+ new Date() + 8 * 3600 * 1000).toISOString().replace(/T/g, ' ').replace(/\.[\d]{3}Z/, ''),
  2499. createBy: this.$store.state.user.name,
  2500. chooseItemList: [],
  2501. chooseItemList2: []
  2502. }
  2503. this.countersignatureData = {
  2504. site: this.$store.state.user.site,
  2505. changeNo: data.rows.changeNo,
  2506. createBy: this.$store.state.user.name,
  2507. chooseCSItemList: []
  2508. }
  2509. this.chooseItemList = []
  2510. this.chooseItemList2 = []
  2511. this.chooseCSItemList = []
  2512. // 清空 DelegateAccess 的选择(delegateAccessName 是计算属性会自动清空)
  2513. this.selectionDelegateAccess = []
  2514. this.selectionDelegateAccess2 = []
  2515. this.baseDelegateAccessList = []
  2516. this.changeDelegateAccess = {
  2517. delegateAccess: '',
  2518. delegateAccessName: '',
  2519. }
  2520. this.getDepartmentByUserName()
  2521. this.getEcnTypeData() // 获取ECN种类
  2522. this.chooseDataList = data.rows.chooseDataList
  2523. this.activeName = 'basicInformation'
  2524. this.modalFlag = true
  2525. this.modalDisableFlag = false
  2526. } else {
  2527. this.$alert(data.msg, '错误', {
  2528. confirmButtonText: '确定'
  2529. })
  2530. }
  2531. this.saveDataLoading = false
  2532. }).catch(()=>{
  2533. this.saveDataLoading = false
  2534. })
  2535. },
  2536. // 删除变更申请模态框
  2537. closeModalFlag () {
  2538. // 删除临时变更单数据
  2539. this.saveDataLoading = true
  2540. deleteTempChangeInfo(this.modalData).then(({data}) => {
  2541. if (data && data.code === 0) {
  2542. this.getDataList()
  2543. this.modalFlag = false
  2544. } else {
  2545. this.$alert(data.msg, '错误', {
  2546. confirmButtonText: '确定'
  2547. })
  2548. }
  2549. this.saveDataLoading = false
  2550. }).catch(()=>{
  2551. this.saveDataLoading = false
  2552. })
  2553. },
  2554. // 跳转变更申请
  2555. toMenu () {
  2556. if (this.$router.resolve(`/changeManagement-changeRecord`).resolved.name === '404') {
  2557. this.$alert('权限不足,访问失败', '警告', {confirmButtonText: '确定'})
  2558. } else {
  2559. this.$router.push({name:`changeManagement-changeRecord`,params:{changeNo: this.modalData.changeNo}})
  2560. }
  2561. },
  2562. // 新增变更申请
  2563. saveData (type) {
  2564. // 基本信息校验
  2565. if (this.modalData.applicantId === '' || this.modalData.applicantId == null) {
  2566. this.$message.warning('请选择申请人员!')
  2567. return
  2568. }
  2569. if (this.modalData.applyDate === '' || this.modalData.applyDate == null) {
  2570. this.$message.warning('请选择申请日期!')
  2571. return
  2572. }
  2573. if (this.modalData.ecnStage === '' || this.modalData.ecnStage == null) {
  2574. this.$message.warning('请选择ECN阶段!')
  2575. return
  2576. }
  2577. if (this.modalData.changeType === '' || this.modalData.changeType == null) {
  2578. this.$message.warning('请选择变更类别!')
  2579. return
  2580. }
  2581. if (this.modalData.ecnType === '' || this.modalData.ecnType == null) {
  2582. this.$message.warning('请选择ECN种类!')
  2583. return
  2584. }
  2585. if (this.form.length === 0) {
  2586. this.$message.warning('请选择ECN种类!')
  2587. return
  2588. }
  2589. if (this.modalData.tpEngineerId === '' || this.modalData.tpEngineerId == null) {
  2590. this.$message.warning('请选择审批人员!')
  2591. return
  2592. }
  2593. if (this.modalData.changePhaseInDate === '' || this.modalData.changePhaseInDate == null) {
  2594. this.$message.warning('请选择变更生效日期!')
  2595. return
  2596. }
  2597. if (this.modalData.dfIsProduct === '' || this.modalData.dfIsProduct == null) {
  2598. this.$message.warning('请选择是否DF产品!')
  2599. return
  2600. }
  2601. if ((this.modalData.industrialEngineerId === '' || this.modalData.industrialEngineerId == null) && this.modalData.dfIsProduct === 'Y') {
  2602. this.$message.warning('请选择I/E!')
  2603. return
  2604. }
  2605. if (this.modalData.changeRequestDesc === '' || this.modalData.changeRequestDesc == null) {
  2606. this.$message.warning('请填写变更要求描述!')
  2607. return
  2608. }
  2609. if (this.modalData.printing === '' || this.modalData.printing == null) {
  2610. this.$message.warning('请选择印刷方式!')
  2611. return
  2612. }
  2613. if (this.chooseDataList.length === 0) {
  2614. this.$message.warning('请添加需要变更的技术参数卡!')
  2615. return
  2616. }
  2617. if (!this.chooseDataList.every(item => item.buNo === this.chooseDataList[0].buNo)) {
  2618. this.$message.warning('请选择相同BU的技术参数卡!')
  2619. return
  2620. }
  2621. // 库存成本影响校验
  2622. if (this.costImpactData.productionProductFlag === 'Y') { // 在生产品
  2623. if (this.costImpactData.productionProductNumber == null || this.costImpactData.productionProductNumber === '') {
  2624. this.$message.warning('请填写在生产品数量!')
  2625. return
  2626. }
  2627. if (this.costImpactData.productionProductOpinions == null || this.costImpactData.productionProductOpinions === '') {
  2628. this.$message.warning('请填写在生产品处理意见!')
  2629. return
  2630. }
  2631. if (this.costImpactData.productionProductExecutor == null || this.costImpactData.productionProductExecutor === '') {
  2632. this.$message.warning('请填写在生产品执行人!')
  2633. return
  2634. }
  2635. }
  2636. if (this.costImpactData.inventoryProductFlag === 'Y') { // 成品库存
  2637. if (this.costImpactData.inventoryProductNumber == null || this.costImpactData.inventoryProductNumber === '') {
  2638. this.$message.warning('请填写成品库存数量!')
  2639. return
  2640. }
  2641. if (this.costImpactData.inventoryProductOpinions == null || this.costImpactData.inventoryProductOpinions === '') {
  2642. this.$message.warning('请填写成品库存处理意见!')
  2643. return
  2644. }
  2645. if (this.costImpactData.inventoryProductExecutor == null || this.costImpactData.inventoryProductExecutor === '') {
  2646. this.$message.warning('请填写成品库存执行人!')
  2647. return
  2648. }
  2649. }
  2650. if (this.costImpactData.newOrderFlag === 'Y') { // 新订单
  2651. if (this.costImpactData.newOrderNumber == null || this.costImpactData.newOrderNumber === '') {
  2652. this.$message.warning('请填写新订单数量!')
  2653. return
  2654. }
  2655. }
  2656. if (this.costImpactData.affectedFlag === 'Y') { // 影响的原材料及其库存量
  2657. if (this.costImpactData.affectedNumber == null || this.costImpactData.affectedNumber === '') {
  2658. this.$message.warning('请填写影响的原材料及其库存量数量!')
  2659. return
  2660. }
  2661. if (this.costImpactData.affectedOpinions == null || this.costImpactData.affectedOpinions === '') {
  2662. this.$message.warning('请填写影响的原材料及其库存量处理意见!')
  2663. return
  2664. }
  2665. if (this.costImpactData.affectedExecutor == null || this.costImpactData.affectedExecutor === '') {
  2666. this.$message.warning('请填写影响的原材料及其库存量执行人!')
  2667. return
  2668. }
  2669. }
  2670. this.saveDataLoading = true
  2671. this.costImpactData.changeTotalCost = this.totalCost
  2672. this.executionInfoData.chooseItemList = this.chooseItemList
  2673. this.executionInfoData.chooseItemList2 = this.chooseItemList2
  2674. this.countersignatureData.chooseCSItemList = this.chooseCSItemList
  2675. this.modalData.showInQueryFlag = 'Y'
  2676. this.modalData.detailList = this.chooseDataList // 明细
  2677. this.modalData.ecnTypeData = this.form // ECN种类
  2678. this.modalData.costImpactData = this.costImpactData // 库存成本影响
  2679. this.modalData.executionInfoData = this.executionInfoData // TP执行信息
  2680. this.modalData.countersignatureData = this.countersignatureData // 会签信息
  2681. this.modalData.delegateAccessList = this.selectionDelegateAccess.map(item => item.delegateAccess) // DelegateAccess人员编码列表
  2682. changeRequestUpdate(this.modalData).then(({data}) => {
  2683. if (data && data.code === 0) {
  2684. this.modalData = data.rows.modalData
  2685. this.changeTitle = '变更申请-' + this.modalData.changeNo
  2686. this.form = data.rows.form
  2687. this.chooseDataList = data.rows.chooseDataList
  2688. this.costImpactData = data.rows.costImpactData
  2689. this.executionInfoData = data.rows.executionInfoData
  2690. this.executionInfoData.createBy = this.$store.state.user.name
  2691. this.chooseItemList = data.rows.chooseItemList
  2692. this.chooseItemList2 = data.rows.chooseItemList2
  2693. this.chooseCSItemList = data.rows.chooseCSItemList
  2694. this.getDataList()
  2695. this.$message({
  2696. message: '操作成功',
  2697. type: 'success',
  2698. duration: 1500,
  2699. onClose: () => {}
  2700. })
  2701. if (type === 2) { // 保存并跳转
  2702. this.modalFlag = false
  2703. this.toMenu()
  2704. }
  2705. } else {
  2706. this.$alert(data.msg, '错误', {
  2707. confirmButtonText: '确定'
  2708. })
  2709. }
  2710. this.saveDataLoading = false
  2711. }).catch(()=>{
  2712. this.saveDataLoading = false
  2713. })
  2714. },
  2715. // 删除所选技术参数卡
  2716. deleteChooseDataModal (row) {
  2717. this.$confirm(`是否删除该技术参数卡的变更?`, '提示', {
  2718. confirmButtonText: '确定',
  2719. cancelButtonText: '取消',
  2720. type: 'warning'
  2721. }).then(() => {
  2722. this.chooseDataList = this.chooseDataList.filter(a => {
  2723. return a.codeNo !== row.codeNo
  2724. })
  2725. })
  2726. },
  2727. // 根据人员编码查人员部门
  2728. getDepartmentByUserName () {
  2729. let tempData = {
  2730. site: this.$store.state.user.site,
  2731. username: this.modalData.applicantId
  2732. }
  2733. getDepartmentByUserName(tempData).then(({data}) => {
  2734. if (data.code === 0) {
  2735. this.modalData.applicationDepartmentId = data.rows[0].departmentNo
  2736. this.modalData.applicationDepartmentName = data.rows[0].departmentName
  2737. }
  2738. })
  2739. },
  2740. // 回车换行
  2741. focusNextInput (index, type) {
  2742. let aaa = ''
  2743. if (this.chooseDataList.length - 1 === index) {
  2744. aaa = `${type}0`
  2745. } else {
  2746. aaa = `${type}${index + 1}`
  2747. }
  2748. this.$nextTick(() => {
  2749. this.$refs[aaa].focus()
  2750. })
  2751. },
  2752. // 上传文件
  2753. uploadFileModal () {
  2754. this.uploadDialog = true
  2755. },
  2756. // 选择ECN种类模态框
  2757. chooseEcnTypeModal () {
  2758. this.EcnTypeModalFlag = true
  2759. },
  2760. // 查询ECN种类数据
  2761. getEcnTypeData () {
  2762. let tempData = {
  2763. site: this.$store.state.user.site
  2764. }
  2765. getEcnTypeData(tempData).then(({data}) => {
  2766. if (data.code === 0) {
  2767. this.form = data.rows
  2768. }
  2769. })
  2770. },
  2771. // 保存ECN种类
  2772. saveEcnTypeData () {
  2773. this.$message({
  2774. message: '操作成功',
  2775. type: 'success',
  2776. duration: 1500,
  2777. onClose: () => {}
  2778. })
  2779. this.EcnTypeModalFlag = false
  2780. },
  2781. // 选择模板属性
  2782. chooseModel () {
  2783. this.chooseModelData = {
  2784. site: this.$store.state.user.site,
  2785. itemNo: '',
  2786. itemDesc: '',
  2787. functionType: 'ECN',
  2788. codeNo: this.modelList.length > 0 ? this.modelList[0].codeNo : ''
  2789. }
  2790. // 先清空缓存选中
  2791. // this.$nextTick(() => this.$refs.itemTable.clearSelection())
  2792. getItemList(this.chooseModelData).then(({data}) => {
  2793. if (data && data.code === 0) {
  2794. this.itemList = data.rows
  2795. this.itemList.forEach(val => {
  2796. // 回显选中
  2797. if (this.chooseItemList.map(val => val.itemNo).includes(val.itemNo)) {
  2798. this.$nextTick(() => this.$refs.itemTable.toggleRowSelection(val, true))
  2799. }
  2800. })
  2801. } else {
  2802. this.$alert(data.msg, '错误', {
  2803. confirmButtonText: '确定'
  2804. })
  2805. }
  2806. })
  2807. this.chooseModelFlag = true
  2808. },
  2809. // 选择模板属性
  2810. chooseFeasibilityAssessmentModel () {
  2811. this.chooseModelData2 = {
  2812. site: this.$store.state.user.site,
  2813. itemNo: '',
  2814. itemDesc: '',
  2815. functionType: 'ECN',
  2816. codeNo: this.modelList2.length > 0 ? this.modelList2[0].codeNo : ''
  2817. }
  2818. // 先清空缓存选中
  2819. //this.$nextTick(() => this.$refs.itemTable2.clearSelection())
  2820. getItemList(this.chooseModelData2).then(({data}) => {
  2821. if (data && data.code === 0) {
  2822. this.itemList2 = data.rows
  2823. this.itemList2.forEach(val => {
  2824. // 回显选中
  2825. if (this.chooseItemList2.map(val => val.itemNo).includes(val.itemNo)) {
  2826. this.$nextTick(() => this.$refs.itemTable2.toggleRowSelection(val, true))
  2827. }
  2828. })
  2829. } else {
  2830. this.$alert(data.msg, '错误', {
  2831. confirmButtonText: '确定'
  2832. })
  2833. }
  2834. })
  2835. this.chooseModelFlag2 = true
  2836. },
  2837. // 查询属性
  2838. searchItemList () {
  2839. getItemList(this.chooseModelData).then(({data}) => {
  2840. if (data.code === 0) {
  2841. this.itemList = data.rows
  2842. }
  2843. })
  2844. },
  2845. // 查询属性
  2846. searchItemList2 () {
  2847. getItemList(this.chooseModelData2).then(({data}) => {
  2848. if (data.code === 0) {
  2849. this.itemList2 = data.rows
  2850. }
  2851. })
  2852. },
  2853. // 单机选择
  2854. itemClickRow (row) {
  2855. this.$refs.itemTable.toggleRowSelection(row)
  2856. },
  2857. // 复选属性
  2858. selectionItem (val) {
  2859. this.itemSelections = val
  2860. },
  2861. // 单机选择
  2862. itemClickRow2 (row) {
  2863. this.$refs.itemTable2.toggleRowSelection(row)
  2864. },
  2865. // 复选属性
  2866. selectionItem2 (val) {
  2867. this.itemSelections2 = val
  2868. },
  2869. // 确认多选属性
  2870. confirmItem () {
  2871. if (this.itemSelections.length === 0) {
  2872. this.$message.warning("请勾选属性!")
  2873. return
  2874. }
  2875. // 临时集合
  2876. let temp = []
  2877. // 首先,遍历a,检查每个对象的名字是否在b中也存在
  2878. this.chooseItemList.forEach(itemA => {
  2879. if (this.itemSelections.some(itemB => itemB.itemNo === itemA.itemNo)) {
  2880. // 如果存在,则将a中的对象添加到结果中(这里直接用a的原对象,因为要求是保留a中对象)
  2881. temp.push(itemA)
  2882. }
  2883. })
  2884. // 然后,遍历b,检查是否有对象的名字不在结果中已存在的名字中
  2885. this.itemSelections.forEach(itemB => {
  2886. if (!temp.some(itemR => itemR.itemNo === itemB.itemNo)) {
  2887. // 如果b中的对象名字不在结果中,则添加到结果中
  2888. temp.push(itemB)
  2889. }
  2890. })
  2891. this.chooseItemList = temp
  2892. this.chooseModelFlag = false
  2893. },
  2894. // 确认多选属性
  2895. confirmItem2 () {
  2896. if (this.itemSelections2.length === 0) {
  2897. this.$message.warning("请勾选属性!")
  2898. return
  2899. }
  2900. // 临时集合
  2901. let temp = []
  2902. // 首先,遍历a,检查每个对象的名字是否在b中也存在
  2903. this.chooseItemList2.forEach(itemA => {
  2904. if (this.itemSelections2.some(itemB => itemB.itemNo === itemA.itemNo)) {
  2905. // 如果存在,则将a中的对象添加到结果中(这里直接用a的原对象,因为要求是保留a中对象)
  2906. temp.push(itemA)
  2907. }
  2908. })
  2909. // 然后,遍历b,检查是否有对象的名字不在结果中已存在的名字中
  2910. this.itemSelections2.forEach(itemB => {
  2911. if (!temp.some(itemR => itemR.itemNo === itemB.itemNo)) {
  2912. // 如果b中的对象名字不在结果中,则添加到结果中
  2913. temp.push(itemB)
  2914. }
  2915. })
  2916. this.chooseItemList2 = temp.map(item => {
  2917. if (item.availableValueList.length > 0) {
  2918. item.chooseValue = item.availableValueList[0].availableValue
  2919. }
  2920. return item
  2921. })
  2922. this.chooseModelFlag2 = false
  2923. },
  2924. // 查询ECN的模板
  2925. getEcnModel () {
  2926. let tempData = {
  2927. site: this.$store.state.user.site,
  2928. functionType: 'ECN',
  2929. codeNo: 'E001'
  2930. }
  2931. getEcnModel(tempData).then(({data}) => {
  2932. if (data.code === 0) {
  2933. this.modelList = data.rows
  2934. }
  2935. })
  2936. },
  2937. // 查询ECN的评估模板
  2938. getEcnModel2 () {
  2939. let tempData = {
  2940. site: this.$store.state.user.site,
  2941. functionType: 'ECN',
  2942. codeNo: 'E002'
  2943. }
  2944. getEcnModel(tempData).then(({data}) => {
  2945. if (data.code === 0) {
  2946. this.modelList2 = data.rows
  2947. }
  2948. })
  2949. },
  2950. // 查询会签的模板
  2951. getEcnCSModel () {
  2952. let tempData = {
  2953. site: this.$store.state.user.site,
  2954. functionType: 'ECN',
  2955. codeNo: 'E003'
  2956. }
  2957. getEcnModel(tempData).then(({data}) => {
  2958. if (data.code === 0) {
  2959. this.modelCSList = data.rows
  2960. }
  2961. })
  2962. },
  2963. // 选择会签模板属性
  2964. chooseCSModel () {
  2965. this.chooseCSModelData = {
  2966. site: this.$store.state.user.site,
  2967. itemNo: '',
  2968. itemDesc: '',
  2969. functionType: 'ECN',
  2970. codeNo: this.modelCSList.length > 0 ? this.modelCSList[0].codeNo : ''
  2971. }
  2972. // 先清空缓存选中
  2973. // this.$nextTick(() => this.$refs.itemCSTable.clearSelection())
  2974. // 查询所有属性
  2975. getItemList(this.chooseCSModelData).then(({data}) => {
  2976. if (data && data.code === 0) {
  2977. this.itemCSList = data.rows
  2978. this.itemCSList.forEach(val => {
  2979. // 回显选中的部门
  2980. if (this.chooseCSItemList.map(val => val.itemNo).includes(val.itemNo)) {
  2981. this.$nextTick(() => this.$refs.itemCSTable.toggleRowSelection(val, true))
  2982. }
  2983. })
  2984. } else {
  2985. this.$alert(data.msg, '错误', {
  2986. confirmButtonText: '确定'
  2987. })
  2988. }
  2989. })
  2990. this.chooseCSModelFlag = true
  2991. },
  2992. // 查询CS属性
  2993. searchCSItemList () {
  2994. getItemList(this.chooseCSModelData).then(({data}) => {
  2995. if (data.code === 0) {
  2996. this.itemCSList = data.rows
  2997. }
  2998. })
  2999. },
  3000. // 单击选择
  3001. itemCSClickRow (row) {
  3002. this.$refs.itemCSTable.toggleRowSelection(row)
  3003. },
  3004. // 复选CS属性
  3005. selectionCSItem (val) {
  3006. this.itemCSSelections = val
  3007. },
  3008. // 确认多选CS属性
  3009. confirmCSItem () {
  3010. if (this.itemCSSelections.length === 0) {
  3011. this.$message.warning("请勾选属性!")
  3012. return
  3013. }
  3014. // 临时集合
  3015. let temp = []
  3016. // 首先,遍历a,检查每个对象的名字是否在b中也存在
  3017. this.chooseCSItemList.forEach(itemA => {
  3018. if (this.itemCSSelections.some(itemB => itemB.itemNo === itemA.itemNo)) {
  3019. // 如果存在,则将a中的对象添加到结果中(这里直接用a的原对象,因为要求是保留a中对象)
  3020. temp.push(itemA)
  3021. }
  3022. })
  3023. // 然后,遍历b,检查是否有对象的名字不在结果中已存在的名字中
  3024. this.itemCSSelections.forEach(itemB => {
  3025. if (!temp.some(itemR => itemR.itemNo === itemB.itemNo)) {
  3026. // 如果b中的对象名字不在结果中,则添加到结果中
  3027. temp.push(itemB)
  3028. }
  3029. })
  3030. this.chooseCSItemList = temp
  3031. this.chooseCSModelFlag = false
  3032. },
  3033. // 新增技术参数卡
  3034. addChangeDetail () {
  3035. technicalSpecificationSearch2(this.searchData2).then(({data}) => {
  3036. if (data.code === 0) {
  3037. this.dataList2 = data.rows
  3038. const shouldExclude = (item) => {
  3039. return this.chooseDataList.some(cdItem =>
  3040. cdItem.site === item.site && cdItem.codeNo === item.codeNo
  3041. )
  3042. }
  3043. this.dataList2 = this.dataList2.filter(item => !shouldExclude(item))
  3044. this.addDetailModal = true
  3045. } else {
  3046. this.dataList2 = []
  3047. }
  3048. })
  3049. },
  3050. // 确认选择技术参数卡
  3051. addDetail () {
  3052. if (this.dataSelections2.length === 0) {
  3053. this.$message.warning("请勾选技术参数卡!")
  3054. return
  3055. }
  3056. this.dataSelections2.forEach(item => {
  3057. // 确保没有重复的元素
  3058. if (!this.chooseDataList.some(cdItem => cdItem.site === item.site && cdItem.codeNo === item.codeNo)) {
  3059. this.chooseDataList.push(item)
  3060. }
  3061. })
  3062. this.addDetailModal = false
  3063. this.dataSelections2 = []
  3064. },
  3065. // 获取基础数据列表S
  3066. getBaseList (val, type) {
  3067. this.tagNo = val
  3068. this.tagNo1 = type
  3069. this.$nextTick(() => {
  3070. let strVal = ''
  3071. let conSql = ''
  3072. if (val === 103) {
  3073. if (type === 1) {
  3074. strVal = this.modalData.applicantId
  3075. } else if (type === 3) {
  3076. if (this.costImpactData.productionProductFlag !== 'Y') {
  3077. return
  3078. } else {
  3079. strVal = this.costImpactData.productionProductExecutor
  3080. }
  3081. } else if (type === 4) {
  3082. if (this.costImpactData.inventoryProductFlag !== 'Y') {
  3083. return
  3084. } else {
  3085. strVal = this.costImpactData.inventoryProductExecutor
  3086. }
  3087. } else if (type === 5) {
  3088. if (this.costImpactData.affectedFlag !== 'Y') {
  3089. return
  3090. } else {
  3091. strVal = this.costImpactData.affectedExecutor
  3092. }
  3093. }
  3094. // else if (type === 7) {
  3095. // strVal = this.tempExecutorRow.executor
  3096. // }
  3097. conSql = " and b.site = '" + this.$store.state.user.site + "'"
  3098. }
  3099. if (val === 133) {
  3100. strVal = this.tempPartRow.newPartNo
  3101. }
  3102. if (val === 2005) {
  3103. strVal = this.modalData.tpEngineerId
  3104. conSql = " and b.site = '" + this.$store.state.user.site + "'"
  3105. }
  3106. if (val === 2006) {
  3107. strVal = this.modalData.industrialEngineerId
  3108. conSql = " and b.site = '" + this.$store.state.user.site + "'"
  3109. }
  3110. if (val === 2007) {
  3111. strVal = this.modalData.cqcOperatorId
  3112. conSql = " and b.site = '" + this.$store.state.user.site + "'"
  3113. }
  3114. if (val === 2008) {
  3115. strVal = this.modalData.faiOperatorId
  3116. conSql = " and b.site = '" + this.$store.state.user.site + "'"
  3117. }
  3118. if (val === 2010) {
  3119. strVal = this.tempExecutorRow.executor
  3120. conSql = " and b.site = '" + this.$store.state.user.site + "'"
  3121. }
  3122. this.$refs.baseList.init(val, strVal, conSql)
  3123. })
  3124. },
  3125. // 列表方法的回调
  3126. getBaseData (val) {
  3127. if (this.tagNo === 103) {
  3128. if (this.tagNo1 === 1) {
  3129. this.modalData.applicantId = val.username
  3130. this.modalData.applicantName = val.user_display
  3131. this.getDepartmentByUserName()
  3132. } else if (this.tagNo1 === 3) {
  3133. this.costImpactData.productionProductExecutor = val.username
  3134. this.costImpactData.productionProductExecutorName = val.user_display
  3135. //this.$set(this.costImpactData,'productionProductExecutorName',val.user_display)
  3136. } else if (this.tagNo1 === 4) {
  3137. this.costImpactData.inventoryProductExecutor = val.username
  3138. this.costImpactData.inventoryProductExecutorName = val.user_display
  3139. //this.$set(this.costImpactData,'inventoryProductExecutorName',val.user_display)
  3140. } else if (this.tagNo1 === 5) {
  3141. this.costImpactData.affectedExecutor = val.username
  3142. this.costImpactData.affectedExecutorName = val.user_display
  3143. //this.$set(this.costImpactData,'affectedExecutorName',val.user_display)
  3144. }
  3145. // else if (this.tagNo1 === 7) {
  3146. // this.$set(this.tempExecutorRow,'executor',val.username)
  3147. // }
  3148. }
  3149. if (this.tagNo === 133) {
  3150. //this.tempPartRow.newPartNo = val.part_no
  3151. this.$set(this.tempPartRow,'newPartNo',val.part_no)
  3152. }
  3153. if (this.tagNo === 2005) {
  3154. this.modalData.tpEngineerId = val.username
  3155. this.modalData.tpEngineerName = val.user_display
  3156. }
  3157. if (this.tagNo === 2006) {
  3158. this.modalData.industrialEngineerId = val.username
  3159. this.modalData.industrialEngineerName = val.user_display
  3160. }
  3161. if (this.tagNo === 2007) {
  3162. this.modalData.cqcOperatorId = val.username
  3163. this.modalData.cqcOperatorName = val.user_display
  3164. }
  3165. if (this.tagNo === 2008) {
  3166. this.modalData.faiOperatorId = val.username
  3167. this.modalData.faiOperatorName = val.user_display
  3168. }
  3169. if (this.tagNo === 2010) {
  3170. this.$set(this.tempExecutorRow,'executor',val.username)
  3171. }
  3172. },
  3173. // 申请人输入校验
  3174. applicantBlur (tagNo) {
  3175. if (this.modalData.applicantId != null && this.modalData.applicantId !== '') {
  3176. let tempData = {
  3177. tagno: tagNo,
  3178. conditionSql: " and username = '" + this.modalData.applicantId + "'" + " and site = '" + this.modalData.site + "'"
  3179. }
  3180. verifyData(tempData).then(({data}) => {
  3181. if (data && data.code === 0) {
  3182. if (data.baseListData.length > 0) {
  3183. this.modalData.applicantId = data.baseListData[0].username
  3184. this.modalData.applicantName = data.baseListData[0].user_display
  3185. this.getDepartmentByUserName()
  3186. return
  3187. }
  3188. }
  3189. })
  3190. }
  3191. this.modalData.applicantName = ''
  3192. this.modalData.applicationDepartmentId = ''
  3193. this.modalData.applicationDepartmentName = ''
  3194. },
  3195. // 审批人员输入校验
  3196. tpEngineerBlur (tagNo) {
  3197. if (this.modalData.tpEngineerId != null && this.modalData.tpEngineerId !== '') {
  3198. let tempData = {
  3199. tagno: tagNo,
  3200. conditionSql: " and a.username = '" + this.modalData.tpEngineerId + "'" + " and b.site = '" + this.modalData.site + "'"
  3201. }
  3202. verifyData(tempData).then(({data}) => {
  3203. if (data && data.code === 0) {
  3204. if (data.baseListData.length > 0) {
  3205. this.modalData.tpEngineerId = data.baseListData[0].username
  3206. this.modalData.tpEngineerName = data.baseListData[0].user_display
  3207. return
  3208. }
  3209. }
  3210. })
  3211. }
  3212. this.modalData.tpEngineerName = ''
  3213. },
  3214. // I/E输入校验
  3215. industrialEngineerBlur (tagNo) {
  3216. if (this.modalData.industrialEngineerId != null && this.modalData.industrialEngineerId !== '') {
  3217. let tempData = {
  3218. tagno: tagNo,
  3219. conditionSql: " and a.username = '" + this.modalData.industrialEngineerId + "'" + " and b.site = '" + this.modalData.site + "'"
  3220. }
  3221. verifyData(tempData).then(({data}) => {
  3222. if (data && data.code === 0) {
  3223. if (data.baseListData.length > 0) {
  3224. this.modalData.industrialEngineerId = data.baseListData[0].username
  3225. this.modalData.industrialEngineerName = data.baseListData[0].user_display
  3226. return
  3227. }
  3228. }
  3229. })
  3230. }
  3231. this.modalData.industrialEngineerName = ''
  3232. },
  3233. // CQC输入校验
  3234. cqcOperatorBlur (tagNo) {
  3235. if (this.modalData.cqcOperatorId != null && this.modalData.cqcOperatorId !== '') {
  3236. let tempData = {
  3237. tagno: tagNo,
  3238. conditionSql: " and a.username = '" + this.modalData.cqcOperatorId + "'" + " and b.site = '" + this.modalData.site + "'"
  3239. }
  3240. verifyData(tempData).then(({data}) => {
  3241. if (data && data.code === 0) {
  3242. if (data.baseListData.length > 0) {
  3243. this.modalData.cqcOperatorId = data.baseListData[0].username
  3244. this.modalData.cqcOperatorName = data.baseListData[0].user_display
  3245. return
  3246. }
  3247. }
  3248. })
  3249. }
  3250. this.modalData.cqcOperatorName = ''
  3251. },
  3252. // FAI输入校验
  3253. faiOperatorBlur (tagNo) {
  3254. if (this.modalData.faiOperatorId != null && this.modalData.faiOperatorId !== '') {
  3255. let tempData = {
  3256. tagno: tagNo,
  3257. conditionSql: " and a.username = '" + this.modalData.faiOperatorId + "'" + " and b.site = '" + this.modalData.site + "'"
  3258. }
  3259. verifyData(tempData).then(({data}) => {
  3260. if (data && data.code === 0) {
  3261. if (data.baseListData.length > 0) {
  3262. this.modalData.faiOperatorId = data.baseListData[0].username
  3263. this.modalData.faiOperatorName = data.baseListData[0].user_display
  3264. return
  3265. }
  3266. }
  3267. })
  3268. }
  3269. this.modalData.faiOperatorName = ''
  3270. },
  3271. // ======== DelegateAccess 相关方法 ========
  3272. searchDelegateAccessByUser() {
  3273. // 角色 ROO7 的用户
  3274. let params = {
  3275. ...this.changeDelegateAccess,
  3276. site: this.$store.state.user.site,
  3277. }
  3278. searchDelegateAccessByUser(params).then(({data}) => {
  3279. if (data && data.code === 0) {
  3280. this.baseDelegateAccessList = data.rows;
  3281. // 不清空选中状态,依赖 :reserve-selection 保留之前的选择
  3282. } else {
  3283. this.$message.warning(data.msg)
  3284. }
  3285. }).catch((error) => {
  3286. this.$message.error(error)
  3287. })
  3288. },
  3289. handleSelectionChange(val) {
  3290. // val 只包含当前数据源中被选中的行
  3291. // 需要合并历史选择(selectionDelegateAccess)中不在当前数据源的人员
  3292. // 当前数据源中的所有人员编码
  3293. let currentDataKeys = this.baseDelegateAccessList.map(item => item.delegateAccess);
  3294. // 保留历史选择中不在当前数据源的人员(这些人员用户无法在当前对话框中取消选择)
  3295. let historyNotInCurrent = this.selectionDelegateAccess.filter(item =>
  3296. !currentDataKeys.includes(item.delegateAccess)
  3297. );
  3298. // 合并:历史人员(不在当前数据源)+ 当前选中的人员
  3299. let merged = [...historyNotInCurrent, ...val];
  3300. // 去重(虽然理论上不会重复)
  3301. let map = new Map();
  3302. merged.forEach(item => map.set(item.delegateAccess, item));
  3303. this.selectionDelegateAccess2 = Array.from(map.values());
  3304. },
  3305. handleTableClick(row, column, event, val) {
  3306. // 表格行点击选择
  3307. this.$refs[val].toggleRowSelection(row);
  3308. },
  3309. openDelegateAccess() {
  3310. // 恢复已确认选中的人员状态(仅限当前列表中存在的)
  3311. // 不清空选中状态,让 :reserve-selection 自动保留之前的选择
  3312. this.$nextTick(() => {
  3313. let rows = JSON.parse(JSON.stringify(this.selectionDelegateAccess))
  3314. if (rows && rows.length > 0 && this.$refs.delegateAccesstTable) {
  3315. rows.forEach(item => {
  3316. let row = this.baseDelegateAccessList.find(row => row.delegateAccess === item.delegateAccess);
  3317. if (row) { // 只对当前列表中存在的行进行选中操作
  3318. this.$refs.delegateAccesstTable.toggleRowSelection(row, true); // 明确设置为选中状态
  3319. }
  3320. })
  3321. }
  3322. })
  3323. },
  3324. closeDelegateAccess() {
  3325. this.selectionDelegateAccess2 = [];
  3326. },
  3327. confirmDelegateAccess() {
  3328. // selectionDelegateAccess2 已经在 handleSelectionChange 中合并了历史选择
  3329. // 直接保存即可
  3330. this.selectionDelegateAccess = JSON.parse(JSON.stringify(this.selectionDelegateAccess2))
  3331. this.delegateAccessVisible = false;
  3332. },
  3333. // ======== 导出相关方法 ========
  3334. /**
  3335. * 导出excel
  3336. */
  3337. async createExportData () {
  3338. this.searchData.limit = -1
  3339. this.searchData.page = 1
  3340. await technicalSpecificationSearch(this.searchData).then(({data}) => {
  3341. this.resultList = data.page.list
  3342. })
  3343. return this.resultList
  3344. },
  3345. startDownload () {},
  3346. finishDownload () {},
  3347. fields () {
  3348. let json = '{'
  3349. this.columnList.forEach((item, index) => {
  3350. if (index == this.columnList.length - 1) {
  3351. json += '"' + item.columnLabel + '"' + ':' + '"' + item.columnProp + '"'
  3352. } else {
  3353. json += '"' + item.columnLabel + '"' + ':' + '"' + item.columnProp + '"' + ','
  3354. }
  3355. })
  3356. json += '}'
  3357. let s = eval('(' + json + ')')
  3358. return s
  3359. },
  3360. queryByAnyField(params){
  3361. params.no = this.pageIndex
  3362. params.size = this.pageSize
  3363. params.site = this.$store.state.user.site
  3364. params.userId = this.$store.state.user.id.toString()
  3365. this.dataListLoading = true;
  3366. technicalSpecificationSearchAny(params).then(({data})=>{
  3367. if (data && data.code === 0){
  3368. this.dataList = data.page.list
  3369. this.totalPage = data.page.totalCount
  3370. }else {
  3371. this.$message.warning(data.msg)
  3372. }
  3373. this.dataListLoading = false;
  3374. }).catch((error)=>{
  3375. this.$message.error(error)
  3376. this.dataListLoading = false;
  3377. })
  3378. this.filterSearchData = params
  3379. this.isFilterSearch = true
  3380. this.filterVisible = false
  3381. },
  3382. }
  3383. }
  3384. </script>
  3385. <style scoped lang="scss">
  3386. .numInput /deep/ .el-input__inner{
  3387. text-align: right;
  3388. }
  3389. /deep/ .inlineNumber input::-webkit-outer-spin-button,
  3390. /deep/ .inlineNumber input::-webkit-inner-spin-button {
  3391. -webkit-appearance: none;
  3392. }
  3393. /deep/ .inlineNumber input[type="number"]{
  3394. -moz-appearance: textfield;
  3395. padding-right: 5px !important;
  3396. }
  3397. </style>