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.

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