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.

1175 lines
44 KiB

2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 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. <download-excel
  39. :fields="fields()"
  40. :data="exportData"
  41. type="xls"
  42. :name="exportName"
  43. :header="exportHeader"
  44. :footer="exportFooter"
  45. :fetch="createExportData"
  46. :before-generate="startDownload"
  47. :before-finish="finishDownload"
  48. worksheet="导出信息"
  49. class="el-button el-button--primary el-button--medium">
  50. {{ "导出" }}
  51. </download-excel>
  52. </el-form-item>
  53. </el-form>
  54. <!-- 展示列表 -->
  55. <el-table :height="height" :data="dataList" border style="width: 100%;">
  56. <el-table-column
  57. v-for="(item,index) in columnList" :key="index"
  58. :sortable="item.columnSortable"
  59. :prop="item.columnProp"
  60. :header-align="item.headerAlign"
  61. :show-overflow-tooltip="item.showOverflowTooltip"
  62. :align="item.align"
  63. :fixed="item.fixed===''?false:item.fixed"
  64. :min-width="item.columnWidth"
  65. :label="item.columnLabel">
  66. <template slot-scope="scope">
  67. <span v-if="!item.columnHidden">
  68. <span v-if="columnsProp.includes(item.columnProp)">{{ scope.row[`${item.columnProp}Desc`] }}</span>
  69. <span v-else>
  70. {{ scope.row[item.columnProp] }}
  71. </span>
  72. </span>
  73. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
  74. </template>
  75. </el-table-column>
  76. <el-table-column fixed="right" header-align="center" align="center" width="160" label="操作">
  77. <template slot-scope="scope">
  78. <a v-if="!authUpdate" type="text" size="small" @click="updateModal(scope.row)">编辑</a>
  79. <a v-if="!authDetail" type="text" size="small" @click="detailModal(scope.row)">检验项目</a>
  80. <a v-if="!authDelete" type="text" size="small" @click="deleteModel(scope.row)">删除</a>
  81. </template>
  82. </el-table-column>
  83. </el-table>
  84. <!-- 分页栏 -->
  85. <el-pagination
  86. @size-change="sizeChangeHandle"
  87. @current-change="currentChangeHandle"
  88. :current-page="pageIndex"
  89. :page-sizes="[20, 50, 100, 200, 500]"
  90. :page-size="pageSize"
  91. :total="totalPage"
  92. layout="total, sizes, prev, pager, next, jumper">
  93. </el-pagination>
  94. <!-- 检验模板新增/修改 -->
  95. <el-dialog title="检验模板" :close-on-click-modal="false" v-drag :visible.sync="modalFlag" width="500px">
  96. <el-form :inline="true" label-position="top" :model="modalData" :rules="rules" style="margin-left: 7px;margin-top: -5px;">
  97. <el-form-item label="BU" prop="bu" :rules="rules.bu">
  98. <el-select v-model="modalData.bu" placeholder="请选择" :disabled="modalDisableFlag" style="width: 456px">
  99. <el-option
  100. v-for="i in userBuList"
  101. :key="i.buNo"
  102. :label="i.sitename"
  103. :value="i.buNo">
  104. <span style="float: left;width: 100px">{{ i.sitename }}</span>
  105. <span style="float: right; color: #8492a6;white-space:nowrap;overflow:hidden;text-overflow:ellipsis; font-size: 11px;width: 60px">
  106. {{ i.buDesc }}
  107. </span>
  108. </el-option>
  109. </el-select>
  110. </el-form-item>
  111. </el-form>
  112. <el-form :inline="true" label-position="top" :model="modalData" :rules="rules" style="margin-left: 7px;margin-top: -5px;">
  113. <el-form-item label="检验模板名称" prop="templateName" :rules="rules.templateNameType">
  114. <el-input v-model="modalData.templateName" style="width: 221px"></el-input>
  115. </el-form-item>
  116. <el-form-item label="检验类型" prop="inspectionTypeNo" :rules="rules.inspectionTypeNoType">
  117. <el-select v-model="modalData.inspectionTypeNo" placeholder="请选择" style="width: 221px">
  118. <el-option label="全部" value=""></el-option>
  119. <el-option
  120. v-for="i in options"
  121. :key="i.inspectionTypeNo"
  122. :label="i.inspectionTypeName"
  123. :value="i.inspectionTypeNo">
  124. </el-option>
  125. </el-select>
  126. </el-form-item>
  127. </el-form>
  128. <!-- <el-form :inline="true" label-position="top" :model="modalData" style="margin-left: 7px;margin-top: -5px;">
  129. <el-form-item>
  130. <span slot="label" @click="getBaseList(207)"><a herf="#">抽样方案编码</a></span>
  131. <el-input v-model="modalData.samplingProgrammeNo" style="width: 221px"></el-input>
  132. </el-form-item>
  133. <el-form-item label="抽样方案名称">
  134. <el-input v-model="modalData.samplingProgrammeDesc" disabled style="width: 221px"></el-input>
  135. </el-form-item>
  136. </el-form>
  137. <el-form :inline="true" label-position="top" :model="modalData" style="margin-left: 7px;margin-top: -5px;">
  138. <el-form-item>
  139. <span slot="label" style="" @click="getBaseList(208)"><a herf="#">检验水平编码</a></span>
  140. <el-input v-model="modalData.samplingLevelNo" style="width: 221px"></el-input>
  141. </el-form-item>
  142. <el-form-item label="检验水平名称">
  143. <el-input v-model="modalData.samplingLevelDesc" disabled style="width: 221px"></el-input>
  144. </el-form-item>
  145. </el-form> -->
  146. <el-form :inline="true" label-position="top" style="margin-left: 7px;margin-top: -5px;">
  147. <el-form-item label="检验周期(h)">
  148. <el-input v-model="modalData.inspectionCycle" type="number" style="width: 143px"></el-input>
  149. </el-form-item>
  150. <el-form-item label="默认抽样数量">
  151. <el-input v-model="modalData.defaultSamplingQuantity" type="number" style="width: 143px"></el-input>
  152. </el-form-item>
  153. <el-form-item label="默认抽样比例">
  154. <el-input v-model="modalData.defaultSamplingProportion" type="number" style="width: 143px"></el-input>
  155. </el-form-item>
  156. </el-form>
  157. <!-- <el-form :inline="true" label-position="top" style="margin-left: 7px;margin-top: -5px;">
  158. <el-form-item label="AQL:">
  159. <el-input v-model="modalData.aql" type="number" style="width: 143px"></el-input>
  160. </el-form-item>
  161. <el-form-item label="AC:">
  162. <el-input v-model="modalData.ac" type="number" style="width: 143px"></el-input>
  163. </el-form-item>
  164. <el-form-item label="RE:">
  165. <el-input v-model="modalData.re" type="number" style="width: 143px"></el-input>
  166. </el-form-item>
  167. </el-form> -->
  168. <el-form :inline="true" label-position="top" style="margin-left: 7px;margin-top: -5px;">
  169. <el-form-item label="版本号">
  170. <el-input v-model="modalData.templateVersion" :disabled="modalDisableFlag" style="width: 221px"></el-input>
  171. </el-form-item>
  172. <el-form-item label="检验模板备注">
  173. <el-input v-model="modalData.templateRemark" style="width: 221px"></el-input>
  174. </el-form-item>
  175. </el-form>
  176. <el-footer style="height:40px;margin-top: 10px;text-align:center">
  177. <el-button type="primary" @click="saveData()">保存</el-button>
  178. <el-button type="primary" @click="modalFlag = false">关闭</el-button>
  179. </el-footer>
  180. </el-dialog>
  181. <!-- 检验项目 -->
  182. <el-dialog title="检验项目清单" @close="closeDialog" :close-on-click-modal="false" v-drag :visible.sync="detailModelFlag" width="940px">
  183. <!-- 这里保留 QC 完整版结构已能跑通 dmBasic 接口 -->
  184. <el-form :inline="true" label-position="top">
  185. <el-form-item :label="'检验模板编码'">
  186. <el-input v-model="detailData.templateId" readonly style="width: 120px"></el-input>
  187. </el-form-item>
  188. <el-form-item :label="'检验模板名称'">
  189. <el-input v-model="detailData.templateName" readonly style="width: 240px"></el-input>
  190. </el-form-item>
  191. <el-form-item :label="' '">
  192. <el-button type="primary" @click="addFastModal()">新增</el-button>
  193. <el-button type="primary" @click="goUp()">上移</el-button>
  194. <el-button type="primary" @click="goDown()">下移</el-button>
  195. </el-form-item>
  196. </el-form>
  197. <div class="rq ">
  198. <el-table
  199. :height="400"
  200. :data="detailList"
  201. @row-click="itemClickRow"
  202. ref="detailTable"
  203. highlight-current-row
  204. border
  205. style="width: 100%;">
  206. <el-table-column
  207. v-for="(item,index) in columnDetailList" :key="index"
  208. :sortable="item.columnSortable"
  209. :prop="item.columnProp"
  210. :header-align="item.headerAlign"
  211. :show-overflow-tooltip="item.showOverflowTooltip"
  212. :align="item.align"
  213. :fixed="item.fixed===''?false:item.fixed"
  214. :min-width="item.columnWidth"
  215. :label="item.columnLabel">
  216. <template slot-scope="scope">
  217. <span v-if="!item.columnHidden"> {{ scope.row[item.columnProp] }}</span>
  218. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
  219. </template>
  220. </el-table-column>
  221. <el-table-column prop="" header-align="center" align="right" min-width="60" 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 prop="" header-align="center" align="right" min-width="60" label="最大值">
  227. <template slot-scope="scope">
  228. <el-input v-if="scope.row.valueTypeDb === 'T'" v-model="scope.row.maxValue" disabled style="height: 11px;width:98%"></el-input>
  229. <el-input v-else v-model="scope.row.maxValue" style="height: 11px;width:98%"></el-input>
  230. </template>
  231. </el-table-column>
  232. <el-table-column prop="" header-align="center" align="right" min-width="60" label="最小值">
  233. <template slot-scope="scope">
  234. <el-input v-if="scope.row.valueTypeDb === 'T'" v-model="scope.row.minValue" disabled style="height: 11px;width:98%"></el-input>
  235. <el-input v-else v-model="scope.row.minValue" style="height: 11px;width:98%"></el-input>
  236. </template>
  237. </el-table-column>
  238. <el-table-column fixed="right" header-align="center" align="center" width="130" label="操作">
  239. <template slot-scope="scope">
  240. <a v-if="scope.row.valueTypeDb === 'N'" type="text" size="small" @click="inspectionStandardModal(scope.row)">判定标准</a>
  241. <a type="text" size="small" @click="delItemDetails(scope.row)">删除项目</a>
  242. </template>
  243. </el-table-column>
  244. </el-table>
  245. </div>
  246. <el-footer style="height:40px;margin-top: 20px;text-align:center">
  247. <el-button type="primary" @click="saveDetail()">保存</el-button>
  248. <el-button type="primary" @click="detailModelFlag = false">关闭</el-button>
  249. </el-footer>
  250. </el-dialog>
  251. <!-- 检验项目->快速新增 -->
  252. <el-dialog title="新增" @close="refreshDetailList" :close-on-click-modal="false" v-drag :visible.sync="fastAddFlag" width="1100px">
  253. <div style="font-size: 12px">
  254. <el-form :inline="true" label-position="top" :model="detailData">
  255. <el-form-item :label="'项目编码'">
  256. <el-input v-model="detailData.itemNo" clearable style="width: 120px"></el-input>
  257. </el-form-item>
  258. <el-form-item :label="'项目名称'">
  259. <el-input v-model="detailData.itemDesc" clearable style="width: 200px"></el-input>
  260. </el-form-item>
  261. <el-form-item :label="' '">
  262. <el-button type="primary" @click="getItem()">查询</el-button>
  263. </el-form-item>
  264. </el-form>
  265. </div>
  266. <el-container style="margin-top: 0px;">
  267. <el-main style="width: 720px; padding: 1px">
  268. <span style="font-size: 12px">可选项目</span>
  269. <el-table
  270. height="400px"
  271. :data="itemList1"
  272. border
  273. ref="itemTable1"
  274. @row-click="itemClickRow1"
  275. @selection-change="selectionItem1"
  276. highlight-current-row
  277. style="width: 100%">
  278. <el-table-column type="selection" header-align="center" align="center" :selectable="selectFlag" width="50"></el-table-column>
  279. <el-table-column prop="itemNo" header-align="center" align="center" min-width="80" label="项目编码"></el-table-column>
  280. <el-table-column prop="itemDesc" header-align="center" align="center" min-width="120" label="项目名称"></el-table-column>
  281. <el-table-column prop="defaultValue" header-align="center" align="center" min-width="100" label="标准值"></el-table-column>
  282. <el-table-column prop="maxValue" header-align="center" align="center" min-width="60" label="最大值"></el-table-column>
  283. <el-table-column prop="minValue" header-align="center" align="center" min-width="60" label="最小值"></el-table-column>
  284. </el-table>
  285. </el-main>
  286. <el-main style="width: 111px; padding: 1px">
  287. <div style="margin-top: 182px; margin-left: 18px">
  288. <el-button type="primary" @click="addItem()">添加>></el-button>
  289. </div>
  290. <div style="margin-top: 15px; margin-left: 18px">
  291. <el-button type="primary" @click="deleteItem()">删除<<</el-button>
  292. </div>
  293. </el-main>
  294. <el-main style="width: 400px; padding: 1px">
  295. <span style="font-size: 12px">已有项目</span>
  296. <el-table
  297. height="400px"
  298. :data="itemList2"
  299. border
  300. ref="itemTable2"
  301. @row-click="itemClickRow2"
  302. @selection-change="selectionItem2"
  303. highlight-current-row
  304. style="width: 100%">
  305. <el-table-column type="selection" header-align="center" align="center" :selectable="selectFlag" width="50"></el-table-column>
  306. <el-table-column prop="itemNo" header-align="center" align="center" min-width="80" label="项目编码"></el-table-column>
  307. <el-table-column prop="itemDesc" header-align="center" align="center" min-width="200" label="项目名称"></el-table-column>
  308. </el-table>
  309. </el-main>
  310. </el-container>
  311. <el-footer style="height: 40px; margin-top: 20px; text-align: center">
  312. <el-button type="primary" @click="fastAddFlag = false">关闭</el-button>
  313. </el-footer>
  314. </el-dialog>
  315. <Chooselist ref="baseList" @getBaseData="getBaseData"></Chooselist>
  316. <dmUpload ref="qcUpload" @refreshPageTables="getDataList()" v-drag></dmUpload>
  317. </div>
  318. </template>
  319. <script>
  320. import {
  321. templateSearch,
  322. templateSave,
  323. templateUpdate,
  324. templateDelete,
  325. inspectionTypeSearch,
  326. templateDetailsSearch,
  327. addItemDetails,
  328. getItemList,
  329. delItemDetails,
  330. saveItemDetailed,
  331. getItem,
  332. getSiteAndBuByUserName,
  333. getInspectionStandards,
  334. saveInspectionStandard,
  335. goUpItemQC,
  336. goDownItemQC,
  337. } from "@/api/qc/dmBasic.js";
  338. import { getTableDefaultListLanguage, getTableUserListLanguage } from "@/api/table.js";
  339. import Chooselist from "@/views/modules/common/Chooselist_eam";
  340. import { userFavoriteList, saveUserFavorite, removeUserFavorite } from "@/api/userFavorite.js";
  341. import dmUpload from "./dm_upload.vue";
  342. export default {
  343. name: "DMQcTemplate",
  344. components: { Chooselist, dmUpload },
  345. data() {
  346. return {
  347. columnsProp: ["createBy", "updateBy"],
  348. favorite: false,
  349. exportData: [],
  350. exportName: "刀模检验模板" + this.dayjs().format("YYYYMMDDHHmmss"),
  351. exportHeader: ["刀模检验模板"],
  352. exportFooter: [],
  353. exportList: [],
  354. tagNo: "",
  355. searchData: {
  356. site: "",
  357. userName: this.$store.state.user.name,
  358. templateId: "",
  359. templateName: "",
  360. inspectionTypeNo: "",
  361. buDesc: "RFID",
  362. page: 1,
  363. limit: 10
  364. },
  365. options: [],
  366. height: 200,
  367. pageIndex: 1,
  368. pageSize: 20,
  369. totalPage: 0,
  370. modalFlag: false,
  371. modalDisableFlag: false,
  372. modalData: {
  373. flag: "",
  374. site: "",
  375. bu: "",
  376. templateId: "",
  377. templateName: "",
  378. templateRemark: "",
  379. templateType: "",
  380. templateVersion: "",
  381. samplingProgrammeNo: "",
  382. samplingProgrammeDesc: "",
  383. inspectionTypeNo: "822",
  384. inspectionCycle: "",
  385. samplingLevelNo: "",
  386. samplingLevelDesc: "",
  387. aql: "",
  388. ac: "",
  389. re: "",
  390. defaultSamplingQuantity: "",
  391. defaultSamplingProportion: "",
  392. createTime: "",
  393. createBy: this.$store.state.user.name,
  394. updateBy: this.$store.state.user.name,
  395. },
  396. detailData: {
  397. site: "",
  398. buNo: "",
  399. templateId: "",
  400. templateName: "",
  401. inspectionTypeNo: "822",
  402. inspectionTypeName: "",
  403. createBy: this.$store.state.user.name,
  404. itemType: "D",
  405. itemNo: "",
  406. itemDesc: "",
  407. },
  408. columnList:[
  409. {
  410. userId: this.$store.state.user.name,
  411. functionId: 301008,
  412. serialNumber: '301008TableBuDesc',
  413. tableId: "301008Table",
  414. tableName: "检验模板维护表",
  415. columnProp: 'buDesc',
  416. headerAlign: "center",
  417. align: "center",
  418. columnLabel: 'BU',
  419. columnHidden: false,
  420. columnImage: false,
  421. columnSortable: false,
  422. sortLv: 0,
  423. status: true,
  424. fixed: '',
  425. columnWidth: 100,
  426. },
  427. {
  428. userId: this.$store.state.user.name,
  429. functionId: 301008,
  430. serialNumber: '301008TableItemNo',
  431. tableId: "301008Table",
  432. tableName: "检验模板维护表",
  433. columnProp: 'templateId',
  434. headerAlign: "center",
  435. align: "center",
  436. columnLabel: '检验模板编码',
  437. columnHidden: false,
  438. columnImage: false,
  439. columnSortable: false,
  440. sortLv: 0,
  441. status: true,
  442. fixed: '',
  443. columnWidth: 120,
  444. },
  445. {
  446. userId: this.$store.state.user.name,
  447. functionId: 301008,
  448. serialNumber: '301008TableItemNo',
  449. tableId: "301008Table",
  450. tableName: "检验模板维护表",
  451. columnProp: 'templateName',
  452. headerAlign: "center",
  453. align: "left",
  454. columnLabel: '检验模板名称',
  455. columnHidden: false,
  456. columnImage: false,
  457. columnSortable: false,
  458. sortLv: 0,
  459. status: true,
  460. fixed: '',
  461. columnWidth: 200,
  462. },
  463. {
  464. userId: this.$store.state.user.name,
  465. functionId: 301008,
  466. serialNumber: '301008TableItemNo',
  467. tableId: "301008Table",
  468. tableName: "检验模板维护表",
  469. columnProp: 'inspectionCycle',
  470. headerAlign: "center",
  471. align: "right",
  472. columnLabel: '检验周期(h)',
  473. columnHidden: false,
  474. columnImage: false,
  475. columnSortable: false,
  476. sortLv: 0,
  477. status: true,
  478. fixed: '',
  479. columnWidth: 100,
  480. },
  481. {
  482. userId: this.$store.state.user.name,
  483. functionId: 301008,
  484. serialNumber: '301008TableItemNo',
  485. tableId: "301008Table",
  486. tableName: "检验模板维护表",
  487. columnProp: 'defaultSamplingQuantity',
  488. headerAlign: "center",
  489. align: "right",
  490. columnLabel: '默认抽样数量',
  491. columnHidden: false,
  492. columnImage: false,
  493. columnSortable: false,
  494. sortLv: 0,
  495. status: true,
  496. fixed: '',
  497. columnWidth: 100,
  498. },
  499. {
  500. userId: this.$store.state.user.name,
  501. functionId: 301008,
  502. serialNumber: '301008TableItemNo',
  503. tableId: "301008Table",
  504. tableName: "检验模板维护表",
  505. columnProp: 'defaultSamplingProportion',
  506. headerAlign: "center",
  507. align: "right",
  508. columnLabel: '默认抽样比例',
  509. columnHidden: false,
  510. columnImage: false,
  511. columnSortable: false,
  512. sortLv: 0,
  513. status: true,
  514. fixed: '',
  515. columnWidth: 100,
  516. },
  517. /* {
  518. userId: this.$store.state.user.name,
  519. functionId: 301008,
  520. serialNumber: '301008TableItemNo',
  521. tableId: "301008Table",
  522. tableName: "检验模板维护表",
  523. columnProp: 'aql',
  524. headerAlign: "center",
  525. align: "right",
  526. columnLabel: 'AQL',
  527. columnHidden: false,
  528. columnImage: false,
  529. columnSortable: false,
  530. sortLv: 0,
  531. status: true,
  532. fixed: '',
  533. columnWidth: 100,
  534. },
  535. {
  536. userId: this.$store.state.user.name,
  537. functionId: 301008,
  538. serialNumber: '301008TableItemNo',
  539. tableId: "301008Table",
  540. tableName: "检验模板维护表",
  541. columnProp: 'ac',
  542. headerAlign: "center",
  543. align: "right",
  544. columnLabel: 'AC',
  545. columnHidden: false,
  546. columnImage: false,
  547. columnSortable: false,
  548. sortLv: 0,
  549. status: true,
  550. fixed: '',
  551. columnWidth: 100,
  552. },
  553. {
  554. userId: this.$store.state.user.name,
  555. functionId: 301008,
  556. serialNumber: '301008TableItemNo',
  557. tableId: "301008Table",
  558. tableName: "检验模板维护表",
  559. columnProp: 're',
  560. headerAlign: "center",
  561. align: "right",
  562. columnLabel: 'RE',
  563. columnHidden: false,
  564. columnImage: false,
  565. columnSortable: false,
  566. sortLv: 0,
  567. status: true,
  568. fixed: '',
  569. columnWidth: 100,
  570. }, */
  571. {
  572. userId: this.$store.state.user.name,
  573. functionId: 301008,
  574. serialNumber: '301008TableItemNo',
  575. tableId: "301008Table",
  576. tableName: "检验模板维护表",
  577. columnProp: 'inspectionTypeName',
  578. headerAlign: "center",
  579. align: "center",
  580. columnLabel: '检验类型',
  581. columnHidden: false,
  582. columnImage: false,
  583. columnSortable: false,
  584. sortLv: 0,
  585. status: true,
  586. fixed: '',
  587. columnWidth: 100,
  588. },
  589. {
  590. userId: this.$store.state.user.name,
  591. functionId: 301008,
  592. serialNumber: '301008TableItemNo',
  593. tableId: "301008Table",
  594. tableName: "检验模板维护表",
  595. columnProp: 'templateRemark',
  596. headerAlign: "center",
  597. align: "left",
  598. columnLabel: '检验模板备注',
  599. columnHidden: false,
  600. columnImage: false,
  601. columnSortable: false,
  602. sortLv: 0,
  603. status: true,
  604. fixed: '',
  605. columnWidth: 200,
  606. },
  607. {
  608. userId: this.$store.state.user.name,
  609. functionId: 301008,
  610. serialNumber: '301008TableItemNo',
  611. tableId: "301008Table",
  612. tableName: "检验模板维护表",
  613. columnProp: 'templateVersion',
  614. headerAlign: "center",
  615. align: "center",
  616. columnLabel: '版本号',
  617. columnHidden: false,
  618. columnImage: false,
  619. columnSortable: false,
  620. sortLv: 0,
  621. status: true,
  622. fixed: '',
  623. columnWidth: 100,
  624. },
  625. {
  626. userId: this.$store.state.user.name,
  627. functionId: 301008,
  628. serialNumber: '301008TableItemNo',
  629. tableId: "301008Table",
  630. tableName: "检验模板维护表",
  631. columnProp: 'createTime',
  632. headerAlign: "center",
  633. align: "center",
  634. columnLabel: '创建时间',
  635. columnHidden: false,
  636. columnImage: false,
  637. columnSortable: false,
  638. sortLv: 0,
  639. status: true,
  640. fixed: '',
  641. columnWidth: 170,
  642. },
  643. {
  644. userId: this.$store.state.user.name,
  645. functionId: 301008,
  646. serialNumber: '301008TableItemNo',
  647. tableId: "301008Table",
  648. tableName: "检验模板维护表",
  649. columnProp: 'createBy',
  650. headerAlign: "center",
  651. align: "center",
  652. columnLabel: '创建人',
  653. columnHidden: false,
  654. columnImage: false,
  655. columnSortable: false,
  656. sortLv: 0,
  657. status: true,
  658. fixed: '',
  659. columnWidth: 100,
  660. },
  661. {
  662. userId: this.$store.state.user.name,
  663. functionId: 301008,
  664. serialNumber: '301008TableItemNo',
  665. tableId: "301008Table",
  666. tableName: "检验模板维护表",
  667. columnProp: 'updateDate',
  668. headerAlign: 'center',
  669. align: 'center',
  670. columnLabel: '更新时间',
  671. columnHidden: false,
  672. columnImage: false,
  673. columnSortable: false,
  674. sortLv: 0,
  675. status: true,
  676. fixed: '',
  677. columnWidth: 170,
  678. },
  679. {
  680. userId: this.$store.state.user.name,
  681. functionId: 301008,
  682. serialNumber: '301008TableItemNo',
  683. tableId: "301008Table",
  684. tableName: "检验模板维护表",
  685. columnProp: 'updateBy',
  686. headerAlign: 'center',
  687. align: 'center',
  688. columnLabel: '更新人',
  689. columnHidden: false,
  690. columnImage: false,
  691. columnSortable: false,
  692. sortLv: 0,
  693. status: true,
  694. fixed: '',
  695. columnWidth: 100,
  696. },
  697. ],
  698. detailModelFlag: false,
  699. detailList: [],
  700. dataList: [],
  701. columnDetailList: [
  702. { columnProp: "itemNo", headerAlign: "center", align: "center", columnLabel: "检验项目编码", columnHidden: false, columnImage: false, columnSortable: false, sortLv: 0, status: true, fixed: "", columnWidth: 60 },
  703. { columnProp: "itemDesc", headerAlign: "center", align: "left", columnLabel: "检验项目名称", columnHidden: false, columnImage: false, columnSortable: false, sortLv: 0, status: true, fixed: "", columnWidth: 250 },
  704. { columnProp: "valueType", headerAlign: "center", align: "center", columnLabel: "检测值类型", columnHidden: false, columnImage: false, columnSortable: false, sortLv: 0, status: true, fixed: "", columnWidth: 60 },
  705. ],
  706. fastAddFlag: false,
  707. itemList1: [],
  708. itemList2: [],
  709. itemSelections1: [],
  710. itemSelections2: [],
  711. currentRow: {},
  712. rules: {
  713. templateNameType: [{ required: true, message: " ", trigger: ["blur", "change"] }],
  714. inspectionTypeNoType: [{ required: true, message: " ", trigger: ["blur", "change"] }],
  715. bu: [{ required: true, message: " ", trigger: ["blur", "change"] }]
  716. },
  717. userBuList: [],
  718. authSearch: false,
  719. authSave: false,
  720. authUpdate: false,
  721. authDelete: false,
  722. authDetail: false,
  723. menuId: this.$route.meta.menuId,
  724. inspectionStandardModalFlag: false,
  725. standardData: { site: "", buNo: "", templateId: "", itemNo: "", standardList: [] },
  726. tableData: [],
  727. checkedDetail: [],
  728. };
  729. },
  730. mounted() {
  731. this.$nextTick(() => {
  732. this.height = window.innerHeight - 180;
  733. });
  734. },
  735. created() {
  736. this.getButtonAuthData();
  737. this.getSiteAndBuByUserName();
  738. this.favoriteIsOk();
  739. this.inspectionTypeSearch();
  740. this.getTableUserColumn(this.$route.meta.menuId + "table", 1);
  741. if (!this.authSearch) {
  742. this.getDataList();
  743. }
  744. },
  745. methods: {
  746. getSiteAndBuByUserName() {
  747. const tempData = { username: this.$store.state.user.name };
  748. getSiteAndBuByUserName(tempData).then(({ data }) => {
  749. if (data.code === 0) this.userBuList = data.rows;
  750. });
  751. },
  752. inspectionTypeSearch() {
  753. const tempData = { site: this.$store.state.user.site };
  754. inspectionTypeSearch(tempData).then(({ data }) => {
  755. console.log(data.rows);
  756. if (data.code === 0) this.options = data.rows;
  757. });
  758. },
  759. getDataList() {
  760. this.searchData.limit = this.pageSize;
  761. this.searchData.page = this.pageIndex;
  762. templateSearch(this.searchData).then(({ data }) => {
  763. if (data.code === 0) {
  764. this.dataList = data.page.list;
  765. this.pageIndex = data.page.currPage;
  766. this.pageSize = data.page.pageSize;
  767. this.totalPage = data.page.totalCount;
  768. }
  769. });
  770. },
  771. sizeChangeHandle(val) {
  772. this.pageSize = val;
  773. this.pageIndex = 1;
  774. this.getDataList();
  775. },
  776. currentChangeHandle(val) {
  777. this.pageIndex = val;
  778. this.getDataList();
  779. },
  780. addModal() {
  781. this.modalData = {
  782. flag: "1",
  783. site: "",
  784. bu: '2_03-RFID',
  785. templateId: "",
  786. templateName: "",
  787. templateRemark: "",
  788. templateType: "",
  789. templateVersion: "",
  790. samplingProgrammeNo: "",
  791. samplingProgrammeDesc: "",
  792. inspectionTypeNo: "823",
  793. inspectionCycle: "",
  794. samplingLevelNo: "",
  795. samplingLevelDesc: "",
  796. defaultSamplingQuantity: "",
  797. defaultSamplingProportion: "",
  798. aql: "",
  799. ac: "",
  800. re: "",
  801. createBy: this.$store.state.user.name,
  802. updateBy: this.$store.state.user.name,
  803. };
  804. this.modalDisableFlag = false;
  805. this.modalFlag = true;
  806. },
  807. updateModal(row) {
  808. this.modalData = {
  809. flag: "2",
  810. bu: row.site + "_" + row.buNo,
  811. site: row.site,
  812. templateId: row.templateId,
  813. templateName: row.templateName,
  814. templateRemark: row.templateRemark,
  815. templateType: row.templateType,
  816. templateVersion: row.templateVersion,
  817. samplingProgrammeNo: row.samplingProgrammeNo,
  818. samplingProgrammeDesc: row.samplingProgrammeDesc,
  819. inspectionTypeNo: "822",
  820. samplingLevelNo: row.samplingLevelNo,
  821. samplingLevelDesc: row.samplingLevelDesc,
  822. inspectionCycle: row.inspectionCycle,
  823. defaultSamplingQuantity: row.defaultSamplingQuantity,
  824. defaultSamplingProportion: row.defaultSamplingProportion,
  825. aql: row.aql,
  826. ac: row.ac,
  827. re: row.re,
  828. createBy: this.$store.state.user.name,
  829. updateBy: this.$store.state.user.name,
  830. };
  831. this.modalDisableFlag = true;
  832. this.modalFlag = true;
  833. },
  834. deleteModel(row) {
  835. this.$confirm(`是否删除这个检验模板?`, "提示", { confirmButtonText: "确定", cancelButtonText: "取消", type: "warning" })
  836. .then(() => {
  837. templateDelete(row).then(({ data }) => {
  838. if (data && data.code === 0) {
  839. this.getDataList();
  840. this.$message({ message: "操作成功", type: "success", duration: 1500, onClose: () => {} });
  841. } else {
  842. this.$alert(data.msg, "错误", { confirmButtonText: "确定" });
  843. }
  844. });
  845. })
  846. .catch(() => {});
  847. },
  848. saveData() {
  849. if (this.modalData.bu === "" || this.modalData.bu == null) {
  850. this.$message.warning("请选择BU!");
  851. return;
  852. }
  853. if (this.modalData.templateName === "" || this.modalData.templateName == null) {
  854. this.$message.warning("请输入检验模板名称!");
  855. return;
  856. }
  857. if (this.modalData.inspectionTypeNo === "" || this.modalData.inspectionTypeNo == null) {
  858. this.$message.warning("请选择检验类型!");
  859. return;
  860. }
  861. if (this.modalData.flag === "1") {
  862. templateSave(this.modalData).then(({ data }) => {
  863. if (data && data.code === 0) {
  864. this.getDataList();
  865. this.modalFlag = false;
  866. this.$message({ message: "操作成功", type: "success", duration: 1500, onClose: () => {} });
  867. } else {
  868. this.$alert(data.msg, "错误", { confirmButtonText: "确定" });
  869. }
  870. });
  871. } else {
  872. templateUpdate(this.modalData).then(({ data }) => {
  873. if (data && data.code === 0) {
  874. this.getDataList();
  875. this.modalFlag = false;
  876. this.$message({ message: "操作成功", type: "success", duration: 1500, onClose: () => {} });
  877. } else {
  878. this.$alert(data.msg, "错误", { confirmButtonText: "确定" });
  879. }
  880. });
  881. }
  882. },
  883. detailModal(row) {
  884. this.detailData.site = row.site;
  885. this.detailData.buNo = row.buNo;
  886. this.detailData.templateId = row.templateId;
  887. this.detailData.templateName = row.templateName;
  888. this.detailData.inspectionTypeNo = "822";
  889. this.detailData.inspectionTypeName = row.inspectionTypeName;
  890. templateDetailsSearch(this.detailData).then(({ data }) => {
  891. this.detailList = data.rows;
  892. });
  893. this.detailModelFlag = true;
  894. },
  895. saveDetail() {
  896. const tempData = { site: this.detailData.site, buNo: this.detailData.buNo, templateId: this.detailData.templateId, itemList: this.detailList };
  897. saveItemDetailed(tempData).then(({ data }) => {
  898. if (data && data.code === 0) {
  899. this.getDataList();
  900. this.detailModelFlag = false;
  901. this.$message({ message: "操作成功", type: "success", duration: 1500, onClose: () => {} });
  902. } else {
  903. this.$alert(data.msg, "错误", { confirmButtonText: "确定" });
  904. }
  905. });
  906. },
  907. addFastModal() {
  908. this.itemSelections1 = [];
  909. this.itemSelections2 = [];
  910. getItemList(this.detailData).then(({ data }) => {
  911. // dmBasic 保持同样返回结构 row1/row2
  912. this.itemList1 = data.row1;
  913. this.itemList2 = data.row2;
  914. });
  915. this.fastAddFlag = true;
  916. },
  917. getItem() {
  918. getItem(this.detailData).then(({ data }) => {
  919. if (data.code === 0) {
  920. this.itemList1 = data.rows;
  921. }
  922. });
  923. },
  924. itemClickRow1(row) {
  925. this.$refs.itemTable1.toggleRowSelection(row);
  926. },
  927. itemClickRow2(row) {
  928. this.$refs.itemTable2.toggleRowSelection(row);
  929. },
  930. selectFlag() {
  931. return true;
  932. },
  933. selectionItem1(val) {
  934. this.itemSelections1 = val;
  935. },
  936. selectionItem2(val) {
  937. this.itemSelections2 = val;
  938. },
  939. addItem() {
  940. if (this.itemSelections1 == null || this.itemSelections1.length === 0) {
  941. this.$message.warning("请选择可选项目!");
  942. return;
  943. }
  944. const inData = {
  945. site: this.detailData.site,
  946. buNo: this.detailData.buNo,
  947. templateId: this.detailData.templateId,
  948. templateName: this.detailData.templateName,
  949. itemList: this.itemSelections1,
  950. itemType: this.detailData.itemType,
  951. };
  952. addItemDetails(inData).then(({ data }) => {
  953. if (data && data.code === 0) {
  954. getItemList(this.detailData).then(({ data: rowsData }) => {
  955. this.itemList1 = rowsData.row1;
  956. this.itemList2 = rowsData.row2;
  957. });
  958. this.itemSelections1 = [];
  959. } else {
  960. this.$alert(data.msg, "错误", { confirmButtonText: "确定" });
  961. }
  962. });
  963. },
  964. deleteItem() {
  965. if (this.itemSelections2 == null || this.itemSelections2.length === 0) {
  966. this.$message.warning("请选择已有项目!");
  967. return;
  968. }
  969. const inData = {
  970. site: this.detailData.site,
  971. buNo: this.detailData.buNo,
  972. templateId: this.detailData.templateId,
  973. templateName: this.detailData.templateName,
  974. itemList: this.itemSelections2,
  975. itemType: this.detailData.itemType,
  976. };
  977. delItemDetails(inData).then(({ data }) => {
  978. if (data && data.code === 0) {
  979. getItemList(this.detailData).then(({ data: rowsData }) => {
  980. this.itemList1 = rowsData.row1;
  981. this.itemList2 = rowsData.row2;
  982. });
  983. this.itemSelections2 = [];
  984. } else {
  985. this.$alert(data.msg, "错误", { confirmButtonText: "确定" });
  986. }
  987. });
  988. },
  989. refreshDetailList() {
  990. templateDetailsSearch(this.detailData).then(({ data }) => {
  991. this.detailList = data.rows;
  992. });
  993. },
  994. delItemDetails(row) {
  995. this.$confirm(`是否删除这个检验明细?`, "提示", { confirmButtonText: "确定", cancelButtonText: "取消", type: "warning" })
  996. .then(() => {
  997. delItemDetails(row).then(({ data }) => {
  998. if (data && data.code === 0) {
  999. templateDetailsSearch(this.detailData).then(({ data }) => {
  1000. this.detailList = data.rows;
  1001. });
  1002. this.$message({ message: "操作成功", type: "success", duration: 1500, onClose: () => {} });
  1003. } else {
  1004. this.$alert(data.msg, "错误", { confirmButtonText: "确定" });
  1005. }
  1006. });
  1007. })
  1008. .catch(() => {});
  1009. },
  1010. itemClickRow(row) {
  1011. this.currentRow = JSON.parse(JSON.stringify(row));
  1012. },
  1013. goUp() {
  1014. goUpItemQC(this.currentRow).then(({ data }) => {
  1015. if (data && data.code === 0) {
  1016. templateDetailsSearch(this.detailData).then(({ data }) => {
  1017. this.detailList = data.rows;
  1018. this.$message.success("操作成功");
  1019. });
  1020. }
  1021. });
  1022. },
  1023. goDown() {
  1024. goDownItemQC(this.currentRow).then(({ data }) => {
  1025. if (data && data.code === 0) {
  1026. templateDetailsSearch(this.detailData).then(({ data }) => {
  1027. this.detailList = data.rows;
  1028. this.$message.success("操作成功");
  1029. });
  1030. }
  1031. });
  1032. },
  1033. closeDialog() {
  1034. this.detailList = [];
  1035. this.itemList1 = [];
  1036. this.itemList2 = [];
  1037. },
  1038. qcUpload() {
  1039. const currentData = { flag: "template", createBy: this.$store.state.user.name, site: this.$store.state.user.site };
  1040. this.$nextTick(() => {
  1041. this.$refs.qcUpload.init(currentData);
  1042. });
  1043. },
  1044. favoriteIsOk() {
  1045. const userFavorite = { userId: this.$store.state.user.id, languageCode: this.$i18n.locale };
  1046. userFavoriteList(userFavorite).then(({ data }) => {
  1047. for (let i = 0; i < data.list.length; i++) {
  1048. if (this.$route.meta.menuId === data.list[i].menuId) this.favorite = true;
  1049. }
  1050. });
  1051. },
  1052. favoriteFunction() {
  1053. const userFavorite = { userId: this.$store.state.user.id, functionId: this.$route.meta.menuId };
  1054. if (this.favorite) {
  1055. removeUserFavorite(userFavorite).then(({ data }) => {
  1056. this.$message.success(data.msg);
  1057. this.favorite = false;
  1058. });
  1059. } else {
  1060. saveUserFavorite(userFavorite).then(({ data }) => {
  1061. this.$message.success(data.msg);
  1062. this.favorite = true;
  1063. });
  1064. }
  1065. },
  1066. async createExportData() {
  1067. this.searchData.limit = -1;
  1068. this.searchData.page = 1;
  1069. this.searchData.inspectionTypeNo = "822";
  1070. await templateSearch(this.searchData).then(({ data }) => {
  1071. this.exportList = data.page.list;
  1072. });
  1073. return this.exportList;
  1074. },
  1075. startDownload() {},
  1076. finishDownload() {},
  1077. fields() {
  1078. let json = "{";
  1079. this.columnList.forEach((item, index) => {
  1080. json += `"${item.columnLabel}":"${item.columnProp}"${index === this.columnList.length - 1 ? "" : ","}`;
  1081. });
  1082. json += "}";
  1083. // eslint-disable-next-line no-eval
  1084. return eval("(" + json + ")");
  1085. },
  1086. async getTableUserColumn(tableId, columnId) {
  1087. const queryTableUser = { userId: this.$store.state.user.name, functionId: this.$route.meta.menuId, tableId, status: true, languageCode: this.$i18n.locale };
  1088. await getTableUserListLanguage(queryTableUser).then(({ data }) => {
  1089. if (data.rows.length > 0) {
  1090. if (columnId === 1) this.columnList = data.rows;
  1091. } else {
  1092. this.getColumnList(tableId, columnId);
  1093. }
  1094. });
  1095. },
  1096. async getColumnList(tableId, columnId) {
  1097. const queryTable = { functionId: this.$route.meta.menuId, tableId, languageCode: this.$i18n.locale };
  1098. await getTableDefaultListLanguage(queryTable).then(({ data }) => {
  1099. if (!data.rows.length === 0) {
  1100. if (columnId === 1) this.columnList = data.rows;
  1101. }
  1102. });
  1103. },
  1104. getButtonAuthData() {
  1105. const searchFlag = this.isAuth(this.menuId + ":search");
  1106. const saveFlag = this.isAuth(this.menuId + ":save");
  1107. const updateFlag = this.isAuth(this.menuId + ":update");
  1108. const deleteFlag = this.isAuth(this.menuId + ":delete");
  1109. const detailFlag = this.isAuth(this.menuId + ":detail");
  1110. this.authSearch = !searchFlag;
  1111. this.authSave = !saveFlag;
  1112. this.authUpdate = !updateFlag;
  1113. this.authDelete = !deleteFlag;
  1114. this.authDetail = !detailFlag;
  1115. },
  1116. // 判定标准弹窗/表格逻辑(与 QC 一致)
  1117. inspectionStandardModal(row) {
  1118. this.standardData = { site: row.site, buNo: row.buNo, templateId: row.templateId, itemNo: row.itemNo, standardList: [] };
  1119. getInspectionStandards(this.standardData).then(({ data }) => {
  1120. this.tableData = data.code === 0 ? data.rows : [];
  1121. });
  1122. this.inspectionStandardModalFlag = true;
  1123. },
  1124. saveInspectionStandard() {
  1125. this.standardData.standardList = this.tableData;
  1126. saveInspectionStandard(this.standardData).then(({ data }) => {
  1127. if (data && data.code === 0) {
  1128. this.inspectionStandardModalFlag = false;
  1129. this.tableData = [];
  1130. this.$message({ message: "操作成功", type: "success", duration: 1500, onClose: () => {} });
  1131. } else {
  1132. this.$alert(data.msg, "错误", { confirmButtonText: "确定" });
  1133. }
  1134. });
  1135. },
  1136. // 获取基础数据列表(抽样方案/检验水平)
  1137. getBaseList(val) {
  1138. this.tagNo = val;
  1139. this.$nextTick(() => {
  1140. let strVal = "";
  1141. let conSql = "";
  1142. if (this.modalData.bu === null || this.modalData.bu === "") {
  1143. this.$message.warning("请选择BU!");
  1144. return;
  1145. } else {
  1146. conSql = " and site = '" + this.modalData.bu.split("_")[0] + "'" + " and bu_no = '" + this.modalData.bu.split("_")[1] + "'";
  1147. }
  1148. if (val === 207) strVal = this.modalData.samplingProgrammeNo;
  1149. if (val === 208) strVal = this.modalData.samplingLevelNo;
  1150. this.$refs.baseList.init(val, strVal, conSql);
  1151. });
  1152. },
  1153. // 列表方法的回调
  1154. getBaseData(val) {
  1155. if (this.tagNo === 207) {
  1156. this.modalData.samplingProgrammeNo = val.sampling_programme_no;
  1157. this.modalData.samplingProgrammeDesc = val.sampling_programme_desc;
  1158. }
  1159. if (this.tagNo === 208) {
  1160. this.modalData.samplingLevelNo = val.sampling_level_no;
  1161. this.modalData.samplingLevelDesc = val.sampling_level_desc;
  1162. }
  1163. },
  1164. }
  1165. };
  1166. </script>