Commit 3f0216b6c2343ed94f05741708c64871bf859a62
Merge branch 'local_dev_ft' into 'main'
feat:菜单管理新增权限标识 See merge request huang/yun-teng-iot-front!453
Showing
5 changed files
with
66 additions
and
49 deletions
@@ -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> |
@@ -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', |