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.

2557 lines
92 KiB

  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. <el-select v-model="searchData.priorityLevel" style="width: 120px">
  54. <el-option label="全部" value=""></el-option>
  55. <el-option label="一般" value="一般"></el-option>
  56. <el-option label="紧急" value="紧急"></el-option>
  57. <el-option label="重要" value="重要"></el-option>
  58. </el-select>
  59. </el-form-item>
  60. <el-form-item :label="'状态'">
  61. <el-select v-model="searchData.testStatus" style="width: 120px">
  62. <el-option label="全部" value=""></el-option>
  63. <el-option label="草稿" value="草稿"></el-option>
  64. <el-option label="下达" value="下达"></el-option>
  65. </el-select>
  66. </el-form-item>
  67. <el-form-item :label="' '">
  68. <el-button @click="getDataList()">查询</el-button>
  69. <el-button type="primary" @click="addModal()">新增</el-button>
  70. <el-button type="primary" @click="delModal()">删除</el-button>
  71. <download-excel
  72. :fields="fields()"
  73. :data="exportData"
  74. type="xls"
  75. :name="exportName"
  76. :header="exportHeader"
  77. :footer="exportFooter"
  78. :fetch="createExportData"
  79. :before-generate="startDownload"
  80. :before-finish="finishDownload"
  81. worksheet="导出信息"
  82. class="el-button el-button--primary el-button--medium">
  83. {{ "导出" }}
  84. </download-excel>
  85. </el-form-item>
  86. </el-form>
  87. <!-- 测试列表 -->
  88. <el-table
  89. :height="height"
  90. :data="dataList"
  91. border
  92. ref="testTable"
  93. @row-click="testClickRow"
  94. @selection-change="selectionTest"
  95. @current-change="changeCurrentRow"
  96. v-loading="dataListLoading"
  97. style="width: 100%;">
  98. <el-table-column
  99. type="selection"
  100. header-align="center"
  101. align="center"
  102. :selectable="selectFlag"
  103. width="50">
  104. </el-table-column>
  105. <el-table-column
  106. v-for="(item,index) in columnList" :key="index"
  107. :sortable="item.columnSortable"
  108. :prop="item.columnProp"
  109. :header-align="item.headerAlign"
  110. :show-overflow-tooltip="item.showOverflowTooltip"
  111. :align="item.align"
  112. :fixed="item.fixed === ''?false:item.fixed"
  113. :min-width="item.columnWidth"
  114. :label="item.columnLabel">
  115. <template slot-scope="scope">
  116. <span v-if="!item.columnHidden">{{ scope.row[item.columnProp] }}</span>
  117. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
  118. </template>
  119. </el-table-column>
  120. <el-table-column
  121. fixed="right"
  122. header-align="center"
  123. align="center"
  124. width="100"
  125. label="操作">
  126. <template slot-scope="scope">
  127. <a type="text" size="small" @click="updateModal(scope.row)">编辑</a>
  128. </template>
  129. </el-table-column>
  130. </el-table>
  131. <selectDiv ref="selectDiv"></selectDiv>
  132. <!-- 分页插件 -->
  133. <el-pagination style="margin-top: 0px"
  134. @size-change="sizeChangeHandle"
  135. @current-change="currentChangeHandle"
  136. :current-page="pageIndex"
  137. :page-sizes="[20, 50, 100, 200, 500]"
  138. :page-size="pageSize"
  139. :total="totalPage"
  140. layout="total, sizes, prev, pager, next, jumper">
  141. </el-pagination>
  142. <!-- 测试模态框 -->
  143. <el-dialog :title="modalData.title" @close="closeModalDiaLog" @open="getProjectPartList()" :close-on-click-modal="false" v-drag :visible.sync="modalFlag" top="10vh" width="60%">
  144. <el-form label-position="top" ref="modalForm" :model="modalData" :rules="rules">
  145. <el-row :gutter="15">
  146. <el-col :span="8">
  147. <el-row :gutter="10">
  148. <el-col :span="10">
  149. <el-form-item prop="customerNo" label="客户编码">
  150. <span slot="label" v-if="modalData.flag === '1'" @click="getBaseList(102,1)"><a herf="#">客户编码</a></span>
  151. <el-input :disabled="modalData.flag !== '1'" v-model="modalData.customerNo" :readonly="true"></el-input>
  152. </el-form-item>
  153. </el-col>
  154. <el-col :span="14">
  155. <el-form-item label=" ">
  156. <el-input disabled v-model="modalData.customerDesc"></el-input>
  157. </el-form-item>
  158. </el-col>
  159. </el-row>
  160. </el-col>
  161. <el-col :span="4">
  162. <el-form-item label="测试数量" prop="testNumber">
  163. <div class="right">
  164. <el-input type="number" class="inlineNumber" v-model="modalData.testNumber" @input="modalData.testNumber = modalData.testNumber.replace(/^(0+)|[^\d]+/g, '')"></el-input>
  165. </div>
  166. </el-form-item>
  167. </el-col>
  168. <el-col :span="4">
  169. <el-form-item label="优先等级" prop="priorityLevel">
  170. <el-select v-model="modalData.priorityLevel" style="width: 100%">
  171. <el-option label="一般" value="一般"></el-option>
  172. <el-option label="紧急" value="紧急"></el-option>
  173. <el-option label="重要" value="重要"></el-option>
  174. </el-select>
  175. </el-form-item>
  176. </el-col>
  177. <el-col :span="4">
  178. <el-form-item label="要求交付日期" prop="requiredDeliveryDate">
  179. <el-date-picker v-model="modalData.requiredDeliveryDate" style="width: 100%" type="date" value-format="yyyy-MM-dd" placeholder="选择日期"></el-date-picker>
  180. </el-form-item>
  181. </el-col>
  182. <el-col :span="4">
  183. <el-form-item prop="trackerName">
  184. <span slot="label" @click="getBaseList(103,1)"><a herf="#">跟单员</a></span>
  185. <el-input v-model="modalData.trackerName"></el-input>
  186. </el-form-item>
  187. </el-col>
  188. </el-row>
  189. <el-row :gutter="15">
  190. <el-col :span="8">
  191. <el-row :gutter="10">
  192. <el-col :span="10">
  193. <el-form-item prop="projectId" label="项目编码">
  194. <span slot="label" v-if="modalData.customerNo && modalData.flag === '1'" @click="getBaseList(104,1)"><a herf="#">项目编码</a></span>
  195. <el-input :disabled="!modalData.customerNo || modalData.flag !== '1'" :readonly="true" v-model="modalData.projectId"></el-input>
  196. </el-form-item>
  197. </el-col>
  198. <el-col :span="14">
  199. <el-form-item label=" ">
  200. <el-input disabled v-model="modalData.projectName"></el-input>
  201. </el-form-item>
  202. </el-col>
  203. </el-row>
  204. </el-col>
  205. <el-col :span="4">
  206. <el-form-item label="收货人">
  207. <el-input v-model="modalData.consignee"></el-input>
  208. </el-form-item>
  209. </el-col>
  210. <el-col :span="4">
  211. <el-form-item label="收货人联系方式">
  212. <el-input v-model="modalData.consigneeContact"></el-input>
  213. </el-form-item>
  214. </el-col>
  215. <el-col :span="4">
  216. <el-form-item label=" ">
  217. <el-checkbox v-model="modalData.isNeedToSendSamples" true-label="Y">是否需要送样</el-checkbox>
  218. </el-form-item>
  219. </el-col>
  220. <el-col :span="4">
  221. <el-form-item prop="engineerName">
  222. <span slot="label" @click="getBaseList(103,2)"><a herf="#">工程师</a></span>
  223. <el-input v-model="modalData.engineerName"></el-input>
  224. </el-form-item>
  225. </el-col>
  226. </el-row>
  227. <el-row :gutter="15">
  228. <el-col :span="12">
  229. <el-form-item label="送样地址" style="height: 90px">
  230. <el-input type="textarea" v-model="modalData.sendSamplesAddress" :rows="3" resize='none'></el-input>
  231. </el-form-item>
  232. </el-col>
  233. <el-col :span="12">
  234. <el-form-item label="备注" style="height: 90px">
  235. <el-input type="textarea" v-model="modalData.remark" :rows="3" resize='none'></el-input>
  236. </el-form-item>
  237. </el-col>
  238. <el-col :span="24">
  239. <el-form-item label="技术注意事项" style="height: 90px">
  240. <el-input type="textarea" v-model="modalData.technicalConsiderations" :rows="3" resize='none' show-word-limit></el-input>
  241. </el-form-item>
  242. </el-col>
  243. </el-row>
  244. </el-form>
  245. <div class="rq">
  246. <el-form :inline="true" label-position="top" :model="projectPartData">
  247. <el-form-item label="产品编码">
  248. <el-input v-model="projectPartData.testPartNo" clearable style="width: 120px"></el-input>
  249. </el-form-item>
  250. <el-form-item label="产品名称">
  251. <el-input v-model="projectPartData.partName" clearable style="width: 120px"></el-input>
  252. </el-form-item>
  253. <el-form-item label=" " v-if="this.modalData.projectId">
  254. <el-button type="primary" @click="getProjectPartList()">查询</el-button>
  255. </el-form-item>
  256. </el-form>
  257. <el-table
  258. :height="300"
  259. :data="projectPartList"
  260. ref="projectPartTable"
  261. @row-click="projectPartClickRow"
  262. @selection-change="selectionProjectPart"
  263. :row-key="getRowKeys"
  264. border
  265. v-loading="dataListLoading"
  266. style="width: 100%;">
  267. <el-table-column
  268. type="selection"
  269. header-align="center"
  270. align="center"
  271. :selectable="checkSelectable"
  272. :reserve-selection="true"
  273. width="50">
  274. </el-table-column>
  275. <el-table-column
  276. v-for="(item,index) in projectPartDetailList" :key="index"
  277. :sortable="item.columnSortable"
  278. :prop="item.columnProp"
  279. :header-align="item.headerAlign"
  280. :show-overflow-tooltip="item.showOverflowTooltip"
  281. :align="item.align"
  282. :fixed="item.fixed===''?false:item.fixed"
  283. :min-width="item.columnWidth"
  284. :label="item.columnLabel">
  285. <template slot-scope="scope">
  286. <span v-if="!item.columnHidden">{{scope.row[item.columnProp]}}</span>
  287. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
  288. </template>
  289. </el-table-column>
  290. </el-table>
  291. </div>
  292. <el-footer style="height:30px;text-align:center;margin-top: 8px">
  293. <el-button type="primary" @click="saveData()">保存</el-button>
  294. <el-button type="primary" @click="modalFlag = false">关闭</el-button>
  295. </el-footer>
  296. </el-dialog>
  297. <!-- 录入测试结果模态框 -->
  298. <el-dialog title="录入测试结果" :close-on-click-modal="false" v-drag :visible.sync="enterResultModalFlag" width="785px">
  299. <el-form :inline="true" label-position="top" :model="enterResultData" :rules="enterResultRules" style="margin-left: 0px;margin-top: 10px;">
  300. <el-form-item label="实际交付日期" prop="actualityDeliveryDate" :rules="enterResultRules.actualityDeliveryDate">
  301. <el-date-picker v-model="enterResultData.actualityDeliveryDate" type="date" value-format="yyyy-MM-dd" placeholder="请选择日期" style="width: 200px"></el-date-picker>
  302. </el-form-item>
  303. </el-form>
  304. <el-form :inline="true" label-position="top" :model="enterResultData" :rules="enterResultRules" style="margin-left:0px;margin-top: 5px;">
  305. <el-form-item label="测试结果信息" prop="testResultInformation" :rules="enterResultRules.testResultInformation">
  306. <el-input type="textarea" v-model="enterResultData.testResultInformation" :rows="3" resize='none' show-word-limit style="width: 500px;height: 30px"></el-input>
  307. </el-form-item>
  308. </el-form>
  309. <el-form :inline="true" label-position="top" :model="enterResultData" style="margin-left: 0px;margin-top: 50px;">
  310. <el-form :inline="true" label-position="top" style="margin-top: 5px">
  311. <el-button type="primary" @click="uploadFile()">上传文件</el-button>
  312. </el-form>
  313. <el-table
  314. :height="200"
  315. :data="fileContentList"
  316. border
  317. v-loading="dataListLoading"
  318. style="width: 100%">
  319. <el-table-column
  320. v-for="(item,index) in fileColumnList" :key="index"
  321. :sortable="item.columnSortable"
  322. :prop="item.columnProp"
  323. :header-align="item.headerAlign"
  324. :show-overflow-tooltip="item.showOverflowTooltip"
  325. :align="item.align"
  326. :fixed="item.fixed===''?false:item.fixed"
  327. :min-width="item.columnWidth"
  328. :label="item.columnLabel">
  329. <template slot-scope="scope">
  330. <span v-if="!item.columnHidden">{{scope.row[item.columnProp]}}</span>
  331. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
  332. </template>
  333. </el-table-column>
  334. <el-table-column
  335. fixed="right"
  336. header-align="center"
  337. align="center"
  338. width="100"
  339. label="操作">
  340. <template slot-scope="scope">
  341. <a @click="deleteFile(scope.row)">删除</a>
  342. </template>
  343. </el-table-column>
  344. </el-table>
  345. </el-form>
  346. <el-footer style="height:35px;margin-top: 10px;text-align:center">
  347. <el-button type="primary" @click="saveTestResult()">保存</el-button>
  348. <el-button type="primary" @click="enterResultModalFlag = false">关闭</el-button>
  349. </el-footer>
  350. </el-dialog>
  351. <!-- 录入送样信息模态框 -->
  352. <el-dialog title="录入送样信息" :close-on-click-modal="false" v-drag :visible.sync="submitResultModalFlag" width="620px">
  353. <el-form :inline="true" label-position="top" :model="submitResultData" :rules="submitResultRules" style="margin-left: 0px;margin-top: 10px;">
  354. <el-form-item label="实际送样日期" prop="actualitySendSamplesDate" :rules="submitResultRules.actualitySendSamplesDate">
  355. <el-date-picker v-model="submitResultData.actualitySendSamplesDate" type="date" value-format="yyyy-MM-dd" placeholder="请选择日期" style="width: 200px"></el-date-picker>
  356. </el-form-item>
  357. <el-form-item label="送样方式" prop="sendSamplesMethod" :rules="submitResultRules.sendSamplesMethod">
  358. <el-select v-model="submitResultData.sendSamplesMethod" style="width: 221px">
  359. <el-option label="客户自提" value="客户自提"></el-option>
  360. <el-option label="人员带货" value="人员带货"></el-option>
  361. <el-option label="其它" value="其它"></el-option>
  362. </el-select>
  363. </el-form-item>
  364. <el-form-item label="送货信息">
  365. <el-input v-model="submitResultData.deliverGoodsInformation" style="width: 221px"></el-input>
  366. </el-form-item>
  367. </el-form>
  368. <el-form :inline="true" label-position="top" :model="submitResultData" style="margin-left:0px;margin-top: 5px;">
  369. <el-form-item label="送货备注">
  370. <el-input type="textarea" v-model="submitResultData.deliverGoodsRemark" :rows="3" resize='none' show-word-limit style="width: 456px;height: 30px"></el-input>
  371. </el-form-item>
  372. </el-form>
  373. <el-footer style="height:35px;margin-top: 50px;text-align:center">
  374. <el-button type="primary" @click="saveSubmitResult()">保存</el-button>
  375. <el-button type="primary" @click="submitResultModalFlag = false">关闭</el-button>
  376. </el-footer>
  377. </el-dialog>
  378. <!-- 客户回复模态框 -->
  379. <el-dialog title="客户回复" :close-on-click-modal="false" v-drag :visible.sync="customerResponseModalFlag" width="620px">
  380. <el-form :inline="true" label-position="top" :model="customerResponseData" :rules="customerResponseRules" style="margin-left: 0px;margin-top: 10px;">
  381. <el-form-item label="实际回复日期" prop="actualityReplyDate" :rules="customerResponseRules.actualityReplyDate">
  382. <el-date-picker v-model="customerResponseData.actualityReplyDate" type="date" value-format="yyyy-MM-dd" placeholder="请选择日期" style="width: 185px"></el-date-picker>
  383. </el-form-item>
  384. <el-form-item label="客户确认结果" prop="confirmResults" :rules="customerResponseRules.confirmResults">
  385. <el-select v-model="customerResponseData.confirmResults" style="width: 185px">
  386. <el-option label="接受" value="接受"></el-option>
  387. <el-option label="不接受" value="不接受"></el-option>
  388. </el-select>
  389. </el-form-item>
  390. <el-form-item label="客户确认人" prop="confirmBy" :rules="customerResponseRules.confirmBy">
  391. <el-input v-model="customerResponseData.confirmBy" style="width: 185px"></el-input>
  392. </el-form-item>
  393. </el-form>
  394. <el-form :inline="true" label-position="top" :model="customerResponseData" style="margin-left:0px;margin-top: 5px;">
  395. <el-form-item label="客户回复信息">
  396. <el-input type="textarea" v-model="customerResponseData.confirmInformation" :rows="3" resize='none' show-word-limit style="width: 595px;height: 30px"></el-input>
  397. </el-form-item>
  398. </el-form>
  399. <el-footer style="height:35px;margin-top: 50px;text-align:center">
  400. <el-button type="primary" @click="saveCustomerResponse()">保存</el-button>
  401. <el-button type="primary" @click="customerResponseModalFlag = false">关闭</el-button>
  402. </el-footer>
  403. </el-dialog>
  404. <!-- 页签 -->
  405. <el-tabs v-model="activeTable" style="margin-top: 0px; width: 100%; min-height: 500px;" type="border-card" @tab-click="tabClick" class="customer-tab">
  406. <!-- 测试详细信息页签 -->
  407. <el-tab-pane label="测试详细信息" name="test_detail_information">
  408. <el-form :inline="true" label-position="top" :model="testDetailData" style="margin-left: 10px;margin-top: 10px;">
  409. <el-form-item label="技术注意事项">
  410. <el-input type="textarea" v-model="testDetailData.technicalConsiderations" readonly :rows="3" resize='none' show-word-limit style="width: 600px;height: 30px"></el-input>
  411. </el-form-item>
  412. </el-form>
  413. <el-form :inline="true" label-position="top" :model="testDetailData" style="margin-left: 10px;margin-top: 46px;">
  414. <el-form-item label="是否需要送样">
  415. <input type="checkbox" v-if="testDetailData.isNeedToSendSamples == 'Y'" checked onclick="return false"/>
  416. <input type="checkbox" v-if="testDetailData.isNeedToSendSamples != 'Y'" onclick="return false"/>
  417. </el-form-item>
  418. <el-form-item label="送样地址">
  419. <el-input v-model="testDetailData.sendSamplesAddress" readonly style="width: 295px"></el-input>
  420. </el-form-item>
  421. </el-form>
  422. <el-form :inline="true" label-position="top" :model="testDetailData" style="margin-left: 10px;margin-top: 46px;">
  423. <el-form-item label="收货人">
  424. <el-input v-model="testDetailData.consignee" readonly style="width: 295px"></el-input>
  425. </el-form-item>
  426. <el-form-item label="收货人联系方式">
  427. <el-input v-model="testDetailData.consigneeContact" readonly style="width: 295px"></el-input>
  428. </el-form-item>
  429. </el-form>
  430. </el-tab-pane>
  431. <!-- 测试结果页签 -->
  432. <el-tab-pane label="测试结果" name="test_result">
  433. <el-form :inline="true" label-position="top" :model="testResultData" style="margin-left: 10px;margin-top: 5px;">
  434. <el-button v-if="testResultData.testResultStatus === 'C'" type="primary" @click="testResultModal()">录入测试结果</el-button>
  435. <el-button v-if="testResultData.testResultStatus === 'E'" type="primary" @click="submitTestModal()">录入送样信息</el-button>
  436. <el-button v-if="testResultData.testResultStatus === 'S'" type="primary" @click="customerResponseModal()">客户回复</el-button>
  437. </el-form>
  438. <el-form :inline="true" label-position="top" :model="testResultData" style="margin-left: 10px;margin-top: 2px;">
  439. <el-form-item label="实际交付日期">
  440. <el-date-picker v-model="testResultData.actualityDeliveryDate" readonly type="date" value-format="yyyy-MM-dd" style="width: 240px"></el-date-picker>
  441. </el-form-item>
  442. <el-form-item label="是否需要送样">
  443. <input type="checkbox" v-if="testResultData.isNeedToSendSamples == 'Y'" checked onclick="return false"/>
  444. <input type="checkbox" v-if="testResultData.isNeedToSendSamples != 'Y'" onclick="return false"/>
  445. </el-form-item>
  446. <el-form-item label="是否送样">
  447. <input type="checkbox" v-if="testResultData.testResultStatus == 'S' || testResultData.testResultStatus == 'R'" checked onclick="return false"/>
  448. <input type="checkbox" v-if="testResultData.testResultStatus != 'S' && testResultData.testResultStatus != 'R'" onclick="return false"/>
  449. </el-form-item>
  450. </el-form>
  451. <el-form :inline="true" label-position="top" :model="testResultData" style="margin-left: 10px;margin-top: -1px;">
  452. <el-form-item label="测试结果信息">
  453. <el-input type="textarea" v-model="testResultData.testResultInformation" readonly :rows="2" resize='none' show-word-limit style="width: 760px;height: 20px"></el-input>
  454. </el-form-item>
  455. </el-form>
  456. <el-form :inline="true" label-position="top" :model="testResultData" style="margin-left: 10px;margin-top: 26px;">
  457. <el-form-item label="附件清单">
  458. <el-table
  459. :height="90"
  460. :data="fileContentList"
  461. border
  462. v-loading="dataListLoading"
  463. style="width: 100%">
  464. <el-table-column
  465. v-for="(item,index) in fileColumnList" :key="index"
  466. :sortable="item.columnSortable"
  467. :prop="item.columnProp"
  468. :header-align="item.headerAlign"
  469. :show-overflow-tooltip="item.showOverflowTooltip"
  470. :align="item.align"
  471. :fixed="item.fixed===''?false:item.fixed"
  472. :min-width="item.columnWidth"
  473. :label="item.columnLabel">
  474. <template slot-scope="scope">
  475. <span v-if="!item.columnHidden">{{scope.row[item.columnProp]}}</span>
  476. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
  477. </template>
  478. </el-table-column>
  479. <el-table-column
  480. fixed="right"
  481. header-align="center"
  482. align="center"
  483. width="100"
  484. label="操作">
  485. <template slot-scope="scope">
  486. <a @click="downloadFile(scope.row)">下载</a>
  487. </template>
  488. </el-table-column>
  489. </el-table>
  490. </el-form-item>
  491. </el-form>
  492. <el-form :inline="true" label-position="top" :model="testResultData" style="margin-left: 10px;margin-top: 69px;">
  493. <el-form-item label="实际送样日期">
  494. <el-date-picker v-model="testResultData.actualitySendSamplesDate" readonly type="date" value-format="yyyy-MM-dd" style="width: 240px"></el-date-picker>
  495. </el-form-item>
  496. <el-form-item label="送样方式">
  497. <el-input v-model="testResultData.sendSamplesMethod" readonly style="width: 240px"></el-input>
  498. </el-form-item>
  499. <el-form-item label="送货信息">
  500. <el-input v-model="testResultData.deliverGoodsInformation" readonly style="width: 240px"></el-input>
  501. </el-form-item>
  502. </el-form>
  503. <el-form :inline="true" label-position="top" :model="testResultData" style="margin-left: 10px;margin-top: -2px;">
  504. <el-form-item label="送货备注">
  505. <el-input type="textarea" v-model="testResultData.deliverGoodsRemark" readonly :rows="2" resize='none' show-word-limit style="width: 760px;height: 20px"></el-input>
  506. </el-form-item>
  507. </el-form>
  508. <el-form :inline="true" label-position="top" :model="testResultData" style="margin-left: 10px;margin-top: 26px;">
  509. <el-form-item label="客户是否回复">
  510. <input type="checkbox" v-if="testResultData.testResultStatus == 'R'" checked onclick="return false"/>
  511. <input type="checkbox" v-if="testResultData.testResultStatus != 'R'" onclick="return false"/>
  512. </el-form-item>
  513. <el-form-item label="客户确认结果">
  514. <el-input v-model="testResultData.confirmResults" readonly style="width: 205px"></el-input>
  515. </el-form-item>
  516. <el-form-item label="实际回复日期">
  517. <el-date-picker v-model="testResultData.actualityReplyDate" readonly type="date" value-format="yyyy-MM-dd" style="width: 240px"></el-date-picker>
  518. </el-form-item>
  519. <el-form-item label="客户确认人">
  520. <el-input v-model="testResultData.confirmBy" readonly style="width: 205px"></el-input>
  521. </el-form-item>
  522. </el-form>
  523. <el-form :inline="true" label-position="top" :model="testResultData" style="margin-left: 10px;margin-top: -2px;">
  524. <el-form-item label="客户回复信息">
  525. <el-input type="textarea" v-model="testResultData.confirmInformation" readonly :rows="2" resize='none' show-word-limit style="width: 760px;height: 20px"></el-input>
  526. </el-form-item>
  527. </el-form>
  528. </el-tab-pane>
  529. <!-- 项目信息页签 -->
  530. <el-tab-pane label="项目信息" name="project_information">
  531. <el-form label-position="top" :model="projectInformationData" style="margin-left: 10px;margin-top: 5px;margin-right: 10px">
  532. <el-row :gutter="20">
  533. <el-col :span="8">
  534. <div class="grid-content bg-purple">
  535. <el-form-item label="项目号">
  536. <el-input v-model="projectInformationData.projectId" readonly></el-input>
  537. </el-form-item>
  538. </div>
  539. </el-col>
  540. <el-col :span="8">
  541. <div class="grid-content bg-purple">
  542. <el-form-item label="项目名称">
  543. <el-input v-model="projectInformationData.projectName" readonly></el-input>
  544. </el-form-item>
  545. </div>
  546. </el-col>
  547. <el-col :span="8">
  548. <div class="grid-content bg-purple">
  549. <el-form-item label="项目类型">
  550. <el-input v-model="projectInformationData.projectType" readonly></el-input>
  551. </el-form-item>
  552. </div>
  553. </el-col>
  554. </el-row>
  555. <el-row :gutter="20">
  556. <el-col :span="8">
  557. <div class="grid-content bg-purple">
  558. <el-form-item label="客户来源">
  559. <el-input v-model="projectInformationData.projectSourceDesc" readonly></el-input>
  560. </el-form-item>
  561. </div>
  562. </el-col>
  563. <el-col :span="8">
  564. <div class="grid-content bg-purple">
  565. <el-form-item label="优先级">
  566. <el-input v-model="projectInformationData.priorityDesc" readonly></el-input>
  567. </el-form-item>
  568. </div>
  569. </el-col>
  570. <el-col :span="8">
  571. <div class="grid-content bg-purple">
  572. <el-form-item label="项目状态">
  573. <el-input v-model="projectInformationData.status" readonly></el-input>
  574. </el-form-item>
  575. </div>
  576. </el-col>
  577. </el-row>
  578. <el-row :gutter="20">
  579. <el-col :span="8">
  580. <div class="grid-content bg-purple">
  581. <el-form-item label="项目经理">
  582. <el-input v-model="projectInformationData.projectManagerName" readonly></el-input>
  583. </el-form-item>
  584. </div>
  585. </el-col>
  586. <el-col :span="8">
  587. <div class="grid-content bg-purple">
  588. <el-form-item label="项目负责人">
  589. <el-input v-model="projectInformationData.projectOwnerName" readonly></el-input>
  590. </el-form-item>
  591. </div>
  592. </el-col>
  593. <el-col :span="8">
  594. <div class="grid-content bg-purple">
  595. <el-form-item label="项目权限">
  596. <el-input v-model="projectInformationData.userRoleName" readonly></el-input>
  597. </el-form-item>
  598. </div>
  599. </el-col>
  600. </el-row>
  601. <el-row :gutter="20">
  602. <el-col :span="6">
  603. <div class="grid-content bg-purple">
  604. <el-form-item label="创建时间">
  605. <el-input v-model="projectInformationData.createDate" readonly></el-input>
  606. </el-form-item>
  607. </div>
  608. </el-col>
  609. <el-col :span="6">
  610. <div class="grid-content bg-purple">
  611. <el-form-item label="创建人">
  612. <el-input v-model="projectInformationData.createBy" readonly></el-input>
  613. </el-form-item>
  614. </div>
  615. </el-col>
  616. <el-col :span="6">
  617. <div class="grid-content bg-purple">
  618. <el-form-item label="更新时间">
  619. <el-input v-model="projectInformationData.updateDate" readonly></el-input>
  620. </el-form-item>
  621. </div>
  622. </el-col>
  623. <el-col :span="6">
  624. <div class="grid-content bg-purple">
  625. <el-form-item label="更新人">
  626. <el-input v-model="projectInformationData.updateBy" readonly></el-input>
  627. </el-form-item>
  628. </div>
  629. </el-col>
  630. </el-row>
  631. <el-row :gutter="20">
  632. <el-col :span="24">
  633. <div class="grid-content bg-purple">
  634. <el-form-item label="项目描述">
  635. <el-input v-model="projectInformationData.projectDesc" readonly></el-input>
  636. </el-form-item>
  637. </div>
  638. </el-col>
  639. </el-row>
  640. <el-row :gutter="20">
  641. <el-col :span="24">
  642. <div class="grid-content bg-purple">
  643. <el-form-item label="其它特殊要求">
  644. <el-input v-model="projectInformationData.remark" readonly></el-input>
  645. </el-form-item>
  646. </div>
  647. </el-col>
  648. </el-row>
  649. </el-form>
  650. </el-tab-pane>
  651. <!-- 客户信息页签 -->
  652. <el-tab-pane label="客户信息" name="customer_information">
  653. <el-form label-position="top" :model="customerInformationData" style="margin-left: 10px;margin-top: 5px;margin-right: 10px">
  654. <el-row :gutter="20">
  655. <el-col :span="8">
  656. <div class="grid-content bg-purple">
  657. <el-form-item label="客户代码">
  658. <el-input v-model="customerInformationData.customerNo" readonly></el-input>
  659. </el-form-item>
  660. </div>
  661. </el-col>
  662. <el-col :span="8">
  663. <div class="grid-content bg-purple">
  664. <el-form-item label="客户名称">
  665. <el-input v-model="customerInformationData.customerDesc" readonly></el-input>
  666. </el-form-item>
  667. </div>
  668. </el-col>
  669. <el-col :span="8">
  670. <div class="grid-content bg-purple">
  671. <el-form-item label="关键客户">
  672. <el-input v-model="customerInformationData.importantCustomer" readonly></el-input>
  673. </el-form-item>
  674. </div>
  675. </el-col>
  676. </el-row>
  677. <el-row :gutter="20">
  678. <el-col :span="8">
  679. <div class="grid-content bg-purple">
  680. <el-form-item label="客户币种">
  681. <el-input v-model="customerInformationData.customerCurrency" readonly></el-input>
  682. </el-form-item>
  683. </div>
  684. </el-col>
  685. <el-col :span="8">
  686. <div class="grid-content bg-purple">
  687. <el-form-item label="年营业额">
  688. <el-input v-model="customerInformationData.turnoverOfYear" readonly></el-input>
  689. </el-form-item>
  690. </div>
  691. </el-col>
  692. <el-col :span="8">
  693. <div class="grid-content bg-purple">
  694. <el-form-item label="年潜在收入">
  695. <el-input v-model="customerInformationData.potentialRevenueOfYear" readonly></el-input>
  696. </el-form-item>
  697. </div>
  698. </el-col>
  699. </el-row>
  700. <el-row :gutter="20">
  701. <el-col :span="8">
  702. <div class="grid-content bg-purple">
  703. <el-form-item label="客户状态">
  704. <el-input v-model="customerInformationData.customerStatus" readonly></el-input>
  705. </el-form-item>
  706. </div>
  707. </el-col>
  708. <el-col :span="8">
  709. <div class="grid-content bg-purple">
  710. <el-form-item label="行业">
  711. <el-input v-model="customerInformationData.customerIndustry" readonly></el-input>
  712. </el-form-item>
  713. </div>
  714. </el-col>
  715. <el-col :span="8">
  716. <div class="grid-content bg-purple">
  717. <el-form-item label="公司名称">
  718. <el-input v-model="customerInformationData.companyName" readonly></el-input>
  719. </el-form-item>
  720. </div>
  721. </el-col>
  722. </el-row>
  723. <el-row :gutter="20">
  724. <el-col :span="8">
  725. <div class="grid-content bg-purple">
  726. <el-form-item label="客户联系人">
  727. <el-input v-model="customerInformationData.contactName" readonly></el-input>
  728. </el-form-item>
  729. </div>
  730. </el-col>
  731. <el-col :span="8">
  732. <div class="grid-content bg-purple">
  733. <el-form-item label="联系人电话">
  734. <el-input v-model="customerInformationData.contactPhoneNumber1" readonly></el-input>
  735. </el-form-item>
  736. </div>
  737. </el-col>
  738. <el-col :span="8">
  739. <div class="grid-content bg-purple">
  740. <el-form-item label="联系人职务">
  741. <el-input v-model="customerInformationData.position" readonly></el-input>
  742. </el-form-item>
  743. </div>
  744. </el-col>
  745. </el-row>
  746. <el-row :gutter="20">
  747. <el-col :span="12">
  748. <div class="grid-content bg-purple">
  749. <el-form-item label="岗位描述">
  750. <el-input v-model="customerInformationData.jobDescription" readonly></el-input>
  751. </el-form-item>
  752. </div>
  753. </el-col>
  754. <el-col :span="12">
  755. <div class="grid-content bg-purple">
  756. <el-form-item label="备注信息">
  757. <el-input v-model="customerInformationData.remark" readonly></el-input>
  758. </el-form-item>
  759. </div>
  760. </el-col>
  761. </el-row>
  762. <el-row :gutter="20">
  763. <el-col :span="12">
  764. <div class="grid-content bg-purple">
  765. <el-form-item label="客户联系地址">
  766. <el-input v-model="customerInformationData.addressName" readonly></el-input>
  767. </el-form-item>
  768. </div>
  769. </el-col>
  770. <el-col :span="12">
  771. <div class="grid-content bg-purple">
  772. <el-form-item label="地址类型">
  773. <el-input v-model="customerInformationData.addressType" readonly></el-input>
  774. </el-form-item>
  775. </div>
  776. </el-col>
  777. </el-row>
  778. <el-row :gutter="20">
  779. <el-col :span="6">
  780. <div class="grid-content bg-purple">
  781. <el-form-item label="创建时间">
  782. <el-input v-model="customerInformationData.createDate" readonly></el-input>
  783. </el-form-item>
  784. </div>
  785. </el-col>
  786. <el-col :span="6">
  787. <div class="grid-content bg-purple">
  788. <el-form-item label="创建人">
  789. <el-input v-model="customerInformationData.createBy" readonly></el-input>
  790. </el-form-item>
  791. </div>
  792. </el-col>
  793. <el-col :span="6">
  794. <div class="grid-content bg-purple">
  795. <el-form-item label="更新时间">
  796. <el-input v-model="customerInformationData.updateDate" readonly></el-input>
  797. </el-form-item>
  798. </div>
  799. </el-col>
  800. <el-col :span="6">
  801. <div class="grid-content bg-purple">
  802. <el-form-item label="更新人">
  803. <el-input v-model="customerInformationData.updateBy" readonly></el-input>
  804. </el-form-item>
  805. </div>
  806. </el-col>
  807. </el-row>
  808. </el-form>
  809. </el-tab-pane>
  810. </el-tabs>
  811. <!-- chooseList模态框 -->
  812. <Chooselist ref="baseList" @getBaseData="getBaseData"></Chooselist>
  813. <!-- 上传文件的modal -->
  814. <testUploadFile ref="testUploadFile" @refreshPageTables="getFileContentData()" v-drag></testUploadFile>
  815. </div>
  816. </template>
  817. <script>
  818. import {
  819. testInformationSearch, // 测试信息列表查询
  820. testInformationSave, // 测试信息新增
  821. testInformationEdit, // 测试信息编辑
  822. testInformationDelete, // 测试信息删除
  823. getFileContentList, // 获取测试单附件列表
  824. testResultSearch, // 获取测试结果对象
  825. deleteTestFile, // 文件删除
  826. saveTestResult, // 保存测试结果
  827. saveSubmitResult, // 保存送样结果
  828. saveCustomerResponse, // 保存客户回复
  829. getProjectPartList, // 获取产品列表
  830. getProjectInformation, // 获取项目信息
  831. getCustomerInformation // 获取客户信息
  832. } from '@/api/test/testInformation.js'
  833. import {
  834. downLoadQuotationFile // 文件下载
  835. } from '@/api/quotation/quotationInformation.js'
  836. import Chooselist from '@/views/modules/common/Chooselist'
  837. import testUploadFile from "./test_upload_file"
  838. export default {
  839. components: {
  840. Chooselist,
  841. testUploadFile
  842. },
  843. watch: {
  844. searchData: {
  845. deep: true,
  846. handler: function (newV, oldV) {
  847. this.searchData.customerNo = this.searchData.customerNo.toUpperCase()
  848. this.searchData.projectId = this.searchData.projectId.toUpperCase()
  849. }
  850. },
  851. modalData: {
  852. deep: true,
  853. handler: function (newV, oldV) {
  854. this.modalData.customerNo = this.modalData.customerNo.toUpperCase()
  855. this.modalData.projectId = this.modalData.projectId.toUpperCase()
  856. this.modalData.testNo = this.modalData.testNo.toUpperCase()
  857. }
  858. }
  859. },
  860. data () {
  861. return {
  862. // 导出
  863. exportData: [],
  864. exportName: '设备分类' + this.dayjs().format('YYYYMMDDHHmmss'),
  865. exportHeader: ['设备分类'],
  866. exportFooter: [],
  867. resultList: [],
  868. // ======== 行高 ========
  869. height: 200,
  870. secondHeight: 200,
  871. // ======== 分页 ========
  872. pageIndex: 1,
  873. pageSize: 50,
  874. totalPage: 0,
  875. selectedDataNum: 0,
  876. // 条件查询
  877. searchData: {
  878. site: this.$store.state.user.site,
  879. customerNo: '',
  880. customerDesc: '',
  881. trackerName: '',
  882. testPartNo: '',
  883. partName: '',
  884. testStatus: '',
  885. startDate: '',
  886. endDate: '',
  887. projectId: '',
  888. projectName: '',
  889. engineerName: '',
  890. priorityLevel: '',
  891. page: 1,
  892. limit: 10
  893. },
  894. // 其它
  895. dataListLoading: false,
  896. // 初始页签
  897. activeTable: 'test_detail_information',
  898. // ======== 数据对象 ========
  899. modalData: {
  900. flag: '1',
  901. title: '测试新增',
  902. site: this.$store.state.user.site,
  903. testNo: '',
  904. customerNo: '',
  905. customerDesc: '',
  906. projectId: '',
  907. projectName: '',
  908. tracker: '',
  909. trackerName: '',
  910. testPartNo: '',
  911. partName: '',
  912. engineer: '',
  913. engineerName: '',
  914. priorityLevel: '一般',
  915. testNumber: 1,
  916. requiredDeliveryDate: '',
  917. remark: '',
  918. technicalConsiderations: '',
  919. isNeedToSendSamples: '',
  920. sendSamplesAddress: '',
  921. consignee: '',
  922. consigneeContact: '',
  923. actualityDeliveryDate: '',
  924. testResultInformation: '',
  925. actualitySendSamplesDate: '',
  926. sendSamplesMethod: '',
  927. deliverGoodsInformation: '',
  928. deliverGoodsRemark: '',
  929. actualityReplyDate: '',
  930. confirmResults: '',
  931. confirmBy: '',
  932. confirmInformation: '',
  933. testStatus: '',
  934. testResultStatus: '',
  935. nextToDo: '',
  936. createDate: '',
  937. createBy: '',
  938. updateDate: '',
  939. updateBy: ''
  940. },
  941. testDetailData: {
  942. technicalConsiderations: '',
  943. isNeedToSendSamples: '',
  944. sendSamplesAddress: '',
  945. consignee: '',
  946. consigneeContact: ''
  947. },
  948. testResultData: {
  949. testResultStatus: '',
  950. actualityDeliveryDate: '',
  951. isNeedToSendSamples: '',
  952. testResultInformation: '',
  953. actualitySendSamplesDate: '',
  954. sendSamplesMethod: '',
  955. deliverGoodsInformation: '',
  956. deliverGoodsRemark: '',
  957. confirmResults: '',
  958. actualityReplyDate: '',
  959. confirmBy: '',
  960. confirmInformation: ''
  961. },
  962. enterResultData: {
  963. site: this.$store.state.user.site,
  964. testNo: '',
  965. actualityDeliveryDate: '',
  966. testResultInformation: '',
  967. updateBy: this.$store.state.user.name,
  968. testResultStatus: '',
  969. fileContentList: []
  970. },
  971. submitResultData: {
  972. site: this.$store.state.user.site,
  973. testNo: '',
  974. actualitySendSamplesDate: '',
  975. sendSamplesMethod: '',
  976. deliverGoodsInformation: '',
  977. deliverGoodsRemark: '',
  978. updateBy: this.$store.state.user.name,
  979. testResultStatus: ''
  980. },
  981. customerResponseData: {
  982. site: this.$store.state.user.site,
  983. testNo: '',
  984. actualityReplyDate: '',
  985. confirmResults: '',
  986. confirmBy: '',
  987. confirmInformation: '',
  988. updateBy: this.$store.state.user.name,
  989. testResultStatus: ''
  990. },
  991. projectPartData: {
  992. site: this.$store.state.user.site,
  993. testPartNo: '',
  994. partName: ''
  995. },
  996. projectInformationData: {
  997. projectId: '',
  998. projectName: '',
  999. projectType: '',
  1000. projectSourceDesc: '',
  1001. priorityDesc: '',
  1002. status: '',
  1003. projectDesc: '',
  1004. projectManagerName: '',
  1005. projectOwnerName: '',
  1006. userRoleName: '',
  1007. remark: ''
  1008. },
  1009. customerInformationData: {
  1010. customerNo: '',
  1011. customerDesc: '',
  1012. importantCustomer: '',
  1013. customerCurrency: '',
  1014. turnoverOfYear: '',
  1015. potentialRevenueOfYear: '',
  1016. customerStatus: '',
  1017. customerIndustry: '',
  1018. companyName: '',
  1019. jobDescription: '',
  1020. remark: '',
  1021. contactName: '',
  1022. contactPhoneNumber1: '',
  1023. position: '',
  1024. addressName: '',
  1025. addressType: '',
  1026. createDate: '',
  1027. createBy: '',
  1028. updateDate: '',
  1029. updateBy: ''
  1030. },
  1031. // ======== 数据列表 ========
  1032. dataList: [],
  1033. fileContentList: [],
  1034. projectPartList: [],
  1035. // ======== 列表表头 ========
  1036. columnList: [
  1037. {
  1038. userId: this.$store.state.user.name,
  1039. functionId: 103001,
  1040. serialNumber: '103001Table1TestNo',
  1041. tableId: '103001Table1',
  1042. tableName: '测试信息表',
  1043. columnProp: 'testNo',
  1044. headerAlign: 'center',
  1045. align: 'center',
  1046. columnLabel: '测试单号',
  1047. columnHidden: false,
  1048. columnImage: false,
  1049. columnSortable: false,
  1050. sortLv: 0,
  1051. status: true,
  1052. fixed: '',
  1053. columnWidth: 120
  1054. },
  1055. {
  1056. userId: this.$store.state.user.name,
  1057. functionId: 103001,
  1058. serialNumber: '103001Table1CustomerNo',
  1059. tableId: '103001Table1',
  1060. tableName: '测试信息表',
  1061. columnProp: 'customerNo',
  1062. headerAlign: 'center',
  1063. align: 'center',
  1064. columnLabel: '客户编码',
  1065. columnHidden: false,
  1066. columnImage: false,
  1067. columnSortable: false,
  1068. sortLv: 0,
  1069. status: true,
  1070. fixed: '',
  1071. columnWidth: 100
  1072. },
  1073. {
  1074. userId: this.$store.state.user.name,
  1075. functionId: 103001,
  1076. serialNumber: '103001Table1CustomerDesc',
  1077. tableId: '103001Table1',
  1078. tableName: '测试信息表',
  1079. columnProp: 'customerDesc',
  1080. headerAlign: 'center',
  1081. align: 'center',
  1082. columnLabel: '客户名称',
  1083. columnHidden: false,
  1084. columnImage: false,
  1085. columnSortable: false,
  1086. sortLv: 0,
  1087. status: true,
  1088. fixed: '',
  1089. columnWidth: 120
  1090. },
  1091. {
  1092. userId: this.$store.state.user.name,
  1093. functionId: 103001,
  1094. serialNumber: '103001Table1ProjectId',
  1095. tableId: '103001Table1',
  1096. tableName: '测试信息表',
  1097. columnProp: 'projectId',
  1098. headerAlign: 'center',
  1099. align: 'center',
  1100. columnLabel: '项目编码',
  1101. columnHidden: false,
  1102. columnImage: false,
  1103. columnSortable: false,
  1104. sortLv: 0,
  1105. status: true,
  1106. fixed: '',
  1107. columnWidth: 110
  1108. },
  1109. {
  1110. userId: this.$store.state.user.name,
  1111. functionId: 103001,
  1112. serialNumber: '103001Table1ProjectName',
  1113. tableId: '103001Table1',
  1114. tableName: '测试信息表',
  1115. columnProp: 'projectName',
  1116. headerAlign: 'center',
  1117. align: 'center',
  1118. columnLabel: '项目名称',
  1119. columnHidden: false,
  1120. columnImage: false,
  1121. columnSortable: false,
  1122. sortLv: 0,
  1123. status: true,
  1124. fixed: '',
  1125. columnWidth: 120
  1126. },
  1127. {
  1128. userId: this.$store.state.user.name,
  1129. functionId: 103001,
  1130. serialNumber: '103001Table1TrackerName',
  1131. tableId: '103001Table1',
  1132. tableName: '测试信息表',
  1133. columnProp: 'trackerName',
  1134. headerAlign: 'center',
  1135. align: 'center',
  1136. columnLabel: '跟单员',
  1137. columnHidden: false,
  1138. columnImage: false,
  1139. columnSortable: false,
  1140. sortLv: 0,
  1141. status: true,
  1142. fixed: '',
  1143. columnWidth: 80
  1144. },
  1145. {
  1146. userId: this.$store.state.user.name,
  1147. functionId: 103001,
  1148. serialNumber: '103001Table1EngineerName',
  1149. tableId: '103001Table1',
  1150. tableName: '测试信息表',
  1151. columnProp: 'engineerName',
  1152. headerAlign: 'center',
  1153. align: 'center',
  1154. columnLabel: '工程师',
  1155. columnHidden: false,
  1156. columnImage: false,
  1157. columnSortable: false,
  1158. sortLv: 0,
  1159. status: true,
  1160. fixed: '',
  1161. columnWidth: 80
  1162. },
  1163. {
  1164. userId: this.$store.state.user.name,
  1165. functionId: 103001,
  1166. serialNumber: '103001Table1TestPartNo',
  1167. tableId: '103001Table1',
  1168. tableName: '测试信息表',
  1169. columnProp: 'testPartNo',
  1170. headerAlign: 'center',
  1171. align: 'center',
  1172. columnLabel: '项目料号',
  1173. columnHidden: false,
  1174. columnImage: false,
  1175. columnSortable: false,
  1176. sortLv: 0,
  1177. status: true,
  1178. fixed: '',
  1179. columnWidth: 150
  1180. },
  1181. {
  1182. userId: this.$store.state.user.name,
  1183. functionId: 103001,
  1184. serialNumber: '103001Table1PartName',
  1185. tableId: '103001Table1',
  1186. tableName: '测试信息表',
  1187. columnProp: 'partName',
  1188. headerAlign: 'center',
  1189. align: 'center',
  1190. columnLabel: '物料名称',
  1191. columnHidden: false,
  1192. columnImage: false,
  1193. columnSortable: false,
  1194. sortLv: 0,
  1195. status: true,
  1196. fixed: '',
  1197. columnWidth: 100
  1198. },
  1199. {
  1200. userId: this.$store.state.user.name,
  1201. functionId: 103001,
  1202. serialNumber: '103001Table1PriorityLevel',
  1203. tableId: '103001Table1',
  1204. tableName: '测试信息表',
  1205. columnProp: 'priorityLevel',
  1206. headerAlign: 'center',
  1207. align: 'center',
  1208. columnLabel: '优先等级',
  1209. columnHidden: false,
  1210. columnImage: false,
  1211. columnSortable: false,
  1212. sortLv: 0,
  1213. status: true,
  1214. fixed: '',
  1215. columnWidth: 80
  1216. },
  1217. {
  1218. userId: this.$store.state.user.name,
  1219. functionId: 103001,
  1220. serialNumber: '103001Table1TestNumber',
  1221. tableId: '103001Table1',
  1222. tableName: '测试信息表',
  1223. columnProp: 'testNumber',
  1224. headerAlign: 'center',
  1225. align: 'center',
  1226. columnLabel: '测试数量',
  1227. columnHidden: false,
  1228. columnImage: false,
  1229. columnSortable: false,
  1230. sortLv: 0,
  1231. status: true,
  1232. fixed: '',
  1233. columnWidth: 80
  1234. },
  1235. {
  1236. userId: this.$store.state.user.name,
  1237. functionId: 103001,
  1238. serialNumber: '103001Table1RequiredDeliveryDate',
  1239. tableId: '103001Table1',
  1240. tableName: '测试信息表',
  1241. columnProp: 'requiredDeliveryDate',
  1242. headerAlign: 'center',
  1243. align: 'center',
  1244. columnLabel: '要求交付日期',
  1245. columnHidden: false,
  1246. columnImage: false,
  1247. columnSortable: false,
  1248. sortLv: 0,
  1249. status: true,
  1250. fixed: '',
  1251. columnWidth: 160
  1252. },
  1253. {
  1254. userId: this.$store.state.user.name,
  1255. functionId: 103001,
  1256. serialNumber: '103001Table1TestStatus',
  1257. tableId: '103001Table1',
  1258. tableName: '测试信息表',
  1259. columnProp: 'testStatus',
  1260. headerAlign: 'center',
  1261. align: 'center',
  1262. columnLabel: '状态',
  1263. columnHidden: false,
  1264. columnImage: false,
  1265. columnSortable: false,
  1266. sortLv: 0,
  1267. status: true,
  1268. fixed: '',
  1269. columnWidth: 80
  1270. },
  1271. {
  1272. userId: this.$store.state.user.name,
  1273. functionId: 103001,
  1274. serialNumber: '103001Table1CreateDate',
  1275. tableId: '103001Table1',
  1276. tableName: '测试信息表',
  1277. columnProp: 'createDate',
  1278. headerAlign: 'center',
  1279. align: 'center',
  1280. columnLabel: '创建时间',
  1281. columnHidden: false,
  1282. columnImage: false,
  1283. columnSortable: false,
  1284. sortLv: 0,
  1285. status: true,
  1286. fixed: '',
  1287. columnWidth: 160
  1288. },
  1289. {
  1290. userId: this.$store.state.user.name,
  1291. functionId: 103001,
  1292. serialNumber: '103001Table1CreateBy',
  1293. tableId: '103001Table1',
  1294. tableName: '测试信息表',
  1295. columnProp: 'createBy',
  1296. headerAlign: 'center',
  1297. align: 'center',
  1298. columnLabel: '创建人',
  1299. columnHidden: false,
  1300. columnImage: false,
  1301. columnSortable: false,
  1302. sortLv: 0,
  1303. status: true,
  1304. fixed: '',
  1305. columnWidth: 80
  1306. },
  1307. {
  1308. userId: this.$store.state.user.name,
  1309. functionId: 103001,
  1310. serialNumber: '103001Table1UpdateDate',
  1311. tableId: '103001Table1',
  1312. tableName: '测试信息表',
  1313. columnProp: 'updateDate',
  1314. headerAlign: 'center',
  1315. align: 'center',
  1316. columnLabel: '更新时间',
  1317. columnHidden: false,
  1318. columnImage: false,
  1319. columnSortable: false,
  1320. sortLv: 0,
  1321. status: true,
  1322. fixed: '',
  1323. columnWidth: 160
  1324. },
  1325. {
  1326. userId: this.$store.state.user.name,
  1327. functionId: 103001,
  1328. serialNumber: '103001Table1UpdateBy',
  1329. tableId: '103001Table1',
  1330. tableName: '测试信息表',
  1331. columnProp: 'updateBy',
  1332. headerAlign: 'center',
  1333. align: 'center',
  1334. columnLabel: '更新人',
  1335. columnHidden: false,
  1336. columnImage: false,
  1337. columnSortable: false,
  1338. sortLv: 0,
  1339. status: true,
  1340. fixed: '',
  1341. columnWidth: 80
  1342. }
  1343. ],
  1344. fileColumnList: [
  1345. {
  1346. userId: this.$store.state.user.name,
  1347. functionId: 103001,
  1348. serialNumber: '103001Table2FileName',
  1349. tableId: '103001Table2',
  1350. tableName: '文件信息表',
  1351. columnProp: 'fileName',
  1352. headerAlign: 'center',
  1353. align: 'center',
  1354. columnLabel: '文件名称',
  1355. columnHidden: false,
  1356. columnImage: false,
  1357. columnSortable: false,
  1358. sortLv: 0,
  1359. status: true,
  1360. fixed: '',
  1361. columnWidth: 140
  1362. },
  1363. {
  1364. userId: this.$store.state.user.name,
  1365. functionId: 103001,
  1366. serialNumber: '103001Table2FileRemark',
  1367. tableId: '103001Table2',
  1368. tableName: '文件信息表',
  1369. columnProp: 'fileRemark',
  1370. headerAlign: 'center',
  1371. align: 'center',
  1372. columnLabel: '备注',
  1373. columnHidden: false,
  1374. columnImage: false,
  1375. columnSortable: false,
  1376. sortLv: 0,
  1377. status: true,
  1378. fixed: '',
  1379. columnWidth: 240
  1380. },
  1381. // {
  1382. // userId: this.$store.state.user.name,
  1383. // functionId: 103001,
  1384. // serialNumber: '103001Table2OrderRef3',
  1385. // tableId: '103001Table2',
  1386. // tableName: '文件信息表',
  1387. // columnProp: 'orderRef3',
  1388. // headerAlign: 'center',
  1389. // align: 'center',
  1390. // columnLabel: '文件描述',
  1391. // columnHidden: false,
  1392. // columnImage: false,
  1393. // columnSortable: false,
  1394. // sortLv: 0,
  1395. // status: true,
  1396. // fixed: '',
  1397. // columnWidth: 120
  1398. // },
  1399. {
  1400. userId: this.$store.state.user.name,
  1401. functionId: 103001,
  1402. serialNumber: '103001Table2CreateDate',
  1403. tableId: '103001Table2',
  1404. tableName: '文件信息表',
  1405. columnProp: 'createDate',
  1406. headerAlign: 'center',
  1407. align: 'center',
  1408. columnLabel: '上传时间',
  1409. columnHidden: false,
  1410. columnImage: false,
  1411. columnSortable: false,
  1412. sortLv: 0,
  1413. status: true,
  1414. fixed: '',
  1415. columnWidth: 140
  1416. },
  1417. {
  1418. userId: this.$store.state.user.name,
  1419. functionId: 103001,
  1420. serialNumber: '103001Table2CreatedBy',
  1421. tableId: '103001Table2',
  1422. tableName: '文件信息表',
  1423. columnProp: 'createdBy',
  1424. headerAlign: 'center',
  1425. align: 'center',
  1426. columnLabel: '上传人',
  1427. columnHidden: false,
  1428. columnImage: false,
  1429. columnSortable: false,
  1430. sortLv: 0,
  1431. status: true,
  1432. fixed: '',
  1433. columnWidth: 140
  1434. }
  1435. ],
  1436. projectPartDetailList: [
  1437. {
  1438. userId: this.$store.state.user.name,
  1439. functionId: 102001,
  1440. serialNumber: '102001Table3CustomerNo',
  1441. tableId: '102001Table3',
  1442. tableName: '项目物料表',
  1443. columnProp: 'customerNo',
  1444. headerAlign: 'center',
  1445. align: 'center',
  1446. columnLabel: '客户编码',
  1447. columnHidden: false,
  1448. columnImage: false,
  1449. columnSortable: false,
  1450. sortLv: 0,
  1451. status: true,
  1452. fixed: '',
  1453. columnWidth: 100
  1454. },
  1455. {
  1456. userId: this.$store.state.user.name,
  1457. functionId: 102001,
  1458. serialNumber: '102001Table3CustomerDesc',
  1459. tableId: '102001Table3',
  1460. tableName: '项目物料表',
  1461. columnProp: 'customerDesc',
  1462. headerAlign: 'center',
  1463. align: 'center',
  1464. columnLabel: '客户名称',
  1465. columnHidden: false,
  1466. columnImage: false,
  1467. columnSortable: false,
  1468. sortLv: 0,
  1469. status: true,
  1470. fixed: '',
  1471. columnWidth: 120
  1472. },
  1473. {
  1474. userId: this.$store.state.user.name,
  1475. functionId: 102001,
  1476. serialNumber: '102001Table3ProjectName',
  1477. tableId: '102001Table3',
  1478. tableName: '项目物料表',
  1479. columnProp: 'projectId',
  1480. headerAlign: 'center',
  1481. align: 'center',
  1482. columnLabel: '项目编码',
  1483. columnHidden: false,
  1484. columnImage: false,
  1485. columnSortable: false,
  1486. sortLv: 0,
  1487. status: true,
  1488. fixed: '',
  1489. columnWidth: 100
  1490. },
  1491. {
  1492. userId: this.$store.state.user.name,
  1493. functionId: 102001,
  1494. serialNumber: '102001Table3TestPartNo',
  1495. tableId: '102001Table3',
  1496. tableName: '项目物料表',
  1497. columnProp: 'testPartNo',
  1498. headerAlign: 'center',
  1499. align: 'center',
  1500. columnLabel: '产品编码',
  1501. columnHidden: false,
  1502. columnImage: false,
  1503. columnSortable: false,
  1504. sortLv: 0,
  1505. status: true,
  1506. fixed: '',
  1507. columnWidth: 150
  1508. },
  1509. {
  1510. userId: this.$store.state.user.name,
  1511. functionId: 102001,
  1512. serialNumber: '102001Table3PartDesc',
  1513. tableId: '102001Table3',
  1514. tableName: '项目物料表',
  1515. columnProp: 'partDesc',
  1516. headerAlign: 'center',
  1517. align: 'center',
  1518. columnLabel: '产品名称',
  1519. columnHidden: false,
  1520. columnImage: false,
  1521. columnSortable: false,
  1522. sortLv: 0,
  1523. status: true,
  1524. fixed: '',
  1525. columnWidth: 120
  1526. },{
  1527. userId: this.$store.state.user.name,
  1528. functionId: 102001,
  1529. serialNumber: '102001Table3PartType',
  1530. tableId: '102001Table3',
  1531. tableName: '项目物料表',
  1532. columnProp: 'partType',
  1533. headerAlign: 'center',
  1534. align: 'center',
  1535. columnLabel: '产品类型',
  1536. columnHidden: false,
  1537. columnImage: false,
  1538. columnSortable: false,
  1539. sortLv: 0,
  1540. status: true,
  1541. fixed: '',
  1542. columnWidth: 120
  1543. }
  1544. ],
  1545. // ======== 必填规则 ========
  1546. rules: {
  1547. customerNo: [
  1548. {
  1549. required: true,
  1550. message: ' ',
  1551. trigger: ['change','blur']
  1552. }
  1553. ],
  1554. trackerName: [
  1555. {
  1556. required: true,
  1557. message: ' ',
  1558. trigger: ['change','blur']
  1559. }
  1560. ],
  1561. testNumber: [
  1562. {
  1563. required: true,
  1564. message: ' ',
  1565. trigger: ['change','blur']
  1566. }
  1567. ],
  1568. projectId: [
  1569. {
  1570. required: true,
  1571. message: ' ',
  1572. trigger: ['change','blur']
  1573. }
  1574. ],
  1575. engineerName: [
  1576. {
  1577. required: true,
  1578. message: ' ',
  1579. trigger: ['change','blur']
  1580. }
  1581. ],
  1582. partName: [
  1583. {
  1584. required: true,
  1585. message: ' ',
  1586. trigger: ['change','blur']
  1587. }
  1588. ],
  1589. priorityLevel: [
  1590. {
  1591. required: true,
  1592. message: ' ',
  1593. trigger: ['change','blur']
  1594. }
  1595. ],
  1596. requiredDeliveryDate: [
  1597. {
  1598. required: true,
  1599. message: ' ',
  1600. trigger: ['change','blur']
  1601. }
  1602. ]
  1603. },
  1604. enterResultRules: {
  1605. actualityDeliveryDate: [
  1606. {
  1607. required: true,
  1608. message: ' ',
  1609. trigger: 'change'
  1610. }
  1611. ],
  1612. testResultInformation: [
  1613. {
  1614. required: true,
  1615. message: ' ',
  1616. trigger: 'change'
  1617. }
  1618. ]
  1619. },
  1620. submitResultRules: {
  1621. actualitySendSamplesDate: [
  1622. {
  1623. required: true,
  1624. message: ' ',
  1625. trigger: 'change'
  1626. }
  1627. ],
  1628. sendSamplesMethod: [
  1629. {
  1630. required: true,
  1631. message: ' ',
  1632. trigger: 'change'
  1633. }
  1634. ]
  1635. },
  1636. customerResponseRules: {
  1637. actualityReplyDate: [
  1638. {
  1639. required: true,
  1640. message: ' ',
  1641. trigger: 'change'
  1642. }
  1643. ],
  1644. confirmResults: [
  1645. {
  1646. required: true,
  1647. message: ' ',
  1648. trigger: 'change'
  1649. }
  1650. ],
  1651. confirmBy: [
  1652. {
  1653. required: true,
  1654. message: ' ',
  1655. trigger: 'change'
  1656. }
  1657. ]
  1658. },
  1659. // ======== 复选数据集 ========
  1660. testSelections: [],
  1661. projectPartListSelections: [],
  1662. // ======== 选中的当前行数据 ========
  1663. testCurrentRow: {},
  1664. // ======== 模态框开关控制 ========
  1665. modalFlag: false,
  1666. modalDisableFlag: false,
  1667. enterResultModalFlag: false,
  1668. submitResultModalFlag: false,
  1669. customerResponseModalFlag: false,
  1670. projectPartModelFlag: false
  1671. }
  1672. },
  1673. mounted () {
  1674. this.$nextTick(() => {
  1675. this.height = window.innerHeight / 2 - 240;
  1676. /*第二个表格高度的动态调整*/
  1677. this.secondHeight = window.innerHeight / 2 - 206;
  1678. })
  1679. },
  1680. created () {
  1681. this.getDataList()
  1682. },
  1683. methods: {
  1684. // ======== 分页相关方法 ========
  1685. /**
  1686. * 每页数
  1687. * @param val
  1688. */
  1689. sizeChangeHandle (val) {
  1690. this.pageSize = val
  1691. this.pageIndex = 1
  1692. this.getDataList()
  1693. },
  1694. /**
  1695. * 当前页
  1696. * @param val
  1697. */
  1698. currentChangeHandle (val) {
  1699. this.pageIndex = val
  1700. this.getDataList()
  1701. },
  1702. // ======== 复选框操作相关方法 ========
  1703. /**
  1704. * 选中一行
  1705. * @param row
  1706. */
  1707. projectPartClickRow (row) {
  1708. this.$refs.projectPartTable.toggleRowSelection(row);
  1709. this.confirmProjectPart();
  1710. },
  1711. /**
  1712. * 多选
  1713. * @param val
  1714. */
  1715. selectionProjectPart (val) {
  1716. this.projectPartListSelections = val
  1717. },
  1718. /**
  1719. * 获取唯一值一般都为 id
  1720. * @param row
  1721. * @returns {*}
  1722. */
  1723. getRowKeys (row) {
  1724. return row.testPartNo;
  1725. },
  1726. /**
  1727. * 未知
  1728. * @returns {boolean}
  1729. */
  1730. selectFlag () {
  1731. return true
  1732. },
  1733. // ======== 页签切换相关方法 ========
  1734. /**
  1735. * 列表表格选择替换
  1736. * @param tab
  1737. * @param event
  1738. */
  1739. tabClick (tab, event) {
  1740. // 刷新列表数据
  1741. this.refreshCurrentTabTable()
  1742. },
  1743. /**
  1744. * 当前值发生变化的时候修改
  1745. * @param row
  1746. * @param oldRow
  1747. */
  1748. changeCurrentRow (row, oldRow) {
  1749. // 判断是否是获取焦点的事件
  1750. if (row) {
  1751. this.testCurrentRow = JSON.parse(JSON.stringify(row))
  1752. // 刷新当前页表
  1753. this.refreshCurrentTabTable()
  1754. }
  1755. },
  1756. /**
  1757. * 刷新页签的table数据
  1758. */
  1759. refreshCurrentTabTable () {
  1760. if (this.activeTable === 'test_result') {
  1761. this.getTestResult()
  1762. } else if (this.activeTable === 'project_information') {
  1763. this.getProjectInformation()
  1764. } else if (this.activeTable === 'customer_information') {
  1765. this.getCustomerInformation()
  1766. }
  1767. },
  1768. // ======== 列表数据刷新方法 ========
  1769. /**
  1770. * 获取数据列表
  1771. */
  1772. getDataList () {
  1773. this.searchData.limit = this.pageSize
  1774. this.searchData.page = this.pageIndex
  1775. testInformationSearch(this.searchData).then(({data}) => {
  1776. if (data.code === 0) {
  1777. this.dataList = data.page.list
  1778. this.pageIndex = data.page.currPage
  1779. this.pageSize = data.page.pageSize
  1780. this.totalPage = data.page.totalCount
  1781. this.$refs.selectDiv.setLengthAll( this.dataList.length)
  1782. // 判断是否全部存在数据
  1783. if (this.totalPage > 0) {
  1784. //设置选中行
  1785. this.$refs.testTable.setCurrentRow(this.dataList[0])
  1786. // 加载当前的页签的table
  1787. this.refreshCurrentTabTable()
  1788. this.testClickRow(this.dataList[0])
  1789. } else {
  1790. //设置选中行
  1791. this.$refs.testTable.setCurrentRow({})
  1792. // 加载当前的页签的table
  1793. this.refreshCurrentTabTable()
  1794. this.testClickRow({})
  1795. }
  1796. }
  1797. this.dataListLoading = false
  1798. })
  1799. },
  1800. /**
  1801. * 获取测试结果列表
  1802. */
  1803. getTestResult () {
  1804. let tempData = {
  1805. site: this.$store.state.user.site,
  1806. testNo: this.testCurrentRow.testNo
  1807. }
  1808. // 测试结果对象
  1809. testResultSearch(tempData).then(({data}) => {
  1810. if (data && data.code === 0) {
  1811. this.testResultData = data.rows[0]
  1812. } else {
  1813. this.testResultData = {}
  1814. }
  1815. })
  1816. // 附件列表
  1817. this.getFileContentData()
  1818. },
  1819. /**
  1820. * 获取项目信息
  1821. */
  1822. getProjectInformation () {
  1823. let tempData = {
  1824. site: this.$store.state.user.site,
  1825. projectId: this.testCurrentRow.projectId
  1826. }
  1827. // 报价结果对象
  1828. getProjectInformation(tempData).then(({data}) => {
  1829. if (data && data.code === 0) {
  1830. this.projectInformationData = data.rows[0]
  1831. } else {
  1832. this.projectInformationData = {}
  1833. }
  1834. })
  1835. },
  1836. /**
  1837. * 获取客户信息
  1838. */
  1839. getCustomerInformation () {
  1840. let tempData = {
  1841. site: this.$store.state.user.site,
  1842. customerNo: this.testCurrentRow.customerNo
  1843. }
  1844. // 报价结果对象
  1845. getCustomerInformation(tempData).then(({data}) => {
  1846. if (data && data.code === 0) {
  1847. this.customerInformationData = data.rows[0]
  1848. } else {
  1849. this.customerInformationData = {}
  1850. }
  1851. })
  1852. },
  1853. // ======== 新增/编辑模态框 ========
  1854. /**
  1855. * 报价信息新增模态框
  1856. */
  1857. addModal () {
  1858. this.modalDisableFlag = false
  1859. this.modalFlag = true
  1860. },
  1861. /**
  1862. * 报价信息编辑模态框
  1863. * @param row
  1864. */
  1865. updateModal (row) {
  1866. this.modalData = {
  1867. flag: '2',
  1868. title: '测试编辑',
  1869. site: row.site,
  1870. testNo: row.testNo,
  1871. customerNo: row.customerNo,
  1872. customerDesc: row.customerDesc,
  1873. projectId: row.projectId,
  1874. projectName: row.projectName,
  1875. tracker: row.tracker,
  1876. trackerName: row.trackerName,
  1877. testPartNo: row.testPartNo,
  1878. partName: row.partName,
  1879. engineer: row.engineer,
  1880. engineerName: row.engineerName,
  1881. priorityLevel: row.priorityLevel,
  1882. testNumber: row.testNumber,
  1883. requiredDeliveryDate: row.requiredDeliveryDate,
  1884. remark: row.remark,
  1885. technicalConsiderations: row.technicalConsiderations,
  1886. isNeedToSendSamples: row.isNeedToSendSamples,
  1887. sendSamplesAddress: row.sendSamplesAddress,
  1888. consignee: row.consignee,
  1889. consigneeContact: row.consigneeContact,
  1890. actualityDeliveryDate: row.actualityDeliveryDate,
  1891. testResultInformation: row.testResultInformation,
  1892. actualitySendSamplesDate: row.actualitySendSamplesDate,
  1893. sendSamplesMethod: row.sendSamplesMethod,
  1894. deliverGoodsInformation: row.deliverGoodsInformation,
  1895. deliverGoodsRemark: row.deliverGoodsRemark,
  1896. actualityReplyDate: row.actualityReplyDate,
  1897. confirmResults: row.confirmResults,
  1898. confirmBy: row.confirmBy,
  1899. confirmInformation: row.confirmInformation,
  1900. testStatus: row.testStatus,
  1901. testResultStatus: row.testResultStatus,
  1902. nextToDo: row.nextToDo,
  1903. updateBy: this.$store.state.user.name
  1904. }
  1905. this.modalDisableFlag = true
  1906. this.modalFlag = true
  1907. },
  1908. // ======== 新增/编辑/删除方法 ========
  1909. /**
  1910. * 获取项目物料列表
  1911. */
  1912. getProjectPartList () {
  1913. if (!this.modalData.projectId){
  1914. this.projectPartList = [];
  1915. return
  1916. }
  1917. // 先清空缓存选中
  1918. this.$nextTick(() => this.$refs.projectPartTable.clearSelection())
  1919. // 拿到选中的产品编号
  1920. let projectPartList = this.modalData.testPartNo.split(';')
  1921. this.projectPartData.projectId = this.modalData.projectId;
  1922. // 查询所有项目物料
  1923. getProjectPartList(this.projectPartData).then(({data}) => {
  1924. if (data && data.code === 0) {
  1925. this.projectPartList = data.rows
  1926. this.projectPartList.forEach (val => {
  1927. // 回显选中的项目物料
  1928. if (projectPartList.includes(val.testPartNo)) {
  1929. this.$nextTick(() => this.$refs.projectPartTable.toggleRowSelection(val, true))
  1930. }
  1931. })
  1932. this.projectPartModelFlag = true
  1933. }else {
  1934. this.$alert(data.msg, '错误', {
  1935. confirmButtonText: '确定'
  1936. })
  1937. }
  1938. })
  1939. },
  1940. /**
  1941. * 确认多选项目物料
  1942. */
  1943. confirmProjectPart () {
  1944. if(this.projectPartListSelections.length === 0){
  1945. this.$message.warning('请勾选项目物料!')
  1946. return
  1947. }
  1948. this.modalData.testPartNo = ''
  1949. this.modalData.partName = ''
  1950. for (let i = 0; i < this.projectPartListSelections.length; i++) {
  1951. this.modalData.testPartNo = this.modalData.testPartNo + ";" + this.projectPartListSelections[i].testPartNo
  1952. this.modalData.partName = this.modalData.partName + ";" + this.projectPartListSelections[i].partName
  1953. }
  1954. this.modalData.testPartNo = this.modalData.testPartNo.substring(1)
  1955. this.modalData.partName = this.modalData.partName.substring(1)
  1956. this.projectPartModelFlag = false
  1957. },
  1958. /**
  1959. * 客户信息新增/编辑
  1960. */
  1961. saveData () {
  1962. this.$refs.modalForm.validate((valid) => {
  1963. if (!valid) {
  1964. this.validateDataValue()
  1965. }else {
  1966. if (this.projectPartListSelections.length <= 0){
  1967. this.$message.warning('请选择项目料号')
  1968. return
  1969. }
  1970. this.confirmProjectPart();
  1971. if (this.modalData.flag === '1'){
  1972. this.saveTest()
  1973. }else {
  1974. this.updateTest()
  1975. }
  1976. }
  1977. })
  1978. },
  1979. validateDataValue(){
  1980. if (this.modalData.customerNo === '' || this.modalData.customerNo == null) {
  1981. this.$message.warning('请选择客户编码!')
  1982. return
  1983. }
  1984. if (this.modalData.customerDesc === '' || this.modalData.customerDesc == null) {
  1985. this.$message.warning('请选择客户名称!')
  1986. return
  1987. }
  1988. if (this.modalData.tracker === '' || this.modalData.tracker == null) {
  1989. this.$message.warning('请选择跟单员编码!')
  1990. return
  1991. }
  1992. if (this.modalData.trackerName === '' || this.modalData.trackerName == null) {
  1993. this.$message.warning('请选择跟单员名称!')
  1994. return
  1995. }
  1996. if (this.modalData.projectId === '' || this.modalData.projectId == null) {
  1997. this.$message.warning('请选择项目编码!')
  1998. return
  1999. }
  2000. if (this.modalData.projectName === '' || this.modalData.projectName == null) {
  2001. this.$message.warning('请选择项目名称!')
  2002. return
  2003. }
  2004. if (this.modalData.engineer === '' || this.modalData.engineer == null) {
  2005. this.$message.warning('请选择工程师编码!')
  2006. return
  2007. }
  2008. if (this.modalData.engineerName === '' || this.modalData.engineerName == null) {
  2009. this.$message.warning('请选择工程师名称!')
  2010. return
  2011. }
  2012. if (this.modalData.testPartNo === '' || this.modalData.testPartNo == null) {
  2013. this.$message.warning('请选择项目料号!')
  2014. return
  2015. }
  2016. if (this.modalData.partName === '' || this.modalData.partName == null) {
  2017. this.$message.warning('请选择物料名称!')
  2018. return
  2019. }
  2020. if (this.modalData.priorityLevel === '' || this.modalData.priorityLevel == null) {
  2021. this.$message.warning('请选择优先等级!')
  2022. return
  2023. }
  2024. if (!this.modalData.testNumber) {
  2025. this.$message.warning('请输入正确的测试数量!')
  2026. return
  2027. }
  2028. if (this.modalData.requiredDeliveryDate === '' || this.modalData.requiredDeliveryDate == null) {
  2029. this.$message.warning('请输入要求交付日期!')
  2030. return
  2031. }
  2032. },
  2033. saveTest(){
  2034. testInformationSave(this.modalData).then(({data}) => {
  2035. if (data && data.code === 0) {
  2036. this.getDataList()
  2037. this.modalFlag = false
  2038. this.$message({
  2039. message: '操作成功',
  2040. type: 'success',
  2041. duration: 1500,
  2042. onClose: () => {}
  2043. })
  2044. } else {
  2045. this.$alert(data.msg, '错误', {
  2046. confirmButtonText: '确定'
  2047. })
  2048. }
  2049. })
  2050. },
  2051. updateTest(){
  2052. testInformationEdit(this.modalData).then(({data}) => {
  2053. if (data && data.code === 0) {
  2054. this.getDataList()
  2055. this.modalFlag = false
  2056. this.$message({
  2057. message: '操作成功',
  2058. type: 'success',
  2059. duration: 1500,
  2060. onClose: () => {}
  2061. })
  2062. } else {
  2063. this.$alert(data.msg, '错误', {
  2064. confirmButtonText: '确定'
  2065. })
  2066. }
  2067. })
  2068. },
  2069. /**
  2070. * 测试信息删除
  2071. */
  2072. delModal () {
  2073. if(this.testSelections.length === 0){
  2074. this.$message.warning('请勾选要删除的测试信息!')
  2075. return
  2076. }
  2077. this.$confirm(`是否删除这 `+ this.testSelections.length +` 条测试信息?`, '提示', {
  2078. confirmButtonText: '确定',
  2079. cancelButtonText: '取消',
  2080. type: 'warning'
  2081. }).then(() => {
  2082. let tempData = {
  2083. informationList: this.testSelections
  2084. }
  2085. testInformationDelete(tempData).then(({data}) => {
  2086. if (data && data.code === 0) {
  2087. this.getDataList()
  2088. this.testSelections = []
  2089. this.$message({
  2090. message: '操作成功',
  2091. type: 'success',
  2092. duration: 1500,
  2093. onClose: () => {}
  2094. })
  2095. } else {
  2096. this.$alert(data.msg, '错误', {
  2097. confirmButtonText: '确定'
  2098. })
  2099. }
  2100. })
  2101. }).catch(() => {
  2102. })
  2103. },
  2104. // ======== 列表操作方法 ========
  2105. /**
  2106. * 单机选中测试信息
  2107. * @param row
  2108. */
  2109. testClickRow (row) {
  2110. // this.$refs.testTable.toggleRowSelection(row)
  2111. this.testCurrentRow = JSON.parse(JSON.stringify(row))
  2112. this.testDetailData = JSON.parse(JSON.stringify(row))
  2113. },
  2114. /**
  2115. * 复选报价信息
  2116. * @param val
  2117. */
  2118. selectionTest (val) {
  2119. this.testSelections = val
  2120. this.$refs.selectDiv.setLengthselected(this.testSelections.length)
  2121. },
  2122. // ======== 报价结果相关方法 ========
  2123. /**
  2124. * 封装录入方法
  2125. */
  2126. packTestResultModal () {
  2127. // 重置对象
  2128. this.enterResultData = {
  2129. site: this.$store.state.user.site,
  2130. testNo: '',
  2131. actualityDeliveryDate: '',
  2132. testResultInformation: '',
  2133. testResultStatus: 'E',
  2134. fileContentList: [],
  2135. updateBy: this.$store.state.user.name
  2136. }
  2137. this.enterResultData.testNo = this.testCurrentRow.testNo
  2138. // // 获得这些测试号的全部附件
  2139. // this.getFileContentList()
  2140. this.enterResultModalFlag = true
  2141. },
  2142. /**
  2143. * 录入测试结果
  2144. */
  2145. testResultModal () {
  2146. this.packTestResultModal()
  2147. },
  2148. /**
  2149. * 保存测试结果
  2150. */
  2151. saveTestResult () {
  2152. if (this.enterResultData.actualityDeliveryDate === '' || this.enterResultData.actualityDeliveryDate == null) {
  2153. this.$message.warning('请选择实际交付日期!')
  2154. return
  2155. }
  2156. if (this.enterResultData.testResultInformation === '' || this.enterResultData.testResultInformation == null) {
  2157. this.$message.warning('请填写测试结果信息!')
  2158. return
  2159. }
  2160. saveTestResult(this.enterResultData).then(({data}) => {
  2161. if (data && data.code === 0) {
  2162. this.getDataList()
  2163. this.enterResultModalFlag = false
  2164. this.$message({
  2165. message: '操作成功',
  2166. type: 'success',
  2167. duration: 1500,
  2168. onClose: () => {}
  2169. })
  2170. } else {
  2171. this.$alert(data.msg, '错误', {
  2172. confirmButtonText: '确定'
  2173. })
  2174. }
  2175. })
  2176. },
  2177. /**
  2178. * 封装送样方法
  2179. */
  2180. packSubmitTestModal () {
  2181. this.submitResultData = {
  2182. site: this.$store.state.user.site,
  2183. testNo: '',
  2184. actualitySendSamplesDate: '',
  2185. sendSamplesMethod: '',
  2186. deliverGoodsInformation: '',
  2187. deliverGoodsRemark: '',
  2188. testResultStatus: 'S',
  2189. updateBy: this.$store.state.user.name,
  2190. }
  2191. // 获得选中的测试号
  2192. this.submitResultData.testNo = this.testCurrentRow.testNo
  2193. this.submitResultModalFlag = true
  2194. },
  2195. /**
  2196. * 提交送样信息
  2197. */
  2198. submitTestModal () {
  2199. this.packSubmitTestModal()
  2200. },
  2201. /**
  2202. * 保存送样结果
  2203. */
  2204. saveSubmitResult () {
  2205. if (this.submitResultData.actualitySendSamplesDate === '' || this.submitResultData.actualitySendSamplesDate == null) {
  2206. this.$message.warning('请选择实际送样日期!')
  2207. return
  2208. }
  2209. if (this.submitResultData.sendSamplesMethod === '' || this.submitResultData.sendSamplesMethod == null) {
  2210. this.$message.warning('请选择送样方式!')
  2211. return
  2212. }
  2213. saveSubmitResult(this.submitResultData).then(({data}) => {
  2214. if (data && data.code === 0) {
  2215. this.getDataList()
  2216. this.submitResultModalFlag = false
  2217. this.$message({
  2218. message: '操作成功',
  2219. type: 'success',
  2220. duration: 1500,
  2221. onClose: () => {}
  2222. })
  2223. } else {
  2224. this.$alert(data.msg, '错误', {
  2225. confirmButtonText: '确定'
  2226. })
  2227. }
  2228. })
  2229. },
  2230. /**
  2231. * 封装回复方法
  2232. */
  2233. packCustomerResponseModal () {
  2234. this.customerResponseData = {
  2235. site: this.$store.state.user.site,
  2236. testNo: '',
  2237. actualityReplyDate: '',
  2238. confirmResults: '',
  2239. confirmBy: '',
  2240. confirmInformation: '',
  2241. testResultStatus: 'R',
  2242. updateBy: this.$store.state.user.name
  2243. }
  2244. // 获得选中的测试号
  2245. this.customerResponseData.testNo = this.testCurrentRow.testNo
  2246. this.customerResponseModalFlag = true
  2247. },
  2248. /**
  2249. * 客户回复
  2250. */
  2251. customerResponseModal () {
  2252. this.packCustomerResponseModal()
  2253. },
  2254. /**
  2255. * 保存客户回复
  2256. */
  2257. saveCustomerResponse () {
  2258. if (this.customerResponseData.actualityReplyDate === '' || this.customerResponseData.actualityReplyDate == null) {
  2259. this.$message.warning('请选择实际回复日期!')
  2260. return
  2261. }
  2262. if (this.customerResponseData.confirmResults === '' || this.customerResponseData.confirmResults == null) {
  2263. this.$message.warning('请选择客户确认结果!')
  2264. return
  2265. }
  2266. if (this.customerResponseData.confirmBy === '' || this.customerResponseData.confirmBy == null) {
  2267. this.$message.warning('请填写客户确认人!')
  2268. return
  2269. }
  2270. saveCustomerResponse(this.customerResponseData).then(({data}) => {
  2271. if (data && data.code === 0) {
  2272. this.getDataList()
  2273. this.customerResponseModalFlag = false
  2274. this.$message({
  2275. message: '操作成功',
  2276. type: 'success',
  2277. duration: 1500,
  2278. onClose: () => {}
  2279. })
  2280. } else {
  2281. this.$alert(data.msg, '错误', {
  2282. confirmButtonText: '确定'
  2283. })
  2284. }
  2285. })
  2286. },
  2287. // ======== 报价单附件的相关方法 ========
  2288. /**
  2289. * 获取报价单附件列表
  2290. */
  2291. getFileContentData () {
  2292. let currentData = {
  2293. orderRef1: this.$store.state.user.site,
  2294. orderRef2: this.testCurrentRow.testNo
  2295. }
  2296. getFileContentList(currentData).then(({data}) => {
  2297. if (data && data.code === 0) {
  2298. this.fileContentList = data.rows
  2299. } else {
  2300. this.fileContentList = []
  2301. }
  2302. })
  2303. },
  2304. /**
  2305. * 上传文件
  2306. */
  2307. uploadFile () {
  2308. let currentData = {
  2309. titleCon: '测试附件上传',
  2310. site: this.$store.state.user.site,
  2311. createBy: this.$store.state.user.name,
  2312. testNo: this.enterResultData.testNo,
  2313. fileRemark: '',
  2314. folder: 'testFile'
  2315. }
  2316. //打开组件 去做新增业务
  2317. this.$nextTick(() => {
  2318. this.$refs.testUploadFile.init(currentData)
  2319. })
  2320. },
  2321. /**
  2322. * 文件删除
  2323. * @param row
  2324. */
  2325. deleteFile (row) {
  2326. this.$confirm('确定要删除此文件?', '提示', {
  2327. confirmButtonText: '确定',
  2328. cancelButtonText: '取消',
  2329. type: 'warning'
  2330. }).then(() => {
  2331. deleteTestFile(row).then(({data}) => {
  2332. if (data && data.code === 0) {
  2333. this.getFileContentList()
  2334. this.$message({
  2335. message: '操作成功',
  2336. type: 'success',
  2337. duration: 1500,
  2338. onClose: () => {}
  2339. })
  2340. } else {
  2341. this.$alert(data.msg, '错误', {
  2342. confirmButtonText: '确定'
  2343. })
  2344. }
  2345. })
  2346. }).catch(() => {
  2347. })
  2348. },
  2349. /**
  2350. * 文件下载
  2351. * @param row
  2352. */
  2353. downloadFile (row) {
  2354. downLoadQuotationFile(row).then(({data}) => {
  2355. // 不限制文件下载类型
  2356. const blob = new Blob([data], {type:'application/octet-stream;charset=utf-8'})
  2357. // 下载文件名称
  2358. const fileName = row.fileName
  2359. // a标签下载
  2360. const linkNode = document.createElement('a')
  2361. linkNode.download = fileName // a标签的download属性规定下载文件的名称
  2362. linkNode.style.display = 'none'
  2363. linkNode.href = URL.createObjectURL(blob) // 生成一个Blob URL
  2364. document.body.appendChild(linkNode)
  2365. linkNode.click() // 模拟在按钮上的一次鼠标单击
  2366. URL.revokeObjectURL(linkNode.href) // 释放URL 对象
  2367. document.body.removeChild(linkNode)
  2368. })
  2369. },
  2370. // ======== chooseList相关方法 ========
  2371. /**
  2372. * 获取基础数据列表S
  2373. * @param val
  2374. * @param type
  2375. */
  2376. getBaseList (val, type) {
  2377. this.tagNo = val
  2378. this.tagNo1 = type
  2379. this.$nextTick(() => {
  2380. let strVal = ''
  2381. if (val === 102) {
  2382. if(type === 1) {
  2383. strVal = this.modalData.customerNo
  2384. }
  2385. }
  2386. if (val === 103) {
  2387. if(type === 1) {
  2388. strVal = this.modalData.tracker
  2389. }
  2390. if(type === 2) {
  2391. strVal = this.modalData.engineer
  2392. }
  2393. }
  2394. if (val === 104) {
  2395. if(type === 1) {
  2396. strVal = this.modalData.projectId
  2397. }
  2398. }
  2399. this.$refs.baseList.init(val, strVal)
  2400. })
  2401. },
  2402. /**
  2403. * 列表方法的回调
  2404. * @param val
  2405. */
  2406. getBaseData (val) {
  2407. if (this.tagNo === 102) {
  2408. if(this.tagNo1 === 1) {
  2409. this.modalData.customerNo = val.Customer_no
  2410. this.modalData.customerDesc = val.Customer_desc
  2411. }
  2412. }
  2413. if (this.tagNo === 103) {
  2414. if(this.tagNo1 === 1) {
  2415. this.modalData.tracker = val.username
  2416. this.modalData.trackerName = val.user_display
  2417. }
  2418. if(this.tagNo1 === 2) {
  2419. this.modalData.engineer = val.username
  2420. this.modalData.engineerName = val.user_display
  2421. }
  2422. }
  2423. if (this.tagNo === 104) {
  2424. if(this.tagNo1 === 1) {
  2425. this.modalData.projectId = val.project_id
  2426. this.modalData.projectName = val.project_name
  2427. this.getProjectPartList();
  2428. }
  2429. }
  2430. },
  2431. // ======== 导出相关方法 ========
  2432. /**
  2433. * 导出excel
  2434. */
  2435. async createExportData () {
  2436. this.searchData.limit = -1
  2437. this.searchData.page = 1
  2438. await testInformationSearch(this.searchData).then(({data}) => {
  2439. this.resultList = data.page.list
  2440. })
  2441. return this.resultList
  2442. },
  2443. startDownload () {
  2444. },
  2445. finishDownload () {
  2446. },
  2447. fields () {
  2448. let json = '{'
  2449. this.columnList.forEach((item, index) => {
  2450. if (index == this.columnList.length - 1) {
  2451. json += '"' + item.columnLabel + '"' + ':' + '"' + item.columnProp + '"'
  2452. } else {
  2453. json += '"' + item.columnLabel + '"' + ':' + '"' + item.columnProp + '"' + ','
  2454. }
  2455. })
  2456. json += '}'
  2457. let s = eval('(' + json + ')')
  2458. return s
  2459. },
  2460. closeModalDiaLog () {
  2461. this.$refs.modalForm.resetFields();
  2462. this.modalData = {
  2463. flag: '1',
  2464. title: '测试新增',
  2465. site: this.$store.state.user.site,
  2466. testNo: '',
  2467. customerNo: '',
  2468. customerDesc: '',
  2469. projectId: '',
  2470. projectName: '',
  2471. tracker: '',
  2472. trackerName: '',
  2473. testPartNo: '',
  2474. partName: '',
  2475. engineer: '',
  2476. engineerName: '',
  2477. priorityLevel: '一般',
  2478. testNumber: 1,
  2479. requiredDeliveryDate: '',
  2480. remark: '',
  2481. technicalConsiderations: '',
  2482. isNeedToSendSamples: '',
  2483. sendSamplesAddress: '',
  2484. consignee: '',
  2485. consigneeContact: '',
  2486. actualityDeliveryDate: '',
  2487. testResultInformation: '',
  2488. actualitySendSamplesDate: '',
  2489. sendSamplesMethod: '',
  2490. deliverGoodsInformation: '',
  2491. deliverGoodsRemark: '',
  2492. actualityReplyDate: '',
  2493. confirmResults: '',
  2494. confirmBy: '',
  2495. confirmInformation: '',
  2496. testStatus: '草稿',
  2497. testResultStatus: '',
  2498. nextToDo: '',
  2499. createDate: '',
  2500. createBy: '',
  2501. updateDate: '',
  2502. updateBy: ''
  2503. }
  2504. },
  2505. checkSelectable(row,index){
  2506. if (this.modalData.flag === '1'){
  2507. return true
  2508. }else {
  2509. return false
  2510. }
  2511. },
  2512. }
  2513. }
  2514. </script>
  2515. <style scoped lang="scss">
  2516. /deep/ .customer-tab .el-tabs__content {
  2517. padding: 0px !important;
  2518. height: 459px;
  2519. }
  2520. .right /deep/ .el-input__inner{
  2521. text-align: right;
  2522. }
  2523. /deep/ .inlineNumber input::-webkit-outer-spin-button,
  2524. /deep/ .inlineNumber input::-webkit-inner-spin-button {
  2525. -webkit-appearance: none;
  2526. }
  2527. /deep/ .inlineNumber input[type="number"]{
  2528. -moz-appearance: textfield;
  2529. padding-right: 5px !important;
  2530. }
  2531. </style>