Commit 3f0216b6c2343ed94f05741708c64871bf859a62

Authored by xp.Huang
2 parents b95d661a 869d1ea1

Merge branch 'local_dev_ft' into 'main'

feat:菜单管理新增权限标识

See merge request huang/yun-teng-iot-front!453
@@ -18,9 +18,7 @@ @@ -18,9 +18,7 @@
18 <!-- <Divider orientation="left">触发器</Divider> --> 18 <!-- <Divider orientation="left">触发器</Divider> -->
19 <Divider orientation="left"> 19 <Divider orientation="left">
20 <a-tooltip> 20 <a-tooltip>
21 - <template #title  
22 - >场景联动触发的首要条件,"触发器"之间的关系为或,“执行条件”与“触发器”之间的关系为且。</template  
23 - > 21 + <template #title>触发器不可为空,消息只要满足触发条件中任意一个即可触发。</template>
24 触发器 22 触发器
25 <QuestionCircleOutlined :style="{ fontSize: '14px', marginLeft: '5px' }" /> 23 <QuestionCircleOutlined :style="{ fontSize: '14px', marginLeft: '5px' }" />
26 </a-tooltip> 24 </a-tooltip>
@@ -39,7 +37,7 @@ @@ -39,7 +37,7 @@
39 <!-- 按钮 --> 37 <!-- 按钮 -->
40 <a-button type="primary" class="mt-4" @click="addTrigger" v-if="isView"> 38 <a-button type="primary" class="mt-4" @click="addTrigger" v-if="isView">
41 <PlusOutlined /> 39 <PlusOutlined />
42 - 新增触发器<span style="visibility: hidden">发</span> 40 + 触发器(OR)<span style="visibility: hidden">发</span>
43 </a-button> 41 </a-button>
44 <!-- 按钮 --> 42 <!-- 按钮 -->
45 </div> 43 </div>
@@ -48,10 +46,7 @@ @@ -48,10 +46,7 @@
48 <!-- 执行条件-begin --> 46 <!-- 执行条件-begin -->
49 <Divider orientation="left"> 47 <Divider orientation="left">
50 <a-tooltip> 48 <a-tooltip>
51 - <template #title  
52 - >场景联动触发的次要条件,"执行条件"之间的关系为或,  
53 - “执行条件”与“触发器”之间的关系为且。</template  
54 - > 49 + <template #title>执行条件可为空,消息需要满足所有执行条件才会被处理。</template>
55 执行条件 50 执行条件
56 <QuestionCircleOutlined :style="{ fontSize: '14px', marginLeft: '5px' }" /> 51 <QuestionCircleOutlined :style="{ fontSize: '14px', marginLeft: '5px' }" />
57 </a-tooltip> 52 </a-tooltip>
@@ -70,7 +65,7 @@ @@ -70,7 +65,7 @@
70 <!-- 按钮 --> 65 <!-- 按钮 -->
71 <a-button type="primary" class="mt-4" @click="addCondition" v-if="isView"> 66 <a-button type="primary" class="mt-4" @click="addCondition" v-if="isView">
72 <PlusOutlined /> 67 <PlusOutlined />
73 - 新增执行条件 68 + 执行条件(AND)
74 </a-button> 69 </a-button>
75 <!-- 按钮 --> 70 <!-- 按钮 -->
76 </div> 71 </div>
@@ -117,7 +117,7 @@ @@ -117,7 +117,7 @@
117 117
118 function handleItem(record: Recordable) { 118 function handleItem(record: Recordable) {
119 openItemDrawer(true, { 119 openItemDrawer(true, {
120 - id: record.id, 120 + data: record,
121 }); 121 });
122 } 122 }
123 123
@@ -31,6 +31,16 @@ @@ -31,6 +31,16 @@
31 ]" 31 ]"
32 /> 32 />
33 </template> 33 </template>
  34 + <template #status="{ record }">
  35 + <Switch
  36 + :disabled="disabled"
  37 + :checked="record.status === 1"
  38 + :loading="record.pendingStatus"
  39 + checkedChildren="启用"
  40 + unCheckedChildren="禁用"
  41 + @change="(checked:boolean)=>statusChange(checked,record)"
  42 + />
  43 + </template>
