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.

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