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.

353 lines
12 KiB

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