34 </BasicTable> 44 </BasicTable>
35 <ItemDrawer @register="registerDrawer" @success="handleSuccess" /> 45 <ItemDrawer @register="registerDrawer" @success="handleSuccess" />
36 </div> 46 </div>
@@ -38,30 +48,40 @@ @@ -38,30 +48,40 @@
38 </div> 48 </div>
39 </template> 49 </template>
40 <script lang="ts"> 50 <script lang="ts">
41 - import { defineComponent } from 'vue';  
42 - 51 + import { defineComponent, ref } from 'vue';
43 import { BasicTable, useTable, TableAction } from '/@/components/Table'; 52 import { BasicTable, useTable, TableAction } from '/@/components/Table';
44 import { sysDictItemPage, deleteDictItem } from '/@/api/system/dict'; 53 import { sysDictItemPage, deleteDictItem } from '/@/api/system/dict';
45 - 54 + import { Switch } from 'ant-design-vue';
46 import { BasicDrawer, useDrawer, useDrawerInner } from '/@/components/Drawer'; 55 import { BasicDrawer, useDrawer, useDrawerInner } from '/@/components/Drawer';
47 import ItemDrawer from '/@/views/system/dict/item/ItemDrawer.vue'; 56 import ItemDrawer from '/@/views/system/dict/item/ItemDrawer.vue';
48 -  
49 import { columns, searchFormSchema } from './dict.item.data'; 57 import { columns, searchFormSchema } from './dict.item.data';
50 import { useMessage } from '/@/hooks/web/useMessage'; 58 import { useMessage } from '/@/hooks/web/useMessage';
51 import Authority from '/@/components/Authority/src/Authority.vue'; 59 import Authority from '/@/components/Authority/src/Authority.vue';
  60 + import { setDictItemStatus } from '/@/api/system/dict';
