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.

365 lines
11 KiB

7 months ago
  1. <template>
  2. <div class="mod-config">
  3. <!-- 查询表单 - rqrq -->
  4. <el-form :inline="true" label-position="top" style="margin-top: 1px; margin-left: 0px;">
  5. <el-form-item label="工厂编码">
  6. <el-input v-model="queryData.site" style="width: 120px" placeholder="工厂编码" clearable @keyup.enter.native="getDataList()"></el-input>
  7. </el-form-item>
  8. <el-form-item label="白名单关键词">
  9. <el-input v-model="queryData.searchErrorDesc" style="width: 200px" placeholder="白名单关键词" clearable @keyup.enter.native="getDataList()"></el-input>
  10. </el-form-item>
  11. <el-form-item label="是否启用">
  12. <el-select v-model="queryData.active" style="width: 120px" placeholder="全部" clearable>
  13. <el-option label="启用" value="Y"></el-option>
  14. <el-option label="禁用" value="N"></el-option>
  15. </el-select>
  16. </el-form-item>
  17. <el-form-item label=" ">
  18. <el-button type="primary" @click="getDataList()">查询</el-button>
  19. <el-button @click="resetQuery()">重置</el-button>
  20. <el-button type="primary" class="yzzButtonAn" @click="addConfig()">新增白名单</el-button>
  21. </el-form-item>
  22. </el-form>
  23. <!-- 数据表格 - rqrq -->
  24. <el-table
  25. :data="dataList"
  26. :height="height"
  27. border
  28. highlight-current-row
  29. v-loading="dataListLoading"
  30. style="width: 100%;">
  31. <el-table-column
  32. prop="id"
  33. header-align="center"
  34. align="center"
  35. label="ID"
  36. width="80">
  37. </el-table-column>
  38. <el-table-column
  39. prop="site"
  40. header-align="center"
  41. align="center"
  42. label="工厂编码"
  43. width="100">
  44. </el-table-column>
  45. <el-table-column
  46. prop="errorDesc"
  47. header-align="center"
  48. align="left"
  49. label="白名单关键词(可忽略的错误)"
  50. min-width="200"
  51. show-overflow-tooltip>
  52. </el-table-column>
  53. <el-table-column
  54. prop="active"
  55. header-align="center"
  56. align="center"
  57. label="是否启用"
  58. width="100">
  59. <template slot-scope="scope">
  60. <el-tag
  61. :type="scope.row.active === 'Y' ? 'success' : 'danger'"
  62. size="small">
  63. {{ scope.row.active === 'Y' ? '启用' : '禁用' }}
  64. </el-tag>
  65. </template>
  66. </el-table-column>
  67. <el-table-column
  68. prop="remark"
  69. header-align="center"
  70. align="left"
  71. label="备注"
  72. min-width="200"
  73. show-overflow-tooltip>
  74. </el-table-column>
  75. <el-table-column
  76. prop="createdBy"
  77. header-align="center"
  78. align="center"
  79. label="创建人"
  80. width="100">
  81. </el-table-column>
  82. <el-table-column
  83. prop="createdTime"
  84. header-align="center"
  85. align="center"
  86. label="创建时间"
  87. width="160">
  88. </el-table-column>
  89. <!-- 操作列 - rqrq -->
  90. <el-table-column
  91. header-align="center"
  92. align="center"
  93. fixed="right"
  94. width="150"
  95. label="操作">
  96. <template slot-scope="scope">
  97. <a type="text" @click="editConfig(scope.row)">修改</a>
  98. <a type="text" @click="deleteConfig(scope.row)" style="margin-left: 10px;">删除</a>
  99. </template>
  100. </el-table-column>
  101. </el-table>
  102. <!-- 分页 - rqrq -->
  103. <el-pagination
  104. @size-change="sizeChangeHandle"
  105. @current-change="currentChangeHandle"
  106. :current-page="pageIndex"
  107. :page-sizes="[20, 50, 100, 1000]"
  108. :page-size="pageSize"
  109. :total="totalPage"
  110. layout="total, sizes, prev, pager, next, jumper">
  111. </el-pagination>
  112. <!-- 新增/修改弹窗 - rqrq -->
  113. <el-dialog
  114. :title="dialogTitle"
  115. :visible.sync="dialogVisible"
  116. :close-on-click-modal="false"
  117. v-drag
  118. width="700px">
  119. <el-form :model="formData" :rules="formRules" ref="configForm" label-position="top" style="margin-top: 1px; margin-left: 0px;">
  120. <el-row :gutter="20">
  121. <el-col :span="12">
  122. <el-form-item label="工厂编码" prop="site">
  123. <el-input v-model="formData.site" placeholder="请输入工厂编码"></el-input>
  124. </el-form-item>
  125. </el-col>
  126. <el-col :span="12">
  127. <el-form-item label="是否启用" prop="active">
  128. <el-select v-model="formData.active" placeholder="请选择" style="width: 100%">
  129. <el-option label="启用" value="Y"></el-option>
  130. <el-option label="禁用" value="N"></el-option>
  131. </el-select>
  132. </el-form-item>
  133. </el-col>
  134. </el-row>
  135. <el-row>
  136. <el-col :span="24">
  137. <el-form-item label="白名单关键词(配置可忽略的普通错误)" prop="errorDesc">
  138. <el-input v-model="formData.errorDesc" placeholder="请输入白名单关键词(如:用户输入错误、格式不正确)"></el-input>
  139. </el-form-item>
  140. </el-col>
  141. </el-row>
  142. <el-row>
  143. <el-col :span="24">
  144. <el-form-item label="备注说明">
  145. <el-input v-model="formData.remark" type="textarea" :rows="3" resize='none' placeholder="请输入备注说明(如:该错误属于正常业务场景,可忽略)"></el-input>
  146. </el-form-item>
  147. </el-col>
  148. </el-row>
  149. </el-form>
  150. <div slot="footer" class="dialog-footer" style="margin-top: 52px">
  151. <el-button type="primary" @click="saveConfig" :disabled="saveLoading">
  152. {{ saveLoading ? '保存中...' : '确定' }}
  153. </el-button>
  154. <el-button @click="dialogVisible = false" :disabled="saveLoading">取消</el-button>
  155. </div>
  156. </el-dialog>
  157. </div>
  158. </template>
  159. <script>
  160. import {
  161. getImportantErrorConfigList,
  162. addImportantErrorConfig,
  163. updateImportantErrorConfig,
  164. deleteImportantErrorConfig
  165. } from '@/api/system/importantErrorConfig.js'
  166. export default {
  167. data() {
  168. return {
  169. // 查询条件 - rqrq
  170. queryData: {
  171. site: this.$store.state.user.site,
  172. searchErrorDesc: '',
  173. active: '',
  174. page: 1,
  175. limit: 20
  176. },
  177. // 表格高度 - rqrq
  178. height: 450,
  179. // 数据列表 - rqrq
  180. dataList: [],
  181. // 分页参数 - rqrq
  182. pageIndex: 1,
  183. pageSize: 20,
  184. totalPage: 0,
  185. dataListLoading: false,
  186. // 弹窗相关 - rqrq
  187. dialogVisible: false,
  188. dialogTitle: '',
  189. dialogType: '', // add 或 edit
  190. formData: {},
  191. formRules: {
  192. site: [
  193. { required: true, message: '请输入工厂编码', trigger: 'blur' }
  194. ],
  195. errorDesc: [
  196. { required: true, message: '请输入白名单关键词', trigger: 'blur' }
  197. ],
  198. active: [
  199. { required: true, message: '请选择是否启用', trigger: 'change' }
  200. ]
  201. },
  202. saveLoading: false,
  203. deleteLoading: false
  204. }
  205. },
  206. mounted() {
  207. this.$nextTick(() => {
  208. // 计算表格高度 - rqrq
  209. this.height = window.innerHeight - 220;
  210. })
  211. },
  212. activated() {
  213. this.getDataList()
  214. },
  215. methods: {
  216. // 获取数据列表 - rqrq
  217. getDataList() {
  218. this.dataListLoading = true
  219. this.queryData.page = this.pageIndex
  220. this.queryData.limit = this.pageSize
  221. getImportantErrorConfigList(this.queryData).then(({data}) => {
  222. this.dataListLoading = false
  223. if (data && data.code === 0) {
  224. this.dataList = data.page.list || []
  225. this.totalPage = data.page.totalCount || 0
  226. } else {
  227. this.dataList = []
  228. this.totalPage = 0
  229. this.$alert(data.msg || '查询失败', '错误', { confirmButtonText: '确定' })
  230. }
  231. }).catch(error => {
  232. this.dataListLoading = false
  233. console.error('查询错误白名单列表失败:', error)
  234. this.$alert('查询失败', '错误', { confirmButtonText: '确定' })
  235. })
  236. },
  237. // 重置查询条件 - rqrq
  238. resetQuery() {
  239. this.queryData = {
  240. site: this.$store.state.user.site,
  241. searchErrorDesc: '',
  242. active: '',
  243. page: 1,
  244. limit: 20
  245. }
  246. this.pageIndex = 1
  247. this.getDataList()
  248. },
  249. // 每页数量变化 - rqrq
  250. sizeChangeHandle(val) {
  251. this.pageSize = val
  252. this.pageIndex = 1
  253. this.getDataList()
  254. },
  255. // 当前页变化 - rqrq
  256. currentChangeHandle(val) {
  257. this.pageIndex = val
  258. this.getDataList()
  259. },
  260. // 新增配置 - rqrq
  261. addConfig() {
  262. this.dialogTitle = '新增错误白名单'
  263. this.dialogType = 'add'
  264. this.formData = {
  265. site: this.$store.state.user.site ,
  266. errorDesc: '',
  267. active: 'Y',
  268. remark: ''
  269. }
  270. this.dialogVisible = true
  271. this.$nextTick(() => {
  272. this.$refs.configForm.clearValidate()
  273. })
  274. },
  275. // 修改配置 - rqrq
  276. editConfig(row) {
  277. this.dialogTitle = '修改错误白名单'
  278. this.dialogType = 'edit'
  279. this.formData = Object.assign({}, row)
  280. this.dialogVisible = true
  281. this.$nextTick(() => {
  282. this.$refs.configForm.clearValidate()
  283. })
  284. },
  285. // 保存配置 - rqrq
  286. saveConfig() {
  287. this.$refs.configForm.validate((valid) => {
  288. if (!valid) {
  289. return
  290. }
  291. this.saveLoading = true
  292. const apiMethod = this.dialogType === 'add' ? addImportantErrorConfig : updateImportantErrorConfig
  293. apiMethod(this.formData).then(({data}) => {
  294. if (data && data.code === 0) {
  295. this.$message.success(this.dialogType === 'add' ? '新增成功' : '修改成功')
  296. this.dialogVisible = false
  297. this.getDataList()
  298. } else {
  299. this.$alert(data.msg || '操作失败', '错误')
  300. }
  301. }).catch(error => {
  302. console.error('保存错误白名单失败:', error)
  303. this.$alert('保存失败', '错误', { confirmButtonText: '确定' })
  304. }).finally(() => {
  305. this.saveLoading = false
  306. })
  307. })
  308. },
  309. // 删除配置 - rqrq
  310. deleteConfig(row) {
  311. // 二次确认 - rqrq
  312. this.$confirm(`确定要删除白名单 "${row.errorDesc}" 吗?删除后该类错误将被标记为重要错误`, '提示', {
  313. confirmButtonText: '确定',
  314. cancelButtonText: '取消',
  315. type: 'warning'
  316. }).then(() => {
  317. this.deleteLoading = true
  318. deleteImportantErrorConfig({ id: row.id }).then(({data}) => {
  319. if (data && data.code === 0) {
  320. this.$message.success('删除成功')
  321. this.getDataList()
  322. } else {
  323. this.$alert(data.msg || '删除失败', '错误')
  324. }
  325. }).catch(error => {
  326. console.error('删除错误白名单失败:', error)
  327. this.$message.error('删除失败')
  328. }).finally(() => {
  329. this.deleteLoading = false
  330. })
  331. }).catch(() => {
  332. // 用户取消删除 - rqrq
  333. })
  334. }
  335. }
  336. }
  337. </script>
  338. <style scoped>
  339. /* 表格样式优化 - rqrq */
  340. .mod-config {
  341. padding: 10px;
  342. }
  343. </style>