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.

1100 lines
38 KiB

2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
1 year ago
1 year ago
2 years ago
1 year ago
1 year ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
1 year ago
10 months ago
2 years ago
10 months ago
2 years ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
11 months ago
1 year ago
11 months ago
1 year ago
1 year ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
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 year ago
2 years ago
2 years ago
2 years ago
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 year ago
2 years ago
1 year ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
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 year ago
2 years ago
2 years ago
1 year ago
1 year ago
1 year ago
2 years ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
11 months ago
1 year ago
11 months ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
11 months ago
2 years ago
1 year ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
1 year ago
11 months ago
2 years ago
2 years ago
1 year ago
2 years ago
1 year ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
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 year ago
2 years ago
1 year ago
1 year ago
11 months ago
10 months ago
2 years ago
11 months ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
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 year ago
2 years ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
2 years ago
2 years ago
2 years ago
1 year ago
2 years ago
2 years ago
1 year ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
1 year ago
2 years ago
2 years ago
2 years ago
2 years ago
1 year ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
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
1 year ago
10 months ago
2 years ago
2 years ago
2 years ago
10 months ago
10 months ago
2 years ago
1 year ago
2 years ago
2 years ago
1 year ago
2 years ago
1 year ago
2 years ago
2 years ago
2 years ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
2 years ago
2 years ago
2 years ago
1 year ago
1 year ago
1 year ago
2 years ago
2 years ago
1 year ago
1 year ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
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
2 years ago
2 years ago
10 months ago
2 years ago
10 months ago
2 years ago
1 year ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
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 year ago
11 months ago
1 year ago
2 years ago
  1. <template>
  2. <div class="mod-config">
  3. <el-dialog width="600px" :title="!dataForm.id ? '添加' : '编辑'" :close-on-click-modal="false" :visible.sync="visible">
  4. <el-form :inline="true" label-position="top" label-width="100px" :rules="dataRole">
  5. <el-form-item >
  6. <span slot="label" @click="chooseProofingModel()"><a herf="#">打样单号</a></span>
  7. <el-input v-model="dataForm.proofingNo" style="width: 130px" @change="changeProofingNoChange" :disabled="dataForm.id!=0"></el-input>
  8. </el-form-item>
  9. <el-form-item label=" ">
  10. <el-checkbox v-model="jumpFlag">保存后跳转至详情</el-checkbox>
  11. </el-form-item>
  12. <!-- <el-form-item prop="testPartNo" style="margin-left: 12px" :label="'IFS料号'">-->
  13. <!--&lt;!&ndash; <span slot="label" style="" @click="getBaseList(134,1)" ><a herf="#">IFS料号</a></span>&ndash;&gt;-->
  14. <!-- <el-input v-model="dataForm.testPartNo" @change="changeTestDesc" style="width: 130px" disabled ></el-input>-->
  15. <!-- </el-form-item>-->
  16. </el-form>
  17. <el-form :inline="true" label-position="top" label-width="100px" :rules="dataRole">
  18. <el-form-item :rules="dataRole.testPartNo">
  19. <span slot="label" @click="choosePartModel()"><a herf="#">IFS料号</a></span>
  20. <el-input v-model="dataForm.finalPartNo" style="width: 130px" readonly></el-input>
  21. </el-form-item>
  22. <el-form-item :label="'项目号'">
  23. <el-input v-model="dataForm.projectId" style="width: 130px" disabled></el-input>
  24. </el-form-item>
  25. <el-form-item :label="'物料描述'">
  26. <el-input v-model="dataForm.partDesc" style="width: 274px" disabled></el-input>
  27. </el-form-item>
  28. </el-form>
  29. <el-form :inline="true" label-position="top" label-width="100px" :rules="dataRole">
  30. <el-form-item :label="'BU'" >
  31. <el-input v-model="dataForm.buNo" disabled style="width: 130px" ></el-input>
  32. </el-form-item>
  33. <!-- <el-form-item :label="'参数卡编码'" >-->
  34. <!-- <el-input v-model="dataForm.oriCodeNo" disabled style="width: 130px" ></el-input>-->
  35. <!-- </el-form-item>-->
  36. <el-form-item :label="'系统版本号'" prop="revNo" :rules="dataRole.revNo">
  37. <el-input v-model="dataForm.revNo" style="width: 130px" disabled></el-input>
  38. </el-form-item>
  39. <el-form-item label="Rev No" prop="rev" :rules="dataRole.rev">
  40. <el-input v-model="dataForm.rev" style="width: 130px"></el-input>
  41. </el-form-item>
  42. <el-form-item label="Customer Rev" prop="customerRev" :rules="dataRole.customerRev">
  43. <el-input v-model="dataForm.customerRev" style="width: 130px"></el-input>
  44. </el-form-item>
  45. </el-form>
  46. <el-form :inline="true" label-position="top" label-width="100px" :rules="dataRole">
  47. <el-form-item>
  48. <span slot="label" @click="getUserList(4)"><a herf="#">Select CS</a></span>
  49. <el-input v-model="dataForm.csOperaterName" ref="csOperaterName" placeholder="请选择人员" readonly style="width: 130px" ></el-input>
  50. </el-form-item>
  51. <el-form-item>
  52. <span slot="label" @click="getUserList(7)"><a herf="#">Select Engineer</a></span>
  53. <el-input v-model="dataForm.engineer" readonly style="width: 130px" placeholder="请选择人员" ></el-input>
  54. </el-form-item>
  55. <el-form-item >
  56. <span slot="label" @click="getUserList(8)"><a herf="#">Select Artwork</a></span>
  57. <el-input v-model="dataForm.technician" readonly style="width: 130px" placeholder="请选择人员" ></el-input>
  58. </el-form-item>
  59. <el-form-item >
  60. <span slot="label" @click="getUserList(6)"><a herf="#">Select Technical</a></span>
  61. <el-input v-model="dataForm.mpOperatorName" ref="mpOperatorName" placeholder="请选择人员" readonly style="width: 130px" ></el-input>
  62. </el-form-item>
  63. <el-form-item>
  64. <span slot="label" @click="getUserList(1)"><a herf="#">Select CQC</a></span>
  65. <el-input v-model="dataForm.cqcOperatorName" ref="cqcOperatorName" placeholder="请选择人员" readonly style="width: 130px" ></el-input>
  66. </el-form-item>
  67. <el-form-item>
  68. <span slot="label" @click="getUserList(2)"><a herf="#">Select FAI</a></span>
  69. <el-input v-model="dataForm.faiOperatorName" ref="faiOperatorName" placeholder="请选择人员" readonly style="width: 130px" ></el-input>
  70. </el-form-item>
  71. <!-- <el-form-item >-->
  72. <!-- <span slot="label" style="" @click="quotationOfficerChooseModal()"><a herf="#">报价员</a></span>-->
  73. <!-- <el-input v-model="dataForm.quotationOfficer" readonly style="width: 274px" @focus="quotationOfficerChooseModal()"></el-input>-->
  74. <!-- </el-form-item>-->
  75. <!-- </el-form>-->
  76. <!-- <el-form :inline="true" label-position="top" label-width="100px" >-->
  77. <!-- <el-form-item >-->
  78. <!-- <span slot="label" style="" @click="engineerChooseModal()"><a herf="#">Select PE Engineer</a></span>-->
  79. <!-- <el-input v-model="dataForm.engineer" readonly style="width: 130px" @focus="engineerChooseModal()"></el-input>-->
  80. <!-- </el-form-item>-->
  81. <!-- 274px-->
  82. <!-- <el-form-item >-->
  83. <!-- <span slot="label" style="" @click="technicianModal()"><a herf="#">Select Artwork</a></span>-->
  84. <!-- <el-input v-model="dataForm.technician" readonly style="width: 130px" @focus="technicianModal()"></el-input>-->
  85. <!-- </el-form-item>-->
  86. <!-- <el-form-item >-->
  87. <!-- <span slot="label" style="" @click="getUserList(3)"><a herf="#">PE人员</a></span>-->
  88. <!-- <el-input v-model="dataForm.peOperaterName" ref="peOperaterName" placeholder="请选择人员" readonly style="width: 130px" ></el-input>-->
  89. <!-- </el-form-item>-->
  90. <!-- <el-form-item >-->
  91. <!-- <span slot="label" style="" @click="getUserList(5)"><a herf="#">DCC人员</a></span>-->
  92. <!-- <el-input v-model="dataForm.dccOperaterName" ref="dccOperaterName" placeholder="请选择人员" readonly style="width: 130px" ></el-input>-->
  93. <!-- </el-form-item>-->
  94. <el-form-item >
  95. <span slot="label" @click="dccChooseModal()"><a herf="#">Select DCC</a></span>
  96. <el-input v-model="dataForm.dcc" ref="dcc" readonly style="" @focus="dccChooseModal()" style="width: 130px"></el-input>
  97. </el-form-item>
  98. </el-form>
  99. <el-form :inline="true" label-position="top" label-width="100px" >
  100. <el-form-item :label="'备注'">
  101. <el-input
  102. type="textarea"
  103. v-model="dataForm.remark "
  104. :rows="3"
  105. resize='none'
  106. maxlength="120"
  107. show-word-limit
  108. style="width: 562px;height: 60px">
  109. </el-input>
  110. </el-form-item>
  111. </el-form>
  112. <el-form label-position="top" style="margin-top: 60px; margin-left: 0px;text-align:center">
  113. <el-button type="primary" @click="dataFormSubmit()">{{'确定'}}</el-button>
  114. <el-button type="primary" @click="visible = false">{{'关闭'}}</el-button>
  115. </el-form>
  116. </el-dialog>
  117. <el-dialog
  118. width="530px"
  119. title="报价员"
  120. :close-on-click-modal="false"
  121. :visible.sync="quotationOfficerFlag">
  122. <el-transfer v-model="quotationOfficerList" class="rq" filterable :props="{
  123. key: 'operatorId',
  124. label: 'operatorName'
  125. }" :data="operatorList" :titles="['未选择', '已选择']"></el-transfer>
  126. <span slot="footer" class="dialog-footer">
  127. <div style="margin-top: 5px">
  128. <el-button type="primary" @click="saveQuotationOfficerList()">确定</el-button>
  129. <el-button @click="quotationOfficerFlag = false" type="primary">取消</el-button>
  130. </div>
  131. </span>
  132. </el-dialog>
  133. <el-dialog
  134. width="530px"
  135. title="工程师"
  136. :close-on-click-modal="false"
  137. :visible.sync="engineerFlag">
  138. <el-transfer v-model="engineerList" class="rq" filterable :props="{
  139. key: 'operatorId',
  140. label: 'operatorName'
  141. }" :data="operatorList" :titles="['未选择', '已选择']"></el-transfer>
  142. <span slot="footer" class="dialog-footer">
  143. <div style="margin-top: 5px">
  144. <el-button type="primary" @click="saveEngineerList()">确定</el-button>
  145. <el-button @click="engineerFlag = false" type="primary">取消</el-button>
  146. </div>
  147. </span>
  148. </el-dialog>
  149. <el-dialog
  150. width="530px"
  151. title="项目负责人"
  152. :close-on-click-modal="false"
  153. :visible.sync="ownerFlag">
  154. <el-transfer v-model="technicianList" class="rq" filterable :props="{
  155. key: 'operatorId',
  156. label: 'operatorName'
  157. }" :data="operatorList" :titles="['未选择', '已选择']"></el-transfer>
  158. <span slot="footer" class="dialog-footer">
  159. <div style="margin-top: 5px">
  160. <el-button type="primary" @click="savetechnicianList()">确定</el-button>
  161. <el-button @click="ownerFlag = false" type="primary">取消</el-button>
  162. </div>
  163. </span>
  164. </el-dialog>
  165. <el-dialog
  166. width="950px"
  167. title="选择打样单"
  168. :close-on-click-modal="false"
  169. :visible.sync="proofingModelFlag">
  170. <el-form :inline="true" label-position="top" label-width="100px" >
  171. <el-form-item style="margin-left: 0px">
  172. <span slot="label" style="" @click="getBaseList(104,2)" ><a herf="#">项目号</a></span>
  173. <el-input v-model="proofingSearch.projectId" style="width: 130px" ></el-input>
  174. </el-form-item>
  175. <el-form-item style="margin-left: 0px">
  176. <span slot="label" style="" @click="getBaseList(501,2)" ><a herf="#">打样单</a></span>
  177. <el-input v-model="proofingSearch.proofingNo" style="width: 130px" ></el-input>
  178. </el-form-item>
  179. <el-form-item style="margin-left: 0px">
  180. <span slot="label" style="" @click="getBaseList(102,2)" ><a herf="#">直接客户</a></span>
  181. <el-input v-model="proofingSearch.customerId" style="width: 130px" ></el-input>
  182. </el-form-item>
  183. <el-form-item style="margin-left: 0px">
  184. <span slot="label" style="" @click="getBaseList(102,3)" ><a herf="#">最终客户</a></span>
  185. <el-input v-model="proofingSearch.finalCustomerId" style="width: 130px" ></el-input>
  186. </el-form-item>
  187. <el-form-item label=" ">
  188. <el-button type="primary" @click="refreshProofingList()">{{'查询'}}</el-button>
  189. </el-form-item>
  190. </el-form>
  191. <el-table
  192. height="450"
  193. :data="proofingList"
  194. border
  195. @row-dblclick="chooseProofingNo"
  196. style="width: 100%;">
  197. <el-table-column
  198. prop="proofingNo"
  199. header-align="center"
  200. align="left"
  201. min-width="120"
  202. style="font-size: 20px"
  203. label="打样单">
  204. </el-table-column>
  205. <el-table-column
  206. prop="projectId"
  207. header-align="center"
  208. align="left"
  209. min-width="120"
  210. style="font-size: 20px"
  211. label="项目号">
  212. </el-table-column>
  213. <el-table-column
  214. prop="projectName"
  215. header-align="center"
  216. align="left"
  217. min-width="120"
  218. style="font-size: 20px"
  219. label="项目名称">
  220. </el-table-column>
  221. <el-table-column
  222. prop="testPartNo"
  223. header-align="center"
  224. align="left"
  225. min-width="120"
  226. label="测试料号">
  227. </el-table-column>
  228. <el-table-column
  229. prop="partDesc"
  230. header-align="center"
  231. align="left"
  232. min-width="120"
  233. label="物料名称">
  234. </el-table-column>
  235. <el-table-column
  236. prop="buNo"
  237. header-align="center"
  238. align="left"
  239. min-width="80"
  240. label="BU">
  241. </el-table-column>
  242. <el-table-column
  243. prop="customerDesc"
  244. header-align="center"
  245. align="left"
  246. min-width="120"
  247. label="直接客户">
  248. </el-table-column>
  249. <el-table-column
  250. prop="finalCustomerDesc"
  251. header-align="center"
  252. align="left"
  253. min-width="120"
  254. label="最终客户">
  255. </el-table-column>
  256. </el-table>
  257. </el-dialog>
  258. <el-dialog
  259. width="750px"
  260. title="选择物料"
  261. :close-on-click-modal="false"
  262. :visible.sync="partModelFlag">
  263. <el-form :inline="true" label-position="top" label-width="100px" >
  264. <el-form-item style="margin-left: 0px" label="项目编码">
  265. <el-input v-model="partSearch.projectId" style="width: 130px" ></el-input>
  266. </el-form-item>
  267. <el-form-item style="margin-left: 0px" label="IFS料号">
  268. <el-input v-model="partSearch.finalPartNo" style="width: 130px" ></el-input>
  269. </el-form-item>
  270. <el-form-item style="margin-left: 0px" label="物料编码">
  271. <el-input v-model="partSearch.testPartNo" style="width: 130px" ></el-input>
  272. </el-form-item>
  273. <!-- <el-form-item style="margin-left: 0px" label="物料名称">-->
  274. <!-- <el-input v-model="partSearch.partDesc" style="width: 130px" ></el-input>-->
  275. <!-- </el-form-item>-->
  276. <el-form-item style="margin-left: 0px" label="客户料号">
  277. <el-input v-model="partSearch.customerPartNo" style="width: 130px" ></el-input>
  278. </el-form-item>
  279. <el-form-item label=" ">
  280. <el-button type="primary" @click="refreshPartList()">{{'查询'}}</el-button>
  281. </el-form-item>
  282. </el-form>
  283. <el-table
  284. height="450"
  285. :data="partList"
  286. border
  287. @row-dblclick="choosePartNo"
  288. style="width: 100%;">
  289. <el-table-column
  290. prop="finalPartNo"
  291. header-align="center"
  292. align="left"
  293. min-width="120"
  294. style="font-size: 20px"
  295. label="IFS料号">
  296. </el-table-column>
  297. <el-table-column
  298. prop="testPartNo"
  299. header-align="center"
  300. align="left"
  301. min-width="120"
  302. style="font-size: 20px"
  303. label="物料编码">
  304. </el-table-column>
  305. <el-table-column
  306. prop="projectId"
  307. header-align="center"
  308. align="left"
  309. min-width="120"
  310. style="font-size: 20px"
  311. label="项目编码">
  312. </el-table-column>
  313. <el-table-column
  314. prop="customerPartNo"
  315. header-align="center"
  316. align="left"
  317. min-width="120"
  318. label="客户料号">
  319. </el-table-column>
  320. <el-table-column
  321. prop="partDesc"
  322. header-align="center"
  323. align="left"
  324. min-width="120"
  325. label="物料名称">
  326. </el-table-column>
  327. <el-table-column
  328. prop="buNo"
  329. header-align="center"
  330. align="left"
  331. min-width="70"
  332. label="BU">
  333. </el-table-column>
  334. </el-table>
  335. <el-pagination
  336. @size-change="sizeChangeHandle"
  337. @current-change="currentChangeHandle"
  338. :current-page="pageIndex"
  339. :page-sizes="[20, 50, 100, 1000]"
  340. :page-size="pageSize"
  341. :total="totalPage"
  342. layout="total, sizes, prev, pager, next, jumper">
  343. </el-pagination>
  344. </el-dialog>
  345. <el-dialog
  346. width="530px"
  347. title="DCC人员"
  348. :close-on-click-modal="false"
  349. :visible.sync="dccFlag">
  350. <el-transfer v-model="dccList" class="rq" filterable :props="{
  351. key: 'operatorId',
  352. label: 'operatorName'
  353. }" :data="operatorList" :titles="['未选择', '已选择']"></el-transfer>
  354. <span slot="footer" class="dialog-footer">
  355. <div style="margin-top: 5px">
  356. <el-button type="primary" @click="savetDccList()">确定</el-button>
  357. <el-button @click="dccFlag = false" type="primary">取消</el-button>
  358. </div>
  359. </span>
  360. </el-dialog>
  361. <Chooselist ref="baseList" @getBaseData="getBaseData"></Chooselist>
  362. <ChooseUser ref="userList" @getBaseData="getUserData"></ChooseUser>
  363. </div>
  364. </template>
  365. <script>
  366. import {
  367. searchOperatorWithSite,
  368. } from "@/api/project/project.js"
  369. import {technicalSpecificationListSearch,
  370. saveTechnicalSpecificationSheet,
  371. searchTechnicalSpecificationTeamStr,
  372. getTestPartChangeData,
  373. getProofingDataByUserRole,
  374. getFinalPartData,
  375. searchBMUser,
  376. } from "@/api/sampleManagement/technicalSpecificationList.js"
  377. import Chooselist from '@/views/modules/common/Chooselist'
  378. import ChooseUser from '@/views/modules/common/ChooseUser'
  379. export default {
  380. components: {
  381. Chooselist,ChooseUser
  382. },
  383. data () {
  384. return {
  385. jumpFlag:true,
  386. tagNo:'',
  387. tagNo1:'',
  388. visible: false,
  389. treeVisible: false,
  390. quotationOfficerFlag:false,
  391. engineerFlag:false,
  392. userRoleFlag:false,
  393. ownerFlag:false,
  394. operatorList:[],
  395. dataForm: {
  396. id: 0,
  397. finalPartNo:'',
  398. site:this.$store.state.user.site,
  399. proofingNo:'',
  400. projectId:'',
  401. codeNo:'',
  402. testPartNo:'',
  403. partDesc:'',
  404. status:'',
  405. revNo:'',
  406. remark:'',
  407. technician:'',
  408. quotationOfficer:'',
  409. engineer:'',
  410. quotationOfficerList:[],
  411. engineerList:[],
  412. technicianList:[],
  413. engineerNo:'',
  414. technicianNo:'',
  415. oriCodeNo:'',
  416. cqcOperator:'',
  417. faiOperator:'',
  418. cqcOperatorName:'',
  419. faiOperatorName:'',
  420. peOperater:'',
  421. peOperaterName:'',
  422. csOperater:'',
  423. csOperaterName:'',
  424. dccOperater:'',
  425. dccOperaterName:'',
  426. mpOperatorName:'',
  427. mpOperator:'',
  428. buNo:'',
  429. dcc:'',
  430. dccList:[],
  431. rev:'',
  432. customerRev:''
  433. },
  434. dccList:'',
  435. dccFlag:false,
  436. proofingSearch:{
  437. projectId:'',
  438. proofingNo:'',
  439. customerId:'',
  440. finalCustomerId:'',
  441. site:this.$store.state.user.site,
  442. username:this.$store.state.user.name,
  443. },
  444. pageIndex: 1,
  445. pageSize: 100,
  446. totalPage: 0,
  447. partSearch:{
  448. projectId:'',
  449. finalPartNo:'',
  450. testPartNo:'',
  451. partDesc:'',
  452. site:this.$store.state.user.site,
  453. username:this.$store.state.user.name,
  454. customerPartNo:'',
  455. page: 1,
  456. limit: 100,
  457. },
  458. quotationOfficerList:[],
  459. engineerList:[],
  460. technicianList:[],
  461. dataRole: {
  462. testPartNo: [
  463. {
  464. required: true,
  465. message: ' ',
  466. trigger: 'change'
  467. }
  468. ],
  469. revNo: [
  470. {
  471. required: true,
  472. message: ' ',
  473. trigger: 'change'
  474. }
  475. ],
  476. quotationOfficer: [
  477. {
  478. required: true,
  479. message: ' ',
  480. trigger: 'change'
  481. }
  482. ],
  483. engineer: [
  484. {
  485. required: true,
  486. message: ' ',
  487. trigger: 'change'
  488. }
  489. ],
  490. technician: [
  491. {
  492. required: true,
  493. message: ' ',
  494. trigger: 'change'
  495. }
  496. ],
  497. },
  498. proofingList:[],
  499. proofingModelFlag:false,
  500. partList:[],
  501. partModelFlag:false,
  502. }
  503. },
  504. created () {
  505. },
  506. methods: {
  507. getUserList (type) {
  508. this.tagNo1 = type
  509. this.$nextTick(() => {
  510. let strVal = ''
  511. if(type==1) {
  512. strVal = this.dataForm.cqcOperator
  513. }
  514. if(type==2) {
  515. strVal = this.dataForm.faiOperator
  516. }
  517. if(type==3) {
  518. strVal = this.dataForm.peOperater
  519. }
  520. if(type==4) {
  521. strVal = this.dataForm.csOperater
  522. }
  523. if(type==5) {
  524. strVal = this.dataForm.dccOperater
  525. }
  526. if(type==6) {
  527. strVal = this.dataForm.mpOperator
  528. }
  529. if(type==7) {
  530. strVal = this.dataForm.engineerNo
  531. }
  532. if(type==8) {
  533. strVal = this.dataForm.technicianNo
  534. }
  535. this.$refs.userList.init(this.$store.state.user.site,this.dataForm.buNo!==''?this.dataForm.buNo:'%%', strVal)
  536. })
  537. },
  538. /* 列表方法的回调 */
  539. getUserData (val) {
  540. if(this.tagNo1==1) {
  541. this.dataForm.cqcOperator = val.username
  542. this.dataForm.cqcOperatorName = val.userDisplay
  543. // this.$nextTick(() => {
  544. // this.$triggerInputEvent(this.$refs.cqcOperatorName);
  545. // });
  546. }
  547. if(this.tagNo1==2) {
  548. this.dataForm.faiOperator = val.username
  549. this.dataForm.faiOperatorName = val.userDisplay
  550. // this.$nextTick(() => {
  551. // this.$triggerInputEvent(this.$refs.faiOperatorName);
  552. // });
  553. }
  554. if(this.tagNo1==3) {
  555. this.dataForm.peOperater = val.username
  556. this.dataForm.peOperaterName = val.userDisplay
  557. // this.$nextTick(() => {
  558. // this.$triggerInputEvent(this.$refs.peOperaterName);
  559. // });
  560. }
  561. if(this.tagNo1==4) {
  562. this.dataForm.csOperater = val.username
  563. this.dataForm.csOperaterName = val.userDisplay
  564. // this.$nextTick(() => {
  565. // this.$triggerInputEvent(this.$refs.csOperaterName);
  566. // });
  567. }
  568. if(this.tagNo1==5) {
  569. this.dataForm.dccOperater = val.username
  570. this.dataForm.dccOperaterName = val.userDisplay
  571. // this.$nextTick(() => {
  572. // this.$triggerInputEvent(this.$refs.dccOperaterName);
  573. // });
  574. }
  575. if(this.tagNo1==6) {
  576. this.dataForm.mpOperator = val.username
  577. this.dataForm.mpOperatorName = val.userDisplay
  578. // this.$nextTick(() => {
  579. // this.$triggerInputEvent(this.$refs.mpOperatorName);
  580. // });
  581. }
  582. if(this.tagNo1==7) {
  583. this.dataForm.engineerNo = val.username
  584. this.dataForm.engineer = val.userDisplay
  585. // this.$nextTick(() => {
  586. // this.$triggerInputEvent(this.$refs.mpOperatorName);
  587. // });
  588. }
  589. if(this.tagNo1==8) {
  590. this.dataForm.technicianNo = val.username
  591. this.dataForm.technician = val.userDisplay
  592. // this.$nextTick(() => {
  593. // this.$triggerInputEvent(this.$refs.mpOperatorName);
  594. // });
  595. }
  596. },
  597. // 获取基础数据列表S
  598. getBaseList (val, type) {
  599. this.tagNo = val
  600. this.tagNo1 = type
  601. this.$nextTick(() => {
  602. let strVal = ''
  603. if (val === 134) {
  604. if(type==1) {
  605. if(this.dataForm.id!=0){
  606. return false
  607. }
  608. strVal = this.dataForm.testPartNo
  609. }
  610. }
  611. if (val === 102) {
  612. if(type==1) {
  613. strVal = this.dataForm.customerId
  614. }
  615. if(type==2) {
  616. strVal = this.proofingSearch.customerId
  617. }
  618. if(type==3) {
  619. strVal = this.proofingSearch.finalCustomerId
  620. }
  621. }
  622. if (val === 104) {
  623. if(type==2) {
  624. strVal = this.proofingSearch.projectId
  625. }
  626. }
  627. if (val === 501) {
  628. if(type==2) {
  629. strVal = this.proofingSearch.proofingNo
  630. }
  631. }
  632. if (val === 1011) {
  633. if(type==1) {
  634. strVal = this.dataForm.projectSource
  635. }
  636. }
  637. if (val === 1012) {
  638. if(type==1) {
  639. strVal = this.dataForm.priority
  640. }
  641. }
  642. this.$refs.baseList.init(val, strVal)
  643. })
  644. },
  645. /* 列表方法的回调 */
  646. getBaseData (val) {
  647. if (this.tagNo === 134) {
  648. if(this.tagNo1==1) {
  649. this.dataForm.testPartNo = val.Test_part_no
  650. this.dataForm.proofingNo = ''
  651. this.changeTestDesc();
  652. }
  653. }
  654. if (this.tagNo === 102) {
  655. if(this.tagNo1==1) {
  656. this.dataForm.customerId = val.Customer_no
  657. this.dataForm.customerName = val.Customer_desc
  658. }
  659. if(this.tagNo1==2) {
  660. this.proofingSearch.customerId = val.Customer_no
  661. }
  662. if(this.tagNo1==3) {
  663. this.proofingSearch.finalCustomerId = val.Customer_no
  664. }
  665. }
  666. if (this.tagNo === 104) {
  667. if(this.tagNo1==2) {
  668. this.proofingSearch.projectId = val.project_id
  669. }
  670. }
  671. if (this.tagNo === 501) {
  672. if(this.tagNo1==2) {
  673. this.proofingSearch.proofingNo = val.Proofing_no
  674. }
  675. }
  676. if (this.tagNo === 1011) {
  677. if(this.tagNo1==1) {
  678. this.dataForm.projectSource = val.Base_id
  679. this.dataForm.projectSourceDesc = val.Base_desc
  680. }
  681. }
  682. if (this.tagNo === 1012) {
  683. if(this.tagNo1==1) {
  684. this.dataForm.priority = val.Base_id
  685. this.dataForm.priorityDesc = val.Base_desc
  686. }
  687. }
  688. },
  689. init (id) {
  690. this.jumpFlag = true
  691. this.dataForm.id = id || 0
  692. if (this.dataForm.id !== 0) {
  693. let inData={
  694. page: 1,
  695. limit: 10,
  696. id:id,
  697. userName:this.$store.state.user.name,
  698. site:this.$store.state.user.site,
  699. }
  700. technicalSpecificationListSearch(inData).then(({data}) => {
  701. if(data.page.list.length>0){
  702. this.dataForm= data.page.list[0];
  703. let inData={
  704. site:this.dataForm.site,
  705. codeNo:this.dataForm.codeNo,
  706. type:'quotationOfficer',
  707. }
  708. searchTechnicalSpecificationTeamStr(inData).then(({data}) => {
  709. this.dataForm.quotationOfficerList=data.rows
  710. })
  711. let inData2={
  712. site:this.dataForm.site,
  713. codeNo:this.dataForm.codeNo,
  714. type:'technician',
  715. }
  716. searchTechnicalSpecificationTeamStr(inData2).then(({data}) => {
  717. this.dataForm.technicianList=data.rows
  718. })
  719. let inData3={
  720. site:this.dataForm.site,
  721. codeNo:this.dataForm.codeNo,
  722. type:'engineer',
  723. }
  724. searchTechnicalSpecificationTeamStr(inData3).then(({data}) => {
  725. this.dataForm.engineerList=data.rows
  726. })
  727. let inData5 = {
  728. site: this.dataForm.site,
  729. codeNo: this.dataForm.codeNo,
  730. type: 'dcc',
  731. }
  732. searchTechnicalSpecificationTeamStr(inData5).then(({data}) => {
  733. this.dataForm.dccList = data.rows
  734. })
  735. this.visible = true
  736. }else {
  737. this.$message.error('技术参数卡数据有误!')
  738. }
  739. })
  740. } else {
  741. this.dataForm = {
  742. id: 0,
  743. finalPartNo: '',
  744. site: this.$store.state.user.site,
  745. proofingNo: '',
  746. projectId: '',
  747. codeNo: '',
  748. testPartNo: '',
  749. partDesc: '',
  750. status: '',
  751. revNo: 1,
  752. remark: '',
  753. technician: '',
  754. quotationOfficer: '',
  755. engineer: '',
  756. quotationOfficerList: [],
  757. engineerList: [],
  758. technicianList: [],
  759. cqcOperator: '',
  760. faiOperator: '',
  761. cqcOperatorName: '',
  762. faiOperatorName: '',
  763. peOperater: '',
  764. peOperaterName: '',
  765. csOperater: this.$store.state.user.name,
  766. csOperaterName: this.$store.state.user.userDisplay,
  767. dccOperater: '',
  768. dccOperaterName: '',
  769. mpOperatorName: '',
  770. mpOperator: '',
  771. oriCodeNo: '',
  772. engineerNo: '',
  773. technicianNo: '',
  774. buNo: '',
  775. dcc: '',
  776. dccList: [],
  777. rev:'',
  778. customerRev:''
  779. }
  780. this.visible = true
  781. }
  782. },
  783. chooseProofingModel () {
  784. if (this.dataForm.id !== 0 ) {
  785. return false;
  786. }
  787. this.proofingSearch={
  788. projectId:'',
  789. proofingNo:'',
  790. customerId:'',
  791. finalCustomerId:'',
  792. site:this.$store.state.user.site,
  793. username:this.$store.state.user.name,
  794. }
  795. getProofingDataByUserRole(this.proofingSearch).then(({data}) => {
  796. this.proofingList=data.rows
  797. })
  798. this.proofingModelFlag=true
  799. },
  800. choosePartModel(){
  801. this.partSearch={
  802. projectId:'',
  803. finalPartNo:'',
  804. customerPartNo:'',
  805. partDesc:'',
  806. testPartNo:'',
  807. site:this.$store.state.user.site,
  808. username:this.$store.state.user.name,
  809. }
  810. this.pageIndex=1
  811. this.pageSize=100
  812. this.totalPage=0
  813. this.refreshPartList();
  814. this.partModelFlag=true
  815. },
  816. refreshPartList(){
  817. this.partSearch.limit = this.pageSize
  818. this.partSearch.page = this.pageIndex
  819. getFinalPartData(this.partSearch).then(({data}) => {
  820. this.partList=data.page.list
  821. this.pageIndex = data.page.currPage
  822. this.pageSize = data.page.pageSize
  823. this.totalPage = data.page.totalCount
  824. })
  825. },
  826. refreshProofingList(){
  827. getProofingDataByUserRole(this.proofingSearch).then(({data}) => {
  828. this.proofingList=data.rows
  829. })
  830. },
  831. changeProofingNoChange(){
  832. let inData={
  833. site:this.dataForm.site,
  834. username:this.$store.state.user.name,
  835. proofingNo:this.dataForm.proofingNo,
  836. }
  837. getProofingDataByUserRole(inData).then(({data}) => {
  838. let row={
  839. projectId:'',
  840. testPartNo:'',
  841. partDesc:'',
  842. }
  843. if(data.rows.length>0){
  844. row=data.rows[0]
  845. }
  846. this.changeProofingNo(row)
  847. })
  848. },
  849. choosePartNo(row){
  850. this.dataForm.projectId=row.projectId
  851. this.dataForm.testPartNo=row.testPartNo
  852. this.dataForm.partDesc=row.partDesc
  853. this.dataForm.finalPartNo=row.finalPartNo
  854. this.dataForm.buNo=row.buNo
  855. this.partModelFlag=false
  856. },
  857. chooseProofingNo(row){
  858. this.dataForm.proofingNo=row.proofingNo
  859. this.dataForm.projectId=row.projectId
  860. this.dataForm.testPartNo=row.testPartNo
  861. this.dataForm.partDesc=row.partDesc
  862. this.dataForm.buNo=row.buNo
  863. let inData={
  864. site:this.$store.state.user.site,
  865. testPartNo: row.testPartNo
  866. }
  867. getTestPartChangeData(inData).then(({data}) => {
  868. if (data && data.code === 0) {
  869. if(data.row!=null){
  870. this.dataForm.partDesc=data.row.partDesc
  871. this.dataForm.finalPartNo=data.row.finalPartNo
  872. }else {
  873. this.dataForm.partDesc=''
  874. }
  875. }
  876. })
  877. this.proofingModelFlag=false
  878. },
  879. changeProofingNo(row){
  880. this.dataForm.projectId=row.projectId
  881. this.dataForm.testPartNo=row.testPartNo
  882. this.dataForm.partDesc=row.partDesc
  883. this.proofingModelFlag=false
  884. },
  885. quotationOfficerChooseModal(){
  886. let inData={
  887. site:this.dataForm.site,
  888. }
  889. searchOperatorWithSite(inData).then(({data}) => {
  890. this.operatorList=data.rows
  891. })
  892. this.quotationOfficerList = JSON.parse(JSON.stringify(this.dataForm.quotationOfficerList));
  893. this.quotationOfficerFlag=true
  894. },
  895. saveQuotationOfficerList(){
  896. let quotationOfficerName='';
  897. for (let i = 0; i < this.quotationOfficerList.length; i++) {
  898. let select= this.operatorList.filter(item => item.operatorId === this.quotationOfficerList[i])
  899. if(select.length>0){
  900. quotationOfficerName+=select[0].operatorName+';'
  901. }
  902. }
  903. this.dataForm.quotationOfficer=quotationOfficerName
  904. this.dataForm.quotationOfficerList=JSON.parse(JSON.stringify(this.quotationOfficerList));
  905. this.quotationOfficerFlag=false
  906. },
  907. engineerChooseModal(){
  908. let inData={
  909. site:this.dataForm.site,
  910. }
  911. searchOperatorWithSite(inData).then(({data}) => {
  912. this.operatorList=data.rows
  913. })
  914. this.engineerList = JSON.parse(JSON.stringify(this.dataForm.engineerList));
  915. this.engineerFlag=true
  916. },
  917. saveEngineerList(){
  918. let engineerName='';
  919. for (let i = 0; i < this.engineerList.length; i++) {
  920. let select= this.operatorList.filter(item => item.operatorId === this.engineerList[i])
  921. if(select.length>0){
  922. engineerName+=select[0].operatorName+';'
  923. }
  924. }
  925. this.dataForm.engineer=engineerName
  926. this.dataForm.engineerList=JSON.parse(JSON.stringify(this.engineerList));
  927. this.engineerFlag=false
  928. },
  929. technicianModal(){
  930. let inData={
  931. site:this.dataForm.site,
  932. }
  933. searchOperatorWithSite(inData).then(({data}) => {
  934. this.operatorList=data.rows
  935. })
  936. this.technicianList = JSON.parse(JSON.stringify(this.dataForm.technicianList));
  937. this.ownerFlag=true
  938. },
  939. savetechnicianList(){
  940. let technicianName='';
  941. for (let i = 0; i < this.technicianList.length; i++) {
  942. let select= this.operatorList.filter(item => item.operatorId === this.technicianList[i])
  943. if(select.length>0){
  944. technicianName+=select[0].operatorName+';'
  945. }
  946. }
  947. this.dataForm.technician=technicianName
  948. this.dataForm.technicianList=JSON.parse(JSON.stringify(this.technicianList));
  949. this.ownerFlag=false
  950. },
  951. savetDccList(){
  952. let dccName='';
  953. for (let i = 0; i < this.dccList.length; i++) {
  954. let select= this.operatorList.filter(item => item.operatorId === this.dccList[i])
  955. if(select.length>0){
  956. dccName+=select[0].operatorName+';'
  957. }
  958. }
  959. this.dataForm.dcc=dccName
  960. this.dataForm.dccList=JSON.parse(JSON.stringify(this.dccList));
  961. this.dccFlag=false
  962. },
  963. // 表单提交
  964. dataFormSubmit () {
  965. if(this.dataForm.testPartNo===''){
  966. this.$message.error('请输入测试料号!')
  967. return false
  968. }
  969. if(this.dataForm.revNo===''){
  970. this.$message.error('请输入版本号!')
  971. return false
  972. }
  973. this.dataForm.engineerList = [];
  974. this.dataForm.engineerList.push(this.dataForm.engineerNo);
  975. this.dataForm.technicianList = [];
  976. this.dataForm.technicianList.push(this.dataForm.technicianNo);
  977. saveTechnicalSpecificationSheet(this.dataForm).then(({data}) => {
  978. if (data && data.code === 0) {
  979. this.$message.success( '操作成功')
  980. this.visible = false
  981. this.$emit('refreshDataList')
  982. if(this.jumpFlag){
  983. this.$nextTick(function () {
  984. setTimeout(() => {
  985. let inData = {
  986. site: this.$store.state.user.site,
  987. codeNo: data.row.codeNo,
  988. buNo: data.row.buNo,
  989. username: this.$store.state.user.name
  990. };
  991. localStorage.setItem('tsfData', JSON.stringify(inData))
  992. window.open('#/BMPage');
  993. },500)
  994. })
  995. }
  996. } else {
  997. this.$message.error(data.msg)
  998. }
  999. })
  1000. },
  1001. changeTestDesc(){
  1002. this.dataForm.proofingNo="";
  1003. let inData={
  1004. site:this.$store.state.user.site,
  1005. testPartNo: this.dataForm.testPartNo
  1006. }
  1007. getTestPartChangeData(inData).then(({data}) => {
  1008. if (data && data.code === 0) {
  1009. if(data.row!=null){
  1010. this.dataForm.projectId=data.row.projectId
  1011. this.dataForm.partDesc=data.row.partDesc
  1012. this.dataForm.finalPartNo=data.row.finalPartNo
  1013. }else {
  1014. this.dataForm.projectId=''
  1015. this.dataForm.partDesc=''
  1016. }
  1017. }
  1018. })
  1019. },
  1020. // 每页数
  1021. sizeChangeHandle (val) {
  1022. this.pageSize = val
  1023. this.pageIndex = 1
  1024. this.refreshPartList()
  1025. },
  1026. // 当前页
  1027. currentChangeHandle (val) {
  1028. this.pageIndex = val
  1029. this.refreshPartList()
  1030. },
  1031. dccChooseModal(){
  1032. let inData={
  1033. site:this.dataForm.site,
  1034. buNo:this.dataForm.buNo,
  1035. }
  1036. searchBMUser(inData).then(({data}) => {
  1037. this.operatorList=data.rows
  1038. })
  1039. this.dccList = JSON.parse(JSON.stringify(this.dataForm.dccList));
  1040. this.dccFlag=true
  1041. },
  1042. },
  1043. }
  1044. </script>
  1045. <style >
  1046. .el-transfer-panel {
  1047. border: 2px solid #17b3a3;
  1048. border-radius: 4px;
  1049. overflow: hidden;
  1050. background: #fff;
  1051. display: inline-block;
  1052. vertical-align: middle;
  1053. width: 200px;
  1054. max-height: 100%;
  1055. -webkit-box-sizing: border-box;
  1056. box-sizing: border-box;
  1057. position: relative;
  1058. }
  1059. .el-transfer-panel .el-transfer-panel__header {
  1060. height: 40px;
  1061. line-height: 40px;
  1062. background: #17b3a3;
  1063. margin: 0;
  1064. padding-left: 15px;
  1065. border-bottom: 1px solid #17b3a3;
  1066. -webkit-box-sizing: border-box;
  1067. box-sizing: border-box;
  1068. color: #000;
  1069. }
  1070. .el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label {
  1071. font-size: 14px;
  1072. color: #303133;
  1073. font-weight: 400;
  1074. }
  1075. </style>