plm前端
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.

367 lines
12 KiB

3 years ago
  1. <script>
  2. import {updateDictData,selectDictTypeList,saveDictData,selectDictDataPage,delDictData,delBatchDictData} from "../../../api/dict";
  3. export default {
  4. name: "dictData",
  5. data(){
  6. return{
  7. // 查询对象
  8. searchData:{
  9. site:this.$store.state.user.site,
  10. dictLabel:undefined,
  11. dictType:undefined,
  12. status:undefined,
  13. },
  14. // 分页条件
  15. no:1,
  16. size:50,
  17. total:0,
  18. // 新增对象
  19. saveData:{
  20. dictId:undefined,
  21. dictLabel:undefined,
  22. dictType: undefined,
  23. dictValue: undefined,
  24. dictSort: 1,
  25. isDefault: 'N',
  26. status:'Y',
  27. createBy:this.$store.state.user.name,
  28. createDate:undefined,
  29. updateBy:this.$store.state.user.name,
  30. updateDate:undefined,
  31. remark:undefined,
  32. site:this.$store.state.user.site,
  33. },
  34. // 校验提示
  35. dataLabelValue:[
  36. {label:'字典标签',value:'dictLabel'},
  37. {label:'字典类型',value:'dictType'},
  38. {label:'字典键值',value:'dictValue'},
  39. {label:'字典排序',value:'dictSort'},
  40. {label:'状态',value:'status'},
  41. ],
  42. // 字典类型集合
  43. dictDataList:[],
  44. dictTypeList:[],
  45. // 模态框开关
  46. saveDataDialogFlag:false,
  47. // 新增修改状态(0新增,1修改)
  48. insertOrUpdate:0,
  49. // 新增修改规则
  50. dictDataRules: {
  51. dictLabel:[{required:true,message:' ',tagger:['blur','change']}],
  52. dictType:[{required:true,message:' ',tagger:['blur','change']}],
  53. dictValue:[{required:true,message:' ',tagger:['blur','change']}],
  54. dictSort:[{required:true,type:'number',message:' ',tagger:['blur','change']}],
  55. status:[{required:true,message:' ',tagger:['blur','change']}],
  56. },
  57. // 选择的表格列
  58. selectionDictDataList:[],
  59. // 选中的标签页
  60. activeTabs:'dictData',
  61. }
  62. },
  63. methods:{
  64. initDictData(){
  65. selectDictDataPage(this.no,this.size,this.searchData).then(({data})=>{
  66. if (data && data.code === 0){
  67. this.dictDataList = data.rows;
  68. this.total = data.total;
  69. this.$refs.dictDataTable.clearSelection();
  70. }else {
  71. this.$message.error(data.msg)
  72. }
  73. }).catch((error)=>{
  74. })
  75. },
  76. openDictTypeDialog(val,row){
  77. this.insertOrUpdate = val;
  78. if (row){
  79. this.saveData = {...row}
  80. }
  81. this.saveDataDialogFlag = true
  82. },
  83. closeSaveDataDialog(){
  84. this.$refs.saveDataForm.resetFields();
  85. this.saveData.remark = undefined;
  86. this.saveData.isDefault = 'N';
  87. },
  88. openSaveDataDialog(){
  89. this.saveData.dictType = this.searchData.dictType;
  90. },
  91. saveOrUpdate(){
  92. this.$refs.saveDataForm.validate((validate,objects)=> {
  93. if (validate) {
  94. if (this.insertOrUpdate === 0){
  95. this.saveDictData();
  96. }else {
  97. this.updateDictData();
  98. }
  99. } else {
  100. this.rulesValidateLabel(objects,this.dataLabelValue)
  101. }
  102. })
  103. },
  104. saveDictData(){
  105. saveDictData(this.saveData).then(({data})=>{
  106. if (data && data.code === 0){
  107. this.$message.success(data.msg);
  108. this.initDictData();
  109. this.saveDataDialogFlag = false;
  110. }else {
  111. this.$message.error(data.msg)
  112. }
  113. }).catch((error)=>{
  114. this.$message.error(error)
  115. })
  116. },
  117. updateDictData(){
  118. updateDictData(this.saveData).then(({data})=>{
  119. if (data && data.code === 0){
  120. this.$message.success(data.msg);
  121. this.initDictData();
  122. this.saveDataDialogFlag = false;
  123. }else {
  124. this.$message.error(data.msg)
  125. }
  126. }).catch((error)=>{
  127. this.$message.error(error)
  128. })
  129. },
  130. delDictData(row){
  131. this.$confirm('此操作将永久删除该文件, 是否继续?', '提示', {
  132. confirmButtonText: '确定',
  133. cancelButtonText: '取消',
  134. type: 'warning'
  135. }).then(() => {
  136. delDictData(row).then(({data})=>{
  137. if (data && data.code === 0){
  138. this.$message.success(data.msg);
  139. this.initDictData();
  140. }else {
  141. this.$message.error(data.msg)
  142. }
  143. }).catch((error)=>{
  144. this.$message.error(error)
  145. })
  146. }).catch(() => {
  147. this.$message({
  148. type: 'info',
  149. message: '已取消删除'
  150. });
  151. });
  152. },
  153. delBatchDictData(){
  154. let some = this.selectionDictDataList.some(item=>item.isSystem === 'N');
  155. if (!some){
  156. this.$alert('系统参数,无法删除', '警告', {confirmButtonText: '确定',});
  157. return;
  158. }
  159. this.$confirm('此操作将永久删除该文件, 是否继续?', '提示', {
  160. confirmButtonText: '确定',
  161. cancelButtonText: '取消',
  162. type: 'warning'
  163. }).then(() => {
  164. delBatchDictData(this.selectionDictDataList).then(({data})=>{
  165. if (data && data.code === 0){
  166. this.$message.success(data.msg);
  167. this.initDictData();
  168. this.$refs.dictDataTable.clearSelection();
  169. }else {
  170. this.$message.error(data.msg)
  171. }
  172. }).catch((error)=>{
  173. this.$message.error(error)
  174. })
  175. }).catch(() => {
  176. });
  177. },
  178. handleSelectionChange(val){
  179. this.selectionDictDataList = val;
  180. },
  181. dictTypeSizeChange(val){
  182. this.no = 1
  183. this.size = val
  184. this.initDictData();
  185. },
  186. dictTypeNoChange(val){
  187. this.no = val
  188. this.initDictData();
  189. },
  190. selectDictTypeList(){
  191. let params = {
  192. site:this.$store.state.user.site,
  193. }
  194. selectDictTypeList(params).then(({data})=>{
  195. if (data && data.code === 0){
  196. this.dictTypeList = data.rows;
  197. if (this.$route.params.dictType){
  198. this.searchData.dictType = this.$route.params.dictType
  199. }else {
  200. if (this.dictTypeList.length > 0){
  201. this.searchData.dictType = this.dictTypeList[0].dictType;
  202. }
  203. }
  204. this.initDictData();
  205. }
  206. }).catch((error)=>{
  207. })
  208. },
  209. // 校验处理
  210. rulesValidateLabel(objects, labels) {
  211. for (let filed in objects) {
  212. for (let i = 0; i < labels.length; i++) {
  213. let quotationToolColumn = labels[i];
  214. if (quotationToolColumn.value === filed) {
  215. this.$message.warning(quotationToolColumn.label+"为空或填写不正确");
  216. return
  217. }
  218. }
  219. }
  220. },
  221. },
  222. created() {
  223. },
  224. activated() {
  225. this.selectDictTypeList()
  226. }
  227. }
  228. </script>
  229. <template>
  230. <div>
  231. <el-form ref="form" label-position="top" :model="searchData" label-width="80px">
  232. <el-row :gutter="20">
  233. <el-col :span="3">
  234. <el-form-item label="字典名称">
  235. <el-select v-model="searchData.dictType" style="width: 100%" placeholder="请选择">
  236. <el-option
  237. v-for="item in dictTypeList"
  238. :key="item.dictType"
  239. :label="item.dictName"
  240. :value="item.dictType">
  241. </el-option>
  242. </el-select>
  243. </el-form-item>
  244. </el-col>
  245. <el-col :span="3">
  246. <el-form-item label="字典标签">
  247. <el-input v-model="searchData.dictLabel" clearable/>
  248. </el-form-item>
  249. </el-col>
  250. <el-col :span="2">
  251. <el-form-item label="状态">
  252. <el-select v-model="searchData.status" clearable style="width: 100%" placeholder="请选择">
  253. <el-option
  254. key="Y"
  255. label="启用"
  256. value="Y">
  257. </el-option>
  258. <el-option
  259. key="N"
  260. label="停用"
  261. value="N">
  262. </el-option>
  263. </el-select>
  264. </el-form-item>
  265. </el-col>
  266. <el-col :span="4">
  267. <el-form-item label=" ">
  268. <el-button type="primary" @click="initDictData" icon="el-icon-search"> </el-button>
  269. </el-form-item>
  270. </el-col>
  271. </el-row>
  272. </el-form>
  273. <div style="margin-bottom: 8px;margin-top: 8px">
  274. <el-button type="primary" icon="el-icon-plus" @click="openDictTypeDialog(0)"> </el-button>
  275. <el-button type="primary" icon="el-icon-delete" @click="delBatchDictData"> </el-button>
  276. </div>
  277. <el-table
  278. border height="75vh" row-key="dictCode"
  279. :data="dictDataList"
  280. ref="dictDataTable"
  281. @selection-change="handleSelectionChange"
  282. style="width: 100%">
  283. <el-table-column type="selection" width="55" align="center" :reserve-selection="true"/>
  284. <el-table-column type="index" width="80" header-align="center" label="字典序号" align="right"/>
  285. <el-table-column prop="dictLabel" header-align="center" align="center" label="字典标签"/>
  286. <el-table-column prop="dictValue" header-align="center" label="字典键值"/>
  287. <el-table-column prop="dictSort" header-align="center" label="字典排序"/>
  288. <el-table-column prop="status" header-align="center" align="center" label="字典状态">
  289. <template slot-scope="{row,$index}">
  290. <span>{{row.status === 'Y'?'启用':'停用'}}</span>
  291. </template>
  292. </el-table-column>
  293. <el-table-column prop="remark" header-align="center" align="left" label="备注"/>
  294. <el-table-column prop="createBy" header-align="center" label="创建者"/>
  295. <el-table-column prop="createDate" header-align="center" align="center" label="创建时间"/>
  296. <el-table-column header-align="center" align="center" label="操作" width="160">
  297. <template slot-scope="{row,$index}">
  298. <el-button type="text" :disabled="row.isSystem === 'Y'" @click="openDictTypeDialog(1,row)" icon="el-icon-edit">修改</el-button>
  299. <el-button type="text" :disabled="row.isSystem === 'Y'" @click="delDictData(row)" icon="el-icon-delete">删除</el-button>
  300. </template>
  301. </el-table-column>
  302. </el-table>
  303. <el-pagination
  304. @size-change="dictTypeSizeChange"
  305. @current-change="dictTypeNoChange"
  306. :current-page="no"
  307. :page-sizes="[20, 50, 100, 200, 500]"
  308. :page-size="size"
  309. :total="total"
  310. layout="total,sizes, prev, pager, next, jumper">
  311. </el-pagination>
  312. <el-dialog :visible.sync="saveDataDialogFlag" @open="openSaveDataDialog" @close="closeSaveDataDialog" width="30%" :title="insertOrUpdate === 0?'新增-字典数据':'修改-字典数据'">
  313. <el-form ref="saveDataForm" label-position="top" :rules="dictDataRules" :model="saveData" label-width="80px">
  314. <el-form-item label="字典类型" prop="dictType">
  315. <el-input disabled v-model="saveData.dictType" clearable/>
  316. </el-form-item>
  317. <el-form-item label="字典标签" prop="dictLabel">
  318. <el-input v-model="saveData.dictLabel" clearable/>
  319. </el-form-item>
  320. <el-form-item label="数据键值" prop="dictValue">
  321. <el-input v-model="saveData.dictValue" clearable/>
  322. </el-form-item>
  323. <el-form-item label="数据排序" prop="dictSort">
  324. <el-input-number v-model="saveData.dictSort" :min="0" :controls="false"/>
  325. </el-form-item>
  326. <el-row :gutter="20">
  327. <el-col :span="8">
  328. <el-form-item label="状态" prop="status">
  329. <el-radio-group v-model="saveData.status">
  330. <el-radio :label="'Y'">启用</el-radio>
  331. <el-radio :label="'N'">停用</el-radio>
  332. </el-radio-group>
  333. </el-form-item>
  334. </el-col>
  335. <el-col :span="8">
  336. <el-form-item label=" " >
  337. <el-checkbox v-model="saveData.isDefault" :true-label="'Y'" :false-label="'N'">默认</el-checkbox>
  338. </el-form-item>
  339. </el-col>
  340. </el-row>
  341. <el-form-item label="备注" style="height: 90px">
  342. <el-input type="textarea" :autosize="{minRows: 3, maxRows: 3}" resize='none' v-model="saveData.remark"/>
  343. </el-form-item>
  344. </el-form>
  345. <span slot="footer" class="dialog-footer">
  346. <el-button @click="saveDataDialogFlag = false"> </el-button>
  347. <el-button type="primary" @click="saveOrUpdate"> </el-button>
  348. </span>
  349. </el-dialog>
  350. </div>
  351. </template>
  352. <style scoped>
  353. /deep/ .el-table .cell {
  354. line-height: 14px;
  355. font-size: 12px;
  356. height: auto;
  357. }
  358. /deep/ .el-textarea .el-textarea__inner {
  359. padding: 0px 5px;
  360. }
  361. </style>