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.

3711 lines
136 KiB

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