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.

3321 lines
121 KiB

2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
  1. <template>
  2. <div class="mod-config">
  3. <!-- 查询条件 -->
  4. <el-form :inline="true" label-position="top" :model="searchData" @keyup.enter.native="getDataList()">
  5. <el-form-item :label="'客户编码'">
  6. <el-input v-model="searchData.customerNo" clearable style="width: 120px"></el-input>
  7. </el-form-item>
  8. <el-form-item :label="'客户名称'">
  9. <el-input v-model="searchData.customerDesc" clearable style="width: 120px"></el-input>
  10. </el-form-item>
  11. <el-form-item :label="'Artwork'">
  12. <el-input v-model="searchData.trackerName" clearable style="width: 120px"></el-input>
  13. </el-form-item>
  14. <el-form-item :label="'项目料号'">
  15. <el-input v-model="searchData.testPartNo" clearable style="width: 120px"></el-input>
  16. </el-form-item>
  17. <el-form-item :label="'产品名称'">
  18. <el-input v-model="searchData.partName" clearable style="width: 120px"></el-input>
  19. </el-form-item>
  20. <el-form-item :label="'要求交付日期'">
  21. <el-date-picker
  22. style="width: 120px"
  23. v-model="searchData.startDate"
  24. type="date"
  25. value-format="yyyy-MM-dd"
  26. placeholder="选择日期">
  27. </el-date-picker>
  28. </el-form-item>
  29. <el-form-item style="margin-top: 23px;">
  30. <laber style="margin-left: 0px;font-size: 19px">&#10142</laber>
  31. </el-form-item>
  32. <el-form-item :label="' '">
  33. <el-date-picker
  34. style="width: 120px"
  35. v-model="searchData.endDate"
  36. type="date"
  37. value-format="yyyy-MM-dd"
  38. placeholder="选择日期">
  39. </el-date-picker>
  40. </el-form-item>
  41. </el-form>
  42. <el-form :inline="true" label-position="top" :model="searchData" @keyup.enter.native="getDataList()">
  43. <el-form-item :label="'项目编码'">
  44. <el-input v-model="searchData.projectId" clearable style="width: 120px"></el-input>
  45. </el-form-item>
  46. <el-form-item :label="'项目名称'">
  47. <el-input v-model="searchData.projectName" clearable style="width: 120px"></el-input>
  48. </el-form-item>
  49. <el-form-item :label="'TP工程师'">
  50. <el-input v-model="searchData.engineerName" clearable style="width: 120px"></el-input>
  51. </el-form-item>
  52. <el-form-item :label="'优先等级'">
  53. <dict-data-select v-model="searchData.priorityLevel" clearable style="width: 120px" :use-default-value="false" dict-type="priority_Level"/>
  54. </el-form-item>
  55. <el-form-item :label="'状态'" v-if="false">
  56. <el-select v-model="searchData.testResultStatus" style="width: 120px">
  57. <el-option label="全部" value=""></el-option>
  58. <el-option label="草稿" value="B"></el-option>
  59. <el-option label="已下达" value="C"></el-option>
  60. <el-option label="已完成测试" value="E"></el-option>
  61. <el-option label="已提交测试" value="S"></el-option>
  62. <el-option label="客户已反馈" value="R"></el-option>
  63. </el-select>
  64. </el-form-item>
  65. <el-form-item :label="'状态'">
  66. <el-select v-model="searchData.testStatus" style="width: 120px">
  67. <el-option label="全部" value=""></el-option>
  68. <el-option label="草稿" value="草稿"></el-option>
  69. <el-option label="下达" value="下达"></el-option>
  70. </el-select>
  71. </el-form-item>
  72. <el-form-item :label="' '">
  73. <el-button @click="getDataList()">查询</el-button>
  74. <el-button type="primary" @click="addModal()">新增</el-button>
  75. <el-button type="primary" @click="delModal()">删除</el-button>
  76. <download-excel
  77. :fields="fields()"
  78. :data="exportData"
  79. type="xls"
  80. :name="exportName"
  81. :header="exportHeader"
  82. :footer="exportFooter"
  83. :fetch="createExportData"
  84. :before-generate="startDownload"
  85. :before-finish="finishDownload"
  86. worksheet="导出信息"
  87. class="el-button el-button--primary el-button--medium">
  88. {{ "导出" }}
  89. </download-excel>
  90. </el-form-item>
  91. </el-form>
  92. <!-- 测试列表 -->
  93. <el-table
  94. :height="height"
  95. :data="dataList"
  96. border
  97. :row-style="rowStyle"
  98. ref="testTable"
  99. @row-click="testClickRow"
  100. @selection-change="selectionTest"
  101. @current-change="changeCurrentRow"
  102. v-loading="dataListLoading"
  103. style="width: 100%;">
  104. <el-table-column
  105. type="selection"
  106. header-align="center"
  107. align="center"
  108. :selectable="selectFlag"
  109. width="50">
  110. </el-table-column>
  111. <el-table-column
  112. v-for="(item,index) in columnList" :key="index"
  113. :sortable="item.columnSortable"
  114. :prop="item.columnProp"
  115. :header-align="item.headerAlign"
  116. :show-overflow-tooltip="item.showOverflowTooltip"
  117. :align="item.align"
  118. :fixed="item.fixed === ''?false:item.fixed"
  119. :min-width="item.columnWidth"
  120. :label="item.columnLabel">
  121. <template slot-scope="scope">
  122. <div v-if="item.columnProp === 'testResultStatus'">
  123. <span v-if="!item.columnHidden">
  124. <span v-show="scope.row.testResultStatus === 'B'">草稿</span>
  125. <span v-show="scope.row.testResultStatus === 'C'">已下达</span>
  126. <span v-show="scope.row.testResultStatus === 'E'">已完成测试</span>
  127. <span v-show="scope.row.testResultStatus === 'S'">已提交测试</span>
  128. <span v-show="scope.row.testResultStatus === 'R'">客户已反馈</span>
  129. </span>
  130. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
  131. </div>
  132. <div v-else>
  133. <span v-if="!item.columnHidden">{{ scope.row[item.columnProp] }}</span>
  134. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
  135. </div>
  136. </template>
  137. </el-table-column>
  138. <el-table-column
  139. fixed="right"
  140. header-align="center"
  141. align="center"
  142. width="100"
  143. label="操作">
  144. <template slot-scope="scope">
  145. <a type="text" size="small" style="cursor:pointer;" @click="updateModal(scope.row)">编辑</a>
  146. <a type="text" size="small" style="cursor:pointer;" v-if="scope.row.testResultStatus === 'B'" @click="updateModalStatus(scope.row,'C')">下达</a>
  147. </template>
  148. </el-table-column>
  149. </el-table>
  150. <selectDiv ref="selectDiv"></selectDiv>
  151. <!-- 分页插件 -->
  152. <el-pagination style="margin-top: 0px"
  153. @size-change="sizeChangeHandle"
  154. @current-change="currentChangeHandle"
  155. :current-page="pageIndex"
  156. :page-sizes="[20, 50, 100, 200, 500]"
  157. :page-size="pageSize"
  158. :total="totalPage"
  159. layout="total, sizes, prev, pager, next, jumper">
  160. </el-pagination>
  161. <!-- 测试模态框 -->
  162. <el-dialog :title="modalData.title" @close="closeModalDiaLog" :close-on-click-modal="false" v-drag :visible.sync="modalFlag" top="10vh" width="60%">
  163. <el-form label-position="top" ref="modalForm" :model="modalData" :rules="rules">
  164. <el-row :gutter="15">
  165. <el-col :span="8">
  166. <el-row :gutter="10">
  167. <el-col :span="10">
  168. <el-form-item prop="customerNo" label="客户编码">
  169. <span slot="label" v-if="modalData.flag === '1'" @click="getBaseList(102,1)"><a herf="#">客户编码</a></span>
  170. <el-input :disabled="modalData.flag !== '1'" v-model="modalData.customerNo"></el-input>
  171. </el-form-item>
  172. </el-col>
  173. <el-col :span="14">
  174. <el-form-item label=" ">
  175. <el-input disabled v-model="modalData.customerDesc"></el-input>
  176. </el-form-item>
  177. </el-col>
  178. </el-row>
  179. </el-col>
  180. <el-col :span="4">
  181. <el-form-item label="测试数量" prop="testNumber">
  182. <div class="right">
  183. <el-input type="number" class="inlineNumber" v-model="modalData.testNumber" @input="modalData.testNumber = modalData.testNumber.replace(/^(0+)|[^\d]+/g, '')"></el-input>
  184. </div>
  185. </el-form-item>
  186. </el-col>
  187. <el-col :span="4">
  188. <el-form-item label="优先等级" >
  189. <dict-data-select v-if="modalFlag" v-model="modalData.priorityLevel" dict-type="priority_Level"></dict-data-select>
  190. </el-form-item>
  191. </el-col>
  192. <el-col :span="4">
  193. <el-form-item label="要求交付日期" prop="requiredDeliveryDate">
  194. <el-date-picker v-model="modalData.requiredDeliveryDate" style="width: 100%" type="date" value-format="yyyy-MM-dd" placeholder="选择日期"></el-date-picker>
  195. </el-form-item>
  196. </el-col>
  197. <el-col :span="4">
  198. <el-form-item label="印刷方式" prop="printType">
  199. <dict-data-select v-if="modalFlag" clearable v-model="modalData.printType" dict-type="print_type"></dict-data-select>
  200. </el-form-item>
  201. </el-col>
  202. </el-row>
  203. <el-row :gutter="15">
  204. <el-col :span="8">
  205. <el-row :gutter="10">
  206. <el-col :span="10">
  207. <el-form-item prop="projectId" label="项目编码">
  208. <span slot="label" v-if="modalData.customerNo && modalData.flag === '1'" @click="chooseProjectListFlag = true"><a herf="#">项目编码</a></span>
  209. <el-input :disabled="!modalData.customerNo || modalData.flag !== '1'" v-model="modalData.projectId"></el-input>
  210. </el-form-item>
  211. </el-col>
  212. <el-col :span="14">
  213. <el-form-item label=" ">
  214. <el-input disabled v-model="modalData.projectName"></el-input>
  215. </el-form-item>
  216. </el-col>
  217. </el-row>
  218. </el-col>
  219. <el-col :span="4" v-if="false">
  220. <el-form-item>
  221. <span slot="label" @click="getCustomerContactList"><a>收货人</a></span>
  222. <el-input v-model="modalData.consignee"></el-input>
  223. </el-form-item>
  224. </el-col>
  225. <el-col :span="4" v-if="false">
  226. <el-form-item label="收货人联系方式">
  227. <el-input v-model="modalData.consigneeContact"></el-input>
  228. </el-form-item>
  229. </el-col>
  230. <el-col :span="4" v-if="false">
  231. <el-form-item label=" ">
  232. <el-checkbox v-model="modalData.isNeedToSendSamples" true-label="Y">是否需要送样</el-checkbox>
  233. </el-form-item>
  234. </el-col>
  235. <el-col :span="8">
  236. <el-form-item label="标签名称" prop="productName">
  237. <el-input v-model="modalData.productName"></el-input>
  238. </el-form-item>
  239. </el-col>
  240. </el-row>
  241. <el-row :gutter="15">
  242. <el-col :span="8">
  243. <el-row :gutter="10">
  244. <el-col :span="10">
  245. <el-form-item prop="testPartNo" label="物料编码">
  246. <span slot="label" v-if="modalData.projectId && modalData.flag === '1'" @click="projectPartModelFlag = true"><a herf="#">项目编码</a></span>
  247. <el-input :disabled="!modalData.projectId || modalData.flag !== '1'" v-model="modalData.testPartNo"></el-input>
  248. </el-form-item>
  249. </el-col>
  250. <el-col :span="14">
  251. <el-form-item label=" ">
  252. <el-input disabled v-model="modalData.partName"></el-input>
  253. </el-form-item>
  254. </el-col>
  255. </el-row>
  256. </el-col>
  257. <el-col :span="4">
  258. <el-form-item prop="trackerName">
  259. <!-- <span slot="label" @click="getBaseList(103,1)"><a herf="#">Artwork</a></span>-->
  260. <span style="cursor: pointer" slot="label" @click="getBaseList(2041)"><a herf="#">Artwork</a></span>
  261. <el-input v-model="modalData.trackerName" readonly></el-input>
  262. </el-form-item>
  263. </el-col>
  264. <el-col :span="4">
  265. <el-form-item prop="engineerName">
  266. <!-- <span slot="label" @click="getBaseList(103,2)"><a herf="#">TP工程师</a></span>-->
  267. <span slot="label" @click="getBaseList(2042)"><a herf="#">TP工程师</a></span>
  268. <el-input v-model="modalData.engineerName" readonly></el-input>
  269. </el-form-item>
  270. </el-col>
  271. <el-col :span="4">
  272. <el-form-item label="CQC">
  273. <span slot="label"><a herf="#" @click="getBaseList(2007)">CQC</a></span>
  274. <el-input v-model="modalData.artworkName"></el-input>
  275. </el-form-item>
  276. </el-col>
  277. <el-col :span="4">
  278. <el-form-item label="FAI">
  279. <span slot="label"><a herf="#" @click="getBaseList(2008)">FAI</a></span>
  280. <el-input v-model="modalData.plannerName"></el-input>
  281. </el-form-item>
  282. </el-col>
  283. </el-row>
  284. <el-row :gutter="15">
  285. <el-col :span="12" v-if="false">
  286. <el-form-item style="height: 90px">
  287. <span slot="label" @click="getCustomerAddressList"><a>送样地址</a></span>
  288. <el-input type="textarea" v-model="modalData.sendSamplesAddress" :rows="3" resize='none'></el-input>
  289. </el-form-item>
  290. </el-col>
  291. <el-col :span="12" v-if="false">
  292. <el-form-item label="备注" style="height: 90px">
  293. <el-input type="textarea" v-model="modalData.remark" :rows="3" resize='none'></el-input>
  294. </el-form-item>
  295. </el-col>
  296. <el-col :span="24">
  297. <el-form-item label="技术注意事项" style="height: 90px">
  298. <el-input type="textarea" v-model="modalData.technicalConsiderations" :rows="3" resize='none' show-word-limit></el-input>
  299. </el-form-item>
  300. </el-col>
  301. </el-row>
  302. </el-form>
  303. <div class="rq">
  304. <el-button v-if="!modalData.testNo" @click="saveData" plain type="primary" style="position:absolute;margin-top: 10px;margin-right: 10px;right: 0;z-index: 1">下一步</el-button>
  305. <el-tabs v-model="activeTab" @tab-click="dialogTabClick">
  306. <el-tab-pane label="基本信息" :disabled="!activeTabList.includes('attribute')" name="attribute" v-if="modalData.testNo">
  307. <test-properties v-if="modalFlag" v-model:data-list="testPropertiesList" ref="dialogTestAttribute" :test-no="modalData.testNo"></test-properties>
  308. </el-tab-pane>
  309. <el-tab-pane label="基本信息" :disabled="!activeTabList.includes('attribute')" name="attribute" v-else>
  310. <test-properties v-if="modalFlag" v-model:data-list="copyTestPropertiesList" ref="dialogTestAttribute" :test-no="modalData.testNo"></test-properties>
  311. </el-tab-pane>
  312. <el-tab-pane label="物料属性" :disabled="!activeTabList.includes('partAttribute')" name="partAttribute">
  313. <test-attribute v-if="modalFlag" :attribute-list="dialogProperties" ref="dialogAttribute" :test-no="modalData.testNo"></test-attribute>
  314. </el-tab-pane>
  315. <el-tab-pane label="物料信息" name="part" v-if="false">
  316. <el-form label-position="top" :model="projectPartData">
  317. <el-row :gutter="20">
  318. <el-col :span="4">
  319. <el-form-item label="产品编码">
  320. <el-input v-model="projectPartData.testPartNo" clearable></el-input>
  321. </el-form-item>
  322. </el-col>
  323. <el-col :span="4">
  324. <el-form-item label="产品名称">
  325. <el-input v-model="projectPartData.partName" clearable></el-input>
  326. </el-form-item>
  327. </el-col>
  328. <el-col :span="4">
  329. <el-form-item label=" ">
  330. <el-button type="primary" @click="getProjectPartList()">查询</el-button>
  331. </el-form-item>
  332. </el-col>
  333. <el-col :span="4" :offset="8">
  334. <el-form-item label=" ">
  335. <el-button v-if="this.modalData.flag === '1' && this.activeTabList.length === 1" type="primary" style="float: right;margin-right: 8px" @click="saveData">下一步</el-button>
  336. </el-form-item>
  337. </el-col>
  338. </el-row>
  339. </el-form>
  340. <el-table
  341. :height="300"
  342. :data="projectPartList"
  343. ref="projectPartTable"
  344. @row-click="projectPartClickRow"
  345. @selection-change="selectionProjectPart"
  346. :row-key="getRowKeys"
  347. @select="selectTestPart"
  348. @select-all="selectAllTestPart"
  349. header-cell-class-name="cellClass"
  350. border
  351. v-loading="dataListLoading"
  352. style="width: 100%;">
  353. <el-table-column
  354. type="selection"
  355. header-align="center"
  356. align="center"
  357. :selectable="checkSelectable"
  358. :reserve-selection="true"
  359. width="50">
  360. </el-table-column>
  361. <el-table-column
  362. v-for="(item,index) in projectPartDetailList" :key="index"
  363. :sortable="item.columnSortable"
  364. :prop="item.columnProp"
  365. :header-align="item.headerAlign"
  366. :show-overflow-tooltip="item.showOverflowTooltip"
  367. :align="item.align"
  368. :fixed="item.fixed===''?false:item.fixed"
  369. :min-width="item.columnWidth"
  370. :label="item.columnLabel">
  371. <template slot-scope="scope">
  372. <span v-if="!item.columnHidden">{{scope.row[item.columnProp]}}</span>
  373. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
  374. </template>
  375. </el-table-column>
  376. </el-table>
  377. </el-tab-pane>
  378. <el-tab-pane label="材料信息" :disabled="!activeTabList.includes('product')" name="product">
  379. <test-table v-if="clickTestRow" :test-number="modalData.testNumber" ref="dialogSoBom" v-model:data-list="testSoBomList" :test-no="modalData.testNo"></test-table>
  380. </el-tab-pane>
  381. <el-tab-pane label="制程信息" :disabled="!activeTabList.includes('process')" name="process">
  382. <test-routing-table v-if="clickTestRow" ref="dialogSoRouting" v-model:data-list="testSoRoutingList" :test-no="modalData.testNo"></test-routing-table>
  383. </el-tab-pane>
  384. <el-tab-pane label="附件信息" :disabled="!activeTabList.includes('file')" name="file">
  385. <test-file v-if="modalFlag" :column-list="fileColumnList" v-model:data-list="testFileList" ref="dialogTestFile" :test-no="modalData.testNo"></test-file>
  386. </el-tab-pane>
  387. </el-tabs>
  388. </div>
  389. <el-footer style="height:30px;text-align:center;margin-top: 8px">
  390. <el-button type="primary" @click="saveData()" v-if="modalData.flag !== '1'">保存</el-button>
  391. <el-button type="primary" @click="modalFlag = false">关闭</el-button>
  392. </el-footer>
  393. </el-dialog>
  394. <el-dialog title="物料信息" :visible.sync="projectPartModelFlag">
  395. <el-form label-position="top" :model="projectPartData">
  396. <el-row :gutter="20">
  397. <el-col :span="4">
  398. <el-form-item label="产品编码">
  399. <el-input v-model="projectPartData.testPartNo" clearable></el-input>
  400. </el-form-item>
  401. </el-col>
  402. <el-col :span="4">
  403. <el-form-item label="产品名称">
  404. <el-input v-model="projectPartData.partName" clearable></el-input>
  405. </el-form-item>
  406. </el-col>
  407. <el-col :span="4">
  408. <el-form-item label=" ">
  409. <el-button type="primary" @click="getProjectPartList()">查询</el-button>
  410. </el-form-item>
  411. </el-col>
  412. </el-row>
  413. </el-form>
  414. <el-table
  415. :height="300"
  416. :data="projectPartList"
  417. ref="projectPartTable"
  418. @row-dblclick="partClickRow"
  419. header-cell-class-name="cellClass"
  420. border
  421. v-loading="dataListLoading"
  422. style="width: 100%;">
  423. <el-table-column
  424. v-for="(item,index) in projectPartDetailList" :key="index"
  425. :sortable="item.columnSortable"
  426. :prop="item.columnProp"
  427. :header-align="item.headerAlign"
  428. :show-overflow-tooltip="item.showOverflowTooltip"
  429. :align="item.align"
  430. :fixed="item.fixed===''?false:item.fixed"
  431. :min-width="item.columnWidth"
  432. :label="item.columnLabel">
  433. <template slot-scope="scope">
  434. <span v-if="!item.columnHidden">{{scope.row[item.columnProp]}}</span>
  435. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
  436. </template>
  437. </el-table-column>
  438. </el-table>
  439. </el-dialog>
  440. <!-- 录入测试结果模态框 -->
  441. <el-dialog title="录入测试结果" :close-on-click-modal="false" v-drag :visible.sync="enterResultModalFlag" width="785px">
  442. <el-form :inline="true" label-position="top" :model="enterResultData" :rules="enterResultRules" style="margin-left: 0px;margin-top: 10px;">
  443. <el-form-item label="实际交付日期" prop="actualityDeliveryDate" :rules="enterResultRules.actualityDeliveryDate">
  444. <el-date-picker v-model="enterResultData.actualityDeliveryDate" type="date" value-format="yyyy-MM-dd" placeholder="请选择日期" style="width: 200px"></el-date-picker>
  445. </el-form-item>
  446. </el-form>
  447. <el-form :inline="true" label-position="top" :model="enterResultData" :rules="enterResultRules" style="margin-left:0px;margin-top: 5px;">
  448. <el-form-item label="测试结果信息" prop="testResultInformation" :rules="enterResultRules.testResultInformation">
  449. <el-input type="textarea" v-model="enterResultData.testResultInformation" :rows="3" resize='none' show-word-limit style="width: 500px;height: 30px"></el-input>
  450. </el-form-item>
  451. </el-form>
  452. <el-form :inline="true" label-position="top" :model="enterResultData" style="margin-left: 0px;margin-top: 50px;">
  453. <el-form :inline="true" label-position="top" style="margin-top: 5px">
  454. <el-button type="primary" @click="uploadFile()">上传文件</el-button>
  455. </el-form>
  456. <el-table
  457. :height="200"
  458. :data="fileContentList"
  459. border
  460. v-loading="dataListLoading"
  461. style="width: 100%">
  462. <el-table-column
  463. v-for="(item,index) in fileColumnList" :key="index"
  464. :sortable="item.columnSortable"
  465. :prop="item.columnProp"
  466. :header-align="item.headerAlign"
  467. :show-overflow-tooltip="item.showOverflowTooltip"
  468. :align="item.align"
  469. :fixed="item.fixed===''?false:item.fixed"
  470. :min-width="item.columnWidth"
  471. :label="item.columnLabel">
  472. <template slot-scope="scope">
  473. <span v-if="!item.columnHidden">{{scope.row[item.columnProp]}}</span>
  474. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
  475. </template>
  476. </el-table-column>
  477. <el-table-column
  478. fixed="right"
  479. header-align="center"
  480. align="center"
  481. width="100"
  482. label="操作">
  483. <template slot-scope="scope">
  484. <a @click="deleteFile(scope.row)">删除</a>
  485. </template>
  486. </el-table-column>
  487. </el-table>
  488. </el-form>
  489. <el-footer style="height:35px;margin-top: 10px;text-align:center">
  490. <el-button type="primary" @click="saveTestResult()">保存</el-button>
  491. <el-button type="primary" @click="enterResultModalFlag = false">关闭</el-button>
  492. </el-footer>
  493. </el-dialog>
  494. <!-- 录入送样信息模态框 -->
  495. <el-dialog title="录入送样信息" :close-on-click-modal="false" v-drag :visible.sync="submitResultModalFlag" width="620px">
  496. <el-form :inline="true" label-position="top" :model="submitResultData" :rules="submitResultRules" style="margin-left: 0px;margin-top: 10px;">
  497. <el-form-item label="实际送样日期" prop="actualitySendSamplesDate" :rules="submitResultRules.actualitySendSamplesDate">
  498. <el-date-picker v-model="submitResultData.actualitySendSamplesDate" type="date" value-format="yyyy-MM-dd" placeholder="请选择日期" style="width: 200px"></el-date-picker>
  499. </el-form-item>
  500. <el-form-item label="送样方式" prop="sendSamplesMethod" :rules="submitResultRules.sendSamplesMethod">
  501. <el-select v-model="submitResultData.sendSamplesMethod" style="width: 221px">
  502. <el-option label="客户自提" value="客户自提"></el-option>
  503. <el-option label="人员带货" value="人员带货"></el-option>
  504. <el-option label="其它" value="其它"></el-option>
  505. </el-select>
  506. </el-form-item>
  507. <el-form-item label="送货信息">
  508. <el-input v-model="submitResultData.deliverGoodsInformation" style="width: 221px"></el-input>
  509. </el-form-item>
  510. </el-form>
  511. <el-form :inline="true" label-position="top" :model="submitResultData" style="margin-left:0px;margin-top: 5px;">
  512. <el-form-item label="送货备注">
  513. <el-input type="textarea" v-model="submitResultData.deliverGoodsRemark" :rows="3" resize='none' show-word-limit style="width: 456px;height: 30px"></el-input>
  514. </el-form-item>
  515. </el-form>
  516. <el-footer style="height:35px;margin-top: 50px;text-align:center">
  517. <el-button type="primary" @click="saveSubmitResult()">保存</el-button>
  518. <el-button type="primary" @click="submitResultModalFlag = false">关闭</el-button>
  519. </el-footer>
  520. </el-dialog>
  521. <!-- 客户回复模态框 -->
  522. <el-dialog title="客户回复" :close-on-click-modal="false" v-drag :visible.sync="customerResponseModalFlag" width="620px">
  523. <el-form :inline="true" label-position="top" :model="customerResponseData" :rules="customerResponseRules" style="margin-left: 0px;margin-top: 10px;">
  524. <el-form-item label="实际回复日期" prop="actualityReplyDate" :rules="customerResponseRules.actualityReplyDate">
  525. <el-date-picker v-model="customerResponseData.actualityReplyDate" type="date" value-format="yyyy-MM-dd" placeholder="请选择日期" style="width: 185px"></el-date-picker>
  526. </el-form-item>
  527. <el-form-item label="客户确认结果" prop="confirmResults" :rules="customerResponseRules.confirmResults">
  528. <el-select v-model="customerResponseData.confirmResults" style="width: 185px">
  529. <el-option label="接受" value="接受"></el-option>
  530. <el-option label="不接受" value="不接受"></el-option>
  531. </el-select>
  532. </el-form-item>
  533. <el-form-item label="客户确认人" prop="confirmBy" :rules="customerResponseRules.confirmBy">
  534. <el-input v-model="customerResponseData.confirmBy" style="width: 185px"></el-input>
  535. </el-form-item>
  536. </el-form>
  537. <el-form :inline="true" label-position="top" :model="customerResponseData" style="margin-left:0px;margin-top: 5px;">
  538. <el-form-item label="客户回复信息">
  539. <el-input type="textarea" v-model="customerResponseData.confirmInformation" :rows="3" resize='none' show-word-limit style="width: 595px;height: 30px"></el-input>
  540. </el-form-item>
  541. </el-form>
  542. <el-footer style="height:35px;margin-top: 50px;text-align:center">
  543. <el-button type="primary" @click="saveCustomerResponse()">保存</el-button>
  544. <el-button type="primary" @click="customerResponseModalFlag = false">关闭</el-button>
  545. </el-footer>
  546. </el-dialog>
  547. <!--选择项目模态框-->
  548. <el-dialog title="选择-项目" @close="closeProjectInfoDialog" @open="searchProjectInfoList" :visible.sync="chooseProjectListFlag" width="35%">
  549. <el-form label-position="top" :model="searchProjectData" ref="closeProjectInfoForm">
  550. <el-row :gutter="10">
  551. <el-col :span="6">
  552. <el-form-item label="项目编码">
  553. <el-input v-model="searchProjectData.projectId"></el-input>
  554. </el-form-item>
  555. </el-col>
  556. <el-col :span="6">
  557. <el-form-item label="项目名称">
  558. <el-input v-model="searchProjectData.projectName"></el-input>
  559. </el-form-item>
  560. </el-col>
  561. <el-col :span="6">
  562. <el-form-item label=" ">
  563. <el-button type="primary" @click="searchProjectInfoList">查询</el-button>
  564. </el-form-item>
  565. </el-col>
  566. </el-row>
  567. <el-table :height="223"
  568. :data="projectList"
  569. border
  570. @row-click="projectClickRow">
  571. <el-table-column label="项目编码" prop="projectId"/>
  572. <el-table-column label="项目名称" prop="projectName"/>
  573. </el-table>
  574. </el-form>
  575. </el-dialog>
  576. <!-- 页签 -->
  577. <el-tabs v-model="activeTable" style="margin-top: 0px; width: 100%; min-height: 500px;" type="border-card" @tab-click="tabClick" class="customer-tab">
  578. <!-- 测试详细信息页签 -->
  579. <el-tab-pane label="测试详细信息" name="test_detail_information" v-if="false">
  580. <el-form :inline="true" label-position="top" :model="testDetailData" style="margin-left: 10px;margin-top: 10px;">
  581. <el-form-item label="技术注意事项">
  582. <el-input type="textarea" v-model="testDetailData.technicalConsiderations" readonly :rows="3" resize='none' show-word-limit style="width: 600px;height: 30px"></el-input>
  583. </el-form-item>
  584. </el-form>
  585. <el-form :inline="true" label-position="top" :model="testDetailData" style="margin-left: 10px;margin-top: 46px;">
  586. <el-form-item label="是否需要送样">
  587. <input type="checkbox" v-if="testDetailData.isNeedToSendSamples == 'Y'" checked onclick="return false"/>
  588. <input type="checkbox" v-if="testDetailData.isNeedToSendSamples != 'Y'" onclick="return false"/>
  589. </el-form-item>
  590. <el-form-item label="送样地址">
  591. <el-input v-model="testDetailData.sendSamplesAddress" readonly style="width: 295px"></el-input>
  592. </el-form-item>
  593. </el-form>
  594. <el-form :inline="true" label-position="top" :model="testDetailData" style="margin-left: 10px;margin-top: 46px;">
  595. <el-form-item label="收货人">
  596. <el-input v-model="testDetailData.consignee" readonly style="width: 295px"></el-input>
  597. </el-form-item>
  598. <el-form-item label="收货人联系方式">
  599. <el-input v-model="testDetailData.consigneeContact" readonly style="width: 295px"></el-input>
  600. </el-form-item>
  601. </el-form>
  602. </el-tab-pane>
  603. <!-- 测试结果页签 -->
  604. <el-tab-pane label="测试结果" name="test_result" v-if="false">
  605. <el-form :inline="true" label-position="top" :model="testResultData" style="margin-left: 10px;margin-top: 5px;">
  606. <el-button v-if="testResultData.testResultStatus === 'C'" type="primary" @click="testResultModal()">录入测试结果</el-button>
  607. <el-button v-if="testResultData.testResultStatus === 'E'" type="primary" @click="submitTestModal()">录入送样信息</el-button>
  608. <el-button v-if="testResultData.testResultStatus === 'S'" type="primary" @click="customerResponseModal()">客户回复</el-button>
  609. </el-form>
  610. <el-form :inline="true" label-position="top" :model="testResultData" style="margin-left: 10px;margin-top: 2px;">
  611. <el-form-item label="实际交付日期">
  612. <el-date-picker v-model="testResultData.actualityDeliveryDate" readonly type="date" value-format="yyyy-MM-dd" style="width: 240px"></el-date-picker>
  613. </el-form-item>
  614. <el-form-item label="是否需要送样">
  615. <input type="checkbox" v-if="testResultData.isNeedToSendSamples == 'Y'" checked onclick="return false"/>
  616. <input type="checkbox" v-if="testResultData.isNeedToSendSamples != 'Y'" onclick="return false"/>
  617. </el-form-item>
  618. <el-form-item label="是否送样">
  619. <input type="checkbox" v-if="testResultData.testResultStatus == 'S' || testResultData.testResultStatus == 'R'" checked onclick="return false"/>
  620. <input type="checkbox" v-if="testResultData.testResultStatus != 'S' && testResultData.testResultStatus != 'R'" onclick="return false"/>
  621. </el-form-item>
  622. </el-form>
  623. <el-form :inline="true" label-position="top" :model="testResultData" style="margin-left: 10px;margin-top: -1px;">
  624. <el-form-item label="测试结果信息">
  625. <el-input type="textarea" v-model="testResultData.testResultInformation" readonly :rows="2" resize='none' show-word-limit style="width: 760px;height: 20px"></el-input>
  626. </el-form-item>
  627. </el-form>
  628. <el-form :inline="true" label-position="top" :model="testResultData" style="margin-left: 10px;margin-top: 26px;">
  629. <el-form-item label="附件清单">
  630. <el-table
  631. :height="90"
  632. :data="fileContentList"
  633. border
  634. v-loading="dataListLoading"
  635. style="width: 100%">
  636. <el-table-column
  637. v-for="(item,index) in fileColumnList" :key="index"
  638. :sortable="item.columnSortable"
  639. :prop="item.columnProp"
  640. :header-align="item.headerAlign"
  641. :show-overflow-tooltip="item.showOverflowTooltip"
  642. :align="item.align"
  643. :fixed="item.fixed===''?false:item.fixed"
  644. :min-width="item.columnWidth"
  645. :label="item.columnLabel">
  646. <template slot-scope="scope">
  647. <span v-if="!item.columnHidden">{{scope.row[item.columnProp]}}</span>
  648. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
  649. </template>
  650. </el-table-column>
  651. <el-table-column
  652. fixed="right"
  653. header-align="center"
  654. align="center"
  655. width="100"
  656. label="操作">
  657. <template slot-scope="scope">
  658. <a @click="downloadFile(scope.row)">下载</a>
  659. </template>
  660. </el-table-column>
  661. </el-table>
  662. </el-form-item>
  663. </el-form>
  664. <el-form :inline="true" label-position="top" :model="testResultData" style="margin-left: 10px;margin-top: 69px;">
  665. <el-form-item label="实际送样日期">
  666. <el-date-picker v-model="testResultData.actualitySendSamplesDate" readonly type="date" value-format="yyyy-MM-dd" style="width: 240px"></el-date-picker>
  667. </el-form-item>
  668. <el-form-item label="送样方式">
  669. <el-input v-model="testResultData.sendSamplesMethod" readonly style="width: 240px"></el-input>
  670. </el-form-item>
  671. <el-form-item label="送货信息">
  672. <el-input v-model="testResultData.deliverGoodsInformation" readonly style="width: 240px"></el-input>
  673. </el-form-item>
  674. </el-form>
  675. <el-form :inline="true" label-position="top" :model="testResultData" style="margin-left: 10px;margin-top: -2px;">
  676. <el-form-item label="送货备注">
  677. <el-input type="textarea" v-model="testResultData.deliverGoodsRemark" readonly :rows="2" resize='none' show-word-limit style="width: 760px;height: 20px"></el-input>
  678. </el-form-item>
  679. </el-form>
  680. <el-form :inline="true" label-position="top" :model="testResultData" style="margin-left: 10px;margin-top: 26px;">
  681. <el-form-item label="客户是否回复">
  682. <input type="checkbox" v-if="testResultData.testResultStatus == 'R'" checked onclick="return false"/>
  683. <input type="checkbox" v-if="testResultData.testResultStatus != 'R'" onclick="return false"/>
  684. </el-form-item>
  685. <el-form-item label="客户确认结果">
  686. <el-input v-model="testResultData.confirmResults" readonly style="width: 205px"></el-input>
  687. </el-form-item>
  688. <el-form-item label="实际回复日期">
  689. <el-date-picker v-model="testResultData.actualityReplyDate" readonly type="date" value-format="yyyy-MM-dd" style="width: 240px"></el-date-picker>
  690. </el-form-item>
  691. <el-form-item label="客户确认人">
  692. <el-input v-model="testResultData.confirmBy" readonly style="width: 205px"></el-input>
  693. </el-form-item>
  694. </el-form>
  695. <el-form :inline="true" label-position="top" :model="testResultData" style="margin-left: 10px;margin-top: -2px;">
  696. <el-form-item label="客户回复信息">
  697. <el-input type="textarea" v-model="testResultData.confirmInformation" readonly :rows="2" resize='none' show-word-limit style="width: 760px;height: 20px"></el-input>
  698. </el-form-item>
  699. </el-form>
  700. </el-tab-pane>
  701. <el-tab-pane label="基本信息" name="attribute">
  702. <test-properties ref="tabProperties" v-model:data-list="testPropertiesList" :test-no="testCurrentRow.testNo" :height="500"></test-properties>
  703. </el-tab-pane>
  704. <el-tab-pane label="物料属性" name="test_attribute" style="padding: 5px">
  705. <test-attribute ref="tabAttribute" :attribute-list="attributeList" :test-no="testCurrentRow.testNo" :height="500"></test-attribute>
  706. </el-tab-pane>
  707. <el-tab-pane label="材料信息" name="test_so_bom" style="padding: 5px">
  708. <test-table ref="tabSoBom" :test-number="testCurrentRow.testNumber" :data-list="testSoBomList" :test-no="testCurrentRow.testNo" :height="500" v-model:data-list="testSoBomList"></test-table>
  709. </el-tab-pane>
  710. <el-tab-pane label="制程信息" name="test_so_routing" style="padding: 5px">
  711. <test-routing-table ref="tabSoBom" :test-no="testCurrentRow.testNo" v-model:data-list="testSoRoutingList" :height="500" ></test-routing-table>
  712. </el-tab-pane>
  713. <el-tab-pane label="附件信息" name="file">
  714. <test-file ref="tabFile" :column-list="fileColumnList" v-model:data-list="testFileList" :test-no="testCurrentRow.testNo" :height="500"></test-file>
  715. </el-tab-pane>
  716. <!-- 项目信息页签 -->
  717. <el-tab-pane label="项目信息" name="project_information">
  718. <el-form label-position="top" :model="projectInformationData" style="margin-left: 10px;margin-top: 5px;margin-right: 10px">
  719. <el-row :gutter="20">
  720. <el-col :span="8">
  721. <div class="grid-content bg-purple">
  722. <el-form-item label="项目号">
  723. <el-input v-model="projectInformationData.projectId" readonly></el-input>
  724. </el-form-item>
  725. </div>
  726. </el-col>
  727. <el-col :span="8">
  728. <div class="grid-content bg-purple">
  729. <el-form-item label="项目名称">
  730. <el-input v-model="projectInformationData.projectName" readonly></el-input>
  731. </el-form-item>
  732. </div>
  733. </el-col>
  734. <el-col :span="8">
  735. <div class="grid-content bg-purple">
  736. <el-form-item label="项目类型">
  737. <el-input v-model="projectInformationData.projectType" readonly></el-input>
  738. </el-form-item>
  739. </div>
  740. </el-col>
  741. </el-row>
  742. <el-row :gutter="20">
  743. <el-col :span="8">
  744. <div class="grid-content bg-purple">
  745. <el-form-item label="客户来源">
  746. <el-input v-model="projectInformationData.projectSourceDesc" readonly></el-input>
  747. </el-form-item>
  748. </div>
  749. </el-col>
  750. <el-col :span="8">
  751. <div class="grid-content bg-purple">
  752. <el-form-item label="优先级">
  753. <el-input v-model="projectInformationData.priorityDesc" readonly></el-input>
  754. </el-form-item>
  755. </div>
  756. </el-col>
  757. <el-col :span="8">
  758. <div class="grid-content bg-purple">
  759. <el-form-item label="项目状态">
  760. <el-input v-model="projectInformationData.status" readonly></el-input>
  761. </el-form-item>
  762. </div>
  763. </el-col>
  764. </el-row>
  765. <el-row :gutter="20">
  766. <el-col :span="8">
  767. <div class="grid-content bg-purple">
  768. <el-form-item label="项目经理">
  769. <el-input v-model="projectInformationData.projectManagerName" readonly></el-input>
  770. </el-form-item>
  771. </div>
  772. </el-col>
  773. <el-col :span="8">
  774. <div class="grid-content bg-purple">
  775. <el-form-item label="项目负责人">
  776. <el-input v-model="projectInformationData.projectOwnerName" readonly></el-input>
  777. </el-form-item>
  778. </div>
  779. </el-col>
  780. <el-col :span="8">
  781. <div class="grid-content bg-purple">
  782. <el-form-item label="项目权限">
  783. <el-input v-model="projectInformationData.userRoleName" readonly></el-input>
  784. </el-form-item>
  785. </div>
  786. </el-col>
  787. </el-row>
  788. <el-row :gutter="20">
  789. <el-col :span="6">
  790. <div class="grid-content bg-purple">
  791. <el-form-item label="创建时间">
  792. <el-input v-model="projectInformationData.createDate" readonly></el-input>
  793. </el-form-item>
  794. </div>
  795. </el-col>
  796. <el-col :span="6">
  797. <div class="grid-content bg-purple">
  798. <el-form-item label="创建人">
  799. <el-input v-model="projectInformationData.createBy" readonly></el-input>
  800. </el-form-item>
  801. </div>
  802. </el-col>
  803. <el-col :span="6">
  804. <div class="grid-content bg-purple">
  805. <el-form-item label="更新时间">
  806. <el-input v-model="projectInformationData.updateDate" readonly></el-input>
  807. </el-form-item>
  808. </div>
  809. </el-col>
  810. <el-col :span="6">
  811. <div class="grid-content bg-purple">
  812. <el-form-item label="更新人">
  813. <el-input v-model="projectInformationData.updateBy" readonly></el-input>
  814. </el-form-item>
  815. </div>
  816. </el-col>
  817. </el-row>
  818. <el-row :gutter="20">
  819. <el-col :span="24">
  820. <div class="grid-content bg-purple">
  821. <el-form-item label="项目描述">
  822. <el-input v-model="projectInformationData.projectDesc" readonly></el-input>
  823. </el-form-item>
  824. </div>
  825. </el-col>
  826. </el-row>
  827. <el-row :gutter="20">
  828. <el-col :span="24">
  829. <div class="grid-content bg-purple">
  830. <el-form-item label="其它特殊要求">
  831. <el-input v-model="projectInformationData.remark" readonly></el-input>
  832. </el-form-item>
  833. </div>
  834. </el-col>
  835. </el-row>
  836. </el-form>
  837. </el-tab-pane>
  838. <!-- 客户信息页签 -->
  839. <el-tab-pane label="客户信息" name="customer_information">
  840. <el-form label-position="top" :model="customerInformationData" style="margin-left: 10px;margin-top: 5px;margin-right: 10px">
  841. <el-row :gutter="20">
  842. <el-col :span="8">
  843. <div class="grid-content bg-purple">
  844. <el-form-item label="客户代码">
  845. <el-input v-model="customerInformationData.customerNo" readonly></el-input>
  846. </el-form-item>
  847. </div>
  848. </el-col>
  849. <el-col :span="8">
  850. <div class="grid-content bg-purple">
  851. <el-form-item label="客户名称">
  852. <el-input v-model="customerInformationData.customerDesc" readonly></el-input>
  853. </el-form-item>
  854. </div>
  855. </el-col>
  856. <el-col :span="8">
  857. <div class="grid-content bg-purple">
  858. <el-form-item label="重要程度">
  859. <el-input v-model="customerInformationData.importantCustomer" readonly></el-input>
  860. </el-form-item>
  861. </div>
  862. </el-col>
  863. </el-row>
  864. <el-row :gutter="20">
  865. <el-col :span="8">
  866. <div class="grid-content bg-purple">
  867. <el-form-item label="客户币种">
  868. <el-input v-model="customerInformationData.customerCurrency" readonly></el-input>
  869. </el-form-item>
  870. </div>
  871. </el-col>
  872. <el-col :span="8">
  873. <div class="grid-content bg-purple">
  874. <el-form-item label="年营业额">
  875. <el-input v-model="customerInformationData.turnoverOfYear" readonly></el-input>
  876. </el-form-item>
  877. </div>
  878. </el-col>
  879. <el-col :span="8">
  880. <div class="grid-content bg-purple">
  881. <el-form-item label="年潜在投入">
  882. <el-input v-model="customerInformationData.potentialRevenueOfYear" readonly></el-input>
  883. </el-form-item>
  884. </div>
  885. </el-col>
  886. </el-row>
  887. <el-row :gutter="20">
  888. <el-col :span="8">
  889. <div class="grid-content bg-purple">
  890. <el-form-item label="客户状态">
  891. <el-input v-model="customerInformationData.customerStatus" readonly></el-input>
  892. </el-form-item>
  893. </div>
  894. </el-col>
  895. <el-col :span="8">
  896. <div class="grid-content bg-purple">
  897. <el-form-item label="行业">
  898. <el-input v-model="customerInformationData.customerIndustry" readonly></el-input>
  899. </el-form-item>
  900. </div>
  901. </el-col>
  902. <el-col :span="8">
  903. <div class="grid-content bg-purple">
  904. <el-form-item label="公司名称">
  905. <el-input v-model="customerInformationData.companyName" readonly></el-input>
  906. </el-form-item>
  907. </div>
  908. </el-col>
  909. </el-row>
  910. <el-row :gutter="20">
  911. <el-col :span="8">
  912. <div class="grid-content bg-purple">
  913. <el-form-item label="客户联系人">
  914. <el-input v-model="customerInformationData.contactName" readonly></el-input>
  915. </el-form-item>
  916. </div>
  917. </el-col>
  918. <el-col :span="8">
  919. <div class="grid-content bg-purple">
  920. <el-form-item label="联系人电话">
  921. <el-input v-model="customerInformationData.contactPhoneNumber1" readonly></el-input>
  922. </el-form-item>
  923. </div>
  924. </el-col>
  925. <el-col :span="8">
  926. <div class="grid-content bg-purple">
  927. <el-form-item label="联系人职务">
  928. <el-input v-model="customerInformationData.position" readonly></el-input>
  929. </el-form-item>
  930. </div>
  931. </el-col>
  932. </el-row>
  933. <el-row :gutter="20">
  934. <el-col :span="12">
  935. <div class="grid-content bg-purple">
  936. <el-form-item label="客户描述">
  937. <el-input v-model="customerInformationData.customerDescription" readonly></el-input>
  938. </el-form-item>
  939. </div>
  940. </el-col>
  941. <el-col :span="12">
  942. <div class="grid-content bg-purple">
  943. <el-form-item label="客户联系地址">
  944. <el-input v-model="customerInformationData.addressName" readonly></el-input>
  945. </el-form-item>
  946. </div>
  947. </el-col>
  948. <el-col :span="12">
  949. <div class="grid-content bg-purple">
  950. <el-form-item label="地址类型">
  951. <el-input v-model="customerInformationData.addressType" readonly></el-input>
  952. </el-form-item>
  953. </div>
  954. </el-col>
  955. </el-row>
  956. <el-row :gutter="20">
  957. <el-col :span="6">
  958. <div class="grid-content bg-purple">
  959. <el-form-item label="创建时间">
  960. <el-input v-model="customerInformationData.createDate" readonly></el-input>
  961. </el-form-item>
  962. </div>
  963. </el-col>
  964. <el-col :span="6">
  965. <div class="grid-content bg-purple">
  966. <el-form-item label="创建人">
  967. <el-input v-model="customerInformationData.createBy" readonly></el-input>
  968. </el-form-item>
  969. </div>
  970. </el-col>
  971. <el-col :span="6">
  972. <div class="grid-content bg-purple">
  973. <el-form-item label="更新时间">
  974. <el-input v-model="customerInformationData.updateDate" readonly></el-input>
  975. </el-form-item>
  976. </div>
  977. </el-col>
  978. <el-col :span="6">
  979. <div class="grid-content bg-purple">
  980. <el-form-item label="更新人">
  981. <el-input v-model="customerInformationData.updateBy" readonly></el-input>
  982. </el-form-item>
  983. </div>
  984. </el-col>
  985. </el-row>
  986. </el-form>
  987. </el-tab-pane>
  988. </el-tabs>
  989. <!-- chooseList模态框 -->
  990. <choose-list ref="baseList" @getBaseData="getBaseData"></choose-list>
  991. <!-- 客户地址 -->
  992. <el-dialog title="联系地址清单" :close-on-click-modal="false" v-drag :visible.sync="addressModelFlag" width="520px">
  993. <el-table
  994. :height="300"
  995. :data="addressList"
  996. @row-dblclick="getAddressData"
  997. border
  998. style="width: 100%;">
  999. <el-table-column
  1000. v-for="(item,index) in columnAddressList" :key="index"
  1001. :sortable="item.columnSortable"
  1002. :prop="item.columnProp"
  1003. :header-align="item.headerAlign"
  1004. :show-overflow-tooltip="item.showOverflowTooltip"
  1005. :align="item.align"
  1006. :fixed="item.fixed==''?false:item.fixed"
  1007. :min-width="item.columnWidth"
  1008. :label="item.columnLabel">
  1009. <template slot-scope="scope">
  1010. <span v-if="!item.columnHidden">{{scope.row[item.columnProp]}}</span>
  1011. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
  1012. </template>
  1013. </el-table-column>
  1014. </el-table>
  1015. <el-footer style="height:40px;margin-top: 20px;text-align:center">
  1016. <el-button type="primary" @click="addressModelFlag=false">关闭</el-button>
  1017. </el-footer>
  1018. </el-dialog>
  1019. <!-- 联系人 -->
  1020. <el-dialog title="收货人清单" :close-on-click-modal="false" v-drag :visible.sync="contactModelFlag" width="520px">
  1021. <el-table
  1022. :height="300"
  1023. :data="contactList"
  1024. @row-dblclick="getContactData"
  1025. border
  1026. style="width: 100%;">
  1027. <el-table-column
  1028. v-for="(item,index) in columnContactList" :key="index"
  1029. :sortable="item.columnSortable"
  1030. :prop="item.columnProp"
  1031. :header-align="item.headerAlign"
  1032. :show-overflow-tooltip="item.showOverflowTooltip"
  1033. :align="item.align"
  1034. :fixed="item.fixed==''?false:item.fixed"
  1035. :min-width="item.columnWidth"
  1036. :label="item.columnLabel">
  1037. <template slot-scope="scope">
  1038. <span v-if="!item.columnHidden">{{scope.row[item.columnProp]}}</span>
  1039. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
  1040. </template>
  1041. </el-table-column>
  1042. </el-table>
  1043. <el-footer style="height:40px;margin-top: 20px;text-align:center">
  1044. <el-button type="primary" @click="contactModelFlag=false">关闭</el-button>
  1045. </el-footer>
  1046. </el-dialog>
  1047. <!-- 上传文件的modal -->
  1048. <test-upload-file ref="testUploadFile" @refreshPageTables="getFileContentData()" v-drag></test-upload-file>
  1049. </div>
  1050. </template>
  1051. <script>
  1052. import {
  1053. testInformationSearch, // 测试信息列表查询
  1054. testInformationSave, // 测试信息新增
  1055. testInformationEdit, // 测试信息编辑
  1056. testInformationDelete, // 测试信息删除
  1057. getFileContentList, // 获取测试单附件列表
  1058. testResultSearch, // 获取测试结果对象
  1059. deleteTestFile, // 文件删除
  1060. saveTestResult, // 保存测试结果
  1061. saveSubmitResult, // 保存送样结果
  1062. saveCustomerResponse, // 保存客户回复
  1063. getProjectPartList, // 获取产品列表
  1064. getProjectInformation, // 获取项目信息
  1065. getCustomerInformation // 获取客户信息
  1066. } from '@/api/test/testInformation.js'
  1067. import {
  1068. downLoadQuotationFile, // 文件下载
  1069. searchProjectInfoList
  1070. } from '@/api/quotation/quotationInformation.js'
  1071. import {
  1072. customerAddressSearch, // 客户联系地址列表查询
  1073. } from '@/api/customer/customerAddress.js'
  1074. import {
  1075. customerContactSearch, // 客户联系人列表查询
  1076. } from '@/api/customer/customerContact.js'
  1077. import ChooseList from '@/views/modules/common/Chooselist'
  1078. import TestUploadFile from "./test_upload_file"
  1079. import DictDataSelect from "../sys/dict-data-select.vue";
  1080. import {selectTestSoBom,} from "../../../api/test/testSoBom";
  1081. import TestTable from "./testSoBom/testTable.vue";
  1082. import TestRoutingTable from "./testSoRouting/testRoutingTable.vue";
  1083. import {selectTestSoRoutingList} from "../../../api/test/testSoRouting";
  1084. import TestAttribute from "./testSoAttribute/testAttribute.vue";
  1085. import {partPropertiesList} from "../../../api/base/properties";
  1086. import TestProperties from "./testAttribute/testProperties.vue";
  1087. import {getTestPropertiesList,searchTestPropertiesItem} from "../../../api/test/testProperties";
  1088. import TestFile from "./file/testFile.vue";
  1089. export default {
  1090. name:"test",
  1091. components: {
  1092. TestFile,
  1093. TestProperties,
  1094. TestAttribute,
  1095. TestRoutingTable,
  1096. TestTable,
  1097. DictDataSelect,
  1098. ChooseList,
  1099. TestUploadFile
  1100. },
  1101. watch: {
  1102. searchData: {
  1103. deep: true,
  1104. handler: function (newV, oldV) {
  1105. this.searchData.customerNo = this.searchData.customerNo.toUpperCase()
  1106. this.searchData.projectId = this.searchData.projectId.toUpperCase()
  1107. }
  1108. },
  1109. modalData: {
  1110. deep: true,
  1111. handler: function (newV, oldV) {
  1112. this.modalData.customerNo = this.modalData.customerNo.toUpperCase()
  1113. this.modalData.projectId = this.modalData.projectId.toUpperCase()
  1114. this.modalData.testNo = this.modalData.testNo.toUpperCase()
  1115. }
  1116. },
  1117. 'modalData.customerNo'(newV, oldV){
  1118. if (oldV) {
  1119. if (!newV){
  1120. this.modalData.customerDesc = ''
  1121. }
  1122. this.modalData.projectId = ''
  1123. this.modalData.consignee =''
  1124. this.modalData.consigneeContact =''
  1125. this.modalData.sendSamplesAddress =''
  1126. }
  1127. },
  1128. 'modalData.projectId'(newV, oldV){
  1129. if (oldV) {
  1130. if (!newV){
  1131. this.modalData.projectName = ''
  1132. }
  1133. this.modalData.testPartNo =''
  1134. }
  1135. },
  1136. 'modalData.testPartNo'(newV, oldV){
  1137. if (oldV) {
  1138. if (!newV){
  1139. this.modalData.partName =''
  1140. this.dialogProperties = [];
  1141. }
  1142. }
  1143. },
  1144. },
  1145. data () {
  1146. return {
  1147. testFileList:[],
  1148. dialogProperties:[],
  1149. attributeList:[],
  1150. testSoRoutingList:[],
  1151. testSoBomList:[],
  1152. testPropertiesList:[],
  1153. copyTestPropertiesList:[],
  1154. activeTab:'attribute',
  1155. activeTabList:['attribute'],
  1156. clickTestRow:false,
  1157. // 导出
  1158. exportData: [],
  1159. exportName: '设备分类' + this.dayjs().format('YYYYMMDDHHmmss'),
  1160. exportHeader: ['设备分类'],
  1161. exportFooter: [],
  1162. resultList: [],
  1163. // ======== 行高 ========
  1164. height: 200,
  1165. secondHeight: 200,
  1166. // ======== 分页 ========
  1167. pageIndex: 1,
  1168. pageSize: 50,
  1169. totalPage: 0,
  1170. selectedDataNum: 0,
  1171. // 条件查询
  1172. searchData: {
  1173. site: this.$store.state.user.site,
  1174. customerNo: '',
  1175. customerDesc: '',
  1176. trackerName: '',
  1177. testPartNo: '',
  1178. partName: '',
  1179. testStatus: '',
  1180. startDate: '',
  1181. endDate: '',
  1182. projectId: '',
  1183. projectName: '',
  1184. engineerName: '',
  1185. priorityLevel: '',
  1186. page: 1,
  1187. limit: 10
  1188. },
  1189. // 其它
  1190. dataListLoading: false,
  1191. // 初始页签
  1192. activeTable: 'attribute',
  1193. // ======== 数据对象 ========
  1194. modalData: {
  1195. flag: '1',
  1196. title: '测试申请',
  1197. site: this.$store.state.user.site,
  1198. testNo: '',
  1199. customerNo: '',
  1200. customerDesc: '',
  1201. projectId: '',
  1202. projectName: '',
  1203. tracker: '',
  1204. trackerName: '',
  1205. testPartNo: '',
  1206. partName: '',
  1207. engineer: '',
  1208. engineerName: '',
  1209. priorityLevel: '',
  1210. testNumber: 1,
  1211. doesNeedArtwork:'',
  1212. artwork:'',
  1213. artworkName:'',
  1214. doesNeedPlanner:'',
  1215. planner:'',
  1216. plannerName:'',
  1217. requiredDeliveryDate: '',
  1218. remark: '',
  1219. technicalConsiderations: '',
  1220. isNeedToSendSamples: '',
  1221. sendSamplesAddress: '',
  1222. consignee: '',
  1223. consigneeContact: '',
  1224. actualityDeliveryDate: '',
  1225. testResultInformation: '',
  1226. actualitySendSamplesDate: '',
  1227. sendSamplesMethod: '',
  1228. deliverGoodsInformation: '',
  1229. deliverGoodsRemark: '',
  1230. actualityReplyDate: '',
  1231. confirmResults: '',
  1232. confirmBy: '',
  1233. confirmInformation: '',
  1234. testStatus: '草稿',
  1235. testResultStatus: 'B',
  1236. nextToDo: '',
  1237. createDate: '',
  1238. createBy: this.$store.state.user.name,
  1239. updateDate: '',
  1240. updateBy: '',
  1241. printType:'',
  1242. productName:'',
  1243. },
  1244. testDetailData: {
  1245. technicalConsiderations: '',
  1246. isNeedToSendSamples: '',
  1247. sendSamplesAddress: '',
  1248. consignee: '',
  1249. consigneeContact: ''
  1250. },
  1251. testResultData: {
  1252. testResultStatus: '',
  1253. actualityDeliveryDate: '',
  1254. isNeedToSendSamples: '',
  1255. testResultInformation: '',
  1256. actualitySendSamplesDate: '',
  1257. sendSamplesMethod: '',
  1258. deliverGoodsInformation: '',
  1259. deliverGoodsRemark: '',
  1260. confirmResults: '',
  1261. actualityReplyDate: '',
  1262. confirmBy: '',
  1263. confirmInformation: ''
  1264. },
  1265. enterResultData: {
  1266. site: this.$store.state.user.site,
  1267. testNo: '',
  1268. actualityDeliveryDate: '',
  1269. testResultInformation: '',
  1270. updateBy: this.$store.state.user.name,
  1271. testResultStatus: '',
  1272. fileContentList: []
  1273. },
  1274. submitResultData: {
  1275. site: this.$store.state.user.site,
  1276. testNo: '',
  1277. actualitySendSamplesDate: '',
  1278. sendSamplesMethod: '',
  1279. deliverGoodsInformation: '',
  1280. deliverGoodsRemark: '',
  1281. updateBy: this.$store.state.user.name,
  1282. testResultStatus: ''
  1283. },
  1284. customerResponseData: {
  1285. site: this.$store.state.user.site,
  1286. testNo: '',
  1287. actualityReplyDate: '',
  1288. confirmResults: '',
  1289. confirmBy: '',
  1290. confirmInformation: '',
  1291. updateBy: this.$store.state.user.name,
  1292. testResultStatus: ''
  1293. },
  1294. projectPartData: {
  1295. site: this.$store.state.user.site,
  1296. testPartNo: '',
  1297. partName: ''
  1298. },
  1299. projectInformationData: {
  1300. projectId: '',
  1301. projectName: '',
  1302. projectType: '',
  1303. projectSourceDesc: '',
  1304. priorityDesc: '',
  1305. status: '',
  1306. projectDesc: '',
  1307. projectManagerName: '',
  1308. projectOwnerName: '',
  1309. userRoleName: '',
  1310. remark: ''
  1311. },
  1312. customerInformationData: {
  1313. customerNo: '',
  1314. customerDesc: '',
  1315. importantCustomer: '',
  1316. customerCurrency: '',
  1317. turnoverOfYear: '',
  1318. potentialRevenueOfYear: '',
  1319. customerStatus: '',
  1320. customerIndustry: '',
  1321. companyName: '',
  1322. jobDescription: '',
  1323. customerDescription: '',
  1324. contactName: '',
  1325. contactPhoneNumber1: '',
  1326. position: '',
  1327. addressName: '',
  1328. addressType: '',
  1329. createDate: '',
  1330. createBy: '',
  1331. updateDate: '',
  1332. updateBy: ''
  1333. },
  1334. // ======== 数据列表 ========
  1335. dataList: [],
  1336. fileContentList: [],
  1337. projectPartList: [],
  1338. addressList: [],
  1339. contactList: [],
  1340. // ======== 列表表头 ========
  1341. columnList: [
  1342. {
  1343. userId: this.$store.state.user.name,
  1344. functionId: 103001,
  1345. serialNumber: '103001Table1TestNo',
  1346. tableId: '103001Table1',
  1347. tableName: '测试信息表',
  1348. columnProp: 'testNo',
  1349. headerAlign: 'center',
  1350. align: 'center',
  1351. columnLabel: '测试单号',
  1352. columnHidden: false,
  1353. columnImage: false,
  1354. columnSortable: false,
  1355. sortLv: 0,
  1356. status: true,
  1357. fixed: '',
  1358. columnWidth: 120
  1359. },
  1360. {
  1361. userId: this.$store.state.user.name,
  1362. functionId: 103001,
  1363. serialNumber: '103001Table1CustomerNo',
  1364. tableId: '103001Table1',
  1365. tableName: '测试信息表',
  1366. columnProp: 'customerNo',
  1367. headerAlign: 'center',
  1368. align: 'center',
  1369. columnLabel: '客户编码',
  1370. columnHidden: false,
  1371. columnImage: false,
  1372. columnSortable: false,
  1373. sortLv: 0,
  1374. status: true,
  1375. fixed: '',
  1376. columnWidth: 100
  1377. },
  1378. {
  1379. userId: this.$store.state.user.name,
  1380. functionId: 103001,
  1381. serialNumber: '103001Table1CustomerDesc',
  1382. tableId: '103001Table1',
  1383. tableName: '测试信息表',
  1384. columnProp: 'customerDesc',
  1385. headerAlign: 'center',
  1386. align: 'left',
  1387. columnLabel: '客户名称',
  1388. columnHidden: false,
  1389. columnImage: false,
  1390. columnSortable: false,
  1391. sortLv: 0,
  1392. status: true,
  1393. fixed: '',
  1394. columnWidth: 120
  1395. },
  1396. {
  1397. userId: this.$store.state.user.name,
  1398. functionId: 103001,
  1399. serialNumber: '103001Table1ProjectId',
  1400. tableId: '103001Table1',
  1401. tableName: '测试信息表',
  1402. columnProp: 'projectId',
  1403. headerAlign: 'center',
  1404. align: 'left',
  1405. columnLabel: '项目编码',
  1406. columnHidden: false,
  1407. columnImage: false,
  1408. columnSortable: false,
  1409. sortLv: 0,
  1410. status: true,
  1411. fixed: '',
  1412. columnWidth: 110
  1413. },
  1414. {
  1415. userId: this.$store.state.user.name,
  1416. functionId: 103001,
  1417. serialNumber: '103001Table1ProjectName',
  1418. tableId: '103001Table1',
  1419. tableName: '测试信息表',
  1420. columnProp: 'projectName',
  1421. headerAlign: 'center',
  1422. align: 'left',
  1423. columnLabel: '项目名称',
  1424. columnHidden: false,
  1425. columnImage: false,
  1426. columnSortable: false,
  1427. sortLv: 0,
  1428. status: true,
  1429. fixed: '',
  1430. columnWidth: 120
  1431. },
  1432. {
  1433. userId: this.$store.state.user.name,
  1434. functionId: 103001,
  1435. serialNumber: '103001Table1TrackerName',
  1436. tableId: '103001Table1',
  1437. tableName: '测试信息表',
  1438. columnProp: 'trackerName',
  1439. headerAlign: 'center',
  1440. align: 'center',
  1441. columnLabel: 'Artwork',
  1442. columnHidden: false,
  1443. columnImage: false,
  1444. columnSortable: false,
  1445. sortLv: 0,
  1446. status: true,
  1447. fixed: '',
  1448. columnWidth: 80
  1449. },
  1450. {
  1451. userId: this.$store.state.user.name,
  1452. functionId: 103001,
  1453. serialNumber: '103001Table1EngineerName',
  1454. tableId: '103001Table1',
  1455. tableName: '测试信息表',
  1456. columnProp: 'engineerName',
  1457. headerAlign: 'center',
  1458. align: 'center',
  1459. columnLabel: 'TP工程师',
  1460. columnHidden: false,
  1461. columnImage: false,
  1462. columnSortable: false,
  1463. sortLv: 0,
  1464. status: true,
  1465. fixed: '',
  1466. columnWidth: 80
  1467. },
  1468. {
  1469. userId: this.$store.state.user.name,
  1470. functionId: 103001,
  1471. serialNumber: '103001Table1TestPartNo',
  1472. tableId: '103001Table1',
  1473. tableName: '测试信息表',
  1474. columnProp: 'testPartNo',
  1475. headerAlign: 'center',
  1476. align: 'left',
  1477. columnLabel: '项目料号',
  1478. columnHidden: false,
  1479. columnImage: false,
  1480. columnSortable: false,
  1481. sortLv: 0,
  1482. status: true,
  1483. fixed: '',
  1484. columnWidth: 150
  1485. },
  1486. {
  1487. userId: this.$store.state.user.name,
  1488. functionId: 103001,
  1489. serialNumber: '103001Table1PartName',
  1490. tableId: '103001Table1',
  1491. tableName: '测试信息表',
  1492. columnProp: 'partName',
  1493. headerAlign: 'center',
  1494. align: 'left',
  1495. columnLabel: '物料名称',
  1496. columnHidden: false,
  1497. columnImage: false,
  1498. columnSortable: false,
  1499. sortLv: 0,
  1500. status: true,
  1501. fixed: '',
  1502. columnWidth: 100
  1503. },
  1504. {
  1505. userId: this.$store.state.user.name,
  1506. functionId: 103001,
  1507. serialNumber: '103001Table1PriorityLevel',
  1508. tableId: '103001Table1',
  1509. tableName: '测试信息表',
  1510. columnProp: 'priorityLevel',
  1511. headerAlign: 'center',
  1512. align: 'center',
  1513. columnLabel: '优先等级',
  1514. columnHidden: false,
  1515. columnImage: false,
  1516. columnSortable: false,
  1517. sortLv: 0,
  1518. status: true,
  1519. fixed: '',
  1520. columnWidth: 80
  1521. },
  1522. {
  1523. userId: this.$store.state.user.name,
  1524. functionId: 103001,
  1525. serialNumber: '103001Table1TestNumber',
  1526. tableId: '103001Table1',
  1527. tableName: '测试信息表',
  1528. columnProp: 'testNumber',
  1529. headerAlign: 'center',
  1530. align: 'right',
  1531. columnLabel: '测试数量',
  1532. columnHidden: false,
  1533. columnImage: false,
  1534. columnSortable: false,
  1535. sortLv: 0,
  1536. status: true,
  1537. fixed: '',
  1538. columnWidth: 80
  1539. },
  1540. {
  1541. userId: this.$store.state.user.name,
  1542. functionId: 103001,
  1543. serialNumber: '103001Table1RequiredDeliveryDate',
  1544. tableId: '103001Table1',
  1545. tableName: '测试信息表',
  1546. columnProp: 'requiredDeliveryDate',
  1547. headerAlign: 'center',
  1548. align: 'center',
  1549. columnLabel: '要求交付日期',
  1550. columnHidden: false,
  1551. columnImage: false,
  1552. columnSortable: false,
  1553. sortLv: 0,
  1554. status: true,
  1555. fixed: '',
  1556. columnWidth: 160
  1557. },
  1558. {
  1559. userId: this.$store.state.user.name,
  1560. functionId: 103001,
  1561. serialNumber: '103001Table1TestStatus',
  1562. tableId: '103001Table1',
  1563. tableName: '测试信息表',
  1564. columnProp: 'testStatus',
  1565. headerAlign: 'center',
  1566. align: 'center',
  1567. columnLabel: '状态',
  1568. columnHidden: false,
  1569. columnImage: false,
  1570. columnSortable: false,
  1571. sortLv: 0,
  1572. status: true,
  1573. fixed: '',
  1574. columnWidth: 80
  1575. },
  1576. {
  1577. userId: this.$store.state.user.name,
  1578. functionId: 103001,
  1579. serialNumber: '103001Table1CreateDate',
  1580. tableId: '103001Table1',
  1581. tableName: '测试信息表',
  1582. columnProp: 'createDate',
  1583. headerAlign: 'center',
  1584. align: 'center',
  1585. columnLabel: '创建时间',
  1586. columnHidden: false,
  1587. columnImage: false,
  1588. columnSortable: false,
  1589. sortLv: 0,
  1590. status: true,
  1591. fixed: '',
  1592. columnWidth: 160
  1593. },
  1594. {
  1595. userId: this.$store.state.user.name,
  1596. functionId: 103001,
  1597. serialNumber: '103001Table1CreateBy',
  1598. tableId: '103001Table1',
  1599. tableName: '测试信息表',
  1600. columnProp: 'createBy',
  1601. headerAlign: 'center',
  1602. align: 'center',
  1603. columnLabel: '创建人',
  1604. columnHidden: false,
  1605. columnImage: false,
  1606. columnSortable: false,
  1607. sortLv: 0,
  1608. status: true,
  1609. fixed: '',
  1610. columnWidth: 80
  1611. },
  1612. {
  1613. userId: this.$store.state.user.name,
  1614. functionId: 103001,
  1615. serialNumber: '103001Table1UpdateDate',
  1616. tableId: '103001Table1',
  1617. tableName: '测试信息表',
  1618. columnProp: 'updateDate',
  1619. headerAlign: 'center',
  1620. align: 'center',
  1621. columnLabel: '更新时间',
  1622. columnHidden: false,
  1623. columnImage: false,
  1624. columnSortable: false,
  1625. sortLv: 0,
  1626. status: true,
  1627. fixed: '',
  1628. columnWidth: 160
  1629. },
  1630. {
  1631. userId: this.$store.state.user.name,
  1632. functionId: 103001,
  1633. serialNumber: '103001Table1UpdateBy',
  1634. tableId: '103001Table1',
  1635. tableName: '测试信息表',
  1636. columnProp: 'updateBy',
  1637. headerAlign: 'center',
  1638. align: 'center',
  1639. columnLabel: '更新人',
  1640. columnHidden: false,
  1641. columnImage: false,
  1642. columnSortable: false,
  1643. sortLv: 0,
  1644. status: true,
  1645. fixed: '',
  1646. columnWidth: 80
  1647. }
  1648. ],
  1649. fileColumnList: [
  1650. {
  1651. userId: this.$store.state.user.name,
  1652. functionId: 103001,
  1653. serialNumber: '103001Table2FileName',
  1654. tableId: '103001Table2',
  1655. tableName: '文件信息表',
  1656. columnProp: 'fileName',
  1657. headerAlign: 'center',
  1658. align: 'center',
  1659. columnLabel: '文件名称',
  1660. columnHidden: false,
  1661. columnImage: false,
  1662. columnSortable: false,
  1663. sortLv: 0,
  1664. status: true,
  1665. fixed: '',
  1666. columnWidth: 140
  1667. },
  1668. {
  1669. userId: this.$store.state.user.name,
  1670. functionId: 103001,
  1671. serialNumber: '103001Table2FileRemark',
  1672. tableId: '103001Table2',
  1673. tableName: '文件信息表',
  1674. columnProp: 'fileRemark',
  1675. headerAlign: 'center',
  1676. align: 'center',
  1677. columnLabel: '备注',
  1678. columnHidden: false,
  1679. columnImage: false,
  1680. columnSortable: false,
  1681. sortLv: 0,
  1682. status: true,
  1683. fixed: '',
  1684. columnWidth: 240
  1685. },
  1686. // {
  1687. // userId: this.$store.state.user.name,
  1688. // functionId: 103001,
  1689. // serialNumber: '103001Table2OrderRef3',
  1690. // tableId: '103001Table2',
  1691. // tableName: '文件信息表',
  1692. // columnProp: 'orderRef3',
  1693. // headerAlign: 'center',
  1694. // align: 'center',
  1695. // columnLabel: '文件描述',
  1696. // columnHidden: false,
  1697. // columnImage: false,
  1698. // columnSortable: false,
  1699. // sortLv: 0,
  1700. // status: true,
  1701. // fixed: '',
  1702. // columnWidth: 120
  1703. // },
  1704. {
  1705. userId: this.$store.state.user.name,
  1706. functionId: 103001,
  1707. serialNumber: '103001Table2CreateDate',
  1708. tableId: '103001Table2',
  1709. tableName: '文件信息表',
  1710. columnProp: 'createDate',
  1711. headerAlign: 'center',
  1712. align: 'center',
  1713. columnLabel: '上传时间',
  1714. columnHidden: false,
  1715. columnImage: false,
  1716. columnSortable: false,
  1717. sortLv: 0,
  1718. status: true,
  1719. fixed: '',
  1720. columnWidth: 140
  1721. },
  1722. {
  1723. userId: this.$store.state.user.name,
  1724. functionId: 103001,
  1725. serialNumber: '103001Table2CreatedBy',
  1726. tableId: '103001Table2',
  1727. tableName: '文件信息表',
  1728. columnProp: 'createBy',
  1729. headerAlign: 'center',
  1730. align: 'center',
  1731. columnLabel: '上传人',
  1732. columnHidden: false,
  1733. columnImage: false,
  1734. columnSortable: false,
  1735. sortLv: 0,
  1736. status: true,
  1737. fixed: '',
  1738. columnWidth: 140
  1739. }
  1740. ],
  1741. projectPartDetailList: [
  1742. {
  1743. userId: this.$store.state.user.name,
  1744. functionId: 103001,
  1745. serialNumber: '103001Table3TestPartNo',
  1746. tableId: '103001Table3',
  1747. tableName: '项目物料表',
  1748. columnProp: 'testPartNo',
  1749. headerAlign: 'center',
  1750. align: 'center',
  1751. columnLabel: '物料编码',
  1752. columnHidden: false,
  1753. columnImage: false,
  1754. columnSortable: false,
  1755. sortLv: 0,
  1756. status: true,
  1757. fixed: '',
  1758. columnWidth: 120
  1759. },
  1760. {
  1761. userId: this.$store.state.user.name,
  1762. functionId: 103001,
  1763. serialNumber: '103001Table3PartDesc',
  1764. tableId: '103001Table3',
  1765. tableName: '项目物料表',
  1766. columnProp: 'partDesc',
  1767. headerAlign: 'center',
  1768. align: 'left',
  1769. columnLabel: '物料名称',
  1770. columnHidden: false,
  1771. columnImage: false,
  1772. columnSortable: false,
  1773. sortLv: 0,
  1774. status: true,
  1775. fixed: '',
  1776. columnWidth: 200
  1777. },{
  1778. userId: this.$store.state.user.name,
  1779. functionId: 103001,
  1780. serialNumber: '103001Table3PartSpec',
  1781. tableId: '103001Table3',
  1782. tableName: '项目物料表',
  1783. columnProp: 'partSpec',
  1784. headerAlign: 'center',
  1785. align: 'center',
  1786. columnLabel: '物料规格',
  1787. columnHidden: false,
  1788. columnImage: false,
  1789. columnSortable: false,
  1790. sortLv: 0,
  1791. status: true,
  1792. fixed: '',
  1793. columnWidth: 120
  1794. },{
  1795. userId: this.$store.state.user.name,
  1796. functionId: 103001,
  1797. serialNumber: '103001Table3PartTypeDesc',
  1798. tableId: '103001Table3',
  1799. tableName: '项目物料表',
  1800. columnProp: 'partTypeDesc',
  1801. headerAlign: 'center',
  1802. align: 'center',
  1803. columnLabel: '物料类型',
  1804. columnHidden: false,
  1805. columnImage: false,
  1806. columnSortable: false,
  1807. sortLv: 0,
  1808. status: true,
  1809. fixed: '',
  1810. columnWidth: 140
  1811. },
  1812. {
  1813. userId: this.$store.state.user.name,
  1814. functionId: 102001,
  1815. serialNumber: '102001Table3Type',
  1816. tableId: '102001Table3',
  1817. tableName: '项目物料表',
  1818. columnProp: 'type',
  1819. headerAlign: 'center',
  1820. align: 'center',
  1821. columnLabel: '制造类型',
  1822. columnHidden: false,
  1823. columnImage: false,
  1824. columnSortable: false,
  1825. sortLv: 0,
  1826. status: true,
  1827. fixed: '',
  1828. columnWidth: 120
  1829. },
  1830. {
  1831. userId: this.$store.state.user.name,
  1832. functionId: 102001,
  1833. serialNumber: '102001Table3UmId',
  1834. tableId: '102001Table3',
  1835. tableName: '项目物料表',
  1836. columnProp: 'umId',
  1837. headerAlign: 'center',
  1838. align: 'center',
  1839. columnLabel: '单位',
  1840. columnHidden: false,
  1841. columnImage: false,
  1842. columnSortable: false,
  1843. sortLv: 0,
  1844. status: true,
  1845. fixed: '',
  1846. columnWidth: 100
  1847. },
  1848. {
  1849. userId: this.$store.state.user.name,
  1850. functionId: 103001,
  1851. serialNumber: '103001Table3CodeNo',
  1852. tableId: '103001Table3',
  1853. tableName: '项目物料表',
  1854. columnProp: 'codeNo',
  1855. headerAlign: 'center',
  1856. align: 'center',
  1857. columnLabel: '模板编码',
  1858. columnHidden: false,
  1859. columnImage: false,
  1860. columnSortable: false,
  1861. sortLv: 0,
  1862. status: true,
  1863. fixed: '',
  1864. columnWidth: 120
  1865. },{
  1866. userId: this.$store.state.user.name,
  1867. functionId: 103001,
  1868. serialNumber: '103001Table3CodeDesc',
  1869. tableId: '103001Table3',
  1870. tableName: '项目物料表',
  1871. columnProp: 'codeDesc',
  1872. headerAlign: 'center',
  1873. align: 'left',
  1874. columnLabel: '模板名称',
  1875. columnHidden: false,
  1876. columnImage: false,
  1877. columnSortable: false,
  1878. sortLv: 0,
  1879. status: true,
  1880. fixed: '',
  1881. columnWidth: 120
  1882. }
  1883. ],
  1884. columnAddressList: [
  1885. {
  1886. userId: this.$store.state.user.name,
  1887. functionId: 103001,
  1888. serialNumber: '103001Table4AddressName',
  1889. tableId: '103001Table4',
  1890. tableName: '联系地址表',
  1891. columnProp: 'addressName',
  1892. headerAlign: 'center',
  1893. align: 'center',
  1894. columnLabel: '联系地址',
  1895. columnHidden: false,
  1896. columnImage: false,
  1897. status: true,
  1898. fixed: '',
  1899. },
  1900. {
  1901. userId: this.$store.state.user.name,
  1902. functionId: 103001,
  1903. serialNumber: '103001Table4ContactStatus',
  1904. tableId: '103001Table4',
  1905. tableName: '联系地址表',
  1906. columnProp: 'addressStatus',
  1907. headerAlign: 'center',
  1908. align: 'center',
  1909. columnLabel: '地址状态',
  1910. columnHidden: false,
  1911. columnImage: false,
  1912. status: true,
  1913. fixed: '',
  1914. },
  1915. ],
  1916. columnContactList: [
  1917. {
  1918. userId: this.$store.state.user.name,
  1919. functionId: 103001,
  1920. serialNumber: '103001Table5ContactName',
  1921. tableId: '103001Table5',
  1922. tableName: '客户联系人表',
  1923. columnProp: 'contactName',
  1924. headerAlign: 'center',
  1925. align: 'center',
  1926. columnLabel: '客户负责人',
  1927. columnHidden: false,
  1928. columnImage: false,
  1929. status: true,
  1930. fixed: '',
  1931. },
  1932. {
  1933. userId: this.$store.state.user.name,
  1934. functionId: 103001,
  1935. serialNumber: '103001Table5ContactPhoneNumber1',
  1936. tableId: '103001Table5',
  1937. tableName: '客户联系人表',
  1938. columnProp: 'contactPhoneNumber1',
  1939. headerAlign: 'center',
  1940. align: 'center',
  1941. columnLabel: '联系方式',
  1942. columnHidden: false,
  1943. columnImage: false,
  1944. status: true,
  1945. fixed: '',
  1946. },
  1947. {
  1948. userId: this.$store.state.user.name,
  1949. functionId: 103001,
  1950. serialNumber: '103001Table5PrimaryContact',
  1951. tableId: '103001Table5',
  1952. tableName: '客户联系人表',
  1953. columnProp: 'primaryContact',
  1954. headerAlign: 'center',
  1955. align: 'center',
  1956. columnLabel: '默认联系人',
  1957. columnHidden: false,
  1958. columnImage: false,
  1959. status: true,
  1960. fixed: '',
  1961. },
  1962. {
  1963. userId: this.$store.state.user.name,
  1964. functionId: 103001,
  1965. serialNumber: '103001Table5ContactStatus',
  1966. tableId: '103001Table5',
  1967. tableName: '客户联系人表',
  1968. columnProp: 'contactStatus',
  1969. headerAlign: 'center',
  1970. align: 'center',
  1971. columnLabel: '人员状态',
  1972. columnHidden: false,
  1973. columnImage: false,
  1974. status: true,
  1975. fixed: '',
  1976. },
  1977. ],
  1978. // ======== 必填规则 ========
  1979. rules: {
  1980. customerNo: [
  1981. {
  1982. required: true,
  1983. message: ' ',
  1984. trigger: ['change','blur']
  1985. }
  1986. ],
  1987. trackerName: [
  1988. {
  1989. required: true,
  1990. message: ' ',
  1991. trigger: ['change','blur']
  1992. }
  1993. ],
  1994. testNumber: [
  1995. {
  1996. required: true,
  1997. message: ' ',
  1998. trigger: ['change','blur']
  1999. }
  2000. ],
  2001. projectId: [
  2002. {
  2003. required: true,
  2004. message: ' ',
  2005. trigger: ['change','blur']
  2006. }
  2007. ],
  2008. engineerName: [
  2009. {
  2010. required: true,
  2011. message: ' ',
  2012. trigger: ['change','blur']
  2013. }
  2014. ],
  2015. partName: [
  2016. {
  2017. required: true,
  2018. message: ' ',
  2019. trigger: ['change','blur']
  2020. }
  2021. ],
  2022. priorityLevel: [
  2023. {
  2024. required: true,
  2025. message: ' ',
  2026. trigger: ['change','blur']
  2027. }
  2028. ],
  2029. requiredDeliveryDate: [
  2030. {
  2031. required: true,
  2032. message: ' ',
  2033. trigger: ['change','blur']
  2034. }
  2035. ],
  2036. testPartNo: [
  2037. {
  2038. required: true,
  2039. message: ' ',
  2040. trigger: ['change','blur']
  2041. }
  2042. ]
  2043. },
  2044. enterResultRules: {
  2045. actualityDeliveryDate: [
  2046. {
  2047. required: true,
  2048. message: ' ',
  2049. trigger: 'change'
  2050. }
  2051. ],
  2052. testResultInformation: [
  2053. {
  2054. required: true,
  2055. message: ' ',
  2056. trigger: 'change'
  2057. }
  2058. ]
  2059. },
  2060. submitResultRules: {
  2061. actualitySendSamplesDate: [
  2062. {
  2063. required: true,
  2064. message: ' ',
  2065. trigger: 'change'
  2066. }
  2067. ],
  2068. sendSamplesMethod: [
  2069. {
  2070. required: true,
  2071. message: ' ',
  2072. trigger: 'change'
  2073. }
  2074. ]
  2075. },
  2076. customerResponseRules: {
  2077. actualityReplyDate: [
  2078. {
  2079. required: true,
  2080. message: ' ',
  2081. trigger: 'change'
  2082. }
  2083. ],
  2084. confirmResults: [
  2085. {
  2086. required: true,
  2087. message: ' ',
  2088. trigger: 'change'
  2089. }
  2090. ],
  2091. confirmBy: [
  2092. {
  2093. required: true,
  2094. message: ' ',
  2095. trigger: 'change'
  2096. }
  2097. ]
  2098. },
  2099. // ======== 复选数据集 ========
  2100. testSelections: [],
  2101. projectPartListSelections: [],
  2102. // ======== 选中的当前行数据 ========
  2103. testCurrentRow: {},
  2104. // ======== 模态框开关控制 ========
  2105. modalFlag: false,
  2106. modalDisableFlag: false,
  2107. enterResultModalFlag: false,
  2108. submitResultModalFlag: false,
  2109. customerResponseModalFlag: false,
  2110. projectPartModelFlag: false,
  2111. // 选择项目弹框开关
  2112. chooseProjectListFlag: false,
  2113. //项目搜索条件
  2114. searchProjectData:{
  2115. site:this.$store.state.user.site,
  2116. projectId:undefined,
  2117. projectName:undefined,
  2118. customerId:undefined,
  2119. },
  2120. // 项目集合
  2121. projectList:[],
  2122. addressModelFlag: false,
  2123. contactModelFlag: false
  2124. }
  2125. },
  2126. mounted () {
  2127. this.$nextTick(() => {
  2128. this.height = window.innerHeight / 2 - 240;
  2129. /*第二个表格高度的动态调整*/
  2130. this.secondHeight = window.innerHeight / 2 - 206;
  2131. })
  2132. },
  2133. created () {
  2134. this.getDataList()
  2135. },
  2136. methods: {
  2137. searchTestPropertiesItem(){
  2138. let params={
  2139. site:this.$store.state.user.site,
  2140. }
  2141. this.copyTestPropertiesList = [];
  2142. searchTestPropertiesItem(params).then(({data}) => {
  2143. if (data && data.code === 0){
  2144. this.copyTestPropertiesList = data.rows;
  2145. }else {
  2146. this.$message.warning(data.msg)
  2147. }
  2148. }).catch((error)=>{
  2149. this.$message.error(error)
  2150. })
  2151. },
  2152. // ======== 分页相关方法 ========
  2153. /**
  2154. * 每页数
  2155. * @param val
  2156. */
  2157. sizeChangeHandle (val) {
  2158. this.pageSize = val
  2159. this.pageIndex = 1
  2160. this.getDataList()
  2161. },
  2162. /**
  2163. * 当前页
  2164. * @param val
  2165. */
  2166. currentChangeHandle (val) {
  2167. this.pageIndex = val
  2168. this.getDataList()
  2169. },
  2170. // ======== 复选框操作相关方法 ========
  2171. /**
  2172. * 选中一行
  2173. * @param row
  2174. */
  2175. projectPartClickRow (row) {
  2176. if (this.modalData.flag === '1' && this.activeTabList.length === 1){
  2177. this.$refs.projectPartTable.clearSelection();
  2178. this.$refs.projectPartTable.toggleRowSelection(row);
  2179. this.confirmProjectPart();
  2180. }
  2181. },
  2182. /**
  2183. * 多选
  2184. * @param val
  2185. */
  2186. selectionProjectPart (val) {
  2187. this.projectPartListSelections = val
  2188. },
  2189. /**
  2190. * 获取唯一值一般都为 id
  2191. * @param row
  2192. * @returns {*}
  2193. */
  2194. getRowKeys (row) {
  2195. return row.testPartNo;
  2196. },
  2197. // 勾选多选框
  2198. selectTestPart(selection,row){
  2199. this.$refs.projectPartTable.clearSelection();
  2200. this.$refs.projectPartTable.toggleRowSelection(row,true)
  2201. },
  2202. selectAllTestPart(selection){
  2203. this.$refs.projectPartTable.clearSelection();
  2204. },
  2205. /**
  2206. * 未知
  2207. * @returns {boolean}
  2208. */
  2209. selectFlag () {
  2210. return true
  2211. },
  2212. // ======== 页签切换相关方法 ========
  2213. /**
  2214. * 列表表格选择替换
  2215. * @param tab
  2216. * @param event
  2217. */
  2218. tabClick (tab, event) {
  2219. // 刷新列表数据
  2220. this.refreshCurrentTabTable()
  2221. },
  2222. dialogTabClick(){
  2223. // if (this.activeTab === 'attribute') {
  2224. // this.getTestProperties();
  2225. // }
  2226. },
  2227. /**
  2228. * 当前值发生变化的时候修改
  2229. * @param row
  2230. * @param oldRow
  2231. */
  2232. changeCurrentRow (row, oldRow) {
  2233. // 判断是否是获取焦点的事件
  2234. if (row) {
  2235. this.testCurrentRow = JSON.parse(JSON.stringify(row))
  2236. // 刷新当前页表
  2237. this.refreshCurrentTabTable()
  2238. }
  2239. },
  2240. getFileContentList(){
  2241. let params = {
  2242. orderRef1:this.$store.state.user.site,
  2243. orderRef2:this.testCurrentRow.testNo
  2244. }
  2245. getFileContentList(params).then(({data})=>{
  2246. if (data && data.code === 0){
  2247. this.testFileList = data.rows;
  2248. }else {
  2249. this.$message.warning(data.msg)
  2250. }
  2251. }).catch((error)=>{
  2252. this.$message.error(error)
  2253. })
  2254. },
  2255. /**
  2256. * 刷新页签的table数据
  2257. */
  2258. refreshCurrentTabTable () {
  2259. if (this.activeTable === 'test_result') {
  2260. this.getTestResult()
  2261. } else if (this.activeTable === 'project_information') {
  2262. this.getProjectInformation()
  2263. } else if (this.activeTable === 'customer_information') {
  2264. this.getCustomerInformation()
  2265. }
  2266. },
  2267. // ======== 列表数据刷新方法 ========
  2268. /**
  2269. * 获取数据列表
  2270. */
  2271. getDataList () {
  2272. this.searchData.limit = this.pageSize
  2273. this.searchData.page = this.pageIndex
  2274. testInformationSearch(this.searchData).then(({data}) => {
  2275. if (data.code === 0) {
  2276. this.dataList = data.page.list
  2277. this.pageIndex = data.page.currPage
  2278. this.pageSize = data.page.pageSize
  2279. this.totalPage = data.page.totalCount
  2280. this.$refs.selectDiv.setLengthAll( this.dataList.length)
  2281. // 判断是否全部存在数据
  2282. if (this.totalPage > 0) {
  2283. //设置选中行
  2284. this.$refs.testTable.setCurrentRow(this.dataList[0])
  2285. // 加载当前的页签的table
  2286. this.refreshCurrentTabTable()
  2287. this.testClickRow(this.dataList[0])
  2288. } else {
  2289. //设置选中行
  2290. this.$refs.testTable.setCurrentRow({})
  2291. // 加载当前的页签的table
  2292. this.refreshCurrentTabTable()
  2293. this.testClickRow({})
  2294. }
  2295. }
  2296. this.dataListLoading = false
  2297. })
  2298. },
  2299. /**
  2300. * 获取测试结果列表
  2301. */
  2302. getTestResult () {
  2303. let tempData = {
  2304. site: this.$store.state.user.site,
  2305. testNo: this.testCurrentRow.testNo
  2306. }
  2307. // 测试结果对象
  2308. testResultSearch(tempData).then(({data}) => {
  2309. if (data && data.code === 0) {
  2310. this.testResultData = data.rows[0]
  2311. } else {
  2312. this.testResultData = {}
  2313. }
  2314. })
  2315. // 附件列表
  2316. this.getFileContentData()
  2317. },
  2318. /**
  2319. * 获取项目信息
  2320. */
  2321. getProjectInformation () {
  2322. let tempData = {
  2323. site: this.$store.state.user.site,
  2324. projectId: this.testCurrentRow.projectId
  2325. }
  2326. // 报价结果对象
  2327. getProjectInformation(tempData).then(({data}) => {
  2328. if (data && data.code === 0) {
  2329. this.projectInformationData = data.rows[0]
  2330. } else {
  2331. this.projectInformationData = {}
  2332. }
  2333. })
  2334. },
  2335. /**
  2336. * 获取客户信息
  2337. */
  2338. getCustomerInformation () {
  2339. let tempData = {
  2340. site: this.$store.state.user.site,
  2341. customerNo: this.testCurrentRow.customerNo
  2342. }
  2343. // 报价结果对象
  2344. getCustomerInformation(tempData).then(({data}) => {
  2345. if (data && data.code === 0) {
  2346. this.customerInformationData = data.rows[0]
  2347. } else {
  2348. this.customerInformationData = {}
  2349. }
  2350. })
  2351. },
  2352. // ======== 新增/编辑模态框 ========
  2353. /**
  2354. * 报价信息新增模态框
  2355. */
  2356. addModal () {
  2357. this.searchTestPropertiesItem();
  2358. this.modalDisableFlag = false
  2359. this.modalFlag = true
  2360. },
  2361. /**
  2362. * 报价信息编辑模态框
  2363. * @param row
  2364. */
  2365. updateModal (row) {
  2366. this.modalData = {
  2367. flag: '2',
  2368. title: '测试申请-'+row.testNo,
  2369. site: row.site,
  2370. testNo: row.testNo,
  2371. customerNo: row.customerNo,
  2372. customerDesc: row.customerDesc,
  2373. projectId: row.projectId,
  2374. projectName: row.projectName,
  2375. tracker: row.tracker,
  2376. doesNeedArtwork:row.doesNeedArtwork,
  2377. artwork:row.artwork,
  2378. artworkName:row.artworkName,
  2379. doesNeedPlanner:row.doesNeedPlanner,
  2380. planner: row.planner,
  2381. plannerName: row.plannerName,
  2382. trackerName: row.trackerName,
  2383. testPartNo: row.testPartNo,
  2384. partName: row.partName,
  2385. engineer: row.engineer,
  2386. printType:row.printType,
  2387. productName:row.productName,
  2388. engineerName: row.engineerName,
  2389. priorityLevel: row.priorityLevel,
  2390. testNumber: row.testNumber,
  2391. requiredDeliveryDate: row.requiredDeliveryDate,
  2392. remark: row.remark,
  2393. technicalConsiderations: row.technicalConsiderations,
  2394. isNeedToSendSamples: row.isNeedToSendSamples,
  2395. sendSamplesAddress: row.sendSamplesAddress,
  2396. consignee: row.consignee,
  2397. consigneeContact: row.consigneeContact,
  2398. actualityDeliveryDate: row.actualityDeliveryDate,
  2399. testResultInformation: row.testResultInformation,
  2400. actualitySendSamplesDate: row.actualitySendSamplesDate,
  2401. sendSamplesMethod: row.sendSamplesMethod,
  2402. deliverGoodsInformation: row.deliverGoodsInformation,
  2403. deliverGoodsRemark: row.deliverGoodsRemark,
  2404. actualityReplyDate: row.actualityReplyDate,
  2405. confirmResults: row.confirmResults,
  2406. confirmBy: row.confirmBy,
  2407. confirmInformation: row.confirmInformation,
  2408. testStatus: row.testStatus,
  2409. testResultStatus: row.testResultStatus,
  2410. nextToDo: row.nextToDo,
  2411. updateBy: this.$store.state.user.name
  2412. }
  2413. this.activeTabList = ['product','process','attribute','partAttribute','file']
  2414. this.$nextTick(()=>{
  2415. this.$refs.dialogSoBom.clearTable();
  2416. })
  2417. this.modalDisableFlag = true
  2418. this.modalFlag = true
  2419. },
  2420. // ======== 新增/编辑/删除方法 ========
  2421. /**
  2422. * 获取项目物料列表
  2423. */
  2424. getProjectPartList () {
  2425. if (!this.modalData.projectId){
  2426. this.projectPartList = [];
  2427. return
  2428. }
  2429. // 先清空缓存选中
  2430. // this.$nextTick(() => this.$refs.projectPartTable.clearSelection())
  2431. // 拿到选中的产品编号
  2432. let projectPartList = this.modalData.testPartNo.split(';')
  2433. this.projectPartData.projectId = this.modalData.projectId;
  2434. // 查询所有项目物料
  2435. getProjectPartList(this.projectPartData).then(({data}) => {
  2436. if (data && data.code === 0) {
  2437. this.projectPartList = data.rows
  2438. this.projectPartList.forEach (val => {
  2439. // 回显选中的项目物料
  2440. if (projectPartList.includes(val.testPartNo)) {
  2441. this.$nextTick(() => this.$refs.projectPartTable.toggleRowSelection(val, true))
  2442. }
  2443. })
  2444. // this.projectPartModelFlag = true
  2445. }else {
  2446. this.$alert(data.msg, '错误', {
  2447. confirmButtonText: '确定'
  2448. })
  2449. }
  2450. })
  2451. },
  2452. /**
  2453. * 确认多选项目物料
  2454. */
  2455. confirmProjectPart () {
  2456. this.modalData.testPartNo = ''
  2457. this.modalData.partName = ''
  2458. for (let i = 0; i < this.projectPartListSelections.length; i++) {
  2459. this.modalData.testPartNo = this.modalData.testPartNo + ";" + this.projectPartListSelections[i].testPartNo
  2460. this.modalData.partName = this.modalData.partName + ";" + this.projectPartListSelections[i].partName
  2461. }
  2462. this.modalData.testPartNo = this.modalData.testPartNo.substring(1)
  2463. this.modalData.partName = this.modalData.partName.substring(1)
  2464. this.projectPartModelFlag = false
  2465. },
  2466. /**
  2467. * 客户信息新增/编辑
  2468. */
  2469. saveData () {
  2470. this.$refs.modalForm.validate((valid) => {
  2471. if (!valid) {
  2472. this.validateDataValue()
  2473. }else {
  2474. // if (this.projectPartListSelections.length <= 0){
  2475. // this.$message.warning('请选择项目料号')
  2476. // return
  2477. // }
  2478. // this.confirmProjectPart();
  2479. if (this.modalData.flag === '1'){
  2480. this.testSoRoutingList = []
  2481. this.testSoBomList = []
  2482. this.testFileList = [];
  2483. this.testPropertiesList = [];
  2484. this.saveTest()
  2485. }else {
  2486. this.updateTest()
  2487. }
  2488. }
  2489. })
  2490. },
  2491. validateDataValue(){
  2492. if (this.modalData.customerNo === '' || this.modalData.customerNo == null) {
  2493. this.$message.warning('请选择客户编码!')
  2494. return
  2495. }
  2496. if (this.modalData.customerDesc === '' || this.modalData.customerDesc == null) {
  2497. this.$message.warning('请选择客户名称!')
  2498. return
  2499. }
  2500. if (this.modalData.tracker === '' || this.modalData.tracker == null) {
  2501. this.$message.warning('请选择跟单员编码!')
  2502. return
  2503. }
  2504. if (this.modalData.trackerName === '' || this.modalData.trackerName == null) {
  2505. this.$message.warning('请选择跟单员名称!')
  2506. return
  2507. }
  2508. if (this.modalData.projectId === '' || this.modalData.projectId == null) {
  2509. this.$message.warning('请选择项目编码!')
  2510. return
  2511. }
  2512. if (this.modalData.projectName === '' || this.modalData.projectName == null) {
  2513. this.$message.warning('请选择项目名称!')
  2514. return
  2515. }
  2516. if (this.modalData.engineer === '' || this.modalData.engineer == null) {
  2517. this.$message.warning('请选择工程师编码!')
  2518. return
  2519. }
  2520. if (this.modalData.engineerName === '' || this.modalData.engineerName == null) {
  2521. this.$message.warning('请选择工程师名称!')
  2522. return
  2523. }
  2524. if (this.modalData.testPartNo === '' || this.modalData.testPartNo == null) {
  2525. this.$message.warning('请选择项目料号!')
  2526. return
  2527. }
  2528. if (this.modalData.partName === '' || this.modalData.partName == null) {
  2529. this.$message.warning('请选择物料名称!')
  2530. return
  2531. }
  2532. if (this.modalData.priorityLevel === '' || this.modalData.priorityLevel == null) {
  2533. this.$message.warning('请选择优先等级!')
  2534. return
  2535. }
  2536. if (!this.modalData.testNumber) {
  2537. this.$message.warning('请输入正确的测试数量!')
  2538. return
  2539. }
  2540. if (this.modalData.requiredDeliveryDate === '' || this.modalData.requiredDeliveryDate == null) {
  2541. this.$message.warning('请输入要求交付日期!')
  2542. return
  2543. }
  2544. },
  2545. saveTest(){
  2546. testInformationSave(this.modalData).then(({data}) => {
  2547. if (data && data.code === 0) {
  2548. this.getDataList();
  2549. this.activeTabList = ['product','process','attribute','partAttribute','file']
  2550. this.activeTab = 'attribute'
  2551. this.modalData.testNo = data.row;
  2552. // this.modalFlag = false
  2553. this.getTestProperties();
  2554. this.$message.success("操作成功")
  2555. } else {
  2556. this.$alert(data.msg, '错误', {
  2557. confirmButtonText: '确定'
  2558. })
  2559. }
  2560. })
  2561. },
  2562. updateTest(){
  2563. testInformationEdit(this.modalData).then(({data}) => {
  2564. if (data && data.code === 0) {
  2565. this.getDataList()
  2566. this.modalFlag = false
  2567. this.$message({
  2568. message: '操作成功',
  2569. type: 'success',
  2570. duration: 1500,
  2571. onClose: () => {}
  2572. })
  2573. } else {
  2574. this.$alert(data.msg, '错误', {
  2575. confirmButtonText: '确定'
  2576. })
  2577. }
  2578. })
  2579. },
  2580. /**
  2581. * 测试信息删除
  2582. */
  2583. delModal () {
  2584. if(this.testSelections.length === 0){
  2585. this.$message.warning('请勾选要删除的测试信息!')
  2586. return
  2587. }
  2588. this.$confirm(`是否删除这 `+ this.testSelections.length +` 条测试信息?`, '提示', {
  2589. confirmButtonText: '确定',
  2590. cancelButtonText: '取消',
  2591. type: 'warning'
  2592. }).then(() => {
  2593. let tempData = {
  2594. informationList: this.testSelections
  2595. }
  2596. testInformationDelete(tempData).then(({data}) => {
  2597. if (data && data.code === 0) {
  2598. this.getDataList()
  2599. this.testSelections = []
  2600. this.$message({
  2601. message: '操作成功',
  2602. type: 'success',
  2603. duration: 1500,
  2604. onClose: () => {}
  2605. })
  2606. } else {
  2607. this.$alert(data.msg, '错误', {
  2608. confirmButtonText: '确定'
  2609. })
  2610. }
  2611. })
  2612. }).catch(() => {
  2613. })
  2614. },
  2615. // ======== 列表操作方法 ========
  2616. /**
  2617. * 单机选中测试信息
  2618. * @param row
  2619. */
  2620. testClickRow (row) {
  2621. // this.$refs.testTable.toggleRowSelection(row)
  2622. this.testCurrentRow = JSON.parse(JSON.stringify(row))
  2623. this.testDetailData = JSON.parse(JSON.stringify(row))
  2624. // 刷新组件
  2625. this.clickTestRow = false;
  2626. this.clickTestRow = true;
  2627. if (row){
  2628. this.selectTestSoBom()
  2629. this.selectTestSoRoutingList()
  2630. this.getPartPropertiesList();
  2631. this.getTestProperties();
  2632. this.getFileContentList()
  2633. }
  2634. },
  2635. /**
  2636. * 复选报价信息
  2637. * @param val
  2638. */
  2639. selectionTest (val) {
  2640. this.testSelections = val
  2641. this.$refs.selectDiv.setLengthselected(this.testSelections.length)
  2642. },
  2643. // ======== 报价结果相关方法 ========
  2644. /**
  2645. * 封装录入方法
  2646. */
  2647. packTestResultModal () {
  2648. // 重置对象
  2649. this.enterResultData = {
  2650. site: this.$store.state.user.site,
  2651. testNo: '',
  2652. actualityDeliveryDate: new Date(),
  2653. testResultInformation: '',
  2654. testResultStatus: 'E',
  2655. fileContentList: [],
  2656. updateBy: this.$store.state.user.name
  2657. }
  2658. this.enterResultData.testNo = this.testCurrentRow.testNo
  2659. // // 获得这些测试号的全部附件
  2660. // this.getFileContentList()
  2661. this.enterResultModalFlag = true
  2662. },
  2663. /**
  2664. * 录入测试结果
  2665. */
  2666. testResultModal () {
  2667. this.packTestResultModal()
  2668. },
  2669. /**
  2670. * 保存测试结果
  2671. */
  2672. saveTestResult () {
  2673. if (this.enterResultData.actualityDeliveryDate === '' || this.enterResultData.actualityDeliveryDate == null) {
  2674. this.$message.warning('请选择实际交付日期!')
  2675. return
  2676. }
  2677. if (this.enterResultData.testResultInformation === '' || this.enterResultData.testResultInformation == null) {
  2678. this.$message.warning('请填写测试结果信息!')
  2679. return
  2680. }
  2681. saveTestResult(this.enterResultData).then(({data}) => {
  2682. if (data && data.code === 0) {
  2683. this.getDataList()
  2684. this.enterResultModalFlag = false
  2685. this.$message({
  2686. message: '操作成功',
  2687. type: 'success',
  2688. duration: 1500,
  2689. onClose: () => {}
  2690. })
  2691. } else {
  2692. this.$alert(data.msg, '错误', {
  2693. confirmButtonText: '确定'
  2694. })
  2695. }
  2696. })
  2697. },
  2698. /**
  2699. * 封装送样方法
  2700. */
  2701. packSubmitTestModal () {
  2702. this.submitResultData = {
  2703. site: this.$store.state.user.site,
  2704. testNo: '',
  2705. actualitySendSamplesDate: new Date(),
  2706. sendSamplesMethod: '',
  2707. deliverGoodsInformation: '',
  2708. deliverGoodsRemark: '',
  2709. testResultStatus: 'S',
  2710. updateBy: this.$store.state.user.name,
  2711. }
  2712. // 获得选中的测试号
  2713. this.submitResultData.testNo = this.testCurrentRow.testNo
  2714. this.submitResultModalFlag = true
  2715. },
  2716. /**
  2717. * 提交送样信息
  2718. */
  2719. submitTestModal () {
  2720. this.packSubmitTestModal()
  2721. },
  2722. /**
  2723. * 保存送样结果
  2724. */
  2725. saveSubmitResult () {
  2726. if (this.submitResultData.actualitySendSamplesDate === '' || this.submitResultData.actualitySendSamplesDate == null) {
  2727. this.$message.warning('请选择实际送样日期!')
  2728. return
  2729. }
  2730. if (this.submitResultData.sendSamplesMethod === '' || this.submitResultData.sendSamplesMethod == null) {
  2731. this.$message.warning('请选择送样方式!')
  2732. return
  2733. }
  2734. saveSubmitResult(this.submitResultData).then(({data}) => {
  2735. if (data && data.code === 0) {
  2736. this.getDataList()
  2737. this.submitResultModalFlag = false
  2738. this.$message({
  2739. message: '操作成功',
  2740. type: 'success',
  2741. duration: 1500,
  2742. onClose: () => {}
  2743. })
  2744. } else {
  2745. this.$alert(data.msg, '错误', {
  2746. confirmButtonText: '确定'
  2747. })
  2748. }
  2749. })
  2750. },
  2751. /**
  2752. * 封装回复方法
  2753. */
  2754. packCustomerResponseModal () {
  2755. this.customerResponseData = {
  2756. site: this.$store.state.user.site,
  2757. testNo: '',
  2758. actualityReplyDate: new Date(),
  2759. confirmResults: '接受',
  2760. confirmBy: '',
  2761. confirmInformation: '',
  2762. testResultStatus: 'R',
  2763. updateBy: this.$store.state.user.name
  2764. }
  2765. // 获得选中的测试号
  2766. this.customerResponseData.testNo = this.testCurrentRow.testNo
  2767. this.customerResponseModalFlag = true
  2768. },
  2769. /**
  2770. * 客户回复
  2771. */
  2772. customerResponseModal () {
  2773. this.packCustomerResponseModal()
  2774. },
  2775. /**
  2776. * 保存客户回复
  2777. */
  2778. saveCustomerResponse () {
  2779. if (this.customerResponseData.actualityReplyDate === '' || this.customerResponseData.actualityReplyDate == null) {
  2780. this.$message.warning('请选择实际回复日期!')
  2781. return
  2782. }
  2783. if (this.customerResponseData.confirmResults === '' || this.customerResponseData.confirmResults == null) {
  2784. this.$message.warning('请选择客户确认结果!')
  2785. return
  2786. }
  2787. if (this.customerResponseData.confirmBy === '' || this.customerResponseData.confirmBy == null) {
  2788. this.$message.warning('请填写客户确认人!')
  2789. return
  2790. }
  2791. saveCustomerResponse(this.customerResponseData).then(({data}) => {
  2792. if (data && data.code === 0) {
  2793. this.getDataList()
  2794. this.customerResponseModalFlag = false
  2795. this.$message({
  2796. message: '操作成功',
  2797. type: 'success',
  2798. duration: 1500,
  2799. onClose: () => {}
  2800. })
  2801. } else {
  2802. this.$alert(data.msg, '错误', {
  2803. confirmButtonText: '确定'
  2804. })
  2805. }
  2806. })
  2807. },
  2808. // ======== 报价单附件的相关方法 ========
  2809. /**
  2810. * 获取报价单附件列表
  2811. */
  2812. getFileContentData () {
  2813. let currentData = {
  2814. orderRef1: this.$store.state.user.site,
  2815. orderRef2: this.testCurrentRow.testNo
  2816. }
  2817. getFileContentList(currentData).then(({data}) => {
  2818. if (data && data.code === 0) {
  2819. this.fileContentList = data.rows
  2820. } else {
  2821. this.fileContentList = []
  2822. }
  2823. })
  2824. },
  2825. /**
  2826. * 上传文件
  2827. */
  2828. uploadFile () {
  2829. let currentData = {
  2830. titleCon: '测试附件上传',
  2831. site: this.$store.state.user.site,
  2832. createBy: this.$store.state.user.name,
  2833. testNo: this.enterResultData.testNo,
  2834. fileRemark: '',
  2835. folder: 'testFile'
  2836. }
  2837. //打开组件 去做新增业务
  2838. this.$nextTick(() => {
  2839. this.$refs.testUploadFile.init(currentData)
  2840. })
  2841. },
  2842. /**
  2843. * 文件删除
  2844. * @param row
  2845. */
  2846. deleteFile (row) {
  2847. this.$confirm('确定要删除此文件?', '提示', {
  2848. confirmButtonText: '确定',
  2849. cancelButtonText: '取消',
  2850. type: 'warning'
  2851. }).then(() => {
  2852. deleteTestFile(row).then(({data}) => {
  2853. if (data && data.code === 0) {
  2854. this.getFileContentList()
  2855. this.$message({
  2856. message: '操作成功',
  2857. type: 'success',
  2858. duration: 1500,
  2859. onClose: () => {}
  2860. })
  2861. } else {
  2862. this.$alert(data.msg, '错误', {
  2863. confirmButtonText: '确定'
  2864. })
  2865. }
  2866. })
  2867. }).catch(() => {
  2868. })
  2869. },
  2870. /**
  2871. * 文件下载
  2872. * @param row
  2873. */
  2874. downloadFile (row) {
  2875. downLoadQuotationFile(row).then(({data}) => {
  2876. // 不限制文件下载类型
  2877. const blob = new Blob([data], {type:'application/octet-stream;charset=utf-8'})
  2878. // 下载文件名称
  2879. const fileName = row.fileName
  2880. // a标签下载
  2881. const linkNode = document.createElement('a')
  2882. linkNode.download = fileName // a标签的download属性规定下载文件的名称
  2883. linkNode.style.display = 'none'
  2884. linkNode.href = URL.createObjectURL(blob) // 生成一个Blob URL
  2885. document.body.appendChild(linkNode)
  2886. linkNode.click() // 模拟在按钮上的一次鼠标单击
  2887. URL.revokeObjectURL(linkNode.href) // 释放URL 对象
  2888. document.body.removeChild(linkNode)
  2889. })
  2890. },
  2891. /**
  2892. * 获取该客户的客户地址
  2893. */
  2894. getCustomerAddressList () {
  2895. let tempData = {
  2896. site: this.$store.state.user.site,
  2897. customerNo: this.modalData.customerNo,
  2898. addressType: 'A'
  2899. }
  2900. customerAddressSearch(tempData).then(({data}) => {
  2901. if (data && data.code === 0) {
  2902. this.addressList = data.rows
  2903. this.addressModelFlag = true
  2904. } else {
  2905. this.addressList = []
  2906. }
  2907. })
  2908. },
  2909. // 双击选择负责人
  2910. getAddressData (row) {
  2911. this.modalData.sendSamplesAddress = row.addressName
  2912. this.addressModelFlag = false
  2913. },
  2914. /**
  2915. * 获取该客户的客户负责人
  2916. */
  2917. getCustomerContactList () {
  2918. let tempData = {
  2919. site: this.$store.state.user.site,
  2920. customerNo: this.modalData.customerNo
  2921. }
  2922. customerContactSearch(tempData).then(({data}) => {
  2923. if (data && data.code === 0) {
  2924. this.contactList = data.rows
  2925. this.contactModelFlag = true
  2926. } else {
  2927. this.contactList = []
  2928. }
  2929. })
  2930. },
  2931. // 双击选择负责人
  2932. getContactData (row) {
  2933. this.modalData.consignee = row.contactName
  2934. this.modalData.consigneeContact = row.contactPhoneNumber1
  2935. this.contactModelFlag = false
  2936. },
  2937. // ======== chooseList相关方法 ========
  2938. /**
  2939. * 获取基础数据列表S
  2940. * @param val
  2941. * @param type
  2942. */
  2943. getBaseList (val, type) {
  2944. this.tagNo = val
  2945. this.tagNo1 = type
  2946. this.$nextTick(() => {
  2947. let strVal = ''
  2948. let conSql = ''
  2949. if (val === 102) {
  2950. if(type === 1) {
  2951. strVal = this.modalData.customerNo
  2952. }
  2953. }
  2954. // if (val === 103) {
  2955. // if(type === 1) {
  2956. // strVal = this.modalData.tracker
  2957. // }
  2958. // if(type === 2) {
  2959. // strVal = this.modalData.engineer
  2960. // }
  2961. // }
  2962. if (val === 104) {
  2963. if(type === 1) {
  2964. strVal = this.modalData.projectId
  2965. }
  2966. }
  2967. if (val === 2041) {
  2968. strVal = this.modalData.trackerName
  2969. conSql = " and b.site = '" + this.$store.state.user.site + "'"
  2970. }
  2971. if (val === 2042) {
  2972. strVal = this.modalData.engineerName
  2973. conSql = " and b.site = '" + this.$store.state.user.site + "'"
  2974. }
  2975. if (val === 2007) {
  2976. strVal = this.modalData.artworkName
  2977. conSql = " and b.site = '" + this.$store.state.user.site + "'"
  2978. }
  2979. if (val === 2008) {
  2980. strVal = this.modalData.plannerName
  2981. conSql = " and b.site = '" + this.$store.state.user.site + "'"
  2982. }
  2983. this.$refs.baseList.init(val, strVal, conSql)
  2984. })
  2985. },
  2986. /**
  2987. * 列表方法的回调
  2988. * @param val
  2989. */
  2990. getBaseData (val) {
  2991. if (this.tagNo === 102) {
  2992. if(this.tagNo1 === 1) {
  2993. if (val.Customer_no === this.modalData.customerNo) {
  2994. return
  2995. }
  2996. this.modalData.customerNo = val.Customer_no
  2997. this.modalData.customerDesc = val.Customer_desc
  2998. this.modalData.projectId = ''
  2999. this.modalData.projectName = ''
  3000. this.projectPartList = [];
  3001. }
  3002. }
  3003. // if (this.tagNo === 103) {
  3004. // if(this.tagNo1 === 1) {
  3005. // this.modalData.tracker = val.username
  3006. // this.modalData.trackerName = val.user_display
  3007. // }
  3008. // if(this.tagNo1 === 2) {
  3009. // this.modalData.engineer = val.username
  3010. // this.modalData.engineerName = val.user_display
  3011. // }
  3012. // }
  3013. if (this.tagNo === 104) {
  3014. if(this.tagNo1 === 1) {
  3015. this.modalData.projectId = val.project_id
  3016. this.modalData.projectName = val.project_name
  3017. this.getProjectPartList();
  3018. }
  3019. }
  3020. if (this.tagNo === 2041) {
  3021. this.modalData.tracker = val.username
  3022. this.modalData.trackerName = val.user_display
  3023. }
  3024. if (this.tagNo === 2042) {
  3025. this.modalData.engineer = val.username
  3026. this.modalData.engineerName = val.user_display
  3027. }
  3028. if (this.tagNo === 2007){
  3029. this.modalData.artwork = val.username;
  3030. this.modalData.artworkName = val.user_display;
  3031. }
  3032. if (this.tagNo === 2008){
  3033. this.modalData.planner = val.username;
  3034. this.modalData.plannerName = val.user_display;
  3035. }
  3036. },
  3037. // ======== 导出相关方法 ========
  3038. /**
  3039. * 导出excel
  3040. */
  3041. async createExportData () {
  3042. this.searchData.limit = -1
  3043. this.searchData.page = 1
  3044. await testInformationSearch(this.searchData).then(({data}) => {
  3045. this.resultList = data.page.list
  3046. })
  3047. return this.resultList
  3048. },
  3049. startDownload () {
  3050. },
  3051. finishDownload () {
  3052. },
  3053. fields () {
  3054. let json = '{'
  3055. this.columnList.forEach((item, index) => {
  3056. if (index == this.columnList.length - 1) {
  3057. json += '"' + item.columnLabel + '"' + ':' + '"' + item.columnProp + '"'
  3058. } else {
  3059. json += '"' + item.columnLabel + '"' + ':' + '"' + item.columnProp + '"' + ','
  3060. }
  3061. })
  3062. json += '}'
  3063. let s = eval('(' + json + ')')
  3064. return s
  3065. },
  3066. closeModalDiaLog () {
  3067. this.$refs.modalForm.resetFields();
  3068. this.modalData = {
  3069. flag: '1',
  3070. title: '测试申请',
  3071. site: this.$store.state.user.site,
  3072. testNo: '',
  3073. customerNo: '',
  3074. customerDesc: '',
  3075. projectId: '',
  3076. doesNeedArtwork:'',
  3077. artwork:'',
  3078. artworkName:'',
  3079. doesNeedPlanner:'',
  3080. planner: '',
  3081. plannerName: '',
  3082. projectName: '',
  3083. tracker: '',
  3084. trackerName: '',
  3085. testPartNo: '',
  3086. partName: '',
  3087. engineer: '',
  3088. engineerName: '',
  3089. printType:'',
  3090. productName:'',
  3091. priorityLevel: '',
  3092. testNumber: 1,
  3093. requiredDeliveryDate: '',
  3094. remark: '',
  3095. technicalConsiderations: '',
  3096. isNeedToSendSamples: '',
  3097. sendSamplesAddress: '',
  3098. consignee: '',
  3099. consigneeContact: '',
  3100. actualityDeliveryDate: '',
  3101. testResultInformation: '',
  3102. actualitySendSamplesDate: '',
  3103. sendSamplesMethod: '',
  3104. deliverGoodsInformation: '',
  3105. deliverGoodsRemark: '',
  3106. actualityReplyDate: '',
  3107. confirmResults: '',
  3108. confirmBy: '',
  3109. confirmInformation: '',
  3110. testStatus: '草稿',
  3111. testResultStatus: 'B',
  3112. nextToDo: '',
  3113. createDate: '',
  3114. createBy: this.$store.state.user.name,
  3115. updateDate: '',
  3116. updateBy: ''
  3117. }
  3118. this.activeTab = 'attribute';
  3119. this.activeTabList = ['attribute']
  3120. this.dialogProperties = [];
  3121. // this.testPropertiesList = this.copyTestPropertiesList;
  3122. this.copyTestPropertiesList = [];
  3123. },
  3124. checkSelectable(row,index){
  3125. if (this.modalData.flag === '1' && this.activeTabList.length === 1){
  3126. return true
  3127. }else {
  3128. return false
  3129. }
  3130. },
  3131. projectClickRow(row){
  3132. this.modalData.projectId = row.projectId
  3133. this.modalData.projectName = row.projectName
  3134. this.getProjectPartList()
  3135. this.chooseProjectListFlag = false
  3136. },
  3137. // 查询searchProjectInfoList
  3138. searchProjectInfoList(){
  3139. this.projectList = [];
  3140. this.searchProjectData.customerId = this.modalData.customerNo
  3141. searchProjectInfoList(this.searchProjectData).then(({data})=>{
  3142. if (data && data.code === 0) {
  3143. this.projectList = data.rows
  3144. } else {
  3145. this.projectList = []
  3146. }
  3147. }).catch((error)=>{
  3148. this.$message.error('查询项目信息失败')
  3149. })
  3150. },
  3151. closeProjectInfoDialog(){
  3152. this.$refs.closeProjectInfoForm.resetFields();
  3153. this.searchProjectData={
  3154. site:this.$store.state.user.site,
  3155. projectId:undefined,
  3156. projectName:undefined,
  3157. customerId:undefined,
  3158. }
  3159. },
  3160. rowStyle({row}){
  3161. if (this.testCurrentRow.testNo === row.testNo) {
  3162. return { 'background-color': '#E8F7F6', cursor: 'pointer' };
  3163. }
  3164. },
  3165. selectTestSoBom(){
  3166. let params = {
  3167. testNo:this.modalData.testNo?this.modalData.testNo:this.testCurrentRow.testNo,
  3168. site:this.$store.state.user.site
  3169. }
  3170. selectTestSoBom(params).then(({data})=>{
  3171. if (data && data.code === 0 ){
  3172. this.testSoBomList = data.rows
  3173. }
  3174. })
  3175. },
  3176. selectTestSoRoutingList(){
  3177. let params = {
  3178. site:this.$store.state.user.site,
  3179. testNo:this.modalData.testNo?this.modalData.testNo:this.testCurrentRow.testNo,
  3180. }
  3181. selectTestSoRoutingList(params).then(({data})=>{
  3182. if (data && data.code === 0){
  3183. this.testSoRoutingList = data.rows
  3184. }
  3185. })
  3186. },
  3187. getTestProperties(){
  3188. let params = {
  3189. site:this.$store.state.user.site,
  3190. testNo: this.testCurrentRow.testNo
  3191. }
  3192. getTestPropertiesList(params).then(({data})=>{
  3193. if (data && data.code === 0){
  3194. this.testPropertiesList = data.rows;
  3195. if (this.modalFlag){
  3196. this.copyTestPropertiesList = data.rows;
  3197. }
  3198. }else {
  3199. this.$message.warning(data.msg)
  3200. }
  3201. }).catch((error)=>{
  3202. this.$message.error(error)
  3203. })
  3204. },
  3205. getPartPropertiesList(){
  3206. let params = {
  3207. site:this.$store.state.user.site,
  3208. testPartNo: this.testCurrentRow.testPartNo
  3209. }
  3210. this.dialogProperties = [];
  3211. partPropertiesList(params).then(({data})=>{
  3212. if (data && data.code === 0){
  3213. if (this.modalData.flag !== '1'){
  3214. this.dialogProperties = data.rows
  3215. }
  3216. this.attributeList = data.rows
  3217. }else {
  3218. this.$message.warning(data.msg)
  3219. }
  3220. }).catch((error)=>{
  3221. this.$message.error(error)
  3222. })
  3223. },
  3224. updateModalStatus(row,status){
  3225. let params = JSON.parse(JSON.stringify(row))
  3226. params.testResultStatus = status;
  3227. params.testStatus = '下达';
  3228. testInformationEdit(params).then(({data}) => {
  3229. if (data && data.code === 0) {
  3230. this.getDataList()
  3231. this.$message.success('测试单已下达')
  3232. } else {
  3233. this.$alert(data.msg, '错误', {
  3234. confirmButtonText: '确定'
  3235. })
  3236. }
  3237. })
  3238. },
  3239. partClickRow(row){
  3240. this.modalData.testPartNo = row.testPartNo
  3241. this.modalData.partName = row.partDesc
  3242. this.dialogProperties = [];
  3243. let params = {
  3244. site:this.$store.state.user.site,
  3245. testPartNo:this.modalData.testPartNo
  3246. }
  3247. partPropertiesList(params).then(({data})=>{
  3248. if (data && data.code === 0){
  3249. this.dialogProperties = data.rows
  3250. }else {
  3251. this.$message.warning(data.msg)
  3252. }
  3253. }).catch((error)=>{
  3254. this.$message.error(error)
  3255. })
  3256. this.projectPartModelFlag = false
  3257. }
  3258. }
  3259. }
  3260. </script>
  3261. <style scoped lang="scss">
  3262. /deep/ .customer-tab .el-tabs__content {
  3263. padding: 0px !important;
  3264. height: 459px;
  3265. }
  3266. .right /deep/ .el-input__inner{
  3267. text-align: right;
  3268. }
  3269. /deep/ .inlineNumber input::-webkit-outer-spin-button,
  3270. /deep/ .inlineNumber input::-webkit-inner-spin-button {
  3271. -webkit-appearance: none;
  3272. }
  3273. /deep/ .inlineNumber input[type="number"]{
  3274. -moz-appearance: textfield;
  3275. padding-right: 5px !important;
  3276. }
  3277. /deep/ .el-table .cellClass .cell .el-checkbox__inner{
  3278. display: none;
  3279. position: relative;
  3280. }
  3281. /deep/ .el-table .cellClass .cell:before{
  3282. content: "";
  3283. position: absolute;
  3284. }
  3285. </style>