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.

1672 lines
57 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
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
  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. inspectionTypeSearch, // 搜索所有检验类型
  456. objectSearch, // 搜索所有设备
  457. templateDetailsSearch, // 查询明细列表
  458. addItemDetails, // 新增项目的检验明细
  459. getItemList, // 获取明细列表
  460. delItemDetails, // 删除项目的检验明细
  461. saveItemDetailed, // 新增项目明细的最大最小值
  462. getItem, // 查询检验项目
  463. getSiteAndBuByUserName,
  464. getInspectionStandards, // 获取检验标准
  465. saveInspectionStandard, // 新增检验标准
  466. goUpItemQC, // 上移项目位置
  467. goDownItemQC,// 下移项目位置
  468. } from "@/api/qc/qc.js"
  469. import {getTableDefaultListLanguage, getTableUserListLanguage} from "@/api/table.js"
  470. import Chooselist from '@/views/modules/common/Chooselist_eam'
  471. import {userFavoriteList, saveUserFavorite, removeUserFavorite} from '@/api/userFavorite.js'
  472. import excel from "@/utils/excel-util.js"
  473. import qcUpload from "./qc_upload";
  474. export default {
  475. components: {
  476. Chooselist,
  477. qcUpload
  478. },
  479. data () {
  480. return {
  481. columnsProp:['createBy', 'updateBy'],
  482. // 是否收藏
  483. favorite: false,
  484. // 导出 start
  485. exportData: [],
  486. exportName: "根据物料设置检验模板" + this.dayjs().format('YYYYMMDDHHmmss'),
  487. exportHeader: ["根据物料设置检验模板"],
  488. exportFooter: [],
  489. exportList: [],
  490. // 导出 end
  491. tagNo: '',
  492. searchData: {
  493. site: '',
  494. userName: this.$store.state.user.name,
  495. templateId: '',
  496. templateName: '',
  497. inspectionTypeNo: '',
  498. buDesc: '',
  499. page: 1,
  500. limit: 10,
  501. },
  502. options: [],
  503. objects: [],
  504. height: 200,
  505. pageIndex: 1,
  506. pageSize: 20,
  507. totalPage: 0,
  508. modalFlag: false,
  509. modalDisableFlag: false,
  510. modalData: {
  511. flag: '',
  512. site: '',
  513. bu: '',
  514. templateId: '',
  515. templateName: '',
  516. templateRemark: '',
  517. templateType: '',
  518. templateVersion: '',
  519. samplingProgrammeNo: '',
  520. samplingProgrammeDesc: '',
  521. inspectionTypeNo: '',
  522. inspectionCycle: '',
  523. createTime: '',
  524. createBy: this.$store.state.user.name,
  525. updateBy: this.$store.state.user.name,
  526. samplingLevelNo: '',
  527. samplingLevelDesc: '',
  528. aql: '',
  529. ac: '',
  530. re: '',
  531. defaultSamplingQuantity: '',
  532. defaultSamplingProportion: '',
  533. },
  534. detailData: {
  535. site: '',
  536. buNo: '',
  537. templateId: '',
  538. templateName: '',
  539. templateRemark: '',
  540. templateType: '',
  541. templateVersion: '',
  542. samplingProgrammeNo: '',
  543. samplingProgrammeDesc: '',
  544. inspectionTypeNo: '',
  545. inspectionCycle: '',
  546. inspectionTypeName: '',
  547. createTime: '',
  548. createBy: this.$store.state.user.name,
  549. samplingLevelNo: '',
  550. samplingLevelDesc: '',
  551. aql: '',
  552. ac: '',
  553. re: '',
  554. itemNo: '',
  555. itemDesc: '',
  556. itemType: 'D',
  557. },
  558. columnList: [
  559. {
  560. userId: this.$store.state.user.name,
  561. functionId: 301008,
  562. serialNumber: '301008TableBuDesc',
  563. tableId: "301008Table",
  564. tableName: "检验模板维护表",
  565. columnProp: 'buDesc',
  566. headerAlign: "center",
  567. align: "center",
  568. columnLabel: 'BU',
  569. columnHidden: false,
  570. columnImage: false,
  571. columnSortable: false,
  572. sortLv: 0,
  573. status: true,
  574. fixed: '',
  575. columnWidth: 100,
  576. },
  577. {
  578. userId: this.$store.state.user.name,
  579. functionId: 301008,
  580. serialNumber: '301008TableItemNo',
  581. tableId: "301008Table",
  582. tableName: "检验模板维护表",
  583. columnProp: 'templateId',
  584. headerAlign: "center",
  585. align: "center",
  586. columnLabel: '检验模板编码',
  587. columnHidden: false,
  588. columnImage: false,
  589. columnSortable: false,
  590. sortLv: 0,
  591. status: true,
  592. fixed: '',
  593. columnWidth: 120,
  594. },
  595. {
  596. userId: this.$store.state.user.name,
  597. functionId: 301008,
  598. serialNumber: '301008TableItemNo',
  599. tableId: "301008Table",
  600. tableName: "检验模板维护表",
  601. columnProp: 'templateName',
  602. headerAlign: "center",
  603. align: "left",
  604. columnLabel: '检验模板名称',
  605. columnHidden: false,
  606. columnImage: false,
  607. columnSortable: false,
  608. sortLv: 0,
  609. status: true,
  610. fixed: '',
  611. columnWidth: 200,
  612. },
  613. {
  614. userId: this.$store.state.user.name,
  615. functionId: 301008,
  616. serialNumber: '301008TableItemNo',
  617. tableId: "301008Table",
  618. tableName: "检验模板维护表",
  619. columnProp: 'samplingProgrammeDesc',
  620. headerAlign: "center",
  621. align: "left",
  622. columnLabel: '抽样方案',
  623. columnHidden: false,
  624. columnImage: false,
  625. columnSortable: false,
  626. sortLv: 0,
  627. status: true,
  628. fixed: '',
  629. columnWidth: 120,
  630. },
  631. {
  632. userId: this.$store.state.user.name,
  633. functionId: 301008,
  634. serialNumber: '301008TableItemNo',
  635. tableId: "301008Table",
  636. tableName: "检验模板维护表",
  637. columnProp: 'samplingLevelDesc',
  638. headerAlign: "center",
  639. align: "left",
  640. columnLabel: '检验水平',
  641. columnHidden: false,
  642. columnImage: false,
  643. columnSortable: false,
  644. sortLv: 0,
  645. status: true,
  646. fixed: '',
  647. columnWidth: 120,
  648. },
  649. {
  650. userId: this.$store.state.user.name,
  651. functionId: 301008,
  652. serialNumber: '301008TableItemNo',
  653. tableId: "301008Table",
  654. tableName: "检验模板维护表",
  655. columnProp: 'inspectionCycle',
  656. headerAlign: "center",
  657. align: "right",
  658. columnLabel: '检验周期(h)',
  659. columnHidden: false,
  660. columnImage: false,
  661. columnSortable: false,
  662. sortLv: 0,
  663. status: true,
  664. fixed: '',
  665. columnWidth: 100,
  666. },
  667. {
  668. userId: this.$store.state.user.name,
  669. functionId: 301008,
  670. serialNumber: '301008TableItemNo',
  671. tableId: "301008Table",
  672. tableName: "检验模板维护表",
  673. columnProp: 'defaultSamplingQuantity',
  674. headerAlign: "center",
  675. align: "right",
  676. columnLabel: '默认抽样数量',
  677. columnHidden: false,
  678. columnImage: false,
  679. columnSortable: false,
  680. sortLv: 0,
  681. status: true,
  682. fixed: '',
  683. columnWidth: 100,
  684. },
  685. {
  686. userId: this.$store.state.user.name,
  687. functionId: 301008,
  688. serialNumber: '301008TableItemNo',
  689. tableId: "301008Table",
  690. tableName: "检验模板维护表",
  691. columnProp: 'defaultSamplingProportion',
  692. headerAlign: "center",
  693. align: "right",
  694. columnLabel: '默认抽样比例',
  695. columnHidden: false,
  696. columnImage: false,
  697. columnSortable: false,
  698. sortLv: 0,
  699. status: true,
  700. fixed: '',
  701. columnWidth: 100,
  702. },
  703. {
  704. userId: this.$store.state.user.name,
  705. functionId: 301008,
  706. serialNumber: '301008TableItemNo',
  707. tableId: "301008Table",
  708. tableName: "检验模板维护表",
  709. columnProp: 'aql',
  710. headerAlign: "center",
  711. align: "right",
  712. columnLabel: 'AQL',
  713. columnHidden: false,
  714. columnImage: false,
  715. columnSortable: false,
  716. sortLv: 0,
  717. status: true,
  718. fixed: '',
  719. columnWidth: 100,
  720. },
  721. {
  722. userId: this.$store.state.user.name,
  723. functionId: 301008,
  724. serialNumber: '301008TableItemNo',
  725. tableId: "301008Table",
  726. tableName: "检验模板维护表",
  727. columnProp: 'ac',
  728. headerAlign: "center",
  729. align: "right",
  730. columnLabel: 'AC',
  731. columnHidden: false,
  732. columnImage: false,
  733. columnSortable: false,
  734. sortLv: 0,
  735. status: true,
  736. fixed: '',
  737. columnWidth: 100,
  738. },
  739. {
  740. userId: this.$store.state.user.name,
  741. functionId: 301008,
  742. serialNumber: '301008TableItemNo',
  743. tableId: "301008Table",
  744. tableName: "检验模板维护表",
  745. columnProp: 're',
  746. headerAlign: "center",
  747. align: "right",
  748. columnLabel: 'RE',
  749. columnHidden: false,
  750. columnImage: false,
  751. columnSortable: false,
  752. sortLv: 0,
  753. status: true,
  754. fixed: '',
  755. columnWidth: 100,
  756. },
  757. {
  758. userId: this.$store.state.user.name,
  759. functionId: 301008,
  760. serialNumber: '301008TableItemNo',
  761. tableId: "301008Table",
  762. tableName: "检验模板维护表",
  763. columnProp: 'inspectionTypeName',
  764. headerAlign: "center",
  765. align: "center",
  766. columnLabel: '检验类型',
  767. columnHidden: false,
  768. columnImage: false,
  769. columnSortable: false,
  770. sortLv: 0,
  771. status: true,
  772. fixed: '',
  773. columnWidth: 100,
  774. },
  775. {
  776. userId: this.$store.state.user.name,
  777. functionId: 301008,
  778. serialNumber: '301008TableItemNo',
  779. tableId: "301008Table",
  780. tableName: "检验模板维护表",
  781. columnProp: 'templateRemark',
  782. headerAlign: "center",
  783. align: "left",
  784. columnLabel: '检验模板备注',
  785. columnHidden: false,
  786. columnImage: false,
  787. columnSortable: false,
  788. sortLv: 0,
  789. status: true,
  790. fixed: '',
  791. columnWidth: 200,
  792. },
  793. {
  794. userId: this.$store.state.user.name,
  795. functionId: 301008,
  796. serialNumber: '301008TableItemNo',
  797. tableId: "301008Table",
  798. tableName: "检验模板维护表",
  799. columnProp: 'templateVersion',
  800. headerAlign: "center",
  801. align: "center",
  802. columnLabel: '版本号',
  803. columnHidden: false,
  804. columnImage: false,
  805. columnSortable: false,
  806. sortLv: 0,
  807. status: true,
  808. fixed: '',
  809. columnWidth: 100,
  810. },
  811. {
  812. userId: this.$store.state.user.name,
  813. functionId: 301008,
  814. serialNumber: '301008TableItemNo',
  815. tableId: "301008Table",
  816. tableName: "检验模板维护表",
  817. columnProp: 'createTime',
  818. headerAlign: "center",
  819. align: "center",
  820. columnLabel: '创建时间',
  821. columnHidden: false,
  822. columnImage: false,
  823. columnSortable: false,
  824. sortLv: 0,
  825. status: true,
  826. fixed: '',
  827. columnWidth: 170,
  828. },
  829. {
  830. userId: this.$store.state.user.name,
  831. functionId: 301008,
  832. serialNumber: '301008TableItemNo',
  833. tableId: "301008Table",
  834. tableName: "检验模板维护表",
  835. columnProp: 'createBy',
  836. headerAlign: "center",
  837. align: "center",
  838. columnLabel: '创建人',
  839. columnHidden: false,
  840. columnImage: false,
  841. columnSortable: false,
  842. sortLv: 0,
  843. status: true,
  844. fixed: '',
  845. columnWidth: 100,
  846. },
  847. {
  848. userId: this.$store.state.user.name,
  849. functionId: 301008,
  850. serialNumber: '301008TableItemNo',
  851. tableId: "301008Table",
  852. tableName: "检验模板维护表",
  853. columnProp: 'updateDate',
  854. headerAlign: 'center',
  855. align: 'center',
  856. columnLabel: '更新时间',
  857. columnHidden: false,
  858. columnImage: false,
  859. columnSortable: false,
  860. sortLv: 0,
  861. status: true,
  862. fixed: '',
  863. columnWidth: 170,
  864. },
  865. {
  866. userId: this.$store.state.user.name,
  867. functionId: 301008,
  868. serialNumber: '301008TableItemNo',
  869. tableId: "301008Table",
  870. tableName: "检验模板维护表",
  871. columnProp: 'updateBy',
  872. headerAlign: 'center',
  873. align: 'center',
  874. columnLabel: '更新人',
  875. columnHidden: false,
  876. columnImage: false,
  877. columnSortable: false,
  878. sortLv: 0,
  879. status: true,
  880. fixed: '',
  881. columnWidth: 100,
  882. },
  883. ],
  884. detailModelFlag: false,
  885. detailList: [],
  886. dataList: [],
  887. // 展示列集
  888. columnDetailList: [
  889. {
  890. columnProp: 'itemNo',
  891. headerAlign: "center",
  892. align: "center",
  893. columnLabel: '检验项目编码',
  894. columnHidden: false,
  895. columnImage: false,
  896. columnSortable: false,
  897. sortLv: 0,
  898. status: true,
  899. fixed: '',
  900. columnWidth: 60
  901. },
  902. {
  903. columnProp: 'itemDesc',
  904. headerAlign: "center",
  905. align: "left",
  906. columnLabel: '检验项目名称',
  907. columnHidden: false,
  908. columnImage: false,
  909. columnSortable: false,
  910. sortLv: 0,
  911. status: true,
  912. fixed: '',
  913. columnWidth: 250
  914. },
  915. {
  916. columnProp: 'valueType',
  917. headerAlign: "center",
  918. align: "center",
  919. columnLabel: '检测值类型',
  920. columnHidden: false,
  921. columnImage: false,
  922. columnSortable: false,
  923. sortLv: 0,
  924. status: true,
  925. fixed: '',
  926. columnWidth: 60
  927. },
  928. ],
  929. // 快速添加
  930. fastAddFlag: false,
  931. itemList1: [],
  932. itemList2: [],
  933. itemListRow1: {},
  934. itemListRow2: {},
  935. itemSelections1: [],
  936. itemSelections2: [],
  937. searchForm: {
  938. objectID: '',
  939. objectDesc: ''
  940. },
  941. currentRow:{},
  942. rules: {
  943. templateNameType: [
  944. {
  945. required: true,
  946. message: ' ',
  947. trigger: ['blur','change']
  948. }
  949. ],
  950. inspectionTypeNoType: [
  951. {
  952. required: true,
  953. message: ' ',
  954. trigger: ['blur','change']
  955. }
  956. ],
  957. bu: [
  958. {
  959. required: true,
  960. message: ' ',
  961. trigger: ['blur','change']
  962. }
  963. ]
  964. },
  965. userBuList: [],
  966. authSearch: false,
  967. authSave: false,
  968. authUpdate: false,
  969. authDelete: false,
  970. authDetail: false,
  971. menuId: this.$route.meta.menuId,
  972. inspectionStandardModalFlag: false,
  973. standardData: {
  974. site: '',
  975. buNo: '',
  976. templateId: '',
  977. itemNo: '',
  978. standardList: []
  979. },
  980. tableData: [],
  981. checkedDetail: [],
  982. }
  983. },
  984. mounted () {
  985. this.$nextTick(() => {
  986. this.height = window.innerHeight - 180
  987. })
  988. },
  989. created () {
  990. // 按钮控制
  991. this.getButtonAuthData()
  992. // 获取用户的 site 和 bu
  993. this.getSiteAndBuByUserName()
  994. // 校验用户是否收藏
  995. this.favoriteIsOk()
  996. // 获取检验类型
  997. this.inspectionTypeSearch()
  998. // 动态列
  999. this.getTableUserColumn(this.$route.meta.menuId+'table',1)
  1000. if (!this.authSearch) {
  1001. // 获取数据列表
  1002. this.getDataList()
  1003. }
  1004. },
  1005. methods: {
  1006. // 设置检验清单
  1007. inspectionStandardModal (row) {
  1008. this.standardData = {
  1009. site: row.site,
  1010. buNo: row.buNo,
  1011. templateId: row.templateId,
  1012. itemNo: row.itemNo,
  1013. standardList: []
  1014. }
  1015. getInspectionStandards(this.standardData).then(({data}) => {
  1016. if (data.code === 0) {
  1017. this.tableData = data.rows
  1018. } else {
  1019. this.tableData = []
  1020. }
  1021. })
  1022. this.inspectionStandardModalFlag = true
  1023. },
  1024. //表格的新增
  1025. rowClassName ({ row, rowIndex }) {
  1026. row.xh = rowIndex + 1
  1027. row.seqNo = rowIndex + 1
  1028. },
  1029. //单选框选中数据
  1030. handleDetailSelectionChange (selection) {
  1031. this.checkedDetail = selection
  1032. },
  1033. // 点击新增
  1034. handleAddBtn () {
  1035. let obj = {
  1036. seqNo: '',
  1037. collectionSource: '',
  1038. defaultValue: '',
  1039. minValue: '',
  1040. maxValue: '',
  1041. condition: ''
  1042. }
  1043. this.tableData.push(obj)
  1044. },
  1045. //删除
  1046. handleDeleteBtn () {
  1047. if (this.checkedDetail.length === 0) {
  1048. this.$alert("请先选择要删除的数据", "提示", {
  1049. confirmButtonText: "确定",
  1050. })
  1051. } else {
  1052. this.$confirm("请是否确认删除该检验标准?", "提示", {
  1053. confirmButtonText: "确定",
  1054. cancelButtonText: "取消",
  1055. type: "warning",
  1056. callback: (action) => {
  1057. if (action === "confirm") {
  1058. let val = this.checkedDetail
  1059. val.forEach((val, index) => {
  1060. this.tableData.forEach((v, i) => {
  1061. if (val.xh === v.xh) {
  1062. this.tableData.splice(i, 1)
  1063. }
  1064. })
  1065. })
  1066. this.$message({
  1067. message: "删除成功!",
  1068. type: "success",
  1069. })
  1070. return
  1071. } else {
  1072. this.$message({
  1073. message: "已取消删除操作",
  1074. type: "warning",
  1075. })
  1076. return
  1077. }
  1078. },
  1079. })
  1080. }
  1081. },
  1082. // 回车事件
  1083. nextFocus1 (index) {
  1084. let a1 = `${index + 1}` + `a`
  1085. this.$nextTick(() => {
  1086. this.$refs[a1].focus()
  1087. })
  1088. },
  1089. nextFocus2 (index) {
  1090. let a2 = `${index + 1}` + `b`
  1091. this.$nextTick(() => {
  1092. this.$refs[a2].focus()
  1093. })
  1094. },
  1095. nextFocus3 (index) {
  1096. let a3 = `${index + 1}` + `c`
  1097. this.$nextTick(() => {
  1098. this.$refs[a3].focus()
  1099. })
  1100. },
  1101. // 新增检验标准
  1102. saveInspectionStandard () {
  1103. this.standardData.standardList = this.tableData
  1104. saveInspectionStandard(this.standardData).then(({data}) => {
  1105. if (data && data.code === 0) {
  1106. this.inspectionStandardModalFlag = false
  1107. this.tableData = []
  1108. this.$message.success('操作成功')
  1109. } else {
  1110. this.$message.error(data.msg)
  1111. }
  1112. })
  1113. },
  1114. // 获取用户的bu
  1115. getSiteAndBuByUserName () {
  1116. let tempData = {
  1117. username: this.$store.state.user.name,
  1118. }
  1119. getSiteAndBuByUserName(tempData).then(({data}) => {
  1120. if (data.code === 0) {
  1121. this.userBuList = data.rows
  1122. }
  1123. })
  1124. },
  1125. // 查询检验项目
  1126. getItem () {
  1127. getItem(this.detailData).then(({data}) => {
  1128. if (data.code === 0) {
  1129. this.itemList1 = data.rows
  1130. }
  1131. })
  1132. },
  1133. // 查询检验类型
  1134. inspectionTypeSearch () {
  1135. let tempData = {
  1136. site: this.$store.state.user.site
  1137. }
  1138. inspectionTypeSearch(tempData).then(({data}) => {
  1139. if (data.code === 0) {
  1140. this.options = data.rows
  1141. }
  1142. })
  1143. },
  1144. // 查询设备
  1145. objectSearch () {
  1146. let tempData = {
  1147. site: this.detailData.site,
  1148. buNo: this.detailData.buNo
  1149. }
  1150. objectSearch(tempData).then(({data}) => {
  1151. if (data.code === 0) {
  1152. this.objects = data.rows
  1153. }
  1154. })
  1155. },
  1156. // 获取基础数据列表S
  1157. getBaseList (val,type) {
  1158. this.tagNo = val
  1159. this.$nextTick(() => {
  1160. let strVal = ''
  1161. let conSql = ''
  1162. if (this.modalData.bu === null || this.modalData.bu === '') {
  1163. this.$message.warning("请选择BU!")
  1164. return
  1165. } else {
  1166. conSql = " and site = '" + this.modalData.bu.split('_')[0] + "'" + " and bu_no = '" + this.modalData.bu.split('_')[1] + "'"
  1167. }
  1168. if (val === 207) {
  1169. strVal = this.modalData.samplingProgrammeNo
  1170. }
  1171. if (val === 208) {
  1172. strVal = this.modalData.samplingLevelNo
  1173. }
  1174. this.$refs.baseList.init(val, strVal, conSql)
  1175. })
  1176. },
  1177. // 列表方法的回调
  1178. getBaseData (val) {
  1179. if (this.tagNo === 207) {
  1180. this.modalData.samplingProgrammeNo = val.sampling_programme_no
  1181. this.modalData.samplingProgrammeDesc = val.sampling_programme_desc
  1182. }
  1183. if (this.tagNo === 208) {
  1184. this.modalData.samplingLevelNo = val.sampling_level_no
  1185. this.modalData.samplingLevelDesc = val.sampling_level_desc
  1186. }
  1187. },
  1188. // 获取数据列表
  1189. getDataList () {
  1190. this.searchData.limit = this.pageSize
  1191. this.searchData.page = this.pageIndex
  1192. templateSearch(this.searchData).then(({data}) => {
  1193. if (data.code === 0) {
  1194. this.dataList = data.page.list
  1195. this.pageIndex = data.page.currPage
  1196. this.pageSize = data.page.pageSize
  1197. this.totalPage = data.page.totalCount
  1198. }
  1199. })
  1200. },
  1201. // 每页数
  1202. sizeChangeHandle (val) {
  1203. this.pageSize = val
  1204. this.pageIndex = 1
  1205. this.getDataList()
  1206. },
  1207. // 当前页
  1208. currentChangeHandle (val) {
  1209. this.pageIndex = val
  1210. this.getDataList()
  1211. },
  1212. addModal () {
  1213. this.modalData = {
  1214. flag: '1',
  1215. site: '',
  1216. bu: this.userBuList[0].buNo,
  1217. templateId: '',
  1218. templateName: '',
  1219. templateRemark: '',
  1220. templateType: '',
  1221. templateVersion: '',
  1222. samplingProgrammeNo: '',
  1223. samplingProgrammeDesc: '',
  1224. inspectionTypeNo: '',
  1225. inspectionCycle: '',
  1226. createBy: this.$store.state.user.name,
  1227. updateBy: this.$store.state.user.name,
  1228. samplingLevelNo: '',
  1229. samplingLevelDesc: '',
  1230. aql: '',
  1231. ac: '',
  1232. re: ''
  1233. }
  1234. this.modalDisableFlag = false
  1235. this.modalFlag = true
  1236. },
  1237. updateModal (row) {
  1238. this.modalData = {
  1239. flag: '2',
  1240. bu: row.site + '_' + row.buNo,
  1241. site: row.site,
  1242. templateId: row.templateId,
  1243. templateName: row.templateName,
  1244. templateRemark: row.templateRemark,
  1245. templateType: row.templateType,
  1246. templateVersion: row.templateVersion,
  1247. samplingProgrammeNo: row.samplingProgrammeNo,
  1248. samplingProgrammeDesc: row.samplingProgrammeDesc,
  1249. inspectionTypeNo: row.inspectionTypeNo,
  1250. createBy: this.$store.state.user.name,
  1251. updateBy: this.$store.state.user.name,
  1252. samplingLevelNo: row.samplingLevelNo,
  1253. samplingLevelDesc: row.samplingLevelDesc,
  1254. inspectionCycle: row.inspectionCycle,
  1255. aql: row.aql,
  1256. ac: row.ac,
  1257. re: row.re,
  1258. defaultSamplingQuantity: row.defaultSamplingQuantity,
  1259. defaultSamplingProportion: row.defaultSamplingProportion
  1260. }
  1261. this.modalDisableFlag = true
  1262. this.modalFlag = true
  1263. },
  1264. // 删除
  1265. deleteModel (row) {
  1266. this.$confirm(`是否删除这个检验模板?`, '提示', {
  1267. confirmButtonText: '确定',
  1268. cancelButtonText: '取消',
  1269. type: 'warning'
  1270. }).then(() => {
  1271. templateDelete(row).then(({data}) => {
  1272. if (data && data.code === 0) {
  1273. this.getDataList()
  1274. this.$message.success('操作成功')
  1275. } else {
  1276. this.$message.error(data.msg)
  1277. }
  1278. })
  1279. })
  1280. },
  1281. saveData () {
  1282. if (this.modalData.bu === '' || this.modalData.bu == null) {
  1283. this.$message.warning('请选择BU!')
  1284. return
  1285. }
  1286. if (this.modalData.templateName === '' || this.modalData.templateName == null) {
  1287. this.$message.warning('请输入检验模板名称!')
  1288. return
  1289. }
  1290. if (this.modalData.inspectionTypeNo === '' || this.modalData.inspectionTypeNo == null) {
  1291. this.$message.warning('请选择检验类型!')
  1292. return
  1293. }
  1294. if ((this.modalData.samplingProgrammeNo === '' || this.modalData.samplingProgrammeNo == null) && (this.modalData.defaultSamplingQuantity === '' || this.modalData.defaultSamplingQuantity == null) && (this.modalData.defaultSamplingProportion === '' || this.modalData.defaultSamplingProportion == null)) {
  1295. this.$message.warning('抽样方案、默认抽样数量、默认抽样比例至少选择一项!')
  1296. return
  1297. }
  1298. if ((this.modalData.samplingProgrammeNo !== '' && this.modalData.samplingProgrammeNo != null) && (this.modalData.samplingLevelNo === '' || this.modalData.samplingLevelNo == null)) {
  1299. this.$message.warning('请选择检验水平!')
  1300. return
  1301. }
  1302. if (this.modalData.flag === '1') {
  1303. templateSave(this.modalData).then(({data}) => {
  1304. if (data && data.code === 0) {
  1305. this.getDataList()
  1306. this.modalFlag = false
  1307. this.$message.success('操作成功')
  1308. } else {
  1309. this.$message.error(data.msg)
  1310. }
  1311. })
  1312. } else {
  1313. templateUpdate(this.modalData).then(({data}) => {
  1314. if (data && data.code === 0) {
  1315. this.getDataList()
  1316. this.modalFlag = false
  1317. this.$message.success('操作成功')
  1318. } else {
  1319. this.$message.error(data.msg)
  1320. }
  1321. })
  1322. }
  1323. },
  1324. // 打开检验项目
  1325. detailModal (row) {
  1326. this.detailData.site = row.site
  1327. this.detailData.buNo = row.buNo
  1328. this.detailData.templateId = row.templateId
  1329. this.detailData.templateName = row.templateName
  1330. this.detailData.inspectionTypeName = row.inspectionTypeName
  1331. templateDetailsSearch(this.detailData).then(({data}) => {
  1332. this.detailList = data.rows
  1333. })
  1334. this.detailModelFlag = true
  1335. },
  1336. // 保存模板项目
  1337. saveDetail () {
  1338. let tempData = {
  1339. site: this.detailData.site,
  1340. buNo: this.detailData.buNo,
  1341. templateId: this.detailData.templateId,
  1342. itemList: this.detailList
  1343. }
  1344. saveItemDetailed(tempData).then(({data}) => {
  1345. if (data && data.code === 0) {
  1346. this.getDataList()
  1347. this.detailModelFlag = false
  1348. this.$message.success('操作成功')
  1349. } else {
  1350. this.$message.error(data.msg)
  1351. }
  1352. })
  1353. },
  1354. // 快速新增
  1355. addFastModal () {
  1356. this.itemSelections1 = null
  1357. this.itemSelections2 = null
  1358. getItemList(this.detailData).then(({data}) => {
  1359. this.itemList1 = data.row1
  1360. this.itemList2 = data.row2
  1361. })
  1362. this.fastAddFlag = true
  1363. },
  1364. // 可选项目
  1365. itemClickRow1 (row) {
  1366. this.$refs.itemTable1.toggleRowSelection(row)
  1367. },
  1368. itemClickRow(row){
  1369. this.currentRow= JSON.parse(JSON.stringify(row))
  1370. },
  1371. // 已有项目
  1372. itemClickRow2 (row) {
  1373. this.$refs.itemTable2.toggleRowSelection(row)
  1374. },
  1375. selectFlag () {
  1376. return true
  1377. },
  1378. selectionItem1 (val) {
  1379. this.itemSelections1 = val
  1380. },
  1381. selectionItem2 (val) {
  1382. this.itemSelections2 = val
  1383. },
  1384. // 添加明细
  1385. addItem () {
  1386. if (this.itemSelections1 == null || this.itemSelections1.length === 0) {
  1387. this.$message.warning('请选择可选项目!')
  1388. return
  1389. }
  1390. let inData = {
  1391. site: this.detailData.site,
  1392. buNo: this.detailData.buNo,
  1393. templateId: this.detailData.templateId,
  1394. templateName: this.detailData.templateName,
  1395. itemList: this.itemSelections1,
  1396. itemType: this.detailData.itemType,
  1397. }
  1398. addItemDetails(inData).then(({data}) => {
  1399. if (data && data.code === 0) {
  1400. getItemList(this.detailData).then(({data}) => {
  1401. this.itemList1 = data.row1
  1402. this.itemList2 = data.row2
  1403. })
  1404. this.itemSelections1 = []
  1405. } else {
  1406. this.$message.error(data.msg)
  1407. }
  1408. })
  1409. },
  1410. // 删除明细
  1411. deleteItem () {
  1412. if (this.itemSelections2 == null || this.itemSelections2.length === 0) {
  1413. this.$message.warning('请选择已有项目!')
  1414. return
  1415. }
  1416. let inData = {
  1417. site: this.detailData.site,
  1418. buNo: this.detailData.buNo,
  1419. templateId: this.detailData.templateId,
  1420. templateName: this.detailData.templateName,
  1421. itemList: this.itemSelections2,
  1422. itemType: this.detailData.itemType
  1423. }
  1424. delItemDetails(inData).then(({data}) => {
  1425. if (data && data.code === 0) {
  1426. getItemList(this.detailData).then(({data}) => {
  1427. this.itemList1 = data.row1
  1428. this.itemList2 = data.row2
  1429. })
  1430. this.itemSelections2 = []
  1431. } else {
  1432. this.$message.error(data.msg)
  1433. }
  1434. })
  1435. },
  1436. // 关闭后刷新列表
  1437. refreshDetailList () {
  1438. templateDetailsSearch(this.detailData).then(({data}) => {
  1439. this.detailList = data.rows
  1440. })
  1441. },
  1442. closeDialog (){
  1443. this.detailList = []
  1444. this.itemList1 = []
  1445. this.itemList2 = []
  1446. },
  1447. // 删除项目中的明细
  1448. delItemDetails (row) {
  1449. this.$confirm(`是否删除这个检验明细?`, '提示', {
  1450. confirmButtonText: '确定',
  1451. cancelButtonText: '取消',
  1452. type: 'warning'
  1453. }).then(() => {
  1454. delItemDetails(row).then(({data}) => {
  1455. if (data && data.code === 0) {
  1456. templateDetailsSearch(this.detailData).then(({data}) => {
  1457. this.detailList = data.rows
  1458. })
  1459. this.$message.success('操作成功')
  1460. } else {
  1461. this.$message.error(data.msg)
  1462. }
  1463. })
  1464. })
  1465. },
  1466. // 校验用户是否收藏
  1467. favoriteIsOk () {
  1468. let userFavorite = {
  1469. userId: this.$store.state.user.id,
  1470. languageCode: this.$i18n.locale
  1471. }
  1472. userFavoriteList(userFavorite).then(({data}) => {
  1473. for (let i = 0; i < data.list.length; i++) {
  1474. if (this.$route.meta.menuId === data.list[i].menuId) {
  1475. this.favorite = true
  1476. }
  1477. }
  1478. })
  1479. },
  1480. // 收藏 OR 取消收藏
  1481. favoriteFunction () {
  1482. let userFavorite = {
  1483. userId: this.$store.state.user.id,
  1484. functionId: this.$route.meta.menuId,
  1485. }
  1486. if (this.favorite) {
  1487. removeUserFavorite(userFavorite).then(({data}) => {
  1488. this.$message.success(data.msg)
  1489. this.favorite = false
  1490. })
  1491. } else {
  1492. // 收藏
  1493. saveUserFavorite(userFavorite).then(({data}) => {
  1494. this.$message.success(data.msg)
  1495. this.favorite = true
  1496. })
  1497. }
  1498. },
  1499. goUp() {
  1500. goUpItemQC(this.currentRow).then(({data}) => {
  1501. if (data && data.code === 0) {
  1502. templateDetailsSearch(this.detailData).then(({data}) => {
  1503. this.detailList = data.rows
  1504. for (let i = 0; i < this.detailList.length; i++) {
  1505. if (this.detailList[i].itemNo === this.currentRow.itemNo) {
  1506. this.$refs.detailTable.setCurrentRow(this.detailList[i]);
  1507. this.currentRow = JSON.parse(JSON.stringify(this.detailList[i]))
  1508. this.$message.success('操作成功')
  1509. }
  1510. }
  1511. })
  1512. }
  1513. })
  1514. },
  1515. goDown () {
  1516. goDownItemQC(this.currentRow).then(({data}) => {
  1517. if (data && data.code === 0) {
  1518. templateDetailsSearch(this.detailData).then(({data}) => {
  1519. this.detailList = data.rows
  1520. for (let i = 0; i <this.detailList.length; i++) {
  1521. if (this.detailList[i].itemNo === this.currentRow.itemNo) {
  1522. this.$refs.detailTable.setCurrentRow(this.detailList[i])
  1523. this.currentRow = JSON.parse(JSON.stringify(this.detailList[i]))
  1524. this.$message.success('操作成功')
  1525. }
  1526. }
  1527. })
  1528. }
  1529. })
  1530. },
  1531. // 导入
  1532. qcUpload () {
  1533. let currentData = {
  1534. flag: 'template',
  1535. createBy: this.$store.state.user.name,
  1536. site: this.$store.state.user.site,
  1537. }
  1538. //打开组件 去做新增业务
  1539. this.$nextTick(() => {
  1540. this.$refs.qcUpload.init(currentData)
  1541. })
  1542. },
  1543. async exportExcel() {
  1544. this.searchData.limit = -1
  1545. this.searchData.page = 1
  1546. excel.exportTable({
  1547. url: "/pms/qc/templateSearch",
  1548. columnMapping: this.columnList, //可以直接用table,不需要的列就剔除
  1549. mergeSetting: [],//需要合并的列
  1550. params: this.searchData,
  1551. fileName: this.exportName+".xlsx",
  1552. rowFetcher: res => res.data,
  1553. columnFormatter: [],
  1554. dropColumns: [],
  1555. })
  1556. },
  1557. // 动态列开始 获取 用户保存的 格式列
  1558. async getTableUserColumn (tableId, columnId) {
  1559. let queryTableUser = {
  1560. userId: this.$store.state.user.name,
  1561. functionId: this.$route.meta.menuId,
  1562. tableId: tableId,
  1563. status: true,
  1564. languageCode: this.$i18n.locale
  1565. }
  1566. await getTableUserListLanguage(queryTableUser).then(({data}) => {
  1567. if (data.rows.length > 0) {
  1568. switch (columnId) {
  1569. case 1:
  1570. this.columnList = data.rows
  1571. break;
  1572. }
  1573. } else {
  1574. this.getColumnList(tableId, columnId)
  1575. }
  1576. })
  1577. },
  1578. // 获取 tableDefault 列
  1579. async getColumnList (tableId, columnId) {
  1580. let queryTable= {
  1581. functionId: this.$route.meta.menuId,
  1582. tableId: tableId,
  1583. languageCode: this.$i18n.locale
  1584. }
  1585. await getTableDefaultListLanguage(queryTable).then(({data}) => {
  1586. if (data.rows.length !== 0) {
  1587. switch (columnId) {
  1588. case 1:
  1589. this.columnList = data.rows
  1590. break;
  1591. }
  1592. }
  1593. })
  1594. },
  1595. //获取按钮的权限数据
  1596. getButtonAuthData () {
  1597. let searchFlag = this.isAuth(this.menuId+":search")
  1598. let saveFlag = this.isAuth(this.menuId+":save")
  1599. let updateFlag = this.isAuth(this.menuId+":update")
  1600. let deleteFlag = this.isAuth(this.menuId+":delete")
  1601. let detailFlag = this.isAuth(this.menuId+":detail")
  1602. //处理页面的权限数据
  1603. this.authSearch = !searchFlag
  1604. this.authSave = !saveFlag
  1605. this.authUpdate = !updateFlag
  1606. this.authDelete = !deleteFlag
  1607. this.authDetail = !detailFlag
  1608. },
  1609. }
  1610. }
  1611. </script>
  1612. <style scoped>
  1613. /deep/ .el-autocomplete-suggestion {
  1614. width: auto!important;
  1615. }
  1616. .el-table /deep/ .cell{
  1617. height: auto;
  1618. line-height: 1.5;
  1619. }
  1620. </style>