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.

364 lines
12 KiB

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