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.

3284 lines
120 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
  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="'跟单员'">
  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="'工程师'">
  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="优先等级" prop="priorityLevel">
  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="#">跟单员</a></span>-->
  260. <span style="cursor: pointer" slot="label" @click="getBaseList(2000)"><a herf="#">跟单员</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="#">工程师</a></span>-->
  267. <span slot="label" @click="getBaseList(2001)"><a herf="#">工程师</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="设计师">
  273. <span slot="label"><a herf="#" @click="getBaseList(2003)">设计师</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="计划员">
  279. <span slot="label"><a herf="#" @click="getBaseList(2004)">计划员</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: '跟单员',
  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: '工程师',
  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. userId: this.$store.state.user.name,
  1813. functionId: 103001,
  1814. serialNumber: '103001Table3CodeNo',
  1815. tableId: '103001Table3',
  1816. tableName: '项目物料表',
  1817. columnProp: 'codeNo',
  1818. headerAlign: 'center',
  1819. align: 'center',
  1820. columnLabel: '模板编码',
  1821. columnHidden: false,
  1822. columnImage: false,
  1823. columnSortable: false,
  1824. sortLv: 0,
  1825. status: true,
  1826. fixed: '',
  1827. columnWidth: 120
  1828. },{
  1829. userId: this.$store.state.user.name,
  1830. functionId: 103001,
  1831. serialNumber: '103001Table3CodeDesc',
  1832. tableId: '103001Table3',
  1833. tableName: '项目物料表',
  1834. columnProp: 'codeDesc',
  1835. headerAlign: 'center',
  1836. align: 'left',
  1837. columnLabel: '模板名称',
  1838. columnHidden: false,
  1839. columnImage: false,
  1840. columnSortable: false,
  1841. sortLv: 0,
  1842. status: true,
  1843. fixed: '',
  1844. columnWidth: 120
  1845. }
  1846. ],
  1847. columnAddressList: [
  1848. {
  1849. userId: this.$store.state.user.name,
  1850. functionId: 103001,
  1851. serialNumber: '103001Table4AddressName',
  1852. tableId: '103001Table4',
  1853. tableName: '联系地址表',
  1854. columnProp: 'addressName',
  1855. headerAlign: 'center',
  1856. align: 'center',
  1857. columnLabel: '联系地址',
  1858. columnHidden: false,
  1859. columnImage: false,
  1860. status: true,
  1861. fixed: '',
  1862. },
  1863. {
  1864. userId: this.$store.state.user.name,
  1865. functionId: 103001,
  1866. serialNumber: '103001Table4ContactStatus',
  1867. tableId: '103001Table4',
  1868. tableName: '联系地址表',
  1869. columnProp: 'addressStatus',
  1870. headerAlign: 'center',
  1871. align: 'center',
  1872. columnLabel: '地址状态',
  1873. columnHidden: false,
  1874. columnImage: false,
  1875. status: true,
  1876. fixed: '',
  1877. },
  1878. ],
  1879. columnContactList: [
  1880. {
  1881. userId: this.$store.state.user.name,
  1882. functionId: 103001,
  1883. serialNumber: '103001Table5ContactName',
  1884. tableId: '103001Table5',
  1885. tableName: '客户联系人表',
  1886. columnProp: 'contactName',
  1887. headerAlign: 'center',
  1888. align: 'center',
  1889. columnLabel: '客户负责人',
  1890. columnHidden: false,
  1891. columnImage: false,
  1892. status: true,
  1893. fixed: '',
  1894. },
  1895. {
  1896. userId: this.$store.state.user.name,
  1897. functionId: 103001,
  1898. serialNumber: '103001Table5ContactPhoneNumber1',
  1899. tableId: '103001Table5',
  1900. tableName: '客户联系人表',
  1901. columnProp: 'contactPhoneNumber1',
  1902. headerAlign: 'center',
  1903. align: 'center',
  1904. columnLabel: '联系方式',
  1905. columnHidden: false,
  1906. columnImage: false,
  1907. status: true,
  1908. fixed: '',
  1909. },
  1910. {
  1911. userId: this.$store.state.user.name,
  1912. functionId: 103001,
  1913. serialNumber: '103001Table5PrimaryContact',
  1914. tableId: '103001Table5',
  1915. tableName: '客户联系人表',
  1916. columnProp: 'primaryContact',
  1917. headerAlign: 'center',
  1918. align: 'center',
  1919. columnLabel: '默认联系人',
  1920. columnHidden: false,
  1921. columnImage: false,
  1922. status: true,
  1923. fixed: '',
  1924. },
  1925. {
  1926. userId: this.$store.state.user.name,
  1927. functionId: 103001,
  1928. serialNumber: '103001Table5ContactStatus',
  1929. tableId: '103001Table5',
  1930. tableName: '客户联系人表',
  1931. columnProp: 'contactStatus',
  1932. headerAlign: 'center',
  1933. align: 'center',
  1934. columnLabel: '人员状态',
  1935. columnHidden: false,
  1936. columnImage: false,
  1937. status: true,
  1938. fixed: '',
  1939. },
  1940. ],
  1941. // ======== 必填规则 ========
  1942. rules: {
  1943. customerNo: [
  1944. {
  1945. required: true,
  1946. message: ' ',
  1947. trigger: ['change','blur']
  1948. }
  1949. ],
  1950. trackerName: [
  1951. {
  1952. required: true,
  1953. message: ' ',
  1954. trigger: ['change','blur']
  1955. }
  1956. ],
  1957. testNumber: [
  1958. {
  1959. required: true,
  1960. message: ' ',
  1961. trigger: ['change','blur']
  1962. }
  1963. ],
  1964. projectId: [
  1965. {
  1966. required: true,
  1967. message: ' ',
  1968. trigger: ['change','blur']
  1969. }
  1970. ],
  1971. engineerName: [
  1972. {
  1973. required: true,
  1974. message: ' ',
  1975. trigger: ['change','blur']
  1976. }
  1977. ],
  1978. partName: [
  1979. {
  1980. required: true,
  1981. message: ' ',
  1982. trigger: ['change','blur']
  1983. }
  1984. ],
  1985. priorityLevel: [
  1986. {
  1987. required: true,
  1988. message: ' ',
  1989. trigger: ['change','blur']
  1990. }
  1991. ],
  1992. requiredDeliveryDate: [
  1993. {
  1994. required: true,
  1995. message: ' ',
  1996. trigger: ['change','blur']
  1997. }
  1998. ],
  1999. testPartNo: [
  2000. {
  2001. required: true,
  2002. message: ' ',
  2003. trigger: ['change','blur']
  2004. }
  2005. ]
  2006. },
  2007. enterResultRules: {
  2008. actualityDeliveryDate: [
  2009. {
  2010. required: true,
  2011. message: ' ',
  2012. trigger: 'change'
  2013. }
  2014. ],
  2015. testResultInformation: [
  2016. {
  2017. required: true,
  2018. message: ' ',
  2019. trigger: 'change'
  2020. }
  2021. ]
  2022. },
  2023. submitResultRules: {
  2024. actualitySendSamplesDate: [
  2025. {
  2026. required: true,
  2027. message: ' ',
  2028. trigger: 'change'
  2029. }
  2030. ],
  2031. sendSamplesMethod: [
  2032. {
  2033. required: true,
  2034. message: ' ',
  2035. trigger: 'change'
  2036. }
  2037. ]
  2038. },
  2039. customerResponseRules: {
  2040. actualityReplyDate: [
  2041. {
  2042. required: true,
  2043. message: ' ',
  2044. trigger: 'change'
  2045. }
  2046. ],
  2047. confirmResults: [
  2048. {
  2049. required: true,
  2050. message: ' ',
  2051. trigger: 'change'
  2052. }
  2053. ],
  2054. confirmBy: [
  2055. {
  2056. required: true,
  2057. message: ' ',
  2058. trigger: 'change'
  2059. }
  2060. ]
  2061. },
  2062. // ======== 复选数据集 ========
  2063. testSelections: [],
  2064. projectPartListSelections: [],
  2065. // ======== 选中的当前行数据 ========
  2066. testCurrentRow: {},
  2067. // ======== 模态框开关控制 ========
  2068. modalFlag: false,
  2069. modalDisableFlag: false,
  2070. enterResultModalFlag: false,
  2071. submitResultModalFlag: false,
  2072. customerResponseModalFlag: false,
  2073. projectPartModelFlag: false,
  2074. // 选择项目弹框开关
  2075. chooseProjectListFlag: false,
  2076. //项目搜索条件
  2077. searchProjectData:{
  2078. site:this.$store.state.user.site,
  2079. projectId:undefined,
  2080. projectName:undefined,
  2081. customerId:undefined,
  2082. },
  2083. // 项目集合
  2084. projectList:[],
  2085. addressModelFlag: false,
  2086. contactModelFlag: false
  2087. }
  2088. },
  2089. mounted () {
  2090. this.$nextTick(() => {
  2091. this.height = window.innerHeight / 2 - 240;
  2092. /*第二个表格高度的动态调整*/
  2093. this.secondHeight = window.innerHeight / 2 - 206;
  2094. })
  2095. },
  2096. created () {
  2097. this.getDataList()
  2098. },
  2099. methods: {
  2100. searchTestPropertiesItem(){
  2101. let params={
  2102. site:this.$store.state.user.site,
  2103. }
  2104. this.copyTestPropertiesList = [];
  2105. searchTestPropertiesItem(params).then(({data}) => {
  2106. if (data && data.code === 0){
  2107. this.copyTestPropertiesList = data.rows;
  2108. }else {
  2109. this.$message.warning(data.msg)
  2110. }
  2111. }).catch((error)=>{
  2112. this.$message.error(error)
  2113. })
  2114. },
  2115. // ======== 分页相关方法 ========
  2116. /**
  2117. * 每页数
  2118. * @param val
  2119. */
  2120. sizeChangeHandle (val) {
  2121. this.pageSize = val
  2122. this.pageIndex = 1
  2123. this.getDataList()
  2124. },
  2125. /**
  2126. * 当前页
  2127. * @param val
  2128. */
  2129. currentChangeHandle (val) {
  2130. this.pageIndex = val
  2131. this.getDataList()
  2132. },
  2133. // ======== 复选框操作相关方法 ========
  2134. /**
  2135. * 选中一行
  2136. * @param row
  2137. */
  2138. projectPartClickRow (row) {
  2139. if (this.modalData.flag === '1' && this.activeTabList.length === 1){
  2140. this.$refs.projectPartTable.clearSelection();
  2141. this.$refs.projectPartTable.toggleRowSelection(row);
  2142. this.confirmProjectPart();
  2143. }
  2144. },
  2145. /**
  2146. * 多选
  2147. * @param val
  2148. */
  2149. selectionProjectPart (val) {
  2150. this.projectPartListSelections = val
  2151. },
  2152. /**
  2153. * 获取唯一值一般都为 id
  2154. * @param row
  2155. * @returns {*}
  2156. */
  2157. getRowKeys (row) {
  2158. return row.testPartNo;
  2159. },
  2160. // 勾选多选框
  2161. selectTestPart(selection,row){
  2162. this.$refs.projectPartTable.clearSelection();
  2163. this.$refs.projectPartTable.toggleRowSelection(row,true)
  2164. },
  2165. selectAllTestPart(selection){
  2166. this.$refs.projectPartTable.clearSelection();
  2167. },
  2168. /**
  2169. * 未知
  2170. * @returns {boolean}
  2171. */
  2172. selectFlag () {
  2173. return true
  2174. },
  2175. // ======== 页签切换相关方法 ========
  2176. /**
  2177. * 列表表格选择替换
  2178. * @param tab
  2179. * @param event
  2180. */
  2181. tabClick (tab, event) {
  2182. // 刷新列表数据
  2183. this.refreshCurrentTabTable()
  2184. },
  2185. dialogTabClick(){
  2186. // if (this.activeTab === 'attribute') {
  2187. // this.getTestProperties();
  2188. // }
  2189. },
  2190. /**
  2191. * 当前值发生变化的时候修改
  2192. * @param row
  2193. * @param oldRow
  2194. */
  2195. changeCurrentRow (row, oldRow) {
  2196. // 判断是否是获取焦点的事件
  2197. if (row) {
  2198. this.testCurrentRow = JSON.parse(JSON.stringify(row))
  2199. // 刷新当前页表
  2200. this.refreshCurrentTabTable()
  2201. }
  2202. },
  2203. getFileContentList(){
  2204. let params = {
  2205. orderRef1:this.$store.state.user.site,
  2206. orderRef2:this.testCurrentRow.testNo
  2207. }
  2208. getFileContentList(params).then(({data})=>{
  2209. if (data && data.code === 0){
  2210. this.testFileList = data.rows;
  2211. }else {
  2212. this.$message.warning(data.msg)
  2213. }
  2214. }).catch((error)=>{
  2215. this.$message.error(error)
  2216. })
  2217. },
  2218. /**
  2219. * 刷新页签的table数据
  2220. */
  2221. refreshCurrentTabTable () {
  2222. if (this.activeTable === 'test_result') {
  2223. this.getTestResult()
  2224. } else if (this.activeTable === 'project_information') {
  2225. this.getProjectInformation()
  2226. } else if (this.activeTable === 'customer_information') {
  2227. this.getCustomerInformation()
  2228. }
  2229. },
  2230. // ======== 列表数据刷新方法 ========
  2231. /**
  2232. * 获取数据列表
  2233. */
  2234. getDataList () {
  2235. this.searchData.limit = this.pageSize
  2236. this.searchData.page = this.pageIndex
  2237. testInformationSearch(this.searchData).then(({data}) => {
  2238. if (data.code === 0) {
  2239. this.dataList = data.page.list
  2240. this.pageIndex = data.page.currPage
  2241. this.pageSize = data.page.pageSize
  2242. this.totalPage = data.page.totalCount
  2243. this.$refs.selectDiv.setLengthAll( this.dataList.length)
  2244. // 判断是否全部存在数据
  2245. if (this.totalPage > 0) {
  2246. //设置选中行
  2247. this.$refs.testTable.setCurrentRow(this.dataList[0])
  2248. // 加载当前的页签的table
  2249. this.refreshCurrentTabTable()
  2250. this.testClickRow(this.dataList[0])
  2251. } else {
  2252. //设置选中行
  2253. this.$refs.testTable.setCurrentRow({})
  2254. // 加载当前的页签的table
  2255. this.refreshCurrentTabTable()
  2256. this.testClickRow({})
  2257. }
  2258. }
  2259. this.dataListLoading = false
  2260. })
  2261. },
  2262. /**
  2263. * 获取测试结果列表
  2264. */
  2265. getTestResult () {
  2266. let tempData = {
  2267. site: this.$store.state.user.site,
  2268. testNo: this.testCurrentRow.testNo
  2269. }
  2270. // 测试结果对象
  2271. testResultSearch(tempData).then(({data}) => {
  2272. if (data && data.code === 0) {
  2273. this.testResultData = data.rows[0]
  2274. } else {
  2275. this.testResultData = {}
  2276. }
  2277. })
  2278. // 附件列表
  2279. this.getFileContentData()
  2280. },
  2281. /**
  2282. * 获取项目信息
  2283. */
  2284. getProjectInformation () {
  2285. let tempData = {
  2286. site: this.$store.state.user.site,
  2287. projectId: this.testCurrentRow.projectId
  2288. }
  2289. // 报价结果对象
  2290. getProjectInformation(tempData).then(({data}) => {
  2291. if (data && data.code === 0) {
  2292. this.projectInformationData = data.rows[0]
  2293. } else {
  2294. this.projectInformationData = {}
  2295. }
  2296. })
  2297. },
  2298. /**
  2299. * 获取客户信息
  2300. */
  2301. getCustomerInformation () {
  2302. let tempData = {
  2303. site: this.$store.state.user.site,
  2304. customerNo: this.testCurrentRow.customerNo
  2305. }
  2306. // 报价结果对象
  2307. getCustomerInformation(tempData).then(({data}) => {
  2308. if (data && data.code === 0) {
  2309. this.customerInformationData = data.rows[0]
  2310. } else {
  2311. this.customerInformationData = {}
  2312. }
  2313. })
  2314. },
  2315. // ======== 新增/编辑模态框 ========
  2316. /**
  2317. * 报价信息新增模态框
  2318. */
  2319. addModal () {
  2320. this.searchTestPropertiesItem();
  2321. this.modalDisableFlag = false
  2322. this.modalFlag = true
  2323. },
  2324. /**
  2325. * 报价信息编辑模态框
  2326. * @param row
  2327. */
  2328. updateModal (row) {
  2329. this.modalData = {
  2330. flag: '2',
  2331. title: '测试申请-'+row.testNo,
  2332. site: row.site,
  2333. testNo: row.testNo,
  2334. customerNo: row.customerNo,
  2335. customerDesc: row.customerDesc,
  2336. projectId: row.projectId,
  2337. projectName: row.projectName,
  2338. tracker: row.tracker,
  2339. doesNeedArtwork:row.doesNeedArtwork,
  2340. artwork:row.artwork,
  2341. artworkName:row.artworkName,
  2342. doesNeedPlanner:row.doesNeedPlanner,
  2343. planner: row.planner,
  2344. plannerName: row.plannerName,
  2345. trackerName: row.trackerName,
  2346. testPartNo: row.testPartNo,
  2347. partName: row.partName,
  2348. engineer: row.engineer,
  2349. printType:row.printType,
  2350. productName:row.productName,
  2351. engineerName: row.engineerName,
  2352. priorityLevel: row.priorityLevel,
  2353. testNumber: row.testNumber,
  2354. requiredDeliveryDate: row.requiredDeliveryDate,
  2355. remark: row.remark,
  2356. technicalConsiderations: row.technicalConsiderations,
  2357. isNeedToSendSamples: row.isNeedToSendSamples,
  2358. sendSamplesAddress: row.sendSamplesAddress,
  2359. consignee: row.consignee,
  2360. consigneeContact: row.consigneeContact,
  2361. actualityDeliveryDate: row.actualityDeliveryDate,
  2362. testResultInformation: row.testResultInformation,
  2363. actualitySendSamplesDate: row.actualitySendSamplesDate,
  2364. sendSamplesMethod: row.sendSamplesMethod,
  2365. deliverGoodsInformation: row.deliverGoodsInformation,
  2366. deliverGoodsRemark: row.deliverGoodsRemark,
  2367. actualityReplyDate: row.actualityReplyDate,
  2368. confirmResults: row.confirmResults,
  2369. confirmBy: row.confirmBy,
  2370. confirmInformation: row.confirmInformation,
  2371. testStatus: row.testStatus,
  2372. testResultStatus: row.testResultStatus,
  2373. nextToDo: row.nextToDo,
  2374. updateBy: this.$store.state.user.name
  2375. }
  2376. this.activeTabList = ['product','process','attribute','partAttribute','file']
  2377. this.$nextTick(()=>{
  2378. this.$refs.dialogSoBom.clearTable();
  2379. })
  2380. this.modalDisableFlag = true
  2381. this.modalFlag = true
  2382. },
  2383. // ======== 新增/编辑/删除方法 ========
  2384. /**
  2385. * 获取项目物料列表
  2386. */
  2387. getProjectPartList () {
  2388. if (!this.modalData.projectId){
  2389. this.projectPartList = [];
  2390. return
  2391. }
  2392. // 先清空缓存选中
  2393. // this.$nextTick(() => this.$refs.projectPartTable.clearSelection())
  2394. // 拿到选中的产品编号
  2395. let projectPartList = this.modalData.testPartNo.split(';')
  2396. this.projectPartData.projectId = this.modalData.projectId;
  2397. // 查询所有项目物料
  2398. getProjectPartList(this.projectPartData).then(({data}) => {
  2399. if (data && data.code === 0) {
  2400. this.projectPartList = data.rows
  2401. this.projectPartList.forEach (val => {
  2402. // 回显选中的项目物料
  2403. if (projectPartList.includes(val.testPartNo)) {
  2404. this.$nextTick(() => this.$refs.projectPartTable.toggleRowSelection(val, true))
  2405. }
  2406. })
  2407. // this.projectPartModelFlag = true
  2408. }else {
  2409. this.$alert(data.msg, '错误', {
  2410. confirmButtonText: '确定'
  2411. })
  2412. }
  2413. })
  2414. },
  2415. /**
  2416. * 确认多选项目物料
  2417. */
  2418. confirmProjectPart () {
  2419. this.modalData.testPartNo = ''
  2420. this.modalData.partName = ''
  2421. for (let i = 0; i < this.projectPartListSelections.length; i++) {
  2422. this.modalData.testPartNo = this.modalData.testPartNo + ";" + this.projectPartListSelections[i].testPartNo
  2423. this.modalData.partName = this.modalData.partName + ";" + this.projectPartListSelections[i].partName
  2424. }
  2425. this.modalData.testPartNo = this.modalData.testPartNo.substring(1)
  2426. this.modalData.partName = this.modalData.partName.substring(1)
  2427. this.projectPartModelFlag = false
  2428. },
  2429. /**
  2430. * 客户信息新增/编辑
  2431. */
  2432. saveData () {
  2433. this.$refs.modalForm.validate((valid) => {
  2434. if (!valid) {
  2435. this.validateDataValue()
  2436. }else {
  2437. // if (this.projectPartListSelections.length <= 0){
  2438. // this.$message.warning('请选择项目料号')
  2439. // return
  2440. // }
  2441. // this.confirmProjectPart();
  2442. if (this.modalData.flag === '1'){
  2443. this.testSoRoutingList = []
  2444. this.testSoBomList = []
  2445. this.testFileList = [];
  2446. this.testPropertiesList = [];
  2447. this.saveTest()
  2448. }else {
  2449. this.updateTest()
  2450. }
  2451. }
  2452. })
  2453. },
  2454. validateDataValue(){
  2455. if (this.modalData.customerNo === '' || this.modalData.customerNo == null) {
  2456. this.$message.warning('请选择客户编码!')
  2457. return
  2458. }
  2459. if (this.modalData.customerDesc === '' || this.modalData.customerDesc == null) {
  2460. this.$message.warning('请选择客户名称!')
  2461. return
  2462. }
  2463. if (this.modalData.tracker === '' || this.modalData.tracker == null) {
  2464. this.$message.warning('请选择跟单员编码!')
  2465. return
  2466. }
  2467. if (this.modalData.trackerName === '' || this.modalData.trackerName == null) {
  2468. this.$message.warning('请选择跟单员名称!')
  2469. return
  2470. }
  2471. if (this.modalData.projectId === '' || this.modalData.projectId == null) {
  2472. this.$message.warning('请选择项目编码!')
  2473. return
  2474. }
  2475. if (this.modalData.projectName === '' || this.modalData.projectName == null) {
  2476. this.$message.warning('请选择项目名称!')
  2477. return
  2478. }
  2479. if (this.modalData.engineer === '' || this.modalData.engineer == null) {
  2480. this.$message.warning('请选择工程师编码!')
  2481. return
  2482. }
  2483. if (this.modalData.engineerName === '' || this.modalData.engineerName == null) {
  2484. this.$message.warning('请选择工程师名称!')
  2485. return
  2486. }
  2487. if (this.modalData.testPartNo === '' || this.modalData.testPartNo == null) {
  2488. this.$message.warning('请选择项目料号!')
  2489. return
  2490. }
  2491. if (this.modalData.partName === '' || this.modalData.partName == null) {
  2492. this.$message.warning('请选择物料名称!')
  2493. return
  2494. }
  2495. if (this.modalData.priorityLevel === '' || this.modalData.priorityLevel == null) {
  2496. this.$message.warning('请选择优先等级!')
  2497. return
  2498. }
  2499. if (!this.modalData.testNumber) {
  2500. this.$message.warning('请输入正确的测试数量!')
  2501. return
  2502. }
  2503. if (this.modalData.requiredDeliveryDate === '' || this.modalData.requiredDeliveryDate == null) {
  2504. this.$message.warning('请输入要求交付日期!')
  2505. return
  2506. }
  2507. },
  2508. saveTest(){
  2509. testInformationSave(this.modalData).then(({data}) => {
  2510. if (data && data.code === 0) {
  2511. this.getDataList();
  2512. this.activeTabList = ['product','process','attribute','partAttribute','file']
  2513. this.activeTab = 'attribute'
  2514. this.modalData.testNo = data.row;
  2515. // this.modalFlag = false
  2516. this.getTestProperties();
  2517. this.$message.success("操作成功")
  2518. } else {
  2519. this.$alert(data.msg, '错误', {
  2520. confirmButtonText: '确定'
  2521. })
  2522. }
  2523. })
  2524. },
  2525. updateTest(){
  2526. testInformationEdit(this.modalData).then(({data}) => {
  2527. if (data && data.code === 0) {
  2528. this.getDataList()
  2529. this.modalFlag = false
  2530. this.$message({
  2531. message: '操作成功',
  2532. type: 'success',
  2533. duration: 1500,
  2534. onClose: () => {}
  2535. })
  2536. } else {
  2537. this.$alert(data.msg, '错误', {
  2538. confirmButtonText: '确定'
  2539. })
  2540. }
  2541. })
  2542. },
  2543. /**
  2544. * 测试信息删除
  2545. */
  2546. delModal () {
  2547. if(this.testSelections.length === 0){
  2548. this.$message.warning('请勾选要删除的测试信息!')
  2549. return
  2550. }
  2551. this.$confirm(`是否删除这 `+ this.testSelections.length +` 条测试信息?`, '提示', {
  2552. confirmButtonText: '确定',
  2553. cancelButtonText: '取消',
  2554. type: 'warning'
  2555. }).then(() => {
  2556. let tempData = {
  2557. informationList: this.testSelections
  2558. }
  2559. testInformationDelete(tempData).then(({data}) => {
  2560. if (data && data.code === 0) {
  2561. this.getDataList()
  2562. this.testSelections = []
  2563. this.$message({
  2564. message: '操作成功',
  2565. type: 'success',
  2566. duration: 1500,
  2567. onClose: () => {}
  2568. })
  2569. } else {
  2570. this.$alert(data.msg, '错误', {
  2571. confirmButtonText: '确定'
  2572. })
  2573. }
  2574. })
  2575. }).catch(() => {
  2576. })
  2577. },
  2578. // ======== 列表操作方法 ========
  2579. /**
  2580. * 单机选中测试信息
  2581. * @param row
  2582. */
  2583. testClickRow (row) {
  2584. // this.$refs.testTable.toggleRowSelection(row)
  2585. this.testCurrentRow = JSON.parse(JSON.stringify(row))
  2586. this.testDetailData = JSON.parse(JSON.stringify(row))
  2587. // 刷新组件
  2588. this.clickTestRow = false;
  2589. this.clickTestRow = true;
  2590. if (row){
  2591. this.selectTestSoBom()
  2592. this.selectTestSoRoutingList()
  2593. this.getPartPropertiesList();
  2594. this.getTestProperties();
  2595. this.getFileContentList()
  2596. }
  2597. },
  2598. /**
  2599. * 复选报价信息
  2600. * @param val
  2601. */
  2602. selectionTest (val) {
  2603. this.testSelections = val
  2604. this.$refs.selectDiv.setLengthselected(this.testSelections.length)
  2605. },
  2606. // ======== 报价结果相关方法 ========
  2607. /**
  2608. * 封装录入方法
  2609. */
  2610. packTestResultModal () {
  2611. // 重置对象
  2612. this.enterResultData = {
  2613. site: this.$store.state.user.site,
  2614. testNo: '',
  2615. actualityDeliveryDate: new Date(),
  2616. testResultInformation: '',
  2617. testResultStatus: 'E',
  2618. fileContentList: [],
  2619. updateBy: this.$store.state.user.name
  2620. }
  2621. this.enterResultData.testNo = this.testCurrentRow.testNo
  2622. // // 获得这些测试号的全部附件
  2623. // this.getFileContentList()
  2624. this.enterResultModalFlag = true
  2625. },
  2626. /**
  2627. * 录入测试结果
  2628. */
  2629. testResultModal () {
  2630. this.packTestResultModal()
  2631. },
  2632. /**
  2633. * 保存测试结果
  2634. */
  2635. saveTestResult () {
  2636. if (this.enterResultData.actualityDeliveryDate === '' || this.enterResultData.actualityDeliveryDate == null) {
  2637. this.$message.warning('请选择实际交付日期!')
  2638. return
  2639. }
  2640. if (this.enterResultData.testResultInformation === '' || this.enterResultData.testResultInformation == null) {
  2641. this.$message.warning('请填写测试结果信息!')
  2642. return
  2643. }
  2644. saveTestResult(this.enterResultData).then(({data}) => {
  2645. if (data && data.code === 0) {
  2646. this.getDataList()
  2647. this.enterResultModalFlag = false
  2648. this.$message({
  2649. message: '操作成功',
  2650. type: 'success',
  2651. duration: 1500,
  2652. onClose: () => {}
  2653. })
  2654. } else {
  2655. this.$alert(data.msg, '错误', {
  2656. confirmButtonText: '确定'
  2657. })
  2658. }
  2659. })
  2660. },
  2661. /**
  2662. * 封装送样方法
  2663. */
  2664. packSubmitTestModal () {
  2665. this.submitResultData = {
  2666. site: this.$store.state.user.site,
  2667. testNo: '',
  2668. actualitySendSamplesDate: new Date(),
  2669. sendSamplesMethod: '',
  2670. deliverGoodsInformation: '',
  2671. deliverGoodsRemark: '',
  2672. testResultStatus: 'S',
  2673. updateBy: this.$store.state.user.name,
  2674. }
  2675. // 获得选中的测试号
  2676. this.submitResultData.testNo = this.testCurrentRow.testNo
  2677. this.submitResultModalFlag = true
  2678. },
  2679. /**
  2680. * 提交送样信息
  2681. */
  2682. submitTestModal () {
  2683. this.packSubmitTestModal()
  2684. },
  2685. /**
  2686. * 保存送样结果
  2687. */
  2688. saveSubmitResult () {
  2689. if (this.submitResultData.actualitySendSamplesDate === '' || this.submitResultData.actualitySendSamplesDate == null) {
  2690. this.$message.warning('请选择实际送样日期!')
  2691. return
  2692. }
  2693. if (this.submitResultData.sendSamplesMethod === '' || this.submitResultData.sendSamplesMethod == null) {
  2694. this.$message.warning('请选择送样方式!')
  2695. return
  2696. }
  2697. saveSubmitResult(this.submitResultData).then(({data}) => {
  2698. if (data && data.code === 0) {
  2699. this.getDataList()
  2700. this.submitResultModalFlag = false
  2701. this.$message({
  2702. message: '操作成功',
  2703. type: 'success',
  2704. duration: 1500,
  2705. onClose: () => {}
  2706. })
  2707. } else {
  2708. this.$alert(data.msg, '错误', {
  2709. confirmButtonText: '确定'
  2710. })
  2711. }
  2712. })
  2713. },
  2714. /**
  2715. * 封装回复方法
  2716. */
  2717. packCustomerResponseModal () {
  2718. this.customerResponseData = {
  2719. site: this.$store.state.user.site,
  2720. testNo: '',
  2721. actualityReplyDate: new Date(),
  2722. confirmResults: '接受',
  2723. confirmBy: '',
  2724. confirmInformation: '',
  2725. testResultStatus: 'R',
  2726. updateBy: this.$store.state.user.name
  2727. }
  2728. // 获得选中的测试号
  2729. this.customerResponseData.testNo = this.testCurrentRow.testNo
  2730. this.customerResponseModalFlag = true
  2731. },
  2732. /**
  2733. * 客户回复
  2734. */
  2735. customerResponseModal () {
  2736. this.packCustomerResponseModal()
  2737. },
  2738. /**
  2739. * 保存客户回复
  2740. */
  2741. saveCustomerResponse () {
  2742. if (this.customerResponseData.actualityReplyDate === '' || this.customerResponseData.actualityReplyDate == null) {
  2743. this.$message.warning('请选择实际回复日期!')
  2744. return
  2745. }
  2746. if (this.customerResponseData.confirmResults === '' || this.customerResponseData.confirmResults == null) {
  2747. this.$message.warning('请选择客户确认结果!')
  2748. return
  2749. }
  2750. if (this.customerResponseData.confirmBy === '' || this.customerResponseData.confirmBy == null) {
  2751. this.$message.warning('请填写客户确认人!')
  2752. return
  2753. }
  2754. saveCustomerResponse(this.customerResponseData).then(({data}) => {
  2755. if (data && data.code === 0) {
  2756. this.getDataList()
  2757. this.customerResponseModalFlag = false
  2758. this.$message({
  2759. message: '操作成功',
  2760. type: 'success',
  2761. duration: 1500,
  2762. onClose: () => {}
  2763. })
  2764. } else {
  2765. this.$alert(data.msg, '错误', {
  2766. confirmButtonText: '确定'
  2767. })
  2768. }
  2769. })
  2770. },
  2771. // ======== 报价单附件的相关方法 ========
  2772. /**
  2773. * 获取报价单附件列表
  2774. */
  2775. getFileContentData () {
  2776. let currentData = {
  2777. orderRef1: this.$store.state.user.site,
  2778. orderRef2: this.testCurrentRow.testNo
  2779. }
  2780. getFileContentList(currentData).then(({data}) => {
  2781. if (data && data.code === 0) {
  2782. this.fileContentList = data.rows
  2783. } else {
  2784. this.fileContentList = []
  2785. }
  2786. })
  2787. },
  2788. /**
  2789. * 上传文件
  2790. */
  2791. uploadFile () {
  2792. let currentData = {
  2793. titleCon: '测试附件上传',
  2794. site: this.$store.state.user.site,
  2795. createBy: this.$store.state.user.name,
  2796. testNo: this.enterResultData.testNo,
  2797. fileRemark: '',
  2798. folder: 'testFile'
  2799. }
  2800. //打开组件 去做新增业务
  2801. this.$nextTick(() => {
  2802. this.$refs.testUploadFile.init(currentData)
  2803. })
  2804. },
  2805. /**
  2806. * 文件删除
  2807. * @param row
  2808. */
  2809. deleteFile (row) {
  2810. this.$confirm('确定要删除此文件?', '提示', {
  2811. confirmButtonText: '确定',
  2812. cancelButtonText: '取消',
  2813. type: 'warning'
  2814. }).then(() => {
  2815. deleteTestFile(row).then(({data}) => {
  2816. if (data && data.code === 0) {
  2817. this.getFileContentList()
  2818. this.$message({
  2819. message: '操作成功',
  2820. type: 'success',
  2821. duration: 1500,
  2822. onClose: () => {}
  2823. })
  2824. } else {
  2825. this.$alert(data.msg, '错误', {
  2826. confirmButtonText: '确定'
  2827. })
  2828. }
  2829. })
  2830. }).catch(() => {
  2831. })
  2832. },
  2833. /**
  2834. * 文件下载
  2835. * @param row
  2836. */
  2837. downloadFile (row) {
  2838. downLoadQuotationFile(row).then(({data}) => {
  2839. // 不限制文件下载类型
  2840. const blob = new Blob([data], {type:'application/octet-stream;charset=utf-8'})
  2841. // 下载文件名称
  2842. const fileName = row.fileName
  2843. // a标签下载
  2844. const linkNode = document.createElement('a')
  2845. linkNode.download = fileName // a标签的download属性规定下载文件的名称
  2846. linkNode.style.display = 'none'
  2847. linkNode.href = URL.createObjectURL(blob) // 生成一个Blob URL
  2848. document.body.appendChild(linkNode)
  2849. linkNode.click() // 模拟在按钮上的一次鼠标单击
  2850. URL.revokeObjectURL(linkNode.href) // 释放URL 对象
  2851. document.body.removeChild(linkNode)
  2852. })
  2853. },
  2854. /**
  2855. * 获取该客户的客户地址
  2856. */
  2857. getCustomerAddressList () {
  2858. let tempData = {
  2859. site: this.$store.state.user.site,
  2860. customerNo: this.modalData.customerNo,
  2861. addressType: 'A'
  2862. }
  2863. customerAddressSearch(tempData).then(({data}) => {
  2864. if (data && data.code === 0) {
  2865. this.addressList = data.rows
  2866. this.addressModelFlag = true
  2867. } else {
  2868. this.addressList = []
  2869. }
  2870. })
  2871. },
  2872. // 双击选择负责人
  2873. getAddressData (row) {
  2874. this.modalData.sendSamplesAddress = row.addressName
  2875. this.addressModelFlag = false
  2876. },
  2877. /**
  2878. * 获取该客户的客户负责人
  2879. */
  2880. getCustomerContactList () {
  2881. let tempData = {
  2882. site: this.$store.state.user.site,
  2883. customerNo: this.modalData.customerNo
  2884. }
  2885. customerContactSearch(tempData).then(({data}) => {
  2886. if (data && data.code === 0) {
  2887. this.contactList = data.rows
  2888. this.contactModelFlag = true
  2889. } else {
  2890. this.contactList = []
  2891. }
  2892. })
  2893. },
  2894. // 双击选择负责人
  2895. getContactData (row) {
  2896. this.modalData.consignee = row.contactName
  2897. this.modalData.consigneeContact = row.contactPhoneNumber1
  2898. this.contactModelFlag = false
  2899. },
  2900. // ======== chooseList相关方法 ========
  2901. /**
  2902. * 获取基础数据列表S
  2903. * @param val
  2904. * @param type
  2905. */
  2906. getBaseList (val, type) {
  2907. this.tagNo = val
  2908. this.tagNo1 = type
  2909. this.$nextTick(() => {
  2910. let strVal = ''
  2911. let conSql = ''
  2912. if (val === 102) {
  2913. if(type === 1) {
  2914. strVal = this.modalData.customerNo
  2915. }
  2916. }
  2917. // if (val === 103) {
  2918. // if(type === 1) {
  2919. // strVal = this.modalData.tracker
  2920. // }
  2921. // if(type === 2) {
  2922. // strVal = this.modalData.engineer
  2923. // }
  2924. // }
  2925. if (val === 104) {
  2926. if(type === 1) {
  2927. strVal = this.modalData.projectId
  2928. }
  2929. }
  2930. if (val === 2000) {
  2931. strVal = this.modalData.trackerName
  2932. conSql = " and b.site = '" + this.$store.state.user.site + "'"
  2933. }
  2934. if (val === 2001) {
  2935. strVal = this.modalData.engineerName
  2936. conSql = " and b.site = '" + this.$store.state.user.site + "'"
  2937. }
  2938. if (val === 2003) {
  2939. strVal = this.modalData.artworkName
  2940. conSql = " and b.site = '" + this.$store.state.user.site + "'"
  2941. }
  2942. if (val === 2004) {
  2943. strVal = this.modalData.plannerName
  2944. conSql = " and b.site = '" + this.$store.state.user.site + "'"
  2945. }
  2946. this.$refs.baseList.init(val, strVal, conSql)
  2947. })
  2948. },
  2949. /**
  2950. * 列表方法的回调
  2951. * @param val
  2952. */
  2953. getBaseData (val) {
  2954. if (this.tagNo === 102) {
  2955. if(this.tagNo1 === 1) {
  2956. if (val.Customer_no === this.modalData.customerNo) {
  2957. return
  2958. }
  2959. this.modalData.customerNo = val.Customer_no
  2960. this.modalData.customerDesc = val.Customer_desc
  2961. this.modalData.projectId = ''
  2962. this.modalData.projectName = ''
  2963. this.projectPartList = [];
  2964. }
  2965. }
  2966. // if (this.tagNo === 103) {
  2967. // if(this.tagNo1 === 1) {
  2968. // this.modalData.tracker = val.username
  2969. // this.modalData.trackerName = val.user_display
  2970. // }
  2971. // if(this.tagNo1 === 2) {
  2972. // this.modalData.engineer = val.username
  2973. // this.modalData.engineerName = val.user_display
  2974. // }
  2975. // }
  2976. if (this.tagNo === 104) {
  2977. if(this.tagNo1 === 1) {
  2978. this.modalData.projectId = val.project_id
  2979. this.modalData.projectName = val.project_name
  2980. this.getProjectPartList();
  2981. }
  2982. }
  2983. if (this.tagNo === 2000) {
  2984. this.modalData.tracker = val.username
  2985. this.modalData.trackerName = val.user_display
  2986. }
  2987. if (this.tagNo === 2001) {
  2988. this.modalData.engineer = val.username
  2989. this.modalData.engineerName = val.user_display
  2990. }
  2991. if (this.tagNo === 2003){
  2992. this.modalData.artwork = val.username;
  2993. this.modalData.artworkName = val.user_display;
  2994. }
  2995. if (this.tagNo === 2004){
  2996. this.modalData.planner = val.username;
  2997. this.modalData.plannerName = val.user_display;
  2998. }
  2999. },
  3000. // ======== 导出相关方法 ========
  3001. /**
  3002. * 导出excel
  3003. */
  3004. async createExportData () {
  3005. this.searchData.limit = -1
  3006. this.searchData.page = 1
  3007. await testInformationSearch(this.searchData).then(({data}) => {
  3008. this.resultList = data.page.list
  3009. })
  3010. return this.resultList
  3011. },
  3012. startDownload () {
  3013. },
  3014. finishDownload () {
  3015. },
  3016. fields () {
  3017. let json = '{'
  3018. this.columnList.forEach((item, index) => {
  3019. if (index == this.columnList.length - 1) {
  3020. json += '"' + item.columnLabel + '"' + ':' + '"' + item.columnProp + '"'
  3021. } else {
  3022. json += '"' + item.columnLabel + '"' + ':' + '"' + item.columnProp + '"' + ','
  3023. }
  3024. })
  3025. json += '}'
  3026. let s = eval('(' + json + ')')
  3027. return s
  3028. },
  3029. closeModalDiaLog () {
  3030. this.$refs.modalForm.resetFields();
  3031. this.modalData = {
  3032. flag: '1',
  3033. title: '测试申请',
  3034. site: this.$store.state.user.site,
  3035. testNo: '',
  3036. customerNo: '',
  3037. customerDesc: '',
  3038. projectId: '',
  3039. doesNeedArtwork:'',
  3040. artwork:'',
  3041. artworkName:'',
  3042. doesNeedPlanner:'',
  3043. planner: '',
  3044. plannerName: '',
  3045. projectName: '',
  3046. tracker: '',
  3047. trackerName: '',
  3048. testPartNo: '',
  3049. partName: '',
  3050. engineer: '',
  3051. engineerName: '',
  3052. printType:'',
  3053. productName:'',
  3054. priorityLevel: '一般',
  3055. testNumber: 1,
  3056. requiredDeliveryDate: '',
  3057. remark: '',
  3058. technicalConsiderations: '',
  3059. isNeedToSendSamples: '',
  3060. sendSamplesAddress: '',
  3061. consignee: '',
  3062. consigneeContact: '',
  3063. actualityDeliveryDate: '',
  3064. testResultInformation: '',
  3065. actualitySendSamplesDate: '',
  3066. sendSamplesMethod: '',
  3067. deliverGoodsInformation: '',
  3068. deliverGoodsRemark: '',
  3069. actualityReplyDate: '',
  3070. confirmResults: '',
  3071. confirmBy: '',
  3072. confirmInformation: '',
  3073. testStatus: '草稿',
  3074. testResultStatus: 'B',
  3075. nextToDo: '',
  3076. createDate: '',
  3077. createBy: this.$store.state.user.name,
  3078. updateDate: '',
  3079. updateBy: ''
  3080. }
  3081. this.activeTab = 'attribute';
  3082. this.activeTabList = ['attribute']
  3083. this.dialogProperties = [];
  3084. // this.testPropertiesList = this.copyTestPropertiesList;
  3085. this.copyTestPropertiesList = [];
  3086. },
  3087. checkSelectable(row,index){
  3088. if (this.modalData.flag === '1' && this.activeTabList.length === 1){
  3089. return true
  3090. }else {
  3091. return false
  3092. }
  3093. },
  3094. projectClickRow(row){
  3095. this.modalData.projectId = row.projectId
  3096. this.modalData.projectName = row.projectName
  3097. this.getProjectPartList()
  3098. this.chooseProjectListFlag = false
  3099. },
  3100. // 查询searchProjectInfoList
  3101. searchProjectInfoList(){
  3102. this.projectList = [];
  3103. this.searchProjectData.customerId = this.modalData.customerNo
  3104. searchProjectInfoList(this.searchProjectData).then(({data})=>{
  3105. if (data && data.code === 0) {
  3106. this.projectList = data.rows
  3107. } else {
  3108. this.projectList = []
  3109. }
  3110. }).catch((error)=>{
  3111. this.$message.error('查询项目信息失败')
  3112. })
  3113. },
  3114. closeProjectInfoDialog(){
  3115. this.$refs.closeProjectInfoForm.resetFields();
  3116. this.searchProjectData={
  3117. site:this.$store.state.user.site,
  3118. projectId:undefined,
  3119. projectName:undefined,
  3120. customerId:undefined,
  3121. }
  3122. },
  3123. rowStyle({row}){
  3124. if (this.testCurrentRow.testNo === row.testNo) {
  3125. return { 'background-color': '#E8F7F6', cursor: 'pointer' };
  3126. }
  3127. },
  3128. selectTestSoBom(){
  3129. let params = {
  3130. testNo:this.modalData.testNo?this.modalData.testNo:this.testCurrentRow.testNo,
  3131. site:this.$store.state.user.site
  3132. }
  3133. selectTestSoBom(params).then(({data})=>{
  3134. if (data && data.code === 0 ){
  3135. this.testSoBomList = data.rows
  3136. }
  3137. })
  3138. },
  3139. selectTestSoRoutingList(){
  3140. let params = {
  3141. site:this.$store.state.user.site,
  3142. testNo:this.modalData.testNo?this.modalData.testNo:this.testCurrentRow.testNo,
  3143. }
  3144. selectTestSoRoutingList(params).then(({data})=>{
  3145. if (data && data.code === 0){
  3146. this.testSoRoutingList = data.rows
  3147. }
  3148. })
  3149. },
  3150. getTestProperties(){
  3151. let params = {
  3152. site:this.$store.state.user.site,
  3153. testNo: this.testCurrentRow.testNo
  3154. }
  3155. getTestPropertiesList(params).then(({data})=>{
  3156. if (data && data.code === 0){
  3157. this.testPropertiesList = data.rows;
  3158. if (this.modalFlag){
  3159. this.copyTestPropertiesList = data.rows;
  3160. }
  3161. }else {
  3162. this.$message.warning(data.msg)
  3163. }
  3164. }).catch((error)=>{
  3165. this.$message.error(error)
  3166. })
  3167. },
  3168. getPartPropertiesList(){
  3169. let params = {
  3170. site:this.$store.state.user.site,
  3171. testPartNo: this.testCurrentRow.testPartNo
  3172. }
  3173. this.dialogProperties = [];
  3174. partPropertiesList(params).then(({data})=>{
  3175. if (data && data.code === 0){
  3176. if (this.modalData.flag !== '1'){
  3177. this.dialogProperties = data.rows
  3178. }
  3179. this.attributeList = data.rows
  3180. }else {
  3181. this.$message.warning(data.msg)
  3182. }
  3183. }).catch((error)=>{
  3184. this.$message.error(error)
  3185. })
  3186. },
  3187. updateModalStatus(row,status){
  3188. let params = JSON.parse(JSON.stringify(row))
  3189. params.testResultStatus = status;
  3190. params.testStatus = '下达';
  3191. testInformationEdit(params).then(({data}) => {
  3192. if (data && data.code === 0) {
  3193. this.getDataList()
  3194. this.$message.success('测试单已下达')
  3195. } else {
  3196. this.$alert(data.msg, '错误', {
  3197. confirmButtonText: '确定'
  3198. })
  3199. }
  3200. })
  3201. },
  3202. partClickRow(row){
  3203. this.modalData.testPartNo = row.testPartNo
  3204. this.modalData.partName = row.partDesc
  3205. this.dialogProperties = [];
  3206. let params = {
  3207. site:this.$store.state.user.site,
  3208. testPartNo:this.modalData.testPartNo
  3209. }
  3210. partPropertiesList(params).then(({data})=>{
  3211. if (data && data.code === 0){
  3212. this.dialogProperties = data.rows
  3213. }else {
  3214. this.$message.warning(data.msg)
  3215. }
  3216. }).catch((error)=>{
  3217. this.$message.error(error)
  3218. })
  3219. this.projectPartModelFlag = false
  3220. }
  3221. }
  3222. }
  3223. </script>
  3224. <style scoped lang="scss">
  3225. /deep/ .customer-tab .el-tabs__content {
  3226. padding: 0px !important;
  3227. height: 459px;
  3228. }
  3229. .right /deep/ .el-input__inner{
  3230. text-align: right;
  3231. }
  3232. /deep/ .inlineNumber input::-webkit-outer-spin-button,
  3233. /deep/ .inlineNumber input::-webkit-inner-spin-button {
  3234. -webkit-appearance: none;
  3235. }
  3236. /deep/ .inlineNumber input[type="number"]{
  3237. -moz-appearance: textfield;
  3238. padding-right: 5px !important;
  3239. }
  3240. /deep/ .el-table .cellClass .cell .el-checkbox__inner{
  3241. display: none;
  3242. position: relative;
  3243. }
  3244. /deep/ .el-table .cellClass .cell:before{
  3245. content: "";
  3246. position: absolute;
  3247. }
  3248. </style>