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.

3531 lines
123 KiB

6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
5 months ago
5 months ago
5 months ago
6 months ago
4 months ago
4 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
4 months ago
6 months ago
4 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
2 months ago
6 months ago
2 months ago
6 months ago
2 months ago
6 months ago
2 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
5 months ago
6 months ago
5 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
5 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
5 months ago
6 months ago
  1. <template>
  2. <div class="mod-config">
  3. <!-- 条件查询 -->
  4. <el-form :inline="true" label-position="top" :model="searchData">
  5. <el-form-item :label="'BU'">
  6. <el-select v-model="searchData.buDesc" placeholder="请选择" clearable style="width: 80px">
  7. <el-option
  8. v-for = "i in userBuList"
  9. :key = "i.buNo"
  10. :label = "i.buDesc"
  11. :value = "i.buDesc">
  12. </el-option>
  13. </el-select>
  14. </el-form-item>
  15. <el-form-item :label="'物料编码'">
  16. <el-input v-model="searchData.partNo" clearable style="width: 120px"></el-input>
  17. </el-form-item>
  18. <el-form-item :label="'SKU'">
  19. <el-input v-model="searchData.sku" clearable style="width: 120px"></el-input>
  20. </el-form-item>
  21. <el-form-item :label="'物料名称'">
  22. <el-input v-model="searchData.partDesc" clearable style="width: 200px"></el-input>
  23. </el-form-item>
  24. <el-form-item :label="'类别名称'">
  25. <el-input v-model="searchData.familyName" clearable style="width: 120px"></el-input>
  26. </el-form-item>
  27. <el-form-item :label="'规格型号'">
  28. <el-input v-model="searchData.spec" clearable style="width: 180px"></el-input>
  29. </el-form-item>
  30. <el-form-item :label="' '">
  31. <el-button type="primary" :loading="searchLoading" @click="getDataList()">查询</el-button>
  32. </el-form-item>
  33. <el-form-item :label="' '">
  34. <el-button @click="exportExcel()" type="primary" style="margin-left: 2px">{{'导出'}}</el-button>
  35. </el-form-item>
  36. </el-form>
  37. <!-- 展示列表 -->
  38. <el-table
  39. :height="height"
  40. :data="dataList"
  41. border
  42. v-loading="searchLoading"
  43. ref="partTable"
  44. :row-style="rowStyle"
  45. @row-click="partClickRow"
  46. @current-change="changeCurrentRow"
  47. style="width: 100%;">
  48. <el-table-column
  49. v-for="(item,index) in columnList" :key="index"
  50. :sortable="item.columnSortable"
  51. :prop="item.columnProp"
  52. :header-align="item.headerAlign"
  53. :show-overflow-tooltip="item.showOverflowTooltip"
  54. :align="item.align"
  55. :fixed="item.fixed === ''?false:item.fixed"
  56. :min-width="item.columnWidth"
  57. :label="item.columnLabel">
  58. <template slot-scope="scope">
  59. <span v-if="!item.columnHidden">
  60. <span v-if="columnsProp.includes(item.columnProp)">{{ scope.row[`${item.columnProp}Desc`] }}</span>
  61. <span v-else>
  62. {{ scope.row[item.columnProp] }}
  63. </span>
  64. </span>
  65. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
  66. </template>
  67. </el-table-column>
  68. <el-table-column
  69. fixed="right"
  70. header-align="center"
  71. align="center"
  72. width="100"
  73. label="操作">
  74. <template slot-scope="scope">
  75. <el-link style="cursor: pointer" @click="updateModal(scope.row)">编辑</el-link>
  76. <el-link style="cursor: pointer" @click="updateModal2(scope.row)">详情</el-link>
  77. <!-- <el-link v-if="!authFile" style="cursor: pointer" @click="sopFileList(scope.row)">SOP文件</el-link>-->
  78. </template>
  79. </el-table-column>
  80. </el-table>
  81. <!-- 分页栏 -->
  82. <el-pagination
  83. style="margin-top: 0px"
  84. @size-change="sizeChangeHandle"
  85. @current-change="currentChangeHandle"
  86. :current-page="pageIndex"
  87. :page-sizes="[20, 50, 100, 200, 500]"
  88. :page-size="pageSize"
  89. :total="totalPage"
  90. layout="total, sizes, prev, pager, next, jumper">
  91. </el-pagination>
  92. <!-- 物料属性新增/修改 -->
  93. <el-dialog title="物料档案编辑" :close-on-click-modal="false" v-drag :visible.sync="modalFlag" width="900px" class="part-edit-dialog">
  94. <div class="dialog-content">
  95. <el-form :model="modalData" :rules="rules" label-position="top">
  96. <!-- 基本信息区域 -->
  97. <div class="form-section">
  98. <div class="section-title">基本信息</div>
  99. <el-row :gutter="20">
  100. <el-col :span="6">
  101. <el-form-item label="物料编码">
  102. <el-input v-model="modalData.partNo" disabled></el-input>
  103. </el-form-item>
  104. </el-col>
  105. <el-col :span="10">
  106. <el-form-item label="物料名称">
  107. <el-input v-model="modalData.partDesc" disabled></el-input>
  108. </el-form-item>
  109. </el-col>
  110. <el-col :span="4">
  111. <el-form-item label="计量单位">
  112. <el-input v-model="modalData.umId" disabled></el-input>
  113. </el-form-item>
  114. </el-col>
  115. <el-col :span="4">
  116. <el-form-item label="状态">
  117. <el-select v-model="modalData.active" :disabled="modalDisableFlag" style="width: 100%">
  118. <el-option label="启用" value="Y"></el-option>
  119. <el-option label="弃用" value="N"></el-option>
  120. </el-select>
  121. </el-form-item>
  122. </el-col>
  123. </el-row>
  124. <el-row :gutter="20">
  125. <el-col :span="6">
  126. <el-form-item label="物料分类">
  127. <el-input v-model="modalData.partType" disabled></el-input>
  128. </el-form-item>
  129. </el-col>
  130. <el-col :span="10">
  131. <el-form-item label="物料英文名称">
  132. <el-input v-model="modalData.partDescEn" disabled></el-input>
  133. </el-form-item>
  134. </el-col>
  135. <el-col :span="8">
  136. <el-form-item label="规格型号">
  137. <el-input v-model="modalData.spec" disabled></el-input>
  138. </el-form-item>
  139. </el-col>
  140. </el-row>
  141. </div>
  142. <!-- 有效期管理区域 -->
  143. <div class="form-section">
  144. <div class="section-title">有效期管理</div>
  145. <el-row :gutter="20">
  146. <el-col :span="8">
  147. <el-form-item label=" ">
  148. <el-checkbox v-model="modalData.expirationFlag" :disabled="modalDisableFlag" true-label="Y">启用物料有效期管理</el-checkbox>
  149. </el-form-item>
  150. </el-col>
  151. <el-col :span="8" style="margin-top: 8px">
  152. <el-form-item label="有效期天数">
  153. <el-input-number :controls="false" :step="0" v-model="modalData.expirationDay" :disabled="modalDisableFlag" style="width: 100%"></el-input-number>
  154. </el-form-item>
  155. </el-col>
  156. <el-col :span="8" style="margin-top: 8px">
  157. <el-form-item label="有效期预警天数">
  158. <el-input-number :controls="false" :step="0" v-model="modalData.expirationWarningDay" :disabled="modalDisableFlag" style="width: 100%"></el-input-number>
  159. </el-form-item>
  160. </el-col>
  161. </el-row>
  162. <el-row :gutter="20" style="margin-top: -20px">
  163. <el-col :span="8">
  164. <el-form-item label=" ">
  165. <el-checkbox v-model="modalData.adhesiveActivePeriodFlag" :disabled="modalDisableFlag" true-label="Y">启用物料活性期管理</el-checkbox>
  166. </el-form-item>
  167. </el-col>
  168. <el-col :span="8" style="margin-top: 8px">
  169. <el-form-item label="解冻时长(h)">
  170. <el-input-number :controls="false" :step="0" v-model="modalData.thawingDuration" :disabled="modalDisableFlag" style="width: 100%"></el-input-number>
  171. </el-form-item>
  172. </el-col>
  173. <el-col :span="8" style="margin-top: 8px">
  174. <el-form-item label="累计暴露时长(h)">
  175. <el-input-number :controls="false" :step="0" v-model="modalData.accumulatedExposureDuration" :disabled="modalDisableFlag" style="width: 100%"></el-input-number>
  176. </el-form-item>
  177. </el-col>
  178. </el-row>
  179. </div>
  180. <!-- 仓库配置区域 -->
  181. <div class="form-section">
  182. <div class="section-title">仓库配置</div>
  183. <el-row :gutter="20">
  184. <el-col :span="4">
  185. <el-form-item label="超入比例%">
  186. <el-input-number :controls="false" :step="0" v-model="modalData.exceedInRatio" :disabled="modalDisableFlag" style="width: 100%"></el-input-number>
  187. </el-form-item>
  188. </el-col>
  189. <el-col :span="10">
  190. <el-form-item>
  191. <span v-if="modalDisableFlag" slot="label">入库默认仓库</span>
  192. <span v-else style="cursor: pointer" slot="label" @click="getBaseList(20, 1)"><a href="#">入库默认仓库</a></span>
  193. <el-input v-model="modalData.inboundWarehouseId" :disabled="modalDisableFlag" @change="inWarehouseBlur(20)" style="width: 25%"></el-input>
  194. <el-input v-model="modalData.inboundWarehouseName" disabled style="width: 70%"></el-input>
  195. </el-form-item>
  196. </el-col>
  197. <el-col :span="10">
  198. <el-form-item>
  199. <span v-if="modalDisableFlag" slot="label">入库默认库位</span>
  200. <span v-else style="cursor: pointer" slot="label" @click="getBaseList(22)"><a href="#">入库默认库位</a></span>
  201. <el-input v-model="modalData.inboundLocationId" :disabled="modalDisableFlag" @change="locationBlur(22)" style="width: 25%"></el-input>
  202. <el-input v-model="modalData.inboundLocationName" disabled style="width: 70%"></el-input>
  203. </el-form-item>
  204. </el-col>
  205. </el-row>
  206. <el-row :gutter="20">
  207. <el-col :span="4">
  208. <el-form-item label="超领比例%">
  209. <el-input-number :controls="false" :step="0" v-model="modalData.exceedOutRatio" :disabled="modalDisableFlag" style="width: 100%"></el-input-number>
  210. </el-form-item>
  211. </el-col>
  212. <el-col :span="10">
  213. <el-form-item>
  214. <span v-if="modalDisableFlag" slot="label">领料默认仓库</span>
  215. <span v-else style="cursor: pointer" slot="label" @click="getBaseList(20, 2)"><a href="#">领料默认仓库</a></span>
  216. <el-input-group>
  217. <el-input v-model="modalData.outboundWarehouseId" :disabled="modalDisableFlag" @change="outWarehouseBlur(20)" style="width: 25%"></el-input>
  218. <el-input v-model="modalData.outboundWarehouseName" disabled style="width: 70%"></el-input>
  219. </el-input-group>
  220. </el-form-item>
  221. </el-col>
  222. <el-col :span="4">
  223. <el-form-item label="领料方式">
  224. <el-select v-model="modalData.issueMethod" :disabled="modalDisableFlag" placeholder="请选择" style="width: 100%">
  225. <el-option label="按单领料" value="按单领料"></el-option>
  226. <el-option label="入库倒冲" value="入库倒冲"></el-option>
  227. </el-select>
  228. </el-form-item>
  229. </el-col>
  230. </el-row>
  231. </div>
  232. <!-- 检验配置区域 -->
  233. <div class="form-section">
  234. <div class="section-title">检验配置</div>
  235. <el-row :gutter="20" style="margin-top: 5px">
  236. <el-col :span="4">
  237. <el-checkbox v-model="modalData.iqcExempt" :disabled="modalDisableFlag" true-label="Y">IQC检验</el-checkbox>
  238. </el-col>
  239. <el-col :span="4">
  240. <el-checkbox v-model="modalData.faiExempt" :disabled="modalDisableFlag" true-label="Y">FAI检验</el-checkbox>
  241. </el-col>
  242. <el-col :span="4">
  243. <el-checkbox v-model="modalData.ipqcExempt" :disabled="modalDisableFlag" true-label="Y">IPQC检验</el-checkbox>
  244. </el-col>
  245. <el-col :span="4">
  246. <el-checkbox v-model="modalData.pqcExempt" :disabled="modalDisableFlag" true-label="Y">PQC检验</el-checkbox>
  247. </el-col>
  248. <el-col :span="4">
  249. <el-checkbox v-model="modalData.fqcExempt" :disabled="modalDisableFlag" true-label="Y">FQC检验</el-checkbox>
  250. </el-col>
  251. <el-col :span="4">
  252. <el-checkbox v-model="modalData.oqcExempt" :disabled="modalDisableFlag" true-label="Y">OQC检验</el-checkbox>
  253. </el-col>
  254. </el-row>
  255. <el-row :gutter="20" style="margin-top: 5px">
  256. <el-col :span="6">
  257. <el-form-item label="默认值">
  258. <el-input v-model="modalData.standardValue" :disabled="modalDisableFlag"></el-input>
  259. </el-form-item>
  260. </el-col>
  261. <el-col :span="6">
  262. <el-form-item label="标准值">
  263. <el-input v-model="modalData.defaultValue" :disabled="modalDisableFlag"></el-input>
  264. </el-form-item>
  265. </el-col>
  266. <el-col :span="6">
  267. <el-form-item label="上限值">
  268. <el-input v-model="modalData.maxValue" :disabled="modalDisableFlag"></el-input>
  269. </el-form-item>
  270. </el-col>
  271. <el-col :span="6">
  272. <el-form-item label="下限值">
  273. <el-input v-model="modalData.minValue" :disabled="modalDisableFlag"></el-input>
  274. </el-form-item>
  275. </el-col>
  276. </el-row>
  277. </div>
  278. <!-- 巡检配置区域 -->
  279. <div class="form-section">
  280. <div class="section-title">巡检配置</div>
  281. <el-row :gutter="20">
  282. <el-col :span="8">
  283. <el-form-item label="首次巡检时长(h)">
  284. <el-input-number :controls="false" :step="0" v-model="modalData.firstInspectionDuration" :disabled="modalDisableFlag" style="width: 100%"></el-input-number>
  285. </el-form-item>
  286. </el-col>
  287. <el-col :span="8">
  288. <el-form-item label="下次巡检时长(h)">
  289. <el-input-number :controls="false" :step="0" v-model="modalData.nextInspectionDuration" :disabled="modalDisableFlag" style="width: 100%"></el-input-number>
  290. </el-form-item>
  291. </el-col>
  292. <el-col :span="8">
  293. <el-form-item label="累计巡检时长(h)">
  294. <el-input-number :controls="false" :step="0" v-model="modalData.totalInspectionDuration" :disabled="modalDisableFlag" style="width: 100%"></el-input-number>
  295. </el-form-item>
  296. </el-col>
  297. </el-row>
  298. </div>
  299. </el-form>
  300. </div>
  301. <el-footer style="height:35px;margin-top: 15px;text-align:center">
  302. <el-button v-if="!modalDisableFlag" type="primary" :loading="saveLoading" @click="saveData()">保存</el-button>
  303. <el-button type="primary" @click="modalFlag = false">关闭</el-button>
  304. </el-footer>
  305. </el-dialog>
  306. <!-- 页签 -->
  307. <el-tabs v-model="activeTable" style="width: 100%" :style="{height: secondHeight + 'px'}" type="border-card" @tab-click="tabClick" class="customer-tab">
  308. <!-- BOM页签 -->
  309. <el-tab-pane label="BOM" name="bom">
  310. <bom-list-component
  311. v-if="activeTable === 'bom'"
  312. :part-no="partCurrentRow.partNo"
  313. :site="partCurrentRow.site"
  314. :bu-no="partCurrentRow.buNo"
  315. :table-height="secondHeight - 78">
  316. </bom-list-component>
  317. </el-tab-pane>
  318. <!-- Routing页签 -->
  319. <el-tab-pane label="Routing" name="routing">
  320. <routing-list-component
  321. v-if="activeTable === 'routing'"
  322. :part-no="partCurrentRow.partNo"
  323. :site="partCurrentRow.site"
  324. :bu-no="partCurrentRow.buNo"
  325. :table-height="secondHeight - 78">
  326. </routing-list-component>
  327. </el-tab-pane>
  328. <!-- SOP清单 -->
  329. <el-tab-pane label="SOP清单" name="partSop">
  330. <sop-list-component
  331. v-if="activeTable === 'partSop'"
  332. :part-no="partCurrentRow.partNo"
  333. :site="partCurrentRow.site"
  334. :table-height="secondHeight - 98">
  335. </sop-list-component>
  336. </el-tab-pane>
  337. <!-- 质量检验模板页签 -->
  338. <el-tab-pane label="质量检验模板" name="qcTemplate">
  339. <el-form label-position="top" style="margin-left: 2px;">
  340. <el-button type="primary" @click="addFastModal()" icon="el-icon-plus">新增模板</el-button>
  341. <el-button v-if="!editBatchVisible" @click="editBatchModel">批量编辑</el-button>
  342. <el-button v-if="editBatchVisible" @click="batchModel" :loading="batchLoading">批量保存</el-button>
  343. </el-form>
  344. <el-table
  345. :data="detailList"
  346. :height="secondHeight - 68"
  347. border
  348. style="width: 100%;">
  349. <el-table-column
  350. v-for="(item,index) in columnDetailList" :key="index"
  351. :sortable="item.columnSortable"
  352. :prop="item.columnProp"
  353. :header-align="item.headerAlign"
  354. :show-overflow-tooltip="item.showOverflowTooltip"
  355. :align="item.align"
  356. :fixed="item.fixed==''?false:item.fixed"
  357. :min-width="item.columnWidth"
  358. :label="item.columnLabel">
  359. <template slot-scope="scope">
  360. <span v-if="!item.columnHidden">{{scope.row[item.columnProp]}}</span>
  361. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
  362. </template>
  363. </el-table-column>
  364. <el-table-column
  365. prop="samplingLevelDesc"
  366. header-align="center"
  367. align="center"
  368. min-width="180"
  369. label="检验水平">
  370. <template slot-scope="scope">
  371. <span v-if="editBatchVisible">
  372. <el-button type="text" @click="chooseLevel(scope.row)" style="width:18%;padding: 3px 7px">选择</el-button>
  373. <el-input v-model="scope.row.samplingLevelDesc" readonly style="width:77%"></el-input>
  374. </span>
  375. <span v-else>
  376. <span>{{scope.row[scope.column.property]}}</span>
  377. </span>
  378. </template>
  379. </el-table-column>
  380. <el-table-column
  381. prop="inspectionCycle"
  382. header-align="center"
  383. align="center"
  384. min-width="100"
  385. label="检验周期(h)">
  386. <template slot-scope="scope">
  387. <span v-if="editBatchVisible">
  388. <el-input :controls="false" v-model="scope.row.inspectionCycle"
  389. @input="value=>scope.row.inspectionCycle= value.match(/^[1-9]\d*$/) ? value.match(/^[1-9]\d*$/)[0] : ''"
  390. style="height: 11px; width: 98%;">
  391. </el-input>
  392. </span>
  393. <span v-else>
  394. <span>{{scope.row[scope.column.property]}}</span>
  395. </span>
  396. </template>
  397. </el-table-column>
  398. <el-table-column
  399. prop="samplingProgrammeDesc"
  400. header-align="center"
  401. align="center"
  402. min-width="180"
  403. label="抽样方案">
  404. <template slot-scope="scope">
  405. <span v-if="editBatchVisible">
  406. <el-button type="text" @click="chooseProgrammeRow(scope.row)" style="width:18%;padding: 3px 7px">选择</el-button>
  407. <el-input v-model="scope.row.samplingProgrammeDesc" readonly style="width:77%"></el-input>
  408. </span>
  409. <span v-else>
  410. <span>{{scope.row[scope.column.property]}}</span>
  411. </span>
  412. </template>
  413. </el-table-column>
  414. <el-table-column
  415. prop="aql"
  416. header-align="center"
  417. align="center"
  418. min-width="80"
  419. label="AQL">
  420. <template slot-scope="scope">
  421. <span v-if="editBatchVisible">
  422. <el-input :controls="false" v-model="scope.row.aql"
  423. @input="value=>scope.row.aql= value.match(/^[1-9]\d*$/) ? value.match(/^[1-9]\d*$/)[0] : ''"
  424. style="height: 11px; width: 98%;">
  425. </el-input>
  426. </span>
  427. <span v-else>
  428. <span>{{scope.row[scope.column.property]}}</span>
  429. </span>
  430. </template>
  431. </el-table-column>
  432. <el-table-column
  433. prop="ac"
  434. header-align="center"
  435. align="center"
  436. min-width="80"
  437. label="AC">
  438. <template slot-scope="scope">
  439. <span v-if="editBatchVisible">
  440. <el-input :controls="false" v-model="scope.row.ac"
  441. @input="value=>scope.row.ac= value.match(/^[1-9]\d*$/) ? value.match(/^[1-9]\d*$/)[0] : ''"
  442. style="height: 11px; width: 98%;">
  443. </el-input>
  444. </span>
  445. <span v-else>
  446. <span>{{scope.row[scope.column.property]}}</span>
  447. </span>
  448. </template>
  449. </el-table-column>
  450. <el-table-column
  451. prop="re"
  452. header-align="center"
  453. align="center"
  454. min-width="80"
  455. label="RE">
  456. <template slot-scope="scope">
  457. <span v-if="editBatchVisible">
  458. <el-input :controls="false" v-model="scope.row.re"
  459. @input="value=>scope.row.re= value.match(/^[1-9]\d*$/) ? value.match(/^[1-9]\d*$/)[0] : ''"
  460. style="height: 11px; width: 98%;">
  461. </el-input>
  462. </span>
  463. <span v-else>
  464. <span>{{scope.row[scope.column.property]}}</span>
  465. </span>
  466. </template>
  467. </el-table-column>
  468. <el-table-column
  469. prop="templateRemark"
  470. header-align="center"
  471. align="center"
  472. label="备注">
  473. </el-table-column>
  474. <el-table-column
  475. fixed="right"
  476. header-align="center"
  477. align="center"
  478. width="80"
  479. label="操作">
  480. <template slot-scope="scope">
  481. <el-button type="text" size="small" @click="deletePartAttributeDetails(scope.row)" style="color: #f56c6c;">删除</el-button>
  482. </template>
  483. </el-table-column>
  484. </el-table>
  485. </el-tab-pane>
  486. <!-- 物料缺陷跟踪 -->
  487. <el-tab-pane label="物料缺陷跟踪" name="defectTracking">
  488. <el-form label-position="top" style="margin-left: 2px;">
  489. <el-button type="primary" @click="addDefectTrackingModal()" icon="el-icon-plus">新增</el-button>
  490. <el-button v-if="!editBatchVisible" @click="editDefectTrackingBatchModel">批量编辑</el-button>
  491. <el-button v-if="editBatchVisible" @click="batchDefectTrackingModel" :loading="batchLoading">批量保存</el-button>
  492. </el-form>
  493. <el-table
  494. :data="defectTrackingList"
  495. :height="secondHeight - 68"
  496. border
  497. style="width: 100%;">
  498. <el-table-column
  499. v-for="(item,index) in columnDefectTrackingList" :key="index"
  500. :sortable="item.columnSortable"
  501. :prop="item.columnProp"
  502. :header-align="item.headerAlign"
  503. :show-overflow-tooltip="item.showOverflowTooltip"
  504. :align="item.align"
  505. :fixed="item.fixed==''?false:item.fixed"
  506. :min-width="item.columnWidth"
  507. :label="item.columnLabel">
  508. <template slot-scope="scope">
  509. <span v-if="!item.columnHidden">{{scope.row[item.columnProp]}}</span>
  510. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
  511. </template>
  512. </el-table-column>
  513. <el-table-column
  514. prop="defectThreshold"
  515. header-align="center"
  516. align="center"
  517. min-width="100"
  518. label="不合格阈值">
  519. <template slot-scope="scope">
  520. <span v-if="editBatchVisible">
  521. <el-input :controls="false" v-model="scope.row.defectThreshold"
  522. @input="value=>scope.row.defectThreshold= value.match(/^[1-9]\d*$/) ? value.match(/^[1-9]\d*$/)[0] : ''"
  523. style="height: 11px; width: 98%;">
  524. </el-input>
  525. </span>
  526. <span v-else>
  527. <span>{{scope.row[scope.column.property]}}</span>
  528. </span>
  529. </template>
  530. </el-table-column>
  531. <el-table-column
  532. prop="recoveryBatchCount"
  533. header-align="center"
  534. align="center"
  535. min-width="100"
  536. label="连续合格批次数量">
  537. <template slot-scope="scope">
  538. <span v-if="editBatchVisible">
  539. <el-input :controls="false" v-model="scope.row.recoveryBatchCount"
  540. @input="value=>scope.row.recoveryBatchCount = value.match(/^[1-9]\d*$/) ? value.match(/^[1-9]\d*$/)[0] : ''"
  541. style="height: 11px; width: 98%;">
  542. </el-input>
  543. </span>
  544. <span v-else>
  545. <span>{{scope.row[scope.column.property]}}</span>
  546. </span>
  547. </template>
  548. </el-table-column>
  549. <el-table-column
  550. prop="currentDefectCount"
  551. header-align="center"
  552. align="center"
  553. min-width="100"
  554. label="当前不合格次数">
  555. <template slot-scope="scope">
  556. <span v-if="editBatchVisible">
  557. <el-input :controls="false" v-model="scope.row.currentDefectCount"
  558. @input="value=>scope.row.currentDefectCount = value.match(/^[1-9]\d*$/) ? value.match(/^[1-9]\d*$/)[0] : ''"
  559. style="height: 11px; width: 98%;">
  560. </el-input>
  561. </span>
  562. <span v-else>
  563. <span>{{scope.row[scope.column.property]}}</span>
  564. </span>
  565. </template>
  566. </el-table-column>
  567. <el-table-column
  568. prop="lastDefectCount"
  569. header-align="center"
  570. align="center"
  571. min-width="100"
  572. label="上次不合格次数">
  573. <template slot-scope="scope">
  574. <span v-if="editBatchVisible">
  575. <el-input :controls="false" v-model="scope.row.lastDefectCount"
  576. @input="value=>scope.row.lastDefectCount = value.match(/^[1-9]\d*$/) ? value.match(/^[1-9]\d*$/)[0] : ''"
  577. style="height: 11px; width: 98%;">
  578. </el-input>
  579. </span>
  580. <span v-else>
  581. <span>{{scope.row[scope.column.property]}}</span>
  582. </span>
  583. </template>
  584. </el-table-column>
  585. <el-table-column
  586. header-align="center"
  587. align="center"
  588. width="80"
  589. label="操作">
  590. <template slot-scope="scope">
  591. <el-button type="text" size="small" @click="deleteDefectTracking(scope.row)" style="color: #f56c6c;">删除</el-button>
  592. </template>
  593. </el-table-column>
  594. </el-table>
  595. </el-tab-pane>
  596. <!-- 标签模版设置 -->
  597. <el-tab-pane label="标签模版设置" name="labelTemplate">
  598. <el-form label-position="top" style="margin-left: 2px;">
  599. <el-button type="primary" @click="addLabelTemplateModal()" icon="el-icon-plus">新增</el-button>
  600. </el-form>
  601. <el-table
  602. :data="labelTemplateList"
  603. :height="secondHeight - 68"
  604. border
  605. style="width: 100%;">
  606. <el-table-column
  607. v-for="(item,index) in columnLabelTemplateList" :key="index"
  608. :sortable="item.columnSortable"
  609. :prop="item.columnProp"
  610. :header-align="item.headerAlign"
  611. :show-overflow-tooltip="item.showOverflowTooltip"
  612. :align="item.align"
  613. :fixed="item.fixed==''?false:item.fixed"
  614. :min-width="item.columnWidth"
  615. :label="item.columnLabel">
  616. <template slot-scope="scope">
  617. <span v-if="!item.columnHidden">{{scope.row[item.columnProp]}}</span>
  618. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
  619. </template>
  620. </el-table-column>
  621. <el-table-column
  622. header-align="center"
  623. align="center"
  624. width="100"
  625. label="操作">
  626. <template slot-scope="scope">
  627. <el-link style="cursor: pointer" @click="updateLabelTemplateModal(scope.row)">编辑</el-link>
  628. <el-link style="cursor: pointer" @click="deleteLabelTemplate(scope.row)">删除</el-link>
  629. </template>
  630. </el-table-column>
  631. </el-table>
  632. </el-tab-pane>
  633. </el-tabs>
  634. <!-- 检验模板->快速新增 -->
  635. <el-dialog title="新增" @close="refreshDetailList" :close-on-click-modal="false" v-drag :visible.sync="fastAddFlag" width="1100px">
  636. <div style="font-size: 12px">
  637. <el-form :inline="true" label-position="top" :model="detailData">
  638. <el-form-item :label="'模板编码'">
  639. <el-input v-model="detailData.templateId" clearable style="width: 120px"></el-input>
  640. </el-form-item>
  641. <el-form-item :label="'模板名称'">
  642. <el-input v-model="detailData.templateName" clearable style="width: 120px"></el-input>
  643. </el-form-item>
  644. <el-form-item label="检验类型">
  645. <el-select v-model="detailData.inspectionTypeNo" @change="checkInspectionType" placeholder="请选择">
  646. <el-option
  647. v-for = "i in options"
  648. :key = "i.inspectionTypeNo"
  649. :label = "i.inspectionTypeName"
  650. :value = "i.inspectionTypeNo">
  651. </el-option>
  652. </el-select>
  653. </el-form-item>
  654. <el-form-item :label="' '">
  655. <el-button type="primary" @click="checkInspectionType2">查询</el-button>
  656. </el-form-item>
  657. <el-form-item :label="' '" style="margin-left: 63px">
  658. <el-button type="primary" @click="getOperationList" v-if="this.detailData.inspectionTypeNo === '101' || this.detailData.inspectionTypeNo === '102' || this.detailData.inspectionTypeNo === '103' || this.detailData.inspectionTypeNo === '104' || this.detailData.inspectionTypeNo === '106' || this.detailData.inspectionTypeNo === '107'" style="width: 63px" >工序</el-button>
  659. <el-button type="primary" @click="getManufacturerList" v-if="this.detailData.inspectionTypeNo === '105'" style="width: 63px">供应商</el-button>
  660. <el-button type="primary" @click="getCustomerList" v-if="this.detailData.inspectionTypeNo === '109'" style="width: 63px">客户</el-button>
  661. </el-form-item>
  662. <el-form-item :label="' '" style="margin-left: 195px">
  663. <el-button type="primary" @click="getAllResourceList" v-if="this.detailData.inspectionTypeNo === '101' || this.detailData.inspectionTypeNo === '102' || this.detailData.inspectionTypeNo === '103' || this.detailData.inspectionTypeNo === '104' || this.detailData.inspectionTypeNo === '106' || this.detailData.inspectionTypeNo === '107'" style="width: 63px">机台</el-button>
  664. </el-form-item>
  665. </el-form>
  666. </div>
  667. <el-container>
  668. <el-header style="width: 1080px;height: 200px;padding: 0 0 0 0">
  669. <el-row :gutter="5">
  670. <el-col :span="span1">
  671. <span style="font-size: 12px" >可选模板:</span>
  672. <el-table
  673. height="210px"
  674. :data="itemList1"
  675. border
  676. ref="itemTable1"
  677. @row-click="itemClickRow1"
  678. @selection-change="selectionItem1"
  679. highlight-current-row
  680. style="width: 100%">
  681. <el-table-column
  682. type="selection"
  683. header-align="center"
  684. align="center"
  685. width="50">
  686. </el-table-column>
  687. <el-table-column
  688. prop="templateId"
  689. header-align="center"
  690. align="center"
  691. min-width="80"
  692. label="模板编码">
  693. </el-table-column>
  694. <el-table-column
  695. prop="templateName"
  696. header-align="center"
  697. align="left"
  698. min-width="200"
  699. label="模板名称">
  700. </el-table-column>
  701. <el-table-column
  702. prop="inspectionTypeName"
  703. header-align="center"
  704. align="center"
  705. min-width="60"
  706. label="检验类型">
  707. </el-table-column>
  708. </el-table>
  709. </el-col>
  710. <el-col v-if="detailData.inspectionTypeNo === '105' || detailData.inspectionTypeNo === '101' || detailData.inspectionTypeNo === '109' || detailData.inspectionTypeNo === '107'" :span="span2" style="margin-top: 25px">
  711. <el-table
  712. v-if="detailData.inspectionTypeNo === '105'"
  713. height="210px"
  714. :data="selectionManufacturer2"
  715. border
  716. highlight-current-row
  717. style="width: 100%">
  718. <el-table-column
  719. prop="manufacturerID"
  720. header-align="center"
  721. align="center"
  722. min-width="100"
  723. label="供应商编码">
  724. </el-table-column>
  725. <el-table-column
  726. prop="manufacturerName"
  727. header-align="center"
  728. align="left"
  729. min-width="150"
  730. label="供应商名称">
  731. </el-table-column>
  732. </el-table>
  733. <el-table
  734. v-else-if="detailData.inspectionTypeNo === '109'"
  735. height="210px"
  736. :data="selectionCustomer2"
  737. border
  738. highlight-current-row
  739. style="width: 100%">
  740. <el-table-column
  741. prop="customerID"
  742. header-align="center"
  743. align="center"
  744. min-width="100"
  745. label="客户编码">
  746. </el-table-column>
  747. <el-table-column
  748. prop="customerName"
  749. header-align="center"
  750. align="left"
  751. min-width="150"
  752. label="客户名称">
  753. </el-table-column>
  754. </el-table>
  755. <el-table
  756. v-else
  757. height="210px"
  758. :data="operationSelections"
  759. border
  760. highlight-current-row
  761. style="width: 100%">
  762. <el-table-column
  763. prop="operationDesc"
  764. header-align="center"
  765. align="center"
  766. label="工序">
  767. </el-table-column>
  768. </el-table>
  769. </el-col>
  770. <el-col v-if="detailData.inspectionTypeNo === '101' || detailData.inspectionTypeNo === '107'" :span="span3" style="margin-top: 25px">
  771. <el-table
  772. height="210px"
  773. :data="resourceSelections"
  774. border
  775. highlight-current-row
  776. style="width: 100%">
  777. <el-table-column
  778. prop="resourceId"
  779. header-align="center"
  780. align="center"
  781. min-width="100"
  782. label="机台编码">
  783. </el-table-column>
  784. <el-table-column
  785. prop="resourceDesc"
  786. header-align="center"
  787. align="left"
  788. min-width="150"
  789. label="机台名称">
  790. </el-table-column>
  791. </el-table>
  792. </el-col>
  793. </el-row>
  794. </el-header>
  795. <el-main style="width: 880px;height: 25px;margin-top: 50px;padding: 0 0 0 0;text-align:center">
  796. <div>
  797. <el-button type="primary" @click="addItem">添加<i class="el-icon-caret-bottom el-icon--right"></i></el-button>
  798. <el-button type="primary" @click="deleteItem">删除<i class="el-icon-caret-top el-icon--right"></i></el-button>
  799. </div>
  800. </el-main>
  801. <el-footer style="width: 1080px;height: 222px;padding: 0 0 0 0;margin-top: -4px">
  802. <span style="font-size: 12px" >已有模板:</span>
  803. <div class="rq">
  804. <el-table
  805. height="200px"
  806. :data="itemList2"
  807. border
  808. ref="itemTable2"
  809. @row-click="itemClickRow2"
  810. @selection-change="selectionItem2"
  811. highlight-current-row
  812. style="width: 100%">
  813. <el-table-column
  814. type="selection"
  815. header-align="center"
  816. align="center"
  817. width="50">
  818. </el-table-column>
  819. <el-table-column
  820. prop="templateId"
  821. header-align="center"
  822. align="center"
  823. min-width="80"
  824. label="模板编码">
  825. </el-table-column>
  826. <el-table-column
  827. prop="templateName"
  828. header-align="center"
  829. align="center"
  830. min-width="200"
  831. label="模板名称">
  832. </el-table-column>
  833. <el-table-column
  834. prop="operation"
  835. header-align="center"
  836. align="center"
  837. min-width="100"
  838. label="工序">
  839. </el-table-column>
  840. <el-table-column
  841. prop="resourceID"
  842. header-align="center"
  843. align="center"
  844. min-width="100"
  845. label="机台">
  846. </el-table-column>
  847. <el-table-column
  848. prop="manufacturerName"
  849. header-align="center"
  850. align="center"
  851. min-width="200"
  852. label="供应商">
  853. </el-table-column>
  854. <el-table-column
  855. prop="customerName"
  856. header-align="center"
  857. align="center"
  858. min-width="200"
  859. label="客户">
  860. </el-table-column>
  861. <el-table-column
  862. prop="inspectionTypeName"
  863. header-align="center"
  864. align="center"
  865. min-width="60"
  866. label="检验类型">
  867. </el-table-column>
  868. </el-table>
  869. </div>
  870. </el-footer>
  871. </el-container>
  872. <el-footer style="height:35px;margin-top: 18px;text-align:center">
  873. <el-button type="primary" @click="fastAddFlag = false">关闭</el-button>
  874. </el-footer>
  875. </el-dialog>
  876. <!-- 工序 -->
  877. <el-dialog title="工序清单" :close-on-click-modal="false" v-drag :visible.sync="operationModelFlag" width="420px">
  878. <div class="rq">
  879. <el-form :inline="true" label-position="top" :model="operationData">
  880. <el-form-item :label="'工序:'">
  881. <el-input v-model="operationData.operationDesc" clearable style="width: 120px"></el-input>
  882. </el-form-item>
  883. <el-form-item :label="' '">
  884. <el-button type="primary" @click="getOperationList2">查询</el-button>
  885. </el-form-item>
  886. </el-form>
  887. <el-table
  888. :height="300"
  889. :data="operationList"
  890. ref="operationTable"
  891. @selection-change="selectionOperationChangeHandle"
  892. @select="operationSelect"
  893. :row-key="getRowKeys"
  894. border
  895. style="width: 100%;">
  896. <el-table-column
  897. type="selection"
  898. header-align="center"
  899. align="center"
  900. :reserve-selection="true"
  901. width="50">
  902. </el-table-column>
  903. <el-table-column
  904. prop="operationDesc"
  905. header-align="center"
  906. align="center"
  907. label="工序">
  908. </el-table-column>
  909. </el-table>
  910. </div>
  911. <el-footer style="height:40px;margin-top: 20px;text-align:center">
  912. <el-button type="primary" @click="confirmOperation">确认</el-button>
  913. </el-footer>
  914. </el-dialog>
  915. <!-- 机台 -->
  916. <el-dialog title="机台清单" :close-on-click-modal="false" v-drag :visible.sync="resourceModelFlag" width="420px">
  917. <div class="rq">
  918. <el-form :inline="true" label-position="top" :model="resourceData">
  919. <el-form-item :label="'机台编码'">
  920. <el-input v-model="resourceData.resourceId" clearable style="width: 120px"></el-input>
  921. </el-form-item>
  922. <el-form-item :label="'机台名称'">
  923. <el-input v-model="resourceData.resourceDesc" clearable style="width: 120px"></el-input>
  924. </el-form-item>
  925. <el-form-item :label="' '">
  926. <el-button type="primary" @click="getAllResourceList2">查询</el-button>
  927. </el-form-item>
  928. </el-form>
  929. <el-table
  930. :height="300"
  931. :data="resourceList"
  932. ref="resourceTable"
  933. @selection-change="selectionResourceChangeHandle"
  934. @select="resourceSelect"
  935. :row-key="getRowKeys2"
  936. border
  937. style="width: 100%;">
  938. <el-table-column
  939. type="selection"
  940. header-align="center"
  941. align="center"
  942. :reserve-selection="true"
  943. width="50">
  944. </el-table-column>
  945. <el-table-column
  946. prop="resourceId"
  947. header-align="center"
  948. align="center"
  949. label="机台编码">
  950. </el-table-column>
  951. <el-table-column
  952. prop="resourceDesc"
  953. header-align="center"
  954. align="center"
  955. label="机台名称">
  956. </el-table-column>
  957. </el-table>
  958. </div>
  959. <el-footer style="height:40px;margin-top: 20px;text-align:center">
  960. <el-button type="primary" @click="confirmResource">确认</el-button>
  961. </el-footer>
  962. </el-dialog>
  963. <!-- 供应商 -->
  964. <el-dialog title="供应商清单" :close-on-click-modal="false" v-drag :visible.sync="manufacturerModelFlag" width="520px">
  965. <div class="rq">
  966. <el-form :inline="true" label-position="top" :model="manufacturerData">
  967. <el-form-item :label="'供应商编码:'">
  968. <el-input v-model="manufacturerData.manufacturerID" clearable style="width: 120px"></el-input>
  969. </el-form-item>
  970. <el-form-item :label="'供应商名称:'">
  971. <el-input v-model="manufacturerData.manufacturerName" clearable style="width: 120px"></el-input>
  972. </el-form-item>
  973. <el-form-item :label="' '">
  974. <el-button type="primary" @click="getManufacturerList2">查询</el-button>
  975. </el-form-item>
  976. </el-form>
  977. <el-table
  978. :height="300"
  979. :data="manufacturerList"
  980. ref="manufacturerTable"
  981. @row-click="manufacturerClickRow"
  982. @selection-change="selectionManufacturerChangeHandle"
  983. :row-key="getRowKeys3"
  984. border
  985. style="width: 100%;">
  986. <el-table-column
  987. type="selection"
  988. header-align="center"
  989. align="center"
  990. :reserve-selection="true"
  991. width="50">
  992. </el-table-column>
  993. <el-table-column
  994. prop="manufacturerID"
  995. header-align="center"
  996. align="center"
  997. label="供应商编码">
  998. </el-table-column>
  999. <el-table-column
  1000. prop="manufacturerName"
  1001. header-align="center"
  1002. align="center"
  1003. label="供应商名称">
  1004. </el-table-column>
  1005. </el-table>
  1006. </div>
  1007. <el-footer style="height:40px;margin-top: 20px;text-align:center">
  1008. <el-button type="primary" @click="confirmManufacturer">确认</el-button>
  1009. <el-button type="primary" @click="manufacturerModelFlag = false">关闭</el-button>
  1010. </el-footer>
  1011. </el-dialog>
  1012. <!-- 客户 -->
  1013. <el-dialog title="客户清单" :close-on-click-modal="false" v-drag :visible.sync="customerModelFlag" width="520px">
  1014. <div class="rq">
  1015. <el-form :inline="true" label-position="top" :model="customerData">
  1016. <el-form-item :label="'客户编码:'">
  1017. <el-input v-model="customerData.customerID" clearable style="width: 120px"></el-input>
  1018. </el-form-item>
  1019. <el-form-item :label="'客户名称:'">
  1020. <el-input v-model="customerData.customerName" clearable style="width: 120px"></el-input>
  1021. </el-form-item>
  1022. <el-form-item :label="' '">
  1023. <el-button type="primary" @click="getCustomerList2">查询</el-button>
  1024. </el-form-item>
  1025. </el-form>
  1026. <el-table
  1027. :height="300"
  1028. :data="customerList"
  1029. ref="customerTable"
  1030. @row-click="customerClickRow"
  1031. @selection-change="selectionCustomerChangeHandle"
  1032. :row-key="getRowKeys4"
  1033. border
  1034. style="width: 100%;">
  1035. <el-table-column
  1036. type="selection"
  1037. header-align="center"
  1038. align="center"
  1039. :reserve-selection="true"
  1040. width="50">
  1041. </el-table-column>
  1042. <el-table-column
  1043. prop="customerID"
  1044. header-align="center"
  1045. align="center"
  1046. label="客户编码">
  1047. </el-table-column>
  1048. <el-table-column
  1049. prop="customerName"
  1050. header-align="center"
  1051. align="center"
  1052. label="客户名称">
  1053. </el-table-column>
  1054. </el-table>
  1055. </div>
  1056. <el-footer style="height:40px;margin-top: 20px;text-align:center">
  1057. <el-button type="primary" @click="confirmCustomer">确认</el-button>
  1058. <el-button type="primary" @click="customerModelFlag = false">关闭</el-button>
  1059. </el-footer>
  1060. </el-dialog>
  1061. <!-- sop文件清单 -->
  1062. <el-dialog title="SOP文件清单" :close-on-click-modal="false" v-drag :visible.sync="sopFileModelFlag" width="800px">
  1063. <el-form :inline="true" label-position="top" style="margin-left: 7px;margin-top: -5px;">
  1064. <el-form-item :label="' '">
  1065. <el-button type="primary" @click="uploadSopFile">上传文件</el-button>
  1066. </el-form-item>
  1067. <el-form-item label="检验类型" style="margin-left: 448px">
  1068. <el-select v-model="sopData.inspectionTypeNo" placeholder="请选择">
  1069. <el-option label="全部" value=""></el-option>
  1070. <el-option
  1071. v-for = "i in options"
  1072. :key = "i.inspectionTypeNo"
  1073. :label = "i.inspectionTypeName"
  1074. :value = "i.inspectionTypeNo">
  1075. </el-option>
  1076. </el-select>
  1077. </el-form-item>
  1078. <el-form-item :label="' '">
  1079. <el-button type="primary" @click="getFileContentList">查询</el-button>
  1080. </el-form-item>
  1081. </el-form>
  1082. <el-table
  1083. :height="350"
  1084. :data="sopList"
  1085. border
  1086. style="width: 100%; ">
  1087. <el-table-column
  1088. v-for="(item,index) in sopColumnList" :key="index"
  1089. :sortable="item.columnSortable"
  1090. :prop="item.columnProp"
  1091. :header-align="item.headerAlign"
  1092. :show-overflow-tooltip="item.showOverflowTooltip"
  1093. :align="item.align"
  1094. :fixed="item.fixed===''?false:item.fixed"
  1095. :min-width="item.columnWidth"
  1096. :label="item.columnLabel">
  1097. <template slot-scope="scope">
  1098. <span v-if="!item.columnHidden">{{scope.row[item.columnProp]}}</span>
  1099. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
  1100. </template>
  1101. </el-table-column>
  1102. <el-table-column
  1103. fixed="right"
  1104. header-align="center"
  1105. align="center"
  1106. width="100"
  1107. label="操作">
  1108. <template slot-scope="scope">
  1109. <el-link style="cursor: pointer" @click="downloadFile(scope.row)">下载</el-link>
  1110. <el-link style="cursor: pointer" @click="deleteFile(scope.row)">删除</el-link>
  1111. </template>
  1112. </el-table-column>
  1113. </el-table>
  1114. </el-dialog>
  1115. <!-- 物料缺陷跟踪新增 -->
  1116. <el-dialog title="物料缺陷跟踪" :close-on-click-modal="false" v-drag :visible.sync="defectTrackingModal" width="490px">
  1117. <el-form :inline="true" label-position="top" :model="defectTrackingData" style="margin-left: 7px;margin-top: -5px;">
  1118. <el-form-item>
  1119. <span v-if="defectTrackingDisableFlag" slot="label">供应商</span>
  1120. <span v-else style="cursor: pointer" slot="label" @click="getBaseList(506)"><a href="#">供应商</a></span>
  1121. <el-input v-model="defectTrackingData.supplierId" :disabled="defectTrackingDisableFlag" @change="supplierBlur(506)" style="width: 100px"></el-input>
  1122. <el-input v-model="defectTrackingData.supplierName" disabled style="width: 340px"></el-input>
  1123. </el-form-item>
  1124. </el-form>
  1125. <el-form :inline="true" label-position="top" style="margin-left: 7px">
  1126. <el-form-item label="不合格阈值">
  1127. <el-input-number :controls="false" :step="0" v-model="defectTrackingData.defectThreshold" style="width: 100px"></el-input-number>
  1128. </el-form-item>
  1129. <el-form-item label="连续合格批次数量">
  1130. <el-input-number :controls="false" :step="0" v-model="defectTrackingData.recoveryBatchCount" style="width: 100px"></el-input-number>
  1131. </el-form-item>
  1132. <el-form-item label="当前不合格次数">
  1133. <el-input-number :controls="false" :step="0" v-model="defectTrackingData.currentDefectCount" style="width: 100px"></el-input-number>
  1134. </el-form-item>
  1135. <el-form-item label="上次不合格次数">
  1136. <el-input-number :controls="false" :step="0" v-model="defectTrackingData.lastDefectCount" style="width: 100px"></el-input-number>
  1137. </el-form-item>
  1138. </el-form>
  1139. <el-footer style="height:35px;margin-top: 15px;text-align:center">
  1140. <el-button type="primary" @click="saveDefectTracking()">保存</el-button>
  1141. <el-button type="primary" @click="defectTrackingModal = false">关闭</el-button>
  1142. </el-footer>
  1143. </el-dialog>
  1144. <!-- 标签模版设置新增 -->
  1145. <el-dialog title="标签模版设置" :close-on-click-modal="false" v-drag :visible.sync="labelTemplateModal" width="490px">
  1146. <el-form :inline="true" label-position="top" :model="labelTemplateData" style="margin-left: 7px;margin-top: -5px;">
  1147. <el-form-item>
  1148. <span v-if="labelTemplateDisableFlag" slot="label">标签类型</span>
  1149. <span v-else style="cursor: pointer" slot="label" @click="getBaseList(1099, 2)"><a href="#">标签类型</a></span>
  1150. <el-input v-model="labelTemplateData.labelTypeTb" :disabled="labelTemplateDisableFlag" @change="labelTemplateBlur(1099)" style="width: 100px"></el-input>
  1151. <el-input v-model="labelTemplateData.labelType" disabled style="width: 230px"></el-input>
  1152. </el-form-item>
  1153. <el-form-item label=" ">
  1154. <el-select v-model="labelTemplateData.defaultFlag" style="width: 100px">
  1155. <el-option label="默认" value="1"></el-option>
  1156. <el-option label="非默认" value="0"></el-option>
  1157. </el-select>
  1158. </el-form-item>
  1159. </el-form>
  1160. <el-footer style="height:35px;margin-top: 15px;text-align:center">
  1161. <el-button type="primary" @click="saveLabelTemplate()">保存</el-button>
  1162. <el-button type="primary" @click="labelTemplateModal = false">关闭</el-button>
  1163. </el-footer>
  1164. </el-dialog>
  1165. <Chooselist ref="baseList" @getBaseData="getBaseData"></Chooselist>
  1166. <!-- 上传sop文件的modal -->
  1167. <qcSOPUploadFile ref="qcSOPUploadFile" @refreshPageTables="getFileContentList()" v-drag></qcSOPUploadFile>
  1168. <!-- 导入 -->
  1169. <qcUpload ref="qcUpload" @refreshPageTables="getDataList()" v-drag></qcUpload>
  1170. </div>
  1171. </template>
  1172. <script>
  1173. import {
  1174. qcPartAttributeSearch, // 查询物料属性
  1175. qcPartAttributeEdit, // 修改物料属性
  1176. searchPartAttributeDetails, // 查询物料属性模板
  1177. savePartAttributeDetails, // 新增物料属性模板
  1178. deletePartAttributeDetails, // 删除物料属性模板
  1179. saveAttributeDetailed, // 新增物料属性模板详情
  1180. getPartTemplateLists, // 获取模板列表
  1181. inspectionTypeSearch, // 搜索所有检验类型
  1182. getOperationDescList, // 查询工序列表
  1183. getManufacturerList, // 查询供应商列表
  1184. getAllResourceList, // 查询机台列表
  1185. getSiteAndBuByUserName,
  1186. searchPartInfo, // 查询物料信息
  1187. getPartDefectTracking, // 查询跟踪缺陷
  1188. saveDefectTracking, // 新增跟踪缺陷
  1189. deleteDefectTracking, // 删除跟踪缺陷
  1190. updateDefectTracking, // 编辑跟踪缺陷
  1191. getPartLabelTemplate, // 查询标签模版设置
  1192. saveLabelTemplate, // 新增标签模版设置
  1193. deleteLabelTemplate, // 删除标签模版设置
  1194. updateLabelTemplate, // 编辑标签模版设置
  1195. getCustomerList, // 查询客户列表
  1196. } from "@/api/qc/qc.js"
  1197. import {getTableDefaultListLanguage, getTableUserListLanguage} from "@/api/table.js"
  1198. import Chooselist from '@/views/modules/common/Chooselist_eam'
  1199. import {getFileContentList, downLoadObjectFile} from '@/api/eam/eam_object_list.js'
  1200. import {userFavoriteList, saveUserFavorite, removeUserFavorite} from '@/api/userFavorite.js'
  1201. import {deleteObjectFile} from '@/api/eam/eam.js'
  1202. import excel from "@/utils/excel-util.js"
  1203. import {verifyData} from "@/api/chooselist/chooselist.js"
  1204. import qcUpload from "./qc_upload"
  1205. import qcSOPUploadFile from "./qc_SOP_upload_file"
  1206. import SopListComponent from "./sopListComponent"
  1207. import BomListComponent from "./bomListComponent"
  1208. import RoutingListComponent from "./routingListComponent"
  1209. export default {
  1210. components: {
  1211. qcSOPUploadFile,
  1212. Chooselist,
  1213. qcUpload,
  1214. SopListComponent,
  1215. BomListComponent,
  1216. RoutingListComponent
  1217. },
  1218. data () {
  1219. return {
  1220. columnsProp:['createBy', 'updateBy'],
  1221. // 是否收藏
  1222. favorite: false,
  1223. // 导出 start
  1224. exportData: [],
  1225. exportName: "根据物料设置检验模板" + this.dayjs().format('YYYYMMDDHHmmss'),
  1226. exportHeader: ["根据物料设置检验模板"],
  1227. exportFooter: [],
  1228. exportList: [],
  1229. // 导出 end
  1230. tagNo: '',
  1231. tagType: '',
  1232. searchData: {
  1233. site: '',
  1234. userName: this.$store.state.user.name,
  1235. partNo: '',
  1236. partDesc: '',
  1237. cinvSourceCode: '',
  1238. sku: '',
  1239. familyID: '',
  1240. familyName: '',
  1241. buDesc: '',
  1242. attributeType: 'A',
  1243. page: 1,
  1244. limit: 10,
  1245. },
  1246. height: 200,
  1247. pageIndex: 1,
  1248. pageSize: 20,
  1249. totalPage: 0,
  1250. modalFlag: false,
  1251. modalDisableFlag: false,
  1252. modalData: {
  1253. site: '',
  1254. bu: '',
  1255. buNo: '',
  1256. flag: '',
  1257. partNo: '',
  1258. partDesc: '',
  1259. partTypeDB: '',
  1260. partType: '',
  1261. umId: '',
  1262. spec: '',
  1263. expirationFlag: '',
  1264. expirationDay: '',
  1265. expirationWarningDay: '',
  1266. exceedInRatio: '',
  1267. exceedOutRatio: '',
  1268. inboundWarehouseId: '',
  1269. inboundWarehouseName: '',
  1270. outboundWarehouseId: '',
  1271. outboundWarehouseName: '',
  1272. issueMethod: '',
  1273. inboundLocationId: '',
  1274. inboundLocationName: '',
  1275. active: '',
  1276. iqcExempt: '',
  1277. faiExempt: '',
  1278. ipqcExempt: '',
  1279. pqcExempt: '',
  1280. fqcExempt: '',
  1281. oqcExempt: '',
  1282. firstInspectionDuration: '',
  1283. nextInspectionDuration: '',
  1284. totalInspectionDuration: '',
  1285. lastUpdateBy: this.$store.state.user.name,
  1286. partDescEn: '',
  1287. standardValue: '',
  1288. defaultValue: '',
  1289. maxValue: '',
  1290. minValue: '',
  1291. adhesiveActivePeriodFlag: '',
  1292. thawingDuration: '',
  1293. accumulatedExposureDuration: ''
  1294. },
  1295. detailData: {
  1296. site: '',
  1297. buNo: '',
  1298. partNo: '',
  1299. attributeNo: '',
  1300. partDesc: '',
  1301. cinvSourceCode: '',
  1302. sku: '',
  1303. attributeType: 'A',
  1304. inspectionTypeNo: '',
  1305. templateId: '',
  1306. templateName: '',
  1307. createBy: this.$store.state.user.name
  1308. },
  1309. defectTrackingData: {
  1310. site: '',
  1311. buNo: '',
  1312. partNo: '',
  1313. supplierId: '',
  1314. supplierName: '',
  1315. defectThreshold: '',
  1316. recoveryBatchCount: '',
  1317. currentDefectCount: '',
  1318. lastDefectCount: '',
  1319. },
  1320. labelTemplateData: {
  1321. flag: '',
  1322. site: '',
  1323. buNo: '',
  1324. partNo: '',
  1325. labelTypeTb: '',
  1326. labelType: '',
  1327. defaultFlag: '',
  1328. createBy: '',
  1329. },
  1330. dataList: [],
  1331. detailList: [],
  1332. defectTrackingList: [],
  1333. labelTemplateList: [],
  1334. dataListLoading: false,
  1335. // 展示列集
  1336. columnList: [
  1337. {
  1338. userId: this.$store.state.user.name,
  1339. functionId: 301003,
  1340. serialNumber: '301003Table1BuDesc',
  1341. tableId: "301003Table1",
  1342. tableName: "物料属性设置表",
  1343. columnProp: 'buDesc',
  1344. headerAlign: "center",
  1345. align: "center",
  1346. columnLabel: 'BU',
  1347. columnHidden: false,
  1348. columnImage: false,
  1349. columnSortable: false,
  1350. sortLv: 0,
  1351. status: true,
  1352. fixed: '',
  1353. columnWidth: 100,
  1354. },
  1355. {
  1356. userId: this.$store.state.user.name,
  1357. functionId: 301003,
  1358. serialNumber: '301003Table1PartNo',
  1359. tableId: "301003Table1",
  1360. tableName: "物料属性设置表",
  1361. columnProp: 'partNo',
  1362. headerAlign: "center",
  1363. align: "center",
  1364. columnLabel: '物料编码',
  1365. columnHidden: false,
  1366. columnImage: false,
  1367. columnSortable: false,
  1368. sortLv: 0,
  1369. status: true,
  1370. fixed: '',
  1371. columnWidth: 120,
  1372. },
  1373. {
  1374. userId: this.$store.state.user.name,
  1375. functionId: 301003,
  1376. serialNumber: '301003Table1SKU',
  1377. tableId: "301003Table1",
  1378. tableName: "物料属性设置表",
  1379. columnProp: 'sku',
  1380. headerAlign: "center",
  1381. align: "center",
  1382. columnLabel: 'SKU',
  1383. columnHidden: false,
  1384. columnImage: false,
  1385. columnSortable: false,
  1386. sortLv: 0,
  1387. status: true,
  1388. fixed: '',
  1389. columnWidth: 120,
  1390. },
  1391. {
  1392. userId: this.$store.state.user.name,
  1393. functionId: 301003,
  1394. serialNumber: '301003Table1PartDesc',
  1395. tableId: "301003Table1",
  1396. tableName: "物料属性设置表",
  1397. columnProp: 'partDesc',
  1398. headerAlign: "center",
  1399. align: "left",
  1400. columnLabel: '物料名称',
  1401. columnHidden: false,
  1402. columnImage: false,
  1403. columnSortable: false,
  1404. sortLv: 0,
  1405. status: true,
  1406. fixed: '',
  1407. columnWidth: 300,
  1408. },
  1409. {
  1410. userId: this.$store.state.user.name,
  1411. functionId: 301003,
  1412. serialNumber: '301003Table1FamilyName',
  1413. tableId: "301003Table1",
  1414. tableName: "物料属性设置表",
  1415. columnProp: 'familyName',
  1416. headerAlign: "center",
  1417. align: "left",
  1418. columnLabel: '物料类别',
  1419. columnHidden: false,
  1420. columnImage: false,
  1421. columnSortable: false,
  1422. sortLv: 0,
  1423. status: true,
  1424. fixed: '',
  1425. columnWidth: 150,
  1426. },
  1427. {
  1428. userId: this.$store.state.user.name,
  1429. functionId: 301003,
  1430. serialNumber: '301003Table1Spec',
  1431. tableId: "301003Table1",
  1432. tableName: "物料属性设置表",
  1433. columnProp: 'spec',
  1434. headerAlign: "center",
  1435. align: "left",
  1436. columnLabel: '规格型号',
  1437. columnHidden: false,
  1438. columnImage: false,
  1439. columnSortable: false,
  1440. sortLv: 0,
  1441. status: true,
  1442. fixed: '',
  1443. columnWidth: 300,
  1444. },
  1445. {
  1446. userId: this.$store.state.user.name,
  1447. functionId: 301003,
  1448. serialNumber: '301003Table1UmName',
  1449. tableId: "301003Table1",
  1450. tableName: "物料属性设置表",
  1451. columnProp: 'umName',
  1452. headerAlign: "center",
  1453. align: "left",
  1454. columnLabel: '单位',
  1455. columnHidden: false,
  1456. columnImage: false,
  1457. columnSortable: false,
  1458. sortLv: 0,
  1459. status: true,
  1460. fixed: '',
  1461. columnWidth: 100,
  1462. },
  1463. {
  1464. userId: this.$store.state.user.name,
  1465. functionId: 301003,
  1466. serialNumber: '301003Table1AttributeRemark',
  1467. tableId: "301003Table1",
  1468. tableName: "物料属性设置表",
  1469. columnProp: 'attributeRemark',
  1470. headerAlign: "center",
  1471. align: "left",
  1472. columnLabel: '备注',
  1473. columnHidden: false,
  1474. columnImage: false,
  1475. columnSortable: false,
  1476. sortLv: 0,
  1477. status: true,
  1478. fixed: '',
  1479. columnWidth: 200,
  1480. },
  1481. {
  1482. userId: this.$store.state.user.name,
  1483. functionId: 301003,
  1484. serialNumber: '301003Table1CreateTime',
  1485. tableId: "301003Table1",
  1486. tableName: "物料属性设置表",
  1487. columnProp: 'createTime',
  1488. headerAlign: "center",
  1489. align: "center",
  1490. columnLabel: '创建时间',
  1491. columnHidden: false,
  1492. columnImage: false,
  1493. columnSortable: false,
  1494. sortLv: 0,
  1495. status: true,
  1496. fixed: '',
  1497. columnWidth: 170,
  1498. },
  1499. {
  1500. userId: this.$store.state.user.name,
  1501. functionId: 301003,
  1502. serialNumber: '301003Table1CreateBy',
  1503. tableId: "301003Table1",
  1504. tableName: "物料属性设置表",
  1505. columnProp: 'createBy',
  1506. headerAlign: "center",
  1507. align: "center",
  1508. columnLabel: '创建人',
  1509. columnHidden: false,
  1510. columnImage: false,
  1511. columnSortable: false,
  1512. sortLv: 0,
  1513. status: true,
  1514. fixed: '',
  1515. columnWidth: 100,
  1516. },
  1517. {
  1518. userId: this.$store.state.user.name,
  1519. functionId: 301003,
  1520. serialNumber: '301003Table1UpdateDate',
  1521. tableId: "301003Table1",
  1522. tableName: "物料属性设置表",
  1523. columnProp: 'updateDate',
  1524. headerAlign: "center",
  1525. align: "center",
  1526. columnLabel: '更新时间',
  1527. columnHidden: false,
  1528. columnImage: false,
  1529. columnSortable: false,
  1530. sortLv: 0,
  1531. status: true,
  1532. fixed: '',
  1533. columnWidth: 170,
  1534. },
  1535. {
  1536. userId: this.$store.state.user.name,
  1537. functionId: 301003,
  1538. serialNumber: '301003Table1UpdateBy',
  1539. tableId: "301003Table1",
  1540. tableName: "物料属性设置表",
  1541. columnProp: 'updateBy',
  1542. headerAlign: "center",
  1543. align: "center",
  1544. columnLabel: '更新人',
  1545. columnHidden: false,
  1546. columnImage: false,
  1547. columnSortable: false,
  1548. sortLv: 0,
  1549. status: true,
  1550. fixed: '',
  1551. columnWidth: 100,
  1552. },
  1553. ],
  1554. columnDetailList: [
  1555. {
  1556. userId: this.$store.state.user.name,
  1557. functionId: 301003,
  1558. serialNumber: '301003Table2TemplateId',
  1559. tableId: "301003Table2",
  1560. tableName: "检验模板清单表",
  1561. columnProp: 'templateId',
  1562. headerAlign: "center",
  1563. align: "left",
  1564. columnLabel: '模板编码',
  1565. columnHidden: false,
  1566. columnImage: false,
  1567. columnSortable: false,
  1568. sortLv: 0,
  1569. status: true,
  1570. fixed: '',
  1571. columnWidth: 120,
  1572. },
  1573. {
  1574. userId: this.$store.state.user.name,
  1575. functionId: 301003,
  1576. serialNumber: '301003Table2TemplateName',
  1577. tableId: "301003Table2",
  1578. tableName: "检验模板清单表",
  1579. columnProp: 'templateName',
  1580. headerAlign: "center",
  1581. align: "left",
  1582. columnLabel: '模板名称',
  1583. columnHidden: false,
  1584. columnImage: false,
  1585. columnSortable: false,
  1586. sortLv: 0,
  1587. status: true,
  1588. fixed: '',
  1589. columnWidth: 200,
  1590. },
  1591. {
  1592. userId: this.$store.state.user.name,
  1593. functionId: 301003,
  1594. serialNumber: '301003Table2InspectionTypeName',
  1595. tableId: "301003Table2",
  1596. tableName: "检验模板清单表",
  1597. columnProp: 'inspectionTypeName',
  1598. headerAlign: "center",
  1599. align: "center",
  1600. columnLabel: '检验类型',
  1601. columnHidden: false,
  1602. columnImage: false,
  1603. columnSortable: false,
  1604. sortLv: 0,
  1605. status: true,
  1606. fixed: '',
  1607. columnWidth: 100,
  1608. },
  1609. {
  1610. userId: this.$store.state.user.name,
  1611. functionId: 301003,
  1612. serialNumber: '301003Table2TemplateVersion',
  1613. tableId: "301003Table2",
  1614. tableName: "检验模板清单表",
  1615. columnProp: 'templateVersion',
  1616. headerAlign: "center",
  1617. align: "right",
  1618. columnLabel: '版本号',
  1619. columnHidden: false,
  1620. columnImage: false,
  1621. columnSortable: false,
  1622. sortLv: 0,
  1623. status: true,
  1624. fixed: '',
  1625. columnWidth: 100,
  1626. },
  1627. {
  1628. userId: this.$store.state.user.name,
  1629. functionId: 301003,
  1630. serialNumber: '301003Table2DefaultSamplingQuantity',
  1631. tableId: "301003Table2",
  1632. tableName: "检验模板清单表",
  1633. columnProp: 'defaultSamplingQuantity',
  1634. headerAlign: "center",
  1635. align: "right",
  1636. columnLabel: '默认抽样数量',
  1637. columnHidden: false,
  1638. columnImage: false,
  1639. columnSortable: false,
  1640. sortLv: 0,
  1641. status: true,
  1642. fixed: '',
  1643. columnWidth: 100,
  1644. },
  1645. {
  1646. userId: this.$store.state.user.name,
  1647. functionId: 301003,
  1648. serialNumber: '301003Table2DefaultSamplingProportion',
  1649. tableId: "301003Table2",
  1650. tableName: "检验模板清单表",
  1651. columnProp: 'defaultSamplingProportion',
  1652. headerAlign: "center",
  1653. align: "right",
  1654. columnLabel: '默认抽样比例',
  1655. columnHidden: false,
  1656. columnImage: false,
  1657. columnSortable: false,
  1658. sortLv: 0,
  1659. status: true,
  1660. fixed: '',
  1661. columnWidth: 100,
  1662. },
  1663. {
  1664. userId: this.$store.state.user.name,
  1665. functionId: 301003,
  1666. serialNumber: '301003Table2OperationDesc',
  1667. tableId: "301003Table2",
  1668. tableName: "检验模板清单表",
  1669. columnProp: 'operationDesc',
  1670. headerAlign: "center",
  1671. align: "left",
  1672. columnLabel: '工序',
  1673. columnHidden: false,
  1674. columnImage: false,
  1675. columnSortable: false,
  1676. sortLv: 0,
  1677. status: true,
  1678. fixed: '',
  1679. columnWidth: 120,
  1680. },
  1681. {
  1682. userId: this.$store.state.user.name,
  1683. functionId: 301003,
  1684. serialNumber: '301003Table2ResourceDesc',
  1685. tableId: "301003Table2",
  1686. tableName: "检验模板清单表",
  1687. columnProp: 'resourceDesc',
  1688. headerAlign: "center",
  1689. align: "left",
  1690. columnLabel: '机台',
  1691. columnHidden: false,
  1692. columnImage: false,
  1693. columnSortable: false,
  1694. sortLv: 0,
  1695. status: true,
  1696. fixed: '',
  1697. columnWidth: 120,
  1698. },
  1699. {
  1700. userId: this.$store.state.user.name,
  1701. functionId: 301003,
  1702. serialNumber: '301003Table2ManufacturerName',
  1703. tableId: "301003Table2",
  1704. tableName: "检验模板清单表",
  1705. columnProp: 'manufacturerName',
  1706. headerAlign: "center",
  1707. align: "left",
  1708. columnLabel: '供应商',
  1709. columnHidden: false,
  1710. columnImage: false,
  1711. columnSortable: false,
  1712. sortLv: 0,
  1713. status: true,
  1714. fixed: '',
  1715. columnWidth: 200,
  1716. },
  1717. {
  1718. userId: this.$store.state.user.name,
  1719. functionId: 301003,
  1720. serialNumber: '301003Table2CustomerName',
  1721. tableId: "301003Table2",
  1722. tableName: "检验模板清单表",
  1723. columnProp: 'customerName',
  1724. headerAlign: "center",
  1725. align: "left",
  1726. columnLabel: '客户名称',
  1727. columnHidden: false,
  1728. columnImage: false,
  1729. columnSortable: false,
  1730. sortLv: 0,
  1731. status: true,
  1732. fixed: '',
  1733. columnWidth: 200,
  1734. },
  1735. ],
  1736. columnDefectTrackingList: [
  1737. {
  1738. columnProp: 'supplierId',
  1739. headerAlign: "center",
  1740. align: "left",
  1741. columnLabel: '供应商编码',
  1742. columnHidden: false,
  1743. columnImage: false,
  1744. columnSortable: false,
  1745. sortLv: 0,
  1746. status: true,
  1747. fixed: '',
  1748. columnWidth: 100,
  1749. },
  1750. {
  1751. columnProp: 'supplierName',
  1752. headerAlign: "center",
  1753. align: "left",
  1754. columnLabel: '供应商名称',
  1755. columnHidden: false,
  1756. columnImage: false,
  1757. columnSortable: false,
  1758. sortLv: 0,
  1759. status: true,
  1760. fixed: '',
  1761. columnWidth: 200,
  1762. },
  1763. ],
  1764. columnLabelTemplateList: [
  1765. {
  1766. columnProp: 'labelTypeTb',
  1767. headerAlign: "center",
  1768. align: "left",
  1769. columnLabel: '标签编码',
  1770. columnHidden: false,
  1771. columnImage: false,
  1772. columnSortable: false,
  1773. sortLv: 0,
  1774. status: true,
  1775. fixed: '',
  1776. columnWidth: 100,
  1777. },
  1778. {
  1779. columnProp: 'labelType',
  1780. headerAlign: "center",
  1781. align: "left",
  1782. columnLabel: '标签类型',
  1783. columnHidden: false,
  1784. columnImage: false,
  1785. columnSortable: false,
  1786. sortLv: 0,
  1787. status: true,
  1788. fixed: '',
  1789. columnWidth: 120,
  1790. },
  1791. {
  1792. columnProp: 'defaultFlagDesc',
  1793. headerAlign: "center",
  1794. align: "center",
  1795. columnLabel: '默认标识',
  1796. columnHidden: false,
  1797. columnImage: false,
  1798. columnSortable: false,
  1799. sortLv: 0,
  1800. status: true,
  1801. fixed: '',
  1802. columnWidth: 100,
  1803. },
  1804. ],
  1805. // 快速添加
  1806. fastAddFlag: false,
  1807. itemList1: [],
  1808. itemList2: [],
  1809. itemListRow1: {},
  1810. itemListRow2: {},
  1811. tempLevelRow: {},
  1812. tempProgrammeRow: {},
  1813. options: [],
  1814. itemSelections1: [],
  1815. itemSelections2: [],
  1816. rules: {
  1817. partNoType:[
  1818. {
  1819. required: true,
  1820. message: ' ',
  1821. trigger: ['blur','change']
  1822. }
  1823. ],
  1824. partDescType:[
  1825. {
  1826. required: true,
  1827. message: ' ',
  1828. trigger: ['blur','change']
  1829. }
  1830. ],
  1831. bu: [
  1832. {
  1833. required: true,
  1834. message: ' ',
  1835. trigger: ['blur','change']
  1836. }
  1837. ]
  1838. },
  1839. // 工序
  1840. operationList: [],
  1841. resourceList: [],
  1842. operationModelFlag: false,
  1843. resourceModelFlag: false,
  1844. dataListOperationSelections: [],
  1845. operationData: {
  1846. operationDesc: ''
  1847. },
  1848. resourceData: {
  1849. site: '',
  1850. resourceId: '',
  1851. resourceDesc: ''
  1852. },
  1853. operation: '',
  1854. resourceId: '',
  1855. selectionManufacturer: [],
  1856. selectionManufacturer2: [],
  1857. // 供应商
  1858. manufacturerList: [],
  1859. manufacturerModelFlag: false,
  1860. dataListManufacturerSelections: [],
  1861. manufacturerData: {
  1862. site: '',
  1863. manufacturerID: '',
  1864. manufacturerName: ''
  1865. },
  1866. // 单选框绑定的值
  1867. operationCurrent: -1,
  1868. resourceCurrent: -1,
  1869. sopData: {
  1870. site: '',
  1871. buNo: '',
  1872. partNo: '',
  1873. inspectionTypeNo: '',
  1874. inspectionTypeName: ''
  1875. },
  1876. sopList: [],
  1877. sopFileModelFlag: false,
  1878. sopColumnList: [
  1879. {
  1880. columnProp: 'fileName',
  1881. headerAlign: "center",
  1882. align: "center",
  1883. columnLabel: '文件名称',
  1884. columnHidden: false,
  1885. columnImage: false,
  1886. columnSortable: false,
  1887. sortLv: 0,
  1888. status: true,
  1889. fixed: '',
  1890. },
  1891. {
  1892. columnProp: 'createdBy',
  1893. headerAlign: "center",
  1894. align: 'center',
  1895. columnLabel: '上传人',
  1896. columnHidden: false,
  1897. columnImage: false,
  1898. columnSortable: true,
  1899. sortLv: 0,
  1900. status: true,
  1901. fixed: false
  1902. },
  1903. {
  1904. columnProp: 'createDate',
  1905. headerAlign: "center",
  1906. align: 'center',
  1907. columnLabel: '上传时间',
  1908. columnHidden: false,
  1909. columnImage: false,
  1910. columnSortable: true,
  1911. sortLv: 0,
  1912. status: true,
  1913. fixed: false
  1914. },
  1915. {
  1916. columnProp: 'orderRef3',
  1917. headerAlign: "center",
  1918. align: 'center',
  1919. columnLabel: '检验类型',
  1920. columnHidden: false,
  1921. columnImage: false,
  1922. columnSortable: true,
  1923. sortLv: 0,
  1924. status: true,
  1925. fixed: false
  1926. },
  1927. ],
  1928. userBuList: [],
  1929. partInfoList: [],
  1930. partDetailData: {
  1931. bu: '',
  1932. partNo: '',
  1933. partDesc: '',
  1934. seqNo: '',
  1935. sku: '',
  1936. cinvSourceCode:'',
  1937. },
  1938. authSearch: false,
  1939. authSave: false,
  1940. authUpdate: false,
  1941. authDelete: false,
  1942. authDetail: false,
  1943. authFile: false,
  1944. menuId: this.$route.meta.menuId,
  1945. activeTable: 'bom',
  1946. partCurrentRow: {},
  1947. secondHeight: 200,
  1948. searchLoading: false,
  1949. saveLoading: false,
  1950. editBatchVisible: false,
  1951. batchLoading: false,
  1952. defectTrackingModal: false,
  1953. defectTrackingDisableFlag: false,
  1954. labelTemplateModal: false,
  1955. labelTemplateDisableFlag: false,
  1956. selectionCustomer: [],
  1957. selectionCustomer2: [],
  1958. dataListCustomerSelections: [],
  1959. span1: 12,
  1960. span2: 12,
  1961. span3: 12,
  1962. operationSelections: [],
  1963. resourceSelections: [],
  1964. customerData: {
  1965. site: '',
  1966. customerID: '',
  1967. customerName: ''
  1968. },
  1969. customerModelFlag: false,
  1970. customerList: [],
  1971. }
  1972. },
  1973. mounted () {
  1974. this.$nextTick(() => {
  1975. this.height = window.innerHeight / 2 - 100
  1976. /*第二个表格高度的动态调整*/
  1977. this.secondHeight = window.innerHeight - this.height - 170
  1978. })
  1979. },
  1980. created () {
  1981. // 按钮控制
  1982. this.getButtonAuthData()
  1983. // 获取用户的 site 和 bu
  1984. this.getSiteAndBuByUserName()
  1985. // 校验用户是否收藏
  1986. // this.favoriteIsOk()
  1987. // 获取检验类型
  1988. this.inspectionTypeSearch()
  1989. // 动态列
  1990. // this.getTableUserColumn(this.$route.meta.menuId+'table1',1)
  1991. // this.getTableUserColumn(this.$route.meta.menuId+'table2',2)
  1992. if (!this.authSearch) {
  1993. // 获取数据列表
  1994. this.getDataList()
  1995. }
  1996. },
  1997. methods: {
  1998. // 获取用户的bu
  1999. getSiteAndBuByUserName () {
  2000. let tempData = {
  2001. username: this.$store.state.user.name,
  2002. }
  2003. getSiteAndBuByUserName(tempData).then(({data}) => {
  2004. if (data.code === 0) {
  2005. this.userBuList = data.rows
  2006. }
  2007. })
  2008. },
  2009. // 查询检验类型
  2010. inspectionTypeSearch () {
  2011. let tempData = {
  2012. site: this.$store.state.user.site
  2013. }
  2014. inspectionTypeSearch(tempData).then(({data}) => {
  2015. if (data.code === 0) {
  2016. this.options = data.rows
  2017. }
  2018. })
  2019. },
  2020. chooseLevel (row) {
  2021. this.tempLevelRow = row
  2022. this.getBaseList(208)
  2023. },
  2024. chooseProgrammeRow (row) {
  2025. this.tempProgrammeRow = row
  2026. this.getBaseList(207)
  2027. },
  2028. // 获取数据列表
  2029. getDataList () {
  2030. this.searchData.limit = this.pageSize
  2031. this.searchData.page = this.pageIndex
  2032. this.searchLoading = true
  2033. qcPartAttributeSearch(this.searchData).then(({data}) => {
  2034. if (data.code === 0) {
  2035. this.dataList = data.page.list
  2036. this.pageIndex = data.page.currPage
  2037. this.pageSize = data.page.pageSize
  2038. this.totalPage = data.page.totalCount
  2039. // 判断是否全部存在数据
  2040. if (this.dataList.length > 0) {
  2041. // 设置选中行
  2042. this.$refs.partTable.setCurrentRow(this.dataList[0])
  2043. this.partClickRow(this.dataList[0])
  2044. } else {
  2045. this.partCurrentRow = {}
  2046. this.refreshCurrentTabTable()
  2047. }
  2048. }
  2049. }).finally(()=>{
  2050. this.searchLoading = false
  2051. })
  2052. },
  2053. // 每页数
  2054. sizeChangeHandle (val) {
  2055. this.pageSize = val
  2056. this.pageIndex = 1
  2057. this.getDataList()
  2058. },
  2059. // 当前页
  2060. currentChangeHandle (val) {
  2061. this.pageIndex = val
  2062. this.getDataList()
  2063. },
  2064. updateModal (row) {
  2065. this.modalData = {
  2066. site: row.site,
  2067. bu: row.site + '_' + row.buNo,
  2068. buNo: row.buNo,
  2069. partNo: row.partNo,
  2070. partDesc: row.partDesc,
  2071. partTypeDB: row.partTypeDB,
  2072. partType: row.partType,
  2073. umId: row.umId,
  2074. spec: row.spec,
  2075. expirationFlag: row.expirationFlag,
  2076. expirationDay: row.expirationDay,
  2077. expirationWarningDay: row.expirationWarningDay,
  2078. exceedInRatio: row.exceedInRatio,
  2079. exceedOutRatio: row.exceedOutRatio,
  2080. inboundWarehouseId: row.inboundWarehouseId,
  2081. inboundWarehouseName: row.inboundWarehouseName,
  2082. outboundWarehouseId: row.outboundWarehouseId,
  2083. outboundWarehouseName: row.outboundWarehouseName,
  2084. inboundLocationId: row.inboundLocationId,
  2085. inboundLocationName: row.inboundLocationName,
  2086. active: row.active,
  2087. iqcExempt: row.iqcExempt,
  2088. faiExempt: row.faiExempt,
  2089. ipqcExempt: row.ipqcExempt,
  2090. pqcExempt: row.pqcExempt,
  2091. fqcExempt: row.fqcExempt,
  2092. oqcExempt: row.oqcExempt,
  2093. firstInspectionDuration: row.firstInspectionDuration,
  2094. nextInspectionDuration: row.nextInspectionDuration,
  2095. totalInspectionDuration: row.totalInspectionDuration,
  2096. lastUpdateBy: this.$store.state.user.name,
  2097. partDescEn: row.partDescEn,
  2098. standardValue: row.standardValue,
  2099. defaultValue: row.defaultValue,
  2100. maxValue: row.maxValue,
  2101. minValue: row.minValue,
  2102. adhesiveActivePeriodFlag: row.adhesiveActivePeriodFlag,
  2103. thawingDuration: row.thawingDuration,
  2104. accumulatedExposureDuration: row.accumulatedExposureDuration,
  2105. issueMethod: row.issueMethod
  2106. }
  2107. this.modalDisableFlag = false
  2108. this.modalFlag = true
  2109. },
  2110. updateModal2 (row) {
  2111. this.modalData = {
  2112. site: row.site,
  2113. bu: row.site + '_' + row.buNo,
  2114. buNo: row.buNo,
  2115. partNo: row.partNo,
  2116. partDesc: row.partDesc,
  2117. partTypeDB: row.partTypeDB,
  2118. partType: row.partType,
  2119. umId: row.umId,
  2120. spec: row.spec,
  2121. expirationFlag: row.expirationFlag,
  2122. expirationDay: row.expirationDay,
  2123. expirationWarningDay: row.expirationWarningDay,
  2124. exceedInRatio: row.exceedInRatio,
  2125. exceedOutRatio: row.exceedOutRatio,
  2126. inboundWarehouseId: row.inboundWarehouseId,
  2127. inboundWarehouseName: row.inboundWarehouseName,
  2128. outboundWarehouseId: row.outboundWarehouseId,
  2129. outboundWarehouseName: row.outboundWarehouseName,
  2130. inboundLocationId: row.inboundLocationId,
  2131. inboundLocationName: row.inboundLocationName,
  2132. active: row.active,
  2133. iqcExempt: row.iqcExempt,
  2134. faiExempt: row.faiExempt,
  2135. ipqcExempt: row.ipqcExempt,
  2136. pqcExempt: row.pqcExempt,
  2137. fqcExempt: row.fqcExempt,
  2138. oqcExempt: row.oqcExempt,
  2139. firstInspectionDuration: row.firstInspectionDuration,
  2140. nextInspectionDuration: row.nextInspectionDuration,
  2141. totalInspectionDuration: row.totalInspectionDuration,
  2142. lastUpdateBy: this.$store.state.user.name,
  2143. partDescEn: row.partDescEn,
  2144. standardValue: row.standardValue,
  2145. defaultValue: row.defaultValue,
  2146. maxValue: row.maxValue,
  2147. minValue: row.minValue,
  2148. adhesiveActivePeriodFlag: row.adhesiveActivePeriodFlag,
  2149. thawingDuration: row.thawingDuration,
  2150. accumulatedExposureDuration: row.accumulatedExposureDuration,
  2151. issueMethod: row.issueMethod
  2152. }
  2153. this.modalDisableFlag = true
  2154. this.modalFlag = true
  2155. },
  2156. saveData () {
  2157. if (this.modalData.partDesc === '' || this.modalData.partDesc == null) {
  2158. this.$message.warning('请选择物料名称!')
  2159. return
  2160. }
  2161. this.saveLoading = true
  2162. qcPartAttributeEdit(this.modalData).then(({data}) => {
  2163. if (data && data.code === 0) {
  2164. this.getDataList()
  2165. this.modalFlag = false
  2166. this.$message.success('操作成功')
  2167. } else {
  2168. this.$message.error(data.msg)
  2169. }
  2170. }).finally(()=>{
  2171. this.saveLoading = false
  2172. })
  2173. },
  2174. // 列表表格选择替换
  2175. tabClick (tab, event) {
  2176. // 刷新列表数据
  2177. this.refreshCurrentTabTable()
  2178. },
  2179. // 当前值发生变化的时候修改
  2180. changeCurrentRow (row, oldRow) {
  2181. // 判断是否是获取焦点的事件
  2182. if (row) {
  2183. this.partCurrentRow = JSON.parse(JSON.stringify(row))
  2184. //刷新当前页表
  2185. this.refreshCurrentTabTable()
  2186. }
  2187. },
  2188. rowStyle ({row}) {
  2189. if (this.partCurrentRow.partNo === row.partNo) {
  2190. return { 'background-color': '#E8F7F6', cursor: 'pointer' }
  2191. }
  2192. },
  2193. // 单机选中物料信息
  2194. partClickRow (row,column) {
  2195. this.partCurrentRow = JSON.parse(JSON.stringify(row))
  2196. },
  2197. // 刷新页签的table数据
  2198. refreshCurrentTabTable () {
  2199. if (this.activeTable === 'bom') {
  2200. } else if (this.activeTable === 'routing') {
  2201. } else if (this.activeTable === 'qcTemplate') {
  2202. this.detailModal()
  2203. } else if (this.activeTable === 'defectTracking') {
  2204. this.getPartDefectTracking()
  2205. } else if (this.activeTable === 'labelTemplate') {
  2206. this.getPartLabelTemplate()
  2207. }
  2208. },
  2209. // ==================== 物料模板 ====================
  2210. // 打开物料模板清单
  2211. detailModal () {
  2212. this.detailData.site = this.partCurrentRow.site
  2213. this.detailData.buNo = this.partCurrentRow.buNo
  2214. this.detailData.partNo = this.partCurrentRow.partNo
  2215. this.detailData.attributeNo = this.partCurrentRow.partNo
  2216. this.detailData.partDesc = this.partCurrentRow.partDesc
  2217. searchPartAttributeDetails(this.detailData).then(({data}) => {
  2218. this.detailList = data.rows
  2219. })
  2220. },
  2221. checkInspectionType () {
  2222. getPartTemplateLists(this.detailData).then(({data}) => {
  2223. this.itemList1 = data.row1
  2224. this.itemList2 = data.row2
  2225. })
  2226. if (this.detailData.inspectionTypeNo === '101' || this.detailData.inspectionTypeNo === '107') {
  2227. this.span1 = 12
  2228. this.span2 = 6
  2229. this.span3 = 6
  2230. } else if (this.detailData.inspectionTypeNo === '105' || this.detailData.inspectionTypeNo === '109') {
  2231. this.span1 = 12
  2232. this.span2 = 12
  2233. } else {
  2234. this.span1 = 24
  2235. }
  2236. },
  2237. checkInspectionType2 () {
  2238. getPartTemplateLists(this.detailData).then(({data}) => {
  2239. this.itemList1 = data.row1
  2240. this.itemList2 = data.row2
  2241. })
  2242. },
  2243. // 批量编辑模态框
  2244. editBatchModel() {
  2245. if (this.editBatchVisible) {
  2246. this.editBatchVisible = false
  2247. } else {
  2248. this.editBatchVisible = true
  2249. }
  2250. },
  2251. // 批量保存
  2252. batchModel() {
  2253. let params = []
  2254. params = this.detailList
  2255. this.batchLoading = true
  2256. saveAttributeDetailed(params).then(({data}) => {
  2257. if (data && data.code === 0) {
  2258. this.detailModal()
  2259. this.$message.success(data.msg)
  2260. this.editBatchVisible = false
  2261. } else {
  2262. this.$message.error(data.msg)
  2263. }
  2264. }).finally(() => {
  2265. this.batchLoading = false
  2266. })
  2267. },
  2268. // 快速新增
  2269. addFastModal () {
  2270. this.itemSelections1 = null
  2271. this.itemSelections2 = null
  2272. getPartTemplateLists(this.detailData).then(({data}) => {
  2273. this.itemList1 = data.row1
  2274. this.itemList2 = data.row2
  2275. })
  2276. this.detailData.inspectionTypeNo = this.options[0].inspectionTypeNo
  2277. this.checkInspectionType()
  2278. this.dataListOperationSelections = []
  2279. this.operationData.operationDesc = ''
  2280. this.resourceData.resourceId = ''
  2281. this.resourceData.resourceDesc = ''
  2282. this.selectionManufacturer = []
  2283. this.selectionManufacturer2 = []
  2284. this.dataListManufacturerSelections = []
  2285. this.selectionCustomer = []
  2286. this.selectionCustomer2 = []
  2287. this.dataListCustomerSelections = []
  2288. this.fastAddFlag = true
  2289. },
  2290. // 可选项目
  2291. itemClickRow1 (row) {
  2292. this.$refs.itemTable1.toggleRowSelection(row)
  2293. },
  2294. // 已有项目
  2295. itemClickRow2 (row) {
  2296. this.$refs.itemTable2.toggleRowSelection(row)
  2297. },
  2298. selectionItem1 (val) {
  2299. this.itemSelections1 = val
  2300. },
  2301. selectionItem2 (val) {
  2302. this.itemSelections2 = val
  2303. },
  2304. // 添加模板
  2305. addItem () {
  2306. if (this.itemSelections1 == null || this.itemSelections1.length === 0) {
  2307. this.$message.warning('请选择可选模板!')
  2308. return
  2309. }
  2310. if ((this.detailData.inspectionTypeNo === '101' || this.detailData.inspectionTypeNo === '102' || this.detailData.inspectionTypeNo === '103' || this.detailData.inspectionTypeNo === '104' || this.detailData.inspectionTypeNo === '106' || this.detailData.inspectionTypeNo === '107') && (this.operationSelections.length === 0)) {
  2311. this.$message.warning('请选择工序!')
  2312. return
  2313. }
  2314. if ((this.detailData.inspectionTypeNo === '101' || this.detailData.inspectionTypeNo === '102' || this.detailData.inspectionTypeNo === '103' || this.detailData.inspectionTypeNo === '104' || this.detailData.inspectionTypeNo === '106' || this.detailData.inspectionTypeNo === '107') && (this.resourceSelections.length === 0)) {
  2315. this.$message.warning('请选择机台!')
  2316. return
  2317. }
  2318. if ((this.detailData.inspectionTypeNo === '105') && (this.selectionManufacturer == null || this.selectionManufacturer.length === 0)) {
  2319. this.$message.warning('请选择供应商!')
  2320. return
  2321. }
  2322. let inData = {
  2323. site: this.detailData.site,
  2324. buNo: this.detailData.buNo,
  2325. attributeNo: this.detailData.partNo,
  2326. itemList: this.itemSelections1,
  2327. operation: this.operationSelections.length === 0 ? '' : this.operationSelections[0].operationDesc,
  2328. resourceID: this.resourceSelections.length === 0 ? '' : this.resourceSelections[0].resourceId,
  2329. manufacturerList: this.selectionManufacturer,
  2330. customerList: this.selectionCustomer,
  2331. attributeType: this.detailData.attributeType,
  2332. inspectionTypeNo: this.detailData.inspectionTypeNo
  2333. }
  2334. savePartAttributeDetails(inData).then(({data}) => {
  2335. if (data && data.code === 0) {
  2336. getPartTemplateLists(this.detailData).then(({data}) => {
  2337. this.itemList1 = data.row1
  2338. this.itemList2 = data.row2
  2339. })
  2340. this.itemSelections1 = []
  2341. this.selectionManufacturer = []
  2342. this.selectionManufacturer2 = []
  2343. this.selectionCustomer = []
  2344. this.selectionCustomer2 = []
  2345. } else {
  2346. this.$message.error(data.msg)
  2347. }
  2348. })
  2349. },
  2350. // 删除模板
  2351. deleteItem () {
  2352. if (this.itemSelections2 == null || this.itemSelections2.length === 0) {
  2353. this.$message.warning('请选择已有模板!')
  2354. return
  2355. }
  2356. let inData = {
  2357. attributeNo:this.detailData.partNo,
  2358. itemList: this.itemSelections2,
  2359. attributeType: this.detailData.attributeType,
  2360. site: this.detailData.site,
  2361. buNo: this.detailData.buNo,
  2362. }
  2363. deletePartAttributeDetails(inData).then(({data}) => {
  2364. if (data && data.code === 0) {
  2365. getPartTemplateLists(this.detailData).then(({data}) => {
  2366. this.itemList1 = data.row1
  2367. this.itemList2 = data.row2
  2368. })
  2369. this.itemSelections2 = []
  2370. } else {
  2371. this.$message.error(data.msg)
  2372. }
  2373. })
  2374. },
  2375. // 关闭后刷新列表
  2376. refreshDetailList () {
  2377. searchPartAttributeDetails(this.detailData).then(({data}) => {
  2378. this.detailList = data.rows
  2379. })
  2380. },
  2381. // 删除物料属性中的模板
  2382. deletePartAttributeDetails (row) {
  2383. this.$confirm(`是否删除这个检验模板?`, '提示', {
  2384. confirmButtonText: '确定',
  2385. cancelButtonText: '取消',
  2386. type: 'warning'
  2387. }).then(() => {
  2388. deletePartAttributeDetails(row).then(({data}) => {
  2389. if (data && data.code === 0) {
  2390. searchPartAttributeDetails(this.detailData).then(({data}) => {
  2391. this.detailList = data.rows
  2392. })
  2393. this.$message.success('操作成功')
  2394. } else {
  2395. this.$message.error(data.msg)
  2396. }
  2397. })
  2398. })
  2399. },
  2400. // ==================== 物料缺陷跟踪 ====================
  2401. // 查询物料缺陷跟踪
  2402. getPartDefectTracking () {
  2403. let templateData = {
  2404. site: this.partCurrentRow.site,
  2405. buNo: this.partCurrentRow.buNo,
  2406. partNo: this.partCurrentRow.partNo
  2407. }
  2408. getPartDefectTracking(templateData).then(({data}) => {
  2409. this.defectTrackingList = data.rows
  2410. })
  2411. },
  2412. // 新增物料缺陷跟踪
  2413. addDefectTrackingModal () {
  2414. this.defectTrackingData = {
  2415. site: this.partCurrentRow.site,
  2416. buNo: this.partCurrentRow.buNo,
  2417. partNo: this.partCurrentRow.partNo,
  2418. supplierId: '',
  2419. supplierName: '',
  2420. defectThreshold: '',
  2421. recoveryBatchCount: '',
  2422. currentDefectCount: '',
  2423. lastDefectCount: '',
  2424. }
  2425. this.defectTrackingModal = true
  2426. this.defectTrackingDisableFlag = false
  2427. },
  2428. // 新增物料缺陷跟踪
  2429. saveDefectTracking () {
  2430. if (this.defectTrackingData.supplierId === '' || this.defectTrackingData.supplierId == null) {
  2431. this.$message.warning('请选择供应商!')
  2432. return
  2433. }
  2434. this.saveLoading = true
  2435. saveDefectTracking(this.defectTrackingData).then(({data}) => {
  2436. if (data && data.code === 0) {
  2437. this.getPartDefectTracking()
  2438. this.defectTrackingModal = false
  2439. this.$message.success('操作成功')
  2440. } else {
  2441. this.$message.error(data.msg)
  2442. }
  2443. }).finally(()=>{
  2444. this.saveLoading = false
  2445. })
  2446. },
  2447. // 删除物料缺陷跟踪
  2448. deleteDefectTracking (row) {
  2449. this.$confirm(`是否删除这个物料缺陷跟踪?`, '提示', {
  2450. confirmButtonText: '确定',
  2451. cancelButtonText: '取消',
  2452. type: 'warning'
  2453. }).then(() => {
  2454. deleteDefectTracking(row).then(({data}) => {
  2455. if (data && data.code === 0) {
  2456. this.getPartDefectTracking()
  2457. this.$message.success('操作成功')
  2458. } else {
  2459. this.$message.error(data.msg)
  2460. }
  2461. })
  2462. })
  2463. },
  2464. // 批量编辑
  2465. editDefectTrackingBatchModel () {
  2466. if (this.editBatchVisible) {
  2467. this.editBatchVisible = false
  2468. } else {
  2469. this.editBatchVisible = true
  2470. }
  2471. },
  2472. // 批量保存
  2473. batchDefectTrackingModel () {
  2474. let params = []
  2475. params = this.defectTrackingList
  2476. this.batchLoading = true
  2477. updateDefectTracking(params).then(({data}) => {
  2478. if (data && data.code === 0) {
  2479. this.getPartDefectTracking()
  2480. this.$message.success(data.msg)
  2481. this.editBatchVisible = false
  2482. } else {
  2483. this.$message.error(data.msg)
  2484. }
  2485. }).finally(() => {
  2486. this.batchLoading = false
  2487. })
  2488. },
  2489. // ==================== 标签模版设置 ====================
  2490. // 查询标签模版设置
  2491. getPartLabelTemplate () {
  2492. let templateData = {
  2493. site: this.partCurrentRow.site,
  2494. buNo: this.partCurrentRow.buNo,
  2495. partNo: this.partCurrentRow.partNo
  2496. }
  2497. getPartLabelTemplate(templateData).then(({data}) => {
  2498. this.labelTemplateList = data.rows
  2499. })
  2500. },
  2501. // 新增标签模版设置
  2502. addLabelTemplateModal () {
  2503. this.labelTemplateData = {
  2504. flag: '1',
  2505. site: this.partCurrentRow.site,
  2506. buNo: this.partCurrentRow.buNo,
  2507. partNo: this.partCurrentRow.partNo,
  2508. labelTypeTb: '',
  2509. labelType: '',
  2510. defaultFlag: '',
  2511. createdBy: this.$store.state.user.name,
  2512. }
  2513. this.labelTemplateModal = true
  2514. this.labelTemplateDisableFlag = false
  2515. },
  2516. // 编辑标签模版设置
  2517. updateLabelTemplateModal (row) {
  2518. this.labelTemplateData = {
  2519. flag: '2',
  2520. site: row.site,
  2521. buNo: row.buNo,
  2522. partNo: row.partNo,
  2523. labelTypeTb: row.labelTypeTb,
  2524. labelType: row.labelType,
  2525. defaultFlag: row.defaultFlag,
  2526. }
  2527. this.labelTemplateModal = true
  2528. this.labelTemplateDisableFlag = true
  2529. },
  2530. // 新增标签模版设置
  2531. saveLabelTemplate () {
  2532. if (this.labelTemplateData.labelTypeTb === '' || this.labelTemplateData.labelTypeTb == null) {
  2533. this.$message.warning('请选择标签类型!')
  2534. return
  2535. }
  2536. this.saveLoading = true
  2537. if (this.labelTemplateData.flag === '1') {
  2538. saveLabelTemplate(this.labelTemplateData).then(({data}) => {
  2539. if (data && data.code === 0) {
  2540. this.getPartLabelTemplate()
  2541. this.labelTemplateModal = false
  2542. this.$message.success('操作成功')
  2543. } else {
  2544. this.$message.error(data.msg)
  2545. }
  2546. }).finally(()=>{
  2547. this.saveLoading = false
  2548. })
  2549. } else {
  2550. updateLabelTemplate(this.labelTemplateData).then(({data}) => {
  2551. if (data && data.code === 0) {
  2552. this.getPartLabelTemplate()
  2553. this.labelTemplateModal = false
  2554. this.$message.success('操作成功')
  2555. } else {
  2556. this.$message.error(data.msg)
  2557. }
  2558. }).finally(()=>{
  2559. this.saveLoading = false
  2560. })
  2561. }
  2562. },
  2563. // 删除标签模版设置
  2564. deleteLabelTemplate (row) {
  2565. this.$confirm(`是否删除这个标签模版设置?`, '提示', {
  2566. confirmButtonText: '确定',
  2567. cancelButtonText: '取消',
  2568. type: 'warning'
  2569. }).then(() => {
  2570. deleteLabelTemplate(row).then(({data}) => {
  2571. if (data && data.code === 0) {
  2572. this.getPartLabelTemplate()
  2573. this.$message.success('操作成功')
  2574. } else {
  2575. this.$message.error(data.msg)
  2576. }
  2577. })
  2578. })
  2579. },
  2580. // 仓库输入校验
  2581. inWarehouseBlur (tagNo) {
  2582. let tempData = {
  2583. tagno: tagNo,
  2584. conditionSql: " and WareHouseID = '" + this.modalData.inboundWarehouseId + "'" + " and site = '" + this.modalData.site + "'" + " and bu_no = '" + this.modalData.buNo + "'"
  2585. }
  2586. verifyData(tempData).then(({data}) => {
  2587. if (data && data.code === 0) {
  2588. if (data.baseListData.length > 0) {
  2589. this.modalData.inboundWarehouseId = data.baseListData[0].WareHouseID
  2590. this.modalData.inboundWarehouseName = data.baseListData[0].WareHouseName
  2591. } else {
  2592. this.modalData.inboundWarehouseName = ''
  2593. }
  2594. }
  2595. })
  2596. },
  2597. // 仓库输入校验
  2598. outWarehouseBlur (tagNo) {
  2599. let tempData = {
  2600. tagno: tagNo,
  2601. conditionSql: " and WareHouseID = '" + this.modalData.outboundWarehouseId + "'" + " and site = '" + this.modalData.site + "'" + " and bu_no = '" + this.modalData.buNo + "'"
  2602. }
  2603. verifyData(tempData).then(({data}) => {
  2604. if (data && data.code === 0) {
  2605. if (data.baseListData.length > 0) {
  2606. this.modalData.outboundWarehouseId = data.baseListData[0].WareHouseID
  2607. this.modalData.outboundWarehouseName = data.baseListData[0].WareHouseName
  2608. } else {
  2609. this.modalData.outboundWarehouseName = ''
  2610. }
  2611. }
  2612. })
  2613. },
  2614. // 库位输入校验
  2615. locationBlur (tagNo) {
  2616. let tempData = {
  2617. tagno: tagNo,
  2618. conditionSql: " and LocationID = '" + this.modalData.inboundLocationId + "'" + " and site = '" + this.modalData.site + "'" + " and bu_no = '" + this.modalData.buNo + "'"
  2619. }
  2620. verifyData(tempData).then(({data}) => {
  2621. if (data && data.code === 0) {
  2622. if (data.baseListData.length > 0) {
  2623. this.modalData.inboundLocationId = data.baseListData[0].LocationID
  2624. this.modalData.inboundLocationName = data.baseListData[0].LocationName
  2625. } else {
  2626. this.modalData.inboundLocationName = ''
  2627. }
  2628. }
  2629. })
  2630. },
  2631. // 库位输入校验
  2632. supplierBlur (tagNo) {
  2633. let tempData = {
  2634. tagno: tagNo,
  2635. conditionSql: " and SupplierID = '" + this.defectTrackingData.supplierId + "'" + " and site = '" + this.defectTrackingData.site + "'"
  2636. }
  2637. verifyData(tempData).then(({data}) => {
  2638. if (data && data.code === 0) {
  2639. if (data.baseListData.length > 0) {
  2640. this.defectTrackingData.supplierId = data.baseListData[0].SupplierID
  2641. this.defectTrackingData.supplierName = data.baseListData[0].SupplierName
  2642. } else {
  2643. this.defectTrackingData.supplierName = ''
  2644. }
  2645. }
  2646. })
  2647. },
  2648. // 标签类型输入校验
  2649. labelTemplateBlur () {
  2650. let tempData = {
  2651. tagno: tagNo,
  2652. conditionSql: " and ReportID = '" + this.labelTemplateData.labelTypeTb + "'"
  2653. }
  2654. verifyData(tempData).then(({data}) => {
  2655. if (data && data.code === 0) {
  2656. if (data.baseListData.length > 0) {
  2657. this.labelTemplateData.labelTypeTb = data.baseListData[0].ReportID
  2658. this.labelTemplateData.labelType = data.baseListData[0].ReportFamily
  2659. } else {
  2660. this.labelTemplateData.labelType = ''
  2661. }
  2662. }
  2663. })
  2664. },
  2665. // 获取基础数据列表S
  2666. getBaseList (val, type) {
  2667. this.tagNo = val
  2668. this.tagType = type
  2669. this.$nextTick(() => {
  2670. let strVal = ''
  2671. if (val === 208) {
  2672. strVal = this.tempLevelRow.samplingLevelNo
  2673. this.$refs.baseList.init(val, strVal)
  2674. }
  2675. if (val === 207) {
  2676. strVal = this.tempProgrammeRow.samplingProgrammeNo
  2677. this.$refs.baseList.init(val, strVal)
  2678. }
  2679. if (val === 20 && type === 1) {
  2680. strVal = this.modalData.inboundWarehouseId
  2681. this.$refs.baseList.init(val, strVal)
  2682. }
  2683. if (val === 20 && type === 2) {
  2684. strVal = this.modalData.outboundWarehouseId
  2685. this.$refs.baseList.init(val, strVal)
  2686. }
  2687. if (val === 506) {
  2688. strVal = this.defectTrackingData.supplierId
  2689. this.$refs.baseList.init(val, strVal)
  2690. }
  2691. if (val === 1099) {
  2692. strVal = this.labelTemplateData.labelTypeTb
  2693. this.$refs.baseList.init(val, strVal)
  2694. }
  2695. })
  2696. },
  2697. // 列表方法的回调
  2698. getBaseData (val) {
  2699. if (this.tagNo === 208) {
  2700. this.tempLevelRow.samplingLevelNo = val.sampling_level_no
  2701. this.tempLevelRow.samplingLevelDesc = val.sampling_level_desc
  2702. }
  2703. if (this.tagNo === 207) {
  2704. this.tempProgrammeRow.samplingProgrammeNo = val.sampling_programme_no
  2705. this.tempProgrammeRow.samplingProgrammeDesc = val.sampling_programme_desc
  2706. }
  2707. if (this.tagNo === 20 && this.tagType === 1) {
  2708. this.modalData.inboundWarehouseId = val.WareHouseID
  2709. this.modalData.inboundWarehouseName = val.WareHouseName
  2710. }
  2711. if (this.tagNo === 20 && this.tagType === 2) {
  2712. this.modalData.outboundWarehouseId = val.WareHouseID
  2713. this.modalData.outboundWarehouseName = val.WareHouseName
  2714. }
  2715. if (this.tagNo === 506) {
  2716. this.defectTrackingData.supplierId = val.SupplierID
  2717. this.defectTrackingData.supplierName = val.SupplierName
  2718. }
  2719. if (this.tagNo === 1099) {
  2720. this.labelTemplateData.labelTypeTb = val.ReportID
  2721. this.labelTemplateData.labelType = val.ReportFamily
  2722. }
  2723. },
  2724. // 校验用户是否收藏
  2725. favoriteIsOk () {
  2726. let userFavorite = {
  2727. userId: this.$store.state.user.id,
  2728. languageCode: this.$i18n.locale
  2729. }
  2730. userFavoriteList(userFavorite).then(({data}) => {
  2731. for (let i = 0; i < data.list.length; i++) {
  2732. if (this.$route.meta.menuId === data.list[i].menuId) {
  2733. this.favorite = true
  2734. }
  2735. }
  2736. })
  2737. },
  2738. // 收藏 OR 取消收藏
  2739. favoriteFunction () {
  2740. let userFavorite = {
  2741. userId: this.$store.state.user.id,
  2742. functionId: this.$route.meta.menuId,
  2743. }
  2744. if (this.favorite) {
  2745. removeUserFavorite(userFavorite).then(({data}) => {
  2746. this.$message.success(data.msg)
  2747. this.favorite = false
  2748. })
  2749. } else {
  2750. // 收藏
  2751. saveUserFavorite(userFavorite).then(({data}) => {
  2752. this.$message.success(data.msg)
  2753. this.favorite = true
  2754. })
  2755. }
  2756. },
  2757. async exportExcel() {
  2758. this.searchData.limit = -1
  2759. this.searchData.page = 1
  2760. excel.exportTable({
  2761. url: "/pms/qc/qcPartAttributeSearch",
  2762. columnMapping: this.columnList, //可以直接用table,不需要的列就剔除
  2763. mergeSetting: [],//需要合并的列
  2764. params: this.searchData,
  2765. fileName: this.exportName+".xlsx",
  2766. rowFetcher: res => res.data,
  2767. columnFormatter: [],
  2768. dropColumns: [],
  2769. })
  2770. },
  2771. // 导入
  2772. qcUpload () {
  2773. let currentData = {
  2774. flag: 'partAttribute',
  2775. createBy: this.$store.state.user.name,
  2776. site: this.$store.state.user.site,
  2777. }
  2778. //打开组件 去做新增业务
  2779. this.$nextTick(() => {
  2780. this.$refs.qcUpload.init(currentData)
  2781. })
  2782. },
  2783. // 获取工序列表
  2784. getOperationList () {
  2785. getOperationDescList(this.operationData).then(({data}) => {
  2786. if (data && data.code === 0) {
  2787. this.operationList = data.rows
  2788. this.operationModelFlag = true
  2789. } else {
  2790. this.$message.error(data.msg)
  2791. }
  2792. })
  2793. },
  2794. // 获取机台列表
  2795. getAllResourceList () {
  2796. this.resourceData.site = this.detailData.site
  2797. getAllResourceList(this.resourceData).then(({data}) => {
  2798. if (data && data.code === 0) {
  2799. this.resourceList = data.rows
  2800. this.resourceModelFlag = true
  2801. } else {
  2802. this.$message.error(data.msg)
  2803. }
  2804. })
  2805. },
  2806. // 条件查询获取工序列表
  2807. getOperationList2 () {
  2808. getOperationDescList(this.operationData).then(({data}) => {
  2809. if (data && data.code === 0) {
  2810. this.operationList = data.rows
  2811. this.operationCurrent = -1
  2812. } else {
  2813. this.$message.error(data.msg)
  2814. }
  2815. })
  2816. },
  2817. // 条件查询获取机台列表
  2818. getAllResourceList2 () {
  2819. this.resourceData.site = this.detailData.site
  2820. getAllResourceList(this.resourceData).then(({data}) => {
  2821. if (data && data.code === 0) {
  2822. this.resourceList = data.rows
  2823. this.resourceCurrent = -1
  2824. } else {
  2825. this.$message.error(data.msg)
  2826. }
  2827. })
  2828. },
  2829. // 点击行选中工序复选框
  2830. operationClickRow (row) {
  2831. this.$refs.operationTable.toggleRowSelection(row)
  2832. },
  2833. // 点击行选中机台复选框
  2834. resourceClickRow (row) {
  2835. this.$refs.resourceTable.toggleRowSelection(row)
  2836. },
  2837. // 多选工序
  2838. selectionOperationChangeHandle (val) {
  2839. this.operationSelections = val
  2840. },
  2841. operationSelect (selection, row) {
  2842. this.$refs.operationTable.clearSelection()
  2843. this.$refs.operationTable.toggleRowSelection(row, true)
  2844. },
  2845. getRowKeys (row) {
  2846. return row.operationDesc
  2847. },
  2848. // 多选机台
  2849. selectionResourceChangeHandle (val) {
  2850. this.resourceSelections = val
  2851. },
  2852. resourceSelect (selection, row) {
  2853. this.$refs.resourceTable.clearSelection()
  2854. this.$refs.resourceTable.toggleRowSelection(row, true)
  2855. },
  2856. getRowKeys2 (row) {
  2857. return row.resourceId
  2858. },
  2859. operationRowClassName ({row, rowIndex}) {
  2860. row.index = rowIndex // 在原有的数据上加一个index
  2861. },
  2862. resourceRowClassName ({row, rowIndex}) {
  2863. row.index = rowIndex // 在原有的数据上加一个index
  2864. },
  2865. // 确认选择工序
  2866. confirmOperation () {
  2867. this.operationModelFlag = false
  2868. },
  2869. // 确认选择工序
  2870. confirmResource () {
  2871. this.resourceModelFlag = false
  2872. },
  2873. // 获取供应商列表
  2874. getManufacturerList () {
  2875. this.manufacturerData.site = this.detailData.site
  2876. getManufacturerList(this.manufacturerData).then(({data}) => {
  2877. if (data && data.code === 0) {
  2878. this.manufacturerList = data.rows
  2879. // 回显数据
  2880. // 先清空缓存选中
  2881. this.$nextTick(() => this.$refs.manufacturerTable.clearSelection())
  2882. // 拿到选中的供应商
  2883. let tempDataList = this.selectionManufacturer
  2884. this.manufacturerList.forEach(val => {
  2885. // 回显选中的供应商
  2886. if (tempDataList.includes(val.manufacturerID)) {
  2887. this.$nextTick(() => this.$refs.manufacturerTable.toggleRowSelection(val, true))
  2888. }
  2889. })
  2890. this.manufacturerModelFlag = true
  2891. } else {
  2892. this.$message.error(data.msg)
  2893. }
  2894. })
  2895. },
  2896. // 获取供应商列表
  2897. getManufacturerList2 () {
  2898. this.manufacturerData.site = this.detailData.site
  2899. getManufacturerList(this.manufacturerData).then(({data}) => {
  2900. if (data && data.code === 0) {
  2901. this.manufacturerList = data.rows
  2902. //拿到选中的供应商
  2903. let tempDataList = this.selectionManufacturer
  2904. this.manufacturerList.forEach(val => {
  2905. // 回显选中的供应商
  2906. if (tempDataList.includes(val.manufacturerID)) {
  2907. this.$nextTick(() => this.$refs.manufacturerTable.toggleRowSelection(val, true))
  2908. }
  2909. })
  2910. } else {
  2911. this.manufacturerList = []
  2912. }
  2913. })
  2914. },
  2915. getRowKeys3 (row) {
  2916. return row.manufacturerID
  2917. },
  2918. // 点击行选中复选框
  2919. manufacturerClickRow (row) {
  2920. this.$refs.manufacturerTable.toggleRowSelection(row)
  2921. },
  2922. // 多选
  2923. selectionManufacturerChangeHandle (val) {
  2924. this.dataListManufacturerSelections = val
  2925. },
  2926. // 确认多选供应商
  2927. confirmManufacturer () {
  2928. this.selectionManufacturer = []
  2929. this.selectionManufacturer2 = []
  2930. for (let i = 0; i < this.dataListManufacturerSelections.length; i++) {
  2931. this.selectionManufacturer.push(this.dataListManufacturerSelections[i].manufacturerID)
  2932. this.selectionManufacturer2.push(this.dataListManufacturerSelections[i])
  2933. }
  2934. this.manufacturerModelFlag = false
  2935. },
  2936. // 获取客户列表
  2937. getCustomerList () {
  2938. this.customerData.site = this.detailData.site
  2939. getCustomerList(this.customerData).then(({data}) => {
  2940. if (data && data.code === 0) {
  2941. this.customerList = data.rows
  2942. // 先清空缓存选中
  2943. this.$nextTick(() => this.$refs.customerTable.clearSelection())
  2944. // 拿到选中的客户
  2945. let tempDataList = this.selectionCustomer
  2946. this.customerList.forEach(val => {
  2947. // 回显选中的客户
  2948. if (tempDataList.includes(val.customerID)) {
  2949. this.$nextTick(() => this.$refs.customerTable.toggleRowSelection(val, true))
  2950. }
  2951. })
  2952. this.customerModelFlag = true
  2953. } else {
  2954. this.$message.error(data.msg)
  2955. }
  2956. })
  2957. },
  2958. // 获取客户列表
  2959. getCustomerList2 () {
  2960. this.customerData.site = this.detailData.site
  2961. getCustomerList(this.customerData).then(({data}) => {
  2962. if (data && data.code === 0) {
  2963. this.customerList = data.rows
  2964. //拿到选中的客户
  2965. let tempDataList = this.selectionCustomer
  2966. this.manufacturerList.forEach(val => {
  2967. // 回显选中的客户
  2968. if (tempDataList.includes(val.customerID)) {
  2969. this.$nextTick(() => this.$refs.customerTable.toggleRowSelection(val, true))
  2970. }
  2971. })
  2972. } else {
  2973. this.customerList = []
  2974. }
  2975. })
  2976. },
  2977. // 点击行选中复选框
  2978. customerClickRow (row) {
  2979. this.$refs.customerTable.toggleRowSelection(row)
  2980. },
  2981. // 多选客户
  2982. selectionCustomerChangeHandle (val) {
  2983. this.dataListCustomerSelections = val
  2984. },
  2985. getRowKeys4 (row) {
  2986. return row.customerID
  2987. },
  2988. // 确认多选客户
  2989. confirmCustomer () {
  2990. this.selectionCustomer = []
  2991. this.selectionCustomer2 = []
  2992. for (let i = 0; i < this.dataListCustomerSelections.length; i++) {
  2993. this.selectionCustomer.push(this.dataListCustomerSelections[i].customerID)
  2994. this.selectionCustomer2.push(this.dataListCustomerSelections[i])
  2995. }
  2996. this.customerModelFlag = false
  2997. },
  2998. // sop文件列表
  2999. sopFileList (row) {
  3000. this.sopData = {
  3001. site: row.site,
  3002. buNo: row.buNo,
  3003. partNo: row.partNo,
  3004. inspectionTypeNo: ''
  3005. }
  3006. this.getFileContentList()
  3007. },
  3008. getFileContentList () {
  3009. let tempData = {
  3010. orderRef1: this.sopData.site,
  3011. orderRef2: this.sopData.partNo,
  3012. orderRef3:this.sopData.inspectionTypeNo,
  3013. orderRef4: this.sopData.buNo,
  3014. }
  3015. getFileContentList(tempData).then(({data}) => {
  3016. if (data && data.code == 200) {
  3017. this.sopList = data.rows
  3018. } else {
  3019. this.sopList = []
  3020. }
  3021. })
  3022. this.sopFileModelFlag = true
  3023. },
  3024. // 上传sop文件模态框
  3025. uploadSopFile () {
  3026. let currentData = {
  3027. titleCon: 'SOP文件上传',
  3028. site: this.sopData.site,
  3029. buNo: this.sopData.buNo,
  3030. createBy: this.$store.state.user.name,
  3031. partNo: this.sopData.partNo,
  3032. inspectionTypeNo: '',
  3033. options: this.options
  3034. }
  3035. //打开组件 去做新增业务
  3036. this.$nextTick(() => {
  3037. this.$refs.qcSOPUploadFile.init(currentData)
  3038. })
  3039. },
  3040. // 文件下载
  3041. downloadFile (row) {
  3042. downLoadObjectFile(row).then(({data}) => {
  3043. // 不限制文件下载类型
  3044. const blob = new Blob([data], {type: "application/octet-stream"})
  3045. // 下载文件名称
  3046. const fileName = row.fileName
  3047. // a标签下载
  3048. const linkNode = document.createElement('a')
  3049. // a标签的download属性规定下载文件的名称
  3050. linkNode.download = fileName
  3051. linkNode.style.display = 'none'
  3052. // 生成一个Blob URL
  3053. linkNode.href = URL.createObjectURL(blob)
  3054. document.body.appendChild(linkNode)
  3055. // 模拟在按钮上的一次鼠标单击
  3056. linkNode.click()
  3057. // 释放URL 对象
  3058. URL.revokeObjectURL(linkNode.href)
  3059. document.body.removeChild(linkNode)
  3060. })
  3061. },
  3062. // 删除文件
  3063. deleteFile (row) {
  3064. this.$confirm('确定要删除此文件?', '提示', {
  3065. confirmButtonText: '确定',
  3066. cancelButtonText: '取消',
  3067. type: 'warning'
  3068. }).then(() => {
  3069. deleteObjectFile(row).then(({data}) => {
  3070. if (data && data.code === 0) {
  3071. this.getFileContentList()
  3072. this.$message.success('操作成功')
  3073. } else {
  3074. this.$message.error(data.msg)
  3075. }
  3076. })
  3077. })
  3078. },
  3079. // 动态列开始 获取 用户保存的 格式列
  3080. async getTableUserColumn (tableId, columnId) {
  3081. let queryTableUser = {
  3082. userId: this.$store.state.user.name,
  3083. functionId: this.$route.meta.menuId,
  3084. tableId: tableId,
  3085. status: true,
  3086. languageCode: this.$i18n.locale
  3087. }
  3088. await getTableUserListLanguage(queryTableUser).then(({data}) => {
  3089. if (data.rows.length > 0) {
  3090. switch (columnId) {
  3091. case 1:
  3092. this.columnList = data.rows
  3093. break;
  3094. case 2:
  3095. this.columnDetailList = data.rows
  3096. break;
  3097. }
  3098. } else {
  3099. this.getColumnList(tableId, columnId)
  3100. }
  3101. })
  3102. },
  3103. // 获取 tableDefault 列
  3104. async getColumnList (tableId, columnId) {
  3105. let queryTable = {
  3106. functionId: this.$route.meta.menuId,
  3107. tableId: tableId,
  3108. languageCode: this.$i18n.locale
  3109. }
  3110. await getTableDefaultListLanguage(queryTable).then(({data}) => {
  3111. if (data.rows.length !== 0) {
  3112. switch (columnId) {
  3113. case 1:
  3114. this.columnList = data.rows
  3115. break;
  3116. case 2:
  3117. this.columnDetailList = data.rows
  3118. break;
  3119. }
  3120. }
  3121. })
  3122. },
  3123. closeDialog () {
  3124. this.partDetailData = {
  3125. partNo: '',
  3126. partDesc: '',
  3127. seqNo: '',
  3128. sku: '',
  3129. }
  3130. this.partInfoList = []
  3131. },
  3132. //获取按钮的权限数据
  3133. getButtonAuthData () {
  3134. let searchFlag = this.isAuth(this.menuId+":search")
  3135. let saveFlag = this.isAuth(this.menuId+":save")
  3136. let updateFlag = this.isAuth(this.menuId+":update")
  3137. let deleteFlag = this.isAuth(this.menuId+":delete")
  3138. let detailFlag = this.isAuth(this.menuId+":detail")
  3139. let fileFlag = this.isAuth(this.menuId+":file")
  3140. //处理页面的权限数据
  3141. this.authSearch = !searchFlag
  3142. this.authSave = !saveFlag
  3143. this.authUpdate = !updateFlag
  3144. this.authDelete = !deleteFlag
  3145. this.authDetail = !detailFlag
  3146. this.authFile = !fileFlag
  3147. },
  3148. }
  3149. }
  3150. </script>
  3151. <style scoped>
  3152. /deep/ .customer-tab .el-tabs__content {
  3153. padding: 5px !important;
  3154. }
  3155. .el-table /deep/ .cell{
  3156. height: auto;
  3157. line-height: 1.5;
  3158. }
  3159. /* 物料编辑弹出框样式 - 超紧凑版 */
  3160. .part-edit-dialog .dialog-content {
  3161. padding: 8px;
  3162. max-height: 70vh;
  3163. overflow-y: auto;
  3164. }
  3165. .part-edit-dialog .form-section {
  3166. margin-bottom: 12px;
  3167. padding: 8px;
  3168. border-radius: 4px;
  3169. border-left: 2px solid #17b3a3;
  3170. }
  3171. .part-edit-dialog .section-title {
  3172. font-size: 13px;
  3173. font-weight: 600;
  3174. color: #303133;
  3175. margin-bottom: 2px;
  3176. padding-bottom: 3px;
  3177. border-bottom: 1px solid #e4e7ed;
  3178. }
  3179. .part-edit-dialog .el-form-item {
  3180. margin-bottom: 6px;
  3181. }
  3182. .part-edit-dialog .el-form-item__label {
  3183. font-weight: 500;
  3184. color: #606266;
  3185. font-size: 12px;
  3186. line-height: 1.2;
  3187. }
  3188. .part-edit-dialog .el-input__inner,
  3189. .part-edit-dialog .el-input-number .el-input__inner {
  3190. border-radius: 4px;
  3191. font-size: 12px;
  3192. height: 32px;
  3193. line-height: 32px;
  3194. }
  3195. .part-edit-dialog .el-input-group .el-input:first-child .el-input__inner {
  3196. border-right: 0;
  3197. border-top-right-radius: 0;
  3198. border-bottom-right-radius: 0;
  3199. }
  3200. .part-edit-dialog .el-input-group .el-input:last-child .el-input__inner {
  3201. border-left: 0;
  3202. border-top-left-radius: 0;
  3203. border-bottom-left-radius: 0;
  3204. }
  3205. .part-edit-dialog .el-checkbox {
  3206. font-size: 12px;
  3207. line-height: 1.2;
  3208. }
  3209. .part-edit-dialog .el-select .el-input__inner {
  3210. height: 32px;
  3211. line-height: 32px;
  3212. }
  3213. /* 检验模板弹出框样式 - 超紧凑版 */
  3214. .inspection-template-dialog .template-header {
  3215. padding: 10px;
  3216. background: #f5f7fa;
  3217. border-radius: 4px;
  3218. margin-bottom: 10px;
  3219. border: 1px solid #e4e7ed;
  3220. }
  3221. .inspection-template-dialog .template-header .el-form-item {
  3222. margin-bottom: 0;
  3223. }
  3224. .inspection-template-dialog .template-header .el-form-item__label {
  3225. font-weight: 600;
  3226. color: #303133;
  3227. font-size: 12px;
  3228. }
  3229. .inspection-template-dialog .template-header .el-input__inner {
  3230. font-size: 12px;
  3231. height: 32px;
  3232. line-height: 32px;
  3233. }
  3234. .inspection-template-dialog .template-table-container {
  3235. border-radius: 6px;
  3236. overflow: hidden;
  3237. border: 1px solid #e4e7ed;
  3238. }
  3239. .inspection-template-dialog .inspection-table {
  3240. font-size: 12px;
  3241. }
  3242. .inspection-template-dialog .inspection-table .el-table__header-wrapper th {
  3243. background: #f5f7fa;
  3244. color: #303133;
  3245. font-weight: 600;
  3246. font-size: 12px;
  3247. padding: 8px 0;
  3248. }
  3249. .inspection-template-dialog .input-button-group {
  3250. display: flex;
  3251. align-items: center;
  3252. gap: 8px;
  3253. }
  3254. .inspection-template-dialog .select-button {
  3255. min-width: 45px;
  3256. padding: 3px 8px;
  3257. font-size: 11px;
  3258. border: 1px solid #dcdfe6;
  3259. border-radius: 3px;
  3260. background: #fff;
  3261. color: #606266;
  3262. transition: all 0.2s;
  3263. }
  3264. .inspection-template-dialog .select-button:hover {
  3265. color: #409EFF;
  3266. border-color: #c6e2ff;
  3267. background-color: #ecf5ff;
  3268. }
  3269. .inspection-template-dialog .readonly-input {
  3270. flex: 1;
  3271. }
  3272. .inspection-template-dialog .readonly-input .el-input__inner {
  3273. background-color: #f5f7fa;
  3274. border-color: #e4e7ed;
  3275. font-size: 11px;
  3276. height: 28px;
  3277. line-height: 28px;
  3278. }
  3279. .inspection-template-dialog .el-input-number {
  3280. width: 100%;
  3281. }
  3282. .inspection-template-dialog .el-input-number .el-input__inner {
  3283. text-align: center;
  3284. font-size: 11px;
  3285. height: 28px;
  3286. line-height: 28px;
  3287. }
  3288. .inspection-template-dialog .el-input__inner {
  3289. font-size: 11px;
  3290. height: 28px;
  3291. line-height: 28px;
  3292. }
  3293. /* 按钮样式 - 保持Element UI风格 */
  3294. /* 删除按钮样式 */
  3295. .inspection-template-dialog .el-button[style*="color: #f56c6c"] {
  3296. color: #f56c6c !important;
  3297. font-size: 11px;
  3298. padding: 3px 8px;
  3299. }
  3300. .inspection-template-dialog .el-button[style*="color: #f56c6c"]:hover {
  3301. color: #f78989 !important;
  3302. }
  3303. /* 响应式设计 */
  3304. @media (max-width: 1200px) {
  3305. .part-edit-dialog {
  3306. width: 95% !important;
  3307. }
  3308. .inspection-template-dialog {
  3309. width: 95% !important;
  3310. }
  3311. }
  3312. @media (max-width: 768px) {
  3313. .part-edit-dialog .el-col,
  3314. .inspection-template-dialog .el-col {
  3315. margin-bottom: 15px;
  3316. }
  3317. .inspection-template-dialog .input-button-group {
  3318. flex-direction: column;
  3319. gap: 5px;
  3320. }
  3321. .inspection-template-dialog .select-button {
  3322. width: 100%;
  3323. }
  3324. }
  3325. /* 表格行悬停效果 */
  3326. .inspection-template-dialog .el-table--enable-row-hover .el-table__body tr:hover > td {
  3327. background-color: #f5f7fa;
  3328. }
  3329. /* 仓库配置区域特殊样式 */
  3330. .part-edit-dialog .form-section .el-input-group {
  3331. display: flex;
  3332. width: 100%;
  3333. }
  3334. .part-edit-dialog .form-section .el-input-group .el-input:first-child {
  3335. flex: 0 0 25%;
  3336. }
  3337. .part-edit-dialog .form-section .el-input-group .el-input:last-child {
  3338. flex: 1;
  3339. }
  3340. .part-edit-dialog .form-section .el-input-group .el-input__inner {
  3341. border-radius: 0;
  3342. }
  3343. .part-edit-dialog .form-section .el-input-group .el-input:first-child .el-input__inner {
  3344. border-top-left-radius: 4px;
  3345. border-bottom-left-radius: 4px;
  3346. border-right: 0;
  3347. }
  3348. .part-edit-dialog .form-section .el-input-group .el-input:last-child .el-input__inner {
  3349. border-top-right-radius: 4px;
  3350. border-bottom-right-radius: 4px;
  3351. border-left: 0;
  3352. }
  3353. /* 滚动条样式 */
  3354. .part-edit-dialog .dialog-content::-webkit-scrollbar {
  3355. width: 6px;
  3356. }
  3357. .part-edit-dialog .dialog-content::-webkit-scrollbar-track {
  3358. background: #f1f1f1;
  3359. border-radius: 3px;
  3360. }
  3361. .part-edit-dialog .dialog-content::-webkit-scrollbar-thumb {
  3362. background: #c0c4cc;
  3363. border-radius: 3px;
  3364. }
  3365. .part-edit-dialog .dialog-content::-webkit-scrollbar-thumb:hover {
  3366. background: #909399;
  3367. }
  3368. </style>