52 61
53 export default defineComponent({ 62 export default defineComponent({
54 name: 'ItemIndex', 63 name: 'ItemIndex',
55 - components: { BasicDrawer, BasicTable, ItemDrawer, TableAction, Authority }, 64 + components: { BasicDrawer, BasicTable, ItemDrawer, TableAction, Authority, Switch },
56 setup() { 65 setup() {
57 let dictId; 66 let dictId;
  67 + const disabled = ref(false);
58 const { createMessage } = useMessage(); 68 const { createMessage } = useMessage();
59 const [registerDrawer, { openDrawer }] = useDrawer(); 69 const [registerDrawer, { openDrawer }] = useDrawer();
60 const [register] = useDrawerInner((data) => { 70 const [register] = useDrawerInner((data) => {
61 - dictId = data.id; 71 + dictId = data.data.id;
  72 + if (
  73 + data.data.dictCode === 'enabled_platform_admin_auth' ||
  74 + data.data.dictCode === 'disabled_tenant_auth' ||
  75 + data.data.dictCode === 'enabled_sysadmin_auth'
  76 + ) {
  77 + disabled.value = true;
  78 + } else {
  79 + disabled.value = false;
  80 + }
  81 +
62 reload(); 82 reload();
63 }); 83 });
64 - const [registerTable, { reload }] = useTable({ 84 + const [registerTable, { reload, setSelectedRowKeys, setProps }] = useTable({
65 title: '字典值列表', 85 title: '字典值列表',
66 api: sysDictItemPage, 86 api: sysDictItemPage,
67 columns, 87 columns,
@@ -117,7 +137,27 @@ @@ -117,7 +137,27 @@
117 function handleSuccess() { 137 function handleSuccess() {
118 reload(); 138 reload();
119 } 139 }
120 - 140 + const statusChange = async (checked, record) => {
  141 + setProps({
  142 + loading: true,
  143 + });
  144 + setSelectedRowKeys([]);
  145 + const newStatus = checked ? 1 : 0;
  146 + const { createMessage } = useMessage();
  147 + try {
  148 + await setDictItemStatus(record.id, newStatus);
  149 + if (newStatus) {
  150 + createMessage.success(`启用成功`);
  151 + } else {
  152 + createMessage.success('禁用成功');
  153 + }
  154 + } finally {
  155 + setProps({
  156 + loading: false,
  157 + });
  158 + reload();
  159 + }
  160 + };
121 return { 161 return {
122 register, 162 register,
123 registerTable, 163 registerTable,
@@ -126,6 +166,8 @@ @@ -126,6 +166,8 @@
126 handleEdit, 166 handleEdit,
127 handleDelete, 167 handleDelete,
128 handleSuccess, 168 handleSuccess,
  169 + statusChange,
  170 + disabled,
129 }; 171 };
130 }, 172 },
131 }); 173 });
1 import { BasicColumn } from '/@/components/Table'; 1 import { BasicColumn } from '/@/components/Table';
2 import { FormSchema } from '/@/components/Table'; 2 import { FormSchema } from '/@/components/Table';
3 -import { h } from 'vue';  
4 -import { Switch } from 'ant-design-vue';  
5 -import { setDictItemStatus } from '/@/api/system/dict';  
6 -import { useMessage } from '/@/hooks/web/useMessage'; 3 +
7 export const columns: BasicColumn[] = [ 4 export const columns: BasicColumn[] = [
8 { 5 {
9 title: '文本值', 6 title: '文本值',
@@ -24,30 +21,7 @@ export const columns: BasicColumn[] = [ @@ -24,30 +21,7 @@ export const columns: BasicColumn[] = [
24 title: '状态', 21 title: '状态',
25 dataIndex: 'status', 22 dataIndex: 'status',
26 width: 100, 23 width: 100,
27 - customRender: ({ record }) => {  
28 - if (!Reflect.has(record, 'pendingStatus')) {  
29 - record.pendingStatus = false;  
30 - }  
31 - return h(Switch, {  
32 - checked: record.status === 1,  
33 - checkedChildren: '已启用',  
34 - unCheckedChildren: '已禁用',  
35 - loading: record.pendingStatus,  
36 - onChange(checked: boolean) {  
37 - record.pendingStatus = true;  
38 - const newStatus = checked ? 1 : 0;  
39 - const { createMessage } = useMessage();  
40 - setDictItemStatus(record.id, newStatus)  
41 - .then(() => {  
42 - record.status = newStatus;  
43 - createMessage.success(`修改成功`);  
44 - })  
45 - .finally(() => {  
46 - record.pendingStatus = false;  
47 - });  
48 - },  
49 - });  
50 - }, 24 + slots: { customRender: 'status' },
51 }, 25 },
52 { 26 {
53 title: '排序', 27 title: '排序',
@@ -129,9 +129,6 @@ export const formSchema: FormSchema[] = [ @@ -129,9 +129,6 @@ export const formSchema: FormSchema[] = [
129 { label: t('routes.common.system.menuEditPagesMenu'), value: '1' }, //菜单 129 { label: t('routes.common.system.menuEditPagesMenu'), value: '1' }, //菜单
130 { label: t('routes.common.system.menuEditPagesButton'), value: '2' }, //按钮 130 { label: t('routes.common.system.menuEditPagesButton'), value: '2' }, //按钮
131 ], 131 ],
132 - onChange: (e) => {  
133 - console.log('--------11111---------------', e);  
134 - },  
135 }, 132 },
136 colProps: { lg: 24, md: 24 }, 133 colProps: { lg: 24, md: 24 },
137 }, 134 },
@@ -187,6 +184,15 @@ export const formSchema: FormSchema[] = [ @@ -187,6 +184,15 @@ export const formSchema: FormSchema[] = [
187 }, 184 },
188 }, 185 },
189 { 186 {
  187 + field: 'permission',
  188 + label: '权限标识', //路由地址
  189 + component: 'Input',
  190 + required: true,
  191 + componentProps: {
  192 + maxLength: 255,
  193 + },
  194 + },
  195 + {
190 field: 'component', 196 field: 'component',
191 label: t('routes.common.system.menuEditPagesComponentsPath'), //组件路径 197 label: t('routes.common.system.menuEditPagesComponentsPath'), //组件路径
192 component: 'Input', 198 component: 'Input',