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.

5004 lines
202 KiB

2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
8 months ago
8 months ago
2 years ago
11 months ago
8 months 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
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
8 months ago
8 months ago
2 years ago
11 months ago
8 months 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
2 years ago
2 years ago
2 years ago
8 months ago
8 months ago
11 months ago
8 months ago
11 months ago
8 months ago
8 months ago
8 months ago
8 months ago
2 years ago
11 months ago
8 months ago
11 months ago
2 years ago
2 years ago
2 years ago
2 years ago
8 months ago
8 months ago
8 months ago
8 months ago
2 years ago
9 months ago
12 months ago
12 months ago
12 months ago
2 years ago
2 years ago
2 years ago
2 years ago
8 months 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
12 months ago
2 years ago
2 years ago
2 years ago
2 years ago
11 months ago
8 months 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
2 years ago
9 months 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
2 years ago
2 years ago
2 years ago
12 months ago
2 years ago
12 months ago
2 years ago
12 months ago
2 years ago
12 months ago
2 years ago
12 months ago
2 years ago
12 months ago
2 years ago
12 months ago
2 years ago
12 months ago
2 years ago
12 months ago
2 years ago
12 months ago
2 years ago
12 months ago
2 years ago
12 months ago
2 years ago
12 months ago
2 years ago
12 months ago
2 years ago
12 months ago
2 years ago
12 months ago
2 years ago
12 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
2 years ago
12 months ago
11 months ago
2 years ago
2 years ago
2 years ago
12 months 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
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
11 months ago
8 months 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
8 months ago
8 months ago
2 years 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
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: 130px">
  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="申请编码">
  16. <el-input v-model="searchData.changeNo" clearable style="width: 120px"></el-input>
  17. </el-form-item>
  18. <el-form-item label="变更单状态">
  19. <el-select v-model="searchData.changeStatus" clearable style="width: 100px">
  20. <el-option label="草稿" value="草稿"></el-option>
  21. <el-option label="审批中" value="审批中"></el-option>
  22. <el-option label="已完成" value="已完成"></el-option>
  23. </el-select>
  24. </el-form-item>
  25. <el-form-item :label="' '">
  26. <el-button v-if="authSearch" @click="getDataList">查询</el-button>
  27. <download-excel
  28. :fields="fields()"
  29. :data="exportData"
  30. type="xls"
  31. :name="exportName"
  32. :header="exportHeader"
  33. :footer="exportFooter"
  34. :fetch="createExportData"
  35. :before-generate="startDownload"
  36. :before-finish="finishDownload"
  37. worksheet="导出信息"
  38. class="el-button el-button--primary el-button--medium">
  39. {{ "导出" }}
  40. </download-excel>
  41. </el-form-item>
  42. </el-form>
  43. <!-- 变更记录列表 -->
  44. <el-table
  45. :height="height"
  46. :data="dataList"
  47. border
  48. :row-style="rowStyle"
  49. ref="changeTable"
  50. @row-click="changeClickRow"
  51. @current-change="currentChange"
  52. style="width: 100%;">
  53. <el-table-column
  54. v-for="(item,index) in columnList" :key="index"
  55. :sortable="item.columnSortable"
  56. :prop="item.columnProp"
  57. :header-align="item.headerAlign"
  58. :show-overflow-tooltip="item.showOverflowTooltip"
  59. :align="item.align"
  60. :fixed="item.fixed === ''?false:item.fixed"
  61. :min-width="item.columnWidth"
  62. :label="item.columnLabel">
  63. <template slot-scope="scope">
  64. <span v-if="!item.columnHidden">{{ scope.row[item.columnProp] }}</span>
  65. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
  66. </template>
  67. </el-table-column>
  68. <el-table-column
  69. fixed="right"
  70. header-align="center"
  71. align="center"
  72. width="100"
  73. label="操作">
  74. <template slot-scope="scope">
  75. <el-link v-if="authUpdate && scope.row.changeStatus !== '已完成'" style="cursor: pointer" @click="updateModal(scope.row)">编辑</el-link>
  76. <el-link v-if="authIssue && scope.row.changeStatus === '草稿'" style="cursor: pointer" @click="issueModal(scope.row)">下达</el-link>
  77. </template>
  78. </el-table-column>
  79. </el-table>
  80. <!-- 分页插件 -->
  81. <el-pagination style="margin-top: 0px"
  82. @size-change="sizeChangeHandle"
  83. @current-change="currentChangeHandle"
  84. :current-page="pageIndex"
  85. :page-sizes="[20, 50, 100, 200, 500]"
  86. :page-size="pageSize"
  87. :total="totalPage"
  88. layout="total, sizes, prev, pager, next, jumper">
  89. </el-pagination>
  90. <!-- 变更单模态框 -->
  91. <el-dialog :title="changeTitle" :close-on-click-modal="false" top="10vh" v-drag :visible.sync="modalFlag" width="1060px" :showClose="false">
  92. <el-tabs tab-position="left" type="border-card" v-model="activeName" @tab-click="refreshChangeTab" style="width: 100%;height: 720px;">
  93. <el-tab-pane label="基本信息" name="basicInformation" v-loading="submitLoading">
  94. <div style="height: 675px">
  95. <el-form :inline="true" label-position="top" :model="modalData" :rules="rules" style="margin-top: -5px;">
  96. <el-form-item prop="applicantId" :rules="rules.applicantId">
  97. <span v-if="changeRequestFlag('applicantId') === 'N'" slot="label">申请人/Applicant</span>
  98. <span v-else style="cursor: pointer" slot="label" @click="getBaseList(103, 1)"><a herf="#">申请人/Applicant</a></span>
  99. <el-input v-model="modalData.applicantId" @blur="applicantBlur(103)" :disabled="changeRequestFlag('applicantId') === 'N'" style="width: 120px"></el-input>
  100. <el-input v-model="modalData.applicantName" disabled style="width: 293px"></el-input>
  101. </el-form-item>
  102. <el-form-item label="申请部门/Department">
  103. <el-input v-model="modalData.applicationDepartmentId" disabled style="width: 120px"></el-input>
  104. <el-input v-model="modalData.applicationDepartmentName" disabled style="width: 293px"></el-input>
  105. </el-form-item>
  106. </el-form>
  107. <el-form :inline="true" label-position="top" :model="modalData" :rules="rules">
  108. <el-form-item label="申请日期/Apply Date" prop="applyDate" :rules="rules.applyDate">
  109. <el-date-picker
  110. :disabled="changeRequestFlag('applyDate') === 'N'"
  111. style="width: 205px"
  112. v-model="modalData.applyDate"
  113. type="date"
  114. value-format="yyyy-MM-dd"
  115. placeholder="请选择日期"
  116. :editable=false>
  117. </el-date-picker>
  118. </el-form-item>
  119. <!-- <el-form-item label="ECN变更影响" prop="changeImpact" :rules="rules.changeImpact">-->
  120. <!-- <dict-data-select v-model="modalData.changeImpact" :disabled="changeRequestFlag('changeImpact') === 'N'" style="width: 205px" dict-type="change_change_Impact"></dict-data-select>-->
  121. <!-- </el-form-item>-->
  122. <el-form-item label="变更影响描述/Description">
  123. <el-input v-model="modalData.changeImpactDesc" :disabled="changeRequestFlag('changeImpactDesc') === 'N'" style="width: 629px"></el-input>
  124. </el-form-item>
  125. </el-form>
  126. <el-form :inline="true" label-position="top" :model="modalData" :rules="rules">
  127. <el-form-item label="ECN阶段/Stage" prop="ecnStage" :rules="rules.ecnStage">
  128. <dict-data-select v-model="modalData.ecnStage" :disabled="changeRequestFlag('ecnStage') === 'N'" style="width: 95px" dict-type="change_ecn_stage"></dict-data-select>
  129. </el-form-item>
  130. <el-form-item label="变更类别/Change Category" prop="changeType" :rules="rules.changeType">
  131. <dict-data-select v-model="modalData.changeType" :disabled="changeRequestFlag('changeType') === 'N'" style="width: 160px" dict-type="change_change_type"></dict-data-select>
  132. </el-form-item>
  133. <el-form-item label="ECN种类/ECN Category" prop="ecnType" :rules="rules.ecnType">
  134. <dict-data-select v-model="modalData.ecnType" :disabled="changeRequestFlag('ecnType') === 'N'" style="width: 160px" dict-type="change_ecn_type"></dict-data-select>
  135. </el-form-item>
  136. <el-form-item label=" " style="margin-left: -10px">
  137. <el-button :disabled="changeRequestFlag('ecnType') === 'N'" type="primary" @click="chooseEcnTypeModal" style="width: 70px">ECN种类</el-button>
  138. </el-form-item>
  139. <el-form-item label="变更生效日期/Change Effictive Date" prop="changePhaseInDate" :rules="rules.changePhaseInDate" style="margin-left: -10px">
  140. <el-date-picker
  141. :disabled="changeRequestFlag('changePhaseInDate') === 'N'"
  142. style="width: 205px"
  143. v-model="modalData.changePhaseInDate"
  144. type="date"
  145. value-format="yyyy-MM-dd"
  146. placeholder="请选择日期"
  147. :editable=false>
  148. </el-date-picker>
  149. </el-form-item>
  150. <!-- <el-form-item label="印刷方式" prop="printing" :rules="rules.printing">-->
  151. <!-- <dict-data-select v-model="modalData.printing" style="width: 205px" dict-type="change_printing"></dict-data-select>-->
  152. <!-- </el-form-item>-->
  153. <el-form-item label="是否DF产品/DF(Y/N)" prop="dfIsProduct" :rules="rules.dfIsProduct">
  154. <dict-data-select v-model="modalData.dfIsProduct" :disabled="changeRequestFlag('dfIsProduct') === 'N'" style="width: 108px" dict-type="change_df_is_product"></dict-data-select>
  155. </el-form-item>
  156. </el-form>
  157. <el-form :inline="true" label-position="top" :model="modalData" :rules="rules">
  158. <el-form-item prop="tpEngineerId" :rules="rules.tpEngineerId">
  159. <span v-if="changeRequestFlag('tpEngineerId') === 'N'" slot="label">TP工程师/TP Engineer</span>
  160. <span v-else style="cursor: pointer" slot="label" @click="getBaseList(2005)"><a herf="#">TP工程师</a></span>
  161. <el-input v-model="modalData.tpEngineerId" @blur="tpEngineerBlur(2005)" :disabled="changeRequestFlag('tpEngineerId') === 'N'" style="width: 120px"></el-input>
  162. <el-input v-model="modalData.tpEngineerName" disabled style="width: 293px"></el-input>
  163. </el-form-item>
  164. <el-form-item label=" " :required="modalData.dfIsProduct === 'I'" prop="industrialEngineerId" :show-message="false">
  165. <span v-if="changeRequestFlag('industrialEngineerId') === 'N'" slot="label">关务人员/Customs</span>
  166. <span v-else style="cursor: pointer" slot="label" @click="getBaseList(2006)"><a herf="#">关务人员/Customs</a></span>
  167. <el-input v-model="modalData.industrialEngineerId" @blur="industrialEngineerBlur(2006)" :disabled="changeRequestFlag('industrialEngineerId') === 'N'" style="width: 120px"></el-input>
  168. <el-input v-model="modalData.industrialEngineerName" disabled style="width: 293px"></el-input>
  169. </el-form-item>
  170. <!-- <el-form-item label="制造成本是否变更" prop="manufacturingCostIsChange" :rules="rules.manufacturingCostIsChange">-->
  171. <!-- <dict-data-select v-model="modalData.manufacturingCostIsChange" style="width: 205px" dict-type="change_manufacturing_cost_is_change"></dict-data-select>-->
  172. <!-- </el-form-item>-->
  173. </el-form>
  174. <el-form :inline="true" label-position="top" :model="modalData">
  175. <el-form-item label=" ">
  176. <span v-if="changeRequestFlag('cqcOperatorId') === 'N'" slot="label">质检人员/CQC</span>
  177. <span v-else style="cursor: pointer" slot="label" @click="getBaseList(2007)"><a herf="#">质检人员/CQC</a></span>
  178. <el-input v-model="modalData.cqcOperatorId" @blur="cqcOperatorBlur(2007)" :disabled="changeRequestFlag('cqcOperatorId') === 'N'" style="width: 120px"></el-input>
  179. <el-input v-model="modalData.cqcOperatorName" disabled style="width: 293px"></el-input>
  180. </el-form-item>
  181. <el-form-item label=" ">
  182. <span v-if="changeRequestFlag('faiOperatorId') === 'N'" slot="label">首件检测/FAI</span>
  183. <span v-else style="cursor: pointer" slot="label" @click="getBaseList(2008)"><a herf="#">首件检测/FAI</a></span>
  184. <el-input v-model="modalData.faiOperatorId" @blur="faiOperatorBlur(2008)" :disabled="changeRequestFlag('faiOperatorId') === 'N'" style="width: 120px"></el-input>
  185. <el-input v-model="modalData.faiOperatorName" disabled style="width: 293px"></el-input>
  186. </el-form-item>
  187. </el-form>
  188. <el-form :inline="true" label-position="top" :model="modalData" :rules="rules">
  189. <el-form-item label="变更要求描述/Requirements Desc." prop="changeRequestDesc" :rules="rules.changeRequestDesc">
  190. <el-input type="textarea" v-model="modalData.changeRequestDesc" :disabled="changeRequestFlag('changeRequestDesc') === 'N'" :rows="3" resize='none' show-word-limit style="width: 636px;height: 30px"></el-input>
  191. </el-form-item>
  192. <!-- <el-form-item label="是否重新报价" prop="isReQuote" :rules="rules.isReQuote">-->
  193. <!-- <dict-data-select v-model="modalData.isReQuote" style="width: 205px" dict-type="change_is_re_quote"></dict-data-select>-->
  194. <!-- </el-form-item>-->
  195. <el-form-item label="印刷方式/Print Type" prop="printing" :rules="rules.printing">
  196. <dict-data-select v-model="modalData.printing" :disabled="changeRequestFlag('printing') === 'N'" style="width: 198px" dict-type="change_printing"></dict-data-select>
  197. </el-form-item>
  198. </el-form>
  199. <!-- <el-form :inline="true" label-position="top" :model="modalData" :rules="rules" style="margin-top: 50px">-->
  200. <!-- <el-form-item label="原产品是否UL认证要求" prop="ulCertificationRequirements" :rules="rules.ulCertificationRequirements">-->
  201. <!-- <dict-data-select v-model="modalData.ulCertificationRequirements" style="width: 423px" dict-type="change_ul_certification_requirements"></dict-data-select>-->
  202. <!-- </el-form-item>-->
  203. <!-- <el-form-item label="如果有,变更后能否继续满足此需求" prop="ulContinueToMeetDemand" :rules="rules.ulContinueToMeetDemand">-->
  204. <!-- <dict-data-select v-model="modalData.ulContinueToMeetDemand" style="width: 423px" dict-type="change_ul_continue_to_meet_demand"></dict-data-select>-->
  205. <!-- </el-form-item>-->
  206. <!-- </el-form>-->
  207. <!-- <el-form :inline="true" label-position="top" :model="modalData" :rules="rules">-->
  208. <!-- <el-form-item label="原产品是否GP要求" prop="gpCertificationRequirements" :rules="rules.gpCertificationRequirements">-->
  209. <!-- <dict-data-select v-model="modalData.gpCertificationRequirements" style="width: 423px" dict-type="change_gp_certification_requirements"></dict-data-select>-->
  210. <!-- </el-form-item>-->
  211. <!-- <el-form-item label="如果有,变更后能否继续满足此需求" prop="gpContinueToMeetDemand" :rules="rules.gpContinueToMeetDemand">-->
  212. <!-- <dict-data-select v-model="modalData.gpContinueToMeetDemand" style="width: 423px" dict-type="change_gp_continue_to_meet_demand"></dict-data-select>-->
  213. <!-- </el-form-item>-->
  214. <!-- </el-form>-->
  215. <el-form :inline="true" label-position="top" style="margin-top: 50px">
  216. <el-button type="primary" @click="addChangeDetail">新增</el-button>
  217. <div class="rq">
  218. <el-table
  219. :data="chooseDataList"
  220. height="320px"
  221. border
  222. style="width:100%">
  223. <!-- <el-table-column-->
  224. <!-- v-for="(item,index) in columnChooseDataList" :key="index"-->
  225. <!-- :sortable="item.columnSortable"-->
  226. <!-- :prop="item.columnProp"-->
  227. <!-- :header-align="item.headerAlign"-->
  228. <!-- :show-overflow-tooltip="item.showOverflowTooltip"-->
  229. <!-- :align="item.align"-->
  230. <!-- :fixed="item.fixed == ''?false:item.fixed"-->
  231. <!-- :min-width="item.columnWidth"-->
  232. <!-- :label="item.columnLabel">-->
  233. <!-- <template slot-scope="scope">-->
  234. <!-- <span v-if="!item.columnHidden">{{scope.row[item.columnProp]}}</span>-->
  235. <!-- <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>-->
  236. <!-- </template>-->
  237. <!-- </el-table-column>-->
  238. <el-table-column label="PLM物料编码" header-align="center">
  239. <el-table-column
  240. prop="plmPartNo"
  241. header-align="center"
  242. align="left"
  243. min-width="120"
  244. label="PLM Part No.">
  245. </el-table-column>
  246. </el-table-column>
  247. <el-table-column label="IFS物料编码" header-align="center">
  248. <el-table-column
  249. prop="ifsPartNo"
  250. header-align="center"
  251. align="left"
  252. min-width="120"
  253. label="IFS Part No.">
  254. </el-table-column>
  255. </el-table-column>
  256. <el-table-column label="物料名称" header-align="center">
  257. <el-table-column
  258. prop="partDesc"
  259. header-align="center"
  260. align="left"
  261. min-width="180"
  262. label="Part Desc.">
  263. </el-table-column>
  264. </el-table-column>
  265. <el-table-column label="图纸编码" header-align="center">
  266. <el-table-column
  267. prop="drawingNo"
  268. header-align="center"
  269. align="center"
  270. min-width="100"
  271. label="Drawing No.">
  272. </el-table-column>
  273. </el-table-column>
  274. <el-table-column label="图稿编码" header-align="center">
  275. <el-table-column
  276. prop="draftNo"
  277. header-align="center"
  278. align="center"
  279. min-width="100"
  280. label="Proof No.">
  281. </el-table-column>
  282. </el-table-column>
  283. <el-table-column label="IFS料号" header-align="center">
  284. <el-table-column
  285. prop=""
  286. header-align="center"
  287. align="center"
  288. min-width="170"
  289. label="New IFS Part No.">
  290. <template slot-scope="scope">
  291. <el-input :disabled="changeRequestDetailFlag('newPartNo') === 'N'" @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>
  292. <el-button :disabled="changeRequestDetailFlag('newPartNo') === 'N'" type="primary" @click="choosePartNo(scope.row)" style="width:18%;padding: 3px 7px">·&nbsp;·&nbsp;·</el-button>
  293. </template>
  294. </el-table-column>
  295. </el-table-column>
  296. <el-table-column label="新图纸编码" header-align="center">
  297. <el-table-column
  298. prop=""
  299. header-align="center"
  300. align="center"
  301. min-width="110"
  302. label="New Drawing No.">
  303. <template slot-scope="scope">
  304. <el-input :disabled="changeRequestDetailFlag('newDrawingNo') === 'N'" :ref="`newDrawingNo${scope.$index}`" v-model="scope.row.newDrawingNo" @keyup.enter.native="focusNextInput(scope.$index, 'newDrawingNo')" style="width:98%"></el-input>
  305. </template>
  306. </el-table-column>
  307. </el-table-column>
  308. <el-table-column label="新图稿编码" header-align="center">
  309. <el-table-column
  310. prop=""
  311. header-align="center"
  312. align="center"
  313. min-width="100"
  314. label="New Proof No.">
  315. <template slot-scope="scope">
  316. <el-input :disabled="changeRequestDetailFlag('newDraftNo') === 'N'" :ref="`newDraftNo${scope.$index}`" v-model="scope.row.newDraftNo" @keyup.enter.native="focusNextInput(scope.$index, 'newDraftNo')" style="width:98%"></el-input>
  317. </template>
  318. </el-table-column>
  319. </el-table-column>
  320. <el-table-column
  321. fixed="right"
  322. header-align="center"
  323. align="center"
  324. width="60"
  325. label="操作">
  326. <template slot-scope="scope">
  327. <el-link style="cursor: pointer" @click="deleteChooseDataModal(scope.row)">删除</el-link>
  328. </template>
  329. </el-table-column>
  330. </el-table>
  331. </div>
  332. </el-form>
  333. </div>
  334. <el-footer style="height:25px;text-align:center">
  335. <template v-if="modalData.changeStatus === '草稿' || (modalData.createBy2 && modalData.createBy2.split(';').includes(createBy2) && modalData.changeStatus === '审批中')">
  336. <el-button type="primary" :loading="saveLoading" @click="saveData">保存</el-button>
  337. </template>
  338. <el-button type="primary" @click="modalFlag = false">关闭</el-button>
  339. <template v-if="superAdmin || (modalData.createBy2 && modalData.createBy2.split(';').includes(createBy2))">
  340. <template v-if="authSubmit">
  341. <el-button v-if="modalData.changeStatus === '审批中' && modalData.tpProcessControl !== 'Y' && modalData.csProcessControl !== 'Y'" type="primary" :loading="submitLoading" @click="agreeSubmit">同意</el-button>
  342. </template>
  343. <template v-if="authReject">
  344. <el-button v-if="modalData.changeStatus === '审批中' && modalData.isReject === 'Y'" type="primary" :loading="submitLoading" @click="submitDataModal">驳回</el-button>
  345. </template>
  346. </template>
  347. </el-footer>
  348. </el-tab-pane>
  349. <el-tab-pane label="库存成本影响" name="inventoryCostImpact" v-loading="submitLoading">
  350. <div style="height: 675px">
  351. <el-form :inline="true" label-position="top" :model="costImpactData" style="margin-top: -5px;">
  352. <el-form-item style="margin-top: 7px;width: 155px">
  353. <el-checkbox :disabled="changeCostImpactFlag('productionProductFlag') === 'N'" v-model="costImpactData.productionProductFlag" true-label="Y">在制品<br>On-line product</el-checkbox>
  354. </el-form-item>
  355. <el-form-item style="margin-left: 50px" label="数量/Qty.">
  356. <el-input class="inlineNumber numInput" v-model="costImpactData.productionProductNumber" :disabled="costImpactData.productionProductFlag !== 'Y' || changeCostImpactFlag('productionProductNumber') === 'N'" type="number" style="width: 100px"></el-input>
  357. </el-form-item>
  358. <el-form-item label="处理意见/Disposition">
  359. <!-- <dict-data-select v-model="costImpactData.productionProductOpinions" :disabled="costImpactData.productionProductFlag !== 'Y' || changeCostImpactFlag('productionProductOpinions') === 'N'" style="width: 200px" dict-type="change_production_product_opinions"></dict-data-select>-->
  360. <el-input v-model="costImpactData.productionProductOpinions" :disabled="costImpactData.productionProductFlag !== 'Y' || changeCostImpactFlag('productionProductOpinions') === 'N'" style="width: 200px"></el-input>
  361. </el-form-item>
  362. <el-form-item label="报废金额/Scrap Amount">
  363. <el-input class="inlineNumber numInput" v-model="costImpactData.productionProductScrapAmount" :disabled="costImpactData.productionProductFlag !== 'Y' || changeCostImpactFlag('productionProductScrapAmount') === 'N'" @input="handleInput(costImpactData.productionProductScrapAmount,1)" type="number" style="width: 140px"></el-input>
  364. </el-form-item>
  365. <!-- <el-form-item label=" " style="margin-left: -10px">-->
  366. <!-- <el-input v-model="costImpactData.productionProductRemark" :disabled="costImpactData.productionProductFlag !== 'Y'" style="width: 300px"></el-input>-->
  367. <!-- </el-form-item>-->
  368. <el-form-item>
  369. <span v-if="costImpactData.productionProductFlag !== 'Y' || changeCostImpactFlag('productionProductExecutor') === 'N'" slot="label">执行人/Executor</span>
  370. <span v-else style="cursor: pointer" slot="label" @click="getBaseList(103, 3)"><a herf="#">执行人/Executor</a></span>
  371. <el-input v-model="costImpactData.productionProductExecutorName" readonly :disabled="costImpactData.productionProductFlag !== 'Y' || changeCostImpactFlag('productionProductExecutor') === 'N'" style="width: 130px"></el-input>
  372. </el-form-item>
  373. </el-form>
  374. <el-form :inline="true" label-position="top" :model="costImpactData" style="margin-top: 10px;">
  375. <el-form-item style="margin-top: 7px;width: 155px">
  376. <el-checkbox :disabled="changeCostImpactFlag('inventoryProductFlag') === 'N'" v-model="costImpactData.inventoryProductFlag" true-label="Y">成品库存<br>FG Stock</el-checkbox>
  377. </el-form-item>
  378. <el-form-item style="margin-left: 50px" label="数量/Qty.">
  379. <el-input class="inlineNumber numInput" v-model="costImpactData.inventoryProductNumber" :disabled="costImpactData.inventoryProductFlag !== 'Y' || changeCostImpactFlag('inventoryProductNumber') === 'N'" type="number" style="width: 100px"></el-input>
  380. </el-form-item>
  381. <el-form-item label="处理意见/Disposition">
  382. <!-- <dict-data-select v-model="costImpactData.inventoryProductOpinions" :disabled="costImpactData.inventoryProductFlag !== 'Y' || changeCostImpactFlag('inventoryProductOpinions') === 'N'" style="width: 200px" dict-type="change_inventory_product_opinions"></dict-data-select>-->
  383. <el-input v-model="costImpactData.inventoryProductOpinions" :disabled="costImpactData.inventoryProductFlag !== 'Y' || changeCostImpactFlag('inventoryProductOpinions') === 'N'" style="width: 200px"></el-input>
  384. </el-form-item>
  385. <el-form-item label="报废金额/Scrap Amount">
  386. <el-input class="inlineNumber numInput" v-model="costImpactData.inventoryProductScrapAmount" :disabled="costImpactData.inventoryProductFlag !== 'Y' || changeCostImpactFlag('inventoryProductScrapAmount') === 'N'" @input="handleInput(costImpactData.inventoryProductScrapAmount,2)" type="number" style="width: 140px"></el-input>
  387. </el-form-item>
  388. <!-- <el-form-item label=" " style="margin-left: -10px">-->
  389. <!-- <el-input v-model="costImpactData.inventoryProductRemark" :disabled="costImpactData.inventoryProductFlag !== 'Y'" style="width: 300px"></el-input>-->
  390. <!-- </el-form-item>-->
  391. <el-form-item>
  392. <span v-if="costImpactData.inventoryProductFlag !== 'Y' || changeCostImpactFlag('inventoryProductExecutor') === 'N'" slot="label">执行人/Executor</span>
  393. <span v-else style="cursor: pointer" slot="label" @click="getBaseList(103, 4)"><a herf="#">执行人/Executor</a></span>
  394. <el-input v-model="costImpactData.inventoryProductExecutorName" readonly :disabled="costImpactData.inventoryProductFlag !== 'Y' || changeCostImpactFlag('inventoryProductExecutor') === 'N'" style="width: 130px"></el-input>
  395. </el-form-item>
  396. </el-form>
  397. <el-form :inline="true" label-position="top" :model="costImpactData" style="margin-top: 10px;">
  398. <el-form-item style="margin-top: 7px;width: 155px">
  399. <el-checkbox :disabled="changeCostImpactFlag('newOrderFlag') === 'N'" v-model="costImpactData.newOrderFlag" true-label="Y">新订单<br>New Order</el-checkbox>
  400. </el-form-item>
  401. <el-form-item style="margin-left: 50px" label="数量/Qty.">
  402. <el-input class="inlineNumber numInput" v-model="costImpactData.newOrderNumber" :disabled="costImpactData.newOrderFlag !== 'Y' || changeCostImpactFlag('newOrderNumber') === 'N'" type="number" style="width: 100px"></el-input>
  403. </el-form-item>
  404. </el-form>
  405. <el-form :inline="true" label-position="top" :model="costImpactData" style="margin-top: 10px;">
  406. <el-form-item style="margin-top: 7px;width: 155px">
  407. <el-checkbox :disabled="changeCostImpactFlag('affectedFlag') === 'N'" v-model="costImpactData.affectedFlag" true-label="Y">影响的原材料及其库存量<br>Raw material influencing and stock</el-checkbox>
  408. </el-form-item>
  409. <el-form-item style="margin-left: 50px" label="数量/Qty.">
  410. <el-input class="inlineNumber numInput" v-model="costImpactData.affectedNumber" :disabled="costImpactData.affectedFlag !== 'Y' || changeCostImpactFlag('affectedNumber') === 'N'" type="number" style="width: 100px"></el-input>
  411. </el-form-item>
  412. <el-form-item label="处理意见/Disposition">
  413. <!-- <dict-data-select v-model="costImpactData.affectedOpinions" :disabled="costImpactData.affectedFlag !== 'Y' || changeCostImpactFlag('affectedOpinions') === 'N'" style="width: 200px" dict-type="change_affected_opinions"></dict-data-select>-->
  414. <el-input v-model="costImpactData.affectedOpinions" :disabled="costImpactData.affectedFlag !== 'Y' || changeCostImpactFlag('affectedOpinions') === 'N'" style="width: 200px"></el-input>
  415. </el-form-item>
  416. <el-form-item label="报废金额/Scrap Amount">
  417. <el-input class="inlineNumber numInput" v-model="costImpactData.affectedScrapAmount" :disabled="costImpactData.affectedFlag !== 'Y' || changeCostImpactFlag('affectedScrapAmount') === 'N'" @input="handleInput(costImpactData.affectedScrapAmount,3)" type="number" style="width: 140px"></el-input>
  418. </el-form-item>
  419. <!-- <el-form-item label=" " style="margin-left: -10px">-->
  420. <!-- <el-input v-model="costImpactData.affectedRemark" :disabled="costImpactData.affectedFlag !== 'Y'" style="width: 300px"></el-input>-->
  421. <!-- </el-form-item>-->
  422. <el-form-item>
  423. <span v-if="costImpactData.affectedFlag !== 'Y' || changeCostImpactFlag('affectedExecutor') === 'N'" slot="label">执行人/Executor</span>
  424. <span v-else style="cursor: pointer" slot="label" @click="getBaseList(103, 5)"><a herf="#">执行人/Executor</a></span>
  425. <el-input v-model="costImpactData.affectedExecutorName" readonly :disabled="costImpactData.affectedFlag !== 'Y' || changeCostImpactFlag('affectedExecutor') === 'N'" style="width: 130px"></el-input>
  426. </el-form-item>
  427. </el-form>
  428. <el-form :inline="true" label-position="top" :model="costImpactData" style="margin-top: 10px;">
  429. <el-form-item label="ECN变更总成本/Total ECN Cost">
  430. <el-input class="inlineNumber numInput" v-model="totalCost" type="number" readonly style="width: 205px"></el-input>
  431. </el-form-item>
  432. <el-form-item label="备注/Remark">
  433. <el-input v-model="costImpactData.remark" :disabled="changeCostImpactFlag('remark') === 'N'" style="width: 611px"></el-input>
  434. </el-form-item>
  435. </el-form>
  436. </div>
  437. <el-footer style="height:25px;text-align:center">
  438. <template v-if="modalData.changeStatus === '草稿' || (modalData.createBy2 && modalData.createBy2.split(';').includes(createBy2) && modalData.changeStatus === '审批中')">
  439. <el-button type="primary" :loading="saveLoading" @click="saveData">保存</el-button>
  440. </template>
  441. <el-button type="primary" @click="modalFlag = false">关闭</el-button>
  442. <template v-if="superAdmin || (modalData.createBy2 && modalData.createBy2.split(';').includes(createBy2))">
  443. <template v-if="authSubmit">
  444. <el-button v-if="modalData.changeStatus === '审批中' && modalData.tpProcessControl !== 'Y' && modalData.csProcessControl !== 'Y'" type="primary" :loading="submitLoading" @click="agreeSubmit">同意</el-button>
  445. </template>
  446. <template v-if="authReject">
  447. <el-button v-if="modalData.changeStatus === '审批中' && modalData.isReject === 'Y'" type="primary" :loading="submitLoading" @click="submitDataModal">驳回</el-button>
  448. </template>
  449. </template>
  450. </el-footer>
  451. </el-tab-pane >
  452. <el-tab-pane label="TP&执行信息" name="actionInformation" v-loading="submitLoading">
  453. <div style="height: 670px">
  454. <el-button type="primary" @click="chooseFeasibilityAssessmentModel">选择评估信息</el-button>
  455. <div class="rq">
  456. <el-table
  457. :data="chooseItemList2"
  458. height="230px"
  459. border
  460. style="width: 100%">
  461. <el-table-column
  462. v-for="(item,index) in columnChooseItemList2" :key="index"
  463. :sortable="item.columnSortable"
  464. :prop="item.columnProp"
  465. :header-align="item.headerAlign"
  466. :show-overflow-tooltip="item.showOverflowTooltip"
  467. :align="item.align"
  468. :fixed="item.fixed == ''?false:item.fixed"
  469. :min-width="item.columnWidth"
  470. :label="item.columnLabel">
  471. <template slot-scope="scope">
  472. <span v-if="!item.columnHidden">{{scope.row[item.columnProp]}}</span>
  473. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
  474. </template>
  475. </el-table-column>
  476. <el-table-column
  477. header-align="center"
  478. align="center"
  479. min-width="60"
  480. label="可选值">
  481. <template slot-scope="scope">
  482. <el-select :disabled="changeFAItemFlag('chooseValue') === 'N'" v-model="scope.row.chooseValue" placeholder="请选择">
  483. <el-option v-for="item in scope.row.availableValueList" :key="item.availableValue" :label="item.availableValue" :value="item.availableValue"></el-option>
  484. </el-select>
  485. </template>
  486. </el-table-column>
  487. <el-table-column
  488. header-align="center"
  489. align="center"
  490. min-width="120"
  491. label="备注">
  492. <template slot-scope="scope">
  493. <el-input :disabled="changeFAItemFlag('itemRemark') === 'N'" v-model="scope.row.itemRemark"></el-input>
  494. </template>
  495. </el-table-column>
  496. <!-- <el-table-column-->
  497. <!-- fixed="right"-->
  498. <!-- header-align="center"-->
  499. <!-- align="center"-->
  500. <!-- width="60"-->
  501. <!-- label="操作">-->
  502. <!-- <template slot-scope="scope">-->
  503. <!-- <el-link v-if="scope.row.executeFlag !== 'Y'" style="cursor: pointer" @click="executeModal2(scope.row)">执行</el-link>-->
  504. <!-- </template>-->
  505. <!-- </el-table-column>-->
  506. </el-table>
  507. </div>
  508. <div style="text-align: center;font-size: 11px;margin-top: 5px">
  509. <span> --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- </span>
  510. </div>
  511. <el-form :inline="true" label-position="top" :model="executionInfoData">
  512. <el-form-item label="原菲林编号/Original Film No.">
  513. <el-input :disabled="changeExecutionInfoFlag('originalFilmNo') === 'N'" v-model="executionInfoData.originalFilmNo" style="width: 226px"></el-input>
  514. </el-form-item>
  515. <el-form-item label="原碑刀编号/Original Cutter No.">
  516. <el-input :disabled="changeExecutionInfoFlag('originalDieCuttingRuleNo') === 'N'" v-model="executionInfoData.originalDieCuttingRuleNo" style="width: 226px"></el-input>
  517. </el-form-item>
  518. <el-form-item label="原网板/印版编号/Original Plate No.">
  519. <el-input :disabled="changeExecutionInfoFlag('originalStencilNo') === 'N'" v-model="executionInfoData.originalStencilNo" style="width: 226px"></el-input>
  520. </el-form-item>
  521. <el-form-item label="ECN执行日期/Exec Date">
  522. <el-date-picker :disabled="changeExecutionInfoFlag('executionDate') === 'N'" style="width: 135px" v-model="executionInfoData.executionDate" type="date" value-format="yyyy-MM-dd" placeholder="请选择日期" :editable=false></el-date-picker>
  523. </el-form-item>
  524. </el-form>
  525. <el-form :inline="true" label-position="top" :model="executionInfoData" style="margin-top: -5px;">
  526. <el-form-item label="新菲林编号/New Film No.">
  527. <el-input :disabled="changeExecutionInfoFlag('newFilmNo') === 'N'" v-model="executionInfoData.newFilmNo" style="width: 226px"></el-input>
  528. </el-form-item>
  529. <el-form-item label="新碑刀编号/New Cutter No.">
  530. <el-input :disabled="changeExecutionInfoFlag('newDieCuttingRuleNo') === 'N'" v-model="executionInfoData.newDieCuttingRuleNo" style="width: 226px"></el-input>
  531. </el-form-item>
  532. <el-form-item label="新网板/印版编号/New Plate No.">
  533. <el-input :disabled="changeExecutionInfoFlag('newStencilNo') === 'N'" v-model="executionInfoData.newStencilNo" style="width: 226px"></el-input>
  534. </el-form-item>
  535. </el-form>
  536. <div style="text-align: center ;font-size: 11px">
  537. <span> --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- </span>
  538. </div>
  539. <el-button type="primary" @click="chooseModel">选择执行信息</el-button>
  540. <div class="rq">
  541. <el-table
  542. :data="chooseItemList"
  543. height="230px"
  544. border
  545. style="width: 100%">
  546. <el-table-column
  547. v-for="(item,index) in columnChooseItemList" :key="index"
  548. :sortable="item.columnSortable"
  549. :prop="item.columnProp"
  550. :header-align="item.headerAlign"
  551. :show-overflow-tooltip="item.showOverflowTooltip"
  552. :align="item.align"
  553. :fixed="item.fixed == ''?false:item.fixed"
  554. :min-width="item.columnWidth"
  555. :label="item.columnLabel">
  556. <template slot-scope="scope">
  557. <span v-if="!item.columnHidden">{{scope.row[item.columnProp]}}</span>
  558. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
  559. </template>
  560. </el-table-column>
  561. <el-table-column
  562. prop=""
  563. header-align="center"
  564. align="center"
  565. min-width="130"
  566. label="执行人">
  567. <template slot-scope="scope">
  568. <el-input :disabled="changeItemFlag('executor') === 'N'" @input="(val)=>executorInput(scope.row, val)" v-model="scope.row.executor" style="width:77%"></el-input>
  569. <el-button :disabled="changeItemFlag('executor') === 'N'" type="primary" @click="chooseExecutor(scope.row)" style="width:18%;padding: 3px 7px">·&nbsp;·&nbsp;·</el-button>
  570. </template>
  571. </el-table-column>
  572. <el-table-column
  573. prop=""
  574. header-align="center"
  575. align="center"
  576. min-width="150"
  577. label="备注">
  578. <template slot-scope="scope">
  579. <el-input :disabled="changeItemFlag('itemRemark') === 'N'" v-model="scope.row.itemRemark" style="width:98%"></el-input>
  580. </template>
  581. </el-table-column>
  582. <el-table-column
  583. header-align="center"
  584. align="center"
  585. min-width="50"
  586. label="操作">
  587. <template slot-scope="scope">
  588. <el-link v-if="scope.row.executeFlag !== 'Y' && $store.state.user.name === scope.row.executor && modalData.changeStatus === '审批中'" style="cursor: pointer" @click="executeModal(scope.row)">执行</el-link>
  589. </template>
  590. </el-table-column>
  591. </el-table>
  592. </div>
  593. </div>
  594. <el-footer style="height:25px;text-align:center">
  595. <template v-if="modalData.changeStatus === '草稿' || (modalData.createBy2 && modalData.createBy2.split(';').includes(createBy2) && modalData.changeStatus === '审批中')">
  596. <el-button type="primary" :loading="saveLoading" @click="saveData">保存</el-button>
  597. </template>
  598. <el-button type="primary" @click="modalFlag = false">关闭</el-button>
  599. <template v-if="superAdmin || (modalData.createBy2 && modalData.createBy2.split(';').includes(createBy2))">
  600. <template v-if="authSubmit">
  601. <el-button v-if="modalData.changeStatus === '审批中' && modalData.tpProcessControl !== 'Y' && modalData.csProcessControl !== 'Y'" type="primary" :loading="submitLoading" @click="agreeSubmit">同意</el-button>
  602. </template>
  603. <template v-if="authReject">
  604. <el-button v-if="modalData.changeStatus === '审批中' && modalData.isReject === 'Y'" type="primary" :loading="submitLoading" @click="submitDataModal">驳回</el-button>
  605. </template>
  606. </template>
  607. </el-footer>
  608. </el-tab-pane>
  609. <el-tab-pane label="会签信息" name="countersignature" v-loading="submitLoading">
  610. <div style="height: 670px">
  611. <el-button type="primary" @click="chooseCSModel">选择会签信息</el-button>
  612. <div class="rq">
  613. <el-table
  614. :data="chooseCSItemList"
  615. height="600px"
  616. border
  617. style="width: 100%">
  618. <el-table-column
  619. v-for="(item,index) in columnCSChooseItemList" :key="index"
  620. :sortable="item.columnSortable"
  621. :prop="item.columnProp"
  622. :header-align="item.headerAlign"
  623. :show-overflow-tooltip="item.showOverflowTooltip"
  624. :align="item.align"
  625. :fixed="item.fixed == ''?false:item.fixed"
  626. :min-width="item.columnWidth"
  627. :label="item.columnLabel">
  628. <template slot-scope="scope">
  629. <span v-if="!item.columnHidden">{{scope.row[item.columnProp]}}</span>
  630. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
  631. </template>
  632. </el-table-column>
  633. <el-table-column
  634. header-align="center"
  635. align="center"
  636. min-width="200"
  637. label="备注">
  638. <template slot-scope="scope">
  639. <el-input :disabled="changeCountersignatureItemFlag('itemRemark') === 'N'" v-model="scope.row.itemRemark" style="width:98%"></el-input>
  640. </template>
  641. </el-table-column>
  642. <el-table-column
  643. fixed="right"
  644. header-align="center"
  645. align="center"
  646. width="60"
  647. label="操作">
  648. <template slot-scope="scope">
  649. <el-link v-if="scope.row.executeFlag !== 'Y' && $store.state.user.name === scope.row.itemDesc && modalData.changeStatus === '审批中'" style="cursor: pointer" @click="executeCSModal(scope.row)">会签</el-link>
  650. </template>
  651. </el-table-column>
  652. </el-table>
  653. </div>
  654. </div>
  655. <el-footer style="height:25px;text-align:center">
  656. <template v-if="modalData.changeStatus === '草稿' || (modalData.createBy2 && modalData.createBy2.split(';').includes(createBy2) && modalData.changeStatus === '审批中')">
  657. <el-button type="primary" :loading="saveLoading" @click="saveData">保存</el-button>
  658. </template>
  659. <el-button type="primary" @click="modalFlag = false">关闭</el-button>
  660. <template v-if="superAdmin || (modalData.createBy2 && modalData.createBy2.split(';').includes(createBy2))">
  661. <template v-if="authSubmit">
  662. <el-button v-if="modalData.changeStatus === '审批中' && modalData.tpProcessControl !== 'Y' && modalData.csProcessControl !== 'Y'" type="primary" :loading="submitLoading" @click="agreeSubmit">同意</el-button>
  663. </template>
  664. <template v-if="authReject">
  665. <el-button v-if="modalData.changeStatus === '审批中' && modalData.isReject === 'Y'" type="primary" :loading="submitLoading" @click="submitDataModal">驳回</el-button>
  666. </template>
  667. </template>
  668. </el-footer>
  669. </el-tab-pane>
  670. </el-tabs>
  671. </el-dialog>
  672. <!-- 页签 -->
  673. <el-tabs v-model="activeTable" style="width: 100%; height: 100%;" type="border-card" @tab-click="refreshCurrentTabTable" class="customer-tab">
  674. <!-- 基本信息页签 -->
  675. <el-tab-pane label="基本信息" name="basicInformation">
  676. <el-table
  677. :data="detailList"
  678. :height="secondHeight"
  679. border
  680. ref="detailTable"
  681. style="width: 100%;">
  682. <el-table-column
  683. v-for="(item,index) in detailColumnList" :key="index"
  684. :sortable="item.columnSortable"
  685. :prop="item.columnProp"
  686. :header-align="item.headerAlign"
  687. :show-overflow-tooltip="item.showOverflowTooltip"
  688. :align="item.align"
  689. :fixed="item.fixed === '' ? false : item.fixed"
  690. :min-width="item.columnWidth"
  691. :label="item.columnLabel">
  692. <template slot-scope="scope">
  693. <div v-if="item.columnProp === 'oriCodeNo'">
  694. <el-link style="cursor:pointer;" v-if="!item.columnHidden" @click="toMenu(scope.row)"> {{ scope.row[item.columnProp] }}</el-link>
  695. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
  696. </div>
  697. <span v-if="!item.columnHidden">{{scope.row[item.columnProp]}}</span>
  698. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
  699. </template>
  700. </el-table-column>
  701. </el-table>
  702. </el-tab-pane>
  703. <!-- 库存成本影响页签 -->
  704. <el-tab-pane label="库存成本影响" name="inventoryCostImpact">
  705. <div :style="{height: secondHeight - 15 + 'px'}" style="margin-left: 20px;margin-top: 15px">
  706. <el-form :inline="true" label-position="top" :model="currentCostImpactData">
  707. <el-form-item style="margin-top: 20px;width: 155px">
  708. <el-checkbox v-model="currentCostImpactData.productionProductFlag" disabled true-label="Y">在生产品</el-checkbox>
  709. </el-form-item>
  710. <el-form-item label="数量">
  711. <el-input class="inlineNumber numInput" v-model="currentCostImpactData.productionProductNumber" readonly :disabled="currentCostImpactData.productionProductFlag !== 'Y'" type="number" style="width: 100px"></el-input>
  712. </el-form-item>
  713. <el-form-item label="处理意见">
  714. <!-- <dict-data-select v-model="currentCostImpactData.productionProductOpinions" :disabled="currentCostImpactData.productionProductFlag !== 'Y'" style="width: 130px" dict-type="change_production_product_opinions"></dict-data-select>-->
  715. <el-input v-model="currentCostImpactData.productionProductOpinions" :disabled="currentCostImpactData.productionProductFlag !== 'Y'" style="width: 130px"></el-input>
  716. </el-form-item>
  717. <el-form-item label="报废金额">
  718. <el-input class="inlineNumber numInput" v-model="currentCostImpactData.productionProductScrapAmount" :disabled="currentCostImpactData.productionProductFlag !== 'Y'" type="number" style="width: 140px"></el-input>
  719. </el-form-item>
  720. <!-- <el-form-item label=" " style="margin-left: -10px">-->
  721. <!-- <el-input v-model="currentCostImpactData.productionProductRemark" readonly :disabled="currentCostImpactData.productionProductFlag !== 'Y'" style="width: 300px"></el-input>-->
  722. <!-- </el-form-item>-->
  723. <el-form-item label="执行人">
  724. <el-input v-model="currentCostImpactData.productionProductExecutorName" readonly :disabled="currentCostImpactData.productionProductFlag !== 'Y'" style="width: 130px"></el-input>
  725. </el-form-item>
  726. </el-form>
  727. <el-form :inline="true" label-position="top" :model="currentCostImpactData" style="margin-top: 10px;">
  728. <el-form-item style="margin-top: 20px;width: 155px">
  729. <el-checkbox v-model="currentCostImpactData.inventoryProductFlag" disabled true-label="Y">成品库存</el-checkbox>
  730. </el-form-item>
  731. <el-form-item label="数量">
  732. <el-input class="inlineNumber numInput" v-model="currentCostImpactData.inventoryProductNumber" readonly :disabled="currentCostImpactData.inventoryProductFlag !== 'Y'" type="number" style="width: 100px"></el-input>
  733. </el-form-item>
  734. <el-form-item label="处理意见">
  735. <!-- <dict-data-select v-model="currentCostImpactData.inventoryProductOpinions" :disabled="currentCostImpactData.inventoryProductFlag !== 'Y'" style="width: 130px" dict-type="change_inventory_product_opinions"></dict-data-select>-->
  736. <el-input v-model="currentCostImpactData.inventoryProductOpinions" :disabled="currentCostImpactData.inventoryProductFlag !== 'Y'" style="width: 130px"></el-input>
  737. </el-form-item>
  738. <el-form-item label="报废金额">
  739. <el-input class="inlineNumber numInput" v-model="currentCostImpactData.inventoryProductScrapAmount" :disabled="currentCostImpactData.inventoryProductFlag !== 'Y'" type="number" style="width: 140px"></el-input>
  740. </el-form-item>
  741. <!-- <el-form-item label=" " style="margin-left: -10px">-->
  742. <!-- <el-input v-model="currentCostImpactData.inventoryProductRemark" readonly :disabled="currentCostImpactData.inventoryProductFlag !== 'Y'" style="width: 300px"></el-input>-->
  743. <!-- </el-form-item>-->
  744. <el-form-item label="执行人">
  745. <el-input v-model="currentCostImpactData.inventoryProductExecutorName" :disabled="currentCostImpactData.inventoryProductFlag !== 'Y'" style="width: 130px"></el-input>
  746. </el-form-item>
  747. </el-form>
  748. <el-form :inline="true" label-position="top" :model="currentCostImpactData" style="margin-top: 10px;">
  749. <el-form-item style="margin-top: 20px;width: 155px">
  750. <el-checkbox v-model="currentCostImpactData.newOrderFlag" disabled true-label="Y">新订单</el-checkbox>
  751. </el-form-item>
  752. <el-form-item label="数量">
  753. <el-input class="inlineNumber numInput" v-model="currentCostImpactData.newOrderNumber" readonly :disabled="currentCostImpactData.newOrderFlag !== 'Y'" type="number" style="width: 100px"></el-input>
  754. </el-form-item>
  755. </el-form>
  756. <el-form :inline="true" label-position="top" :model="currentCostImpactData" style="margin-top: 10px;">
  757. <el-form-item style="margin-top: 20px;width: 155px">
  758. <el-checkbox v-model="currentCostImpactData.affectedFlag" disabled true-label="Y">影响的原材料及其库存量</el-checkbox>
  759. </el-form-item>
  760. <el-form-item label="数量">
  761. <el-input class="inlineNumber numInput" v-model="currentCostImpactData.affectedNumber" readonly :disabled="currentCostImpactData.affectedFlag !== 'Y'" type="number" style="width: 100px"></el-input>
  762. </el-form-item>
  763. <el-form-item label="处理意见">
  764. <!-- <dict-data-select v-model="currentCostImpactData.affectedOpinions" :disabled="currentCostImpactData.affectedFlag !== 'Y'" style="width: 130px" dict-type="change_affected_opinions"></dict-data-select>-->
  765. <el-input v-model="currentCostImpactData.affectedOpinions" :disabled="currentCostImpactData.affectedFlag !== 'Y'" style="width: 130px"></el-input>
  766. </el-form-item>
  767. <el-form-item label="报废金额">
  768. <el-input class="inlineNumber numInput" v-model="currentCostImpactData.affectedScrapAmount" :disabled="currentCostImpactData.affectedFlag !== 'Y'" type="number" style="width: 140px"></el-input>
  769. </el-form-item>
  770. <!-- <el-form-item label=" " style="margin-left: -10px">-->
  771. <!-- <el-input v-model="currentCostImpactData.affectedRemark" readonly :disabled="currentCostImpactData.affectedFlag !== 'Y'" style="width: 300px"></el-input>-->
  772. <!-- </el-form-item>-->
  773. <el-form-item label="执行人">
  774. <el-input v-model="currentCostImpactData.affectedExecutorName" :disabled="currentCostImpactData.affectedFlag !== 'Y'" style="width: 130px"></el-input>
  775. </el-form-item>
  776. </el-form>
  777. <el-form :inline="true" label-position="top" :model="currentCostImpactData" style="margin-top: 10px;">
  778. <el-form-item label="ECN变更总成本" style="width: 155px">
  779. <el-input class="inlineNumber numInput" v-model="currentCostImpactData.changeTotalCost" readonly type="number" style="width: 125px"></el-input>
  780. </el-form-item>
  781. <el-form-item label="备注">
  782. <el-input v-model="currentCostImpactData.remark" readonly style="width: 300px"></el-input>
  783. </el-form-item>
  784. </el-form>
  785. </div>
  786. </el-tab-pane>
  787. <!-- TP&执行信息 -->
  788. <el-tab-pane label="TP&执行信息" name="actionInformation">
  789. <el-row :gutter="5">
  790. <el-col :span="9">
  791. <div >
  792. <el-table
  793. :data="currentChooseItemList2"
  794. :height="secondHeight"
  795. border>
  796. <el-table-column
  797. v-for="(item,index) in columnChooseItemList2" :key="index"
  798. :sortable="item.columnSortable"
  799. :prop="item.columnProp"
  800. :header-align="item.headerAlign"
  801. :show-overflow-tooltip="item.showOverflowTooltip"
  802. :align="item.align"
  803. :fixed="item.fixed == ''?false:item.fixed"
  804. :min-width="item.columnWidth"
  805. :label="item.columnLabel">
  806. <template slot-scope="scope">
  807. <span v-if="!item.columnHidden">{{scope.row[item.columnProp]}}</span>
  808. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
  809. </template>
  810. </el-table-column>
  811. <el-table-column
  812. prop="chooseValue"
  813. header-align="center"
  814. align="center"
  815. min-width="60"
  816. label="可选值">
  817. </el-table-column>
  818. <el-table-column
  819. prop="itemRemark"
  820. header-align="center"
  821. align="center"
  822. min-width="120"
  823. label="备注">
  824. </el-table-column>
  825. </el-table>
  826. </div>
  827. </el-col>
  828. <el-col :span="4">
  829. <div>
  830. <el-form label-position="top" :model="currentExecutionInfoData">
  831. <el-row :gutter="5">
  832. <el-col :span="12">
  833. <el-form-item label="原菲林编号">
  834. <el-input disabled v-model="currentExecutionInfoData.originalFilmNo" ></el-input>
  835. </el-form-item>
  836. </el-col>
  837. <el-col :span="12">
  838. <el-form-item label="新菲林编号">
  839. <el-input disabled v-model="currentExecutionInfoData.newFilmNo" ></el-input>
  840. </el-form-item>
  841. </el-col>
  842. <el-col :span="12">
  843. <el-form-item label="原碑刀编号">
  844. <el-input disabled v-model="currentExecutionInfoData.originalDieCuttingRuleNo" ></el-input>
  845. </el-form-item>
  846. </el-col>
  847. <el-col :span="12">
  848. <el-form-item label="新碑刀编号">
  849. <el-input disabled v-model="currentExecutionInfoData.newDieCuttingRuleNo" ></el-input>
  850. </el-form-item>
  851. </el-col>
  852. <el-col :span="12">
  853. <el-form-item label="原网板/印版编号">
  854. <el-input disabled v-model="currentExecutionInfoData.originalStencilNo" ></el-input>
  855. </el-form-item>
  856. </el-col>
  857. <el-col :span="12">
  858. <el-form-item label="新网板/印版编号">
  859. <el-input disabled v-model="currentExecutionInfoData.newStencilNo" ></el-input>
  860. </el-form-item>
  861. </el-col>
  862. <el-col :span="12">
  863. <el-form-item label="ECN执行日期">
  864. <el-date-picker disabled style="width: 100%" v-model="currentExecutionInfoData.executionDate" type="date" value-format="yyyy-MM-dd" :editable=false></el-date-picker>
  865. </el-form-item>
  866. </el-col>
  867. </el-row>
  868. </el-form>
  869. </div>
  870. </el-col>
  871. <el-col :span="11">
  872. <div>
  873. <el-table
  874. :data="currentChooseItemList"
  875. :height="secondHeight"
  876. border>
  877. <el-table-column
  878. v-for="(item,index) in columnChooseItemList" :key="index"
  879. :sortable="item.columnSortable"
  880. :prop="item.columnProp"
  881. :header-align="item.headerAlign"
  882. :show-overflow-tooltip="item.showOverflowTooltip"
  883. :align="item.align"
  884. :fixed="item.fixed == ''?false:item.fixed"
  885. :min-width="item.columnWidth"
  886. :label="item.columnLabel">
  887. <template slot-scope="scope">
  888. <span v-if="!item.columnHidden">{{scope.row[item.columnProp]}}</span>
  889. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
  890. </template>
  891. </el-table-column>
  892. <el-table-column
  893. prop="executor"
  894. header-align="center"
  895. align="center"
  896. min-width="130"
  897. label="执行人">
  898. </el-table-column>
  899. <el-table-column
  900. prop="itemRemark"
  901. header-align="center"
  902. align="center"
  903. min-width="150"
  904. label="备注">
  905. </el-table-column>
  906. </el-table>
  907. </div>
  908. </el-col>
  909. </el-row>
  910. </el-tab-pane>
  911. <!-- 会签信息 -->
  912. <el-tab-pane label="会签信息" name="countersignature">
  913. <el-table
  914. :data="currentChooseCSItemList"
  915. :height="secondHeight"
  916. border
  917. style="width: 100%">
  918. <el-table-column
  919. v-for="(item,index) in columnCSChooseItemList" :key="index"
  920. :sortable="item.columnSortable"
  921. :prop="item.columnProp"
  922. :header-align="item.headerAlign"
  923. :show-overflow-tooltip="item.showOverflowTooltip"
  924. :align="item.align"
  925. :fixed="item.fixed == ''?false:item.fixed"
  926. :min-width="item.columnWidth"
  927. :label="item.columnLabel">
  928. <template slot-scope="scope">
  929. <span v-if="!item.columnHidden">{{scope.row[item.columnProp]}}</span>
  930. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
  931. </template>
  932. </el-table-column>
  933. <el-table-column
  934. prop="itemRemark"
  935. header-align="center"
  936. align="center"
  937. min-width="200"
  938. label="备注">
  939. </el-table-column>
  940. </el-table>
  941. </el-tab-pane>
  942. <!-- 附件信息页签 -->
  943. <el-tab-pane label="附件信息" name="fileInformation">
  944. <oss-components
  945. :save-visible="authFileSave"
  946. :download-visible="authFileDownLoad"
  947. :remove-visible="authFileRemove"
  948. :preview-visible="authFilePreview"
  949. :disabled="currentRow.changeStatus === '已完成'"
  950. label="变更单号"
  951. :height="secondHeight - 25"
  952. style="margin-top: 2px"
  953. :columns="fileColumnList"
  954. :order-ref2="currentRow.changeNo"
  955. :order-ref1="currentRow.site">
  956. </oss-components>
  957. </el-tab-pane>
  958. <!-- 审批信息 -->
  959. <el-tab-pane label="审批信息" name="approvalInformation">
  960. <approval-information ref="approvalTable" v-model:data-list="approvalList" :height="secondHeight"></approval-information>
  961. </el-tab-pane>
  962. </el-tabs>
  963. <!-- ECN种类模态框 -->
  964. <el-dialog title="ECN种类" :close-on-click-modal="false" v-drag :visible.sync="ecnTypeModalFlag" width="900px">
  965. <el-form ref="dataForm" label-position="right">
  966. <el-row v-for="(item, index) in form" :key="index" style="padding-top: 10px;" :style="{borderTop:index === 0?'':'1px solid #ccc'}">
  967. <el-col :span="8">
  968. <el-form-item :prop="'input.'+index+'.value'">
  969. <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>
  970. </el-form-item>
  971. </el-col>
  972. <el-col :span="16">
  973. <div v-for="i in item.list">
  974. <el-form-item :prop="'input.'+index+'.value'">
  975. <el-checkbox v-model="i.flag" @change="(val)=>ecnTypeDetailChange(val,index)" true-label="Y">{{i.value}}</el-checkbox>
  976. </el-form-item>
  977. </div>
  978. </el-col>
  979. </el-row>
  980. </el-form>
  981. <el-footer style="height:30px;text-align:center">
  982. <el-button type="primary" @click="saveEcnTypeData">保存</el-button>
  983. <el-button type="primary" @click="ecnTypeModalFlag = false">关闭</el-button>
  984. </el-footer>
  985. </el-dialog>
  986. <!-- ECN模板属性清单 -->
  987. <el-dialog title="属性清单" :close-on-click-modal="false" v-drag :visible.sync="chooseModelFlag" width="820px">
  988. <div class="rq">
  989. <el-form :inline="true" label-position="top" :model="chooseModelData">
  990. <el-form-item :label="'模板'">
  991. <el-select value="roleName" v-model="chooseModelData.codeNo" placeholder="请选择" style="width: 120px">
  992. <el-option
  993. v-for = "i in modelList"
  994. :key = "i.codeNo"
  995. :label = "i.codeDesc"
  996. :value = "i.codeNo">
  997. </el-option>
  998. </el-select>
  999. </el-form-item>
  1000. <el-form-item label="属性编码">
  1001. <el-input v-model="chooseModelData.itemNo" clearable style="width: 120px"></el-input>
  1002. </el-form-item>
  1003. <el-form-item label="属性名称">
  1004. <el-input v-model="chooseModelData.itemDesc" clearable style="width: 120px"></el-input>
  1005. </el-form-item>
  1006. <el-form-item :label="' '">
  1007. <el-button type="primary" @click="searchItemList">查询</el-button>
  1008. </el-form-item>
  1009. </el-form>
  1010. <el-table
  1011. :height="300"
  1012. :data="itemList"
  1013. ref="itemTable"
  1014. @row-click="itemClickRow"
  1015. @selection-change="selectionItem"
  1016. border
  1017. style="width: 100%;">
  1018. <el-table-column
  1019. type="selection"
  1020. header-align="center"
  1021. align="center"
  1022. width="50">
  1023. </el-table-column>
  1024. <el-table-column
  1025. v-for="(item,index) in columnItemList" :key="index"
  1026. :sortable="item.columnSortable"
  1027. :prop="item.columnProp"
  1028. :header-align="item.headerAlign"
  1029. :show-overflow-tooltip="item.showOverflowTooltip"
  1030. :align="item.align"
  1031. :fixed="item.fixed==''?false:item.fixed"
  1032. :min-width="item.columnWidth"
  1033. :label="item.columnLabel">
  1034. <template slot-scope="scope">
  1035. <span v-if="!item.columnHidden">{{ scope.row[item.columnProp] }}</span>
  1036. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
  1037. </template>
  1038. </el-table-column>
  1039. </el-table>
  1040. </div>
  1041. <el-footer style="height:40px;margin-top: 20px;text-align:center">
  1042. <el-button type="primary" @click="confirmItem">确认</el-button>
  1043. <el-button type="primary" @click="chooseModelFlag = false">关闭</el-button>
  1044. </el-footer>
  1045. </el-dialog>
  1046. <!-- ECN模板属性清单 -->
  1047. <el-dialog title="属性清单" :close-on-click-modal="false" v-drag :visible.sync="chooseModelFlag2" width="820px">
  1048. <div class="rq">
  1049. <el-form :inline="true" label-position="top" :model="chooseModelData2">
  1050. <el-form-item :label="'模板'">
  1051. <el-select v-model="chooseModelData2.codeNo" placeholder="请选择" style="width: 120px">
  1052. <el-option
  1053. v-for = "i in modelList2"
  1054. :key = "i.codeNo"
  1055. :label = "i.codeDesc"
  1056. :value = "i.codeNo">
  1057. </el-option>
  1058. </el-select>
  1059. </el-form-item>
  1060. <el-form-item label="属性编码">
  1061. <el-input v-model="chooseModelData2.itemNo" clearable style="width: 120px"></el-input>
  1062. </el-form-item>
  1063. <el-form-item label="属性名称">
  1064. <el-input v-model="chooseModelData2.itemDesc" clearable style="width: 120px"></el-input>
  1065. </el-form-item>
  1066. <el-form-item :label="' '">
  1067. <el-button type="primary" @click="searchItemList2">查询</el-button>
  1068. </el-form-item>
  1069. </el-form>
  1070. <el-table
  1071. :height="300"
  1072. :data="itemList2"
  1073. ref="itemTable2"
  1074. @row-click="itemClickRow2"
  1075. @selection-change="selectionItem2"
  1076. border
  1077. style="width: 100%;">
  1078. <el-table-column
  1079. type="selection"
  1080. header-align="center"
  1081. align="center"
  1082. width="50">
  1083. </el-table-column>
  1084. <el-table-column
  1085. v-for="(item,index) in columnItemList2" :key="index"
  1086. :sortable="item.columnSortable"
  1087. :prop="item.columnProp"
  1088. :header-align="item.headerAlign"
  1089. :show-overflow-tooltip="item.showOverflowTooltip"
  1090. :align="item.align"
  1091. :fixed="item.fixed==''?false:item.fixed"
  1092. :min-width="item.columnWidth"
  1093. :label="item.columnLabel">
  1094. <template slot-scope="scope">
  1095. <span v-if="!item.columnHidden">{{ scope.row[item.columnProp] }}</span>
  1096. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
  1097. </template>
  1098. </el-table-column>
  1099. </el-table>
  1100. </div>
  1101. <el-footer style="height:40px;margin-top: 20px;text-align:center">
  1102. <el-button type="primary" @click="confirmItem2">确认</el-button>
  1103. <el-button type="primary" @click="chooseModelFlag2 = false">关闭</el-button>
  1104. </el-footer>
  1105. </el-dialog>
  1106. <!-- 会签模板属性清单 -->
  1107. <el-dialog title="属性清单" :close-on-click-modal="false" v-drag :visible.sync="chooseCSModelFlag" width="820px">
  1108. <div class="rq">
  1109. <el-form :inline="true" label-position="top" :model="chooseCSModelData">
  1110. <el-form-item :label="'模板'">
  1111. <el-select value="roleName" v-model="chooseCSModelData.codeNo" placeholder="请选择" style="width: 120px">
  1112. <el-option
  1113. v-for = "i in modelCSList"
  1114. :key = "i.codeNo"
  1115. :label = "i.codeDesc"
  1116. :value = "i.codeNo">
  1117. </el-option>
  1118. </el-select>
  1119. </el-form-item>
  1120. <el-form-item label="属性编码">
  1121. <el-input v-model="chooseCSModelData.itemNo" clearable style="width: 120px"></el-input>
  1122. </el-form-item>
  1123. <el-form-item label="属性名称">
  1124. <el-input v-model="chooseCSModelData.itemDesc" clearable style="width: 120px"></el-input>
  1125. </el-form-item>
  1126. <el-form-item :label="' '">
  1127. <el-button type="primary" @click="searchCSItemList()">查询</el-button>
  1128. </el-form-item>
  1129. </el-form>
  1130. <el-table
  1131. :height="300"
  1132. :data="itemCSList"
  1133. ref="itemCSTable"
  1134. @row-click="itemCSClickRow"
  1135. @selection-change="selectionCSItem"
  1136. border
  1137. style="width: 100%;">
  1138. <el-table-column
  1139. type="selection"
  1140. header-align="center"
  1141. align="center"
  1142. width="50">
  1143. </el-table-column>
  1144. <el-table-column
  1145. v-for="(item,index) in columnCSItemList" :key="index"
  1146. :sortable="item.columnSortable"
  1147. :prop="item.columnProp"
  1148. :header-align="item.headerAlign"
  1149. :show-overflow-tooltip="item.showOverflowTooltip"
  1150. :align="item.align"
  1151. :fixed="item.fixed==''?false:item.fixed"
  1152. :min-width="item.columnWidth"
  1153. :label="item.columnLabel">
  1154. <template slot-scope="scope">
  1155. <span v-if="!item.columnHidden">{{ scope.row[item.columnProp] }}</span>
  1156. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
  1157. </template>
  1158. </el-table-column>
  1159. </el-table>
  1160. </div>
  1161. <el-footer style="height:40px;margin-top: 20px;text-align:center">
  1162. <el-button type="primary" @click="confirmCSItem">确认</el-button>
  1163. <el-button type="primary" @click="chooseCSModelFlag = false">关闭</el-button>
  1164. </el-footer>
  1165. </el-dialog>
  1166. <!-- 提交 -->
  1167. <el-dialog title="驳回" top="30vh" :close-on-click-modal="false" v-drag :visible.sync="submitModalFlag" width="500px">
  1168. <el-form :inline="true" label-position="top">
  1169. <el-form-item :label="'驳回意见'">
  1170. <el-input type="textarea" v-model="rejectOpinion" :rows="3" resize='none' show-word-limit style="width: 479px;height: 30px"></el-input>
  1171. </el-form-item>
  1172. </el-form>
  1173. <el-footer style="height:30px;margin-top: 50px;text-align:center">
  1174. <el-button type="primary" @click="rejectSubmit">确定</el-button>
  1175. <el-button type="primary" @click="submitModalFlag = false">取消</el-button>
  1176. </el-footer>
  1177. </el-dialog>
  1178. <!-- 可选技术参数卡清单 -->
  1179. <el-dialog title="技术参数卡清单" :close-on-click-modal="false" v-drag :visible.sync="addDetailModal" width="881px">
  1180. <div class="rq">
  1181. <el-form :inline="true" label-position="top" :model="searchData2">
  1182. <el-form-item :label="'BU'">
  1183. <el-select v-model="searchData2.buNo" disabled style="width: 70px">
  1184. <el-option
  1185. v-for = "i in buList"
  1186. :key = "i.buNo"
  1187. :label = "i.buNo"
  1188. :value = "i.buNo">
  1189. </el-option>
  1190. </el-select>
  1191. </el-form-item>
  1192. <el-form-item label="技术参数卡编码">
  1193. <el-input v-model="searchData2.codeNo" clearable style="width: 120px"></el-input>
  1194. </el-form-item>
  1195. <el-form-item label="PLM物料编码">
  1196. <el-input v-model="searchData2.testPartNo" clearable style="width: 120px"></el-input>
  1197. </el-form-item>
  1198. <el-form-item label="IFS物料编码">
  1199. <el-input v-model="searchData2.partNo" clearable style="width: 120px"></el-input>
  1200. </el-form-item>
  1201. <el-form-item label="客户编码">
  1202. <el-input v-model="searchData2.customerId" clearable style="width: 120px"></el-input>
  1203. </el-form-item>
  1204. <el-form-item label="项目号">
  1205. <el-input v-model="searchData2.projectId" clearable style="width: 120px"></el-input>
  1206. </el-form-item>
  1207. <el-form-item :label="' '">
  1208. <el-button type="primary" @click="addChangeDetail()">查询</el-button>
  1209. </el-form-item>
  1210. </el-form>
  1211. <el-table
  1212. :height="300"
  1213. :data="dataList2"
  1214. @selection-change="selectionData2"
  1215. border
  1216. style="width: 100%;">
  1217. <el-table-column
  1218. type="selection"
  1219. header-align="center"
  1220. align="center"
  1221. width="50">
  1222. </el-table-column>
  1223. <el-table-column
  1224. v-for="(item,index) in columnList2" :key="index"
  1225. :sortable="item.columnSortable"
  1226. :prop="item.columnProp"
  1227. :header-align="item.headerAlign"
  1228. :show-overflow-tooltip="item.showOverflowTooltip"
  1229. :align="item.align"
  1230. :fixed="item.fixed==''?false:item.fixed"
  1231. :min-width="item.columnWidth"
  1232. :label="item.columnLabel">
  1233. <template slot-scope="scope">
  1234. <span v-if="!item.columnHidden">{{ scope.row[item.columnProp] }}</span>
  1235. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
  1236. </template>
  1237. </el-table-column>
  1238. </el-table>
  1239. </div>
  1240. <el-footer style="height:40px;margin-top: 20px;text-align:center">
  1241. <el-button type="primary" @click="addDetail">确认</el-button>
  1242. <el-button type="primary" @click="addDetailModal = false">关闭</el-button>
  1243. </el-footer>
  1244. </el-dialog>
  1245. <!-- 物料模态框 -->
  1246. <el-dialog title="物料清单" :close-on-click-modal="false" v-drag :visible.sync="partModelFlag" width="940px">
  1247. <div class="rq">
  1248. <el-form :inline="true" label-position="top" :model="partData">
  1249. <el-form-item :label="'IFS物料编码'">
  1250. <el-input v-model="partData.finalPartNo" clearable style="width: 120px"></el-input>
  1251. </el-form-item>
  1252. <el-form-item :label="'PLM物料编码'">
  1253. <el-input v-model="partData.testPartNo" clearable style="width: 120px"></el-input>
  1254. </el-form-item>
  1255. <el-form-item :label="'客户料号'">
  1256. <el-input v-model="partData.customerPartNo" clearable style="width: 120px"></el-input>
  1257. </el-form-item>
  1258. <el-form-item :label="'物料名称'">
  1259. <el-input v-model="partData.partDesc" clearable style="width: 120px"></el-input>
  1260. </el-form-item>
  1261. <el-form-item :label="' '">
  1262. <el-button type="primary" @click="queryPartList()">查询</el-button>
  1263. </el-form-item>
  1264. </el-form>
  1265. <el-table
  1266. :height="300"
  1267. :data="partList"
  1268. @row-dblclick="getRowData"
  1269. border
  1270. style="width: 100%;">
  1271. <el-table-column
  1272. v-for="(item,index) in partColumnList" :key="index"
  1273. :sortable="item.columnSortable"
  1274. :prop="item.columnProp"
  1275. :header-align="item.headerAlign"
  1276. :show-overflow-tooltip="item.showOverflowTooltip"
  1277. :align="item.align"
  1278. :fixed="item.fixed==''?false:item.fixed"
  1279. :min-width="item.columnWidth"
  1280. :label="item.columnLabel">
  1281. <template slot-scope="scope">
  1282. <span v-if="!item.columnHidden">{{scope.row[item.columnProp]}}</span>
  1283. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
  1284. </template>
  1285. </el-table-column>
  1286. </el-table>
  1287. <!-- 分页插件 -->
  1288. <el-pagination
  1289. style="margin-top: 5px"
  1290. @size-change="sizeChangeHandle2"
  1291. @current-change="currentChangeHandle2"
  1292. :current-page="pageIndex2"
  1293. :page-sizes="[20, 50, 100, 200, 500]"
  1294. :page-size="pageSize2"
  1295. :total="totalPage2"
  1296. layout="total, sizes, prev, pager, next, jumper">
  1297. </el-pagination>
  1298. </div>
  1299. <el-footer style="height:35px;margin-top: 10px;text-align:center">
  1300. <el-button type="primary" @click="partModelFlag=false">关闭</el-button>
  1301. </el-footer>
  1302. </el-dialog>
  1303. <ChooseList ref="baseList" @getBaseData="getBaseData"></ChooseList>
  1304. <!-- 上传文件的modal -->
  1305. <changeUploadFile ref="changeUploadFile" @refreshPageTables="getChangeFileList" v-drag></changeUploadFile>
  1306. <upload-file-list title="工程变更文件上传" :label="'变更单号'" :no="currentRow.changeNo" :file-list.sync="chooseFileList" :upload-dialog.sync="uploadDialog" path="/upload/test"></upload-file-list>
  1307. </div>
  1308. </template>
  1309. <script>
  1310. import {
  1311. changeRecordSearch, // 获取工程变更记录列表
  1312. changeDetailSearch, // 变更单详情的列表
  1313. changeFileSearch, // 变更单文件的列表
  1314. deleteChangeFile, // 删除变更单文件
  1315. costImpactSearch, // 查询库存成本影响
  1316. costImpactUpdate, // 编辑库存成本影响
  1317. executionInfoSearch, // 查询执行信息
  1318. requestDetailSearch, // 查询变更明细
  1319. deleteChangeDetail, // 删除变更明细
  1320. getDepartmentByUserName, // 根据用户编码获得用户部门
  1321. changeRequestUpdate, // 编辑变更单基础信息
  1322. getEcnModel, // 查询ECN的模板
  1323. getChooseEcnType, // 查询所选择的ECN种类
  1324. getItemList, // 查询模板属性
  1325. executionUpdate, // 修改执行信息
  1326. countersignatureSearch, // 查询会签信息
  1327. countersignatureUpdate, // 编辑会签信息
  1328. issueChange, // 下达
  1329. submitChange, // 提交
  1330. tpExecute, // TP执行
  1331. csExecute, // 会签执行
  1332. getNodeAuthority, // 获取节点权限
  1333. getApprovalList, // 查询审批信息
  1334. getBuBySite, // 根据site查bu
  1335. technicalSpecificationSearch2, // 获取技术参数卡列表
  1336. choosePartNoList, // 根据视图查物料计划
  1337. checkSuperAdmin, // 校验是否为超级管理员
  1338. } from '@/api/changeManagement/changeManagement.js'
  1339. import ChooseList from '@/views/modules/common/Chooselist'
  1340. import {verifyData} from "@/api/chooselist/chooselist.js"
  1341. import changeUploadFile from "../base/upload_file.vue"
  1342. import {downLoadQuotationFile} from '@/api/quotation/quotationInformation.js'
  1343. import DictDataSelect from "../sys/dict-data-select.vue"
  1344. import UploadFileList from "../common/uploadFileList.vue"
  1345. import ApprovalInformation from "./approvalInformation.vue";
  1346. import OssComponents from "../oss/ossComponents.vue";
  1347. export default {
  1348. components: {
  1349. OssComponents,
  1350. ApprovalInformation,
  1351. UploadFileList,
  1352. DictDataSelect,
  1353. changeUploadFile,
  1354. ChooseList,
  1355. },
  1356. computed: {
  1357. totalCost: {
  1358. get () {
  1359. let total = 0
  1360. if (this.costImpactData.productionProductFlag === 'Y') {
  1361. total += +this.costImpactData.productionProductScrapAmount
  1362. }
  1363. if (this.costImpactData.inventoryProductFlag === 'Y') {
  1364. total += +this.costImpactData.inventoryProductScrapAmount
  1365. }
  1366. if (this.costImpactData.affectedFlag === 'Y') {
  1367. total += +this.costImpactData.affectedScrapAmount
  1368. }
  1369. return total
  1370. }
  1371. },
  1372. changeRequestFlag () {
  1373. return (value) => {
  1374. if (!this.plmChangeRequestArr){
  1375. return 'N'
  1376. }
  1377. let arr = this.plmChangeRequestArr.filter(a => a.fieldId === value)
  1378. if (arr.length > 0) {
  1379. return arr[0].updateFlag
  1380. }
  1381. return 'N'
  1382. }
  1383. },
  1384. changeRequestDetailFlag () {
  1385. return (value) => {
  1386. if (!this.plmChangeRequestDetailArr){
  1387. return 'N'
  1388. }
  1389. let arr = this.plmChangeRequestDetailArr.filter(a => a.fieldId === value)
  1390. if (arr.length > 0) {
  1391. return arr[0].updateFlag
  1392. }
  1393. return 'N'
  1394. }
  1395. },
  1396. changeCostImpactFlag () {
  1397. return (value) => {
  1398. if (!this.plmChangeCostImpactArr){
  1399. return 'N'
  1400. }
  1401. let arr = this.plmChangeCostImpactArr.filter(a => a.fieldId === value)
  1402. if (arr.length > 0) {
  1403. return arr[0].updateFlag
  1404. }
  1405. return 'N'
  1406. }
  1407. },
  1408. changeFAItemFlag () {
  1409. return (value) => {
  1410. if (!this.plmChangeFAItemArr){
  1411. return 'N'
  1412. }
  1413. let arr = this.plmChangeFAItemArr.filter(a => a.fieldId === value)
  1414. if (arr.length > 0) {
  1415. return arr[0].updateFlag
  1416. }
  1417. return 'N'
  1418. }
  1419. },
  1420. changeExecutionInfoFlag () {
  1421. return (value) => {
  1422. if (!this.plmChangeExecutionInfoArr){
  1423. return 'N'
  1424. }
  1425. let arr = this.plmChangeExecutionInfoArr.filter(a => a.fieldId === value)
  1426. if (arr.length > 0) {
  1427. return arr[0].updateFlag
  1428. }
  1429. return 'N'
  1430. }
  1431. },
  1432. changeItemFlag () {
  1433. return (value) => {
  1434. if (!this.plmChangeItemArr){
  1435. return 'N'
  1436. }
  1437. let arr = this.plmChangeItemArr.filter(a => a.fieldId === value)
  1438. if (arr.length > 0) {
  1439. return arr[0].updateFlag
  1440. }
  1441. return 'N'
  1442. }
  1443. },
  1444. changeCountersignatureItemFlag () {
  1445. return (value) => {
  1446. if (!this.plmChangeCountersignatureItemArr){
  1447. return 'N'
  1448. }
  1449. let arr = this.plmChangeCountersignatureItemArr.filter(a => a.fieldId === value)
  1450. if (arr.length > 0) {
  1451. return arr[0].updateFlag
  1452. }
  1453. return 'N'
  1454. }
  1455. },
  1456. },
  1457. watch: {
  1458. modalData: {
  1459. deep: true,
  1460. handler: function (newV, oldV) {
  1461. if (this.modalData.tpEngineerId === '' || this.modalData.tpEngineerId == null) {
  1462. this.modalData.tpEngineerName = ''
  1463. }
  1464. if (this.modalData.industrialEngineerId === '' || this.modalData.industrialEngineerId == null) {
  1465. this.modalData.industrialEngineerName = ''
  1466. }
  1467. if (this.modalData.cqcOperatorId === '' || this.modalData.cqcOperatorId == null) {
  1468. this.modalData.cqcOperatorName = ''
  1469. }
  1470. if (this.modalData.faiOperatorId === '' || this.modalData.faiOperatorId == null) {
  1471. this.modalData.faiOperatorName = ''
  1472. }
  1473. }
  1474. },
  1475. uploadDialog (newValue,oldValue) {
  1476. if (newValue === false) {
  1477. this.getChangeFileList()
  1478. }
  1479. },
  1480. 'costImpactData.productionProductFlag': function(newVal) {
  1481. if (newVal !== 'Y') {
  1482. this.costImpactData.productionProductNumber = ''
  1483. this.costImpactData.productionProductOpinions = ''
  1484. this.costImpactData.productionProductScrapAmount = 0
  1485. this.costImpactData.productionProductExecutor = ''
  1486. this.costImpactData.productionProductExecutorName = ''
  1487. }
  1488. },
  1489. 'costImpactData.inventoryProductFlag': function(newVal) {
  1490. if (newVal !== 'Y') {
  1491. this.costImpactData.inventoryProductNumber = ''
  1492. this.costImpactData.inventoryProductOpinions = ''
  1493. this.costImpactData.inventoryProductScrapAmount = 0
  1494. this.costImpactData.inventoryProductExecutor = ''
  1495. this.costImpactData.inventoryProductExecutorName = ''
  1496. }
  1497. },
  1498. 'costImpactData.newOrderFlag': function(newVal) {
  1499. if (newVal !== 'Y') {
  1500. this.costImpactData.newOrderNumber = ''
  1501. }
  1502. },
  1503. 'costImpactData.affectedFlag': function(newVal) {
  1504. if (newVal !== 'Y') {
  1505. this.costImpactData.affectedNumber = ''
  1506. this.costImpactData.affectedOpinions = ''
  1507. this.costImpactData.affectedScrapAmount = 0
  1508. this.costImpactData.affectedExecutor = ''
  1509. this.costImpactData.affectedExecutorName = ''
  1510. }
  1511. },
  1512. },
  1513. data () {
  1514. return {
  1515. buList: [],
  1516. // 导出
  1517. exportData: [],
  1518. exportName: '工程变更记录' + this.dayjs().format('YYYYMMDDHHmmss'),
  1519. exportHeader: ['工程变更记录'],
  1520. exportFooter: [],
  1521. resultList: [],
  1522. // ======== 行高 ========
  1523. height: 200,
  1524. secondHeight: 200,
  1525. // ======== 分页 ========
  1526. pageIndex: 1,
  1527. pageSize: 50,
  1528. totalPage: 0,
  1529. pageIndex2: 1,
  1530. pageSize2: 20,
  1531. totalPage2: 0,
  1532. // 条件查询
  1533. searchData: {
  1534. site: this.$store.state.user.site,
  1535. changeNo: '',
  1536. changeStatus: '',
  1537. menuId: this.$route.meta.menuId,
  1538. buNo: '',
  1539. page: 1,
  1540. limit: 10
  1541. },
  1542. searchData2: {
  1543. site: this.$store.state.user.site,
  1544. partNo: '',
  1545. testPartNo: '',
  1546. partDesc: '',
  1547. customerId: '',
  1548. customerDesc: '',
  1549. projectId: '',
  1550. projectDesc: '',
  1551. codeNo: '',
  1552. buNo: '',
  1553. },
  1554. // 初始页签
  1555. activeTable: 'basicInformation',
  1556. activeName: 'basicInformation',
  1557. rejectOpinion: '',
  1558. tempPartRow: {},
  1559. tempExecutorRow: {},
  1560. changeTitle: '',
  1561. plmChangeRequestArr: [],
  1562. plmChangeRequestDetailArr: [],
  1563. plmChangeCostImpactArr: [],
  1564. plmChangeFAItemArr: [],
  1565. plmChangeExecutionInfoArr: [],
  1566. plmChangeItemArr: [],
  1567. plmChangeCountersignatureItemArr: [],
  1568. // ======== 数据对象 ========
  1569. modalData: {
  1570. site: this.$store.state.user.site,
  1571. changeNo: '',
  1572. applicantId: '',
  1573. applicantName: '',
  1574. applicationDepartmentId: '',
  1575. applicationDepartmentName: '',
  1576. applyDate: '',
  1577. ecnType: '',
  1578. changeImpact: '',
  1579. changeImpactDesc: '',
  1580. ecnStage: '',
  1581. changeType: '',
  1582. tpEngineerId: '',
  1583. tpEngineerName: '',
  1584. changePhaseInDate: '',
  1585. dfIsProduct: '',
  1586. printing: '',
  1587. manufacturingCostIsChange: '',
  1588. changeRequestDesc: '',
  1589. isReQuote: '',
  1590. ulCertificationRequirements: '',
  1591. ulContinueToMeetDemand: '',
  1592. gpCertificationRequirements: '',
  1593. gpContinueToMeetDemand: '',
  1594. detailList: [],
  1595. ecnTypeData: [],
  1596. industrialEngineerId: '',
  1597. industrialEngineerName: '',
  1598. changeStatus: '',
  1599. cqcOperatorId: '',
  1600. cqcOperatorName: '',
  1601. faiOperatorId: '',
  1602. faiOperatorName: '',
  1603. nodeConclusion: '',
  1604. stepId: '',
  1605. rejectFlag: '',
  1606. rejectStepId: '',
  1607. isReject: '',
  1608. menuId: this.$route.meta.menuId,
  1609. userName: this.$store.state.user.name,
  1610. rejectOpinion: '',
  1611. nodeId: '',
  1612. buNo: '',
  1613. createBy2: '',
  1614. tpProcessControl: '',
  1615. csProcessControl: ''
  1616. },
  1617. costImpactData: {
  1618. site: this.$store.state.user.site,
  1619. changeNo: '',
  1620. productionProductFlag: '',
  1621. inventoryProductFlag: '',
  1622. newOrderFlag: '',
  1623. affectedFlag: '',
  1624. productionProductNumber: '',
  1625. productionProductOpinions: '',
  1626. productionProductScrapAmount: 0,
  1627. productionProductRemark: '',
  1628. productionProductExecutor: '',
  1629. productionProductExecutorName: '',
  1630. inventoryProductNumber: '',
  1631. inventoryProductOpinions: '',
  1632. inventoryProductScrapAmount: 0,
  1633. inventoryProductRemark: '',
  1634. inventoryProductExecutor: '',
  1635. inventoryProductExecutorName: '',
  1636. newOrderNumber: '',
  1637. affectedNumber: '',
  1638. affectedOpinions: '',
  1639. affectedScrapAmount: 0,
  1640. affectedRemark: '',
  1641. affectedExecutor: '',
  1642. affectedExecutorName: '',
  1643. changeTotalCost: '',
  1644. remark: '',
  1645. createBy: '',
  1646. updateBy: ''
  1647. },
  1648. executionInfoData: {
  1649. site: this.$store.state.user.site,
  1650. changeNo: '',
  1651. originalFilmNo: '',
  1652. newFilmNo: '',
  1653. originalDieCuttingRuleNo: '',
  1654. newDieCuttingRuleNo: '',
  1655. originalStencilNo: '',
  1656. newStencilNo: '',
  1657. executionDate: '',
  1658. createBy: '',
  1659. updateBy: '',
  1660. chooseItemList: [],
  1661. chooseItemList2: []
  1662. },
  1663. chooseModelData: {
  1664. site: this.$store.state.user.site,
  1665. functionType: 'ECN',
  1666. itemNo: '',
  1667. itemDesc: '',
  1668. codeNo: ''
  1669. },
  1670. chooseModelData2: {
  1671. site: this.$store.state.user.site,
  1672. functionType: 'ECN',
  1673. itemNo: '',
  1674. itemDesc: '',
  1675. codeNo: ''
  1676. },
  1677. chooseCSModelData: {
  1678. site: this.$store.state.user.site,
  1679. functionType: 'ECN',
  1680. itemNo: '',
  1681. itemDesc: '',
  1682. codeNo: ''
  1683. },
  1684. countersignatureData: {
  1685. site: this.$store.state.user.site,
  1686. changeNo: '',
  1687. createBy: '',
  1688. updateBy: '',
  1689. chooseCSItemList: []
  1690. },
  1691. partData: {
  1692. site: '',
  1693. buNo: '',
  1694. finalPartNo: '',
  1695. testPartNo: '',
  1696. customerPartNo: '',
  1697. partDesc: '',
  1698. page: 1,
  1699. limit: 10
  1700. },
  1701. // ======== 数据列表 ========
  1702. dataList: [],
  1703. dataList2: [],
  1704. detailList: [],
  1705. fileList: [],
  1706. chooseItemList: [],
  1707. chooseItemList2: [],
  1708. chooseCSItemList: [],
  1709. chooseDataList: [],
  1710. form: [],
  1711. modelList: [],
  1712. modelList2: [],
  1713. modelCSList: [],
  1714. itemList: [],
  1715. itemList2: [],
  1716. itemCSList: [],
  1717. chooseFileList: [],
  1718. approvalList: [],
  1719. partList: [],
  1720. // ======== 列表表头 ========
  1721. columnList: [
  1722. {
  1723. userId: this.$store.state.user.name,
  1724. functionId: 108002,
  1725. serialNumber: '108002Table1BuNo',
  1726. tableId: '108002Table1',
  1727. tableName: '工程变更记录表',
  1728. columnProp: 'buNo',
  1729. headerAlign: 'center',
  1730. align: 'center',
  1731. columnLabel: 'BU',
  1732. columnHidden: false,
  1733. columnImage: false,
  1734. status: true,
  1735. fixed: '',
  1736. columnWidth: 80
  1737. },
  1738. {
  1739. userId: this.$store.state.user.name,
  1740. functionId: 108002,
  1741. serialNumber: '108002Table1ChangeNo',
  1742. tableId: '108002Table1',
  1743. tableName: '工程变更记录表',
  1744. columnProp: 'changeNo',
  1745. headerAlign: 'center',
  1746. align: 'left',
  1747. columnLabel: '申请编号',
  1748. columnHidden: false,
  1749. columnImage: false,
  1750. status: true,
  1751. fixed: '',
  1752. columnWidth: 120
  1753. },
  1754. {
  1755. userId: this.$store.state.user.name,
  1756. functionId: 108002,
  1757. serialNumber: '108002Table1ApplicantName',
  1758. tableId: '108002Table1',
  1759. tableName: '工程变更记录表',
  1760. columnProp: 'applicantName',
  1761. headerAlign: 'center',
  1762. align: 'left',
  1763. columnLabel: '申请人',
  1764. columnHidden: false,
  1765. columnImage: false,
  1766. status: true,
  1767. fixed: '',
  1768. columnWidth: 120
  1769. },
  1770. {
  1771. userId: this.$store.state.user.name,
  1772. functionId: 108002,
  1773. serialNumber: '108002Table1DepartmentName',
  1774. tableId: '108002Table1',
  1775. tableName: '工程变更记录表',
  1776. columnProp: 'applicationDepartmentName',
  1777. headerAlign: 'center',
  1778. align: 'left',
  1779. columnLabel: '申请部门',
  1780. columnHidden: false,
  1781. columnImage: false,
  1782. status: true,
  1783. fixed: '',
  1784. columnWidth: 120
  1785. },
  1786. {
  1787. userId: this.$store.state.user.name,
  1788. functionId: 108002,
  1789. serialNumber: '108002Table1ChangeStatus',
  1790. tableId: '108002Table1',
  1791. tableName: '工程变更记录表',
  1792. columnProp: 'changeStatus',
  1793. headerAlign: 'center',
  1794. align: 'left',
  1795. columnLabel: '变更单状态',
  1796. columnHidden: false,
  1797. columnImage: false,
  1798. status: true,
  1799. fixed: '',
  1800. columnWidth: 100
  1801. },
  1802. {
  1803. userId: this.$store.state.user.name,
  1804. functionId: 108002,
  1805. serialNumber: '108002Table1NodeName',
  1806. tableId: '108002Table1',
  1807. tableName: '工程变更记录表',
  1808. columnProp: 'nodeName',
  1809. headerAlign: 'center',
  1810. align: 'left',
  1811. columnLabel: '当前节点',
  1812. columnHidden: false,
  1813. columnImage: false,
  1814. status: true,
  1815. fixed: '',
  1816. columnWidth: 150
  1817. },
  1818. {
  1819. userId: this.$store.state.user.name,
  1820. functionId: 108002,
  1821. serialNumber: '108002Table1EcnStage',
  1822. tableId: '108002Table1',
  1823. tableName: '工程变更记录表',
  1824. columnProp: 'ecnStage',
  1825. headerAlign: 'center',
  1826. align: 'left',
  1827. columnLabel: 'ECN阶段',
  1828. columnHidden: false,
  1829. columnImage: false,
  1830. status: true,
  1831. fixed: '',
  1832. columnWidth: 100
  1833. },
  1834. {
  1835. userId: this.$store.state.user.name,
  1836. functionId: 108002,
  1837. serialNumber: '108002Table1ChangeType',
  1838. tableId: '108002Table1',
  1839. tableName: '工程变更记录表',
  1840. columnProp: 'changeType',
  1841. headerAlign: 'center',
  1842. align: 'left',
  1843. columnLabel: '变更类别',
  1844. columnHidden: false,
  1845. columnImage: false,
  1846. status: true,
  1847. fixed: '',
  1848. columnWidth: 100
  1849. },
  1850. {
  1851. userId: this.$store.state.user.name,
  1852. functionId: 108002,
  1853. serialNumber: '108002Table1EcnType',
  1854. tableId: '108002Table1',
  1855. tableName: '工程变更记录表',
  1856. columnProp: 'ecnType',
  1857. headerAlign: 'center',
  1858. align: 'left',
  1859. columnLabel: 'ECN种类',
  1860. columnHidden: false,
  1861. columnImage: false,
  1862. status: true,
  1863. fixed: '',
  1864. columnWidth: 100
  1865. },
  1866. {
  1867. userId: this.$store.state.user.name,
  1868. functionId: 108002,
  1869. serialNumber: '108002Table1ApplyDate',
  1870. tableId: '108002Table1',
  1871. tableName: '工程变更记录表',
  1872. columnProp: 'applyDate',
  1873. headerAlign: 'center',
  1874. align: 'center',
  1875. columnLabel: '申请日期',
  1876. columnHidden: false,
  1877. columnImage: false,
  1878. status: true,
  1879. fixed: '',
  1880. columnWidth: 100
  1881. },
  1882. {
  1883. userId: this.$store.state.user.name,
  1884. functionId: 108002,
  1885. serialNumber: '108002Table1ChangePhaseInDate',
  1886. tableId: '108002Table1',
  1887. tableName: '工程变更记录表',
  1888. columnProp: 'changePhaseInDate',
  1889. headerAlign: 'center',
  1890. align: 'center',
  1891. columnLabel: '变更生效日期',
  1892. columnHidden: false,
  1893. columnImage: false,
  1894. status: true,
  1895. fixed: '',
  1896. columnWidth: 100
  1897. },
  1898. {
  1899. userId: this.$store.state.user.name,
  1900. functionId: 108002,
  1901. serialNumber: '108002Table1xxx',
  1902. tableId: '108002Table1',
  1903. tableName: '工程变更记录表',
  1904. columnProp: 'xxx',
  1905. headerAlign: 'center',
  1906. align: 'center',
  1907. columnLabel: 'ECN执行日期',
  1908. columnHidden: false,
  1909. columnImage: false,
  1910. status: true,
  1911. fixed: '',
  1912. columnWidth: 100
  1913. },
  1914. {
  1915. userId: this.$store.state.user.name,
  1916. functionId: 108002,
  1917. serialNumber: '108002Table1CreateBy2',
  1918. tableId: '108002Table1',
  1919. tableName: '工程变更记录表',
  1920. columnProp: 'createBy2',
  1921. headerAlign: 'center',
  1922. align: 'left',
  1923. columnLabel: '当前节点审批人',
  1924. columnHidden: false,
  1925. columnImage: false,
  1926. status: true,
  1927. fixed: '',
  1928. columnWidth: 100
  1929. },
  1930. ],
  1931. columnList2: [
  1932. {
  1933. columnProp: 'buNo',
  1934. headerAlign: 'center',
  1935. align: 'center',
  1936. columnLabel: 'BU',
  1937. columnHidden: false,
  1938. columnImage: false,
  1939. status: true,
  1940. fixed: '',
  1941. columnWidth: 70
  1942. },
  1943. {
  1944. columnProp: 'testPartNo',
  1945. headerAlign: 'center',
  1946. align: 'left',
  1947. columnLabel: 'PLM物料编码',
  1948. columnHidden: false,
  1949. columnImage: false,
  1950. status: true,
  1951. fixed: '',
  1952. columnWidth: 120
  1953. },
  1954. {
  1955. columnProp: 'partNo',
  1956. headerAlign: 'center',
  1957. align: 'left',
  1958. columnLabel: 'IFS物料编码',
  1959. columnHidden: false,
  1960. columnImage: false,
  1961. status: true,
  1962. fixed: '',
  1963. columnWidth: 120
  1964. },
  1965. {
  1966. columnProp: 'partDesc',
  1967. headerAlign: 'center',
  1968. align: 'left',
  1969. columnLabel: '物料名称',
  1970. columnHidden: false,
  1971. columnImage: false,
  1972. status: true,
  1973. fixed: '',
  1974. columnWidth: 200
  1975. },
  1976. {
  1977. columnProp: 'projectId',
  1978. headerAlign: 'center',
  1979. align: 'center',
  1980. columnLabel: '项目号',
  1981. columnHidden: false,
  1982. columnImage: false,
  1983. status: true,
  1984. fixed: '',
  1985. columnWidth: 120
  1986. },
  1987. {
  1988. columnProp: 'projectDesc',
  1989. headerAlign: 'center',
  1990. align: 'left',
  1991. columnLabel: '项目名称',
  1992. columnHidden: false,
  1993. columnImage: false,
  1994. status: true,
  1995. fixed: '',
  1996. columnWidth: 180
  1997. },
  1998. {
  1999. columnProp: 'customerId',
  2000. headerAlign: 'center',
  2001. align: 'center',
  2002. columnLabel: '客户编码',
  2003. columnHidden: false,
  2004. columnImage: false,
  2005. status: true,
  2006. fixed: '',
  2007. columnWidth: 120
  2008. },
  2009. {
  2010. columnProp: 'customerDesc',
  2011. headerAlign: 'center',
  2012. align: 'left',
  2013. columnLabel: '客户名称',
  2014. columnHidden: false,
  2015. columnImage: false,
  2016. status: true,
  2017. fixed: '',
  2018. columnWidth: 180
  2019. },
  2020. {
  2021. columnProp: 'oriCodeNo',
  2022. headerAlign: 'center',
  2023. align: 'center',
  2024. columnLabel: '技术参数卡',
  2025. columnHidden: false,
  2026. columnImage: false,
  2027. status: true,
  2028. fixed: '',
  2029. columnWidth: 120
  2030. },
  2031. {
  2032. columnProp: 'ecnFlag',
  2033. headerAlign: 'center',
  2034. align: 'center',
  2035. columnLabel: '状态',
  2036. columnHidden: false,
  2037. columnImage: false,
  2038. status: true,
  2039. fixed: '',
  2040. columnWidth: 100
  2041. },
  2042. {
  2043. columnProp: 'revNo',
  2044. headerAlign: 'center',
  2045. align: 'center',
  2046. columnLabel: '版本号',
  2047. columnHidden: false,
  2048. columnImage: false,
  2049. status: true,
  2050. fixed: '',
  2051. columnWidth: 80
  2052. },
  2053. ],
  2054. detailColumnList: [
  2055. {
  2056. userId: this.$store.state.user.name,
  2057. functionId: 108002,
  2058. serialNumber: '108002Table2PlmPartNo',
  2059. tableId: '108002Table2',
  2060. tableName: '变更单基本信息表',
  2061. columnProp: 'plmPartNo',
  2062. headerAlign: 'center',
  2063. align: 'left',
  2064. columnLabel: 'PLM物料编码',
  2065. columnHidden: false,
  2066. columnImage: false,
  2067. status: true,
  2068. fixed: '',
  2069. columnWidth: 120
  2070. },
  2071. {
  2072. userId: this.$store.state.user.name,
  2073. functionId: 108002,
  2074. serialNumber: '108002Table2PartNo',
  2075. tableId: '108002Table2',
  2076. tableName: '变更单基本信息表',
  2077. columnProp: 'partNo',
  2078. headerAlign: 'center',
  2079. align: 'left',
  2080. columnLabel: 'IFS物料编码',
  2081. columnHidden: false,
  2082. columnImage: false,
  2083. status: true,
  2084. fixed: '',
  2085. columnWidth: 120
  2086. },
  2087. {
  2088. userId: this.$store.state.user.name,
  2089. functionId: 108002,
  2090. serialNumber: '108002Table2PartDesc',
  2091. tableId: '108002Table2',
  2092. tableName: '变更单基本信息表',
  2093. columnProp: 'partDesc',
  2094. headerAlign: 'center',
  2095. align: 'left',
  2096. columnLabel: '物料名称',
  2097. columnHidden: false,
  2098. columnImage: false,
  2099. status: true,
  2100. fixed: '',
  2101. columnWidth: 200
  2102. },
  2103. {
  2104. userId: this.$store.state.user.name,
  2105. functionId: 108002,
  2106. serialNumber: '108002Table2NewPartNo',
  2107. tableId: '108002Table2',
  2108. tableName: '变更单基本信息表',
  2109. columnProp: 'newPartNo',
  2110. headerAlign: 'center',
  2111. align: 'left',
  2112. columnLabel: 'IFS料号',
  2113. columnHidden: false,
  2114. columnImage: false,
  2115. status: true,
  2116. fixed: '',
  2117. columnWidth: 120
  2118. },
  2119. {
  2120. userId: this.$store.state.user.name,
  2121. functionId: 108002,
  2122. serialNumber: '108002Table2NewDrawingNo',
  2123. tableId: '108002Table2',
  2124. tableName: '变更单基本信息表',
  2125. columnProp: 'newDrawingNo',
  2126. headerAlign: 'center',
  2127. align: 'center',
  2128. columnLabel: '新图纸编码',
  2129. columnHidden: false,
  2130. columnImage: false,
  2131. status: true,
  2132. fixed: '',
  2133. columnWidth: 100
  2134. },
  2135. {
  2136. userId: this.$store.state.user.name,
  2137. functionId: 108002,
  2138. serialNumber: '108002Table2NewDraftNo',
  2139. tableId: '108002Table2',
  2140. tableName: '变更单基本信息表',
  2141. columnProp: 'newDraftNo',
  2142. headerAlign: 'center',
  2143. align: 'center',
  2144. columnLabel: '新图稿编码',
  2145. columnHidden: false,
  2146. columnImage: false,
  2147. status: true,
  2148. fixed: '',
  2149. columnWidth: 100
  2150. },
  2151. {
  2152. userId: this.$store.state.user.name,
  2153. functionId: 108002,
  2154. serialNumber: '108002Table2OriCodeNo',
  2155. tableId: '108002Table2',
  2156. tableName: '变更单基本信息表',
  2157. columnProp: 'oriCodeNo',
  2158. headerAlign: 'center',
  2159. align: 'center',
  2160. columnLabel: '技术参数卡编码',
  2161. columnHidden: false,
  2162. columnImage: false,
  2163. status: true,
  2164. fixed: '',
  2165. columnWidth: 120
  2166. },
  2167. {
  2168. userId: this.$store.state.user.name,
  2169. functionId: 108002,
  2170. serialNumber: '108002Table2RevNo',
  2171. tableId: '108002Table2',
  2172. tableName: '变更单基本信息表',
  2173. columnProp: 'revNo',
  2174. headerAlign: 'center',
  2175. align: 'right',
  2176. columnLabel: '版本号',
  2177. columnHidden: false,
  2178. columnImage: false,
  2179. status: true,
  2180. fixed: '',
  2181. columnWidth: 60
  2182. },
  2183. ],
  2184. fileColumnList: [
  2185. {
  2186. userId: this.$store.state.user.name,
  2187. functionId: 108002,
  2188. serialNumber: '108002Table3FileName',
  2189. tableId: '108002Table2',
  2190. tableName: '文件信息表',
  2191. columnProp: 'fileName',
  2192. headerAlign: 'center',
  2193. align: 'center',
  2194. columnLabel: '文件名称',
  2195. columnHidden: false,
  2196. columnImage: false,
  2197. columnSortable: false,
  2198. sortLv: 0,
  2199. status: true,
  2200. fixed: '',
  2201. columnWidth: 140
  2202. },
  2203. {
  2204. userId: this.$store.state.user.name,
  2205. functionId: 108002,
  2206. serialNumber: '108002Table3FileRemark',
  2207. tableId: '108002Table2',
  2208. tableName: '文件信息表',
  2209. columnProp: 'fileRemark',
  2210. headerAlign: 'center',
  2211. align: 'center',
  2212. columnLabel: '备注',
  2213. columnHidden: false,
  2214. columnImage: false,
  2215. columnSortable: false,
  2216. sortLv: 0,
  2217. status: true,
  2218. fixed: '',
  2219. columnWidth: 240
  2220. },
  2221. // {
  2222. // userId: this.$store.state.user.name,
  2223. // functionId: 108002,
  2224. // serialNumber: '108002Table2OrderRef3',
  2225. // tableId: '108002Table2',
  2226. // tableName: '文件信息表',
  2227. // columnProp: 'orderRef3',
  2228. // headerAlign: 'center',
  2229. // align: 'center',
  2230. // columnLabel: '文件描述',
  2231. // columnHidden: false,
  2232. // columnImage: false,
  2233. // columnSortable: false,
  2234. // sortLv: 0,
  2235. // status: true,
  2236. // fixed: '',
  2237. // columnWidth: 120
  2238. // },
  2239. {
  2240. userId: this.$store.state.user.name,
  2241. functionId: 108002,
  2242. serialNumber: '108002Table3CreateDate',
  2243. tableId: '108002Table2',
  2244. tableName: '文件信息表',
  2245. columnProp: 'createDate',
  2246. headerAlign: 'center',
  2247. align: 'center',
  2248. columnLabel: '上传时间',
  2249. columnHidden: false,
  2250. columnImage: false,
  2251. columnSortable: false,
  2252. sortLv: 0,
  2253. status: true,
  2254. fixed: '',
  2255. columnWidth: 140
  2256. },
  2257. {
  2258. userId: this.$store.state.user.name,
  2259. functionId: 108002,
  2260. serialNumber: '108002Table3CreatedBy',
  2261. tableId: '108002Table2',
  2262. tableName: '文件信息表',
  2263. columnProp: 'createBy',
  2264. headerAlign: 'center',
  2265. align: 'center',
  2266. columnLabel: '上传人',
  2267. columnHidden: false,
  2268. columnImage: false,
  2269. columnSortable: false,
  2270. sortLv: 0,
  2271. status: true,
  2272. fixed: '',
  2273. columnWidth: 140
  2274. },
  2275. ],
  2276. columnChooseDataList: [
  2277. {
  2278. userId: this.$store.state.user.name,
  2279. functionId: 108002,
  2280. serialNumber: '108002Table4PlmPartNo',
  2281. tableId: '108002Table4',
  2282. tableName: '所选变更列表',
  2283. columnProp: 'plmPartNo',
  2284. headerAlign: 'center',
  2285. align: 'left',
  2286. columnLabel: 'PLM物料编码/PLM Part No.',
  2287. columnHidden: false,
  2288. columnImage: false,
  2289. status: true,
  2290. fixed: '',
  2291. columnWidth: 120
  2292. },
  2293. {
  2294. userId: this.$store.state.user.name,
  2295. functionId: 108002,
  2296. serialNumber: '108002Table4PartNo',
  2297. tableId: '108002Table4',
  2298. tableName: '所选变更列表',
  2299. columnProp: 'partNo',
  2300. headerAlign: 'center',
  2301. align: 'left',
  2302. columnLabel: 'IFS物料编码/IFS Part No.',
  2303. columnHidden: false,
  2304. columnImage: false,
  2305. status: true,
  2306. fixed: '',
  2307. columnWidth: 120
  2308. },
  2309. {
  2310. userId: this.$store.state.user.name,
  2311. functionId: 108002,
  2312. serialNumber: '108002Table4PartDesc',
  2313. tableId: '108002Table4',
  2314. tableName: '所选变更列表',
  2315. columnProp: 'partDesc',
  2316. headerAlign: 'center',
  2317. align: 'left',
  2318. columnLabel: '物料名称/Part Desc.',
  2319. columnHidden: false,
  2320. columnImage: false,
  2321. status: true,
  2322. fixed: '',
  2323. columnWidth: 180
  2324. },
  2325. {
  2326. userId: this.$store.state.user.name,
  2327. functionId: 108002,
  2328. serialNumber: '108002Table4DrawingNo',
  2329. tableId: '108002Table4',
  2330. tableName: '所选变更列表',
  2331. columnProp: 'drawingNo',
  2332. headerAlign: 'center',
  2333. align: 'center',
  2334. columnLabel: '图纸编码/Drawing No.',
  2335. columnHidden: false,
  2336. columnImage: false,
  2337. status: true,
  2338. fixed: '',
  2339. columnWidth: 90
  2340. },
  2341. {
  2342. userId: this.$store.state.user.name,
  2343. functionId: 108002,
  2344. serialNumber: '108002Table4DraftNo',
  2345. tableId: '108002Table4',
  2346. tableName: '所选变更列表',
  2347. columnProp: 'draftNo',
  2348. headerAlign: 'center',
  2349. align: 'center',
  2350. columnLabel: '图稿编码/Proof No.',
  2351. columnHidden: false,
  2352. columnImage: false,
  2353. status: true,
  2354. fixed: '',
  2355. columnWidth: 90
  2356. },
  2357. ],
  2358. columnChooseItemList: [
  2359. {
  2360. columnProp: 'itemNo',
  2361. headerAlign: 'center',
  2362. align: 'center',
  2363. columnLabel: '属性编码',
  2364. columnHidden: false,
  2365. columnImage: false,
  2366. status: true,
  2367. fixed: '',
  2368. columnWidth: 80
  2369. },
  2370. {
  2371. columnProp: 'itemDesc',
  2372. headerAlign: 'center',
  2373. align: 'center',
  2374. columnLabel: '属性名称',
  2375. columnHidden: false,
  2376. columnImage: false,
  2377. status: true,
  2378. fixed: '',
  2379. columnWidth: 150
  2380. },
  2381. {
  2382. columnProp: 'itemExecutionDate',
  2383. headerAlign: 'center',
  2384. align: 'center',
  2385. columnLabel: '执行时间',
  2386. columnHidden: false,
  2387. columnImage: false,
  2388. status: true,
  2389. fixed: '',
  2390. columnWidth: 130
  2391. }
  2392. ],
  2393. columnChooseItemList2: [
  2394. {
  2395. columnProp: 'itemNo',
  2396. headerAlign: 'center',
  2397. align: 'center',
  2398. columnLabel: '属性编码',
  2399. columnHidden: false,
  2400. columnImage: false,
  2401. status: true,
  2402. fixed: '',
  2403. columnWidth: 80
  2404. },
  2405. {
  2406. columnProp: 'itemDesc',
  2407. headerAlign: 'center',
  2408. align: 'center',
  2409. columnLabel: '属性名称',
  2410. columnHidden: false,
  2411. columnImage: false,
  2412. status: true,
  2413. fixed: '',
  2414. columnWidth: 150
  2415. },
  2416. // {
  2417. // columnProp: 'executeFlag',
  2418. // headerAlign: 'center',
  2419. // align: 'center',
  2420. // columnLabel: '是否执行',
  2421. // columnHidden: false,
  2422. // columnImage: false,
  2423. // status: true,
  2424. // fixed: '',
  2425. // columnWidth: 80
  2426. // },
  2427. // {
  2428. // columnProp: 'executor',
  2429. // headerAlign: 'center',
  2430. // align: 'center',
  2431. // columnLabel: '执行人',
  2432. // columnHidden: false,
  2433. // columnImage: false,
  2434. // status: true,
  2435. // fixed: '',
  2436. // columnWidth: 100
  2437. // },
  2438. // {
  2439. // columnProp: 'itemExecutionDate',
  2440. // headerAlign: 'center',
  2441. // align: 'center',
  2442. // columnLabel: '执行时间',
  2443. // columnHidden: false,
  2444. // columnImage: false,
  2445. // status: true,
  2446. // fixed: '',
  2447. // columnWidth: 150
  2448. // }
  2449. ],
  2450. columnItemList: [
  2451. {
  2452. userId: this.$store.state.user.name,
  2453. functionId: 108002,
  2454. serialNumber: '108002Table6ItemNo',
  2455. tableId: '108002Table6',
  2456. tableName: '执行属性表',
  2457. columnProp: 'itemNo',
  2458. headerAlign: 'center',
  2459. align: 'center',
  2460. columnLabel: '属性编码',
  2461. columnHidden: false,
  2462. columnImage: false,
  2463. status: true,
  2464. fixed: '',
  2465. columnWidth: 80
  2466. },
  2467. {
  2468. userId: this.$store.state.user.name,
  2469. functionId: 108002,
  2470. serialNumber: '108002Table6ItemDesc',
  2471. tableId: '108002Table6',
  2472. tableName: '执行属性表',
  2473. columnProp: 'itemDesc',
  2474. headerAlign: 'center',
  2475. align: 'center',
  2476. columnLabel: '属性名称',
  2477. columnHidden: false,
  2478. columnImage: false,
  2479. status: true,
  2480. fixed: '',
  2481. columnWidth: 150
  2482. },
  2483. ],
  2484. columnItemList2: [
  2485. {
  2486. columnProp: 'itemNo',
  2487. headerAlign: 'center',
  2488. align: 'center',
  2489. columnLabel: '属性编码',
  2490. columnHidden: false,
  2491. columnImage: false,
  2492. status: true,
  2493. fixed: '',
  2494. columnWidth: 80
  2495. },
  2496. {
  2497. columnProp: 'itemDesc',
  2498. headerAlign: 'center',
  2499. align: 'center',
  2500. columnLabel: '属性名称',
  2501. columnHidden: false,
  2502. columnImage: false,
  2503. status: true,
  2504. fixed: '',
  2505. columnWidth: 150
  2506. },
  2507. ],
  2508. columnCSItemList: [
  2509. {
  2510. userId: this.$store.state.user.name,
  2511. functionId: 108001,
  2512. serialNumber: '108001Table5ItemNo',
  2513. tableId: '108001Table5',
  2514. tableName: '执行属性表',
  2515. columnProp: 'itemNo',
  2516. headerAlign: 'center',
  2517. align: 'center',
  2518. columnLabel: '属性编码',
  2519. columnHidden: false,
  2520. columnImage: false,
  2521. status: true,
  2522. fixed: '',
  2523. columnWidth: 80
  2524. },
  2525. {
  2526. userId: this.$store.state.user.name,
  2527. functionId: 108001,
  2528. serialNumber: '108001Table5ItemDesc',
  2529. tableId: '108001Table5',
  2530. tableName: '执行属性表',
  2531. columnProp: 'itemDesc',
  2532. headerAlign: 'center',
  2533. align: 'center',
  2534. columnLabel: '属性名称',
  2535. columnHidden: false,
  2536. columnImage: false,
  2537. status: true,
  2538. fixed: '',
  2539. columnWidth: 150
  2540. },
  2541. ],
  2542. columnCSChooseItemList: [
  2543. {
  2544. userId: this.$store.state.user.name,
  2545. functionId: 108002,
  2546. serialNumber: '108002Table7ItemNo',
  2547. tableId: '108002Table7',
  2548. tableName: '执行属性表',
  2549. columnProp: 'itemNo',
  2550. headerAlign: 'center',
  2551. align: 'left',
  2552. columnLabel: '属性编码',
  2553. columnHidden: false,
  2554. columnImage: false,
  2555. status: true,
  2556. fixed: '',
  2557. columnWidth: 100
  2558. },
  2559. {
  2560. userId: this.$store.state.user.name,
  2561. functionId: 108002,
  2562. serialNumber: '108002Table7ItemDesc',
  2563. tableId: '108002Table7',
  2564. tableName: '执行属性表',
  2565. columnProp: 'itemDesc',
  2566. headerAlign: 'center',
  2567. align: 'left',
  2568. columnLabel: '属性名称',
  2569. columnHidden: false,
  2570. columnImage: false,
  2571. status: true,
  2572. fixed: '',
  2573. columnWidth: 150
  2574. },
  2575. {
  2576. userId: this.$store.state.user.name,
  2577. functionId: 108002,
  2578. serialNumber: '108002Table7ExecuteDate',
  2579. tableId: '108002Table7',
  2580. tableName: '执行属性表',
  2581. columnProp: 'itemExecutionDate',
  2582. headerAlign: 'center',
  2583. align: 'center',
  2584. columnLabel: '会签时间',
  2585. columnHidden: false,
  2586. columnImage: false,
  2587. status: true,
  2588. fixed: '',
  2589. columnWidth: 150
  2590. },
  2591. ],
  2592. approvalColumnList: [
  2593. {
  2594. userId: this.$store.state.user.name,
  2595. functionId: 108002,
  2596. serialNumber: '108002Table8ClassificationNo',
  2597. tableId: '108002Table8',
  2598. tableName: '审批信息',
  2599. columnProp: 'classificationNo',
  2600. headerAlign: 'center',
  2601. align: 'center',
  2602. columnLabel: '流程分类编码',
  2603. columnHidden: false,
  2604. columnImage: false,
  2605. status: true,
  2606. fixed: '',
  2607. columnWidth: 120
  2608. },
  2609. {
  2610. userId: this.$store.state.user.name,
  2611. functionId: 108002,
  2612. serialNumber: '108002Table8ItemDesc',
  2613. tableId: '108002Table8',
  2614. tableName: '审批信息',
  2615. columnProp: 'nodeName',
  2616. headerAlign: 'center',
  2617. align: 'left',
  2618. columnLabel: '节点名称',
  2619. columnHidden: false,
  2620. columnImage: false,
  2621. status: true,
  2622. fixed: '',
  2623. columnWidth: 200
  2624. },
  2625. {
  2626. userId: this.$store.state.user.name,
  2627. functionId: 108002,
  2628. serialNumber: '108002Table8RejectFlag',
  2629. tableId: '108002Table8',
  2630. tableName: '审批信息',
  2631. columnProp: 'rejectFlagDesc',
  2632. headerAlign: 'center',
  2633. align: 'center',
  2634. columnLabel: '是否被驳回',
  2635. columnHidden: false,
  2636. columnImage: false,
  2637. status: true,
  2638. fixed: '',
  2639. columnWidth: 100
  2640. },
  2641. {
  2642. userId: this.$store.state.user.name,
  2643. functionId: 108002,
  2644. serialNumber: '108002Table8RejectNodeName',
  2645. tableId: '108002Table8',
  2646. tableName: '审批信息',
  2647. columnProp: 'rejectNodeName',
  2648. headerAlign: 'center',
  2649. align: 'center',
  2650. columnLabel: '被驳回节点名称',
  2651. columnHidden: false,
  2652. columnImage: false,
  2653. status: true,
  2654. fixed: '',
  2655. columnWidth: 200
  2656. },
  2657. {
  2658. userId: this.$store.state.user.name,
  2659. functionId: 108002,
  2660. serialNumber: '108002Table8NodeConclusionDesc',
  2661. tableId: '108002Table8',
  2662. tableName: '审批信息',
  2663. columnProp: 'nodeConclusionDesc',
  2664. headerAlign: 'center',
  2665. align: 'center',
  2666. columnLabel: '节点结论',
  2667. columnHidden: false,
  2668. columnImage: false,
  2669. status: true,
  2670. fixed: '',
  2671. columnWidth: 100
  2672. },
  2673. {
  2674. userId: this.$store.state.user.name,
  2675. functionId: 108002,
  2676. serialNumber: '108002Table8CreateDate',
  2677. tableId: '108002Table8',
  2678. tableName: '审批信息',
  2679. columnProp: 'createDate',
  2680. headerAlign: 'center',
  2681. align: 'center',
  2682. columnLabel: '提交时间',
  2683. columnHidden: false,
  2684. columnImage: false,
  2685. status: true,
  2686. fixed: '',
  2687. columnWidth: 170
  2688. },
  2689. {
  2690. userId: this.$store.state.user.name,
  2691. functionId: 108002,
  2692. serialNumber: '108002Table8CreateBy',
  2693. tableId: '108002Table8',
  2694. tableName: '审批信息',
  2695. columnProp: 'createBy',
  2696. headerAlign: 'center',
  2697. align: 'center',
  2698. columnLabel: '提交人员',
  2699. columnHidden: false,
  2700. columnImage: false,
  2701. status: true,
  2702. fixed: '',
  2703. columnWidth: 100
  2704. },
  2705. {
  2706. userId: this.$store.state.user.name,
  2707. functionId: 108002,
  2708. serialNumber: '108002Table8RejectOpinion',
  2709. tableId: '108002Table8',
  2710. tableName: '审批信息',
  2711. columnProp: 'rejectOpinion',
  2712. headerAlign: 'center',
  2713. align: 'left',
  2714. columnLabel: '驳回意见',
  2715. columnHidden: false,
  2716. columnImage: false,
  2717. status: true,
  2718. fixed: '',
  2719. columnWidth: 300
  2720. },
  2721. ],
  2722. partColumnList: [
  2723. {
  2724. columnProp: 'testPartNo',
  2725. headerAlign: "center",
  2726. align: "left",
  2727. columnLabel: 'PLM物料编码',
  2728. columnHidden: false,
  2729. columnImage: false,
  2730. columnSortable: false,
  2731. sortLv: 0,
  2732. status: true,
  2733. fixed: '',
  2734. columnWidth: 120
  2735. },
  2736. {
  2737. columnProp: 'finalPartNo',
  2738. headerAlign: "center",
  2739. align: "left",
  2740. columnLabel: 'IFS物料编码',
  2741. columnHidden: false,
  2742. columnImage: false,
  2743. columnSortable: false,
  2744. sortLv: 0,
  2745. status: true,
  2746. fixed: '',
  2747. columnWidth: 120
  2748. },
  2749. {
  2750. columnProp: 'customerPartNo',
  2751. headerAlign: "center",
  2752. align: "left",
  2753. columnLabel: '客户料号',
  2754. columnHidden: false,
  2755. columnImage: false,
  2756. columnSortable: false,
  2757. sortLv: 0,
  2758. status: true,
  2759. fixed: '',
  2760. columnWidth: 120
  2761. },
  2762. {
  2763. columnProp: 'partDesc',
  2764. headerAlign: "center",
  2765. align: "left",
  2766. columnLabel: '物料名称',
  2767. columnHidden: false,
  2768. columnImage: false,
  2769. status: true,
  2770. fixed: '',
  2771. columnWidth: 200
  2772. },
  2773. ],
  2774. // ======== 必填规则 ========
  2775. rules: {
  2776. applicantId: [
  2777. {
  2778. required: true,
  2779. message: ' ',
  2780. trigger: ['blur','change']
  2781. }
  2782. ],
  2783. applyDate: [
  2784. {
  2785. required: true,
  2786. message: ' ',
  2787. trigger: ['blur','change']
  2788. }
  2789. ],
  2790. changeImpact: [
  2791. {
  2792. required: true,
  2793. message: ' ',
  2794. trigger: ['blur','change']
  2795. }
  2796. ],
  2797. ecnStage: [
  2798. {
  2799. required: true,
  2800. message: ' ',
  2801. trigger: ['blur','change']
  2802. }
  2803. ],
  2804. changeType: [
  2805. {
  2806. required: true,
  2807. message: ' ',
  2808. trigger: ['blur','change']
  2809. }
  2810. ],
  2811. tpEngineerId: [
  2812. {
  2813. required: true,
  2814. message: ' ',
  2815. trigger: ['blur','change']
  2816. }
  2817. ],
  2818. changePhaseInDate: [
  2819. {
  2820. required: true,
  2821. message: ' ',
  2822. trigger: ['blur','change']
  2823. }
  2824. ],
  2825. dfIsProduct: [
  2826. {
  2827. required: true,
  2828. message: ' ',
  2829. trigger: ['blur','change']
  2830. }
  2831. ],
  2832. printing: [
  2833. {
  2834. required: true,
  2835. message: ' ',
  2836. trigger: ['blur','change']
  2837. }
  2838. ],
  2839. manufacturingCostIsChange: [
  2840. {
  2841. required: true,
  2842. message: ' ',
  2843. trigger: ['blur','change']
  2844. }
  2845. ],
  2846. changeRequestDesc: [
  2847. {
  2848. required: true,
  2849. message: ' ',
  2850. trigger: ['blur','change']
  2851. }
  2852. ],
  2853. isReQuote: [
  2854. {
  2855. required: true,
  2856. message: ' ',
  2857. trigger: ['blur','change']
  2858. }
  2859. ],
  2860. ulCertificationRequirements: [
  2861. {
  2862. required: true,
  2863. message: ' ',
  2864. trigger: ['blur','change']
  2865. }
  2866. ],
  2867. ulContinueToMeetDemand: [
  2868. {
  2869. required: true,
  2870. message: ' ',
  2871. trigger: ['blur','change']
  2872. }
  2873. ],
  2874. gpCertificationRequirements: [
  2875. {
  2876. required: true,
  2877. message: ' ',
  2878. trigger: ['blur','change']
  2879. }
  2880. ],
  2881. gpContinueToMeetDemand: [
  2882. {
  2883. required: true,
  2884. message: ' ',
  2885. trigger: ['blur','change']
  2886. }
  2887. ],
  2888. ecnType: [
  2889. {
  2890. required: true,
  2891. message: ' ',
  2892. trigger: ['blur','change']
  2893. }
  2894. ],
  2895. },
  2896. // ======== 复选数据集 ========
  2897. fileSelections: [],
  2898. itemSelections: [],
  2899. dataSelections2: [],
  2900. // ======== 选中的当前行数据 ========
  2901. currentRow: {},
  2902. currentCostImpactData: {},
  2903. currentExecutionInfoData: {},
  2904. currentChooseItemList: [],
  2905. currentChooseItemList2: [],
  2906. currentChooseCSItemList: [],
  2907. // ======== 模态框开关控制 ========
  2908. modalFlag: false,
  2909. modalDisableFlag: false,
  2910. ecnTypeModalFlag: false,
  2911. chooseModelFlag: false,
  2912. chooseModelFlag2: false,
  2913. chooseCSModelFlag: false,
  2914. uploadDialog: false,
  2915. submitModalFlag: false,
  2916. addDetailModal: false,
  2917. saveLoading: false,
  2918. submitLoading: false,
  2919. menuId: this.$route.meta.menuId,
  2920. authSearch: false,
  2921. authUpdate: false,
  2922. authIssue: false,
  2923. authSubmit: false,
  2924. authReject: false,
  2925. authFileSave: false,
  2926. authFileDownLoad: false,
  2927. authFileRemove: false,
  2928. authFilePreview: false,
  2929. partModelFlag: false,
  2930. createBy2: this.$store.state.user.name,
  2931. superAdmin: false,
  2932. }
  2933. },
  2934. mounted () {
  2935. this.$nextTick(() => {
  2936. this.height = window.innerHeight / 2 - 30
  2937. /*第二个表格高度的动态调整*/
  2938. this.secondHeight = window.innerHeight / 2 - 186
  2939. })
  2940. },
  2941. activated () {
  2942. if (this.authSearch) {
  2943. if (this.$route.params.type === 'tokenLogin') {
  2944. if (this.$route.params.docNo) {
  2945. this.searchData.changeNo = this.$route.params.docNo
  2946. }
  2947. this.searchData.limit = this.pageSize
  2948. this.searchData.page = this.pageIndex
  2949. changeRecordSearch(this.searchData).then(({data}) => {
  2950. if (data.code === 0) {
  2951. this.dataList = data.page.list
  2952. this.pageIndex = data.page.currPage
  2953. this.pageSize = data.page.pageSize
  2954. this.totalPage = data.page.totalCount
  2955. // 判断是否全部存在数据
  2956. if (this.dataList.length > 0) {
  2957. // 设置选中行
  2958. this.$refs.changeTable.setCurrentRow(this.dataList[0])
  2959. this.updateModal(this.dataList[0])
  2960. } else {
  2961. this.currentRow = {}
  2962. }
  2963. }
  2964. })
  2965. } else {
  2966. if (this.$route.params.changeNo) {
  2967. this.searchData.changeNo = this.$route.params.changeNo
  2968. }
  2969. this.getDataList()
  2970. }
  2971. }
  2972. },
  2973. created () {
  2974. // 按钮控制
  2975. this.getButtonAuthData()
  2976. this.getEcnModel()
  2977. this.getEcnModel2()
  2978. this.getEcnCSModel()
  2979. this.getBuBySite()
  2980. this.checkSuperAdmin()
  2981. },
  2982. methods: {
  2983. // 校验是否为超级管理员
  2984. checkSuperAdmin () {
  2985. checkSuperAdmin().then(({data}) => {
  2986. this.superAdmin = data.superAdmin
  2987. })
  2988. },
  2989. // 获取用户的bu
  2990. getBuBySite () {
  2991. let tempData = {
  2992. site: this.$store.state.user.site,
  2993. }
  2994. getBuBySite(tempData).then(({data}) => {
  2995. if (data.code === 0) {
  2996. this.buList = data.rows
  2997. }
  2998. })
  2999. },
  3000. // 查询ECN的评估模板
  3001. getEcnModel2 () {
  3002. let tempData = {
  3003. site: this.$store.state.user.site,
  3004. functionType: 'ECN',
  3005. codeNo: 'E002'
  3006. }
  3007. getEcnModel(tempData).then(({data}) => {
  3008. if (data.code === 0) {
  3009. this.modelList2 = data.rows
  3010. }
  3011. })
  3012. },
  3013. // 查询会签的模板
  3014. getEcnCSModel () {
  3015. let tempData = {
  3016. site: this.$store.state.user.site,
  3017. functionType: 'ECN',
  3018. codeNo: 'E003'
  3019. }
  3020. getEcnModel(tempData).then(({data}) => {
  3021. if (data.code === 0) {
  3022. this.modelCSList = data.rows
  3023. }
  3024. })
  3025. },
  3026. // 选择模板属性
  3027. chooseFeasibilityAssessmentModel () {
  3028. this.chooseModelData2 = {
  3029. site: this.$store.state.user.site,
  3030. itemNo: '',
  3031. itemDesc: '',
  3032. functionType: 'ECN',
  3033. codeNo: this.modelList2.length > 0 ? this.modelList2[0].codeNo : ''
  3034. }
  3035. // 先清空缓存选中
  3036. //this.$nextTick(() => this.$refs.itemTable2.clearSelection())
  3037. getItemList(this.chooseModelData2).then(({data}) => {
  3038. if (data && data.code === 0) {
  3039. this.itemList2 = data.rows
  3040. this.itemList2.forEach(val => {
  3041. // 回显选中
  3042. if (this.chooseItemList2.map(val => val.itemNo).includes(val.itemNo)) {
  3043. this.$nextTick(() => this.$refs.itemTable2.toggleRowSelection(val, true))
  3044. }
  3045. })
  3046. } else {
  3047. this.$alert(data.msg, '错误', {
  3048. confirmButtonText: '确定'
  3049. })
  3050. }
  3051. })
  3052. this.chooseModelFlag2 = true
  3053. },
  3054. // 选择会签模板属性
  3055. chooseCSModel () {
  3056. this.chooseCSModelData = {
  3057. site: this.$store.state.user.site,
  3058. itemNo: '',
  3059. itemDesc: '',
  3060. functionType: 'ECN',
  3061. codeNo: this.modelCSList.length > 0 ? this.modelCSList[0].codeNo : ''
  3062. }
  3063. // 先清空缓存选中
  3064. this.$nextTick(() => this.$refs.itemCSTable.clearSelection())
  3065. // 查询所有属性
  3066. getItemList(this.chooseCSModelData).then(({data}) => {
  3067. if (data && data.code === 0) {
  3068. this.itemCSList = data.rows
  3069. this.itemCSList.forEach(val => {
  3070. // 回显选中的部门
  3071. if (this.chooseCSItemList.map(val => val.itemNo).includes(val.itemNo)) {
  3072. this.$nextTick(() => this.$refs.itemCSTable.toggleRowSelection(val, true))
  3073. }
  3074. })
  3075. } else {
  3076. this.$alert(data.msg, '错误', {
  3077. confirmButtonText: '确定'
  3078. })
  3079. }
  3080. })
  3081. this.chooseCSModelFlag = true
  3082. },
  3083. // 确认多选属性
  3084. confirmItem2 () {
  3085. if (this.itemSelections2.length === 0) {
  3086. this.$message.warning("请勾选属性!")
  3087. return
  3088. }
  3089. // 临时集合
  3090. let temp = []
  3091. // 首先,遍历a,检查每个对象的名字是否在b中也存在
  3092. this.chooseItemList2.forEach(itemA => {
  3093. if (this.itemSelections2.some(itemB => itemB.itemNo === itemA.itemNo)) {
  3094. // 如果存在,则将a中的对象添加到结果中(这里直接用a的原对象,因为要求是保留a中对象)
  3095. temp.push(itemA)
  3096. }
  3097. })
  3098. // 然后,遍历b,检查是否有对象的名字不在结果中已存在的名字中
  3099. this.itemSelections2.forEach(itemB => {
  3100. if (!temp.some(itemR => itemR.itemNo === itemB.itemNo)) {
  3101. // 如果b中的对象名字不在结果中,则添加到结果中
  3102. temp.push(itemB)
  3103. }
  3104. })
  3105. this.chooseItemList2 = temp.map(item => {
  3106. if (item.availableValueList.length > 0) {
  3107. item.chooseValue = item.availableValueList[0].availableValue
  3108. }
  3109. return item
  3110. })
  3111. this.chooseModelFlag2 = false
  3112. },
  3113. // 确认多选CS属性
  3114. confirmCSItem () {
  3115. if (this.itemCSSelections.length === 0) {
  3116. this.$message.warning("请勾选属性!")
  3117. return
  3118. }
  3119. // 临时集合
  3120. let temp = []
  3121. // 首先,遍历a,检查每个对象的名字是否在b中也存在
  3122. this.chooseCSItemList.forEach(itemA => {
  3123. if (this.itemCSSelections.some(itemB => itemB.itemNo === itemA.itemNo)) {
  3124. // 如果存在,则将a中的对象添加到结果中(这里直接用a的原对象,因为要求是保留a中对象)
  3125. temp.push(itemA)
  3126. }
  3127. })
  3128. // 然后,遍历b,检查是否有对象的名字不在结果中已存在的名字中
  3129. this.itemCSSelections.forEach(itemB => {
  3130. if (!temp.some(itemR => itemR.itemNo === itemB.itemNo)) {
  3131. // 如果b中的对象名字不在结果中,则添加到结果中
  3132. temp.push(itemB)
  3133. }
  3134. })
  3135. this.chooseCSItemList = temp
  3136. this.chooseCSModelFlag = false
  3137. },
  3138. // 查询属性
  3139. searchItemList2 () {
  3140. getItemList(this.chooseModelData2).then(({data}) => {
  3141. if (data.code === 0) {
  3142. this.itemList2 = data.rows
  3143. }
  3144. })
  3145. },
  3146. // 查询CS属性
  3147. searchCSItemList () {
  3148. getItemList(this.chooseCSModelData).then(({data}) => {
  3149. if (data.code === 0) {
  3150. this.itemCSList = data.rows
  3151. }
  3152. })
  3153. },
  3154. // 单机选择
  3155. itemClickRow2 (row) {
  3156. this.$refs.itemTable2.toggleRowSelection(row)
  3157. },
  3158. // 单击选择
  3159. itemCSClickRow (row) {
  3160. this.$refs.itemCSTable.toggleRowSelection(row)
  3161. },
  3162. // 复选属性
  3163. selectionItem2 (val) {
  3164. this.itemSelections2 = val
  3165. },
  3166. // 复选CS属性
  3167. selectionCSItem (val) {
  3168. this.itemCSSelections = val
  3169. },
  3170. // 获取流程的配置权限
  3171. async getNodeAuthority (row) {
  3172. let tempData = {
  3173. site: row.site,
  3174. changeNo: row.changeNo,
  3175. stepId: row.stepId,
  3176. menuId: this.$route.meta.menuId
  3177. }
  3178. await getNodeAuthority(tempData).then(({data}) => {
  3179. if (data && data.code === 0) {
  3180. this.plmChangeRequestArr = data.rows.plm_change_request
  3181. this.plmChangeRequestDetailArr = data.rows.plm_change_request_detail
  3182. this.plmChangeCostImpactArr = data.rows.plm_change_cost_impact
  3183. this.plmChangeFAItemArr = data.rows.plm_change_FA_item
  3184. this.plmChangeExecutionInfoArr = data.rows.plm_change_execution_info
  3185. this.plmChangeItemArr = data.rows.plm_change_item
  3186. this.plmChangeCountersignatureItemArr = data.rows.plm_change_countersignature_item
  3187. }
  3188. })
  3189. },
  3190. // ======= 正则校验 =======
  3191. handleInput (value, type) {
  3192. // 大于等于0,且只能输入16位小数
  3193. let val = value.replace(/^\D*([0-9]\d*\.?\d{0,16})?.*$/,'$1')
  3194. if (val === null || val === undefined || val === '') {
  3195. val = 0
  3196. }
  3197. if (type === 1) {
  3198. this.costImpactData.productionProductScrapAmount = val
  3199. } else if (type === 2) {
  3200. this.costImpactData.inventoryProductScrapAmount = val
  3201. } else if (type === 3) {
  3202. this.costImpactData.affectedScrapAmount = val
  3203. }
  3204. },
  3205. partInput (row, val) {
  3206. row.newPartNo = val.toUpperCase()
  3207. },
  3208. executorInput (row, val) {
  3209. //row.executor = val.toUpperCase()
  3210. },
  3211. choosePartNo (row) {
  3212. this.partData.site = row.site
  3213. this.partData.buNo = row.buNo
  3214. this.tempPartRow = row
  3215. if (this.tempPartRow.newPartNo == null) {
  3216. this.tempPartRow.newPartNo = ''
  3217. }
  3218. this.queryPartList()
  3219. //this.getBaseList(133)
  3220. },
  3221. // 查询物料
  3222. queryPartList () {
  3223. this.partData.limit = this.pageSize2
  3224. this.partData.page = this.pageIndex2
  3225. choosePartNoList(this.partData).then(({data}) => {
  3226. if (data && data.code === 0) {
  3227. this.partList = data.page.list
  3228. this.pageIndex2 = data.page.currPage
  3229. this.pageSize2 = data.page.pageSize
  3230. this.totalPage2 = data.page.totalCount
  3231. this.partModelFlag = true
  3232. } else {
  3233. this.partList = []
  3234. }
  3235. })
  3236. },
  3237. // 双击选中物料
  3238. getRowData (row) {
  3239. this.$set(this.tempPartRow,'newPartNo', row.testPartNo)
  3240. this.partModelFlag = false
  3241. },
  3242. // 每页数
  3243. sizeChangeHandle2 (val) {
  3244. this.pageSize2 = val
  3245. this.pageIndex2 = 1
  3246. this.queryPartList()
  3247. },
  3248. // 当前页
  3249. currentChangeHandle2 (val) {
  3250. this.pageIndex2 = val
  3251. this.queryPartList()
  3252. },
  3253. chooseExecutor (row) {
  3254. this.tempExecutorRow = row
  3255. if (this.tempExecutorRow.executor == null) {
  3256. this.tempExecutorRow.executor = ''
  3257. }
  3258. this.getBaseList(2010)
  3259. },
  3260. ecnTypeHeaderChange (val,index) {
  3261. if (val === 'Y') {
  3262. for (let i = 0; i < this.form[index].list.length; i++) {
  3263. this.form[index].list[i].flag = 'Y'
  3264. }
  3265. } else {
  3266. for (let i = 0; i < this.form[index].list.length; i++) {
  3267. this.form[index].list[i].flag = 'N'
  3268. }
  3269. }
  3270. },
  3271. ecnTypeDetailChange (val,index) {
  3272. if (this.form[index].list.every(x => x.flag === 'Y')) {
  3273. this.form[index].flag = 'Y'
  3274. }else {
  3275. this.form[index].flag = 'N'
  3276. }
  3277. },
  3278. // ======== 分页相关方法 ========
  3279. // 每页数
  3280. sizeChangeHandle (val) {
  3281. this.pageSize = val
  3282. this.pageIndex = 1
  3283. this.getDataList()
  3284. },
  3285. // 当前页
  3286. currentChangeHandle (val) {
  3287. this.pageIndex = val
  3288. this.getDataList()
  3289. },
  3290. // ======== 列表选择相关方法 ========
  3291. selectFlag () {
  3292. return true
  3293. },
  3294. // ======== 页签切换相关方法 ========
  3295. // 单机选中询价信息
  3296. changeClickRow (row) {
  3297. this.$refs.changeTable.toggleRowSelection(row)
  3298. this.currentRow = JSON.parse(JSON.stringify(row))
  3299. },
  3300. // // 列表表格选择替换
  3301. // tabClick (tab, event) {
  3302. // // 刷新列表数据
  3303. // this.refreshCurrentTabTable()
  3304. // },
  3305. // 当前值发生变化的时候修改
  3306. currentChange (row, oldRow) {
  3307. // 判断是否是获取焦点的事件
  3308. if (row) {
  3309. this.currentRow = JSON.parse(JSON.stringify(row))
  3310. // 刷新当前页表
  3311. this.refreshCurrentTabTable()
  3312. }
  3313. },
  3314. // 刷新页签的table数据
  3315. refreshChangeTab () {},
  3316. // 新增库存成本影响
  3317. inventoryCostImpactSave () {
  3318. if (this.costImpactData.productionProductFlag === 'Y') { // 在生产品
  3319. if (this.costImpactData.productionProductNumber == null || this.costImpactData.productionProductNumber === '') {
  3320. this.$message.warning('请填写在生产品数量!')
  3321. return
  3322. }
  3323. if (this.costImpactData.productionProductNumber <= 0) {
  3324. this.$message.warning('在生产品数量不能小于等于0!')
  3325. return
  3326. }
  3327. if (this.costImpactData.productionProductOpinions == null || this.costImpactData.productionProductOpinions === '') {
  3328. this.$message.warning('请填写在生产品处理意见!')
  3329. return
  3330. }
  3331. if (this.costImpactData.productionProductScrapAmount === 0) {
  3332. this.$message.warning('请填写在生产品报废金额!')
  3333. return
  3334. }
  3335. if (this.costImpactData.productionProductExecutor == null || this.costImpactData.productionProductExecutor === '') {
  3336. this.$message.warning('请填写在生产品执行人!')
  3337. return
  3338. }
  3339. }
  3340. if (this.costImpactData.inventoryProductFlag === 'Y') { // 成品库存
  3341. if (this.costImpactData.inventoryProductNumber == null || this.costImpactData.inventoryProductNumber === '') {
  3342. this.$message.warning('请填写成品库存数量!')
  3343. return
  3344. }
  3345. if (this.costImpactData.inventoryProductNumber <= 0) {
  3346. this.$message.warning('成品库存数量不能小于等于0!')
  3347. return
  3348. }
  3349. if (this.costImpactData.inventoryProductOpinions == null || this.costImpactData.inventoryProductOpinions === '') {
  3350. this.$message.warning('请填写成品库存处理意见!')
  3351. return
  3352. }
  3353. if (this.costImpactData.inventoryProductScrapAmount === 0) {
  3354. this.$message.warning('请填写成品库存报废金额!')
  3355. return
  3356. }
  3357. if (this.costImpactData.inventoryProductExecutor == null || this.costImpactData.inventoryProductExecutor === '') {
  3358. this.$message.warning('请填写成品库存执行人!')
  3359. return
  3360. }
  3361. }
  3362. if (this.costImpactData.newOrderFlag === 'Y') { // 新订单
  3363. if (this.costImpactData.newOrderNumber == null || this.costImpactData.newOrderNumber === '') {
  3364. this.$message.warning('请填写新订单数量!')
  3365. return
  3366. }
  3367. if (this.costImpactData.newOrderNumber <= 0) {
  3368. this.$message.warning('新订单数量不能小于等于0!')
  3369. return
  3370. }
  3371. }
  3372. if (this.costImpactData.affectedFlag === 'Y') { // 影响的原材料及其库存量
  3373. if (this.costImpactData.affectedNumber == null || this.costImpactData.affectedNumber === '') {
  3374. this.$message.warning('请填写影响的原材料及其库存量数量!')
  3375. return
  3376. }
  3377. if (this.costImpactData.affectedNumber <= 0) {
  3378. this.$message.warning('影响的原材料及其库存量数量不能小于等于0!')
  3379. return
  3380. }
  3381. if (this.costImpactData.affectedOpinions == null || this.costImpactData.affectedOpinions === '') {
  3382. this.$message.warning('请填写影响的原材料及其库存量处理意见!')
  3383. return
  3384. }
  3385. if (this.costImpactData.affectedScrapAmount === 0) {
  3386. this.$message.warning('请填写影响的原材料及其库存量报废金额!')
  3387. return
  3388. }
  3389. if (this.costImpactData.affectedExecutor == null || this.costImpactData.affectedExecutor === '') {
  3390. this.$message.warning('请填写影响的原材料及其库存量执行人!')
  3391. return
  3392. }
  3393. }
  3394. this.costImpactData.changeTotalCost = this.totalCost
  3395. costImpactUpdate(this.costImpactData).then(({data}) => {
  3396. if (data && data.code === 0) {
  3397. this.costImpactData = data.rows.costImpactData
  3398. this.getDataList()
  3399. this.$message({
  3400. message: '操作成功',
  3401. type: 'success',
  3402. duration: 1500,
  3403. onClose: () => {}
  3404. })
  3405. } else {
  3406. this.$alert(data.msg, '错误', {
  3407. confirmButtonText: '确定'
  3408. })
  3409. }
  3410. })
  3411. },
  3412. // 刷新页签的table数据
  3413. refreshCurrentTabTable () {
  3414. if (this.activeTable === 'basicInformation') {
  3415. this.getChangeDetailList()
  3416. } else if (this.activeTable === 'fileInformation') {
  3417. this.getChangeFileList()
  3418. } else if (this.activeTable === 'inventoryCostImpact') {
  3419. this.inventoryCostImpactSearch2()
  3420. } else if (this.activeTable === 'actionInformation') {
  3421. this.tpExecutionInfoSearch2()
  3422. } else if (this.activeTable === 'countersignature') {
  3423. this.countersignatureSearch2()
  3424. } else if (this.activeTable === 'approvalInformation') {
  3425. this.getApprovalList()
  3426. }
  3427. },
  3428. // ======== 列表数据刷新方法 ========
  3429. // 获取数据列表
  3430. getDataList () {
  3431. if(localStorage.getItem('ecnData')!=undefined){
  3432. let data=JSON.parse(localStorage.getItem('ecnData'));
  3433. this.searchData.changeNo=data.ecnNo
  3434. localStorage.removeItem('ecnData');
  3435. }
  3436. this.searchData.limit = this.pageSize
  3437. this.searchData.page = this.pageIndex
  3438. changeRecordSearch(this.searchData).then(({data}) => {
  3439. if (data.code === 0) {
  3440. this.dataList = data.page.list
  3441. this.pageIndex = data.page.currPage
  3442. this.pageSize = data.page.pageSize
  3443. this.totalPage = data.page.totalCount
  3444. // 判断是否全部存在数据
  3445. if (this.dataList.length > 0) {
  3446. // 设置选中行
  3447. this.$refs.changeTable.setCurrentRow(this.dataList[0])
  3448. } else {
  3449. this.currentRow = {}
  3450. }
  3451. }
  3452. })
  3453. },
  3454. // 变更单详情的列表
  3455. getChangeDetailList () {
  3456. let tempData = {
  3457. site: this.$store.state.user.site,
  3458. changeNo: this.currentRow.changeNo
  3459. }
  3460. changeDetailSearch(tempData).then(({data}) => {
  3461. if (data && data.code === 0) {
  3462. this.detailList = data.rows
  3463. } else {
  3464. this.detailList = []
  3465. }
  3466. })
  3467. },
  3468. // 变更单文件的列表
  3469. getChangeFileList () {
  3470. let tempData = {
  3471. orderRef1: this.$store.state.user.site,
  3472. orderRef2: this.currentRow.changeNo
  3473. }
  3474. changeFileSearch(tempData).then(({data}) => {
  3475. if (data && data.code === 0) {
  3476. this.fileList = data.rows
  3477. } else {
  3478. this.fileList = []
  3479. }
  3480. })
  3481. },
  3482. // 复选变更单文件
  3483. selectionFile (val) {
  3484. this.fileSelections = val
  3485. },
  3486. // 上传文件
  3487. uploadFileModal () {
  3488. let currentData = {
  3489. titleCon: '工程变更文件上传',
  3490. site: this.currentRow.site,
  3491. createBy: this.$store.state.user.name,
  3492. dataNo: this.currentRow.changeNo,
  3493. fileRemark: '',
  3494. folder: 'change',
  3495. }
  3496. this.uploadDialog = true
  3497. //打开组件 去做新增业务
  3498. // this.$nextTick(() => {
  3499. // this.$refs.changeUploadFile.init(currentData);
  3500. // })
  3501. },
  3502. // 删除变更单文件
  3503. deleteChangeFile () {
  3504. if (this.fileSelections.length === 0) {
  3505. this.$message.warning('请选择要删除的文件!')
  3506. return
  3507. }
  3508. let tempData = {
  3509. fileList: this.fileSelections
  3510. }
  3511. this.$confirm('确定删除文件?', '提示', {
  3512. confirmButtonText: '确定',
  3513. cancelButtonText: '取消',
  3514. type: 'warning'
  3515. }).then(() => {
  3516. deleteChangeFile(tempData).then(({data}) => {
  3517. if (data && data.code === 0) {
  3518. this.getChangeFileList()
  3519. this.$message({
  3520. message: '操作成功',
  3521. type: 'success',
  3522. duration: 1500,
  3523. onClose: () => {}
  3524. })
  3525. } else {
  3526. this.$alert(data.msg, '错误', {
  3527. confirmButtonText: '确定'
  3528. })
  3529. }
  3530. })
  3531. })
  3532. },
  3533. // 下载
  3534. downloadFile (row) {
  3535. downLoadQuotationFile(row)
  3536. .then(({data}) => {
  3537. // 不限制文件下载类型
  3538. const blob = new Blob([data], {type:'application/octet-stream;charset=utf-8'})
  3539. // 下载文件名称
  3540. const fileName = row.fileName
  3541. // a标签下载
  3542. const linkNode = document.createElement('a')
  3543. linkNode.download = fileName // a标签的download属性规定下载文件的名称
  3544. linkNode.style.display = 'none'
  3545. linkNode.href = URL.createObjectURL(blob) // 生成一个Blob URL
  3546. document.body.appendChild(linkNode)
  3547. linkNode.click() // 模拟在按钮上的一次鼠标单击
  3548. URL.revokeObjectURL(linkNode.href) // 释放URL 对象
  3549. document.body.removeChild(linkNode)
  3550. })
  3551. },
  3552. // 修改变更单模态框
  3553. async updateModal (row) {
  3554. await this.getNodeAuthority(row)
  3555. this.modalData = {
  3556. site: row.site,
  3557. changeNo: row.changeNo,
  3558. applicantId: row.applicantId,
  3559. applicantName: row.applicantName,
  3560. applicationDepartmentId: row.applicationDepartmentId,
  3561. applicationDepartmentName: row.applicationDepartmentName,
  3562. applyDate: row.applyDate,
  3563. ecnType: row.ecnType,
  3564. changeImpact: row.changeImpact,
  3565. changeImpactDesc: row.changeImpactDesc,
  3566. ecnStage: row.ecnStage,
  3567. changeType: row.changeType,
  3568. tpEngineerId: row.tpEngineerId,
  3569. tpEngineerName: row.tpEngineerName,
  3570. changePhaseInDate: row.changePhaseInDate,
  3571. dfIsProduct: row.dfIsProduct,
  3572. printing: row.printing,
  3573. manufacturingCostIsChange: row.manufacturingCostIsChange,
  3574. changeRequestDesc: row.changeRequestDesc,
  3575. isReQuote: row.isReQuote,
  3576. ulCertificationRequirements: row.ulCertificationRequirements,
  3577. ulContinueToMeetDemand: row.ulContinueToMeetDemand,
  3578. gpCertificationRequirements: row.gpCertificationRequirements,
  3579. gpContinueToMeetDemand: row.gpContinueToMeetDemand,
  3580. updateBy: this.$store.state.user.name,
  3581. detailList: [],
  3582. ecnTypeData: [],
  3583. industrialEngineerId: row.industrialEngineerId,
  3584. industrialEngineerName: row.industrialEngineerName,
  3585. changeStatus: row.changeStatus,
  3586. cqcOperatorId: row.cqcOperatorId,
  3587. cqcOperatorName: row.cqcOperatorName,
  3588. faiOperatorId: row.faiOperatorId,
  3589. faiOperatorName: row.faiOperatorName,
  3590. nodeConclusion: '',
  3591. rejectOpinion: '',
  3592. stepId: row.stepId,
  3593. rejectFlag: row.rejectFlag,
  3594. rejectStepId: row.rejectStepId,
  3595. isReject: row.isReject,
  3596. menuId: this.$route.meta.menuId,
  3597. userName: this.$store.state.user.name,
  3598. nodeId: row.nodeId,
  3599. buNo: row.buNo,
  3600. createBy2: row.createBy2,
  3601. tpProcessControl: row.tpProcessControl,
  3602. csProcessControl: row.csProcessControl
  3603. }
  3604. this.changeTitle = '变更申请-' + this.modalData.changeNo
  3605. // 查选择的ECN种类
  3606. this.getChangeChooseEcnType()
  3607. // 查变更单明细
  3608. this.changeRequestDetailSearch()
  3609. // 查变更单库存成本影响
  3610. this.inventoryCostImpactSearch()
  3611. // 查变更单TP&执行信息
  3612. this.tpExecutionInfoSearch()
  3613. // 查变更单会签信息
  3614. this.countersignatureSearch()
  3615. this.activeName = 'basicInformation'
  3616. this.modalFlag = true
  3617. this.modalDisableFlag = true
  3618. },
  3619. // 下达
  3620. issueModal (row) {
  3621. this.$confirm(`是否确认下达?`, '提示', {
  3622. confirmButtonText: '确定',
  3623. cancelButtonText: '取消',
  3624. type: 'warning'
  3625. }).then(() => {
  3626. let tempData = {
  3627. site: row.site,
  3628. userName: this.$store.state.user.name,
  3629. changeNo: row.changeNo,
  3630. menuId: this.$route.meta.menuId
  3631. }
  3632. issueChange(tempData).then(({data}) => {
  3633. if (data && data.code === 0) {
  3634. this.getDataList()
  3635. this.$message({message: '操作成功', type: 'success'})
  3636. } else {
  3637. this.$alert(data.msg, '错误', {
  3638. confirmButtonText: '确定'
  3639. })
  3640. }
  3641. })
  3642. })
  3643. },
  3644. // 打开提交模态框
  3645. submitDataModal () {
  3646. this.rejectOpinion = ''
  3647. this.submitModalFlag = true
  3648. },
  3649. // 同意提交
  3650. agreeSubmit () {
  3651. this.$confirm(`是否确认提交?`, '提示', {
  3652. confirmButtonText: '确定',
  3653. cancelButtonText: '取消',
  3654. type: 'warning'
  3655. }).then(() => {
  3656. this.modalData.nodeConclusion = 'Y'
  3657. this.submitData()
  3658. })
  3659. },
  3660. // 驳回提交
  3661. rejectSubmit () {
  3662. this.$confirm(`是否确认驳回?`, '提示', {
  3663. confirmButtonText: '确定',
  3664. cancelButtonText: '取消',
  3665. type: 'warning'
  3666. }).then(() => {
  3667. this.modalData.rejectOpinion = this.rejectOpinion
  3668. this.modalData.nodeConclusion = 'N'
  3669. this.submitData()
  3670. })
  3671. },
  3672. // 提交
  3673. submitData () {
  3674. if (this.plmChangeRequestArr) {
  3675. for (let i = 0; i < this.plmChangeRequestArr.length; i++) {
  3676. if (!this.modalData[this.plmChangeRequestArr[i].fieldId] && this.plmChangeRequestArr[i].required === 'Y') {
  3677. this.$message.warning(this.plmChangeRequestArr[i].fieldName + '不能为空!')
  3678. return
  3679. }
  3680. }
  3681. }
  3682. if (this.plmChangeRequestDetailArr) { // 所选技术参数卡
  3683. for (let i = 0; i < this.plmChangeRequestDetailArr.length; i++) {
  3684. // 判断集合中的该属性是否都有值
  3685. let val = this.chooseDataList.every(item => {
  3686. const value = item[this.plmChangeRequestDetailArr[i].fieldId]
  3687. return value !== null && value !== ''
  3688. })
  3689. // 如果没有值 且该字段为必填
  3690. if (!val && this.plmChangeRequestDetailArr[i].required === 'Y') {
  3691. this.$message.warning(this.plmChangeRequestDetailArr[i].fieldName + '不能为空!')
  3692. return
  3693. }
  3694. }
  3695. }
  3696. if (this.plmChangeCostImpactArr) { // 库存成本影响
  3697. for (let i = 0; i < this.plmChangeCostImpactArr.length; i++) {
  3698. if (!this.costImpactData[this.plmChangeCostImpactArr[i].fieldId] && this.plmChangeCostImpactArr[i].required === 'Y') {
  3699. this.$message.warning(this.plmChangeCostImpactArr[i].fieldName + '不能为空!')
  3700. return
  3701. }
  3702. }
  3703. }
  3704. if (this.plmChangeFAItemArr) { // 评估信息
  3705. for (let i = 0; i < this.plmChangeFAItemArr.length; i++) {
  3706. let val = this.chooseItemList2.every(item => {
  3707. const value = item[this.plmChangeFAItemArr[i].fieldId]
  3708. return value !== null && value !== ''
  3709. })
  3710. if (!val && this.plmChangeFAItemArr[i].required === 'Y') {
  3711. this.$message.warning(this.plmChangeFAItemArr[i].fieldName + '不能为空!')
  3712. return
  3713. }
  3714. }
  3715. }
  3716. if (this.plmChangeExecutionInfoArr) {
  3717. for (let i = 0; i < this.plmChangeExecutionInfoArr.length; i++) {
  3718. if (!this.executionInfoData[this.plmChangeExecutionInfoArr[i].fieldId] && this.plmChangeExecutionInfoArr[i].required === 'Y') {
  3719. this.$message.warning(this.plmChangeExecutionInfoArr[i].fieldName + '不能为空!')
  3720. return
  3721. }
  3722. }
  3723. }
  3724. if (this.plmChangeItemArr) { // 执行信息
  3725. for (let i = 0; i < this.plmChangeItemArr.length; i++) {
  3726. let val = this.chooseItemList.every(item => {
  3727. const value = item[this.plmChangeItemArr[i].fieldId]
  3728. return value !== null && value !== ''
  3729. })
  3730. if (!val && this.plmChangeItemArr[i].required === 'Y') {
  3731. this.$message.warning(this.plmChangeItemArr[i].fieldName + '不能为空!')
  3732. return
  3733. }
  3734. }
  3735. }
  3736. if (this.plmChangeCountersignatureItemArr) { // 会签信息
  3737. for (let i = 0; i < this.plmChangeCountersignatureItemArr.length; i++) {
  3738. let val = this.currentChooseCSItemList.every(item => {
  3739. const value = item[this.plmChangeCountersignatureItemArr[i].fieldId]
  3740. return value !== null && value !== ''
  3741. })
  3742. if (!val && this.plmChangeCountersignatureItemArr[i].required === 'Y') {
  3743. this.$message.warning(this.plmChangeCountersignatureItemArr[i].fieldName + '不能为空!')
  3744. return
  3745. }
  3746. }
  3747. }
  3748. if (this.chooseDataList.length === 0) {
  3749. this.$message.warning('请添加需要变更的技术参数卡!')
  3750. return
  3751. }
  3752. this.costImpactData.changeTotalCost = this.totalCost
  3753. this.executionInfoData.chooseItemList = this.chooseItemList
  3754. this.executionInfoData.chooseItemList2 = this.chooseItemList2
  3755. this.countersignatureData.changeNo = this.modalData.changeNo
  3756. this.countersignatureData.chooseCSItemList = this.chooseCSItemList
  3757. this.modalData.userName = this.$store.state.user.name
  3758. this.modalData.menuId = this.$route.meta.menuId
  3759. this.modalData.detailList = this.chooseDataList
  3760. this.modalData.ecnTypeData = this.form
  3761. this.modalData.costImpactData = this.costImpactData
  3762. this.modalData.executionInfoData = this.executionInfoData
  3763. this.modalData.countersignatureData = this.countersignatureData
  3764. this.submitLoading = true
  3765. submitChange(this.modalData).then(({data}) => {
  3766. if (data && data.code === 0) {
  3767. this.getDataList()
  3768. this.$message({message: '操作成功', type: 'success'})
  3769. this.submitModalFlag = false
  3770. this.modalFlag = false
  3771. } else {
  3772. this.$alert(data.msg, '错误', {
  3773. confirmButtonText: '确定'
  3774. })
  3775. }
  3776. this.submitLoading = false
  3777. }).catch(()=>{
  3778. this.submitLoading = false
  3779. })
  3780. },
  3781. // 获取选择的ECN种类
  3782. getChangeChooseEcnType () {
  3783. getChooseEcnType(this.modalData).then(({data}) => {
  3784. if (data && data.code === 0) {
  3785. this.form = data.rows
  3786. } else {
  3787. this.$alert(data.msg, '错误', {
  3788. confirmButtonText: '确定'
  3789. })
  3790. }
  3791. })
  3792. },
  3793. // 打开ECN种类模态框
  3794. chooseEcnTypeModal () {
  3795. this.ecnTypeModalFlag = true
  3796. },
  3797. // 保存ECN种类
  3798. saveEcnTypeData () {
  3799. this.ecnTypeModalFlag = false
  3800. },
  3801. // 查询ECN的模板
  3802. getEcnModel () {
  3803. let tempData = {
  3804. site: this.$store.state.user.site,
  3805. functionType: 'ECN',
  3806. codeNo: 'E001'
  3807. }
  3808. getEcnModel(tempData).then(({data}) => {
  3809. if (data.code === 0) {
  3810. this.modelList = data.rows
  3811. }
  3812. })
  3813. },
  3814. // 查询变更明细表
  3815. changeRequestDetailSearch () {
  3816. requestDetailSearch(this.modalData).then(({data}) => {
  3817. if (data && data.code === 0) {
  3818. this.chooseDataList = data.rows
  3819. } else {
  3820. this.$alert(data.msg, '错误', {
  3821. confirmButtonText: '确定'
  3822. })
  3823. }
  3824. })
  3825. },
  3826. // 查询库存成本影响对象
  3827. inventoryCostImpactSearch () {
  3828. costImpactSearch(this.modalData).then(({data}) => {
  3829. if (data && data.code === 0) {
  3830. this.costImpactData = data.rows
  3831. } else {
  3832. this.$alert(data.msg, '错误', {
  3833. confirmButtonText: '确定'
  3834. })
  3835. }
  3836. })
  3837. },
  3838. // 查询库存成本影响对象
  3839. inventoryCostImpactSearch2 () {
  3840. costImpactSearch(this.currentRow).then(({data}) => {
  3841. if (data && data.code === 0) {
  3842. this.currentCostImpactData = data.rows
  3843. } else {
  3844. this.$alert(data.msg, '错误', {
  3845. confirmButtonText: '确定'
  3846. })
  3847. }
  3848. })
  3849. },
  3850. // 查询审批信息
  3851. getApprovalList () {
  3852. let tempData = {
  3853. site: this.$store.state.user.site,
  3854. menuId: this.$route.meta.menuId,
  3855. documentNo: this.currentRow.changeNo
  3856. }
  3857. getApprovalList(tempData).then(({data}) => {
  3858. if (data && data.code === 0) {
  3859. this.approvalList = data.rows
  3860. } else {
  3861. this.approvalList = []
  3862. }
  3863. })
  3864. },
  3865. // 查询执行信息
  3866. tpExecutionInfoSearch () {
  3867. executionInfoSearch(this.modalData).then(({data}) => {
  3868. if (data && data.code === 0) {
  3869. this.executionInfoData = data.rows.executionInfoData
  3870. this.executionInfoData.createBy = this.$store.state.user.name
  3871. this.chooseItemList = data.rows.chooseItemList
  3872. this.chooseItemList2 = data.rows.chooseItemList2
  3873. } else {
  3874. this.$alert(data.msg, '错误', {
  3875. confirmButtonText: '确定'
  3876. })
  3877. }
  3878. })
  3879. },
  3880. tpExecutionInfoSearch2 () {
  3881. executionInfoSearch(this.currentRow).then(({data}) => {
  3882. if (data && data.code === 0) {
  3883. this.currentExecutionInfoData = data.rows.executionInfoData
  3884. this.currentExecutionInfoData.createBy = this.$store.state.user.name
  3885. this.currentChooseItemList = data.rows.chooseItemList
  3886. this.currentChooseItemList2 = data.rows.chooseItemList2
  3887. } else {
  3888. this.$alert(data.msg, '错误', {
  3889. confirmButtonText: '确定'
  3890. })
  3891. }
  3892. })
  3893. },
  3894. // 查询会签信息
  3895. countersignatureSearch () {
  3896. countersignatureSearch(this.modalData).then(({data}) => {
  3897. if (data && data.code === 0) {
  3898. this.chooseCSItemList = data.rows.chooseCSItemList
  3899. } else {
  3900. this.$alert(data.msg, '错误', {
  3901. confirmButtonText: '确定'
  3902. })
  3903. }
  3904. })
  3905. },
  3906. countersignatureSearch2 () {
  3907. countersignatureSearch(this.currentRow).then(({data}) => {
  3908. if (data && data.code === 0) {
  3909. this.currentChooseCSItemList = data.rows.chooseCSItemList
  3910. } else {
  3911. this.$alert(data.msg, '错误', {
  3912. confirmButtonText: '确定'
  3913. })
  3914. }
  3915. })
  3916. },
  3917. // 删除所选技术参数卡
  3918. deleteChooseDataModal (row) {
  3919. this.$confirm(`是否删除该技术参数卡的变更?`, '提示', {
  3920. confirmButtonText: '确定',
  3921. cancelButtonText: '取消',
  3922. type: 'warning'
  3923. }).then(() => {
  3924. deleteChangeDetail(row).then(({data}) => {
  3925. if (data && data.code === 0) {
  3926. this.changeRequestDetailSearch()
  3927. this.$message({
  3928. message: '操作成功',
  3929. type: 'success',
  3930. duration: 1500,
  3931. onClose: () => {}
  3932. })
  3933. } else {
  3934. this.$alert(data.msg, '错误', {
  3935. confirmButtonText: '确定'
  3936. })
  3937. }
  3938. })
  3939. })
  3940. },
  3941. // 修改变更申请
  3942. saveData () {
  3943. if (this.modalData.applicantId === '' || this.modalData.applicantId == null) {
  3944. this.$message.warning('请选择申请人员!')
  3945. return
  3946. }
  3947. if (this.modalData.applyDate === '' || this.modalData.applyDate == null) {
  3948. this.$message.warning('请选择申请日期!')
  3949. return
  3950. }
  3951. // if (this.modalData.changeImpact === '' || this.modalData.changeImpact == null) {
  3952. // this.$message.warning('请选择ECN变更影响!')
  3953. // return
  3954. // }
  3955. // if ((this.modalData.changeImpactDesc === '' || this.modalData.changeImpactDesc == null) && this.modalData.changeImpact === 'Y') {
  3956. // this.$message.warning('请填写变更影响描述!')
  3957. // return
  3958. // }
  3959. if (this.modalData.ecnStage === '' || this.modalData.ecnStage == null) {
  3960. this.$message.warning('请选择ECN阶段!')
  3961. return
  3962. }
  3963. if (this.modalData.changeType === '' || this.modalData.changeType == null) {
  3964. this.$message.warning('请选择变更类别!')
  3965. return
  3966. }
  3967. if (this.form.length === 0) {
  3968. this.$message.warning('请选择ECN种类!')
  3969. return
  3970. }
  3971. if (this.modalData.tpEngineerId === '' || this.modalData.tpEngineerId == null) {
  3972. this.$message.warning('请选择审批人员!')
  3973. return
  3974. }
  3975. if (this.modalData.changePhaseInDate === '' || this.modalData.changePhaseInDate == null) {
  3976. this.$message.warning('请选择变更生效日期!')
  3977. return
  3978. }
  3979. if (this.modalData.dfIsProduct === '' || this.modalData.dfIsProduct == null) {
  3980. this.$message.warning('请选择是否DF产品!')
  3981. return
  3982. }
  3983. if ((this.modalData.industrialEngineerId === '' || this.modalData.industrialEngineerId == null) && this.modalData.dfIsProduct === 'Y') {
  3984. this.$message.warning('请选择I/E!')
  3985. return
  3986. }
  3987. if (this.modalData.changeRequestDesc === '' || this.modalData.changeRequestDesc == null) {
  3988. this.$message.warning('请填写变更要求描述!')
  3989. return
  3990. }
  3991. if (this.modalData.printing === '' || this.modalData.printing == null) {
  3992. this.$message.warning('请选择印刷方式!')
  3993. return
  3994. }
  3995. // if ((this.modalData.cqcOperatorId === '' || this.modalData.cqcOperatorId == null) && (this.modalData.faiOperatorId === '' || this.modalData.faiOperatorId == null)) {
  3996. // this.$message.warning('请选择CQC或者FAI人员!')
  3997. // return
  3998. // }
  3999. if (this.costImpactData.productionProductFlag === 'Y') { // 在生产品
  4000. if (this.costImpactData.productionProductNumber == null || this.costImpactData.productionProductNumber === '') {
  4001. this.$message.warning('请填写在生产品数量!')
  4002. return
  4003. }
  4004. if (this.costImpactData.productionProductOpinions == null || this.costImpactData.productionProductOpinions === '') {
  4005. this.$message.warning('请填写在生产品处理意见!')
  4006. return
  4007. }
  4008. if (this.costImpactData.productionProductExecutor == null || this.costImpactData.productionProductExecutor === '') {
  4009. this.$message.warning('请填写在生产品执行人!')
  4010. return
  4011. }
  4012. }
  4013. if (this.costImpactData.inventoryProductFlag === 'Y') { // 成品库存
  4014. if (this.costImpactData.inventoryProductNumber == null || this.costImpactData.inventoryProductNumber === '') {
  4015. this.$message.warning('请填写成品库存数量!')
  4016. return
  4017. }
  4018. if (this.costImpactData.inventoryProductOpinions == null || this.costImpactData.inventoryProductOpinions === '') {
  4019. this.$message.warning('请填写成品库存处理意见!')
  4020. return
  4021. }
  4022. if (this.costImpactData.inventoryProductExecutor == null || this.costImpactData.inventoryProductExecutor === '') {
  4023. this.$message.warning('请填写成品库存执行人!')
  4024. return
  4025. }
  4026. }
  4027. if (this.costImpactData.newOrderFlag === 'Y') { // 新订单
  4028. if (this.costImpactData.newOrderNumber == null || this.costImpactData.newOrderNumber === '') {
  4029. this.$message.warning('请填写新订单数量!')
  4030. return
  4031. }
  4032. }
  4033. if (this.costImpactData.affectedFlag === 'Y') { // 影响的原材料及其库存量
  4034. if (this.costImpactData.affectedNumber == null || this.costImpactData.affectedNumber === '') {
  4035. this.$message.warning('请填写影响的原材料及其库存量数量!')
  4036. return
  4037. }
  4038. if (this.costImpactData.affectedOpinions == null || this.costImpactData.affectedOpinions === '') {
  4039. this.$message.warning('请填写影响的原材料及其库存量处理意见!')
  4040. return
  4041. }
  4042. if (this.costImpactData.affectedExecutor == null || this.costImpactData.affectedExecutor === '') {
  4043. this.$message.warning('请填写影响的原材料及其库存量执行人!')
  4044. return
  4045. }
  4046. }
  4047. if (this.executionInfoData.originalDieCuttingRuleNo == null || this.executionInfoData.originalDieCuttingRuleNo === '') {
  4048. this.$message.warning('请填写原碑刀编号!')
  4049. return;
  4050. }
  4051. if (this.executionInfoData.newDieCuttingRuleNo == null || this.executionInfoData.newDieCuttingRuleNo === '') {
  4052. this.$message.warning('请填写新碑刀编号!')
  4053. return;
  4054. }
  4055. if (this.executionInfoData.originalStencilNo == null || this.executionInfoData.originalStencilNo === '') {
  4056. this.$message.warning('请填写原网板/印版编号!')
  4057. return;
  4058. }
  4059. if (this.executionInfoData.newStencilNo == null || this.executionInfoData.newStencilNo === '') {
  4060. this.$message.warning('请填写新网板/印版编号!')
  4061. return;
  4062. }
  4063. if (this.executionInfoData.executionDate == null || this.executionInfoData.executionDate === '') {
  4064. this.$message.warning('请选择ECN执行日期!')
  4065. return;
  4066. }
  4067. if (this.chooseDataList.length === 0) {
  4068. this.$message.warning('请添加需要变更的技术参数卡!')
  4069. return
  4070. }
  4071. this.costImpactData.changeTotalCost = this.totalCost
  4072. this.executionInfoData.chooseItemList = this.chooseItemList
  4073. this.executionInfoData.chooseItemList2 = this.chooseItemList2
  4074. this.countersignatureData.changeNo = this.modalData.changeNo
  4075. this.countersignatureData.chooseCSItemList = this.chooseCSItemList
  4076. this.modalData.detailList = this.chooseDataList
  4077. this.modalData.ecnTypeData = this.form
  4078. this.modalData.costImpactData = this.costImpactData
  4079. this.modalData.executionInfoData = this.executionInfoData
  4080. this.modalData.countersignatureData = this.countersignatureData
  4081. this.saveLoading = true
  4082. changeRequestUpdate(this.modalData).then(({data}) => {
  4083. if (data && data.code === 0) {
  4084. this.modalData = data.rows.modalData
  4085. this.modalData.menuId = this.$route.meta.menuId
  4086. this.changeTitle = '变更申请-' + this.modalData.changeNo
  4087. this.form = data.rows.form
  4088. this.chooseDataList = data.rows.chooseDataList
  4089. this.costImpactData = data.rows.costImpactData
  4090. this.executionInfoData = data.rows.executionInfoData
  4091. this.executionInfoData.createBy = this.$store.state.user.name
  4092. this.chooseItemList = data.rows.chooseItemList
  4093. this.chooseItemList2 = data.rows.chooseItemList2
  4094. this.chooseCSItemList = data.rows.chooseCSItemList
  4095. this.getDataList()
  4096. this.$message({
  4097. message: '操作成功',
  4098. type: 'success',
  4099. duration: 1500,
  4100. onClose: () => {}
  4101. })
  4102. } else {
  4103. this.$alert(data.msg, '错误', {
  4104. confirmButtonText: '确定'
  4105. })
  4106. }
  4107. this.saveLoading = false
  4108. }).catch(()=>{
  4109. this.saveLoading = false
  4110. })
  4111. },
  4112. // 选择模板属性
  4113. chooseModel () {
  4114. this.chooseModelData = {
  4115. site: this.$store.state.user.site,
  4116. itemNo: '',
  4117. itemDesc: '',
  4118. functionType: 'ECN',
  4119. codeNo: this.modelList.length > 0 ? this.modelList[0].codeNo : ''
  4120. }
  4121. // 先清空缓存选中
  4122. //this.$nextTick(() => this.$refs.itemTable.clearSelection())
  4123. // 查询所有属性
  4124. getItemList(this.chooseModelData).then(({data}) => {
  4125. if (data && data.code === 0) {
  4126. this.itemList = data.rows
  4127. this.itemList.forEach(val => {
  4128. // 回显选中的部门
  4129. if (this.chooseItemList.map(val => val.itemNo).includes(val.itemNo)) {
  4130. this.$nextTick(() => this.$refs.itemTable.toggleRowSelection(val, true))
  4131. }
  4132. })
  4133. } else {
  4134. this.$alert(data.msg, '错误', {
  4135. confirmButtonText: '确定'
  4136. })
  4137. }
  4138. })
  4139. this.chooseModelFlag = true
  4140. },
  4141. // 查询属性
  4142. searchItemList () {
  4143. getItemList(this.chooseModelData).then(({data}) => {
  4144. if (data.code === 0) {
  4145. this.itemList = data.rows
  4146. }
  4147. })
  4148. },
  4149. // 单机选择
  4150. itemClickRow (row) {
  4151. this.$refs.itemTable.toggleRowSelection(row)
  4152. },
  4153. // 复选属性
  4154. selectionItem (val) {
  4155. this.itemSelections = val
  4156. },
  4157. // 确认多选属性
  4158. confirmItem () {
  4159. if (this.itemSelections.length === 0) {
  4160. this.$message.warning("请勾选属性!")
  4161. return
  4162. }
  4163. // 临时集合
  4164. let temp = []
  4165. // 首先,遍历a,检查每个对象的名字是否在b中也存在
  4166. this.chooseItemList.forEach(itemA => {
  4167. if (this.itemSelections.some(itemB => itemB.itemNo === itemA.itemNo)) {
  4168. // 如果存在,则将a中的对象添加到结果中(这里直接用a的原对象,因为要求是保留a中对象)
  4169. temp.push(itemA)
  4170. }
  4171. })
  4172. // 然后,遍历b,检查是否有对象的名字不在结果中已存在的名字中
  4173. this.itemSelections.forEach(itemB => {
  4174. if (!temp.some(itemR => itemR.itemNo === itemB.itemNo)) {
  4175. // 如果b中的对象名字不在结果中,则添加到结果中
  4176. temp.push(itemB)
  4177. }
  4178. })
  4179. this.chooseItemList = temp
  4180. this.chooseModelFlag = false
  4181. },
  4182. // 执行所选属性
  4183. executeModal (row) {
  4184. this.$confirm(`是否确认提交?`, '提示', {
  4185. confirmButtonText: '确定',
  4186. cancelButtonText: '取消',
  4187. type: 'warning'
  4188. }).then(() => {
  4189. if (this.plmChangeRequestArr) { // 主信息
  4190. for (let i = 0; i < this.plmChangeRequestArr.length; i++) {
  4191. if (!this.modalData[this.plmChangeRequestArr[i].fieldId] && this.plmChangeRequestArr[i].required === 'Y') {
  4192. this.$message.warning(this.plmChangeRequestArr[i].fieldName + '不能为空!')
  4193. return
  4194. }
  4195. }
  4196. }
  4197. if (this.plmChangeRequestDetailArr) { // 所选技术参数卡
  4198. for (let i = 0; i < this.plmChangeRequestDetailArr.length; i++) {
  4199. // 判断集合中的该属性是否都有值
  4200. let val = this.chooseDataList.every(item => {
  4201. const value = item[this.plmChangeRequestDetailArr[i].fieldId]
  4202. return value !== null && value !== ''
  4203. })
  4204. // 如果没有值 且该字段为必填
  4205. if (!val && this.plmChangeRequestDetailArr[i].required === 'Y') {
  4206. this.$message.warning(this.plmChangeRequestDetailArr[i].fieldName + '不能为空!')
  4207. return
  4208. }
  4209. }
  4210. }
  4211. if (this.plmChangeCostImpactArr) { // 库存成本影响
  4212. for (let i = 0; i < this.plmChangeCostImpactArr.length; i++) {
  4213. if (!this.costImpactData[this.plmChangeCostImpactArr[i].fieldId] && this.plmChangeCostImpactArr[i].required === 'Y') {
  4214. this.$message.warning(this.plmChangeCostImpactArr[i].fieldName + '不能为空!')
  4215. return
  4216. }
  4217. }
  4218. }
  4219. if (this.plmChangeFAItemArr) { // 评估信息
  4220. for (let i = 0; i < this.plmChangeFAItemArr.length; i++) {
  4221. let val = this.chooseItemList2.every(item => {
  4222. const value = item[this.plmChangeFAItemArr[i].fieldId]
  4223. return value !== null && value !== ''
  4224. })
  4225. if (!val && this.plmChangeFAItemArr[i].required === 'Y') {
  4226. this.$message.warning(this.plmChangeFAItemArr[i].fieldName + '不能为空!')
  4227. return
  4228. }
  4229. }
  4230. }
  4231. if (this.plmChangeExecutionInfoArr) {
  4232. for (let i = 0; i < this.plmChangeExecutionInfoArr.length; i++) {
  4233. if (!this.executionInfoData[this.plmChangeExecutionInfoArr[i].fieldId] && this.plmChangeExecutionInfoArr[i].required === 'Y') {
  4234. this.$message.warning(this.plmChangeExecutionInfoArr[i].fieldName + '不能为空!')
  4235. return
  4236. }
  4237. }
  4238. }
  4239. if (this.plmChangeItemArr) { // 执行信息
  4240. for (let i = 0; i < this.plmChangeItemArr.length; i++) {
  4241. let val = this.chooseItemList.every(item => {
  4242. const value = item[this.plmChangeItemArr[i].fieldId]
  4243. return value !== null && value !== ''
  4244. })
  4245. if (!val && this.plmChangeItemArr[i].required === 'Y') {
  4246. this.$message.warning(this.plmChangeItemArr[i].fieldName + '不能为空!')
  4247. return
  4248. }
  4249. }
  4250. }
  4251. if (this.plmChangeCountersignatureItemArr) { // 会签信息
  4252. for (let i = 0; i < this.plmChangeCountersignatureItemArr.length; i++) {
  4253. let val = this.currentChooseCSItemList.every(item => {
  4254. const value = item[this.plmChangeCountersignatureItemArr[i].fieldId]
  4255. return value !== null && value !== ''
  4256. })
  4257. if (!val && this.plmChangeCountersignatureItemArr[i].required === 'Y') {
  4258. this.$message.warning(this.plmChangeCountersignatureItemArr[i].fieldName + '不能为空!')
  4259. return
  4260. }
  4261. }
  4262. }
  4263. if (this.chooseDataList.length === 0) {
  4264. this.$message.warning('请添加需要变更的技术参数卡!')
  4265. return
  4266. }
  4267. row.executeFlag = 'Y'
  4268. row.itemExecutionDate = new Date(+ new Date() + 8 * 3600 * 1000).toISOString().replace(/T/g, ' ').replace(/\.[\d]{3}Z/, '')
  4269. this.costImpactData.changeTotalCost = this.totalCost
  4270. this.executionInfoData.chooseItemList = this.chooseItemList
  4271. this.executionInfoData.chooseItemList2 = this.chooseItemList2
  4272. this.countersignatureData.changeNo = this.modalData.changeNo
  4273. this.countersignatureData.chooseCSItemList = this.chooseCSItemList
  4274. this.modalData.userName = this.$store.state.user.name
  4275. this.modalData.menuId = this.$route.meta.menuId
  4276. this.modalData.detailList = this.chooseDataList
  4277. this.modalData.ecnTypeData = this.form
  4278. this.modalData.costImpactData = this.costImpactData
  4279. this.modalData.executionInfoData = this.executionInfoData
  4280. this.modalData.countersignatureData = this.countersignatureData
  4281. this.modalData.nodeConclusion = 'Y'
  4282. this.submitLoading = true
  4283. tpExecute(this.modalData).then(({data}) => {
  4284. if (data && data.code === 0) {
  4285. this.getDataList()
  4286. this.$message({message: '操作成功', type: 'success'})
  4287. this.submitModalFlag = false
  4288. this.modalFlag = false
  4289. } else {
  4290. this.$alert(data.msg, '错误', {
  4291. confirmButtonText: '确定'
  4292. })
  4293. row.executeFlag = ''
  4294. row.itemExecutionDate = ''
  4295. }
  4296. this.submitLoading = false
  4297. }).catch(()=>{
  4298. this.submitLoading = false
  4299. })
  4300. })
  4301. // row.executeFlag = 'Y'
  4302. // row.itemExecutionDate = new Date(+ new Date() + 8 * 3600 * 1000).toISOString().replace(/T/g, ' ').replace(/\.[\d]{3}Z/, '')
  4303. // row.executor = this.$store.state.user.name
  4304. // // 执行时调用同意提交方法 // 2025-04-15 海波要求修改 一定会是审批中状态
  4305. // if (this.modalData.changeStatus === '审批中') {
  4306. // this.agreeSubmit()
  4307. // }
  4308. },
  4309. // 执行所选属性
  4310. executeCSModal (row) {
  4311. this.$confirm(`是否确认会签?`, '提示', {
  4312. confirmButtonText: '确定',
  4313. cancelButtonText: '取消',
  4314. type: 'warning'
  4315. }).then(() => {
  4316. if (this.plmChangeRequestArr) { // 主信息
  4317. for (let i = 0; i < this.plmChangeRequestArr.length; i++) {
  4318. if (!this.modalData[this.plmChangeRequestArr[i].fieldId] && this.plmChangeRequestArr[i].required === 'Y') {
  4319. this.$message.warning(this.plmChangeRequestArr[i].fieldName + '不能为空!')
  4320. return
  4321. }
  4322. }
  4323. }
  4324. if (this.plmChangeRequestDetailArr) { // 所选技术参数卡
  4325. for (let i = 0; i < this.plmChangeRequestDetailArr.length; i++) {
  4326. // 判断集合中的该属性是否都有值
  4327. let val = this.chooseDataList.every(item => {
  4328. const value = item[this.plmChangeRequestDetailArr[i].fieldId]
  4329. return value !== null && value !== ''
  4330. })
  4331. // 如果没有值 且该字段为必填
  4332. if (!val && this.plmChangeRequestDetailArr[i].required === 'Y') {
  4333. this.$message.warning(this.plmChangeRequestDetailArr[i].fieldName + '不能为空!')
  4334. return
  4335. }
  4336. }
  4337. }
  4338. if (this.plmChangeCostImpactArr) { // 库存成本影响
  4339. for (let i = 0; i < this.plmChangeCostImpactArr.length; i++) {
  4340. if (!this.costImpactData[this.plmChangeCostImpactArr[i].fieldId] && this.plmChangeCostImpactArr[i].required === 'Y') {
  4341. this.$message.warning(this.plmChangeCostImpactArr[i].fieldName + '不能为空!')
  4342. return
  4343. }
  4344. }
  4345. }
  4346. if (this.plmChangeFAItemArr) { // 评估信息
  4347. for (let i = 0; i < this.plmChangeFAItemArr.length; i++) {
  4348. let val = this.chooseItemList2.every(item => {
  4349. const value = item[this.plmChangeFAItemArr[i].fieldId]
  4350. return value !== null && value !== ''
  4351. })
  4352. if (!val && this.plmChangeFAItemArr[i].required === 'Y') {
  4353. this.$message.warning(this.plmChangeFAItemArr[i].fieldName + '不能为空!')
  4354. return
  4355. }
  4356. }
  4357. }
  4358. if (this.plmChangeExecutionInfoArr) {
  4359. for (let i = 0; i < this.plmChangeExecutionInfoArr.length; i++) {
  4360. if (!this.executionInfoData[this.plmChangeExecutionInfoArr[i].fieldId] && this.plmChangeExecutionInfoArr[i].required === 'Y') {
  4361. this.$message.warning(this.plmChangeExecutionInfoArr[i].fieldName + '不能为空!')
  4362. return
  4363. }
  4364. }
  4365. }
  4366. if (this.plmChangeItemArr) { // 执行信息
  4367. for (let i = 0; i < this.plmChangeItemArr.length; i++) {
  4368. let val = this.chooseItemList.every(item => {
  4369. const value = item[this.plmChangeItemArr[i].fieldId]
  4370. return value !== null && value !== ''
  4371. })
  4372. if (!val && this.plmChangeItemArr[i].required === 'Y') {
  4373. this.$message.warning(this.plmChangeItemArr[i].fieldName + '不能为空!')
  4374. return
  4375. }
  4376. }
  4377. }
  4378. if (this.plmChangeCountersignatureItemArr) { // 会签信息
  4379. for (let i = 0; i < this.plmChangeCountersignatureItemArr.length; i++) {
  4380. let val = this.currentChooseCSItemList.every(item => {
  4381. const value = item[this.plmChangeCountersignatureItemArr[i].fieldId]
  4382. return value !== null && value !== ''
  4383. })
  4384. if (!val && this.plmChangeCountersignatureItemArr[i].required === 'Y') {
  4385. this.$message.warning(this.plmChangeCountersignatureItemArr[i].fieldName + '不能为空!')
  4386. return
  4387. }
  4388. }
  4389. }
  4390. if (this.chooseDataList.length === 0) {
  4391. this.$message.warning('请添加需要变更的技术参数卡!')
  4392. return
  4393. }
  4394. row.executeFlag = 'Y'
  4395. row.itemExecutionDate = new Date(+ new Date() + 8 * 3600 * 1000).toISOString().replace(/T/g, ' ').replace(/\.[\d]{3}Z/, '')
  4396. this.costImpactData.changeTotalCost = this.totalCost
  4397. this.executionInfoData.chooseItemList = this.chooseItemList
  4398. this.executionInfoData.chooseItemList2 = this.chooseItemList2
  4399. this.countersignatureData.changeNo = this.modalData.changeNo
  4400. this.countersignatureData.chooseCSItemList = this.chooseCSItemList
  4401. this.modalData.userName = this.$store.state.user.name
  4402. this.modalData.menuId = this.$route.meta.menuId
  4403. this.modalData.detailList = this.chooseDataList
  4404. this.modalData.ecnTypeData = this.form
  4405. this.modalData.costImpactData = this.costImpactData
  4406. this.modalData.executionInfoData = this.executionInfoData
  4407. this.modalData.countersignatureData = this.countersignatureData
  4408. this.modalData.nodeConclusion = 'Y'
  4409. this.submitLoading = true
  4410. csExecute(this.modalData).then(({data}) => {
  4411. if (data && data.code === 0) {
  4412. this.getDataList()
  4413. this.$message({message: '操作成功', type: 'success'})
  4414. this.submitModalFlag = false
  4415. this.modalFlag = false
  4416. } else {
  4417. this.$alert(data.msg, '错误', {
  4418. confirmButtonText: '确定'
  4419. })
  4420. row.executeFlag = ''
  4421. row.itemExecutionDate = ''
  4422. }
  4423. this.submitLoading = false
  4424. }).catch(()=>{
  4425. this.submitLoading = false
  4426. })
  4427. })
  4428. },
  4429. // 执行所选属性
  4430. executeModal2 (row) {
  4431. row.executeFlag = 'Y'
  4432. row.itemExecutionDate = new Date(+ new Date() + 8 * 3600 * 1000).toISOString().replace(/T/g, ' ').replace(/\.[\d]{3}Z/, '')
  4433. row.executor = this.$store.state.user.name
  4434. },
  4435. // 编辑执行信息
  4436. executionInformationSave () {
  4437. this.executionInfoData.chooseItemList = this.chooseItemList
  4438. this.executionInfoData.chooseItemList2 = this.chooseItemList2
  4439. if (this.executionInfoData.originalDieCuttingRuleNo == null || this.executionInfoData.originalDieCuttingRuleNo === '') {
  4440. this.$message.warning('请填写原碑刀编号!')
  4441. return;
  4442. }
  4443. if (this.executionInfoData.newDieCuttingRuleNo == null || this.executionInfoData.newDieCuttingRuleNo === '') {
  4444. this.$message.warning('请填写新碑刀编号!')
  4445. return;
  4446. }
  4447. if (this.executionInfoData.originalStencilNo == null || this.executionInfoData.originalStencilNo === '') {
  4448. this.$message.warning('请填写原网板/印版编号!')
  4449. return;
  4450. }
  4451. if (this.executionInfoData.newStencilNo == null || this.executionInfoData.newStencilNo === '') {
  4452. this.$message.warning('请填写新网板/印版编号!')
  4453. return;
  4454. }
  4455. if (this.executionInfoData.executionDate == null || this.executionInfoData.executionDate === '') {
  4456. this.$message.warning('请选择ECN执行日期!')
  4457. return;
  4458. }
  4459. executionUpdate(this.executionInfoData).then(({data}) => {
  4460. if (data && data.code === 0) {
  4461. this.executionInfoData = data.rows.executionInfoData
  4462. this.executionInfoData.createBy = this.$store.state.user.name
  4463. this.chooseItemList = data.rows.chooseItemList
  4464. this.chooseItemList2 = data.rows.chooseItemList2
  4465. this.getDataList()
  4466. this.$message({
  4467. message: '操作成功',
  4468. type: 'success',
  4469. duration: 1500,
  4470. onClose: () => {}
  4471. })
  4472. } else {
  4473. this.$alert(data.msg, '错误', {
  4474. confirmButtonText: '确定'
  4475. })
  4476. }
  4477. })
  4478. },
  4479. // 编辑会签信息
  4480. countersignatureSave () {
  4481. this.countersignatureData.changeNo = this.modalData.changeNo
  4482. this.countersignatureData.chooseCSItemList = this.chooseCSItemList
  4483. countersignatureUpdate(this.countersignatureData).then(({data}) => {
  4484. if (data && data.code === 0) {
  4485. this.chooseCSItemList = data.rows.chooseCSItemList
  4486. this.getDataList()
  4487. this.$message({
  4488. message: '操作成功',
  4489. type: 'success',
  4490. duration: 1500,
  4491. onClose: () => {}
  4492. })
  4493. } else {
  4494. this.$alert(data.msg, '错误', {
  4495. confirmButtonText: '确定'
  4496. })
  4497. }
  4498. })
  4499. },
  4500. // 新增技术参数卡
  4501. addChangeDetail () {
  4502. this.searchData2.buNo = this.modalData.buNo
  4503. technicalSpecificationSearch2(this.searchData2).then(({data}) => {
  4504. if (data.code === 0) {
  4505. this.dataList2 = data.rows
  4506. const shouldExclude = (item) => {
  4507. return this.chooseDataList.some(cdItem =>
  4508. cdItem.site === item.site && cdItem.codeNo === item.codeNo
  4509. )
  4510. }
  4511. this.dataList2 = this.dataList2.filter(item => !shouldExclude(item))
  4512. this.addDetailModal = true
  4513. } else {
  4514. this.dataList2 = []
  4515. }
  4516. })
  4517. },
  4518. // 复选物料信息
  4519. selectionData2 (val) {
  4520. this.dataSelections2 = val
  4521. },
  4522. // 确认选择技术参数卡
  4523. addDetail () {
  4524. if (this.dataSelections2.length === 0) {
  4525. this.$message.warning("请勾选技术参数卡!")
  4526. return
  4527. }
  4528. this.dataSelections2.forEach(item => {
  4529. // 确保没有重复的元素
  4530. if (!this.chooseDataList.some(cdItem => cdItem.site === item.site && cdItem.codeNo === item.codeNo)) {
  4531. this.chooseDataList.push(item)
  4532. }
  4533. })
  4534. this.addDetailModal = false
  4535. this.dataSelections2 = []
  4536. },
  4537. // 回车换行
  4538. focusNextInput (index, type) {
  4539. let aaa = ''
  4540. if (this.chooseDataList.length - 1 === index) {
  4541. aaa = `${type}0`
  4542. } else {
  4543. aaa = `${type}${index + 1}`
  4544. }
  4545. this.$nextTick(() => {
  4546. this.$refs[aaa].focus()
  4547. })
  4548. },
  4549. // 根据人员编码查人员部门
  4550. getDepartmentByUserName () {
  4551. let tempData = {
  4552. site: this.$store.state.user.site,
  4553. username: this.modalData.applicantId
  4554. }
  4555. getDepartmentByUserName(tempData).then(({data}) => {
  4556. if (data.code === 0) {
  4557. this.modalData.applicationDepartmentId = data.rows[0].departmentNo
  4558. this.modalData.applicationDepartmentName = data.rows[0].departmentName
  4559. }
  4560. })
  4561. },
  4562. // 预览
  4563. previewFile (row) {
  4564. // 预览文件
  4565. let image = ['jpg', 'jpeg', 'png', 'gif', 'bmp']
  4566. let type = ''
  4567. if (image.includes(row.fileType.toLowerCase())) {
  4568. type = 'image/' + row.fileType
  4569. }
  4570. let video = ['mp4', 'avi', 'mov', 'wmv', 'flv']
  4571. if (video.includes(row.fileType.toLowerCase())) {
  4572. type = 'video/' + row.fileType
  4573. }
  4574. let txt = ['txt']
  4575. if (txt.includes(row.fileType.toLowerCase())) {
  4576. type = 'text/plain'
  4577. }
  4578. let office = ['doc', 'docx', 'ppt', 'pptx', 'xls', 'xlsx']
  4579. if (office.includes(row.fileType.toLowerCase())) {
  4580. this.$message.warning(`暂不支持预览${row.fileType.toLowerCase()}文件`)
  4581. return
  4582. }
  4583. let pdf = ['pdf']
  4584. if (pdf.includes(row.fileType.toLowerCase())) {
  4585. type = 'application/pdf'
  4586. }
  4587. if (type === ''){
  4588. this.$message.warning(`暂不支持预览${row.fileType.toLowerCase()}文件`)
  4589. return;
  4590. }
  4591. downLoadQuotationFile(row).then(({data}) => {
  4592. const blob = new Blob([data], { type: type });
  4593. // 创建URL来生成预览
  4594. const fileURL = URL.createObjectURL(blob);
  4595. // 在新标签页中打开文件预览
  4596. const newTab = window.open(fileURL, '_blank')
  4597. })
  4598. },
  4599. // ======== chooseList相关方法 ========
  4600. // 获取基础数据列表S
  4601. getBaseList (val, type) {
  4602. this.tagNo = val
  4603. this.tagNo1 = type
  4604. this.$nextTick(() => {
  4605. let strVal = ''
  4606. let conSql = ''
  4607. if (val === 103) {
  4608. if (type === 1) {
  4609. strVal = this.modalData.applicantId
  4610. } else if (type === 3) {
  4611. strVal = this.costImpactData.productionProductExecutor
  4612. } else if (type === 4) {
  4613. strVal = this.costImpactData.inventoryProductExecutor
  4614. } else if (type === 5) {
  4615. strVal = this.costImpactData.affectedExecutor
  4616. }
  4617. // else if (type === 7) {
  4618. // strVal = this.tempExecutorRow.executor
  4619. // }
  4620. conSql = " and b.site = '" + this.$store.state.user.site + "'"
  4621. }
  4622. if (val === 133) {
  4623. strVal = this.tempPartRow.newPartNo
  4624. }
  4625. if (val === 2005) {
  4626. strVal = this.modalData.tpEngineerId
  4627. conSql = " and b.site = '" + this.$store.state.user.site + "'"
  4628. }
  4629. if (val === 2006) {
  4630. strVal = this.modalData.industrialEngineerId
  4631. conSql = " and b.site = '" + this.$store.state.user.site + "'"
  4632. }
  4633. if (val === 2007) {
  4634. strVal = this.modalData.cqcOperatorId
  4635. conSql = " and b.site = '" + this.$store.state.user.site + "'"
  4636. }
  4637. if (val === 2008) {
  4638. strVal = this.modalData.faiOperatorId
  4639. conSql = " and b.site = '" + this.$store.state.user.site + "'"
  4640. }
  4641. if (val === 2010) {
  4642. strVal = this.tempExecutorRow.executor
  4643. conSql = " and b.site = '" + this.$store.state.user.site + "'"
  4644. }
  4645. this.$refs.baseList.init(val, strVal, conSql)
  4646. })
  4647. },
  4648. // 列表方法的回调
  4649. getBaseData (val) {
  4650. if (this.tagNo === 103) {
  4651. if (this.tagNo1 === 1) {
  4652. this.modalData.applicantId = val.username
  4653. this.modalData.applicantName = val.user_display
  4654. this.getDepartmentByUserName()
  4655. } else if (this.tagNo1 === 3) {
  4656. this.costImpactData.productionProductExecutor = val.username
  4657. this.costImpactData.productionProductExecutorName = val.user_display
  4658. //this.$set(this.costImpactData,'productionProductExecutorName',val.user_display)
  4659. } else if (this.tagNo1 === 4) {
  4660. this.costImpactData.inventoryProductExecutor = val.username
  4661. this.costImpactData.inventoryProductExecutorName = val.user_display
  4662. //this.$set(this.costImpactData,'inventoryProductExecutorName',val.user_display)
  4663. } else if (this.tagNo1 === 5) {
  4664. this.costImpactData.affectedExecutor = val.username
  4665. this.costImpactData.affectedExecutorName = val.user_display
  4666. //this.$set(this.costImpactData,'affectedExecutorName',val.user_display)
  4667. }
  4668. // else if (this.tagNo1 === 7) {
  4669. // this.$set(this.tempExecutorRow,'executor',val.username)
  4670. // }
  4671. }
  4672. if (this.tagNo === 133) {
  4673. //this.tempPartRow.newPartNo = val.part_no
  4674. this.$set(this.tempPartRow,'newPartNo',val.part_no)
  4675. }
  4676. if (this.tagNo === 2005) {
  4677. this.modalData.tpEngineerId = val.username
  4678. this.modalData.tpEngineerName = val.user_display
  4679. }
  4680. if (this.tagNo === 2006) {
  4681. this.modalData.industrialEngineerId = val.username
  4682. this.modalData.industrialEngineerName = val.user_display
  4683. }
  4684. if (this.tagNo === 2007) {
  4685. this.modalData.cqcOperatorId = val.username
  4686. this.modalData.cqcOperatorName = val.user_display
  4687. }
  4688. if (this.tagNo === 2008) {
  4689. this.modalData.faiOperatorId = val.username
  4690. this.modalData.faiOperatorName = val.user_display
  4691. }
  4692. if (this.tagNo === 2010) {
  4693. this.$set(this.tempExecutorRow,'executor',val.username)
  4694. }
  4695. },
  4696. // 申请人输入校验
  4697. applicantBlur (tagNo) {
  4698. if (this.modalData.applicantId != null && this.modalData.applicantId !== '') {
  4699. let tempData = {
  4700. tagno: tagNo,
  4701. conditionSql: " and username = '" + this.modalData.applicantId + "'" + " and site = '" + this.modalData.site + "'"
  4702. }
  4703. verifyData(tempData).then(({data}) => {
  4704. if (data && data.code === 0) {
  4705. if (data.baseListData.length > 0) {
  4706. this.modalData.applicantId = data.baseListData[0].username
  4707. this.modalData.applicantName = data.baseListData[0].user_display
  4708. this.getDepartmentByUserName()
  4709. return
  4710. }
  4711. }
  4712. })
  4713. }
  4714. this.modalData.applicantName = ''
  4715. this.modalData.applicationDepartmentId = ''
  4716. this.modalData.applicationDepartmentName = ''
  4717. },
  4718. // 审批人员输入校验
  4719. tpEngineerBlur (tagNo) {
  4720. if (this.modalData.tpEngineerId != null && this.modalData.tpEngineerId !== '') {
  4721. let tempData = {
  4722. tagno: tagNo,
  4723. conditionSql: " and a.username = '" + this.modalData.tpEngineerId + "'" + " and b.site = '" + this.modalData.site + "'"
  4724. }
  4725. verifyData(tempData).then(({data}) => {
  4726. if (data && data.code === 0) {
  4727. if (data.baseListData.length > 0) {
  4728. this.modalData.tpEngineerId = data.baseListData[0].username
  4729. this.modalData.tpEngineerName = data.baseListData[0].user_display
  4730. return
  4731. }
  4732. }
  4733. })
  4734. }
  4735. this.modalData.tpEngineerName = ''
  4736. },
  4737. // I/E输入校验
  4738. industrialEngineerBlur (tagNo) {
  4739. if (this.modalData.industrialEngineerId != null && this.modalData.industrialEngineerId !== '') {
  4740. let tempData = {
  4741. tagno: tagNo,
  4742. conditionSql: " and a.username = '" + this.modalData.industrialEngineerId + "'" + " and b.site = '" + this.modalData.site + "'"
  4743. }
  4744. verifyData(tempData).then(({data}) => {
  4745. if (data && data.code === 0) {
  4746. if (data.baseListData.length > 0) {
  4747. this.modalData.industrialEngineerId = data.baseListData[0].username
  4748. this.modalData.industrialEngineerName = data.baseListData[0].user_display
  4749. return
  4750. }
  4751. }
  4752. })
  4753. }
  4754. this.modalData.industrialEngineerName = ''
  4755. },
  4756. // CQC输入校验
  4757. cqcOperatorBlur (tagNo) {
  4758. if (this.modalData.cqcOperatorId != null && this.modalData.cqcOperatorId !== '') {
  4759. let tempData = {
  4760. tagno: tagNo,
  4761. conditionSql: " and a.username = '" + this.modalData.cqcOperatorId + "'" + " and b.site = '" + this.modalData.site + "'"
  4762. }
  4763. verifyData(tempData).then(({data}) => {
  4764. if (data && data.code === 0) {
  4765. if (data.baseListData.length > 0) {
  4766. this.modalData.cqcOperatorId = data.baseListData[0].username
  4767. this.modalData.cqcOperatorName = data.baseListData[0].user_display
  4768. return
  4769. }
  4770. }
  4771. })
  4772. }
  4773. this.modalData.cqcOperatorName = ''
  4774. },
  4775. // FAI输入校验
  4776. faiOperatorBlur (tagNo) {
  4777. if (this.modalData.faiOperatorId != null && this.modalData.faiOperatorId !== '') {
  4778. let tempData = {
  4779. tagno: tagNo,
  4780. conditionSql: " and a.username = '" + this.modalData.faiOperatorId + "'" + " and b.site = '" + this.modalData.site + "'"
  4781. }
  4782. verifyData(tempData).then(({data}) => {
  4783. if (data && data.code === 0) {
  4784. if (data.baseListData.length > 0) {
  4785. this.modalData.faiOperatorId = data.baseListData[0].username
  4786. this.modalData.faiOperatorName = data.baseListData[0].user_display
  4787. return
  4788. }
  4789. }
  4790. })
  4791. }
  4792. this.modalData.faiOperatorName = ''
  4793. },
  4794. toMenu (row) {
  4795. if (this.$router.resolve(`/sampleManagement-technicalSpecificationList`).resolved.name === '404') {
  4796. this.$alert('权限不足,访问失败', '警告', {confirmButtonText: '确定',})
  4797. } else {
  4798. this.$router.push({name:`sampleManagement-technicalSpecificationList`,params:{nowCodeNo: row.oriCodeNo},})
  4799. }
  4800. },
  4801. // ======== 导出相关方法 ========
  4802. /**
  4803. * 导出excel
  4804. */
  4805. async createExportData () {
  4806. this.searchData.limit = -1
  4807. this.searchData.page = 1
  4808. await changeRecordSearch(this.searchData).then(({data}) => {
  4809. this.resultList = data.page.list
  4810. })
  4811. return this.resultList
  4812. },
  4813. startDownload () {},
  4814. finishDownload () {},
  4815. fields () {
  4816. let json = '{'
  4817. this.columnList.forEach((item, index) => {
  4818. if (index === this.columnList.length - 1) {
  4819. json += '"' + item.columnLabel + '"' + ':' + '"' + item.columnProp + '"'
  4820. } else {
  4821. json += '"' + item.columnLabel + '"' + ':' + '"' + item.columnProp + '"' + ','
  4822. }
  4823. })
  4824. json += '}'
  4825. let s = eval('(' + json + ')')
  4826. return s
  4827. },
  4828. rowStyle ({row}) {
  4829. if (this.currentRow.changeNo === row.changeNo) {
  4830. return { 'background-color': '#E8F7F6', cursor: 'pointer' };
  4831. }
  4832. },
  4833. // 获取按钮的权限数据
  4834. getButtonAuthData () {
  4835. this.authSearch = this.isAuth(this.menuId+":search")
  4836. this.authUpdate = this.isAuth(this.menuId+":update")
  4837. this.authIssue = this.isAuth(this.menuId+":issue")
  4838. this.authSubmit = this.isAuth(this.menuId+":submit")
  4839. this.authReject = this.isAuth(this.menuId+":reject")
  4840. this.authFileSave = this.isAuth(this.menuId+":fileSave")
  4841. this.authFileDownLoad = this.isAuth(this.menuId+":fileDownLoad")
  4842. this.authFileRemove = this.isAuth(this.menuId+":fileRemove")
  4843. this.authFilePreview = this.isAuth(this.menuId+":filePreview")
  4844. },
  4845. }
  4846. }
  4847. </script>
  4848. <style scoped lang="scss">
  4849. /deep/ .customer-tab .el-tabs__content {
  4850. padding: 0px !important;
  4851. }
  4852. .numInput /deep/ .el-input__inner{
  4853. text-align: right;
  4854. }
  4855. /deep/ .inlineNumber input::-webkit-outer-spin-button,
  4856. /deep/ .inlineNumber input::-webkit-inner-spin-button {
  4857. -webkit-appearance: none;
  4858. }
  4859. /deep/ .inlineNumber input[type="number"]{
  4860. -moz-appearance: textfield;
  4861. padding-right: 5px !important;
  4862. }
  4863. </style>