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.

1692 lines
58 KiB

9 months ago
9 months ago
9 months ago
9 months ago
5 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
5 months ago
9 months ago
5 months ago
9 months ago
5 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 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.templateId" clearable style="width: 120px"></el-input>
  17. </el-form-item>
  18. <el-form-item :label="'模板名称'">
  19. <el-input v-model="searchData.templateName" clearable style="width: 200px"></el-input>
  20. </el-form-item>
  21. <el-form-item label="检验类型">
  22. <el-select v-model="searchData.inspectionTypeNo" placeholder="请选择" style="width: 100px">
  23. <el-option label="全部" value=""></el-option>
  24. <el-option
  25. v-for = "i in options"
  26. :key = "i.inspectionTypeNo"
  27. :label = "i.inspectionTypeName"
  28. :value = "i.inspectionTypeNo">
  29. </el-option>
  30. </el-select>
  31. </el-form-item>
  32. <el-form-item :label="' '">
  33. <el-button v-if="!authSearch" type="primary" @click="getDataList()">查询</el-button>
  34. <el-button v-if="!authSave" type="primary" @click="addModal()">新增</el-button>
  35. </el-form-item>
  36. <el-form-item :label="' '">
  37. <el-button type="primary" icon="el-icon-upload" @click="qcUpload()">导入</el-button>
  38. <el-button @click="exportExcel()" type="primary" style="margin-left: 2px">{{'导出'}}</el-button>
  39. </el-form-item>
  40. </el-form>
  41. <!-- 展示列表 -->
  42. <el-table
  43. :height="height"
  44. :data="dataList"
  45. border
  46. style="width: 100%;">
  47. <el-table-column
  48. v-for="(item,index) in columnList" :key="index"
  49. :sortable="item.columnSortable"
  50. :prop="item.columnProp"
  51. :header-align="item.headerAlign"
  52. :show-overflow-tooltip="item.showOverflowTooltip"
  53. :align="item.align"
  54. :fixed="item.fixed===''?false:item.fixed"
  55. :min-width="item.columnWidth"
  56. :label="item.columnLabel">
  57. <template slot-scope="scope">
  58. <span v-if="!item.columnHidden">
  59. <span v-if="columnsProp.includes(item.columnProp)">{{ scope.row[`${item.columnProp}Desc`] }}</span>
  60. <span v-else>
  61. {{ scope.row[item.columnProp] }}
  62. </span>
  63. </span>
  64. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
  65. </template>
  66. </el-table-column>
  67. <el-table-column
  68. fixed="right"
  69. header-align="center"
  70. align="center"
  71. width="160"
  72. label="操作">
  73. <template slot-scope="scope">
  74. <el-link style="cursor: pointer" v-if="!authUpdate" @click="updateModal(scope.row)">编辑</el-link>
  75. <el-link style="cursor: pointer" v-if="!authDetail" @click="detailModal(scope.row)">检验项目</el-link>
  76. <el-link style="cursor: pointer" v-if="!authDelete" @click="deleteModel(scope.row)">删除</el-link>
  77. </template>
  78. </el-table-column>
  79. </el-table>
  80. <!-- 分页栏 -->
  81. <el-pagination
  82. @size-change="sizeChangeHandle"
  83. @current-change="currentChangeHandle"
  84. :current-page="pageIndex"
  85. :page-sizes="[20, 50, 100, 200, 500]"
  86. :page-size="pageSize"
  87. :total="totalPage"
  88. layout="total, sizes, prev, pager, next, jumper">
  89. </el-pagination>
  90. <!-- 检验模板新增/修改 -->
  91. <el-dialog title="检验模板" :close-on-click-modal="false" v-drag :visible.sync="modalFlag" width="500px">
  92. <el-form :inline="true" label-position="top" :model="modalData" :rules="rules" style="margin-left: 7px;margin-top: -5px;">
  93. <el-form-item label="BU" prop="bu" :rules="rules.bu">
  94. <el-select v-model="modalData.bu" placeholder="请选择" :disabled="modalDisableFlag" style="width: 456px">
  95. <el-option
  96. v-for = "i in userBuList"
  97. :key = "i.buNo"
  98. :label = "i.sitename"
  99. :value = "i.buNo">
  100. <span style="float: left;width: 100px">{{ i.sitename }}</span>
  101. <span style="float: right; color: #8492a6;white-space:nowrap;overflow:hidden;text-overflow:ellipsis; font-size: 11px;width: 60px">
  102. {{ i.buDesc }}
  103. </span>
  104. </el-option>
  105. </el-select>
  106. </el-form-item>
  107. </el-form>
  108. <el-form :inline="true" label-position="top" :model="modalData" :rules="rules" style="margin-left: 7px;margin-top: -5px;">
  109. <el-form-item label="检验模板名称" prop="templateName" :rules="rules.templateNameType">
  110. <el-input v-model="modalData.templateName" style="width: 221px"></el-input>
  111. </el-form-item>
  112. <el-form-item label="检验类型" prop="inspectionTypeNo" :rules="rules.inspectionTypeNoType">
  113. <el-select v-model="modalData.inspectionTypeNo" placeholder="请选择" style="width: 221px">
  114. <el-option
  115. v-for = "i in options"
  116. :key = "i.inspectionTypeNo"
  117. :label = "i.inspectionTypeName"
  118. :value = "i.inspectionTypeNo">
  119. </el-option>
  120. </el-select>
  121. </el-form-item>
  122. </el-form>
  123. <el-form :inline="true" label-position="top" :model="modalData" style="margin-left: 7px;margin-top: -5px;">
  124. <el-form-item>
  125. <span slot="label" @click="getBaseList(207)"><a herf="#">抽样方案编码</a></span>
  126. <el-input v-model="modalData.samplingProgrammeNo" style="width: 221px"></el-input>
  127. </el-form-item>
  128. <el-form-item label="抽样方案名称">
  129. <el-input v-model="modalData.samplingProgrammeDesc" disabled style="width: 221px"></el-input>
  130. </el-form-item>
  131. </el-form>
  132. <el-form :inline="true" label-position="top" :model="modalData" style="margin-left: 7px;margin-top: -5px;">
  133. <el-form-item>
  134. <span slot="label" style="" @click="getBaseList(208)"><a herf="#">检验水平编码</a></span>
  135. <el-input v-model="modalData.samplingLevelNo" style="width: 221px"></el-input>
  136. </el-form-item>
  137. <el-form-item label="检验水平名称">
  138. <el-input v-model="modalData.samplingLevelDesc" disabled style="width: 221px"></el-input>
  139. </el-form-item>
  140. </el-form>
  141. <el-form :inline="true" label-position="top" style="margin-left: 7px;margin-top: -5px;">
  142. <el-form-item label="检验周期(h)">
  143. <el-input v-model="modalData.inspectionCycle" type="number" style="width: 143px"></el-input>
  144. </el-form-item>
  145. <el-form-item label="默认抽样数量">
  146. <el-input v-model="modalData.defaultSamplingQuantity" type="number" style="width: 143px"></el-input>
  147. </el-form-item>
  148. <el-form-item label="默认抽样比例">
  149. <el-input v-model="modalData.defaultSamplingProportion" type="number" style="width: 143px"></el-input>
  150. </el-form-item>
  151. </el-form>
  152. <el-form :inline="true" label-position="top" style="margin-left: 7px;margin-top: -5px;">
  153. <el-form-item label="AQL:">
  154. <el-input v-model="modalData.aql" type="number" style="width: 143px"></el-input>
  155. </el-form-item>
  156. <el-form-item label="AC:">
  157. <el-input v-model="modalData.ac" type="number" style="width: 143px"></el-input>
  158. </el-form-item>
  159. <el-form-item label="RE:">
  160. <el-input v-model="modalData.re" type="number" style="width: 143px"></el-input>
  161. </el-form-item>
  162. </el-form>
  163. <el-form :inline="true" label-position="top" style="margin-left: 7px;margin-top: -5px;">
  164. <el-form-item label="版本号">
  165. <el-input v-model="modalData.templateVersion" :disabled="modalDisableFlag" style="width: 221px"></el-input>
  166. </el-form-item>
  167. <el-form-item label="检验模板备注">
  168. <el-input v-model="modalData.templateRemark" style="width: 221px"></el-input>
  169. </el-form-item>
  170. </el-form>
  171. <el-footer style="height:40px;margin-top: 10px;text-align:center">
  172. <el-button type="primary" @click="saveData()">保存</el-button>
  173. <el-button type="primary" @click="modalFlag = false">关闭</el-button>
  174. </el-footer>
  175. </el-dialog>
  176. <!-- 检验项目 -->
  177. <el-dialog title="检验项目清单" @close="closeDialog" :close-on-click-modal="false" v-drag :visible.sync="detailModelFlag" width="940px">
  178. <el-form :inline="true" label-position="top" @keyup.enter.native="getDataList()">
  179. <el-form-item :label="'检验模板编码'">
  180. <el-input v-model="detailData.templateId" readonly style="width: 120px"></el-input>
  181. </el-form-item>
  182. <el-form-item :label="'检验模板名称'">
  183. <el-input v-model="detailData.templateName" readonly style="width: 240px"></el-input>
  184. </el-form-item>
  185. <el-form-item :label="' '">
  186. <el-button type="primary" @click="addFastModal()">新增</el-button>
  187. <el-button type="primary" @click="goUp()">上移</el-button>
  188. <el-button type="primary" @click="goDown()">下移</el-button>
  189. </el-form-item>
  190. </el-form>
  191. <!-- 检验项目展示列表 -->
  192. <div class="rq ">
  193. <el-table
  194. :height="400"
  195. :data="detailList"
  196. @row-click="itemClickRow"
  197. ref="detailTable"
  198. highlight-current-row
  199. border
  200. style="width: 100%;">
  201. <el-table-column
  202. v-for="(item,index) in columnDetailList" :key="index"
  203. :sortable="item.columnSortable"
  204. :prop="item.columnProp"
  205. :header-align="item.headerAlign"
  206. :show-overflow-tooltip="item.showOverflowTooltip"
  207. :align="item.align"
  208. :fixed="item.fixed===''?false:item.fixed"
  209. :min-width="item.columnWidth"
  210. :label="item.columnLabel">
  211. <template slot-scope="scope">
  212. <span v-if="!item.columnHidden"> {{ scope.row[item.columnProp] }}</span>
  213. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
  214. </template>
  215. </el-table-column>
  216. <el-table-column
  217. prop=""
  218. header-align="center"
  219. align="right"
  220. min-width="60"
  221. label="标准值">
  222. <template slot-scope="scope">
  223. <el-input v-model="scope.row.defaultValue" style="height: 11px;width:98%"></el-input>
  224. </template>
  225. </el-table-column>
  226. <el-table-column
  227. prop=""
  228. header-align="center"
  229. align="right"
  230. min-width="60"
  231. label="最大值">
  232. <template slot-scope="scope">
  233. <el-input v-if="scope.row.valueTypeDb === 'T'" v-model="scope.row.maxValue" disabled style="height: 11px;width:98%"></el-input>
  234. <el-input v-else v-model="scope.row.maxValue" style="height: 11px;width:98%"></el-input>
  235. </template>
  236. </el-table-column>
  237. <el-table-column
  238. prop=""
  239. header-align="center"
  240. align="right"
  241. min-width="60"
  242. label="最小值">
  243. <template slot-scope="scope">
  244. <el-input v-if="scope.row.valueTypeDb === 'T'" v-model="scope.row.minValue" disabled style="height: 11px;width:98%"></el-input>
  245. <el-input v-else v-model="scope.row.minValue" style="height: 11px;width:98%"></el-input>
  246. </template>
  247. </el-table-column>
  248. <el-table-column
  249. fixed="right"
  250. header-align="center"
  251. align="center"
  252. width="130"
  253. label="操作">
  254. <template slot-scope="scope">
  255. <a v-if="scope.row.valueTypeDb === 'N'" type="text" size="small" @click="inspectionStandardModal(scope.row)">判定标准</a>
  256. <a type="text" size="small" @click="delItemDetails(scope.row)">删除项目</a>
  257. </template>
  258. </el-table-column>
  259. </el-table>
  260. </div>
  261. <el-footer style="height:35px;margin-top: 15px;text-align:center">
  262. <el-button type="primary" @click="saveDetail()">保存</el-button>
  263. <el-button type="primary" @click="detailModelFlag = false">关闭</el-button>
  264. </el-footer>
  265. </el-dialog>
  266. <!-- 检验标准配置 -->
  267. <el-dialog title="检验标准" :close-on-click-modal="false" v-drag :visible.sync="inspectionStandardModalFlag" width="811px">
  268. <el-button type="success" icon="el-icon-plus" size="mini" @click="handleAddBtn">添加</el-button>
  269. <el-button type="danger" icon="el-icon-delete" size="mini" @click="handleDeleteBtn">删除</el-button>
  270. <div class="rq ">
  271. <el-table
  272. :height="300"
  273. :data="tableData"
  274. border
  275. :row-class-name="rowClassName"
  276. @selection-change="handleDetailSelectionChange"
  277. style="width: 100%;">
  278. <el-table-column type="selection" align="center" width="50"></el-table-column>
  279. <el-table-column label="序号" align="center" prop="seqNo" width="50"></el-table-column>
  280. <el-table-column prop="collectionSource" header-align="center" align="center" :required="true" label="采集数据来源" width="150">
  281. <template slot-scope="{row}">
  282. <el-select v-model="tableData[row.xh-1].collectionSource" clearable style="width: 140px">
  283. <el-option label="采集数据01" value="value0"></el-option>
  284. <el-option label="采集数据02" value="value1"></el-option>
  285. <el-option label="采集数据03" value="value2"></el-option>
  286. <el-option label="采集数据04" value="value3"></el-option>
  287. <el-option label="采集数据05" value="value4"></el-option>
  288. <el-option label="采集数据06" value="value5"></el-option>
  289. <el-option label="采集数据07" value="value6"></el-option>
  290. <el-option label="采集数据08" value="value7"></el-option>
  291. <el-option label="采集数据09" value="value8"></el-option>
  292. <el-option label="采集数据10" value="value9"></el-option>
  293. </el-select>
  294. </template>
  295. </el-table-column>
  296. <el-table-column prop="defaultValue" header-align="center" align="center" :required="true" label="标准值" width="150">
  297. <template slot-scope="{row}">
  298. <el-input :ref="`${row.xh-1}` + `a`" v-model="tableData[row.xh-1].defaultValue" @keyup.enter.native="nextFocus1(row.xh-1)" placeholder="请输入默认值"></el-input>
  299. </template>
  300. </el-table-column>
  301. <el-table-column prop="maxValue" header-align="center" align="center" :required="true" label="最大值" width="150">
  302. <template slot-scope="{row}">
  303. <el-input :ref="`${row.xh-1}` + `b`" v-model="tableData[row.xh-1].maxValue" @keyup.enter.native="nextFocus2(row.xh-1)" placeholder="请输入最大值"></el-input>
  304. </template>
  305. </el-table-column>
  306. <el-table-column prop="minValue" header-align="center" align="center" :required="true" label="最小值" width="150">
  307. <template slot-scope="{row}">
  308. <el-input :ref="`${row.xh-1}` + `c`" v-model="tableData[row.xh-1].minValue" @keyup.enter.native="nextFocus3(row.xh-1)" placeholder="请输入最小值"></el-input>
  309. </template>
  310. </el-table-column>
  311. <el-table-column prop="condition" header-align="center" align="center" :required="true" label="判断条件" width="90">
  312. <template slot-scope="{row}">
  313. <el-select v-model="tableData[row.xh-1].condition" clearable style="width: 80px">
  314. <el-option label="并且" value="&&"></el-option>
  315. <el-option label="或者" value="||"></el-option>
  316. </el-select>
  317. </template>
  318. </el-table-column>
  319. </el-table>
  320. </div>
  321. <el-footer style="height:40px;margin-top: 10px;text-align:center">
  322. <el-button type="primary" @click="saveInspectionStandard">保存</el-button>
  323. <el-button type="primary" @click="inspectionStandardModalFlag = false">关闭</el-button>
  324. </el-footer>
  325. </el-dialog>
  326. <!-- 检验项目->快速新增 -->
  327. <el-dialog title="新增" @close="refreshDetailList" :close-on-click-modal="false" v-drag :visible.sync="fastAddFlag" width="1100px">
  328. <div style="font-size: 12px">
  329. <el-form :inline="true" label-position="top" :model="detailData">
  330. <el-form-item :label="'项目编码'">
  331. <el-input v-model="detailData.itemNo" clearable style="width: 120px"></el-input>
  332. </el-form-item>
  333. <el-form-item :label="'项目名称'">
  334. <el-input v-model="detailData.itemDesc" clearable style="width: 200px"></el-input>
  335. </el-form-item>
  336. <el-form-item :label="' '">
  337. <el-button type="primary" @click="getItem()">查询</el-button>
  338. </el-form-item>
  339. </el-form>
  340. </div>
  341. <el-container style="margin-top: 0px;">
  342. <el-main style="width: 720px; padding: 1px">
  343. <span style="font-size: 12px" >可选项目</span>
  344. <el-table
  345. height="400px"
  346. :data="itemList1"
  347. border
  348. ref="itemTable1"
  349. @row-click="itemClickRow1"
  350. @selection-change="selectionItem1"
  351. highlight-current-row
  352. style="width: 100%">
  353. <el-table-column
  354. type="selection"
  355. header-align="center"
  356. align="center"
  357. :selectable="selectFlag"
  358. width="50">
  359. </el-table-column>
  360. <el-table-column
  361. prop="itemNo"
  362. header-align="center"
  363. align="center"
  364. min-width="80"
  365. label="项目编码">
  366. </el-table-column>
  367. <el-table-column
  368. prop="itemDesc"
  369. header-align="center"
  370. align="center"
  371. min-width="120"
  372. label="项目名称">
  373. </el-table-column>
  374. <el-table-column
  375. prop="defaultValue"
  376. header-align="center"
  377. align="center"
  378. min-width="100"
  379. label="标准值">
  380. </el-table-column>
  381. <el-table-column
  382. prop="maxValue"
  383. header-align="center"
  384. align="center"
  385. min-width="60"
  386. label="最大值">
  387. </el-table-column>
  388. <el-table-column
  389. prop="minValue"
  390. header-align="center"
  391. align="center"
  392. min-width="60"
  393. label="最小值">
  394. </el-table-column>
  395. </el-table>
  396. </el-main>
  397. <el-main style="width: 111px;padding: 1px">
  398. <div style="margin-top: 182px;margin-left: 18px">
  399. <el-button type="primary" @click="addItem()">添加>></el-button>
  400. </div>
  401. <div style="margin-top: 15px;margin-left: 18px">
  402. <el-button type="primary" @click="deleteItem()">删除<<</el-button>
  403. </div>
  404. </el-main>
  405. <el-main style="width: 400px;padding: 1px">
  406. <span style="font-size: 12px" >已有项目</span>
  407. <el-table
  408. height="400px"
  409. :data="itemList2"
  410. border
  411. ref="itemTable2"
  412. @row-click="itemClickRow2"
  413. @selection-change="selectionItem2"
  414. highlight-current-row
  415. style="width: 100%">
  416. <el-table-column
  417. type="selection"
  418. header-align="center"
  419. align="center"
  420. :selectable="selectFlag"
  421. width="50">
  422. </el-table-column>
  423. <el-table-column
  424. prop="itemNo"
  425. header-align="center"
  426. align="center"
  427. min-width="80"
  428. label="项目编码">
  429. </el-table-column>
  430. <el-table-column
  431. prop="itemDesc"
  432. header-align="center"
  433. align="center"
  434. min-width="200"
  435. label="项目名称">
  436. </el-table-column>
  437. </el-table>
  438. </el-main>
  439. </el-container>
  440. <el-footer style="height:40px;margin-top: 20px;text-align:center">
  441. <el-button type="primary" @click="fastAddFlag = false">关闭</el-button>
  442. </el-footer>
  443. </el-dialog>
  444. <Chooselist ref="baseList" @getBaseData="getBaseData"></Chooselist>
  445. <!-- 导入 -->
  446. <qcUpload ref="qcUpload" @refreshPageTables="getDataList()" v-drag></qcUpload>
  447. </div>
  448. </template>
  449. <script>
  450. import {
  451. templateSearch, // 查询模板
  452. templateSave, // 新增模板
  453. templateUpdate, // 修改模板
  454. templateDelete, // 删除模板
  455. checkTemplateReference, // 检查模板是否被物料引用
  456. inspectionTypeSearch, // 搜索所有检验类型
  457. objectSearch, // 搜索所有设备
  458. templateDetailsSearch, // 查询明细列表
  459. addItemDetails, // 新增项目的检验明细
  460. getItemList, // 获取明细列表
  461. delItemDetails, // 删除项目的检验明细
  462. saveItemDetailed, // 新增项目明细的最大最小值
  463. getItem, // 查询检验项目
  464. getSiteAndBuByUserName,
  465. getInspectionStandards, // 获取检验标准
  466. saveInspectionStandard, // 新增检验标准
  467. goUpItemQC, // 上移项目位置
  468. goDownItemQC,// 下移项目位置
  469. } from "@/api/qc/qc.js"
  470. import {getTableDefaultListLanguage, getTableUserListLanguage} from "@/api/table.js"
  471. import Chooselist from '@/views/modules/common/Chooselist_eam'
  472. import {userFavoriteList, saveUserFavorite, removeUserFavorite} from '@/api/userFavorite.js'
  473. import excel from "@/utils/excel-util.js"
  474. import qcUpload from "./qc_upload";
  475. export default {
  476. components: {
  477. Chooselist,
  478. qcUpload
  479. },
  480. data () {
  481. return {
  482. columnsProp:['createBy', 'updateBy'],
  483. // 是否收藏
  484. favorite: false,
  485. // 导出 start
  486. exportData: [],
  487. exportName: "根据物料设置检验模板" + this.dayjs().format('YYYYMMDDHHmmss'),
  488. exportHeader: ["根据物料设置检验模板"],
  489. exportFooter: [],
  490. exportList: [],
  491. // 导出 end
  492. tagNo: '',
  493. searchData: {
  494. site: '',
  495. userName: this.$store.state.user.name,
  496. templateId: '',
  497. templateName: '',
  498. inspectionTypeNo: '',
  499. buDesc: '',
  500. page: 1,
  501. limit: 10,
  502. },
  503. options: [],
  504. objects: [],
  505. height: 200,
  506. pageIndex: 1,
  507. pageSize: 20,
  508. totalPage: 0,
  509. modalFlag: false,
  510. modalDisableFlag: false,
  511. modalData: {
  512. flag: '',
  513. site: '',
  514. bu: '',
  515. templateId: '',
  516. templateName: '',
  517. templateRemark: '',
  518. templateType: '',
  519. templateVersion: '',
  520. samplingProgrammeNo: '',
  521. samplingProgrammeDesc: '',
  522. inspectionTypeNo: '',
  523. inspectionCycle: '',
  524. createTime: '',
  525. createBy: this.$store.state.user.name,
  526. updateBy: this.$store.state.user.name,
  527. samplingLevelNo: '',
  528. samplingLevelDesc: '',
  529. aql: '',
  530. ac: '',
  531. re: '',
  532. defaultSamplingQuantity: '',
  533. defaultSamplingProportion: '',
  534. },
  535. detailData: {
  536. site: '',
  537. buNo: '',
  538. templateId: '',
  539. templateName: '',
  540. templateRemark: '',
  541. templateType: '',
  542. templateVersion: '',
  543. samplingProgrammeNo: '',
  544. samplingProgrammeDesc: '',
  545. inspectionTypeNo: '',
  546. inspectionCycle: '',
  547. inspectionTypeName: '',
  548. createTime: '',
  549. createBy: this.$store.state.user.name,
  550. samplingLevelNo: '',
  551. samplingLevelDesc: '',
  552. aql: '',
  553. ac: '',
  554. re: '',
  555. itemNo: '',
  556. itemDesc: '',
  557. itemType: 'D',
  558. },
  559. columnList: [
  560. {
  561. userId: this.$store.state.user.name,
  562. functionId: 301008,
  563. serialNumber: '301008TableBuDesc',
  564. tableId: "301008Table",
  565. tableName: "检验模板维护表",
  566. columnProp: 'buDesc',
  567. headerAlign: "center",
  568. align: "center",
  569. columnLabel: 'BU',
  570. columnHidden: false,
  571. columnImage: false,
  572. columnSortable: false,
  573. sortLv: 0,
  574. status: true,
  575. fixed: '',
  576. columnWidth: 100,
  577. },
  578. {
  579. userId: this.$store.state.user.name,
  580. functionId: 301008,
  581. serialNumber: '301008TableItemNo',
  582. tableId: "301008Table",
  583. tableName: "检验模板维护表",
  584. columnProp: 'templateId',
  585. headerAlign: "center",
  586. align: "center",
  587. columnLabel: '检验模板编码',
  588. columnHidden: false,
  589. columnImage: false,
  590. columnSortable: false,
  591. sortLv: 0,
  592. status: true,
  593. fixed: '',
  594. columnWidth: 120,
  595. },
  596. {
  597. userId: this.$store.state.user.name,
  598. functionId: 301008,
  599. serialNumber: '301008TableItemNo',
  600. tableId: "301008Table",
  601. tableName: "检验模板维护表",
  602. columnProp: 'templateName',
  603. headerAlign: "center",
  604. align: "left",
  605. columnLabel: '检验模板名称',
  606. columnHidden: false,
  607. columnImage: false,
  608. columnSortable: false,
  609. sortLv: 0,
  610. status: true,
  611. fixed: '',
  612. columnWidth: 200,
  613. },
  614. {
  615. userId: this.$store.state.user.name,
  616. functionId: 301008,
  617. serialNumber: '301008TableItemNo',
  618. tableId: "301008Table",
  619. tableName: "检验模板维护表",
  620. columnProp: 'samplingProgrammeDesc',
  621. headerAlign: "center",
  622. align: "left",
  623. columnLabel: '抽样方案',
  624. columnHidden: false,
  625. columnImage: false,
  626. columnSortable: false,
  627. sortLv: 0,
  628. status: true,
  629. fixed: '',
  630. columnWidth: 120,
  631. },
  632. {
  633. userId: this.$store.state.user.name,
  634. functionId: 301008,
  635. serialNumber: '301008TableItemNo',
  636. tableId: "301008Table",
  637. tableName: "检验模板维护表",
  638. columnProp: 'samplingLevelDesc',
  639. headerAlign: "center",
  640. align: "left",
  641. columnLabel: '检验水平',
  642. columnHidden: false,
  643. columnImage: false,
  644. columnSortable: false,
  645. sortLv: 0,
  646. status: true,
  647. fixed: '',
  648. columnWidth: 120,
  649. },
  650. {
  651. userId: this.$store.state.user.name,
  652. functionId: 301008,
  653. serialNumber: '301008TableItemNo',
  654. tableId: "301008Table",
  655. tableName: "检验模板维护表",
  656. columnProp: 'inspectionCycle',
  657. headerAlign: "center",
  658. align: "right",
  659. columnLabel: '检验周期(h)',
  660. columnHidden: false,
  661. columnImage: false,
  662. columnSortable: false,
  663. sortLv: 0,
  664. status: true,
  665. fixed: '',
  666. columnWidth: 100,
  667. },
  668. {
  669. userId: this.$store.state.user.name,
  670. functionId: 301008,
  671. serialNumber: '301008TableItemNo',
  672. tableId: "301008Table",
  673. tableName: "检验模板维护表",
  674. columnProp: 'defaultSamplingQuantity',
  675. headerAlign: "center",
  676. align: "right",
  677. columnLabel: '默认抽样数量',
  678. columnHidden: false,
  679. columnImage: false,
  680. columnSortable: false,
  681. sortLv: 0,
  682. status: true,
  683. fixed: '',
  684. columnWidth: 100,
  685. },
  686. {
  687. userId: this.$store.state.user.name,
  688. functionId: 301008,
  689. serialNumber: '301008TableItemNo',
  690. tableId: "301008Table",
  691. tableName: "检验模板维护表",
  692. columnProp: 'defaultSamplingProportion',
  693. headerAlign: "center",
  694. align: "right",
  695. columnLabel: '默认抽样比例',
  696. columnHidden: false,
  697. columnImage: false,
  698. columnSortable: false,
  699. sortLv: 0,
  700. status: true,
  701. fixed: '',
  702. columnWidth: 100,
  703. },
  704. {
  705. userId: this.$store.state.user.name,
  706. functionId: 301008,
  707. serialNumber: '301008TableItemNo',
  708. tableId: "301008Table",
  709. tableName: "检验模板维护表",
  710. columnProp: 'aql',
  711. headerAlign: "center",
  712. align: "right",
  713. columnLabel: 'AQL',
  714. columnHidden: false,
  715. columnImage: false,
  716. columnSortable: false,
  717. sortLv: 0,
  718. status: true,
  719. fixed: '',
  720. columnWidth: 100,
  721. },
  722. {
  723. userId: this.$store.state.user.name,
  724. functionId: 301008,
  725. serialNumber: '301008TableItemNo',
  726. tableId: "301008Table",
  727. tableName: "检验模板维护表",
  728. columnProp: 'ac',
  729. headerAlign: "center",
  730. align: "right",
  731. columnLabel: 'AC',
  732. columnHidden: false,
  733. columnImage: false,
  734. columnSortable: false,
  735. sortLv: 0,
  736. status: true,
  737. fixed: '',
  738. columnWidth: 100,
  739. },
  740. {
  741. userId: this.$store.state.user.name,
  742. functionId: 301008,
  743. serialNumber: '301008TableItemNo',
  744. tableId: "301008Table",
  745. tableName: "检验模板维护表",
  746. columnProp: 're',
  747. headerAlign: "center",
  748. align: "right",
  749. columnLabel: 'RE',
  750. columnHidden: false,
  751. columnImage: false,
  752. columnSortable: false,
  753. sortLv: 0,
  754. status: true,
  755. fixed: '',
  756. columnWidth: 100,
  757. },
  758. {
  759. userId: this.$store.state.user.name,
  760. functionId: 301008,
  761. serialNumber: '301008TableItemNo',
  762. tableId: "301008Table",
  763. tableName: "检验模板维护表",
  764. columnProp: 'inspectionTypeName',
  765. headerAlign: "center",
  766. align: "center",
  767. columnLabel: '检验类型',
  768. columnHidden: false,
  769. columnImage: false,
  770. columnSortable: false,
  771. sortLv: 0,
  772. status: true,
  773. fixed: '',
  774. columnWidth: 100,
  775. },
  776. {
  777. userId: this.$store.state.user.name,
  778. functionId: 301008,
  779. serialNumber: '301008TableItemNo',
  780. tableId: "301008Table",
  781. tableName: "检验模板维护表",
  782. columnProp: 'templateRemark',
  783. headerAlign: "center",
  784. align: "left",
  785. columnLabel: '检验模板备注',
  786. columnHidden: false,
  787. columnImage: false,
  788. columnSortable: false,
  789. sortLv: 0,
  790. status: true,
  791. fixed: '',
  792. columnWidth: 200,
  793. },
  794. {
  795. userId: this.$store.state.user.name,
  796. functionId: 301008,
  797. serialNumber: '301008TableItemNo',
  798. tableId: "301008Table",
  799. tableName: "检验模板维护表",
  800. columnProp: 'templateVersion',
  801. headerAlign: "center",
  802. align: "center",
  803. columnLabel: '版本号',
  804. columnHidden: false,
  805. columnImage: false,
  806. columnSortable: false,
  807. sortLv: 0,
  808. status: true,
  809. fixed: '',
  810. columnWidth: 100,
  811. },
  812. {
  813. userId: this.$store.state.user.name,
  814. functionId: 301008,
  815. serialNumber: '301008TableItemNo',
  816. tableId: "301008Table",
  817. tableName: "检验模板维护表",
  818. columnProp: 'createTime',
  819. headerAlign: "center",
  820. align: "center",
  821. columnLabel: '创建时间',
  822. columnHidden: false,
  823. columnImage: false,
  824. columnSortable: false,
  825. sortLv: 0,
  826. status: true,
  827. fixed: '',
  828. columnWidth: 170,
  829. },
  830. {
  831. userId: this.$store.state.user.name,
  832. functionId: 301008,
  833. serialNumber: '301008TableItemNo',
  834. tableId: "301008Table",
  835. tableName: "检验模板维护表",
  836. columnProp: 'createBy',
  837. headerAlign: "center",
  838. align: "center",
  839. columnLabel: '创建人',
  840. columnHidden: false,
  841. columnImage: false,
  842. columnSortable: false,
  843. sortLv: 0,
  844. status: true,
  845. fixed: '',
  846. columnWidth: 100,
  847. },
  848. {
  849. userId: this.$store.state.user.name,
  850. functionId: 301008,
  851. serialNumber: '301008TableItemNo',
  852. tableId: "301008Table",
  853. tableName: "检验模板维护表",
  854. columnProp: 'updateDate',
  855. headerAlign: 'center',
  856. align: 'center',
  857. columnLabel: '更新时间',
  858. columnHidden: false,
  859. columnImage: false,
  860. columnSortable: false,
  861. sortLv: 0,
  862. status: true,
  863. fixed: '',
  864. columnWidth: 170,
  865. },
  866. {
  867. userId: this.$store.state.user.name,
  868. functionId: 301008,
  869. serialNumber: '301008TableItemNo',
  870. tableId: "301008Table",
  871. tableName: "检验模板维护表",
  872. columnProp: 'updateBy',
  873. headerAlign: 'center',
  874. align: 'center',
  875. columnLabel: '更新人',
  876. columnHidden: false,
  877. columnImage: false,
  878. columnSortable: false,
  879. sortLv: 0,
  880. status: true,
  881. fixed: '',
  882. columnWidth: 100,
  883. },
  884. ],
  885. detailModelFlag: false,
  886. detailList: [],
  887. dataList: [],
  888. // 展示列集
  889. columnDetailList: [
  890. {
  891. columnProp: 'itemNo',
  892. headerAlign: "center",
  893. align: "center",
  894. columnLabel: '检验项目编码',
  895. columnHidden: false,
  896. columnImage: false,
  897. columnSortable: false,
  898. sortLv: 0,
  899. status: true,
  900. fixed: '',
  901. columnWidth: 60
  902. },
  903. {
  904. columnProp: 'itemDesc',
  905. headerAlign: "center",
  906. align: "left",
  907. columnLabel: '检验项目名称',
  908. columnHidden: false,
  909. columnImage: false,
  910. columnSortable: false,
  911. sortLv: 0,
  912. status: true,
  913. fixed: '',
  914. columnWidth: 250
  915. },
  916. {
  917. columnProp: 'valueType',
  918. headerAlign: "center",
  919. align: "center",
  920. columnLabel: '检测值类型',
  921. columnHidden: false,
  922. columnImage: false,
  923. columnSortable: false,
  924. sortLv: 0,
  925. status: true,
  926. fixed: '',
  927. columnWidth: 60
  928. },
  929. ],
  930. // 快速添加
  931. fastAddFlag: false,
  932. itemList1: [],
  933. itemList2: [],
  934. itemListRow1: {},
  935. itemListRow2: {},
  936. itemSelections1: [],
  937. itemSelections2: [],
  938. searchForm: {
  939. objectID: '',
  940. objectDesc: ''
  941. },
  942. currentRow:{},
  943. rules: {
  944. templateNameType: [
  945. {
  946. required: true,
  947. message: ' ',
  948. trigger: ['blur','change']
  949. }
  950. ],
  951. inspectionTypeNoType: [
  952. {
  953. required: true,
  954. message: ' ',
  955. trigger: ['blur','change']
  956. }
  957. ],
  958. bu: [
  959. {
  960. required: true,
  961. message: ' ',
  962. trigger: ['blur','change']
  963. }
  964. ]
  965. },
  966. userBuList: [],
  967. authSearch: false,
  968. authSave: false,
  969. authUpdate: false,
  970. authDelete: false,
  971. authDetail: false,
  972. menuId: this.$route.meta.menuId,
  973. inspectionStandardModalFlag: false,
  974. standardData: {
  975. site: '',
  976. buNo: '',
  977. templateId: '',
  978. itemNo: '',
  979. standardList: []
  980. },
  981. tableData: [],
  982. checkedDetail: [],
  983. }
  984. },
  985. mounted () {
  986. this.$nextTick(() => {
  987. this.height = window.innerHeight - 180
  988. })
  989. },
  990. created () {
  991. // 按钮控制
  992. this.getButtonAuthData()
  993. // 获取用户的 site 和 bu
  994. this.getSiteAndBuByUserName()
  995. // 校验用户是否收藏
  996. this.favoriteIsOk()
  997. // 获取检验类型
  998. this.inspectionTypeSearch()
  999. // 动态列
  1000. this.getTableUserColumn(this.$route.meta.menuId+'table',1)
  1001. if (!this.authSearch) {
  1002. // 获取数据列表
  1003. this.getDataList()
  1004. }
  1005. },
  1006. methods: {
  1007. // 设置检验清单
  1008. inspectionStandardModal (row) {
  1009. this.standardData = {
  1010. site: row.site,
  1011. buNo: row.buNo,
  1012. templateId: row.templateId,
  1013. itemNo: row.itemNo,
  1014. standardList: []
  1015. }
  1016. getInspectionStandards(this.standardData).then(({data}) => {
  1017. if (data.code === 0) {
  1018. this.tableData = data.rows
  1019. } else {
  1020. this.tableData = []
  1021. }
  1022. })
  1023. this.inspectionStandardModalFlag = true
  1024. },
  1025. //表格的新增
  1026. rowClassName ({ row, rowIndex }) {
  1027. row.xh = rowIndex + 1
  1028. row.seqNo = rowIndex + 1
  1029. },
  1030. //单选框选中数据
  1031. handleDetailSelectionChange (selection) {
  1032. this.checkedDetail = selection
  1033. },
  1034. // 点击新增
  1035. handleAddBtn () {
  1036. let obj = {
  1037. seqNo: '',
  1038. collectionSource: '',
  1039. defaultValue: '',
  1040. minValue: '',
  1041. maxValue: '',
  1042. condition: ''
  1043. }
  1044. this.tableData.push(obj)
  1045. },
  1046. //删除
  1047. handleDeleteBtn () {
  1048. if (this.checkedDetail.length === 0) {
  1049. this.$alert("请先选择要删除的数据", "提示", {
  1050. confirmButtonText: "确定",
  1051. })
  1052. } else {
  1053. this.$confirm("请是否确认删除该检验标准?", "提示", {
  1054. confirmButtonText: "确定",
  1055. cancelButtonText: "取消",
  1056. type: "warning",
  1057. callback: (action) => {
  1058. if (action === "confirm") {
  1059. let val = this.checkedDetail
  1060. val.forEach((val, index) => {
  1061. this.tableData.forEach((v, i) => {
  1062. if (val.xh === v.xh) {
  1063. this.tableData.splice(i, 1)
  1064. }
  1065. })
  1066. })
  1067. this.$message({
  1068. message: "删除成功!",
  1069. type: "success",
  1070. })
  1071. return
  1072. } else {
  1073. this.$message({
  1074. message: "已取消删除操作",
  1075. type: "warning",
  1076. })
  1077. return
  1078. }
  1079. },
  1080. })
  1081. }
  1082. },
  1083. // 回车事件
  1084. nextFocus1 (index) {
  1085. let a1 = `${index + 1}` + `a`
  1086. this.$nextTick(() => {
  1087. this.$refs[a1].focus()
  1088. })
  1089. },
  1090. nextFocus2 (index) {
  1091. let a2 = `${index + 1}` + `b`
  1092. this.$nextTick(() => {
  1093. this.$refs[a2].focus()
  1094. })
  1095. },
  1096. nextFocus3 (index) {
  1097. let a3 = `${index + 1}` + `c`
  1098. this.$nextTick(() => {
  1099. this.$refs[a3].focus()
  1100. })
  1101. },
  1102. // 新增检验标准
  1103. saveInspectionStandard () {
  1104. this.standardData.standardList = this.tableData
  1105. saveInspectionStandard(this.standardData).then(({data}) => {
  1106. if (data && data.code === 0) {
  1107. this.inspectionStandardModalFlag = false
  1108. this.tableData = []
  1109. this.$message.success('操作成功')
  1110. } else {
  1111. this.$message.error(data.msg)
  1112. }
  1113. })
  1114. },
  1115. // 获取用户的bu
  1116. getSiteAndBuByUserName () {
  1117. let tempData = {
  1118. username: this.$store.state.user.name,
  1119. }
  1120. getSiteAndBuByUserName(tempData).then(({data}) => {
  1121. if (data.code === 0) {
  1122. this.userBuList = data.rows
  1123. }
  1124. })
  1125. },
  1126. // 查询检验项目
  1127. getItem () {
  1128. getItem(this.detailData).then(({data}) => {
  1129. if (data.code === 0) {
  1130. this.itemList1 = data.rows
  1131. }
  1132. })
  1133. },
  1134. // 查询检验类型
  1135. inspectionTypeSearch () {
  1136. let tempData = {
  1137. site: this.$store.state.user.site
  1138. }
  1139. inspectionTypeSearch(tempData).then(({data}) => {
  1140. if (data.code === 0) {
  1141. this.options = data.rows
  1142. }
  1143. })
  1144. },
  1145. // 查询设备
  1146. objectSearch () {
  1147. let tempData = {
  1148. site: this.detailData.site,
  1149. buNo: this.detailData.buNo
  1150. }
  1151. objectSearch(tempData).then(({data}) => {
  1152. if (data.code === 0) {
  1153. this.objects = data.rows
  1154. }
  1155. })
  1156. },
  1157. // 获取基础数据列表S
  1158. getBaseList (val,type) {
  1159. this.tagNo = val
  1160. this.$nextTick(() => {
  1161. let strVal = ''
  1162. let conSql = ''
  1163. if (this.modalData.bu === null || this.modalData.bu === '') {
  1164. this.$message.warning("请选择BU!")
  1165. return
  1166. } else {
  1167. conSql = " and site = '" + this.modalData.bu.split('_')[0] + "'" + " and bu_no = '" + this.modalData.bu.split('_')[1] + "'"
  1168. }
  1169. if (val === 207) {
  1170. strVal = this.modalData.samplingProgrammeNo
  1171. }
  1172. if (val === 208) {
  1173. strVal = this.modalData.samplingLevelNo
  1174. }
  1175. this.$refs.baseList.init(val, strVal, conSql)
  1176. })
  1177. },
  1178. // 列表方法的回调
  1179. getBaseData (val) {
  1180. if (this.tagNo === 207) {
  1181. this.modalData.samplingProgrammeNo = val.sampling_programme_no
  1182. this.modalData.samplingProgrammeDesc = val.sampling_programme_desc
  1183. }
  1184. if (this.tagNo === 208) {
  1185. this.modalData.samplingLevelNo = val.sampling_level_no
  1186. this.modalData.samplingLevelDesc = val.sampling_level_desc
  1187. }
  1188. },
  1189. // 获取数据列表
  1190. getDataList () {
  1191. this.searchData.limit = this.pageSize
  1192. this.searchData.page = this.pageIndex
  1193. templateSearch(this.searchData).then(({data}) => {
  1194. if (data.code === 0) {
  1195. this.dataList = data.page.list
  1196. this.pageIndex = data.page.currPage
  1197. this.pageSize = data.page.pageSize
  1198. this.totalPage = data.page.totalCount
  1199. }
  1200. })
  1201. },
  1202. // 每页数
  1203. sizeChangeHandle (val) {
  1204. this.pageSize = val
  1205. this.pageIndex = 1
  1206. this.getDataList()
  1207. },
  1208. // 当前页
  1209. currentChangeHandle (val) {
  1210. this.pageIndex = val
  1211. this.getDataList()
  1212. },
  1213. addModal () {
  1214. this.modalData = {
  1215. flag: '1',
  1216. site: '',
  1217. bu: this.userBuList[0].buNo,
  1218. templateId: '',
  1219. templateName: '',
  1220. templateRemark: '',
  1221. templateType: '',
  1222. templateVersion: '',
  1223. samplingProgrammeNo: '',
  1224. samplingProgrammeDesc: '',
  1225. inspectionTypeNo: '',
  1226. inspectionCycle: '',
  1227. createBy: this.$store.state.user.name,
  1228. updateBy: this.$store.state.user.name,
  1229. samplingLevelNo: '',
  1230. samplingLevelDesc: '',
  1231. aql: '',
  1232. ac: '',
  1233. re: ''
  1234. }
  1235. this.modalDisableFlag = false
  1236. this.modalFlag = true
  1237. },
  1238. updateModal (row) {
  1239. this.modalData = {
  1240. flag: '2',
  1241. bu: row.site + '_' + row.buNo,
  1242. site: row.site,
  1243. templateId: row.templateId,
  1244. templateName: row.templateName,
  1245. templateRemark: row.templateRemark,
  1246. templateType: row.templateType,
  1247. templateVersion: row.templateVersion,
  1248. samplingProgrammeNo: row.samplingProgrammeNo,
  1249. samplingProgrammeDesc: row.samplingProgrammeDesc,
  1250. inspectionTypeNo: row.inspectionTypeNo,
  1251. createBy: this.$store.state.user.name,
  1252. updateBy: this.$store.state.user.name,
  1253. samplingLevelNo: row.samplingLevelNo,
  1254. samplingLevelDesc: row.samplingLevelDesc,
  1255. inspectionCycle: row.inspectionCycle,
  1256. aql: row.aql,
  1257. ac: row.ac,
  1258. re: row.re,
  1259. defaultSamplingQuantity: row.defaultSamplingQuantity,
  1260. defaultSamplingProportion: row.defaultSamplingProportion
  1261. }
  1262. this.modalDisableFlag = true
  1263. this.modalFlag = true
  1264. },
  1265. // 删除
  1266. deleteModel (row) {
  1267. // 先检查模板是否被物料引用
  1268. checkTemplateReference({
  1269. site: row.site,
  1270. buNo: row.buNo,
  1271. templateId: row.templateId
  1272. }).then(({data}) => {
  1273. if (data && data.code === 0) {
  1274. if (data.isReferenced) {
  1275. // 模板被引用,提示不能删除
  1276. this.$message.warning(`该模板已被 ${data.referenceCount} 个物料引用,无法删除!`)
  1277. } else {
  1278. // 模板未被引用,可以删除
  1279. this.$confirm(`是否删除这个检验模板?`, '提示', {
  1280. confirmButtonText: '确定',
  1281. cancelButtonText: '取消',
  1282. type: 'warning'
  1283. }).then(() => {
  1284. templateDelete(row).then(({data}) => {
  1285. if (data && data.code === 0) {
  1286. this.getDataList()
  1287. this.$message.success('操作成功')
  1288. } else {
  1289. this.$message.error(data.msg)
  1290. }
  1291. })
  1292. })
  1293. }
  1294. } else {
  1295. this.$message.error(data.msg || '检查模板引用失败')
  1296. }
  1297. }).catch(() => {
  1298. this.$message.error('检查模板引用失败')
  1299. })
  1300. },
  1301. saveData () {
  1302. if (this.modalData.bu === '' || this.modalData.bu == null) {
  1303. this.$message.warning('请选择BU!')
  1304. return
  1305. }
  1306. if (this.modalData.templateName === '' || this.modalData.templateName == null) {
  1307. this.$message.warning('请输入检验模板名称!')
  1308. return
  1309. }
  1310. if (this.modalData.inspectionTypeNo === '' || this.modalData.inspectionTypeNo == null) {
  1311. this.$message.warning('请选择检验类型!')
  1312. return
  1313. }
  1314. if ((this.modalData.samplingProgrammeNo === '' || this.modalData.samplingProgrammeNo == null) && (this.modalData.defaultSamplingQuantity === '' || this.modalData.defaultSamplingQuantity == null) && (this.modalData.defaultSamplingProportion === '' || this.modalData.defaultSamplingProportion == null)) {
  1315. this.$message.warning('抽样方案、默认抽样数量、默认抽样比例至少选择一项!')
  1316. return
  1317. }
  1318. if ((this.modalData.samplingProgrammeNo !== '' && this.modalData.samplingProgrammeNo != null) && (this.modalData.samplingLevelNo === '' || this.modalData.samplingLevelNo == null)) {
  1319. this.$message.warning('请选择检验水平!')
  1320. return
  1321. }
  1322. if (this.modalData.flag === '1') {
  1323. templateSave(this.modalData).then(({data}) => {
  1324. if (data && data.code === 0) {
  1325. this.getDataList()
  1326. this.modalFlag = false
  1327. this.$message.success('操作成功')
  1328. } else {
  1329. this.$message.error(data.msg)
  1330. }
  1331. })
  1332. } else {
  1333. templateUpdate(this.modalData).then(({data}) => {
  1334. if (data && data.code === 0) {
  1335. this.getDataList()
  1336. this.modalFlag = false
  1337. this.$message.success('操作成功')
  1338. } else {
  1339. this.$message.error(data.msg)
  1340. }
  1341. })
  1342. }
  1343. },
  1344. // 打开检验项目
  1345. detailModal (row) {
  1346. this.detailData.site = row.site
  1347. this.detailData.buNo = row.buNo
  1348. this.detailData.templateId = row.templateId
  1349. this.detailData.templateName = row.templateName
  1350. this.detailData.inspectionTypeName = row.inspectionTypeName
  1351. templateDetailsSearch(this.detailData).then(({data}) => {
  1352. this.detailList = data.rows
  1353. })
  1354. this.detailModelFlag = true
  1355. },
  1356. // 保存模板项目
  1357. saveDetail () {
  1358. let tempData = {
  1359. site: this.detailData.site,
  1360. buNo: this.detailData.buNo,
  1361. templateId: this.detailData.templateId,
  1362. itemList: this.detailList
  1363. }
  1364. saveItemDetailed(tempData).then(({data}) => {
  1365. if (data && data.code === 0) {
  1366. this.getDataList()
  1367. this.detailModelFlag = false
  1368. this.$message.success('操作成功')
  1369. } else {
  1370. this.$message.error(data.msg)
  1371. }
  1372. })
  1373. },
  1374. // 快速新增
  1375. addFastModal () {
  1376. this.itemSelections1 = null
  1377. this.itemSelections2 = null
  1378. getItemList(this.detailData).then(({data}) => {
  1379. this.itemList1 = data.row1
  1380. this.itemList2 = data.row2
  1381. })
  1382. this.fastAddFlag = true
  1383. },
  1384. // 可选项目
  1385. itemClickRow1 (row) {
  1386. this.$refs.itemTable1.toggleRowSelection(row)
  1387. },
  1388. itemClickRow(row){
  1389. this.currentRow= JSON.parse(JSON.stringify(row))
  1390. },
  1391. // 已有项目
  1392. itemClickRow2 (row) {
  1393. this.$refs.itemTable2.toggleRowSelection(row)
  1394. },
  1395. selectFlag () {
  1396. return true
  1397. },
  1398. selectionItem1 (val) {
  1399. this.itemSelections1 = val
  1400. },
  1401. selectionItem2 (val) {
  1402. this.itemSelections2 = val
  1403. },
  1404. // 添加明细
  1405. addItem () {
  1406. if (this.itemSelections1 == null || this.itemSelections1.length === 0) {
  1407. this.$message.warning('请选择可选项目!')
  1408. return
  1409. }
  1410. let inData = {
  1411. site: this.detailData.site,
  1412. buNo: this.detailData.buNo,
  1413. templateId: this.detailData.templateId,
  1414. templateName: this.detailData.templateName,
  1415. itemList: this.itemSelections1,
  1416. itemType: this.detailData.itemType,
  1417. }
  1418. addItemDetails(inData).then(({data}) => {
  1419. if (data && data.code === 0) {
  1420. getItemList(this.detailData).then(({data}) => {
  1421. this.itemList1 = data.row1
  1422. this.itemList2 = data.row2
  1423. })
  1424. this.itemSelections1 = []
  1425. } else {
  1426. this.$message.error(data.msg)
  1427. }
  1428. })
  1429. },
  1430. // 删除明细
  1431. deleteItem () {
  1432. if (this.itemSelections2 == null || this.itemSelections2.length === 0) {
  1433. this.$message.warning('请选择已有项目!')
  1434. return
  1435. }
  1436. let inData = {
  1437. site: this.detailData.site,
  1438. buNo: this.detailData.buNo,
  1439. templateId: this.detailData.templateId,
  1440. templateName: this.detailData.templateName,
  1441. itemList: this.itemSelections2,
  1442. itemType: this.detailData.itemType
  1443. }
  1444. delItemDetails(inData).then(({data}) => {
  1445. if (data && data.code === 0) {
  1446. getItemList(this.detailData).then(({data}) => {
  1447. this.itemList1 = data.row1
  1448. this.itemList2 = data.row2
  1449. })
  1450. this.itemSelections2 = []
  1451. } else {
  1452. this.$message.error(data.msg)
  1453. }
  1454. })
  1455. },
  1456. // 关闭后刷新列表
  1457. refreshDetailList () {
  1458. templateDetailsSearch(this.detailData).then(({data}) => {
  1459. this.detailList = data.rows
  1460. })
  1461. },
  1462. closeDialog (){
  1463. this.detailList = []
  1464. this.itemList1 = []
  1465. this.itemList2 = []
  1466. },
  1467. // 删除项目中的明细
  1468. delItemDetails (row) {
  1469. this.$confirm(`是否删除这个检验明细?`, '提示', {
  1470. confirmButtonText: '确定',
  1471. cancelButtonText: '取消',
  1472. type: 'warning'
  1473. }).then(() => {
  1474. delItemDetails(row).then(({data}) => {
  1475. if (data && data.code === 0) {
  1476. templateDetailsSearch(this.detailData).then(({data}) => {
  1477. this.detailList = data.rows
  1478. })
  1479. this.$message.success('操作成功')
  1480. } else {
  1481. this.$message.error(data.msg)
  1482. }
  1483. })
  1484. })
  1485. },
  1486. // 校验用户是否收藏
  1487. favoriteIsOk () {
  1488. let userFavorite = {
  1489. userId: this.$store.state.user.id,
  1490. languageCode: this.$i18n.locale
  1491. }
  1492. userFavoriteList(userFavorite).then(({data}) => {
  1493. for (let i = 0; i < data.list.length; i++) {
  1494. if (this.$route.meta.menuId === data.list[i].menuId) {
  1495. this.favorite = true
  1496. }
  1497. }
  1498. })
  1499. },
  1500. // 收藏 OR 取消收藏
  1501. favoriteFunction () {
  1502. let userFavorite = {
  1503. userId: this.$store.state.user.id,
  1504. functionId: this.$route.meta.menuId,
  1505. }
  1506. if (this.favorite) {
  1507. removeUserFavorite(userFavorite).then(({data}) => {
  1508. this.$message.success(data.msg)
  1509. this.favorite = false
  1510. })
  1511. } else {
  1512. // 收藏
  1513. saveUserFavorite(userFavorite).then(({data}) => {
  1514. this.$message.success(data.msg)
  1515. this.favorite = true
  1516. })
  1517. }
  1518. },
  1519. goUp() {
  1520. goUpItemQC(this.currentRow).then(({data}) => {
  1521. if (data && data.code === 0) {
  1522. templateDetailsSearch(this.detailData).then(({data}) => {
  1523. this.detailList = data.rows
  1524. for (let i = 0; i < this.detailList.length; i++) {
  1525. if (this.detailList[i].itemNo === this.currentRow.itemNo) {
  1526. this.$refs.detailTable.setCurrentRow(this.detailList[i]);
  1527. this.currentRow = JSON.parse(JSON.stringify(this.detailList[i]))
  1528. this.$message.success('操作成功')
  1529. }
  1530. }
  1531. })
  1532. }
  1533. })
  1534. },
  1535. goDown () {
  1536. goDownItemQC(this.currentRow).then(({data}) => {
  1537. if (data && data.code === 0) {
  1538. templateDetailsSearch(this.detailData).then(({data}) => {
  1539. this.detailList = data.rows
  1540. for (let i = 0; i <this.detailList.length; i++) {
  1541. if (this.detailList[i].itemNo === this.currentRow.itemNo) {
  1542. this.$refs.detailTable.setCurrentRow(this.detailList[i])
  1543. this.currentRow = JSON.parse(JSON.stringify(this.detailList[i]))
  1544. this.$message.success('操作成功')
  1545. }
  1546. }
  1547. })
  1548. }
  1549. })
  1550. },
  1551. // 导入
  1552. qcUpload () {
  1553. let currentData = {
  1554. flag: 'template',
  1555. createBy: this.$store.state.user.name,
  1556. site: this.$store.state.user.site,
  1557. }
  1558. //打开组件 去做新增业务
  1559. this.$nextTick(() => {
  1560. this.$refs.qcUpload.init(currentData)
  1561. })
  1562. },
  1563. async exportExcel() {
  1564. this.searchData.limit = -1
  1565. this.searchData.page = 1
  1566. excel.exportTable({
  1567. url: "/pms/qc/templateSearch",
  1568. columnMapping: this.columnList, //可以直接用table,不需要的列就剔除
  1569. mergeSetting: [],//需要合并的列
  1570. params: this.searchData,
  1571. fileName: this.exportName+".xlsx",
  1572. rowFetcher: res => res.data,
  1573. columnFormatter: [],
  1574. dropColumns: [],
  1575. })
  1576. },
  1577. // 动态列开始 获取 用户保存的 格式列
  1578. async getTableUserColumn (tableId, columnId) {
  1579. let queryTableUser = {
  1580. userId: this.$store.state.user.name,
  1581. functionId: this.$route.meta.menuId,
  1582. tableId: tableId,
  1583. status: true,
  1584. languageCode: this.$i18n.locale
  1585. }
  1586. await getTableUserListLanguage(queryTableUser).then(({data}) => {
  1587. if (data.rows.length > 0) {
  1588. switch (columnId) {
  1589. case 1:
  1590. this.columnList = data.rows
  1591. break;
  1592. }
  1593. } else {
  1594. this.getColumnList(tableId, columnId)
  1595. }
  1596. })
  1597. },
  1598. // 获取 tableDefault 列
  1599. async getColumnList (tableId, columnId) {
  1600. let queryTable= {
  1601. functionId: this.$route.meta.menuId,
  1602. tableId: tableId,
  1603. languageCode: this.$i18n.locale
  1604. }
  1605. await getTableDefaultListLanguage(queryTable).then(({data}) => {
  1606. if (data.rows.length !== 0) {
  1607. switch (columnId) {
  1608. case 1:
  1609. this.columnList = data.rows
  1610. break;
  1611. }
  1612. }
  1613. })
  1614. },
  1615. //获取按钮的权限数据
  1616. getButtonAuthData () {
  1617. let searchFlag = this.isAuth(this.menuId+":search")
  1618. let saveFlag = this.isAuth(this.menuId+":save")
  1619. let updateFlag = this.isAuth(this.menuId+":update")
  1620. let deleteFlag = this.isAuth(this.menuId+":delete")
  1621. let detailFlag = this.isAuth(this.menuId+":detail")
  1622. //处理页面的权限数据
  1623. this.authSearch = !searchFlag
  1624. this.authSave = !saveFlag
  1625. this.authUpdate = !updateFlag
  1626. this.authDelete = !deleteFlag
  1627. this.authDetail = !detailFlag
  1628. },
  1629. }
  1630. }
  1631. </script>
  1632. <style scoped>
  1633. /deep/ .el-autocomplete-suggestion {
  1634. width: auto!important;
  1635. }
  1636. .el-table /deep/ .cell{
  1637. height: auto;
  1638. line-height: 1.5;
  1639. }
  1640. </style>