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.

4470 lines
163 KiB

  1. <template>
  2. <div class="mod-config">
  3. <div>
  4. <span @click="favoriteFunction()">
  5. <icon-svg :name="favorite?'xiangqufill':'xiangqu'" class="sl-svg"></icon-svg>
  6. </span>
  7. </div>
  8. <el-form :inline="true" label-position="top" :model="searchData" @keyup.enter.native="getDataList()">
  9. <el-form-item :label="'项目编码'">
  10. <el-input v-model="searchData.projectId" style="width: 120px"></el-input>
  11. </el-form-item>
  12. <el-form-item :label="'项目名称'">
  13. <el-input v-model="searchData.projectDesc" style="width: 120px"></el-input>
  14. </el-form-item>
  15. <el-form-item :label="'客户编码'">
  16. <el-input v-model="searchData.customerNo" style="width: 120px"></el-input>
  17. </el-form-item>
  18. <el-form-item :label="'客户名称'">
  19. <el-input v-model="searchData.customerDesc" style="width: 120px"></el-input>
  20. </el-form-item>
  21. <el-form-item :label="'BU'">
  22. <el-select v-model="searchData.buDesc" placeholder="请选择" clearable style="width: 130px">
  23. <el-option
  24. v-for = "i in userBuList"
  25. :key = "i.buNo"
  26. :label = "i.buDesc"
  27. :value = "i.buDesc">
  28. </el-option>
  29. </el-select>
  30. </el-form-item>
  31. <el-form-item :label="'项目分类'">
  32. <el-select v-model="searchData.projectCategory" placeholder="请选择" clearable style="width: 130px">
  33. <el-option
  34. v-for = "i in projectCategoryList"
  35. :key = "i.projectCategory"
  36. :label = "i.projectCategory"
  37. :value = "i.projectCategory">
  38. </el-option>
  39. </el-select>
  40. </el-form-item>
  41. <el-form-item :label="'项目状态'">
  42. <el-select v-model="searchData.status" placeholder="请选择" clearable style="width: 130px">
  43. <el-option
  44. v-for = "i in statusList"
  45. :key = "i.status"
  46. :label = "i.status"
  47. :value = "i.status">
  48. </el-option>
  49. </el-select>
  50. </el-form-item>
  51. <el-form-item :label="'立项日期:'">
  52. <el-date-picker
  53. style="width: 120px"
  54. v-model="searchData.startDate"
  55. type="date"
  56. value-format="yyyy-MM-dd"
  57. placeholder="选择日期">
  58. </el-date-picker>
  59. -
  60. <el-date-picker
  61. style="width: 120px"
  62. v-model="searchData.endDate"
  63. type="date"
  64. value-format="yyyy-MM-dd"
  65. placeholder="选择日期">
  66. </el-date-picker>
  67. </el-form-item>
  68. <!-- <el-form-item :label="'在用'">-->
  69. <!-- <el-select filterable v-model="searchData.active" style="width: 130px">-->
  70. <!-- <el-option label="全部" value=""></el-option>-->
  71. <!-- <el-option label="是" value="Y"></el-option>-->
  72. <!-- <el-option label="否" value="N"></el-option>-->
  73. <!-- </el-select>-->
  74. <!-- </el-form-item>-->
  75. <el-form-item :label="' '">
  76. <el-button v-if="!authSearch" @click="getDataList()">查询</el-button>
  77. <el-button v-if="!authSave" type="primary" @click="addModal()">新增</el-button>
  78. </el-form-item>
  79. </el-form>
  80. <el-table
  81. :height="height + 110"
  82. :data="dataList"
  83. ref="mainTable"
  84. highlight-current-row
  85. @row-click="proofingClickRow"
  86. @current-change="changeCurrentRow"
  87. border
  88. style="width: 100%;">
  89. <el-table-column
  90. v-for="(item,index) in columnList" :key="index"
  91. :sortable="item.columnSortable"
  92. :prop="item.columnProp"
  93. :header-align="item.headerAlign"
  94. :show-overflow-tooltip="item.showOverflowTooltip"
  95. :align="item.align"
  96. :fixed="item.fixed==''?false:item.fixed"
  97. :min-width="item.columnWidth"
  98. :label="item.columnLabel">
  99. <template slot-scope="scope">
  100. <span v-if="!item.columnHidden">{{ scope.row[item.columnProp] }}</span>
  101. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
  102. </template>
  103. </el-table-column>
  104. <el-table-column
  105. fixed="right"
  106. header-align="center"
  107. align="center"
  108. width="178"
  109. label="操作">
  110. <template slot-scope="scope">
  111. <a v-if="!authUpdate" type="text" size="small" @click="addProofRecord(scope.row)">新增打样</a>
  112. <a v-if="!authUpdate" type="text" size="small" @click="changeFormalPartNo(scope.row)">转正式料号</a>
  113. <a v-if="!authUpdate" type="text" size="small" @click="updateModal(scope.row)">修改</a>
  114. <a v-if="!authDelete" type="text" size="small" @click="eamProjectInfoDelete(scope.row)">删除</a>
  115. </template>
  116. </el-table-column>
  117. </el-table>
  118. <el-pagination
  119. @size-change="sizeChangeHandle"
  120. @current-change="currentChangeHandle"
  121. :current-page="pageIndex"
  122. :page-sizes="[20, 50, 100, 200, 500]"
  123. :page-size="pageSize"
  124. :total="totalPage"
  125. layout="total, sizes, prev, pager, next, jumper">
  126. </el-pagination>
  127. <el-dialog title="项目" :close-on-click-modal="false" @close="closeClear" v-drag :visible.sync="modalFlag" width="600px">
  128. <!-- <el-form :inline="true" label-position="top" :model="modalData" :rules="rules" style="margin-left: 7px;margin-top: -5px;">-->
  129. <!-- <el-form-item label="是否在用" prop="active" :rules="rules.activeType">-->
  130. <!-- <el-select filterable v-model="modalData.active" style="width: 140px">-->
  131. <!-- <el-option label="是" value="Y"></el-option>-->
  132. <!-- <el-option label="否" value="N"></el-option>-->
  133. <!-- </el-select>-->
  134. <!-- </el-form-item>-->
  135. <!-- </el-form>-->
  136. <el-form :inline="true" label-position="top" :model="modalData" :rules="rules" style="margin-left: 7px;margin-top: -5px;">
  137. <el-form-item label="BU" prop="bu" :rules="rules.bu">
  138. <el-select v-model="modalData.bu" placeholder="请选择" :disabled="modalDisableFlag" style="width: 110px">
  139. <el-option
  140. v-for = "i in userBuList"
  141. :key = "i.buNo"
  142. :label = "i.buNo"
  143. :value = "i.buNo">
  144. <span style="float: right; color: #8492a6;white-space:nowrap;overflow:hidden;text-overflow:ellipsis; font-size: 11px;width: 60px">
  145. {{ i.buDesc }}
  146. </span>
  147. </el-option>
  148. </el-select>
  149. </el-form-item>
  150. <el-form-item label="项目编码" prop="projectId" :rules="rules.projectId">
  151. <el-input v-model="modalData.projectId" style="width: 110px"></el-input>
  152. </el-form-item>
  153. <el-form-item label="项目名称" prop="projectDesc" :rules="rules.projectDesc">
  154. <el-input v-model="modalData.projectDesc" style="width: 170px"></el-input>
  155. </el-form-item>
  156. <el-form-item label="区域" prop="cProjectRegion" :rules="rules.cProjectRegion">
  157. <el-select v-model="modalData.cProjectRegion" placeholder="请选择" clearable style="width: 110px">
  158. <el-option
  159. v-for = "i in cProjectRegionList"
  160. :key = "i.cProjectRegion"
  161. :label = "i.cProjectRegion"
  162. :value = "i.cProjectRegion">
  163. </el-option>
  164. </el-select>
  165. </el-form-item>
  166. </el-form>
  167. <el-form :inline="true" label-position="top" :model="modalData" :rules="rules" style="margin-left: 7px;margin-top: -5px;">
  168. <el-form-item label="项目分类" prop="projectCategory" :rules="rules.projectCategory">
  169. <el-select v-model="modalData.projectCategory" placeholder="请选择" clearable style="width: 110px">
  170. <el-option
  171. v-for = "i in projectCategoryList"
  172. :key = "i.projectCategory"
  173. :label = "i.projectCategory"
  174. :value = "i.projectCategory">
  175. </el-option>
  176. </el-select>
  177. </el-form-item>
  178. <el-form-item prop="customerNo" :rules="rules.customerNo" >
  179. <span slot="label" style="" @click="getBaseList(509)"><a herf="#">客户编码</a></span>
  180. <el-input v-model="modalData.customerNo" disabled style="width: 110px"></el-input>
  181. </el-form-item>
  182. <el-form-item label="客户名称" prop="customerDesc" :rules="rules.customerDesc">
  183. <el-input v-model="modalData.customerDesc" disabled style="width: 170px"></el-input>
  184. </el-form-item>
  185. <el-form-item label="优先级" prop="priority" :rules="rules.priority">
  186. <el-select v-model="modalData.priority" placeholder="请选择" clearable style="width: 110px">
  187. <el-option
  188. v-for = "i in priorityList"
  189. :key = "i.priority"
  190. :label = "i.priority"
  191. :value = "i.priority">
  192. </el-option>
  193. </el-select>
  194. </el-form-item>
  195. </el-form>
  196. <el-form :inline="true" label-position="top" :model="modalData" :rules="rules" style="margin-left: 7px;margin-top: -5px;">
  197. <el-form-item :label="'立项日期:'">
  198. <el-date-picker
  199. style="width: 110px"
  200. v-model="modalData.projectCreationDate"
  201. type="date"
  202. value-format="yyyy-MM-dd"
  203. placeholder="选择日期">
  204. </el-date-picker>
  205. </el-form-item>
  206. <el-form-item label="项目料号" prop="testPartNo" :rules="rules.testPartNo" >
  207. <el-input v-model="modalData.testPartNo" disabled style="width: 110px"></el-input>
  208. </el-form-item>
  209. <el-form-item label="料号描述" prop="partDesc" :rules="rules.partDesc" >
  210. <el-input v-model="modalData.partDesc" style="width: 170px"></el-input>
  211. </el-form-item>
  212. <el-form-item :label="'预计完成日期:'" :rules="rules.needDate">
  213. <el-date-picker
  214. style="width: 110px"
  215. v-model="modalData.needDate"
  216. type="date"
  217. value-format="yyyy-MM-dd"
  218. placeholder="选择日期">
  219. </el-date-picker>
  220. </el-form-item>
  221. <!-- <el-form-item label="文档类型ID" prop="documentTypeId" :rules="rules.documentTypeIdType">-->
  222. <!-- <el-input v-model="modalData.documentTypeId" style="width: 230px"></el-input>-->
  223. <!-- </el-form-item>-->
  224. </el-form>
  225. <el-form :inline="true" label-position="top" :model="modalData" :rules="rules" style="margin-left: 7px;margin-top: -5px;">
  226. <!-- <el-form-item prop="projectManager" :rules="rules.projectManager">-->
  227. <!-- <el-input v-model="modalData.projectManager" disabled style="width: 110px"></el-input>-->
  228. <!-- </el-form-item>-->
  229. <el-form-item label="PM/Sales" prop="projectManagerName" :rules="rules.projectManagerName">
  230. <span slot="label" style="" @click="projectManagerFlag = true "><a herf="#">PM/Sales</a></span>
  231. <el-input v-model="modalData.projectManagerName" disabled style="width: 110px"></el-input>
  232. </el-form-item>
  233. <el-form-item label="PjM" prop="projectOwner" :rules="rules.projectOwner">
  234. <span slot="label" style="" @click="projectOwnerFlag = true"><a herf="#">PjM</a></span>
  235. <el-input v-model="modalData.projectOwnerName" disabled style="width: 110px"></el-input>
  236. </el-form-item>
  237. <el-form-item label="Engineer" prop="engineerName" :rules="rules.engineerName">
  238. <span slot="label" style="" @click="engineer6Flag = true"><a herf="#">Engineer</a></span>
  239. <el-input v-model="modalData.engineerName" disabled style="width: 170px"></el-input>
  240. </el-form-item>
  241. <!-- <el-form-item prop="cQualityEngineer2" :rules="rules.cQualityEngineer2">-->
  242. <!-- <el-input v-model="modalData.cQualityEngineer2" disabled style="width: 110px"></el-input>-->
  243. <!-- </el-form-item>-->
  244. <el-form-item label="IPQC-Lam/Pri/Etch/Slit" prop="cQualityEngineer1Name" :rules="rules.cQualityEngineer1Name">
  245. <span slot="label" style="" @click="engineerFlag = true"><a herf="#">IPQC-Lam/Pri/Etch/Slit</a></span>
  246. <el-input v-model="modalData.cQualityEngineer1Name" disabled style="width: 110px"></el-input>
  247. </el-form-item>
  248. <el-form-item label="IPQC-Converting" prop="cQualityEngineer2Name" :rules="rules.cQualityEngineer2Name">
  249. <span slot="label" style="" @click="IPQCFlag = true"><a herf="#">IPQC-Converting</a></span>
  250. <el-input v-model="modalData.cQualityEngineer2Name" disabled style="width: 110px"></el-input>
  251. </el-form-item>
  252. <el-form-item label="FQC" prop="cQualityEngineer3Name" :rules="rules.cQualityEngineer3Name">
  253. <span slot="label" style="" @click="FQCFlag = true"><a herf="#">FQC</a></span>
  254. <el-input v-model="modalData.cQualityEngineer3Name" disabled style="width: 110px"></el-input>
  255. </el-form-item>
  256. <el-form-item label="MFG" prop="cManufactureEngineerName" :rules="rules.cManufactureEngineerName">
  257. <span slot="label" style="" @click="MFGlag = true"><a herf="#">MFG</a></span>
  258. <el-input v-model="modalData.cManufactureEngineerName" disabled style="width: 170px"></el-input>
  259. </el-form-item>
  260. </el-form>
  261. <el-footer style="height:40px;margin-top: 10px;text-align:center">
  262. <el-button type="primary" @click="saveData()">保存</el-button>
  263. <el-button @click="modalFlag = false">关闭</el-button>
  264. </el-footer>
  265. </el-dialog>
  266. <!--项目经理选择弹框-->
  267. <el-dialog title="PM/Sales" @close="closeProjectManagerInfoDialog" @open="openProjectManagerInfoDialog" :visible.sync="projectManagerFlag" width="559px" v-drag>
  268. <el-form inline="inline" label-position="top" :model="searchBusinessData" style="margin-left: 7px;margin-top: -5px;">
  269. <el-form-item label="用户账号">
  270. <el-input v-model="searchBusinessData.username" clearable style="width: 110px"></el-input>
  271. </el-form-item>
  272. <el-form-item label="用户名">
  273. <el-input v-model="searchBusinessData.userDisplay" clearable style="width: 110px"></el-input>
  274. </el-form-item>
  275. <el-form-item label="是否在用">
  276. <el-select filterable v-model="searchBusinessData.active" style="width: 140px">
  277. <el-option label="是" value="Y"></el-option>
  278. <el-option label="否" value="N"></el-option>
  279. </el-select>
  280. </el-form-item>
  281. <el-form-item label=" ">
  282. <el-button type="primary" style="padding: 3px 12px" @click="searchBusinessInfoList()">查询</el-button>
  283. </el-form-item>
  284. </el-form>
  285. <el-table
  286. :height="height + 110"
  287. :data="businessDataList"
  288. stripe
  289. highlight-current-row
  290. border
  291. @row-dblclick="projectManagerRowDblclick"
  292. @selection-change="selectionBusiness"
  293. style="width: 100%;">
  294. <el-table-column
  295. type="selection"
  296. width="55">
  297. </el-table-column>
  298. <el-table-column
  299. prop="username"
  300. header-align="center"
  301. align="center"
  302. label="用户账号">
  303. </el-table-column>
  304. <el-table-column
  305. prop="userDisplay"
  306. header-align="center"
  307. align="center"
  308. label="用户名">
  309. </el-table-column>
  310. <el-table-column
  311. prop="active"
  312. header-align="center"
  313. align="center"
  314. label="是否在用">
  315. </el-table-column>
  316. </el-table>
  317. <el-footer style="height:40px;margin-top: 10px;text-align:center">
  318. <el-button type="primary" @click="saveSelectionInfo()">确定</el-button>
  319. <el-button @click="projectManagerFlag = false">关闭</el-button>
  320. </el-footer>
  321. </el-dialog>
  322. <!--PjM选择弹框-->
  323. <el-dialog title="PjM" @close="closeProjectOwnerInfoDialog" @open="openProjectOwnerInfoDialog" :visible.sync="projectOwnerFlag" width="559px" v-drag>
  324. <el-form inline="inline" label-position="top" :model="searchBusinessData1" style="margin-left: 7px;margin-top: -5px;">
  325. <el-form-item label="用户账号">
  326. <el-input v-model="searchBusinessData1.username" clearable style="width: 110px"></el-input>
  327. </el-form-item>
  328. <el-form-item label="用户名">
  329. <el-input v-model="searchBusinessData1.userDisplay" clearable style="width: 110px"></el-input>
  330. </el-form-item>
  331. <el-form-item label="是否在用">
  332. <el-select filterable v-model="searchBusinessData1.active" style="width: 140px">
  333. <el-option label="是" value="Y"></el-option>
  334. <el-option label="否" value="N"></el-option>
  335. </el-select>
  336. </el-form-item>
  337. <el-form-item label=" ">
  338. <el-button type="primary" style="padding: 3px 12px" @click="searchBusinessInfoList1()">查询</el-button>
  339. </el-form-item>
  340. </el-form>
  341. <el-table
  342. :height="height + 110"
  343. :data="businessDataList1"
  344. stripe
  345. highlight-current-row
  346. border
  347. @row-dblclick="projectOwnerRowDblclick"
  348. @selection-change="selectionBusiness"
  349. style="width: 100%;">
  350. <el-table-column
  351. type="selection"
  352. width="55">
  353. </el-table-column>
  354. <el-table-column
  355. prop="username"
  356. header-align="center"
  357. align="center"
  358. label="用户账号">
  359. </el-table-column>
  360. <el-table-column
  361. prop="userDisplay"
  362. header-align="center"
  363. align="center"
  364. label="用户名">
  365. </el-table-column>
  366. <el-table-column
  367. prop="active"
  368. header-align="center"
  369. align="center"
  370. label="是否在用">
  371. </el-table-column>
  372. </el-table>
  373. <el-footer style="height:40px;margin-top:
  374. 10px;text-align:center">
  375. <el-button type="primary" @click="saveSelectionInfo1()">确定</el-button>
  376. <el-button @click="projectOwnerFlag = false">关闭</el-button>
  377. </el-footer>
  378. </el-dialog>
  379. <!--工程师选择弹框-->
  380. <el-dialog title="Engineer" @close="closeEngineer6InfoDialog" @open="openEngineer6InfoDialog" :visible.sync="engineer6Flag" width="559px" v-drag>
  381. <el-form inline="inline" label-position="top" :model="searchBusinessData6" style="margin-left: 7px;margin-top: -5px;">
  382. <el-form-item label="用户账号">
  383. <el-input v-model="searchBusinessData6.username" clearable style="width: 110px"></el-input>
  384. </el-form-item>
  385. <el-form-item label="用户名">
  386. <el-input v-model="searchBusinessData6.userDisplay" clearable style="width: 110px"></el-input>
  387. </el-form-item>
  388. <el-form-item label="是否在用">
  389. <el-select filterable v-model="searchBusinessData6.active" style="width: 140px">
  390. <el-option label="是" value="Y"></el-option>
  391. <el-option label="否" value="N"></el-option>
  392. </el-select>
  393. </el-form-item>
  394. <el-form-item label=" ">
  395. <el-button type="primary" style="padding: 3px 12px" @click="searchBusinessInfoList6()">查询</el-button>
  396. </el-form-item>
  397. </el-form>
  398. <el-table
  399. :height="height + 110"
  400. :data="businessDataList6"
  401. stripe
  402. highlight-current-row
  403. border
  404. @row-dblclick="engineer6RowDblclick"
  405. @selection-change="selectionBusiness"
  406. style="width: 100%;">
  407. <el-table-column
  408. type="selection"
  409. width="55">
  410. </el-table-column>
  411. <el-table-column
  412. prop="username"
  413. header-align="center"
  414. align="center"
  415. label="用户账号">
  416. </el-table-column>
  417. <el-table-column
  418. prop="userDisplay"
  419. header-align="center"
  420. align="center"
  421. label="用户名">
  422. </el-table-column>
  423. <el-table-column
  424. prop="active"
  425. header-align="center"
  426. align="center"
  427. label="是否在用">
  428. </el-table-column>
  429. </el-table>
  430. <el-footer style="height:40px;margin-top:
  431. 10px;text-align:center">
  432. <el-button type="primary" @click="saveSelectionInfo6()">确定</el-button>
  433. <el-button @click="engineer6Flag = false">关闭</el-button>
  434. </el-footer>
  435. </el-dialog>
  436. <!--工程师选择弹框-->
  437. <el-dialog title="IPQC-Lam/Pri/Etch/Slit" @close="closeEngineerInfoDialog" @open="openEngineerInfoDialog" :visible.sync="engineerFlag" width="559px" v-drag>
  438. <el-form inline="inline" label-position="top" :model="searchBusinessData2" style="margin-left: 7px;margin-top: -5px;">
  439. <el-form-item label="用户账号">
  440. <el-input v-model="searchBusinessData2.username" clearable style="width: 110px"></el-input>
  441. </el-form-item>
  442. <el-form-item label="用户名">
  443. <el-input v-model="searchBusinessData2.userDisplay" clearable style="width: 110px"></el-input>
  444. </el-form-item>
  445. <el-form-item label="是否在用">
  446. <el-select filterable v-model="searchBusinessData2.active" style="width: 140px">
  447. <el-option label="是" value="Y"></el-option>
  448. <el-option label="否" value="N"></el-option>
  449. </el-select>
  450. </el-form-item>
  451. <el-form-item label=" ">
  452. <el-button type="primary" style="padding: 3px 12px" @click="searchBusinessInfoList2()">查询</el-button>
  453. </el-form-item>
  454. </el-form>
  455. <el-table
  456. :height="height + 110"
  457. :data="businessDataList2"
  458. stripe
  459. highlight-current-row
  460. border
  461. @row-dblclick="engineerRowDblclick"
  462. @selection-change="selectionBusiness"
  463. style="width: 100%;">
  464. <el-table-column
  465. type="selection"
  466. width="55">
  467. </el-table-column>
  468. <el-table-column
  469. prop="username"
  470. header-align="center"
  471. align="center"
  472. label="用户账号">
  473. </el-table-column>
  474. <el-table-column
  475. prop="userDisplay"
  476. header-align="center"
  477. align="center"
  478. label="用户名">
  479. </el-table-column>
  480. <el-table-column
  481. prop="active"
  482. header-align="center"
  483. align="center"
  484. label="是否在用">
  485. </el-table-column>
  486. </el-table>
  487. <el-footer style="height:40px;margin-top:
  488. 10px;text-align:center">
  489. <el-button type="primary" @click="saveSelectionInfo2()">确定</el-button>
  490. <el-button @click="engineerFlag = false">关闭</el-button>
  491. </el-footer>
  492. </el-dialog>
  493. <!--IPQC选择弹框-->
  494. <el-dialog title="IPQC-Converting" @close="closeIPQCInfoDialog" @open="openIPQCInfoDialog" :visible.sync="IPQCFlag" width="559px" v-drag>
  495. <el-form inline="inline" label-position="top" :model="searchBusinessData3" style="margin-left: 7px;margin-top: -5px;">
  496. <el-form-item label="用户账号">
  497. <el-input v-model="searchBusinessData3.username" clearable style="width: 110px"></el-input>
  498. </el-form-item>
  499. <el-form-item label="用户名">
  500. <el-input v-model="searchBusinessData3.userDisplay" clearable style="width: 110px"></el-input>
  501. </el-form-item>
  502. <el-form-item label="是否在用">
  503. <el-select filterable v-model="searchBusinessData3.active" style="width: 140px">
  504. <el-option label="是" value="Y"></el-option>
  505. <el-option label="否" value="N"></el-option>
  506. </el-select>
  507. </el-form-item>
  508. <el-form-item label=" ">
  509. <el-button type="primary" style="padding: 3px 12px" @click="searchBusinessInfoList3()">查询</el-button>
  510. </el-form-item>
  511. </el-form>
  512. <el-table
  513. :height="height + 110"
  514. :data="businessDataList3"
  515. stripe
  516. highlight-current-row
  517. border
  518. @row-dblclick="IPQCRowDblclick"
  519. @selection-change="selectionBusiness"
  520. style="width: 100%;">
  521. <el-table-column
  522. type="selection"
  523. width="55">
  524. </el-table-column>
  525. <el-table-column
  526. prop="username"
  527. header-align="center"
  528. align="center"
  529. label="用户账号">
  530. </el-table-column>
  531. <el-table-column
  532. prop="userDisplay"
  533. header-align="center"
  534. align="center"
  535. label="用户名">
  536. </el-table-column>
  537. <el-table-column
  538. prop="active"
  539. header-align="center"
  540. align="center"
  541. label="是否在用">
  542. </el-table-column>
  543. </el-table>
  544. <el-footer style="height:40px;margin-top: 10px;text-align:center">
  545. <el-button type="primary" @click="saveSelectionInfo3()">确定</el-button>
  546. <el-button @click="IPQCFlag = false">关闭</el-button>
  547. </el-footer>
  548. </el-dialog>
  549. <!--FQC选择弹框-->
  550. <el-dialog title="FQC" @close="closeFQCInfoDialog" @open="openFQCInfoDialog" :visible.sync="FQCFlag" width="559px" v-drag>
  551. <el-form inline="inline" label-position="top" :model="searchBusinessData4" style="margin-left: 7px;margin-top: -5px;">
  552. <el-form-item label="用户账号">
  553. <el-input v-model="searchBusinessData4.username" clearable style="width: 110px"></el-input>
  554. </el-form-item>
  555. <el-form-item label="用户名">
  556. <el-input v-model="searchBusinessData4.userDisplay" clearable style="width: 110px"></el-input>
  557. </el-form-item>
  558. <el-form-item label="是否在用">
  559. <el-select filterable v-model="searchBusinessData4.active" style="width: 140px">
  560. <el-option label="是" value="Y"></el-option>
  561. <el-option label="否" value="N"></el-option>
  562. </el-select>
  563. </el-form-item>
  564. <el-form-item label=" ">
  565. <el-button type="primary" style="padding: 3px 12px" @click="searchBusinessInfoList4()">查询</el-button>
  566. </el-form-item>
  567. </el-form>
  568. <el-table
  569. :height="height + 110"
  570. :data="businessDataList4"
  571. stripe
  572. highlight-current-row
  573. border
  574. @row-dblclick="FQCRowDblclick"
  575. @selection-change="selectionBusiness"
  576. style="width: 100%;">
  577. <el-table-column
  578. type="selection"
  579. width="55">
  580. </el-table-column>
  581. <el-table-column
  582. prop="username"
  583. header-align="center"
  584. align="center"
  585. label="用户账号">
  586. </el-table-column>
  587. <el-table-column
  588. prop="userDisplay"
  589. header-align="center"
  590. align="center"
  591. label="用户名">
  592. </el-table-column>
  593. <el-table-column
  594. prop="active"
  595. header-align="center"
  596. align="center"
  597. label="是否在用">
  598. </el-table-column>
  599. </el-table>
  600. <el-footer style="height:40px;margin-top: 10px;text-align:center">
  601. <el-button type="primary" @click="saveSelectionInfo4()">确定</el-button>
  602. <el-button @click="FQCFlag = false">关闭</el-button>
  603. </el-footer>
  604. </el-dialog>
  605. <!--MFG选择弹框-->
  606. <el-dialog title="MFG" @close="closeMFGInfoDialog" @open="openMFGInfoDialog" :visible.sync="MFGlag" width="559px" v-drag>
  607. <el-form inline="inline" label-position="top" :model="searchBusinessData5" style="margin-left: 7px;margin-top: -5px;">
  608. <el-form-item label="用户账号">
  609. <el-input v-model="searchBusinessData5.username" clearable style="width: 110px"></el-input>
  610. </el-form-item>
  611. <el-form-item label="用户名">
  612. <el-input v-model="searchBusinessData5.userDisplay" clearable style="width: 110px"></el-input>
  613. </el-form-item>
  614. <el-form-item label="是否在用">
  615. <el-select filterable v-model="searchBusinessData5.active" style="width: 140px">
  616. <el-option label="是" value="Y"></el-option>
  617. <el-option label="否" value="N"></el-option>
  618. </el-select>
  619. </el-form-item>
  620. <el-form-item label=" ">
  621. <el-button type="primary" style="padding: 3px 12px" @click="searchBusinessInfoList5()">查询</el-button>
  622. </el-form-item>
  623. </el-form>
  624. <el-table
  625. :height="height + 110"
  626. :data="businessDataList5"
  627. stripe
  628. highlight-current-row
  629. border
  630. @row-dblclick="MFGRowDblclick"
  631. @selection-change="selectionBusiness"
  632. style="width: 100%;">
  633. <el-table-column
  634. type="selection"
  635. width="55">
  636. </el-table-column>
  637. <el-table-column
  638. prop="username"
  639. header-align="center"
  640. align="center"
  641. label="用户账号">
  642. </el-table-column>
  643. <el-table-column
  644. prop="userDisplay"
  645. header-align="center"
  646. align="center"
  647. label="用户名">
  648. </el-table-column>
  649. <el-table-column
  650. prop="active"
  651. header-align="center"
  652. align="center"
  653. label="是否在用">
  654. </el-table-column>
  655. </el-table>
  656. <el-footer style="height:40px;margin-top: 10px;text-align:center">
  657. <el-button type="primary" @click="saveSelectionInfo5()">确定</el-button>
  658. <el-button @click="MFGlag = false">关闭</el-button>
  659. </el-footer>
  660. </el-dialog>
  661. <el-dialog title="转正式料号" :visible.sync="formalPartNoFlag" width="639px" v-drag>
  662. <el-form :inline="true" label-position="top" :model="modalData" style="margin-left: 7px;margin-top: -5px;">
  663. <el-form-item label="项目编码" prop="projectId" >
  664. <el-input v-model="modalData.projectId" readonly style="width: 110px;" class="red-text"></el-input>
  665. </el-form-item>
  666. <el-form-item label="项目名称" prop="projectDesc" >
  667. <el-input v-model="modalData.projectDesc" readonly style="width: 170px;" class="red-text"></el-input>
  668. </el-form-item>
  669. <el-form-item label="客户编码" prop="customerNo" >
  670. <el-input v-model="modalData.customerNo" readonly style="width: 110px;" class="red-text"></el-input>
  671. </el-form-item>
  672. <el-form-item label="客户名称" prop="customerDesc" >
  673. <el-input v-model="modalData.customerDesc" readonly style="width: 170px;" class="red-text"></el-input>
  674. </el-form-item>
  675. </el-form>
  676. <el-form :inline="true" label-position="top" :model="modalData" style="margin-left: 7px;margin-top: -5px;">
  677. <el-form-item label="项目料号" prop="testPartNo" >
  678. <el-input v-model="modalData.testPartNo" readonly style="width: 110px;" class="red-text"></el-input>
  679. </el-form-item>
  680. <el-form-item label="料号描述" prop="partDesc" >
  681. <el-input v-model="modalData.partDesc" readonly style="width: 170px;" class="red-text"></el-input>
  682. </el-form-item>
  683. <el-form-item label="BU" prop="bu" >
  684. <el-input v-model="modalData.bu" readonly style="width: 100px;" class="red-text"></el-input>
  685. </el-form-item>
  686. </el-form>
  687. <el-form :inline="true" label-position="top" :model="modalData" :rules="rules" style="margin-left: 7px;margin-top: -5px;">
  688. <el-form-item label="ERP正式料号" prop="finalPartNo" :rules="rules.finalPartNo">
  689. <el-input v-model="modalData.finalPartNo" style="width: 110px"></el-input>
  690. </el-form-item>
  691. <el-form-item label="ERP正式料号描述" prop="finalPartDesc" :rules="rules.finalPartDesc">
  692. <el-input v-model="modalData.finalPartDesc" style="width: 170px"></el-input>
  693. </el-form-item>
  694. </el-form>
  695. <el-footer style="height:40px;margin-top: 10px;text-align:center">
  696. <el-button type="primary" @click="saveFormalPartNo()">保存</el-button>
  697. <el-button @click="formalPartNoFlag = false">关闭</el-button>
  698. </el-footer>
  699. </el-dialog>
  700. <el-tabs style="margin-top: 0px; width: 100%; height: 250px;" v-model="activeName" class="customer-tab" type="border-card" @tab-click="tabClick">
  701. <el-tab-pane label="打样记录" name="proofRecord" style="margin-left: -10px">
  702. <proofRecord ref="proofRecord"></proofRecord>
  703. </el-tab-pane>
  704. <el-tab-pane label="转量产阶段文档" name="massProductionStage">
  705. <el-button type="primary" icon="el-icon-upload" style="margin-top: -5px" @click="projectDocumentList()">文档清单定义</el-button>
  706. <el-button type="primary" icon="el-icon-upload" style="margin-top: -5px" @click="uploadOtherDocument()">上传其他文档</el-button>
  707. <el-table
  708. :data="projectOtherDocumentList"
  709. border
  710. style="width: 100%;margin-top: 5px;"
  711. :height="height + 128"
  712. ref="proofDocumentTable"
  713. @row-click="projectOtherDocumentClickRow"
  714. @current-change="changeCurrentRow1"
  715. :row-style="rowStyle"
  716. v-loading="dataListLoading">
  717. <el-table-column
  718. header-align="center"
  719. align="center"
  720. width="130"
  721. fixed="left"
  722. label="操作">
  723. <template slot-scope="scope">
  724. <a type="primary" v-if="scope.row.documentDefinitionListId !== '-1'" @click="uploadFile(scope.row)">上传文件</a>
  725. <a type="text" size="small" v-if="scope.row.documentDefinitionListId !== '-1'" @click="addOrUpdateHandle(scope.row.projectId)">提醒</a>
  726. <a type="text" size="small" v-if="shouldShowDelete(scope.row)" @click="massProductionDocumentDelete(scope.row)">删除</a>
  727. </template>
  728. </el-table-column>
  729. <el-table-column label="序号" type="index" align="center" :index="indexMethod"></el-table-column>
  730. <el-table-column label="文档类型" align="center">
  731. <template slot-scope="scope">
  732. {{ getCombinedDocumentType(scope.row) }}
  733. </template>
  734. </el-table-column>
  735. <el-table-column
  736. v-for="(item,index) in columnFileContentArray" :key="index"
  737. :sortable="item.columnSortable"
  738. :prop="item.columnProp"
  739. :header-align="item.headerAlign"
  740. :show-overflow-tooltip="item.showOverflowTooltip"
  741. :align="item.align"
  742. :fixed="item.fixed==''?false:item.fixed"
  743. :min-width="item.columnWidth"
  744. :label="item.columnLabel">
  745. <template slot-scope="scope">
  746. <span v-if="!item.columnHidden"> {{scope.row[item.columnProp]}}</span>
  747. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]"
  748. style="width: 100px; height: 80px"/></span>
  749. </template>
  750. </el-table-column>
  751. </el-table>
  752. </el-tab-pane>
  753. <el-tab-pane label="所有文档" name="allDocument">
  754. <el-button type="primary" icon="el-icon-upload" style="margin-top: -5px" @click="projectProductionValidationDocument()">选择生产确认文档</el-button>
  755. <el-table
  756. :data="projectAllDocumentList"
  757. border
  758. style="width: 100%;margin-top: 5px;"
  759. :height="height + 128"
  760. ref="projectAllDocumentDocumentTable"
  761. @row-click="projectAllDocumentClickRow"
  762. :row-style="rowStyle"
  763. v-loading="dataListLoading">
  764. <el-table-column
  765. header-align="center"
  766. align="center"
  767. width="70"
  768. fixed="left"
  769. label="操作">
  770. <template slot-scope="scope">
  771. <a type="text" size="small" @click="addOrUpdateHandle(scope.row.projectId)">提醒</a>
  772. </template>
  773. </el-table-column>
  774. <el-table-column label="序号" type="index" align="center" :index="indexMethod"></el-table-column>
  775. <el-table-column label="文档类型" align="center">
  776. <template slot-scope="scope">
  777. {{ getCombinedDocumentType(scope.row) }}
  778. </template>
  779. </el-table-column>
  780. <el-table-column
  781. v-for="(item,index) in columnProjectAllDocumentList" :key="index"
  782. :sortable="item.columnSortable"
  783. :prop="item.columnProp"
  784. :header-align="item.headerAlign"
  785. :show-overflow-tooltip="item.showOverflowTooltip"
  786. :align="item.align"
  787. :fixed="item.fixed==''?false:item.fixed"
  788. :min-width="item.columnWidth"
  789. :label="item.columnLabel">
  790. <template slot-scope="scope">
  791. <span v-if="!item.columnHidden"> {{scope.row[item.columnProp]}}</span>
  792. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]"
  793. style="width: 100px; height: 80px"/></span>
  794. </template>
  795. </el-table-column>
  796. </el-table>
  797. </el-tab-pane>
  798. <el-tab-pane label="生产文档确认进度" name="productionDocumentsConfirmProgress">
  799. <el-row>
  800. <el-col :span="8" class="left-section">
  801. <div class="table-container" style="height: 214px;margin-top: -10px">
  802. <p style="margin-top: -5px">文档清单</p>
  803. <el-table :data="confirmProgressDocumentList"
  804. border
  805. style="width: 100%;margin-top: -10px;"
  806. :height="this.height + 128">
  807. <el-table-column header-align="center" align="center" width="50" prop="itemNo" label="序号"></el-table-column>
  808. <el-table-column header-align="center" align="center" prop="documentType" label="文档类型"></el-table-column>
  809. <el-table-column header-align="center" align="center" prop="fileName" label="文件名"></el-table-column>
  810. </el-table>
  811. </div>
  812. </el-col>
  813. <el-col :span="15" class="right-section">
  814. <div class="table-container" style="height: 214px;margin-top: -10px">
  815. <p style="margin-top: -5px">推送人员清单</p>
  816. <el-table :data="confirmProgressPusherList"
  817. border
  818. style="width: 100%;margin-top: -10px;"
  819. :height="this.height + 128">
  820. <el-table-column header-align="center" align="center" width="40" prop="itemNo" label="序号"></el-table-column>
  821. <el-table-column header-align="center" align="center" width="70" prop="userDisplay" label="指定确认人"></el-table-column>
  822. <el-table-column header-align="center" align="center" :formatter="formatDate" prop="wantedConfirmDate" label="要求确认日期"></el-table-column>
  823. <el-table-column header-align="center" align="center" prop="confirmFlag" label="是否确认"></el-table-column>
  824. <el-table-column header-align="center" align="center" prop="confirmedBy" label="实际确认人"></el-table-column>
  825. <el-table-column header-align="center" align="center" prop="remark" label="备注"></el-table-column>
  826. <el-table-column header-align="center" align="center" prop="confirmedDate" label="实际确认时间"></el-table-column>
  827. <el-table-column header-align="center" align="center" prop="createDate" label="推送时间"></el-table-column>
  828. <el-table-column header-align="center" align="center" prop="createBy" label="推送人"></el-table-column>
  829. <el-table-column
  830. header-align="center"
  831. align="center"
  832. width="90"
  833. fixed="left"
  834. label="操作">
  835. <template slot-scope="scope">
  836. <a type="text" size="small" @click="viewDocumentFile(scope.row)">查看附件</a>
  837. <a type="text" size="small" @click="confirmDocument(scope.row)">确认</a>
  838. </template>
  839. </el-table-column>
  840. </el-table>
  841. </div>
  842. </el-col>
  843. </el-row>
  844. </el-tab-pane>
  845. </el-tabs>
  846. <el-dialog title="文档清单定义" @close="projectDocumentListVisibleFalse" :visible.sync="projectDocumentListVisible" width="561px" style="margin-top: 10vh" :close-on-click-modal="false">
  847. <el-form :inline="true" label-position="top" :model="modalData" style="margin-left: 7px;margin-top: -5px;">
  848. <el-form-item label="项目编码" prop="projectId" class="red-label">
  849. <el-input v-model="modalData.projectId" readonly style="width: 110px;" class="red-text"></el-input>
  850. </el-form-item>
  851. <el-form-item label="项目名称" prop="projectDesc" >
  852. <el-input v-model="modalData.projectDesc" readonly style="width: 170px;" class="red-text"></el-input>
  853. </el-form-item>
  854. <el-form-item label="BU" prop="bu">
  855. <el-input v-model="modalData.bu" readonly style="width: 110px;" class="red-text"></el-input>
  856. </el-form-item>
  857. </el-form>
  858. <el-form :inline="true" label-position="top" :model="modalData" style="margin-left: 7px;margin-top: -5px;">
  859. <el-form-item label="客户编码" prop="customerNo" >
  860. <el-input v-model="modalData.customerNo" readonly style="width: 110px;" class="red-text"></el-input>
  861. </el-form-item>
  862. <el-form-item label="客户名称" prop="customerDesc" >
  863. <el-input v-model="modalData.customerDesc" readonly style="width: 170px;" class="red-text"></el-input>
  864. </el-form-item>
  865. <el-form-item label="项目分类" prop="cProjectTypeDb">
  866. <el-input v-model="modalData.cProjectTypeDb" readonly style="width: 110px;" class="red-text"></el-input>
  867. </el-form-item>
  868. </el-form>
  869. <el-form :inline="true" label-position="top" :model="modalData" style="margin-left: 7px;margin-top: -5px;">
  870. <el-form-item label="项目料号" prop="testPartNo" :rules="rules.testPartNo" >
  871. <el-input v-model="modalData.testPartNo" readonly style="width: 110px;" class="red-text"></el-input>
  872. </el-form-item>
  873. <el-form-item label="料号描述" prop="partDesc" >
  874. <el-input v-model="modalData.partDesc" readonly style="width: 170px;" class="red-text"></el-input>
  875. </el-form-item>
  876. <el-form-item label="打样单号" prop="proofingNo">
  877. <el-input v-model="modalData.proofingNo" readonly style="width: 110px;" class="red-text"></el-input>
  878. </el-form-item>
  879. </el-form>
  880. <el-button type="primary" icon="el-icon-upload" style="margin-top: -5px" @click="addProjectDocumentTypeFlag = true">新增</el-button>
  881. <el-table
  882. height="200"
  883. :data="proofDocumentListDefinition"
  884. border
  885. style="width: 100%;">
  886. <el-table-column
  887. v-for="(item,index) in columnProjectDocumentManifestDefinitionList" :key="index"
  888. :sortable="item.columnSortable"
  889. :prop="item.columnProp"
  890. :header-align="item.headerAlign"
  891. :show-overflow-tooltip="item.showOverflowTooltip"
  892. :align="item.align"
  893. :fixed="item.fixed==''?false:item.fixed"
  894. :min-width="item.columnWidth"
  895. :label="item.columnLabel">
  896. <template slot-scope="scope">
  897. <span v-if="!item.columnHidden">{{ getColumnValue(scope.row, item) }}</span>
  898. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
  899. </template>
  900. </el-table-column>
  901. <el-table-column
  902. fixed="right"
  903. header-align="center"
  904. align="center"
  905. width="100"
  906. label="操作">
  907. <template slot-scope="scope">
  908. <a v-if="!authDelete" type="text" size="small" @click="deleteProjectDocumentType(scope.row)">删除</a>
  909. </template>
  910. </el-table-column>
  911. </el-table>
  912. <div slot="footer" class="dialog-footer">
  913. <el-button @click="projectDocumentListVisible = false">关闭</el-button>
  914. </div>
  915. </el-dialog>
  916. <!-- 新增文档类型 -->
  917. <el-dialog title="新增文档类型" @close="closeAddProjectDocumentTypeFlag" @open="searchProjectDocumentTypeList" :visible.sync="addProjectDocumentTypeFlag" width="559px" v-drag :close-on-click-modal="false">
  918. <el-form inline="inline" label-position="top" :model="searchProjectDocumentTypeData" style="margin-left: 7px;margin-top: -5px;">
  919. <el-form-item label="文档类型ID">
  920. <el-input v-model="searchProjectDocumentTypeData.documentTypeId" clearable style="width: 110px"></el-input>
  921. </el-form-item>
  922. <el-form-item label="文档类型">
  923. <el-input v-model="searchProjectDocumentTypeData.documentType" clearable style="width: 110px"></el-input>
  924. </el-form-item>
  925. <el-form-item label="责任部门">
  926. <el-input v-model="searchProjectDocumentTypeData.responsibleDepartment" clearable style="width: 110px"></el-input>
  927. </el-form-item>
  928. <el-form-item label=" ">
  929. <el-button type="primary" style="padding: 3px 12px" @click="searchProjectDocumentTypeList()">查询</el-button>
  930. </el-form-item>
  931. </el-form>
  932. <el-table
  933. :height="200"
  934. :data="extraProjectDocumentList"
  935. stripe
  936. border
  937. @selection-change="selectionProjectDocument"
  938. style="width: 100%;">
  939. <el-table-column
  940. type="selection"
  941. width="55">
  942. </el-table-column>
  943. <el-table-column
  944. prop="documentTypeId"
  945. header-align="center"
  946. align="center"
  947. label="文档类型ID">
  948. </el-table-column>
  949. <el-table-column
  950. prop="documentType"
  951. header-align="center"
  952. align="center"
  953. label="文档类型">
  954. </el-table-column>
  955. <el-table-column
  956. prop="responsibleDepartment"
  957. header-align="center"
  958. align="center"
  959. label="责任部门">
  960. </el-table-column>
  961. </el-table>
  962. <el-footer style="height:40px;margin-top: 10px;text-align:center">
  963. <el-button type="primary" @click="saveSelectionProjectDocumentType()">确定</el-button>
  964. <el-button @click="addProjectDocumentTypeFlag = false">关闭</el-button>
  965. </el-footer>
  966. </el-dialog>
  967. <el-dialog title="选择生产确认文档" :visible.sync="projectProductionValidationDocumentVisible" width="763px" style="margin-top: -5vh" :close-on-click-modal="false">
  968. <el-form :inline="true" label-position="top" :model="modalData" style="margin-left: 7px;margin-top: -5px;">
  969. <el-form-item label="项目编码" prop="projectId" class="red-label">
  970. <el-input v-model="modalData.projectId" readonly style="width: 110px;" class="red-text"></el-input>
  971. </el-form-item>
  972. <el-form-item label="项目名称" prop="projectDesc" >
  973. <el-input v-model="modalData.projectDesc" readonly style="width: 170px;" class="red-text"></el-input>
  974. </el-form-item>
  975. <el-form-item label="BU" prop="bu">
  976. <el-input v-model="modalData.bu" readonly style="width: 110px;" class="red-text"></el-input>
  977. </el-form-item>
  978. <el-form-item label="项目料号" prop="testPartNo" >
  979. <el-input v-model="modalData.testPartNo" readonly style="width: 110px;" class="red-text"></el-input>
  980. </el-form-item>
  981. <el-form-item label="料号描述" prop="partDesc" >
  982. <el-input v-model="modalData.partDesc" readonly style="width: 170px;" class="red-text"></el-input>
  983. </el-form-item>
  984. </el-form>
  985. <el-form :inline="true" label-position="top" :model="modalData" style="margin-left: 7px;margin-top: -5px;">
  986. <el-form-item label="客户编码" prop="customerNo" >
  987. <el-input v-model="modalData.customerNo" readonly style="width: 110px;" class="red-text"></el-input>
  988. </el-form-item>
  989. <el-form-item label="客户名称" prop="customerDesc" >
  990. <el-input v-model="modalData.customerDesc" readonly style="width: 170px;" class="red-text"></el-input>
  991. </el-form-item>
  992. <el-form-item label="项目分类" prop="cProjectTypeDb">
  993. <el-input v-model="modalData.cProjectTypeDb" readonly style="width: 110px;" class="red-text"></el-input>
  994. </el-form-item>
  995. <el-form-item label="要求最晚确认日期" prop="wantedConfirmDate" :rules="rules.wantedConfirmDate">
  996. <el-date-picker
  997. v-model="modalData.wantedConfirmDate"
  998. type="date"
  999. placeholder="选择日期"
  1000. style="width: 110px;">
  1001. </el-date-picker>
  1002. </el-form-item>
  1003. </el-form>
  1004. <el-tabs v-model="activeName1" style="margin-top: 0px; width: 100%; height: 100%;" type="border-card" @tab-click="tabClick" class="customer-tab">
  1005. <el-tab-pane label="文档选择" name="selectDocument" style="width: 104%">
  1006. <el-table
  1007. v-model="selectedDocumentItems"
  1008. :height="height + 250"
  1009. :data="projectAllDocumentList1"
  1010. border
  1011. style="width: 100%;margin-top: -13px;margin-left: -14px !important; margin-right: 0 !important;"
  1012. @selection-change="handleDocumentSelectionChange">
  1013. <el-table-column
  1014. type="selection"
  1015. header-align="center"
  1016. align="center"
  1017. width="50">
  1018. </el-table-column>
  1019. <el-table-column label="序号" type="index" align="center" :index="indexMethod"></el-table-column>
  1020. <el-table-column label="文档类型" align="center">
  1021. <template slot-scope="scope">
  1022. {{ getCombinedDocumentType(scope.row) }}
  1023. </template>
  1024. </el-table-column>
  1025. <el-table-column
  1026. v-for="(item,index) in columnProjectAllDocumentList" :key="index"
  1027. :sortable="item.columnSortable"
  1028. :prop="item.columnProp"
  1029. :header-align="item.headerAlign"
  1030. :show-overflow-tooltip="item.showOverflowTooltip"
  1031. :align="item.align"
  1032. :fixed="item.fixed==''?false:item.fixed"
  1033. :min-width="item.columnWidth"
  1034. :label="item.columnLabel">
  1035. <template slot-scope="scope">
  1036. <span v-if="!item.columnHidden">{{ getColumnValue(scope.row, item) }}</span>
  1037. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
  1038. </template>
  1039. </el-table-column>
  1040. </el-table>
  1041. </el-tab-pane>
  1042. <el-tab-pane label="确认人员清单" name="confirmatory" style="width: 104%">
  1043. <el-table
  1044. :height="height + 105"
  1045. :data="projectAllDocumentConfirmatorList"
  1046. border
  1047. style="width: 100%;margin-top: -13px;margin-left: -14px !important;">
  1048. <el-table-column
  1049. prop="username"
  1050. header-align="center"
  1051. align="center"
  1052. min-width="60"
  1053. label="用户账号">
  1054. </el-table-column>
  1055. <el-table-column
  1056. prop="userDisplay"
  1057. header-align="center"
  1058. align="center"
  1059. min-width="80"
  1060. label="用户名">
  1061. </el-table-column>
  1062. </el-table>
  1063. </el-tab-pane>
  1064. </el-tabs>
  1065. <div slot="footer" class="dialog-footer" style="margin-top: 6px">
  1066. <el-button type="primary" @click="saveProductionValidationDocument()">确定</el-button>
  1067. <el-button @click="closeProjectProductionValidationDocumentVisibleDialog">关闭</el-button>
  1068. </div>
  1069. </el-dialog>
  1070. <el-dialog title="确认" @close="closeUploadFileVisible" :visible.sync="confirmVisible" width="579px" style="margin-top: 0vh;height: 100%;" :close-on-click-modal="false">
  1071. <el-form :inline="true" label-position="top" :model="modalData" style="margin-left: 7px;margin-top: -5px;">
  1072. <el-form-item label="项目编码" prop="projectId" class="red-label">
  1073. <el-input v-model="modalData.projectId" readonly style="width: 110px;" class="red-text"></el-input>
  1074. </el-form-item>
  1075. <el-form-item label="项目名称" prop="projectDesc" >
  1076. <el-input v-model="modalData.projectDesc" readonly style="width: 170px;" class="red-text"></el-input>
  1077. </el-form-item>
  1078. <el-form-item label="BU" prop="bu">
  1079. <el-input v-model="modalData.bu" readonly style="width: 110px;" class="red-text"></el-input>
  1080. </el-form-item>
  1081. <el-form-item label="项目分类" prop="cProjectTypeDb">
  1082. <el-input v-model="modalData.cProjectTypeDb" readonly style="width: 110px;" class="red-text"></el-input>
  1083. </el-form-item>
  1084. </el-form>
  1085. <el-form :inline="true" label-position="top" :model="modalData" style="margin-left: 7px;margin-top: -5px;">
  1086. <el-form-item label="指定确认人" prop="userDisplay">
  1087. <el-input v-model="confirmData.userDisplay" readonly style="width: 110px;"></el-input>
  1088. </el-form-item>
  1089. <el-form-item label="要求确认日期" prop="wantedConfirmDate">
  1090. <el-input v-model="confirmData.wantedConfirmDate" readonly style="width: 170px;" class="red-text"></el-input>
  1091. </el-form-item>
  1092. </el-form>
  1093. <el-form :inline="true" label-position="top" :model="confirmData" style="margin-left: 7px;margin-top: -5px;">
  1094. <el-form-item label="备注" prop="remark">
  1095. <el-input v-model="confirmData.remark" style="width: 541px" type="textarea" :rows="1"></el-input>
  1096. </el-form-item>
  1097. </el-form>
  1098. <el-form :inline="true" label-position="top" :model="confirmData" style="margin-left: 7px;margin-top: -15px;">
  1099. <el-form-item label=" ">
  1100. <a href="javascript:void(0);" @click="triggerUpload" type="text" size="small">点击选择文件</a>
  1101. <tr></tr>
  1102. <el-input v-model="this.fileName" readonly placeholder="文件名称" style="width: 541px"></el-input>
  1103. <el-upload class="custom-upload" :file-list="fileList"
  1104. action="javascript:void(0);" ref="uploadFile"
  1105. :on-change="onChange" :on-close="closeFileUpdate"
  1106. multiple :auto-upload="false"
  1107. style="text-align: left;margin-top: 0px;margin-left: 6px;display: none;">
  1108. </el-upload>
  1109. </el-form-item>
  1110. </el-form>
  1111. <el-table
  1112. :height="height + 120"
  1113. :data="projectConfirmatorFileList"
  1114. border
  1115. style="width: 100%;margin-top: 17px;margin-left: 0px;">
  1116. <el-table-column
  1117. prop="fileName"
  1118. header-align="center"
  1119. align="center"
  1120. min-width="120"
  1121. label="文件名">
  1122. </el-table-column>
  1123. <el-table-column
  1124. prop="createDate"
  1125. header-align="center"
  1126. align="center"
  1127. min-width="80"
  1128. label="上传时间">
  1129. </el-table-column>
  1130. <el-table-column
  1131. prop="createdBy"
  1132. header-align="center"
  1133. align="center"
  1134. min-width="60"
  1135. label="上传人">
  1136. </el-table-column>
  1137. </el-table>
  1138. <div slot="footer" class="dialog-footer" style="margin-top: 0px">
  1139. <el-button type="primary" @click="saveUploadFile()">确定</el-button>
  1140. <el-button @click="closeUploadFileVisible()">关闭</el-button>
  1141. </div>
  1142. </el-dialog>
  1143. <el-dialog title="查看附件" @close="closeViewDocumentFileVisible" :visible.sync="viewDocumentFileVisible" width="520px" style="margin-top: 0vh" :close-on-click-modal="false">
  1144. <el-table
  1145. :height="height + 200"
  1146. :data="projectConfirmatorFileList"
  1147. border
  1148. style="width: 100%;margin-top: 0px;margin-left: 0px;">
  1149. <el-table-column
  1150. prop="fileName"
  1151. header-align="center"
  1152. align="center"
  1153. min-width="120"
  1154. label="文件名">
  1155. </el-table-column>
  1156. <el-table-column
  1157. prop="createDate"
  1158. header-align="center"
  1159. align="center"
  1160. min-width="80"
  1161. label="上传时间">
  1162. </el-table-column>
  1163. <el-table-column
  1164. prop="createdBy"
  1165. header-align="center"
  1166. align="center"
  1167. min-width="50"
  1168. label="上传人">
  1169. </el-table-column>
  1170. <el-table-column
  1171. header-align="center"
  1172. align="center"
  1173. width="100"
  1174. label="操作">
  1175. <template slot-scope="scope">
  1176. <a type="text" size="small" @click="viewFile(scope.row)">查看</a>
  1177. <a type="text" size="small" @click="downloadFile(scope.row)">下载</a>
  1178. <a type="text" size="small" @click="deleteFile(scope.row)">删除</a>
  1179. </template>
  1180. </el-table-column>
  1181. </el-table>
  1182. <div slot="footer" class="dialog-footer" style="margin-top: 0px">
  1183. <el-button @click="closeViewDocumentFileVisible()">关闭</el-button>
  1184. </div>
  1185. </el-dialog>
  1186. <upload-file-list-1 folder="projectOtherDocument" title="上传文档" :file-list.sync="fileList" :label="'文档类型ID:'" :no="otherDocumentCurrentRow.documentTypeId" :no-type="otherDocumentCurrentRow.documentType"
  1187. :proofing-id='proofingCurrentRow.proofingId' :bu="proofingCurrentRow.buNo" :site="proofingCurrentRow.site" :upload-dialog.sync="uploadDialog" :no-desc="otherDocumentCurrentRow.documentDesc" :id="otherDocumentCurrentRow.id"
  1188. :project-id="proofingCurrentRow.projectId" :project-desc="proofingCurrentRow.projectDesc" :document-type="proofingCurrentRow.documentType" :conclusion="'N/A'"
  1189. :customer-no="proofingCurrentRow.customerNo" :customer-desc="proofingCurrentRow.customerDesc" :test-part-no="proofingCurrentRow.testPartNo"
  1190. :part-desc="proofingCurrentRow.partDesc" :column-file-content-array="columnFileContentArray" :proof-document-list="projectOtherDocumentList"
  1191. path="/upload/test" :is-editable="isEditable" :is-mass-production-stage="isMassProductionStage"></upload-file-list-1>
  1192. <Chooselist ref="baseList" @getBaseData="getBaseData"></Chooselist>
  1193. </div>
  1194. </template>
  1195. <script>
  1196. import {getSiteAndBuByUserName} from "@/api/eam/eam.js"
  1197. import {
  1198. searchBusinessInfo,
  1199. searchBusinessInfo1,
  1200. searchBusinessInfo2,
  1201. searchBusinessInfo3,
  1202. searchBusinessInfo4,
  1203. searchBusinessInfo5,
  1204. searchBusinessInfo6
  1205. } from "@/api/factory/site.js"
  1206. import Chooselist from '@/views/modules/common/Chooselist_eam'
  1207. import {removeUserFavorite, saveUserFavorite, userFavoriteList} from '@/api/userFavorite.js'
  1208. import {getTableDefaultListLanguage, getTableUserListLanguage,} from "@/api/table.js";
  1209. import proofRecord from "./com_project_proof_record";
  1210. import {
  1211. eamProjectInfoDelete,
  1212. eamProjectInfoEdit,
  1213. eamProjectInfoSave,
  1214. eamProjectInfoSearch,
  1215. getTestPartNo,
  1216. saveFormalPartNo
  1217. } from "@/api/eam/eamProject.js";
  1218. import {getProjectOtherDocument} from "@/api/eam/eamProofing.js";
  1219. import UploadFileList1 from "../common/uploadFileList1.vue";
  1220. import {
  1221. deleteDocumentType, deleteProofDocument,
  1222. editProjectDocument,
  1223. getExtraDocumentList,
  1224. projectDocumentSave,
  1225. proofingDocumentNEW,
  1226. searchProjectAllDocument
  1227. } from "../../../api/eam/eamProofing";
  1228. import {
  1229. checkConfirmationRecord,
  1230. checkProductionValidationDocument, deleteDocumentInformation,
  1231. deleteProjectFile,
  1232. saveProductionValidationDocument,
  1233. saveProductionValidationDocumentConfirmator,
  1234. searchConfirmatorList,
  1235. searchConfirmProgressDocumentList,
  1236. searchConfirmProgressPusherList,
  1237. searchProjectConfirmatorFileList,
  1238. updateProjectDocumentConfirm,
  1239. uploadProjectFile
  1240. } from "../../../api/eam/eamProject";
  1241. import row from "element-ui/packages/row";
  1242. import moment from 'moment';
  1243. import 'moment/locale/zh-cn';
  1244. import {downLoadObjectFile} from "../../../api/eam/eam_object_list";
  1245. /*打样记录組件*/
  1246. export default {
  1247. computed: {
  1248. row() {
  1249. return row
  1250. }
  1251. },
  1252. components: {
  1253. UploadFileList1,
  1254. Chooselist,
  1255. proofRecord,
  1256. },
  1257. watch: {
  1258. searchData: {
  1259. deep: true,
  1260. handler: function (newV, oldV) {
  1261. this.searchData.customerNo = this.searchData.customerNo.toUpperCase()
  1262. }
  1263. },
  1264. uploadDialog (newValue,oldValue) {
  1265. if (newValue === false) {
  1266. this.getProjectOtherDocument()
  1267. }
  1268. },
  1269. projectProductionValidationDocumentVisible(newVal) {
  1270. if (newVal) {
  1271. this.activeName1 = 'selectDocument';
  1272. }
  1273. }
  1274. },
  1275. data () {
  1276. return {
  1277. // 是否收藏
  1278. favorite: false,
  1279. // 导出 start
  1280. exportData: [],
  1281. exportName: "customerNo" + this.dayjs().format('YYYYMMDDHHmmss'),
  1282. exportHeader: ["customerNo"],
  1283. exportFooter: [],
  1284. exportList:[],
  1285. // 导出 end
  1286. tagNo:'',
  1287. fileName:'',
  1288. folder: 'projectConfirm',
  1289. searchData: {
  1290. site: this.$store.state.user.site,
  1291. userName: this.$store.state.user.name,
  1292. projectId: '',
  1293. projectDesc: '',
  1294. partDesc: '',
  1295. customerNo: '',
  1296. customerDesc: '',
  1297. buDesc: '',
  1298. projectCategory: '',
  1299. status: '',
  1300. startDate:'',
  1301. endDate:'',
  1302. projectCreationDate: new Date(),
  1303. projectCloseDate:'',
  1304. needDate:'',
  1305. // active: 'Y',
  1306. page: 1,
  1307. limit: 10,
  1308. },
  1309. height: 200,
  1310. pageIndex: 1,
  1311. pageSize: 20,
  1312. totalPage: 0,
  1313. businessDataList: [],
  1314. businessDataList1: [],
  1315. businessDataList2: [],
  1316. businessDataList3: [],
  1317. businessDataList4: [],
  1318. businessDataList5: [],
  1319. businessDataList6: [],
  1320. dataList: [],
  1321. dataListSelections: [],
  1322. //用于储存选中的行数据
  1323. selectedDocumentItems: [],
  1324. // ======== 复选数据集 ========
  1325. businessSelections: [],
  1326. // ======== 选中的当前行数据 ========
  1327. proofingCurrentRow: {},
  1328. otherDocumentCurrentRow: {},
  1329. projectAllDocumentCurrentRow: {},
  1330. fileList: [],
  1331. projectOtherDocumentList: [],
  1332. extraProjectDocumentList: [],
  1333. projectDocumentSelection: [],
  1334. projectAllDocumentList: [],
  1335. projectAllDocumentList1: [],
  1336. projectAllDocumentConfirmatorList: [],
  1337. proofDocumentListDefinition: [],
  1338. confirmProgressPusherList: [],
  1339. confirmProgressDocumentList: [],
  1340. projectConfirmatorFileList: [],
  1341. viewDocumentFileVisible: false,
  1342. searchProjectDocumentTypeData: {
  1343. site: this.$store.state.user.site,
  1344. projectId: '',
  1345. proofingNo: '*',
  1346. documentTypeId: '',
  1347. documentType: '',
  1348. documentDesc: '',
  1349. responsibleDepartment: '',
  1350. estimatedCompletionDays: '',
  1351. page: 1,
  1352. limit: 1000
  1353. },
  1354. dataListLoading: false,
  1355. modalFlag:false,
  1356. modalDisableFlag:false,
  1357. formalPartNoFlag:false,
  1358. projectManagerFlag:false,
  1359. projectOwnerFlag:false,
  1360. engineerFlag:false,
  1361. engineer6Flag:false,
  1362. IPQCFlag:false,
  1363. FQCFlag:false,
  1364. MFGlag:false,
  1365. uploadDialog:false,
  1366. isEditable: true,
  1367. isMassProductionStage: true,
  1368. projectDocumentListVisible: false,
  1369. addProjectDocumentTypeFlag: false,
  1370. projectProductionValidationDocumentVisible: false,
  1371. confirmVisible: false,
  1372. confirmationPrompted: false, // 是否已经进行过确认提示的标志
  1373. modalData:{
  1374. flag:'',
  1375. bu: '',
  1376. buNo: '',
  1377. site: this.$store.state.user.site,
  1378. projectId: '',
  1379. oriProjectId: '',
  1380. projectDesc:'',
  1381. projectCloseDate:'',
  1382. proofingNo:'',
  1383. needDate:'',
  1384. customerNo:'',
  1385. finalCustomerId:'',
  1386. customerDesc:'',
  1387. projectCategory:'',
  1388. testPartNo:'',
  1389. partDesc:'',
  1390. priority:'',
  1391. projectManager:'',
  1392. projectManagerName:'',
  1393. projectOwner:'',
  1394. projectOwnerName:'',
  1395. cProjectRegion:'',
  1396. cProjectBuildDate:'',
  1397. cQualityEngineer1:'',
  1398. cQualityEngineer1Name:'',
  1399. cQualityEngineer2:'',
  1400. cQualityEngineer2Name:'',
  1401. cQualityEngineer3:'',
  1402. cQualityEngineer3Name:'',
  1403. cManufactureEngineer:'',
  1404. cManufactureEngineerName:'',
  1405. engineer:'',
  1406. engineerName:'',
  1407. //projectCreationDate为当前服务器的时间
  1408. projectCreationDate: new Date(),
  1409. finalPartNo:'',
  1410. finalPartDesc:'',
  1411. wantedConfirmDate: new Date(),
  1412. // active:'',
  1413. createBy: this.$store.state.user.name,
  1414. updateBy: this.$store.state.user.name,
  1415. },
  1416. searchBusinessData:{
  1417. site: this.$store.state.user.site,
  1418. username: '',
  1419. roleDesc: '',
  1420. userDisplay: '',
  1421. active: '',
  1422. page: 1,
  1423. limit: 10,
  1424. },
  1425. searchBusinessData1:{
  1426. site: this.$store.state.user.site,
  1427. username: '',
  1428. roleDesc: '',
  1429. userDisplay: '',
  1430. active: '',
  1431. page: 1,
  1432. limit: 10,
  1433. },
  1434. searchBusinessData2:{
  1435. site: this.$store.state.user.site,
  1436. username: '',
  1437. roleDesc: '',
  1438. userDisplay: '',
  1439. active: '',
  1440. page: 1,
  1441. limit: 10,
  1442. },
  1443. searchBusinessData3:{
  1444. site: this.$store.state.user.site,
  1445. username: '',
  1446. roleDesc: '',
  1447. userDisplay: '',
  1448. active: '',
  1449. page: 1,
  1450. limit: 10,
  1451. },
  1452. searchBusinessData4:{
  1453. site: this.$store.state.user.site,
  1454. username: '',
  1455. roleDesc: '',
  1456. userDisplay: '',
  1457. active: '',
  1458. page: 1,
  1459. limit: 10,
  1460. },
  1461. searchBusinessData5:{
  1462. site: this.$store.state.user.site,
  1463. username: '',
  1464. roleDesc: '',
  1465. userDisplay: '',
  1466. active: '',
  1467. page: 1,
  1468. limit: 10,
  1469. },
  1470. searchBusinessData6:{
  1471. site: this.$store.state.user.site,
  1472. username: '',
  1473. roleDesc: '',
  1474. userDisplay: '',
  1475. active: '',
  1476. page: 1,
  1477. limit: 10,
  1478. },
  1479. confirmData:{
  1480. site: '',
  1481. projectId: '',
  1482. orderRef1: '',
  1483. documentId: '',
  1484. documentType: '',
  1485. itemNo: '',
  1486. userid: '',
  1487. wantedConfirmDate: '',
  1488. confirmFlag: '',
  1489. confirmedBy: '',
  1490. remark: '',
  1491. confirmedDate: '',
  1492. createDate: '',
  1493. createBy: '',
  1494. page: 1,
  1495. limit: 1000
  1496. },
  1497. departmentList:[],
  1498. activeName: 'proofRecord',
  1499. activeName1: 'selectDocument',
  1500. // 日期限制
  1501. // pickerOptions: {
  1502. // disabledDate(time) {
  1503. // return time.getTime() > Date.now();
  1504. // },
  1505. // },
  1506. // 展示列集
  1507. columnList: [
  1508. {
  1509. userId: this.$store.state.user.name,
  1510. functionId: 101001013,
  1511. serialNumber: '101001013Table1BuDesc',
  1512. tableId: "101001013Table1",
  1513. tableName: "BU文档清单表",
  1514. columnProp: 'buDesc',
  1515. headerAlign: "center",
  1516. align: "center",
  1517. columnLabel: 'BU',
  1518. columnHidden: false,
  1519. columnImage: false,
  1520. columnSortable: false,
  1521. sortLv: 0,
  1522. status: true,
  1523. fixed: '',
  1524. columnWidth: 100,
  1525. },
  1526. {
  1527. userId: this.$store.state.user.name,
  1528. functionId: 101001014,
  1529. serialNumber: '101001014Table1ProjectId',
  1530. tableId: "101001014Table1",
  1531. tableName: "项目信息表",
  1532. columnProp: 'projectId',
  1533. headerAlign: "center",
  1534. align: "center",
  1535. columnLabel: '项目编码',
  1536. columnHidden: false,
  1537. columnImage: false,
  1538. columnSortable: false,
  1539. sortLv: 0,
  1540. status: true,
  1541. fixed: '',
  1542. columnWidth: 100,
  1543. },
  1544. {
  1545. userId: this.$store.state.user.name,
  1546. functionId: 101001014,
  1547. serialNumber: '101001014Table1ProjectDesc',
  1548. tableId: "101001014Table1",
  1549. tableName: "项目信息表",
  1550. columnProp: 'projectDesc',
  1551. headerAlign: "center",
  1552. align: "center",
  1553. columnLabel: '项目',
  1554. columnHidden: false,
  1555. columnImage: false,
  1556. columnSortable: false,
  1557. sortLv: 0,
  1558. status: true,
  1559. fixed: '',
  1560. columnWidth: 100,
  1561. },
  1562. {
  1563. userId: this.$store.state.user.name,
  1564. functionId: 101001014,
  1565. serialNumber: '101001014Table1TestPartNo',
  1566. tableId: "101001014Table1",
  1567. tableName: "项目信息表",
  1568. columnProp: 'testPartNo',
  1569. headerAlign: "center",
  1570. align: "center",
  1571. columnLabel: '料号',
  1572. columnHidden: false,
  1573. columnImage: false,
  1574. columnSortable: false,
  1575. sortLv: 0,
  1576. status: true,
  1577. fixed: '',
  1578. columnWidth: 100,
  1579. },
  1580. {
  1581. userId: this.$store.state.user.name,
  1582. functionId: 101001014,
  1583. serialNumber: '101001014Table1customerNo',
  1584. tableId: "101001014Table1",
  1585. tableName: "项目信息表",
  1586. columnProp: "customerNo",
  1587. headerAlign: "center",
  1588. align: "left",
  1589. columnLabel: "客户编码",
  1590. columnHidden: false,
  1591. columnImage: false,
  1592. columnSortable: false,
  1593. sortLv: 0,
  1594. status: true,
  1595. fixed: '',
  1596. columnWidth: 100
  1597. },
  1598. {
  1599. userId: this.$store.state.user.name,
  1600. functionId: 101001014,
  1601. serialNumber: '101001014Table1customerDesc',
  1602. tableId: "101001014Table1",
  1603. tableName: "项目信息表",
  1604. columnProp: "customerDesc",
  1605. headerAlign: "center",
  1606. align: "left",
  1607. columnLabel: "客户名称",
  1608. columnHidden: false,
  1609. columnImage: false,
  1610. columnSortable: false,
  1611. sortLv: 0,
  1612. status: true,
  1613. fixed: '',
  1614. columnWidth: 150
  1615. },
  1616. {
  1617. userId: this.$store.state.user.name,
  1618. functionId: 101001014,
  1619. serialNumber: '101001014Table1ProjectCreationDate',
  1620. tableId: "101001014Table1",
  1621. tableName: "项目信息表",
  1622. columnProp: "projectCreationDate",
  1623. headerAlign: "center",
  1624. align: "left",
  1625. columnLabel: "立项日期",
  1626. columnHidden: false,
  1627. columnImage: false,
  1628. columnSortable: false,
  1629. sortLv: 0,
  1630. status: true,
  1631. fixed: '',
  1632. columnWidth: 150
  1633. },
  1634. {
  1635. userId: this.$store.state.user.name,
  1636. functionId: 101001014,
  1637. serialNumber: '101001014Table1ProjectCategory',
  1638. tableId: "101001014Table1",
  1639. tableName: "项目信息表",
  1640. columnProp: 'projectCategory',
  1641. headerAlign: "center",
  1642. align: "left",
  1643. columnLabel: '项目分类',
  1644. columnHidden: false,
  1645. columnImage: false,
  1646. columnSortable: false,
  1647. sortLv: 0,
  1648. status: true,
  1649. fixed: '',
  1650. columnWidth: 120,
  1651. },
  1652. {
  1653. userId: this.$store.state.user.name,
  1654. functionId: 101001014,
  1655. serialNumber: '101001014Table1Priority',
  1656. tableId: "101001014Table1",
  1657. tableName: "项目信息表",
  1658. columnProp: 'priority',
  1659. headerAlign: "center",
  1660. align: "left",
  1661. columnLabel: '优先级',
  1662. columnHidden: false,
  1663. columnImage: false,
  1664. columnSortable: false,
  1665. sortLv: 0,
  1666. status: true,
  1667. fixed: '',
  1668. columnWidth: 120,
  1669. },
  1670. //区域
  1671. {
  1672. userId: this.$store.state.user.name,
  1673. functionId: 101001014,
  1674. serialNumber: '101001014Table1CProjectRegion',
  1675. tableId: "101001014Table1",
  1676. tableName: "项目信息表",
  1677. columnProp: 'cProjectRegion',
  1678. headerAlign: "center",
  1679. align: "left",
  1680. columnLabel: '区域',
  1681. columnHidden: false,
  1682. columnImage: false,
  1683. columnSortable: false,
  1684. sortLv: 0,
  1685. status: true,
  1686. fixed: '',
  1687. columnWidth: 120,
  1688. },
  1689. {
  1690. userId: this.$store.state.user.name,
  1691. functionId: 101001014,
  1692. serialNumber: '101001014Table1ProjectManager',
  1693. tableId: "101001014Table1",
  1694. tableName: "项目信息表",
  1695. columnProp: 'projectManager',
  1696. headerAlign: "center",
  1697. align: "left",
  1698. columnLabel: 'PM/Sales',
  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: 101001014,
  1710. serialNumber: '101001014Table1ProjectOwner',
  1711. tableId: "101001014Table1",
  1712. tableName: "项目信息表",
  1713. columnProp: 'projectOwner',
  1714. headerAlign: "center",
  1715. align: "left",
  1716. columnLabel: 'PjM',
  1717. columnHidden: false,
  1718. columnImage: false,
  1719. columnSortable: false,
  1720. sortLv: 0,
  1721. status: true,
  1722. fixed: '',
  1723. columnWidth: 120,
  1724. },
  1725. {
  1726. userId: this.$store.state.user.name,
  1727. functionId: 101001014,
  1728. serialNumber: '101001014Table1Engineer',
  1729. tableId: "101001014Table1",
  1730. tableName: "项目信息表",
  1731. columnProp: 'engineer',
  1732. headerAlign: "center",
  1733. align: "left",
  1734. columnLabel: 'Engineer',
  1735. columnHidden: false,
  1736. columnImage: false,
  1737. columnSortable: false,
  1738. sortLv: 0,
  1739. status: true,
  1740. fixed: '',
  1741. columnWidth: 120,
  1742. },
  1743. {
  1744. userId: this.$store.state.user.name,
  1745. functionId: 101001014,
  1746. serialNumber: '101001014Table1CQualityEngineer1',
  1747. tableId: "101001014Table1",
  1748. tableName: "项目信息表",
  1749. columnProp: 'cQualityEngineer1',
  1750. headerAlign: "center",
  1751. align: "center",
  1752. columnLabel: 'IPQC-Lam/Pri/Etch/Slit',
  1753. columnHidden: false,
  1754. columnImage: false,
  1755. columnSortable: false,
  1756. sortLv: 0,
  1757. status: true,
  1758. fixed: '',
  1759. columnWidth: 120,
  1760. },
  1761. {
  1762. userId: this.$store.state.user.name,
  1763. functionId: 101001014,
  1764. serialNumber: '101001014Table1CQualityEngineer2',
  1765. tableId: "101001014Table1",
  1766. tableName: "项目信息表",
  1767. columnProp: 'cQualityEngineer2',
  1768. headerAlign: "center",
  1769. align: "center",
  1770. columnLabel: 'IPQC-Converting',
  1771. columnHidden: false,
  1772. columnImage: false,
  1773. columnSortable: false,
  1774. sortLv: 0,
  1775. status: true,
  1776. fixed: '',
  1777. columnWidth: 120,
  1778. },
  1779. {
  1780. userId: this.$store.state.user.name,
  1781. functionId: 101001014,
  1782. serialNumber: '101001014Table1CQualityEngineer3',
  1783. tableId: "101001014Table1",
  1784. tableName: "项目信息表",
  1785. columnProp: 'cQualityEngineer3',
  1786. headerAlign: "center",
  1787. align: "center",
  1788. columnLabel: 'FQC',
  1789. columnHidden: false,
  1790. columnImage: false,
  1791. columnSortable: false,
  1792. sortLv: 0,
  1793. status: true,
  1794. fixed: '',
  1795. columnWidth: 120,
  1796. },
  1797. {
  1798. userId: this.$store.state.user.name,
  1799. functionId: 101001014,
  1800. serialNumber: '101001014Table1CManufactureEngineer',
  1801. tableId: "101001014Table1",
  1802. tableName: "项目信息表",
  1803. columnProp: 'cManufactureEngineer',
  1804. headerAlign: "center",
  1805. align: "center",
  1806. columnLabel: 'MFG',
  1807. columnHidden: false,
  1808. columnImage: false,
  1809. columnSortable: false,
  1810. sortLv: 0,
  1811. status: true,
  1812. fixed: '',
  1813. columnWidth: 120,
  1814. },
  1815. {
  1816. userId: this.$store.state.user.name,
  1817. functionId: 101001014,
  1818. serialNumber: '101001014Table1Status',
  1819. tableId: "101001014Table1",
  1820. tableName: "项目信息表",
  1821. columnProp: 'status',
  1822. headerAlign: "center",
  1823. align: "left",
  1824. columnLabel: '项目状态' ,
  1825. columnHidden: false,
  1826. columnImage: false,
  1827. columnSortable: false,
  1828. sortLv: 0,
  1829. status: true,
  1830. fixed: '',
  1831. columnWidth: 120,
  1832. },
  1833. {
  1834. userId: this.$store.state.user.name,
  1835. functionId: 101001014,
  1836. serialNumber: '101001014Table1NeedDate',
  1837. tableId: "101001014Table1",
  1838. tableName: "项目信息表",
  1839. columnProp: 'needDate',
  1840. headerAlign: "center",
  1841. align: "left",
  1842. columnLabel: '预计完成日期',
  1843. columnHidden: false,
  1844. columnImage: false,
  1845. columnSortable: false,
  1846. sortLv: 0,
  1847. status: true,
  1848. fixed: '',
  1849. columnWidth: 120,
  1850. },
  1851. {
  1852. userId: this.$store.state.user.name,
  1853. functionId: 101001014,
  1854. serialNumber: '101001014Table1ProjectCloseDate',
  1855. tableId: "101001014Table1",
  1856. tableName: "项目信息表",
  1857. columnProp: 'projectCloseDate',
  1858. headerAlign: "center",
  1859. align: "left",
  1860. columnLabel: '结案日期',
  1861. columnHidden: false,
  1862. columnImage: false,
  1863. columnSortable: false,
  1864. sortLv: 0,
  1865. status: true,
  1866. fixed: '',
  1867. columnWidth: 120,
  1868. },
  1869. {
  1870. userId: this.$store.state.user.name,
  1871. functionId: 101001014,
  1872. serialNumber: '101001014Table1FinalPartNo',
  1873. tableId: "101001014Table1",
  1874. tableName: "项目信息表",
  1875. columnProp: 'finalPartNo',
  1876. headerAlign: "center",
  1877. align: "left",
  1878. columnLabel: 'ERP正式料号',
  1879. columnHidden: false,
  1880. columnImage: false,
  1881. columnSortable: false,
  1882. sortLv: 0,
  1883. status: true,
  1884. fixed: '',
  1885. columnWidth: 120,
  1886. },
  1887. // {
  1888. // userId: this.$store.state.user.name,
  1889. // functionId: 101001014,
  1890. // serialNumber: '101001014Table1Active',
  1891. // tableId: "101001014Table1",
  1892. // tableName: "项目信息表",
  1893. // columnProp: 'active',
  1894. // headerAlign: "center",
  1895. // align: "center",
  1896. // columnLabel: '在用',
  1897. // columnHidden: false,
  1898. // columnImage: false,
  1899. // columnSortable: false,
  1900. // sortLv: 0,
  1901. // status: true,
  1902. // fixed: '',
  1903. // columnWidth: 120,
  1904. // },
  1905. {
  1906. userId: this.$store.state.user.name,
  1907. functionId: 101001014,
  1908. serialNumber: '101001014Table1CreateDate',
  1909. tableId: "101001014Table1",
  1910. tableName: "项目信息表",
  1911. columnProp: 'createDate',
  1912. headerAlign: "center",
  1913. align: "center",
  1914. columnLabel: '创建时间',
  1915. columnHidden: false,
  1916. columnImage: false,
  1917. columnSortable: false,
  1918. sortLv: 0,
  1919. status: true,
  1920. fixed: '',
  1921. columnWidth: 120,
  1922. },
  1923. {
  1924. userId: this.$store.state.user.name,
  1925. functionId: 101001014,
  1926. serialNumber: '101001014Table1CreateBy',
  1927. tableId: "101001014Table1",
  1928. tableName: "项目信息表",
  1929. columnProp: 'createBy',
  1930. headerAlign: "center",
  1931. align: "left",
  1932. columnLabel: '创建人',
  1933. columnHidden: false,
  1934. columnImage: false,
  1935. columnSortable: false,
  1936. sortLv: 0,
  1937. status: true,
  1938. fixed: '',
  1939. columnWidth: 120,
  1940. },
  1941. {
  1942. userId: this.$store.state.user.name,
  1943. functionId: 101001014,
  1944. serialNumber: '101001014Table1UpdateDate',
  1945. tableId: "101001014Table1",
  1946. tableName: "项目信息表",
  1947. columnProp: 'updateDate',
  1948. headerAlign: "center",
  1949. align: "center",
  1950. columnLabel: '更新时间',
  1951. columnHidden: false,
  1952. columnImage: false,
  1953. columnSortable: false,
  1954. sortLv: 0,
  1955. status: true,
  1956. fixed: '',
  1957. columnWidth: 120,
  1958. },
  1959. {
  1960. userId: this.$store.state.user.name,
  1961. functionId: 101001014,
  1962. serialNumber: '101001014Table1UpdateBy',
  1963. tableId: "101001014Table1",
  1964. tableName: "项目信息表",
  1965. columnProp: 'updateBy',
  1966. headerAlign: "center",
  1967. align: "left",
  1968. columnLabel: '更新人',
  1969. columnHidden: false,
  1970. columnImage: false,
  1971. columnSortable: false,
  1972. sortLv: 0,
  1973. status: true,
  1974. fixed: '',
  1975. columnWidth: 120,
  1976. },
  1977. ],
  1978. columnFileContentArray: [
  1979. {
  1980. userId: this.$store.state.user.name,
  1981. functionId: 101001014,
  1982. serialNumber: '101001014Table1FileName',
  1983. tableId: "101001014Table1",
  1984. tableName: "打样文档表",
  1985. columnProp: 'fileName',
  1986. headerAlign: "center",
  1987. align: "left",
  1988. columnLabel: '文件名',
  1989. columnHidden: false,
  1990. columnImage: false,
  1991. columnSortable: false,
  1992. sortLv: 0,
  1993. status: true,
  1994. fixed: '',
  1995. columnWidth: 180,
  1996. },
  1997. //是否上传
  1998. {
  1999. userId: this.$store.state.user.name,
  2000. functionId: 101001014,
  2001. serialNumber: '101001014Table1UploadedFlag',
  2002. tableId: "101001014Table1",
  2003. tableName: "打样文档表",
  2004. columnProp: 'uploadedFlag',
  2005. headerAlign: "center",
  2006. align: "center",
  2007. columnLabel: '是否上传',
  2008. columnHidden: false,
  2009. columnImage: false,
  2010. columnSortable: false,
  2011. sortLv: 0,
  2012. status: true,
  2013. fixed: '',
  2014. columnWidth: 70,
  2015. },
  2016. {
  2017. userId: this.$store.state.user.name,
  2018. functionId: 101001014,
  2019. serialNumber: '101001014Table1Conclusion',
  2020. tableId: "101001014Table1",
  2021. tableName: "打样文档表",
  2022. columnProp: 'conclusion',
  2023. headerAlign: "center",
  2024. align: "center",
  2025. columnLabel: '结论',
  2026. columnHidden: false,
  2027. columnImage: false,
  2028. columnSortable: false,
  2029. sortLv: 0,
  2030. status: true,
  2031. fixed: '',
  2032. columnWidth: 70,
  2033. },
  2034. {
  2035. userId: this.$store.state.user.name,
  2036. functionId: 101001014,
  2037. serialNumber: '101001014Table1DocumentGroupDesc',
  2038. tableId: "101001014Table1",
  2039. tableName: "打样文档表",
  2040. columnProp: 'documentGroupDesc',
  2041. headerAlign: "center",
  2042. align: "center",
  2043. columnLabel: '文档种类',
  2044. columnHidden: false,
  2045. columnImage: false,
  2046. columnSortable: false,
  2047. sortLv: 0,
  2048. status: true,
  2049. fixed: '',
  2050. columnWidth: 70,
  2051. },
  2052. {
  2053. userId: this.$store.state.user.name,
  2054. functionId: 103001,
  2055. serialNumber: '103001Table1CreateDate',
  2056. tableId: '103001Table1',
  2057. tableName: '打样文档表',
  2058. columnProp: 'createDate',
  2059. headerAlign: 'center',
  2060. align: 'center',
  2061. columnLabel: '创建时间',
  2062. columnHidden: false,
  2063. columnImage: false,
  2064. columnSortable: false,
  2065. sortLv: 0,
  2066. status: true,
  2067. fixed: '',
  2068. columnWidth: 120
  2069. },
  2070. {
  2071. userId: this.$store.state.user.name,
  2072. functionId: 103001,
  2073. serialNumber: '103001Table1CreateBy',
  2074. tableId: '103001Table1',
  2075. tableName: '打样文档表',
  2076. columnProp: 'createdBy',
  2077. headerAlign: 'center',
  2078. align: 'center',
  2079. columnLabel: '创建人',
  2080. columnHidden: false,
  2081. columnImage: false,
  2082. columnSortable: false,
  2083. sortLv: 0,
  2084. status: true,
  2085. fixed: '',
  2086. columnWidth: 80
  2087. }
  2088. ],
  2089. columnProjectDocumentManifestDefinitionList:[
  2090. {
  2091. userId: this.$store.state.user.name,
  2092. functionId: 101001013,
  2093. serialNumber: '101001013Table1DocumentTypeId',
  2094. tableId: "101001013Table1",
  2095. tableName: "BU文档清单表",
  2096. columnProp: 'documentTypeId',
  2097. headerAlign: "center",
  2098. align: "center",
  2099. columnLabel: '文档类型ID',
  2100. columnHidden: false,
  2101. columnImage: false,
  2102. columnSortable: false,
  2103. sortLv: 0,
  2104. status: true,
  2105. fixed: '',
  2106. columnWidth: 120,
  2107. },
  2108. {
  2109. userId: this.$store.state.user.name,
  2110. functionId: 101001013,
  2111. serialNumber: '101001013Table1DocumentType',
  2112. tableId: "101001013Table1",
  2113. tableName: "BU文档清单表",
  2114. columnProp: 'documentType',
  2115. headerAlign: "center",
  2116. align: "left",
  2117. columnLabel: '文档类型',
  2118. columnHidden: false,
  2119. columnImage: false,
  2120. columnSortable: false,
  2121. sortLv: 0,
  2122. status: true,
  2123. fixed: '',
  2124. columnWidth: 120,
  2125. },
  2126. {
  2127. userId: this.$store.state.user.name,
  2128. functionId: 101001013,
  2129. serialNumber: '101001013Table1ResponsibleDepartment',
  2130. tableId: "101001013Table1",
  2131. tableName: "BU文档清单表",
  2132. columnProp: 'responsibleDepartment',
  2133. headerAlign: "center",
  2134. align: "left",
  2135. columnLabel: '责任部门',
  2136. columnHidden: false,
  2137. columnImage: false,
  2138. columnSortable: false,
  2139. sortLv: 0,
  2140. status: true,
  2141. fixed: '',
  2142. columnWidth: 120,
  2143. },
  2144. {
  2145. userId: this.$store.state.user.name,
  2146. functionId: 101001013,
  2147. serialNumber: '101001013Table1EstimatedCompletionDays',
  2148. tableId: "101001013Table1",
  2149. tableName: "BU文档清单表",
  2150. columnProp: 'estimatedCompletionDays',
  2151. headerAlign: "center",
  2152. align: "left",
  2153. columnLabel: '预计完成天数',
  2154. columnHidden: false,
  2155. columnImage: false,
  2156. columnSortable: false,
  2157. sortLv: 0,
  2158. status: true,
  2159. fixed: '',
  2160. columnWidth: 80,
  2161. },
  2162. ],
  2163. columnProjectAllDocumentList: [
  2164. {
  2165. userId: this.$store.state.user.name,
  2166. functionId: 101001013,
  2167. serialNumber: '101001013Table1ProofingId',
  2168. tableId: "101001013Table1",
  2169. tableName: "BU文档清单表",
  2170. columnProp: 'proofingNo',
  2171. headerAlign: "center",
  2172. align: "center",
  2173. columnLabel: '打样单号',
  2174. columnHidden: false,
  2175. columnImage: false,
  2176. columnSortable: false,
  2177. sortLv: 0,
  2178. status: true,
  2179. fixed: '',
  2180. columnWidth: 80,
  2181. },
  2182. {
  2183. userId: this.$store.state.user.name,
  2184. functionId: 101001013,
  2185. serialNumber: '101001013Table1ProjectPhase',
  2186. tableId: "101001013Table1",
  2187. tableName: "BU文档清单表",
  2188. columnProp: 'projectPhase',
  2189. headerAlign: "center",
  2190. align: "center",
  2191. columnLabel: '项目阶段',
  2192. columnHidden: false,
  2193. columnImage: false,
  2194. columnSortable: false,
  2195. sortLv: 0,
  2196. status: true,
  2197. fixed: '',
  2198. columnWidth: 120,
  2199. },
  2200. {
  2201. userId: this.$store.state.user.name,
  2202. functionId: 101001014,
  2203. serialNumber: '101001014Table1FileName',
  2204. tableId: "101001014Table1",
  2205. tableName: "打样文档表",
  2206. columnProp: 'fileName',
  2207. headerAlign: "center",
  2208. align: "left",
  2209. columnLabel: '文件名',
  2210. columnHidden: false,
  2211. columnImage: false,
  2212. columnSortable: false,
  2213. sortLv: 0,
  2214. status: true,
  2215. fixed: '',
  2216. columnWidth: 180,
  2217. },
  2218. //是否上传
  2219. {
  2220. userId: this.$store.state.user.name,
  2221. functionId: 101001014,
  2222. serialNumber: '101001014Table1UploadedFlag',
  2223. tableId: "101001014Table1",
  2224. tableName: "打样文档表",
  2225. columnProp: 'uploadedFlag',
  2226. headerAlign: "center",
  2227. align: "center",
  2228. columnLabel: '是否上传',
  2229. columnHidden: false,
  2230. columnImage: false,
  2231. columnSortable: false,
  2232. sortLv: 0,
  2233. status: true,
  2234. fixed: '',
  2235. columnWidth: 70,
  2236. },
  2237. {
  2238. userId: this.$store.state.user.name,
  2239. functionId: 101001014,
  2240. serialNumber: '101001014Table1Conclusion',
  2241. tableId: "101001014Table1",
  2242. tableName: "打样文档表",
  2243. columnProp: 'conclusion',
  2244. headerAlign: "center",
  2245. align: "center",
  2246. columnLabel: '结论',
  2247. columnHidden: false,
  2248. columnImage: false,
  2249. columnSortable: false,
  2250. sortLv: 0,
  2251. status: true,
  2252. fixed: '',
  2253. columnWidth: 70,
  2254. },
  2255. {
  2256. userId: this.$store.state.user.name,
  2257. functionId: 101001014,
  2258. serialNumber: '101001014Table1DocumentGroupDesc',
  2259. tableId: "101001014Table1",
  2260. tableName: "打样文档表",
  2261. columnProp: 'documentGroupDesc',
  2262. headerAlign: "center",
  2263. align: "center",
  2264. columnLabel: '文档种类',
  2265. columnHidden: false,
  2266. columnImage: false,
  2267. columnSortable: false,
  2268. sortLv: 0,
  2269. status: true,
  2270. fixed: '',
  2271. columnWidth: 70,
  2272. },
  2273. {
  2274. userId: this.$store.state.user.name,
  2275. functionId: 103001,
  2276. serialNumber: '103001Table1CreateDate',
  2277. tableId: '103001Table1',
  2278. tableName: '打样文档表',
  2279. columnProp: 'createDate',
  2280. headerAlign: 'center',
  2281. align: 'center',
  2282. columnLabel: '创建时间',
  2283. columnHidden: false,
  2284. columnImage: false,
  2285. columnSortable: false,
  2286. sortLv: 0,
  2287. status: true,
  2288. fixed: '',
  2289. columnWidth: 130
  2290. },
  2291. {
  2292. userId: this.$store.state.user.name,
  2293. functionId: 103001,
  2294. serialNumber: '103001Table1CreateBy',
  2295. tableId: '103001Table1',
  2296. tableName: '打样文档表',
  2297. columnProp: 'createdBy',
  2298. headerAlign: 'center',
  2299. align: 'center',
  2300. columnLabel: '创建人',
  2301. columnHidden: false,
  2302. columnImage: false,
  2303. columnSortable: false,
  2304. sortLv: 0,
  2305. status: true,
  2306. fixed: '',
  2307. columnWidth: 80
  2308. }
  2309. ],
  2310. levelList: [],
  2311. rules:{
  2312. projectId:[
  2313. {
  2314. required: true,
  2315. message: ' ',
  2316. trigger: ['blur','change']
  2317. }
  2318. ],
  2319. projectDesc:[
  2320. {
  2321. required: true,
  2322. message: ' ',
  2323. trigger: ['blur','change']
  2324. }
  2325. ],
  2326. customerNo:[
  2327. {
  2328. required: true,
  2329. message: ' ',
  2330. trigger: ['blur','change']
  2331. }
  2332. ],
  2333. customerDesc:[
  2334. {
  2335. required: true,
  2336. message: ' ',
  2337. trigger: ['blur','change']
  2338. }
  2339. ],
  2340. testPartNo:[
  2341. {
  2342. required: true,
  2343. message: ' ',
  2344. trigger: ['blur','change']
  2345. }
  2346. ],
  2347. partDesc:[
  2348. {
  2349. required: true,
  2350. message: ' ',
  2351. trigger: ['blur','change']
  2352. }
  2353. ],
  2354. projectManager:[
  2355. {
  2356. required: true,
  2357. message: ' ',
  2358. trigger: ['blur','change']
  2359. }
  2360. ],
  2361. engineer:[
  2362. {
  2363. required: true,
  2364. message: ' ',
  2365. trigger: ['blur','change']
  2366. }
  2367. ],
  2368. projectOwner:[
  2369. {
  2370. required: true,
  2371. message: ' ',
  2372. trigger: ['blur','change']
  2373. }
  2374. ],
  2375. cProjectRegion:[
  2376. {
  2377. required: true,
  2378. message: ' ',
  2379. trigger: ['blur','change']
  2380. }
  2381. ],
  2382. cQualityEngineer1:[
  2383. {
  2384. required: true,
  2385. message: ' ',
  2386. trigger: ['blur','change']
  2387. }
  2388. ],
  2389. cQualityEngineer2:[
  2390. {
  2391. required: true,
  2392. message: ' ',
  2393. trigger: ['blur','change']
  2394. }
  2395. ],
  2396. projectManagerName:[
  2397. {
  2398. required: true,
  2399. message: ' ',
  2400. trigger: ['blur','change']
  2401. }
  2402. ],
  2403. engineerName:[
  2404. {
  2405. required: true,
  2406. message: ' ',
  2407. trigger: ['blur','change']
  2408. }
  2409. ],
  2410. cQualityEngineer1Name:[
  2411. {
  2412. required: true,
  2413. message: ' ',
  2414. trigger: ['blur','change']
  2415. }
  2416. ],
  2417. cQualityEngineer2Name:[
  2418. {
  2419. required: true,
  2420. message: ' ',
  2421. trigger: ['blur','change']
  2422. }
  2423. ],
  2424. projectCategoryType:[
  2425. {
  2426. required: true,
  2427. message: ' ',
  2428. trigger: ['blur','change']
  2429. }
  2430. ],
  2431. documentTypeIdType:[
  2432. {
  2433. required: true,
  2434. message: ' ',
  2435. trigger: ['blur','change']
  2436. }
  2437. ],
  2438. documentTypeType:[
  2439. {
  2440. required: true,
  2441. message: ' ',
  2442. trigger: ['blur','change']
  2443. }
  2444. ],
  2445. responsibleDepartmentType:[
  2446. {
  2447. required: true,
  2448. message: ' ',
  2449. trigger: ['blur','change']
  2450. }
  2451. ],
  2452. estimatedCompletionDaysType:[
  2453. {
  2454. required: true,
  2455. message: ' ',
  2456. trigger: ['blur','change']
  2457. }
  2458. ],
  2459. activeType:[
  2460. {
  2461. required: true,
  2462. message: ' ',
  2463. trigger: ['blur','change']
  2464. }
  2465. ],
  2466. bu:[
  2467. {
  2468. required: true,
  2469. message: ' ',
  2470. trigger: ['blur','change']
  2471. }
  2472. ],
  2473. finalPartNo:[
  2474. {
  2475. required: true,
  2476. message: ' ',
  2477. trigger: ['blur','change']
  2478. }
  2479. ],
  2480. finalPartDesc:[
  2481. {
  2482. required: true,
  2483. message: ' ',
  2484. trigger: ['blur','change']
  2485. }
  2486. ],
  2487. needDate:[
  2488. {
  2489. required: true,
  2490. message: ' ',
  2491. trigger: ['blur','change']
  2492. }
  2493. ],
  2494. projectCreationDate:[
  2495. {
  2496. required: true,
  2497. message: ' ',
  2498. trigger: ['blur','change']
  2499. }
  2500. ],
  2501. wantedConfirmDate:[
  2502. {
  2503. required: true,
  2504. message: ' ',
  2505. trigger: ['blur','change']
  2506. }
  2507. ],
  2508. },
  2509. projectCategoryList: [
  2510. {
  2511. projectCategory: 'Low Risk',
  2512. },
  2513. {
  2514. projectCategory: 'High Risk',
  2515. },
  2516. {
  2517. projectCategory: 'Sustaining',
  2518. }
  2519. ],
  2520. cProjectRegionList: [
  2521. {
  2522. cProjectRegion: 'Global',
  2523. },
  2524. {
  2525. cProjectRegion: 'APAC',
  2526. },
  2527. {
  2528. cProjectRegion: 'CHINA',
  2529. },
  2530. {
  2531. cProjectRegion: 'EU',
  2532. },
  2533. {
  2534. cProjectRegion: 'US',
  2535. },
  2536. {
  2537. cProjectRegion: 'Mexico',
  2538. },
  2539. {
  2540. cProjectRegion: 'Other',
  2541. },
  2542. ],
  2543. priorityList: [
  2544. {
  2545. priority: 'Low',
  2546. },
  2547. {
  2548. priority: 'Risk',
  2549. },
  2550. ],
  2551. statusList: [
  2552. {
  2553. status: '进行中',
  2554. },
  2555. {
  2556. status: '已结束',
  2557. }
  2558. ],
  2559. userBuList: [],
  2560. authSearch: false,
  2561. authSave: false,
  2562. authUpdate: false,
  2563. authDelete: false,
  2564. menuId: this.$route.meta.menuId,
  2565. }
  2566. },
  2567. mounted () {
  2568. this.$nextTick(() => {
  2569. this.height = window.innerHeight - 558
  2570. })
  2571. },
  2572. created () {
  2573. // 按钮控制
  2574. this.getButtonAuthData()
  2575. // 获取用户的 site 和 bu
  2576. this.getSiteAndBuByUserName()
  2577. // 校验用户是否收藏
  2578. this.favoriteIsOk()
  2579. // 动态列
  2580. this.getTableUserColumn(this.$route.meta.menuId+'table1',1)
  2581. if (!this.authSearch) {
  2582. // 获取数据列表
  2583. this.getDataList()
  2584. }
  2585. },
  2586. methods: {
  2587. // 获取用户的bu
  2588. getSiteAndBuByUserName () {
  2589. let tempData = {
  2590. username: this.$store.state.user.name,
  2591. }
  2592. getSiteAndBuByUserName(tempData).then(({data}) => {
  2593. if (data.code === 0) {
  2594. this.userBuList = data.rows
  2595. }
  2596. })
  2597. },
  2598. // 获取基础数据列表S
  2599. getBaseList (val,type) {
  2600. this.tagNo = val
  2601. this.$nextTick(() => {
  2602. let strVal = ''
  2603. if (val === 509 ) {
  2604. strVal = this.modalData.customerNo
  2605. this.$refs.baseList.init(val, strVal)
  2606. }
  2607. if (val === 301 ) {
  2608. strVal = this.modalData.projectManager
  2609. this.$refs.baseList.init(val, strVal)
  2610. }
  2611. })
  2612. },
  2613. /* 列表方法的回调 */
  2614. getBaseData (val) {
  2615. if (this.tagNo === 509) {
  2616. this.modalData.customerNo = val.customer_no
  2617. this.modalData.customerDesc = val.customer_desc
  2618. }
  2619. if (this.tagNo === 301) {
  2620. this.modalData.projectManager = val.project_manager
  2621. this.modalData.projectManagerName = val.project_manager
  2622. }
  2623. },
  2624. // 校验用户是否收藏
  2625. favoriteIsOk () {
  2626. let userFavorite = {
  2627. userId: this.$store.state.user.id,
  2628. languageCode: this.$i18n.locale
  2629. }
  2630. userFavoriteList(userFavorite).then(({data}) => {
  2631. for (let i = 0; i < data.list.length; i++) {
  2632. if (this.$route.meta.menuId === data.list[i].menuId) {
  2633. this.favorite = true
  2634. }
  2635. }
  2636. })
  2637. },
  2638. // 收藏 OR 取消收藏
  2639. favoriteFunction () {
  2640. let userFavorite = {
  2641. userId: this.$store.state.user.id,
  2642. functionId: this.$route.meta.menuId,
  2643. }
  2644. if (this.favorite) {
  2645. removeUserFavorite(userFavorite).then(({data}) => {
  2646. this.$message.success(data.msg)
  2647. this.favorite = false
  2648. })
  2649. } else {
  2650. // 收藏
  2651. saveUserFavorite(userFavorite).then(({data}) => {
  2652. this.$message.success(data.msg)
  2653. this.favorite = true
  2654. })
  2655. }
  2656. },
  2657. //导出excel
  2658. async createExportData () {
  2659. this.searchData.limit = -1
  2660. this.searchData.page = 1
  2661. await eamProjectInfoSearch(this.searchData).then(({data}) => {
  2662. this.exportList = data.page.list
  2663. })
  2664. return this.exportList
  2665. },
  2666. startDownload () {},
  2667. finishDownload () {},
  2668. fields () {
  2669. let json = "{"
  2670. this.columnList.forEach((item, index) => {
  2671. if (index == this.columnList.length - 1) {
  2672. json += "\"" + item.columnLabel + "\"" + ":" + "\"" + item.columnProp + "\""
  2673. } else {
  2674. json += "\"" + item.columnLabel + "\"" + ":" + "\"" + item.columnProp + "\"" + ","
  2675. }
  2676. })
  2677. json += "}"
  2678. let s = eval("(" + json + ")")
  2679. return s
  2680. },
  2681. // 获取数据列表
  2682. getDataList () {
  2683. this.searchData.limit = this.pageSize
  2684. this.searchData.page = this.pageIndex
  2685. eamProjectInfoSearch(this.searchData).then(({data}) => {
  2686. if (data.code === 0) {
  2687. this.dataList = data.page.list
  2688. this.pageIndex = data.page.currPage
  2689. this.pageSize = data.page.pageSize
  2690. this.totalPage = data.page.totalCount
  2691. // 判断是否全部存在数据
  2692. if (this.totalPage > 0) {
  2693. // 设置选中行
  2694. this.$refs.mainTable.setCurrentRow(this.dataList[0])
  2695. // 加载当前的页签的table
  2696. this.refreshCurrentTabTable()
  2697. this.proofingClickRow(this.dataList[0])
  2698. }
  2699. }
  2700. })
  2701. },
  2702. // ======== 列表操作方法 ========
  2703. /**
  2704. * 单机选中物料信息
  2705. * @param row
  2706. */
  2707. proofingClickRow(row){
  2708. row.proofingId = '*'
  2709. this.proofingCurrentRow=JSON.parse(JSON.stringify(row));
  2710. },
  2711. /**
  2712. * 当前值发生变化的时候修改
  2713. * @param row
  2714. * @param oldRow
  2715. */
  2716. changeCurrentRow (row, oldRow) {
  2717. row.proofingId = '*'
  2718. // 判断是否是获取焦点的事件
  2719. if (row) {
  2720. this.proofingCurrentRow = JSON.parse(JSON.stringify(row))
  2721. //刷新当前页表
  2722. this.refreshCurrentTabTable()
  2723. }
  2724. },
  2725. // 每页数
  2726. sizeChangeHandle (val) {
  2727. this.pageSize = val
  2728. this.pageIndex = 1
  2729. this.getDataList()
  2730. },
  2731. // 当前页
  2732. currentChangeHandle (val) {
  2733. this.pageIndex = val
  2734. this.getDataList()
  2735. },
  2736. // 多选
  2737. selectionChangeHandle (val) {
  2738. this.dataListSelections = val
  2739. },
  2740. addModal () {
  2741. //控制台打印打印this.generateNextPartNo()
  2742. this.modalData = {
  2743. flag: '1',
  2744. bu: this.userBuList[0].buNo,
  2745. site: this.$store.state.user.site,
  2746. customerNo:'',
  2747. customerDesc:'',
  2748. projectCategory:'',
  2749. testPartNo:'',
  2750. partDesc:'',
  2751. projectId: '',
  2752. projectDesc:'',
  2753. projectCloseDate:'',
  2754. needDate:'',
  2755. cProjectRegion: '',
  2756. projectManager:'',
  2757. ProjectOwner:'',
  2758. ProjectOwnerName:'',
  2759. projectManagerName:'',
  2760. engineer: '',
  2761. engineerName: '',
  2762. cQualityEngineer1:'',
  2763. cQualityEngineer1Name:'',
  2764. cQualityEngineer2:'',
  2765. cQualityEngineer2Name:'',
  2766. cQualityEngineer3:'',
  2767. cQualityEngineer3Name:'',
  2768. cManufactureEngineer: '',
  2769. cManufactureEngineerName: '',
  2770. projectCreationDate:new Date(),
  2771. createDate: '',
  2772. // active: 'Y',
  2773. createBy: this.$store.state.user.name,
  2774. updateBy: this.$store.state.user.name,
  2775. }
  2776. this.generateNextPartNo().then(testPartNo => {
  2777. this.modalData.testPartNo = testPartNo; // 在异步操作完成后再赋值
  2778. })
  2779. console.log('testPartNo',this.modalData.testPartNo)
  2780. this.modalDisableFlag = false
  2781. this.modalFlag = true
  2782. },
  2783. generateNextPartNo() {
  2784. return new Promise((resolve, reject) => {
  2785. getTestPartNo().then(({ data }) => {
  2786. const stringData = String(data); // 显式转换为字符串
  2787. console.log('stringData',stringData)
  2788. if (stringData === 'null' || stringData === 'undefined' || stringData === '' || stringData === '0') {
  2789. resolve('P00001');
  2790. } else {
  2791. const lastPartNo = parseInt(stringData.substring(1));
  2792. const nextPartNo = lastPartNo + 1;
  2793. let testPartNo;
  2794. if (nextPartNo < 10) {
  2795. testPartNo = 'P0000' + nextPartNo;
  2796. } else if (nextPartNo < 100) {
  2797. testPartNo = 'P000' + nextPartNo;
  2798. } else if (nextPartNo < 1000) {
  2799. testPartNo = 'P00' + nextPartNo;
  2800. } else if (nextPartNo < 10000) {
  2801. testPartNo = 'P0' + nextPartNo;
  2802. } else {
  2803. testPartNo = 'P' + nextPartNo;
  2804. }
  2805. resolve(testPartNo);
  2806. }
  2807. }).catch(error => {
  2808. reject('Failed to fetch testPartNo: ' + error);
  2809. });
  2810. });
  2811. },
  2812. changeFormalPartNo (row) {
  2813. this.modalData = {
  2814. flag: '2',
  2815. site: row.site,
  2816. bu: row.site + '_' + row.buNo,
  2817. customerNo: row.customerNo,
  2818. customerDesc: row.customerDesc,
  2819. projectCategory: row.projectCategory,
  2820. testPartNo: row.testPartNo,
  2821. partDesc: row.partDesc,
  2822. projectId: row.projectId,
  2823. projectDesc: row.projectDesc,
  2824. projectCloseDate: row.projectCloseDate,
  2825. needDate: row.needDate,
  2826. cProjectRegion: row.cProjectRegion,
  2827. projectManager: row.projectManager,
  2828. projectManagerName: row.projectManagerName,
  2829. projectOwner: row.projectOwner,
  2830. projectOwnerName: row.projectOwnerName,
  2831. engineer: row.engineer,
  2832. engineerName: row.engineerName,
  2833. cQualityEngineer1: row.cQualityEngineer1,
  2834. cQualityEngineer1Name: row.cQualityEngineer1Name,
  2835. cQualityEngineer2: row.cQualityEngineer2,
  2836. cQualityEngineer2Name: row.cQualityEngineer2Name,
  2837. projectCreationDate: row.projectCreationDate,
  2838. cQualityEngineer3: row.cQualityEngineer3,
  2839. cQualityEngineer3Name: row.cQualityEngineer3Name,
  2840. cManufactureEngineer: row.cManufactureEngineer,
  2841. cManufactureEngineerName: row.cManufactureEngineerName,
  2842. finalPartNo: row.finalPartNo,
  2843. finalPartDesc: row.finalPartDesc,
  2844. // active: row.active,
  2845. createBy: this.$store.state.user.name,
  2846. updateBy: this.$store.state.user.name,
  2847. }
  2848. this.formalPartNoFlag = true
  2849. },
  2850. addProofRecord (row) {
  2851. let inData1={
  2852. site: row.site,
  2853. buNo: row.buNo,
  2854. projectId: row.projectId,
  2855. projectDesc: row.projectDesc,
  2856. customerNo: row.customerNo,
  2857. customerDesc: row.customerDesc,
  2858. bu: row.site + '_' + row.buNo,
  2859. testPartNo: row.testPartNo,
  2860. partDesc: row.partDesc,
  2861. projectCategory: row.projectCategory,
  2862. cProjectTypeDb: row.projectCategory,
  2863. proofingNo: '',
  2864. rrequiredDeliveryDate: '',
  2865. createDate: new Date(),
  2866. createBy: this.$store.state.user.name,
  2867. }
  2868. this.$refs.proofRecord.init1(inData1)
  2869. },
  2870. updateModal (row) {
  2871. this.modalData = {
  2872. flag: '2',
  2873. site: row.site,
  2874. bu: row.site + '_' + row.buNo,
  2875. customerNo: row.customerNo,
  2876. customerDesc: row.customerDesc,
  2877. projectCategory: row.projectCategory,
  2878. testPartNo: row.testPartNo,
  2879. partDesc: row.partDesc,
  2880. projectId: row.projectId,
  2881. projectDesc: row.projectDesc,
  2882. priority: row.priority,
  2883. projectCloseDate: row.projectCloseDate,
  2884. needDate: row.needDate,
  2885. cProjectRegion: row.cProjectRegion,
  2886. projectManager: row.projectManager,
  2887. projectManagerName: row.projectManager,
  2888. projectOwner: row.projectOwner,
  2889. projectOwnerName: row.projectOwner,
  2890. engineer: row.engineer,
  2891. engineerName: row.engineer,
  2892. cQualityEngineer1: row.cQualityEngineer1,
  2893. cQualityEngineer1Name: row.cQualityEngineer1,
  2894. cQualityEngineer2: row.cQualityEngineer2,
  2895. cQualityEngineer2Name: row.cQualityEngineer2,
  2896. cQualityEngineer3: row.cQualityEngineer3,
  2897. cQualityEngineer3Name: row.cQualityEngineer3,
  2898. cManufactureEngineer: row.cManufactureEngineer,
  2899. cManufactureEngineerName: row.cManufactureEngineer,
  2900. projectCreationDate: row.projectCreationDate,
  2901. // active: row.active,
  2902. createBy: this.$store.state.user.name,
  2903. updateBy: this.$store.state.user.name,
  2904. }
  2905. this.modalDisableFlag = true
  2906. this.modalFlag = true
  2907. },
  2908. // 删除
  2909. eamProjectInfoDelete (row) {
  2910. this.$confirm(`是否删除这个项目信息?`, '提示', {
  2911. confirmButtonText: '确定',
  2912. cancelButtonText: '取消',
  2913. type: 'warning'
  2914. }).then(() => {
  2915. eamProjectInfoDelete(row).then(({data}) => {
  2916. if (data && data.code === '0') {
  2917. this.getDataList()
  2918. this.$message({
  2919. message: '操作成功',
  2920. type: 'success',
  2921. duration: 1500,
  2922. onClose: () => {}
  2923. })
  2924. } else {
  2925. this.$alert(data.msg, '错误', {
  2926. confirmButtonText: '确定'
  2927. })
  2928. }
  2929. })
  2930. }).catch(() => {
  2931. })
  2932. },
  2933. getRowProjectInfo(){
  2934. let inData={
  2935. site: this.proofingCurrentRow.site,
  2936. projectId: this.proofingCurrentRow.projectId,
  2937. testPartNo: this.proofingCurrentRow.testPartNo,
  2938. // username:this.$store.state.user.name,
  2939. page: 1,
  2940. limit: 1000
  2941. }
  2942. this.$refs.proofRecord.init(inData)
  2943. },
  2944. saveData () {
  2945. this.modalData.projectManager = this.modalData.projectManagerName
  2946. this.modalData.projectOwner = this.modalData.projectOwnerName
  2947. this.modalData.cQualityEngineer1 = this.modalData.cQualityEngineer1Name
  2948. this.modalData.cQualityEngineer2 = this.modalData.cQualityEngineer2Name
  2949. this.modalData.cQualityEngineer3 = this.modalData.cQualityEngineer3Name
  2950. this.modalData.cManufactureEngineer = this.modalData.cManufactureEngineerName
  2951. this.modalData.engineer = this.modalData.engineerName
  2952. this.modalData.oriProjectId = this.modalData.projectId
  2953. this.modalData.finalCustomerId = this.modalData.customerNo
  2954. if (this.modalData.projectId === '' || this.modalData.projectId == null) {
  2955. this.$message.warning('请输入项目编码!')
  2956. return
  2957. }
  2958. if (this.modalData.projectDesc === '' || this.modalData.projectDesc == null) {
  2959. this.$message.warning('请输入项目名称!')
  2960. return
  2961. }
  2962. if (this.modalData.customerNo === '' || this.modalData.customerNo == null) {
  2963. this.$message.warning('请输入客户编码!')
  2964. return
  2965. }
  2966. if (this.modalData.customerDesc === '' || this.modalData.customerDesc == null) {
  2967. this.$message.warning('请输入客户名称!')
  2968. return
  2969. }
  2970. //请选择立项日期
  2971. if (this.searchData.projectCreationDate === '' || this.searchData.projectCreationDate == null) {
  2972. this.$message.warning('请选择立项日期!')
  2973. return
  2974. }
  2975. if (this.modalData.needDate === '' || this.modalData.needDate == null) {
  2976. this.$message.warning('请选择预计完成日期!')
  2977. return
  2978. }
  2979. if (this.modalData.projectCategory === '' || this.modalData.projectCategory == null) {
  2980. this.$message.warning('请选择项目分类!')
  2981. return
  2982. }
  2983. if (this.modalData.testPartNo === '' || this.modalData.testPartNo == null) {
  2984. this.$message.warning('请输入项目料号!')
  2985. return
  2986. }
  2987. if (this.modalData.partDesc === '' || this.modalData.partDesc == null) {
  2988. this.$message.warning('请输入料号描述!')
  2989. return
  2990. }
  2991. if (this.modalData.bu === '' || this.modalData.bu == null) {
  2992. this.$message.warning('请选择BU!')
  2993. return
  2994. }
  2995. if (this.modalData.projectManager === '' || this.modalData.projectManager == null) {
  2996. this.$message.warning('请输入PM/Sales!')
  2997. return
  2998. }if (this.modalData.projectOwner === '' || this.modalData.projectOwner == null) {
  2999. this.$message.warning('请输入PjM!')
  3000. return
  3001. }
  3002. if (this.modalData.engineer === '' || this.modalData.engineer == null) {
  3003. this.$message.warning('请输入Engineer!')
  3004. return
  3005. }
  3006. if (this.modalData.cQualityEngineer1 === '' || this.modalData.cQualityEngineer1 == null) {
  3007. this.$message.warning('请输入IPQC-Lam/Pri/Etch/Slit!')
  3008. return
  3009. }
  3010. if (this.modalData.cQualityEngineer2 === '' || this.modalData.cQualityEngineer2 == null) {
  3011. this.$message.warning('请输入IPQC-Converting!')
  3012. return
  3013. }
  3014. if (this.modalData.cQualityEngineer3 === '' || this.modalData.cQualityEngineer3 == null) {
  3015. this.$message.warning('请输入FQC!')
  3016. return
  3017. }
  3018. if (this.modalData.cManufactureEngineer === '' || this.modalData.cManufactureEngineer == null) {
  3019. this.$message.warning('请输入MFG!')
  3020. return
  3021. }
  3022. // if (this.modalData.active === '' || this.modalData.active == null) {
  3023. // this.$message.warning('选择是否在用!')
  3024. // return
  3025. // }
  3026. if (this.modalData.flag === '1') {
  3027. this.newProjectDocument(this.modalData)
  3028. eamProjectInfoSave(this.modalData).then(({data}) => {
  3029. if (data && data.code === '0') {
  3030. this.getDataList()
  3031. this.modalFlag=false
  3032. this.$message({
  3033. message: '操作成功',
  3034. type: 'success',
  3035. duration: 1500,
  3036. onClose: () => {},
  3037. })
  3038. } else {
  3039. this.$alert(data.msg, '错误', {
  3040. confirmButtonText: '确定'
  3041. })
  3042. }
  3043. })
  3044. } else {
  3045. this.editProjectDocument(this.modalData)
  3046. eamProjectInfoEdit(this.modalData).then(({data}) => {
  3047. if (data && data.code === '0') {
  3048. this.getDataList()
  3049. this.modalFlag=false
  3050. this.$message({
  3051. message: '操作成功',
  3052. type: 'success',
  3053. duration: 1500,
  3054. onClose: () => {}
  3055. })
  3056. } else {
  3057. this.$alert(data.msg, '错误', {
  3058. confirmButtonText: '确定'
  3059. })
  3060. }
  3061. })
  3062. }
  3063. },
  3064. editProjectDocument(modalData) {
  3065. modalData.buNo = modalData.bu.split('_')[1]
  3066. modalData.proofingNo = '*'
  3067. editProjectDocument(modalData).then(({data}) => {
  3068. //区分请求成功和失败的状况
  3069. if (data && data.code === 0) {
  3070. this.$message({
  3071. message: '编辑成功',
  3072. type: 'success'
  3073. })
  3074. //刷新表格
  3075. this.refreshCurrentTabTable()
  3076. }
  3077. })
  3078. },
  3079. newProjectDocument(modalData) {
  3080. modalData.buNo = modalData.bu.split('_')[1]
  3081. modalData.proofingNo = '*'
  3082. projectDocumentSave(modalData).then(({data}) => {
  3083. //区分请求成功和失败的状况
  3084. if (data && data.code === 0) {
  3085. this.$message({
  3086. message: '新增成功',
  3087. type: 'success'
  3088. })
  3089. this.documentListVisible = false
  3090. //刷新表格
  3091. this.refreshCurrentTabTable()
  3092. }
  3093. })
  3094. },
  3095. searchBusinessInfoList1 () {
  3096. searchBusinessInfo1(this.searchBusinessData1).then(({data}) => {
  3097. if (data && data.code === 0){
  3098. this.businessDataList1 = data.rows;
  3099. }
  3100. })
  3101. },
  3102. searchBusinessInfoList () {
  3103. searchBusinessInfo(this.searchBusinessData).then(({data}) => {
  3104. if (data && data.code === 0){
  3105. this.businessDataList = data.rows;
  3106. }
  3107. })
  3108. },
  3109. searchBusinessInfoList2 () {
  3110. searchBusinessInfo2(this.searchBusinessData2).then(({data}) => {
  3111. if (data && data.code === 0){
  3112. this.businessDataList2 = data.rows;
  3113. }
  3114. })
  3115. },
  3116. searchBusinessInfoList3 () {
  3117. searchBusinessInfo3(this.searchBusinessData3).then(({data}) => {
  3118. if (data && data.code === 0){
  3119. this.businessDataList3 = data.rows;
  3120. }
  3121. })
  3122. },
  3123. searchBusinessInfoList4 () {
  3124. searchBusinessInfo4(this.searchBusinessData4).then(({data}) => {
  3125. if (data && data.code === 0){
  3126. this.businessDataList4 = data.rows;
  3127. }
  3128. })
  3129. },
  3130. searchBusinessInfoList5 () {
  3131. searchBusinessInfo5(this.searchBusinessData5).then(({data}) => {
  3132. if (data && data.code === 0){
  3133. this.businessDataList5 = data.rows;
  3134. }
  3135. })
  3136. },
  3137. searchBusinessInfoList6 () {
  3138. searchBusinessInfo6(this.searchBusinessData6).then(({data}) => {
  3139. if (data && data.code === 0){
  3140. this.businessDataList6 = data.rows;
  3141. }
  3142. })
  3143. },
  3144. saveFormalPartNo (){
  3145. saveFormalPartNo(this.modalData).then(({data}) => {
  3146. if (data && data.code === '0') {
  3147. this.getDataList()
  3148. this.formalPartNoFlag = false
  3149. this.$message({
  3150. message: '操作成功',
  3151. type: 'success',
  3152. duration: 1500,
  3153. onClose: () => {
  3154. }
  3155. })
  3156. } else {
  3157. this.$alert(data.msg, '错误', {
  3158. confirmButtonText: '确定'
  3159. })
  3160. }
  3161. })
  3162. },
  3163. // 打开项目经理
  3164. openProjectManagerInfoDialog () {
  3165. //请求
  3166. this.searchBusinessInfoList();
  3167. },
  3168. // 打开项目负责人
  3169. openProjectOwnerInfoDialog () {
  3170. //请求
  3171. this.searchBusinessInfoList1();
  3172. },
  3173. // 打开工程师
  3174. openEngineerInfoDialog () {
  3175. //请求
  3176. this.searchBusinessInfoList2();
  3177. },
  3178. // 打开IPQC
  3179. openIPQCInfoDialog () {
  3180. //请求
  3181. this.searchBusinessInfoList3();
  3182. },
  3183. // 打开FQC
  3184. openFQCInfoDialog () {
  3185. //请求
  3186. this.searchBusinessInfoList4();
  3187. },
  3188. // 打开MFG
  3189. openMFGInfoDialog () {
  3190. //请求
  3191. this.searchBusinessInfoList5();
  3192. },
  3193. openEngineer6InfoDialog () {
  3194. //请求
  3195. this.searchBusinessInfoList6();
  3196. },
  3197. // 关闭
  3198. closeProjectManagerInfoDialog () {
  3199. this.businessDataList = []
  3200. this.projectManagerFlag = false
  3201. },
  3202. closeProjectOwnerInfoDialog () {
  3203. this.businessDataList1 = []
  3204. this.projectOwnerFlag = false
  3205. },
  3206. //关闭
  3207. closeEngineerInfoDialog () {
  3208. this.businessDataList2 = []
  3209. this.engineerFlag = false
  3210. },
  3211. closeEngineer6InfoDialog () {
  3212. this.businessDataList6 = []
  3213. this.engineer6Flag = false
  3214. },
  3215. //关闭
  3216. closeIPQCInfoDialog () {
  3217. this.businessDataList3 = []
  3218. this.IPQCFlag = false
  3219. },
  3220. //关闭
  3221. closeFQCInfoDialog () {
  3222. this.businessDataList4 = []
  3223. this.FQCFlag = false
  3224. },
  3225. //关闭
  3226. closeMFGInfoDialog () {
  3227. this.businessDataList5 = []
  3228. this.MFGlag = false
  3229. },
  3230. projectManagerRowDblclick (row) {
  3231. this.modalData.projectManager = row.username
  3232. this.modalData.projectManagerName = row.userDisplay
  3233. this.projectManagerFlag = false
  3234. },
  3235. projectOwnerRowDblclick (row) {
  3236. this.modalData.projectOwner = row.username
  3237. this.modalData.projectOwnerName = row.userDisplay
  3238. this.projectOwnerFlag = false
  3239. },
  3240. engineerRowDblclick (row) {
  3241. this.modalData.cQualityEngineer1 = row.username
  3242. this.modalData.cQualityEngineer1Name = row.userDisplay
  3243. this.engineerFlag = false
  3244. },
  3245. engineer6RowDblclick (row) {
  3246. this.modalData.engineer = row.username
  3247. this.modalData.engineerName = row.userDisplay
  3248. this.engineer6Flag = false
  3249. },
  3250. IPQCRowDblclick (row) {
  3251. this.modalData.cQualityEngineer2 = row.username
  3252. this.modalData.cQualityEngineer2Name = row.userDisplay
  3253. this.IPQCFlag = false
  3254. },
  3255. FQCRowDblclick (row) {
  3256. this.modalData.cQualityEngineer3 = row.username
  3257. this.modalData.cQualityEngineer3Name = row.userDisplay
  3258. this.FQCFlag = false
  3259. },
  3260. MFGRowDblclick (row) {
  3261. this.modalData.cManufactureEngineer = row.username
  3262. this.modalData.cManufactureEngineerName = row.userDisplay
  3263. this.MFGlag = false
  3264. },
  3265. selectionBusiness (val) {
  3266. this.businessSelections = val
  3267. this.$refs.selectDiv.init(this.businessSelections)
  3268. },
  3269. saveSelectionInfo () {
  3270. let str = ''
  3271. let strName = ''
  3272. this.businessSelections.forEach((item, index) => {
  3273. if (index === this.businessSelections.length - 1) {
  3274. str += item.username
  3275. strName += item.userDisplay
  3276. } else {
  3277. str += item.username + ','
  3278. strName += item.userDisplay + ','
  3279. }
  3280. })
  3281. this.modalData.projectManager = str
  3282. this.modalData.projectManagerName = strName
  3283. this.projectManagerFlag = false
  3284. },
  3285. saveSelectionInfo1 () {
  3286. let str = ''
  3287. let strName = ''
  3288. this.businessSelections.forEach((item, index) => {
  3289. if (index === this.businessSelections.length - 1) {
  3290. str += item.username
  3291. strName += item.userDisplay
  3292. } else {
  3293. str += item.username + ','
  3294. strName += item.userDisplay + ','
  3295. }
  3296. })
  3297. this.modalData.projectOwner = str
  3298. this.modalData.projectOwnerName = strName
  3299. this.projectOwnerFlag = false
  3300. },
  3301. saveSelectionInfo2 () {
  3302. let str = ''
  3303. let strName = ''
  3304. this.businessSelections.forEach((item, index) => {
  3305. if (index === this.businessSelections.length - 1) {
  3306. str += item.username
  3307. strName += item.userDisplay
  3308. } else {
  3309. str += item.username + ','
  3310. strName += item.userDisplay + ','
  3311. }
  3312. })
  3313. this.modalData.cQualityEngineer1 = str
  3314. this.modalData.cQualityEngineer1Name = strName
  3315. this.engineerFlag = false
  3316. },
  3317. saveSelectionInfo3 () {
  3318. let str = ''
  3319. let strName = ''
  3320. this.businessSelections.forEach((item, index) => {
  3321. if (index === this.businessSelections.length - 1) {
  3322. str += item.username
  3323. strName += item.userDisplay
  3324. } else {
  3325. str += item.username + ','
  3326. strName += item.userDisplay + ','
  3327. }
  3328. })
  3329. this.modalData.cQualityEngineer2 = str
  3330. this.modalData.cQualityEngineer2Name = strName
  3331. this.IPQCFlag = false
  3332. },
  3333. saveSelectionInfo4 () {
  3334. let str = ''
  3335. let strName = ''
  3336. this.businessSelections.forEach((item, index) => {
  3337. if (index === this.businessSelections.length - 1) {
  3338. str += item.username
  3339. strName += item.userDisplay
  3340. } else {
  3341. str += item.username + ','
  3342. strName += item.userDisplay + ','
  3343. }
  3344. })
  3345. this.modalData.cQualityEngineer3 = str
  3346. this.modalData.cQualityEngineer3Name = strName
  3347. this.FQCFlag = false
  3348. },
  3349. saveSelectionInfo5 () {
  3350. let str = ''
  3351. let strName = ''
  3352. this.businessSelections.forEach((item, index) => {
  3353. if (index === this.businessSelections.length - 1) {
  3354. str += item.username
  3355. strName += item.userDisplay
  3356. } else {
  3357. str += item.username + ','
  3358. strName += item.userDisplay + ','
  3359. }
  3360. })
  3361. this.modalData.cManufactureEngineer = str
  3362. this.modalData.cManufactureEngineerName = strName
  3363. this.MFGlag = false
  3364. },
  3365. saveSelectionInfo6 () {
  3366. let str = ''
  3367. let strName = ''
  3368. this.businessSelections.forEach((item, index) => {
  3369. if (index === this.businessSelections.length - 1) {
  3370. str += item.username
  3371. strName += item.userDisplay
  3372. } else {
  3373. str += item.username + ','
  3374. strName += item.userDisplay + ','
  3375. }
  3376. }
  3377. )
  3378. this.modalData.engineer = str
  3379. this.modalData.engineerName = strName
  3380. this.engineer6Flag = false
  3381. },
  3382. closeClear () {
  3383. this.modalData.bu = ''
  3384. this.modalData.projectId = ''
  3385. this.modalData.projectDesc = ''
  3386. this.modalData.projectCloseDate = ''
  3387. this.modalData.needDate = ''
  3388. this.modalData.customerNo = ''
  3389. this.modalData.customerDesc = ''
  3390. this.modalData.projectCategory = ''
  3391. this.modalData.testPartNo = ''
  3392. this.modalData.partDesc = ''
  3393. this.modalData.projectManager = ''
  3394. this.modalData.projectManagerName = ''
  3395. this.modalData.engineer = ''
  3396. this.modalData.engineerName = ''
  3397. this.modalData.cQualityEngineer1 = ''
  3398. this.modalData.cQualityEngineer1Name = ''
  3399. this.modalData.cQualityEngineer2 = ''
  3400. this.modalData.cQualityEngineer2Name = ''
  3401. this.modalData.projectCreationDate = new Date()
  3402. },
  3403. projectOtherDocumentClickRow (row) {
  3404. row.id = row.documentDefinitionListId
  3405. this.otherDocumentCurrentRow = JSON.parse(JSON.stringify(row))
  3406. console.log('row',row)
  3407. console.log('this.otherDocumentCurrentRow',this.otherDocumentCurrentRow)
  3408. },
  3409. changeCurrentRow1 (row, oldRow) {
  3410. row.id = row.documentDefinitionListId
  3411. // 判断是否是获取焦点的事件
  3412. if (row) {
  3413. this.otherDocumentCurrentRow.bu = this.otherDocumentCurrentRow.site + "-" + this.otherDocumentCurrentRow.buNo
  3414. this.otherDocumentCurrentRow = JSON.parse(JSON.stringify(row))
  3415. console.log('row1',row)
  3416. console.log('this.otherDocumentCurrentRow1',this.otherDocumentCurrentRow)
  3417. //刷新当前页表
  3418. this.refreshCurrentTabTable()
  3419. }
  3420. },
  3421. projectAllDocumentClickRow (row) {
  3422. this.projectAllDocumentCurrentRow = JSON.parse(JSON.stringify(row))
  3423. },
  3424. /**
  3425. * 上传文件
  3426. */
  3427. uploadFile () {
  3428. this.isEditable = false;
  3429. this.fileList = []
  3430. this.otherDocumentCurrentRow.proofingId= '*'
  3431. this.uploadDialog = true
  3432. //打开组件 去做新增业务
  3433. // this.$nextTick(() => {
  3434. // this.$refs.partUploadFile.init(currentData);
  3435. // })
  3436. },
  3437. uploadOtherDocument () {
  3438. this.isEditable = true;
  3439. this.fileList = []
  3440. this.otherDocumentCurrentRow = {
  3441. proofingId: '*',
  3442. documentTypeId: '', // 清空文档类型ID
  3443. id: '-1'
  3444. };
  3445. this.uploadDialog = true
  3446. //打开组件 去做新增业务
  3447. // this.$nextTick(() => {
  3448. // this.$refs.partUploadFile.init(currentData);
  3449. // })
  3450. },
  3451. massProductionDocumentDelete(row) {
  3452. let tempData = {
  3453. site: row.site,
  3454. username: this.$store.state.user.name,
  3455. buNo: row.buNo,
  3456. proofingNo: row.proofingNo,
  3457. projectId: row.projectId,
  3458. projectDesc: row.projectDesc,
  3459. customerId: row.customerNo,
  3460. customerDesc: row.customerDesc,
  3461. testPartNo: row.testPartNo,
  3462. partDesc: row.partDesc,
  3463. id: row.id,
  3464. fileName: row.fileName,
  3465. uploadedFlag: row.uploadedFlag,
  3466. cAdditionalInfo: row.cAdditionalInfo,
  3467. createBy: row.createdBy,
  3468. documentDefinitionListId: row.documentDefinitionListId,
  3469. documentType: row.documentType,
  3470. documentId: row.documentId,
  3471. }
  3472. if (tempData.createBy !== tempData.username) {
  3473. this.$message({
  3474. message: '只能删除自己创建的打样记录',
  3475. type: 'warning'
  3476. })
  3477. }else {
  3478. this.$confirm('是否删除该转量产阶段文档的文件?', '提示', {
  3479. confirmButtonText: '确定',
  3480. cancelButtonText: '取消',
  3481. type: 'warning'
  3482. }).then(() => {
  3483. deleteProofDocument(tempData).then(({data}) => {
  3484. if (data && data.code === 0) {
  3485. this.$message({
  3486. message: '删除成功',
  3487. type: 'success'
  3488. })
  3489. //刷新表格
  3490. this.getProjectOtherDocument()
  3491. this.getProofDocument()
  3492. }
  3493. // 否则提示后端返回的错误信息
  3494. else {
  3495. this.$message.warning(data.msg)
  3496. }
  3497. })
  3498. }).catch(() => {
  3499. this.$message({
  3500. type: 'info',
  3501. message: '已取消删除'
  3502. });
  3503. });
  3504. }
  3505. },
  3506. getProjectOtherDocument () {
  3507. let tempData = {
  3508. site: this.$store.state.user.site,
  3509. username: this.$store.state.user.name,
  3510. buNo: this.proofingCurrentRow.buNo,
  3511. proofingId: '*',
  3512. projectId: this.proofingCurrentRow.projectId,
  3513. projectDesc: this.proofingCurrentRow.projectDesc,
  3514. testPartNo: this.proofingCurrentRow.testPartNo,
  3515. partDesc: this.proofingCurrentRow.partDesc,
  3516. customerId: this.proofingCurrentRow.customerNo,
  3517. customerDesc: this.proofingCurrentRow.customerDesc,
  3518. page: 1,
  3519. limit: 1000
  3520. }
  3521. getProjectOtherDocument(tempData).then(({data}) => {
  3522. if (data && data.code === 0) {
  3523. this.projectOtherDocumentList = data.page.list
  3524. for (let i = 0; i < this.projectOtherDocumentList.length; i++) {
  3525. this.projectOtherDocumentList[i].buNo = this.proofingCurrentRow.buNo
  3526. }
  3527. } else {
  3528. this.projectOtherDocumentList = []
  3529. }
  3530. })
  3531. },
  3532. getColumnValue(row, column) {
  3533. // 根据列的配置信息决定显示的值
  3534. if (column.columnProp === 'documentType') {
  3535. return this.getCombinedDocumentType(row);
  3536. }
  3537. else if (column.columnProp === 'documentDesc') {
  3538. return row.documentDesc; // 或者根据实际需求处理其他字段的显示
  3539. }
  3540. else {
  3541. return row[column.columnProp]; // 默认返回对应列的值
  3542. }
  3543. },
  3544. getCombinedDocumentType(row) {
  3545. // 根据您的需求,组合或拼接需要显示的字段
  3546. if (row.documentType === null || row.documentType === undefined) {
  3547. return row.documentDesc
  3548. }else {
  3549. return row.documentType
  3550. }
  3551. },
  3552. // 动态列开始 获取 用户保存的 格式列
  3553. async getTableUserColumn(tableId, columnId) {
  3554. let queryTableUser = {
  3555. userId: this.$store.state.user.name,
  3556. functionId: this.$route.meta.menuId,
  3557. tableId: tableId,
  3558. status: true,
  3559. languageCode: this.$i18n.locale
  3560. }
  3561. await getTableUserListLanguage(queryTableUser).then(({data}) => {
  3562. if (data.rows.length > 0) {
  3563. //this.columnList1 = []
  3564. switch (columnId) {
  3565. case 1:
  3566. this.columnList = data.rows
  3567. break;
  3568. // case 2:
  3569. // this.detailColumnList = data.rows
  3570. // break;
  3571. // case 3:
  3572. // this.columnList2 = data.rows
  3573. // break;
  3574. // case 4:
  3575. // this.columnList3 = data.rows
  3576. // break;
  3577. }
  3578. } else {
  3579. this.getColumnList(tableId, columnId)
  3580. }
  3581. })
  3582. },
  3583. projectDocumentList () {
  3584. this.modalData = {
  3585. site: this.proofingCurrentRow.site,
  3586. buNo: this.proofingCurrentRow.buNo,
  3587. projectId: this.proofingCurrentRow.projectId,
  3588. projectDesc: this.proofingCurrentRow.projectDesc,
  3589. customerNo: this.proofingCurrentRow.customerNo,
  3590. customerDesc: this.proofingCurrentRow.customerDesc,
  3591. bu: this.proofingCurrentRow.site + '_' + this.proofingCurrentRow.buNo,
  3592. testPartNo: this.proofingCurrentRow.testPartNo,
  3593. partDesc: this.proofingCurrentRow.partDesc,
  3594. projectCategory: this.proofingCurrentRow.projectCategory,
  3595. cProjectTypeDb: this.proofingCurrentRow.projectCategory,
  3596. proofingNo: '*',
  3597. rrequiredDeliveryDate: '',
  3598. createDate: new Date(),
  3599. createBy: this.$store.state.user.name,
  3600. limit: 1000,
  3601. page: 1
  3602. }
  3603. this.getProjectOtherDocument()
  3604. // 遍历proofDocumentList
  3605. for (let i = 0; i < this.projectOtherDocumentList.length; i++) {
  3606. if (this.projectOtherDocumentList[i].documentTypeId !== 'N/A') {
  3607. this.proofDocumentListDefinition.push(this.projectOtherDocumentList[i])
  3608. }
  3609. }
  3610. this.projectDocumentListVisible = true
  3611. },
  3612. projectDocumentListVisibleFalse() {
  3613. this.projectDocumentListVisible = false
  3614. this.proofDocumentListDefinition = []
  3615. },
  3616. deleteProjectDocumentType(row) {
  3617. this.$confirm('是否删除该文档清单?', '提示', {
  3618. confirmButtonText: '确定',
  3619. cancelButtonText: '取消',
  3620. type: 'warning'
  3621. }).then(() => {
  3622. deleteDocumentType(row).then(({data}) => {
  3623. if (data && data.code === 0) {
  3624. this.$message({
  3625. message: '删除成功',
  3626. type: 'success',
  3627. })
  3628. this.getProjectOtherDocument()
  3629. this.getProofDocument()
  3630. } else {
  3631. this.$message.warning(data.msg)
  3632. }
  3633. })
  3634. }).catch(() => {
  3635. this.$message({
  3636. type: 'info',
  3637. message: '已取消删除'
  3638. });
  3639. });
  3640. },
  3641. closeAddProjectDocumentTypeFlag() {
  3642. this.addProjectDocumentTypeFlag = false
  3643. this.searchProjectDocumentTypeData = {
  3644. site: this.$store.state.user.site,
  3645. projectId: '',
  3646. proofingNo: '*',
  3647. documentTypeId: '',
  3648. documentType: '',
  3649. responsibleDepartment: '',
  3650. estimatedCompletionDays: '',
  3651. page: 1,
  3652. limit: 1000
  3653. }
  3654. this.extraProjectDocumentList = []
  3655. },
  3656. filteredProjectAllDocumentList() {
  3657. this.projectAllDocumentList.map(item => {
  3658. item.id = item.documentDefinitionListId
  3659. })
  3660. return this.projectAllDocumentList.filter(item => item.uploadedFlag !== 'N')
  3661. },
  3662. searchProjectDocumentTypeList() {
  3663. this.searchProjectDocumentTypeData.proofingNo = '*'
  3664. this.searchProjectDocumentTypeData.projectId = this.modalData.projectId
  3665. getExtraDocumentList(this.searchProjectDocumentTypeData).then(({data}) => {
  3666. if (data && data.code === 0) {
  3667. this.extraProjectDocumentList = data.page.list
  3668. } else {
  3669. this.extraProjectDocumentList = []
  3670. }
  3671. })
  3672. },
  3673. selectionProjectDocument(val) {
  3674. this.projectDocumentSelection = val
  3675. },
  3676. saveSelectionProjectDocumentType() {
  3677. if (this.projectDocumentSelection.length === 0) {
  3678. this.$message({
  3679. message: '请选择文档类型',
  3680. type: 'error'
  3681. })
  3682. this.extraProjectDocumentList = []
  3683. return
  3684. }
  3685. this.projectDocumentSelection.forEach((item) => {
  3686. const inData = {
  3687. site: this.$store.state.user.site,
  3688. proofingNo: '*',
  3689. projectId: this.modalData.projectId,
  3690. documentTypeId: item.documentTypeId,
  3691. documentType: item.documentType,
  3692. responsibleDepartment: item.responsibleDepartment,
  3693. estimatedCompletionDays: item.estimatedCompletionDays,
  3694. createBy: this.$store.state.user.name,
  3695. }
  3696. proofingDocumentNEW(inData).then(({data}) => {
  3697. //区分请求成功和失败的状况
  3698. if (data && data.code === 0) {
  3699. this.$message({
  3700. message: '新增成功',
  3701. type: 'success'
  3702. })
  3703. this.addProjectDocumentTypeFlag = false
  3704. //刷新表格
  3705. this.getProjectOtherDocument()
  3706. this.refreshCurrentTabTable()
  3707. } else {
  3708. this.$message({
  3709. message: '新增失败',
  3710. type: 'error'
  3711. })
  3712. }
  3713. })
  3714. })
  3715. },
  3716. searchProjectAllDocumentList () {
  3717. let inData = {
  3718. site: this.$store.state.user.site,
  3719. username: this.$store.state.user.name,
  3720. buNo: this.proofingCurrentRow.buNo,
  3721. proofingNo: 'ALL',
  3722. projectId: this.proofingCurrentRow.projectId,
  3723. projectDesc: this.proofingCurrentRow.projectDesc,
  3724. testPartNo: this.proofingCurrentRow.testPartNo,
  3725. partDesc: this.proofingCurrentRow.partDesc,
  3726. customerId: this.proofingCurrentRow.customerNo,
  3727. customerDesc: this.proofingCurrentRow.customerDesc,
  3728. page: 1,
  3729. limit: 1000
  3730. }
  3731. searchProjectAllDocument(inData).then(({data}) => {
  3732. if (data && data.code === 0){
  3733. this.projectAllDocumentList = data.page.list;
  3734. }
  3735. })
  3736. },
  3737. projectProductionValidationDocument () {
  3738. this.modalData = {
  3739. site: this.proofingCurrentRow.site,
  3740. buNo: this.proofingCurrentRow.buNo,
  3741. projectId: this.proofingCurrentRow.projectId,
  3742. projectDesc: this.proofingCurrentRow.projectDesc,
  3743. customerNo: this.proofingCurrentRow.customerNo,
  3744. customerDesc: this.proofingCurrentRow.customerDesc,
  3745. bu: this.proofingCurrentRow.site + '_' + this.proofingCurrentRow.buNo,
  3746. testPartNo: this.proofingCurrentRow.testPartNo,
  3747. partDesc: this.proofingCurrentRow.partDesc,
  3748. projectCategory: this.proofingCurrentRow.projectCategory,
  3749. cProjectTypeDb: this.proofingCurrentRow.projectCategory,
  3750. proofingNo: 'ALL',
  3751. requiredDeliveryDate: '',
  3752. wantedConfirmDate: new Date(),
  3753. createDate: new Date(),
  3754. createBy: this.$store.state.user.name,
  3755. limit: 1000,
  3756. page: 1
  3757. }
  3758. this.projectProductionValidationDocumentVisible = true
  3759. this.projectAllDocumentList1 = this.filteredProjectAllDocumentList()
  3760. },
  3761. handleDocumentSelectionChange(val) {
  3762. // 文档选择页签中选中数据发生变化时的处理
  3763. this.selectedDocumentItems = val;
  3764. },
  3765. searchConfirmatorList() {
  3766. let inData = {
  3767. site: this.proofingCurrentRow.site,
  3768. username: this.$store.state.user.name,
  3769. buNo: this.proofingCurrentRow.buNo,
  3770. proofingNo: 'ALL',
  3771. projectId: this.proofingCurrentRow.projectId,
  3772. projectDesc: this.proofingCurrentRow.projectDesc,
  3773. testPartNo: this.proofingCurrentRow.testPartNo,
  3774. partDesc: this.proofingCurrentRow.partDesc,
  3775. customerId: this.proofingCurrentRow.customerNo,
  3776. customerDesc: this.proofingCurrentRow.customerDesc,
  3777. page: 1,
  3778. limit: 1000
  3779. }
  3780. searchConfirmatorList(inData).then(({data}) => {
  3781. if (data && data.code === 0){
  3782. this.projectAllDocumentConfirmatorList = data.page.list;
  3783. }
  3784. })
  3785. },
  3786. saveProductionValidationDocument() {
  3787. let confirmatorPromises = this.projectAllDocumentConfirmatorList.map(item => {
  3788. let inData = {
  3789. site: this.proofingCurrentRow.site,
  3790. orderRef1: this.proofingCurrentRow.projectId,
  3791. userid: item.userid,
  3792. itemNo: this.projectAllDocumentConfirmatorList.indexOf(item) + 1,
  3793. wantedConfirmDate: this.modalData.wantedConfirmDate,
  3794. createBy: this.$store.state.user.name
  3795. };
  3796. return saveProductionValidationDocumentConfirmator(inData);
  3797. });
  3798. Promise.all(confirmatorPromises)
  3799. .then(confirmatorResults => {
  3800. let allConfirmatorSuccess = confirmatorResults.every(result => result.data && result.data.code === 0);
  3801. if (allConfirmatorSuccess) {
  3802. let inData = {
  3803. site: this.proofingCurrentRow.site,
  3804. orderRef1: this.proofingCurrentRow.projectId,
  3805. selectedDocumentItems: this.selectedDocumentItems,
  3806. }
  3807. let saveDocumentPromises = this.handleDocumentSave(inData);
  3808. saveDocumentPromises
  3809. .then(() => {
  3810. this.$message({
  3811. message: '新增成功',
  3812. type: 'success'
  3813. });
  3814. this.projectProductionValidationDocumentVisible = false;
  3815. this.confirmationPrompted = false;
  3816. })
  3817. .catch(error => {
  3818. console.error('保存文档出错:', error);
  3819. this.$message({
  3820. message: '新增失败,请检查文档',
  3821. type: 'error'
  3822. });
  3823. });
  3824. } else {
  3825. this.$message({
  3826. message: '新增失败,请检查确认人员',
  3827. type: 'error'
  3828. });
  3829. }
  3830. })
  3831. .catch(error => {
  3832. console.error('保存确认人员出错:', error);
  3833. this.$message({
  3834. message: '新增失败,请检查确认人员',
  3835. type: 'error'
  3836. });
  3837. });
  3838. },
  3839. handleDocumentSave(inData) {
  3840. return new Promise((resolve, reject) => {
  3841. checkProductionValidationDocument(inData)
  3842. .then(({ data }) => {
  3843. if (data) {
  3844. // 存在生产确认记录,且尚未进行过确认提示
  3845. if (!this.confirmationPrompted) {
  3846. this.confirmationPrompted = true; // 标记已进行过确认提示
  3847. this.askForDeleteConfirmation()
  3848. .then(confirmDelete => {
  3849. if (confirmDelete === 'true') {
  3850. this.handleDeleteAndSave(inData)
  3851. .then(() => resolve())
  3852. .catch(() => reject());
  3853. } else {
  3854. resolve(); // 用户取消操作,直接结束
  3855. }
  3856. })
  3857. .catch(() => {
  3858. reject('对话框出错'); // 对话框出错处理
  3859. });
  3860. } else {
  3861. // 已经进行过一次确认提示,直接保存文档信息
  3862. this.handleDeleteAndSave(inData)
  3863. .then(() => resolve())
  3864. .catch(() => reject());
  3865. }
  3866. } else {
  3867. // 不存在生产确认记录,直接保存文档信息
  3868. this.handleDeleteAndSave(inData)
  3869. .then(() => resolve())
  3870. .catch(() => reject());
  3871. }
  3872. })
  3873. .catch(error => {
  3874. console.error('检查生产确认文档出错:', error);
  3875. reject('检查生产确认文档失败');
  3876. });
  3877. });
  3878. },
  3879. handleDeleteAndSave(inData) {
  3880. return new Promise((resolve, reject) => {
  3881. checkConfirmationRecord(inData)
  3882. .then(({ data }) => {
  3883. if (data) {
  3884. this.$confirm('该项目已经有人员进行了确认,是否删除重新推送确认信息?', '提示', {
  3885. confirmButtonText: '是',
  3886. cancelButtonText: '否',
  3887. type: 'warning'
  3888. })
  3889. .then(() => {
  3890. // 用户确认删除,执行删除操作
  3891. deleteDocumentInformation(inData)
  3892. .then(() => {
  3893. this.projectAllDocumentConfirmatorList.map(item => {
  3894. let inData1 = {
  3895. site: this.proofingCurrentRow.site,
  3896. orderRef1: this.proofingCurrentRow.projectId,
  3897. userid: item.userid,
  3898. itemNo: this.projectAllDocumentConfirmatorList.indexOf(item) + 1,
  3899. wantedConfirmDate: this.modalData.wantedConfirmDate,
  3900. createBy: this.$store.state.user.name
  3901. };
  3902. saveProductionValidationDocumentConfirmator(inData1);
  3903. });
  3904. this.saveDocumentInformation(inData)
  3905. .then(() => resolve())
  3906. .catch(() => reject());
  3907. })
  3908. .catch(() => reject('删除确认记录失败'));
  3909. })
  3910. .catch(() => {
  3911. reject('用户取消操作');
  3912. });
  3913. } else {
  3914. deleteDocumentInformation(inData)
  3915. .then(() => {
  3916. this.projectAllDocumentConfirmatorList.map(item => {
  3917. let inData1 = {
  3918. site: this.proofingCurrentRow.site,
  3919. orderRef1: this.proofingCurrentRow.projectId,
  3920. userid: item.userid,
  3921. itemNo: this.projectAllDocumentConfirmatorList.indexOf(item) + 1,
  3922. wantedConfirmDate: this.modalData.wantedConfirmDate,
  3923. createBy: this.$store.state.user.name
  3924. };
  3925. saveProductionValidationDocumentConfirmator(inData1);
  3926. });
  3927. this.saveDocumentInformation(inData)
  3928. .then(() => resolve())
  3929. .catch(() => reject());
  3930. })
  3931. .catch(() => reject('删除确认记录失败'));
  3932. }
  3933. })
  3934. .catch(() => {
  3935. reject('检查确认记录失败');
  3936. });
  3937. });
  3938. },
  3939. saveDocumentInformation(inData) {
  3940. return saveProductionValidationDocument(inData)
  3941. .then(response => {
  3942. if (response.data && response.data.code === 0) {
  3943. return Promise.resolve();
  3944. } else {
  3945. return Promise.reject('保存文档失败');
  3946. }
  3947. })
  3948. .catch(() => {
  3949. return Promise.reject('保存文档失败');
  3950. });
  3951. },
  3952. askForDeleteConfirmation() {
  3953. return new Promise((resolve, reject) => {
  3954. this.$confirm('该项目已存在生产确认记录,是否删除重新推送确认信息?', '提示', {
  3955. confirmButtonText: '是',
  3956. cancelButtonText: '否',
  3957. type: 'warning'
  3958. })
  3959. .then(() => {
  3960. resolve('true');
  3961. })
  3962. .catch(() => {
  3963. resolve('false');
  3964. });
  3965. });
  3966. },
  3967. getConfirmProgressDocumentList() {
  3968. let inData = {
  3969. site: this.proofingCurrentRow.site,
  3970. orderRef1: this.proofingCurrentRow.projectId,
  3971. page: 1,
  3972. limit: 1000
  3973. }
  3974. searchConfirmProgressDocumentList(inData).then(({data}) => {
  3975. if (data && data.code === 0){
  3976. this.confirmProgressDocumentList = data.page.list;
  3977. }
  3978. })
  3979. },
  3980. getConfirmProgressPusherList() {
  3981. let inData = {
  3982. site: this.proofingCurrentRow.site,
  3983. orderRef1: this.proofingCurrentRow.projectId,
  3984. page: 1,
  3985. limit: 1000
  3986. }
  3987. searchConfirmProgressPusherList(inData).then(({data}) => {
  3988. if (data && data.code === 0){
  3989. this.confirmProgressPusherList = data.page.list;
  3990. }
  3991. })
  3992. },
  3993. confirmDocument(row) {
  3994. // 将this.$store.state.user.id转为字符串
  3995. let userId = this.$store.state.user.id.toString()
  3996. if (row.userid !== userId) {
  3997. // 提示指定确认人为row.confirmedBy,是否继续
  3998. this.$confirm('指定确认人为' + row.userDisplay + ',是否继续确认?', '提示', {
  3999. confirmButtonText: '是',
  4000. cancelButtonText: '否',
  4001. type: 'warning'
  4002. })
  4003. .then(() => {
  4004. this.confirmData = {
  4005. site: row.site,
  4006. documentType: row.documentType,
  4007. orderRef1: row.orderRef1,
  4008. itemNo: row.itemNo,
  4009. userid: row.userid,
  4010. username: row.username,
  4011. userDisplay: row.userDisplay,
  4012. wantedConfirmDate: row.wantedConfirmDate,
  4013. confirmFlag: row.confirmFlag,
  4014. confirmedDate: new Date(),
  4015. createBy: row.createBy,
  4016. createDate: row.createDate,
  4017. confirmedBy: this.$store.state.user.userDisplay,
  4018. documentId: row.documentId,
  4019. remark: row.remark
  4020. }
  4021. this.modalData = {
  4022. site: this.proofingCurrentRow.site,
  4023. projectId: this.proofingCurrentRow.projectId,
  4024. projectDesc: this.proofingCurrentRow.projectDesc,
  4025. testPartNo: this.proofingCurrentRow.testPartNo,
  4026. partDesc: this.proofingCurrentRow.partDesc,
  4027. customerNo: this.proofingCurrentRow.customerNo,
  4028. customerDesc: this.proofingCurrentRow.customerDesc,
  4029. buNo: this.proofingCurrentRow.buNo,
  4030. bu: this.proofingCurrentRow.site + '_' + this.proofingCurrentRow.buNo,
  4031. cProjectTypeDb: this.proofingCurrentRow.projectCategory,
  4032. }
  4033. this.getProjectConfirmatorFileList(row)
  4034. this.confirmVisible = true
  4035. })
  4036. .catch(() => {
  4037. this.$message({
  4038. type: 'info',
  4039. message: '已取消操作'
  4040. });
  4041. });
  4042. }else {
  4043. this.confirmData = {
  4044. site: row.site,
  4045. documentType: row.documentType,
  4046. orderRef1: row.orderRef1,
  4047. itemNo: row.itemNo,
  4048. userid: row.userid,
  4049. username: row.username,
  4050. userDisplay: row.userDisplay,
  4051. wantedConfirmDate: row.wantedConfirmDate,
  4052. confirmFlag: row.confirmFlag,
  4053. confirmedDate: new Date(),
  4054. createBy: row.createBy,
  4055. createDate: row.createDate,
  4056. confirmedBy: this.$store.state.user.name,
  4057. documentId: row.documentId,
  4058. remark: row.remark
  4059. }
  4060. this.modalData = {
  4061. site: this.proofingCurrentRow.site,
  4062. projectId: this.proofingCurrentRow.projectId,
  4063. projectDesc: this.proofingCurrentRow.projectDesc,
  4064. testPartNo: this.proofingCurrentRow.testPartNo,
  4065. partDesc: this.proofingCurrentRow.partDesc,
  4066. customerNo: this.proofingCurrentRow.customerNo,
  4067. customerDesc: this.proofingCurrentRow.customerDesc,
  4068. buNo: this.proofingCurrentRow.buNo,
  4069. bu: this.proofingCurrentRow.site + '_' + this.proofingCurrentRow.buNo,
  4070. cProjectTypeDb: this.proofingCurrentRow.projectCategory,
  4071. }
  4072. this.getProjectConfirmatorFileList(row)
  4073. this.confirmVisible = true
  4074. }
  4075. },
  4076. /*选择上传文件时*/
  4077. onChange(file,fileList){
  4078. const newFileName = file.name;
  4079. if (this.fileName) {
  4080. this.fileName += ', ' + newFileName;
  4081. } else {
  4082. this.fileName = newFileName;
  4083. }
  4084. this.fileList.push(file);
  4085. },
  4086. triggerUpload() {
  4087. this.$refs.uploadFile.$el.querySelector('input').click()
  4088. },
  4089. saveUploadFile(){
  4090. this.confirmData.confirmedDate = moment(this.confirmData.confirmedDate).utcOffset('+8').format('YYYY-MM-DD HH:mm:ss');
  4091. this.confirmData.confirmedBy = this.$store.state.user.userDisplay;
  4092. console.log('this.confirmData',this.confirmData)
  4093. updateProjectDocumentConfirm(this.confirmData) .then(({data}) => {
  4094. if (data.code === 0) {
  4095. this.confirmVisible = false;
  4096. this.getConfirmProgressDocumentList();
  4097. this.getConfirmProgressPusherList();
  4098. }else {
  4099. this.$message.warning(data.msg);
  4100. }
  4101. })
  4102. let remark = this.confirmData.remark;
  4103. const formData = new FormData();
  4104. //片接文件
  4105. for (let i = 0; i < this.fileList.length; i++) {
  4106. formData.append("file",this.fileList[i].raw)
  4107. }
  4108. formData.append("folder", this.folder);
  4109. formData.append("orderRef1", this.confirmData.site);
  4110. formData.append("orderRef4", this.confirmData.orderRef1);
  4111. formData.append("orderRef2", this.confirmData.itemNo);
  4112. formData.append("orderRef3", this.confirmData.userid);
  4113. formData.append("remark", remark);
  4114. uploadProjectFile(formData).then(({data}) => {
  4115. if (data.code === 0) {
  4116. this.$message.success('操作成功');
  4117. //清空文件上传记录
  4118. this.$refs.uploadFile.clearFiles();
  4119. this.closeFileUpdate();
  4120. this.projectConfirmatorFileList = [];
  4121. }else {
  4122. this.$message.warning(data.msg);
  4123. }
  4124. })
  4125. },
  4126. closeFileUpdate() {
  4127. this.fileName = '';
  4128. this.uploadDialog = false;
  4129. //this.fileRemark = ''
  4130. this.$refs.uploadFile.clearFiles()
  4131. this.fileList = []
  4132. },
  4133. getProjectConfirmatorFileList (row) {
  4134. let inData = {
  4135. orderRef1: row.site,
  4136. orderRef3: row.userid,
  4137. orderRef2: row.itemNo,
  4138. orderRef4: row.orderRef1,
  4139. page: 1,
  4140. limit: 1000
  4141. }
  4142. searchProjectConfirmatorFileList(inData).then(({data}) => {
  4143. if (data && data.code === 0){
  4144. this.projectConfirmatorFileList = data.page.list;
  4145. }
  4146. })
  4147. },
  4148. closeUploadFileVisible(){
  4149. this.confirmVisible = false;
  4150. this.projectConfirmatorFileList = [];
  4151. this.fileList = [];
  4152. this.closeFileUpdate()
  4153. },
  4154. closeViewDocumentFileVisible(){
  4155. this.viewDocumentFileVisible = false;
  4156. this.projectConfirmatorFileList = [];
  4157. },
  4158. viewDocumentFile(row) {
  4159. this.confirmData = {
  4160. site: row.site,
  4161. documentType: row.documentType,
  4162. orderRef1: row.orderRef1,
  4163. itemNo: row.itemNo,
  4164. userid: row.userid,
  4165. username: row.username,
  4166. userDisplay: row.userDisplay,
  4167. wantedConfirmDate: row.wantedConfirmDate,
  4168. confirmFlag: row.confirmFlag,
  4169. confirmedDate: new Date(),
  4170. createBy: row.createBy,
  4171. createDate: row.createDate,
  4172. confirmedBy: this.$store.state.user.userDisplay,
  4173. documentId: row.documentId,
  4174. remark: row.remark
  4175. }
  4176. let inData = {
  4177. orderRef1: row.site,
  4178. orderRef2: row.itemNo,
  4179. orderRef3: row.userid,
  4180. orderRef4: row.orderRef1,
  4181. page: 1,
  4182. limit: 1000
  4183. }
  4184. searchProjectConfirmatorFileList(inData).then(({data}) => {
  4185. if (data && data.code === 0){
  4186. this.projectConfirmatorFileList = data.page.list;
  4187. }
  4188. })
  4189. this.viewDocumentFileVisible = true
  4190. },
  4191. deleteFile(row) {
  4192. if (this.confirmData.confirmedBy === this.$store.state.user.userDisplay) {
  4193. this.$confirm('是否删除该文件?', '提示', {
  4194. confirmButtonText: '确定',
  4195. cancelButtonText: '取消',
  4196. type: 'warning'
  4197. }).then(() => {
  4198. let inData = {
  4199. id: row.id,
  4200. orderRef1: row.orderRef1,
  4201. orderRef2: row.orderRef2,
  4202. orderRef3: row.orderRef3,
  4203. orderRef4: row.orderRef4,
  4204. createdBy: this.$store.state.user.name
  4205. }
  4206. deleteProjectFile(inData).then(({data}) => {
  4207. if (data && data.code === 0) {
  4208. this.$message({
  4209. message: '删除成功',
  4210. type: 'success'
  4211. })
  4212. this.getProjectConfirmatorFileList(this.confirmData)
  4213. } else {
  4214. this.$message({
  4215. message: '删除失败',
  4216. type: 'error'
  4217. })
  4218. }
  4219. })
  4220. }).catch(() => {
  4221. this.$message({
  4222. type: 'info',
  4223. message: '已取消删除'
  4224. });
  4225. });
  4226. } else {
  4227. this.$message({
  4228. message: '只有确认人员才能删除文件',
  4229. type: 'error'
  4230. })
  4231. }
  4232. },
  4233. shouldShowDelete(row) {
  4234. console.log('row.documentId',row.documentId)
  4235. console.log('row.projectPhase',row.projectPhase)
  4236. console.log('Y/N',row.documentId !== null || row.projectPhase !== 'SOP文档')
  4237. // 根据条件判断是否显示删除操作
  4238. if (row.projectPhase === 'SOP文档') {
  4239. return false
  4240. }else return row.documentId !== null;
  4241. },
  4242. // 查看文件
  4243. viewFile(row) {
  4244. // 预览文件
  4245. let image = ['jpg', 'jpeg', 'png', 'gif', 'bmp']
  4246. let type = ''
  4247. if (image.includes(row.fileType.toLowerCase())) {
  4248. type = 'image/' + row.fileType
  4249. }
  4250. let video = ['mp4', 'avi', 'mov', 'wmv', 'flv']
  4251. if (video.includes(row.fileType.toLowerCase())) {
  4252. type = 'video/' + row.fileType
  4253. }
  4254. let txt = ['txt']
  4255. if (txt.includes(row.fileType.toLowerCase())) {
  4256. type = 'text/plain'
  4257. }
  4258. let office = ['doc', 'docx', 'ppt', 'pptx', 'xls', 'xlsx']
  4259. if (office.includes(row.fileType.toLowerCase())) {
  4260. if (row.fileType.toLowerCase() === 'doc' || row.fileType.toLowerCase() === 'docx') {
  4261. type = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'
  4262. } else if (row.fileType.toLowerCase() === 'ppt' || row.fileType.toLowerCase() === 'pptx') {
  4263. type = 'application/vnd.openxmlformats-officedocument.presentationml.presentation'
  4264. } else {
  4265. type = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
  4266. }
  4267. }
  4268. let pdf = ['pdf']
  4269. if (pdf.includes(row.fileType.toLowerCase())) {
  4270. type = 'application/pdf'
  4271. }
  4272. downLoadObjectFile(row).then(({data}) => {
  4273. const blob = new Blob([data], { type: type });
  4274. // 创建URL来生成预览
  4275. const fileURL = URL.createObjectURL(blob);
  4276. // 在新标签页中打开文件预览
  4277. const newTab = window.open(fileURL, '_blank')
  4278. })
  4279. },
  4280. // 下载
  4281. downloadFile (row) {
  4282. downLoadObjectFile(row)
  4283. .then(({data}) => {
  4284. // 不限制文件下载类型
  4285. const blob = new Blob([data], {type:'application/octet-stream;charset=utf-8'})
  4286. // 下载文件名称
  4287. const fileName = row.fileName
  4288. // a标签下载
  4289. const linkNode = document.createElement('a')
  4290. linkNode.download = fileName // a标签的download属性规定下载文件的名称
  4291. linkNode.style.display = 'none'
  4292. linkNode.href = URL.createObjectURL(blob) // 生成一个Blob URL
  4293. document.body.appendChild(linkNode)
  4294. linkNode.click() // 模拟在按钮上的一次鼠标单击
  4295. URL.revokeObjectURL(linkNode.href) // 释放URL 对象
  4296. document.body.removeChild(linkNode)
  4297. })
  4298. },
  4299. closeProjectProductionValidationDocumentVisibleDialog() {
  4300. this.projectProductionValidationDocumentVisible = false;
  4301. this.activeName1 = 'selectDocument';
  4302. },
  4303. formatDate(row, column) {
  4304. // row 是当前行的数据对象
  4305. // column 是当前列的属性信息对象
  4306. const date = row[column.property];
  4307. if (date) {
  4308. const s = new Date(date).toLocaleDateString('zh-CN', { year: 'numeric', month: '2-digit', day: '2-digit' });
  4309. return s.replace(/\//g, '-')
  4310. } else {
  4311. return '';
  4312. }
  4313. },
  4314. indexMethod(index) {
  4315. return index + 1;
  4316. },
  4317. // 获取 tableDefault 列
  4318. async getColumnList (tableId, columnId) {
  4319. let queryTable= {
  4320. functionId: this.$route.meta.menuId,
  4321. tableId: tableId,
  4322. languageCode: this.$i18n.locale
  4323. }
  4324. await getTableDefaultListLanguage(queryTable).then(({data}) => {
  4325. if (!data.rows.length == 0) {
  4326. switch (columnId) {
  4327. case 1:
  4328. this.columnList = data.rows
  4329. break;
  4330. // case 2:
  4331. // this.detailColumnList = data.rows
  4332. // break;
  4333. // case 3:
  4334. // this.columnList2 = data.rows
  4335. // break;
  4336. // case 4:
  4337. // this.columnList3 = data.rows
  4338. // break;
  4339. }
  4340. } else {
  4341. // this.showDefault = true.
  4342. }
  4343. })
  4344. },
  4345. // 列表表格选择替换
  4346. tabClick (tab, event) {
  4347. // 刷新列表数据
  4348. this.refreshCurrentTabTable()
  4349. },
  4350. refreshCurrentTabTable () {
  4351. if (this.activeName == 'proofRecord') {
  4352. this.getRowProjectInfo();
  4353. }
  4354. if (this.activeName == 'massProductionStage') {
  4355. this.getProjectOtherDocument();
  4356. }
  4357. if (this.activeName == 'allDocument'){
  4358. this.searchProjectAllDocumentList()
  4359. this.searchConfirmatorList()
  4360. }
  4361. if (this.activeName == 'productionDocumentsConfirmProgress'){
  4362. this.getConfirmProgressDocumentList()
  4363. this.getConfirmProgressPusherList()
  4364. }
  4365. },
  4366. //获取按钮的权限数据
  4367. getButtonAuthData () {
  4368. let searchFlag = this.isAuth(this.menuId+":search")
  4369. let saveFlag = this.isAuth(this.menuId+":save")
  4370. let updateFlag = this.isAuth(this.menuId+":update")
  4371. let deleteFlag = this.isAuth(this.menuId+":delete")
  4372. //处理页面的权限数据
  4373. this.authSearch = !searchFlag
  4374. this.authSave = !saveFlag
  4375. this.authUpdate = !updateFlag
  4376. this.authDelete = !deleteFlag
  4377. },
  4378. rowStyle ({row}) {
  4379. if (this.proofingCurrentRow.documentTypeId === row.documentTypeId) {
  4380. return { 'background-color': '#E8F7F6', cursor: 'pointer' };
  4381. }
  4382. },
  4383. }
  4384. }
  4385. </script>
  4386. <style scoped lang="scss">
  4387. .el-tabs__nav {
  4388. margin-left: 0 !important;
  4389. }
  4390. .red-text /deep/ .el-input__inner {
  4391. color: red;
  4392. }
  4393. /deep/ .left-section {
  4394. flex: 1; /* 左边部分占据剩余空间 */
  4395. margin-right: 10px; /* 右边与左边之间的间隔 */
  4396. margin-left: -10px; /* 左边与父元素之间的间隔 */
  4397. }
  4398. /deep/ .right-section {
  4399. width: 66%; /* 右边部分宽度占满剩余空间 */
  4400. margin-right: 5px;
  4401. }
  4402. /deep/ .custom-upload .el-upload-dragger {
  4403. width: 150px;
  4404. height: 150px;
  4405. text-align: center;
  4406. position: relative;
  4407. overflow: hidden;
  4408. /* 添加其他样式 */
  4409. }
  4410. /deep/ .table-container {
  4411. border: 1px solid #e0e0e0;
  4412. border-radius: 4px;
  4413. padding: 10px;
  4414. margin-bottom: 10px;
  4415. }
  4416. </style>