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.

1 line
8.2 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

import{I as e,N as t,V as n,Y as r,_ as i,d as a,i as o,it as s,kt as c,nt as l,p as u,u as d,v as f,y as p,z as m}from"./runtime-core.esm-bundler-CnFWH3R5.js";import{t as h}from"./message-Dh9377vh.js";import{n as g}from"./http-BWP--XXK.js";var _={style:{display:`flex`,"justify-content":`flex-end`}},v=1060,y=p({__name:`Dictionaries`,setup(p){let y=s([]),b=s([]),x=s([]),S=s(!1),C=s(!1),w=s(!1),T=s(!0),E=s([]),D=l({dict_type:``}),O=l({dict_type:``,dict_name:``,remark:``,dict_sort:0}),k={maxHeight:`70vh`,overflow:`auto`},A=s([]);function j(e){let t=new Map;for(let n of e){t.has(n.dict_type)||t.set(n.dict_type,{dict_type:n.dict_type,dict_name:n.dict_name||``,remark:n.remark||``,dict_sort:n.dict_sort??0,item_count:0});let e=t.get(n.dict_type);e.item_count+=1,!e.dict_name&&n.dict_name&&(e.dict_name=n.dict_name),!e.remark&&n.remark&&(e.remark=n.remark),(n.dict_sort??0)<e.dict_sort&&(e.dict_sort=n.dict_sort??0)}b.value=Array.from(t.values()).sort((e,t)=>e.dict_sort-t.dict_sort||e.dict_type.localeCompare(t.dict_type)),x.value=b.value.map(e=>({value:e.dict_type,label:e.dict_name?`${e.dict_name}${e.dict_type}`:e.dict_type}))}async function M(){S.value=!0;try{let{data:e}=await g.get(`/dict-items`);y.value=e,j(D.dict_type?y.value.filter(e=>e.dict_type===D.dict_type):y.value)}catch(e){h.error(e?.response?.data?.message??`加载数据字典失败`)}finally{S.value=!1}}function N(){T.value=!0,E.value=[],O.dict_type=``,O.dict_name=``,O.remark=``,O.dict_sort=0,A.value=[{item_label:``,item_value:``,item_remark:``,sort:0,is_active:!0}],w.value=!0}async function P(e){T.value=!1,O.dict_type=e.dict_type,O.dict_name=e.dict_name,O.remark=e.remark,O.dict_sort=e.dict_sort,S.value=!0;try{A.value=y.value.filter(t=>t.dict_type===e.dict_type).sort((e,t)=>(e.sort??0)-(t.sort??0)||e.id-t.id).map(e=>({id:e.id,item_label:e.item_label,item_value:e.item_value,item_remark:e.item_remark||``,sort:e.sort??0,is_active:e.is_active})),E.value=A.value.map(e=>e.id).filter(Boolean)}finally{S.value=!1}w.value=!0}async function F(){C.value=!0;try{let e=O.dict_type.trim(),t=O.dict_name.trim(),n=O.remark.trim();if(!e)return h.warning(`请先填写字典编码`),!1;if(!t)return h.warning(`请先填写字典名称`),!1;let r=A.value.map(e=>({...e,item_label:e.item_label.trim(),item_value:e.item_value.trim(),item_remark:e.item_remark.trim()})).filter(e=>e.item_label&&e.item_value);if(!r.length)return h.warning(`请至少保留一条完整的字典值(显示名+值)`),!1;if(T.value){for(let i of r)await g.post(`/dict-items`,{dict_type:e,dict_name:t,remark:n,dict_sort:O.dict_sort??0,item_label:i.item_label,item_value:i.item_value,item_remark:i.item_remark,sort:i.sort??0,is_active:i.is_active});h.success(`新增字典成功,共保存 ${r.length} 条字典值`)}else{let i=new Set;for(let a of r){let r={dict_type:e,dict_name:t,remark:n,dict_sort:O.dict_sort??0,item_label:a.item_label,item_value:a.item_value,item_remark:a.item_remark,sort:a.sort??0,is_active:a.is_active};a.id?(i.add(a.id),await g.put(`/dict-items/${a.id}`,r)):await g.post(`/dict-items`,r)}let a=E.value.filter(e=>!i.has(e));for(let e of a)await g.delete(`/dict-items/${e}`);h.success(`更新字典成功`)}return w.value=!1,await M(),!0}catch(e){return h.error(e?.response?.data?.message??`保存失败`),!1}finally{C.value=!1}}function I(){A.value.push({item_label:``,item_value:``,item_remark:``,sort:A.value.length,is_active:!0})}function L(e){if(A.value.length<=1){h.warning(`至少保留一条字典值`);return}A.value.splice(e,1)}async function R(e){try{let t=y.value.filter(t=>t.dict_type===e.dict_type);for(let e of t)await g.delete(`/dict-items/${e.id}`);h.success(`删除字典成功`),await M()}catch(e){h.error(e?.response?.data?.message??`删除失败`)}}return t(M),(t,s)=>{let l=n(`a-option`),p=n(`a-select`),h=n(`a-button`),g=n(`a-space`),y=n(`a-table-column`),E=n(`a-popconfirm`),j=n(`a-table`),z=n(`a-card`),B=n(`a-input`),V=n(`a-form-item`),H=n(`a-textarea`),U=n(`a-input-number`),W=n(`a-switch`),G=n(`a-form`),K=n(`a-modal`);return e(),u(o,null,[f(z,{title:`系统设置 / 数据字典`},{extra:r(()=>[f(g,null,{default:r(()=>[f(p,{modelValue:D.dict_type,"onUpdate:modelValue":s[0]||=e=>D.dict_type=e,"allow-search":``,"allow-clear":``,style:{width:`320px`},placeholder:`搜索字典名称(留空查看全部)`,onChange:M},{default:r(()=>[(e(!0),u(o,null,m(x.value,t=>(e(),a(l,{key:t.value,value:t.value},{default:r(()=>[i(c(t.label),1)]),_:2},1032,[`value`]))),128))]),_:1},8,[`modelValue`]),f(h,{onClick:M},{default:r(()=>[...s[6]||=[i(`刷新`,-1)]]),_:1}),f(h,{type:`primary`,onClick:N},{default:r(()=>[...s[7]||=[i(`新增字典`,-1)]]),_:1})]),_:1})]),default:r(()=>[f(j,{class:`list-data-table`,scroll:{x:v},data:b.value,loading:S.value,"row-key":`dict_type`,pagination:{pageSize:10}},{columns:r(()=>[f(y,{title:`字典编码`,"data-index":`dict_type`,width:220,ellipsis:!0,tooltip:!0}),f(y,{title:`字典名称`,"data-index":`dict_name`,width:220,ellipsis:!0,tooltip:!0}),f(y,{title:`备注`,"data-index":`remark`,width:240,"min-width":160,ellipsis:!0,tooltip:!0}),f(y,{title:`排序`,"data-index":`dict_sort`,width:100,ellipsis:!0,tooltip:!0}),f(y,{title:`值数量`,"data-index":`item_count`,width:100,ellipsis:!0,tooltip:!0}),f(y,{title:`操作`,width:150,fixed:`right`,align:`center`},{cell:r(({record:e})=>[f(g,null,{default:r(()=>[f(h,{type:`text`,onClick:t=>P(e)},{default:r(()=>[...s[8]||=[i(`编辑`,-1)]]),_:1},8,[`onClick`]),f(E,{content:`确定删除该字典及其全部字典值?`,onOk:t=>R(e)},{default:r(()=>[f(h,{type:`text`,status:`danger`},{default:r(()=>[...s[9]||=[i(`删除`,-1)]]),_:1})]),_:1},8,[`onOk`])]),_:2},1024)]),_:1})]),_:1},8,[`scroll`,`data`,`loading`])]),_:1}),f(K,{visible:w.value,"onUpdate:visible":s[5]||=e=>w.value=e,title:T.value?`新增字典`:`编辑字典`,width:`70%`,"body-style":k,"confirm-loading":C.value,"on-before-ok":F},{default:r(()=>[f(G,{model:O,layout:`vertical`,class:`admin-modal-form`},{default:r(()=>[f(V,{label:`字典编码`,required:``},{default:r(()=>[f(B,{modelValue:O.dict_type,"onUpdate:modelValue":s[1]||=e=>O.dict_type=e,placeholder:`start_year`},null,8,[`modelValue`])]),_:1}),f(V,{label:`字典名称`,required:``},{default:r(()=>[f(B,{modelValue:O.dict_name,"onUpdate:modelValue":s[2]||=e=>O.dict_name=e,placeholder:`如:清单填报起始年份`},null,8,[`modelValue`])]),_:1}),f(V,{label:`备注`,class:`admin-modal-form__full`},{default:r(()=>[f(H,{modelValue:O.remark,"onUpdate:modelValue":s[3]||=e=>O.remark=e,"auto-size":{minRows:2,maxRows:4}},null,8,[`modelValue`])]),_:1}),f(V,{label:`排序`},{default:r(()=>[f(U,{modelValue:O.dict_sort,"onUpdate:modelValue":s[4]||=e=>O.dict_sort=e,min:0},null,8,[`modelValue`])]),_:1}),f(V,{label:`字典值列表`,class:`admin-modal-form__full`},{default:r(()=>[f(g,{direction:`vertical`,fill:``},{default:r(()=>[d(`div`,_,[f(h,{type:`primary`,size:`small`,onClick:I},{default:r(()=>[...s[10]||=[i(`新增参数`,-1)]]),_:1})]),f(j,{data:A.value,pagination:!1,"row-key":`id`},{columns:r(()=>[f(y,{title:``,width:50},{cell:r(({rowIndex:e})=>[i(c(e+1),1)]),_:1}),f(y,{title:`热键值Text`},{cell:r(({record:e})=>[f(B,{modelValue:e.item_value,"onUpdate:modelValue":t=>e.item_value=t,placeholder:`请输入值`},null,8,[`modelValue`,`onUpdate:modelValue`])]),_:1}),f(y,{title:`字典显示名`},{cell:r(({record:e})=>[f(B,{modelValue:e.item_label,"onUpdate:modelValue":t=>e.item_label=t,placeholder:`请输入显示名`},null,8,[`modelValue`,`onUpdate:modelValue`])]),_:1}),f(y,{title:`排序`,width:120},{cell:r(({record:e})=>[f(U,{modelValue:e.sort,"onUpdate:modelValue":t=>e.sort=t,min:0},null,8,[`modelValue`,`onUpdate:modelValue`])]),_:1}),f(y,{title:`备注`},{cell:r(({record:e})=>[f(B,{modelValue:e.item_remark,"onUpdate:modelValue":t=>e.item_remark=t,placeholder:`备注`},null,8,[`modelValue`,`onUpdate:modelValue`])]),_:1}),f(y,{title:`状态`,width:120},{cell:r(({record:e})=>[f(W,{modelValue:e.is_active,"onUpdate:modelValue":t=>e.is_active=t},null,8,[`modelValue`,`onUpdate:modelValue`])]),_:1}),f(y,{title:`操作`,width:100},{cell:r(({rowIndex:e})=>[f(h,{type:`text`,status:`danger`,onClick:t=>L(e)},{default:r(()=>[...s[11]||=[i(`删除`,-1)]]),_:1},8,[`onClick`])]),_:1})]),_:1},8,[`data`])]),_:1})]),_:1})]),_:1},8,[`model`])]),_:1},8,[`visible`,`title`,`confirm-loading`])],64)}}});export{y as default};