Commit 15b854ff4cb32037be649698c3cadbea545dfb08

Authored by xp.Huang
2 parents 17ded7a7 15ab3523

Merge branch 'sqy_dev' into 'main'

'fix:角色菜单调整,fix:修复平台logo刷新后丢失,主页修改'

See merge request huang/yun-teng-iot-front!145
@@ -2,7 +2,7 @@ @@ -2,7 +2,7 @@
2 VITE_PORT = 8083 2 VITE_PORT = 8083
3 3
4 # spa-title 4 # spa-title
5 -VITE_GLOB_APP_TITLE = Yunteng IOT 5 +VITE_GLOB_APP_TITLE = Things Kit
6 6
7 # spa shortname 7 # spa shortname
8 # VITE_GLOB_APP_SHORT_NAME = Yunteng IOT 8 # VITE_GLOB_APP_SHORT_NAME = Yunteng IOT

186 KB | W: | H:

195 KB | W: | H:

  • 2-up
  • Swipe
  • Onion skin
@@ -44,7 +44,7 @@ export const useUserStore = defineStore({ @@ -44,7 +44,7 @@ export const useUserStore = defineStore({
44 id: 'app-user', 44 id: 'app-user',
45 state: (): UserState => ({ 45 state: (): UserState => ({
46 //平台信息 46 //平台信息
47 - platInfo: storage.get('platInfo') || null, 47 + platInfo: storage.get('platformInfo') || null,
48 enterPriseInfo: storage.get('enterPriseInfo') || null, 48 enterPriseInfo: storage.get('enterPriseInfo') || null,
49 // user info 49 // user info
50 userInfo: null, 50 userInfo: null,
@@ -3,7 +3,7 @@ @@ -3,7 +3,7 @@
3 <Card size="small" class="md:w-1/3 w-full !md:mt-0 !mt-4 !md:mr-4" style="color: #666"> 3 <Card size="small" class="md:w-1/3 w-full !md:mt-0 !mt-4 !md:mr-4" style="color: #666">
4 <div class="flex" style="height: 100px"> 4 <div class="flex" style="height: 100px">
5 <div class="mr-4" 5 <div class="mr-4"
6 - ><img src="/src/assets/svg/device-num.svg" style="width: 5.625rem; height: 5.625rem" 6 + ><img src="/src/assets/images/device-count.png" style="width: 5.625rem; height: 5.625rem"
7 /></div> 7 /></div>
8 <div class="flex-auto"> 8 <div class="flex-auto">
9 <div class="flex justify-between" style="align-items: center"> 9 <div class="flex justify-between" style="align-items: center">
@@ -17,31 +17,36 @@ @@ -17,31 +17,36 @@
17 <img src="/src/assets/images/tip.png" style="width: 1.125rem; height: 1.125rem" /> 17 <img src="/src/assets/images/tip.png" style="width: 1.125rem; height: 1.125rem" />
18 </div> 18 </div>
19 <div> 设备数(个) </div> 19 <div> 设备数(个) </div>
  20 + <div class="flex" style="align-items: center">
  21 + <div class="mr-2"
  22 + >在线
  23 + <span style="color: #41b883">{{ growCardList?.deviceInfo?.onLine ?? 0 }}</span></div
  24 + >
  25 + <div class="mr-2">
  26 + 离线
  27 + <span style="color: #f5222d">{{ growCardList?.deviceInfo?.offLine ?? 0 }} </span></div
  28 + >
  29 +
  30 + <div>
  31 + 未激活
  32 + <span style="color: #fa8c16">{{ growCardList?.deviceInfo?.inActive ?? 0 }}</span>
  33 + </div>
  34 + </div>
20 </div> 35 </div>
21 </div> 36 </div>
22 <div class="ml-2 pt-4" style="border-top: 2px solid #f0f2f5"> 37 <div class="ml-2 pt-4" style="border-top: 2px solid #f0f2f5">
23 - <div class="flex" style="align-items: center">  
24 - <span class="mr-2">在线{{ growCardList?.deviceInfo?.onLine }}</span>  
25 -  
26 - <span class="mr-2"> 离线{{ growCardList?.deviceInfo?.offLine }} </span>  
27 -  
28 - <span> 未激活{{ growCardList?.deviceInfo?.inActive }} </span>  
29 - </div></div  
30 - > 38 + 今日新增 {{ toThousands(growCardList?.deviceInfo?.todayAdd) }}
  39 + </div>
31 </Card> 40 </Card>
32 <Card size="small" class="md:w-1/3 w-full !md:mt-0 !mt-4 !md:mr-4" style="color: #666"> 41 <Card size="small" class="md:w-1/3 w-full !md:mt-0 !mt-4 !md:mr-4" style="color: #666">
33 <div class="flex" style="height: 100px"> 42 <div class="flex" style="height: 100px">
34 <div class="mr-4"> 43 <div class="mr-4">
35 <img 44 <img
36 v-if="!isAdmin(role)" 45 v-if="!isAdmin(role)"
37 - src="/src/assets/svg/alarm-num.svg"  
38 - style="width: 5.625rem; height: 5.625rem"  
39 - />  
40 - <img  
41 - v-else  
42 - src="/src/assets/svg/tenant-num.svg" 46 + src="/src/assets/images/alarm-count.png"
43 style="width: 5.625rem; height: 5.625rem" 47 style="width: 5.625rem; height: 5.625rem"
44 /> 48 />
  49 + <img v-else src="/src/assets/images/zh.png" style="width: 5.625rem; height: 5.625rem" />
45 </div> 50 </div>
46 <div class="flex-auto"> 51 <div class="flex-auto">
47 <div class="flex justify-between" style="align-items: center"> 52 <div class="flex justify-between" style="align-items: center">
@@ -61,7 +66,7 @@ @@ -61,7 +66,7 @@
61 </div> 66 </div>
62 <img src="/src/assets/images/tip.png" style="width: 1.125rem; height: 1.125rem" /> 67 <img src="/src/assets/images/tip.png" style="width: 1.125rem; height: 1.125rem" />
63 </div> 68 </div>
64 - <div> {{ !isAdmin(role) ? `告警数(条)` : '租户总量(个)' }}</div> 69 + <div> {{ !isAdmin(role) ? `告警数(条)` : '租户总量(个)' }}</div>
65 </div> 70 </div>
66 </div> 71 </div>
67 <div v-if="!isAdmin(role)" class="ml-2 pt-4" style="border-top: 2px solid #f0f2f5"> 72 <div v-if="!isAdmin(role)" class="ml-2 pt-4" style="border-top: 2px solid #f0f2f5">
@@ -76,13 +81,9 @@ @@ -76,13 +81,9 @@
76 <div class="mr-4" 81 <div class="mr-4"
77 ><img 82 ><img
78 v-if="!isAdmin(role)" 83 v-if="!isAdmin(role)"
79 - src="/src/assets/svg/msg-num.svg"  
80 - style="width: 5.625rem; height: 5.625rem"  
81 - /><img  
82 - v-else  
83 - src="/src/assets/svg/custom-num.svg" 84 + src="/src/assets/images/msg-count.png"
84 style="width: 5.625rem; height: 5.625rem" 85 style="width: 5.625rem; height: 5.625rem"
85 - /> 86 + /><img v-else src="/src/assets/images/kf.png" style="width: 5.625rem; height: 5.625rem" />
86 </div> 87 </div>
87 <div v-if="!isAdmin(role)" style="display: flex; align-items: center"> 88 <div v-if="!isAdmin(role)" style="display: flex; align-items: center">
88 <div> 89 <div>
@@ -94,7 +95,7 @@ @@ -94,7 +95,7 @@
94 /> 95 />
95 <CountTo v-else :end-val="0" /> 96 <CountTo v-else :end-val="0" />
96 </div> 97 </div>
97 - 消息量(条) 98 + 消息量(条)
98 </div> 99 </div>
99 <div> 100 <div>
100 <span class="mr-2">数据点</span> 101 <span class="mr-2">数据点</span>
@@ -48,9 +48,9 @@ @@ -48,9 +48,9 @@
48 </template> 48 </template>
49 <CardMeta> 49 <CardMeta>
50 <template #description> 50 <template #description>
51 - <p>联系人: {{ getContacts }}</p>  
52 - <p>联系电话: {{ getTel }}</p>  
53 - <p>联系地址: {{ getAddress }} </p> 51 + <p v-if="getContacts">联系人: {{ getContacts }}</p>
  52 + <p v-if="getTel">联系电话: {{ getTel }}</p>
  53 + <p v-if="getAddress">联系地址: {{ getAddress }} </p>
54 </template> 54 </template>
55 </CardMeta> 55 </CardMeta>
56 </Card> 56 </Card>
@@ -86,11 +86,12 @@ @@ -86,11 +86,12 @@
86 86
87 const { setLoginState, getLoginState } = useLoginState(); 87 const { setLoginState, getLoginState } = useLoginState();
88 const { getFormRules } = useFormRules(); 88 const { getFormRules } = useFormRules();
  89 + const storage = createLocalStorage();
89 90
90 const formRef = ref(); 91 const formRef = ref();
91 const loading = ref(false); 92 const loading = ref(false);
92 const rememberMe = ref(false); 93 const rememberMe = ref(false);
93 - const userInfo = JSON.parse(localStorage.getItem('userInfo')); 94 + const userInfo = storage.get('userInfo');
94 const formData = reactive({ 95 const formData = reactive({
95 account: userInfo?.account ?? '', 96 account: userInfo?.account ?? '',
96 password: userInfo?.password ?? '', 97 password: userInfo?.password ?? '',
@@ -99,14 +100,13 @@ @@ -99,14 +100,13 @@
99 const { validForm } = useFormValid(formRef); 100 const { validForm } = useFormValid(formRef);
100 101
101 const getShow = computed(() => unref(getLoginState) === LoginStateEnum.LOGIN); 102 const getShow = computed(() => unref(getLoginState) === LoginStateEnum.LOGIN);
102 - const storage = createLocalStorage();  
103 async function handleLogin() { 103 async function handleLogin() {
104 const data = await validForm(); 104 const data = await validForm();
105 if (!data) return; 105 if (!data) return;
106 if (unref(rememberMe)) { 106 if (unref(rememberMe)) {
107 - localStorage.setItem('userInfo', JSON.stringify(formData)); 107 + storage.set('userInfo', formData);
108 } else { 108 } else {
109 - localStorage.setItem('userInfo', null); 109 + storage.set('userInfo', null);
110 } 110 }
111 try { 111 try {
112 loading.value = true; 112 loading.value = true;
@@ -4,6 +4,7 @@ @@ -4,6 +4,7 @@
4 title="第一次使用请修改当前用户密码,待修改完成后退出登录,才能使用本系统!" 4 title="第一次使用请修改当前用户密码,待修改完成后退出登录,才能使用本系统!"
5 content="修改成功后会自动退出当前登录!" 5 content="修改成功后会自动退出当前登录!"
6 class="p-4" 6 class="p-4"
  7 + :contentStyle="{ margin: '16px 0 ' }"
7 > 8 >
8 <div class="py-8 bg-white flex flex-col justify-center items-center"> 9 <div class="py-8 bg-white flex flex-col justify-center items-center">
9 <BasicForm @register="register" /> 10 <BasicForm @register="register" />
@@ -224,7 +224,7 @@ @@ -224,7 +224,7 @@
224 // 保存store 224 // 保存store
225 userStore.setPlatInfo(newFieldValue); 225 userStore.setPlatInfo(newFieldValue);
226 // 保存本地缓存 226 // 保存本地缓存
227 - storage.set('platInfo', newFieldValue); 227 + storage.set('platformInfo', newFieldValue);
228 } 228 }
229 229
230 onMounted(async () => { 230 onMounted(async () => {
@@ -301,7 +301,6 @@ @@ -301,7 +301,6 @@
301 setFieldsValue({ nameCountry: codeCountry }); 301 setFieldsValue({ nameCountry: codeCountry });
302 } 302 }
303 setFieldsValue(res); 303 setFieldsValue(res);
304 - console.log(res);  
305 qrcodePic.value = res.qrCode; 304 qrcodePic.value = res.qrCode;
306 }); 305 });
307 306
@@ -26,7 +26,7 @@ @@ -26,7 +26,7 @@
26 </BasicDrawer> 26 </BasicDrawer>
27 </template> 27 </template>
28 <script lang="ts"> 28 <script lang="ts">
29 - import { defineComponent, ref, computed, unref, watch } from 'vue'; 29 + import { defineComponent, ref, computed, unref } from 'vue';
30 import { BasicForm, useForm } from '/@/components/Form/index'; 30 import { BasicForm, useForm } from '/@/components/Form/index';
31 import { formSchema } from './role.data'; 31 import { formSchema } from './role.data';
32 import { BasicDrawer, useDrawerInner } from '/@/components/Drawer'; 32 import { BasicDrawer, useDrawerInner } from '/@/components/Drawer';
@@ -54,9 +54,6 @@ @@ -54,9 +54,6 @@
54 schemas: formSchema, 54 schemas: formSchema,
55 showActionButtonGroup: false, 55 showActionButtonGroup: false,
56 }); 56 });
57 - watch(roleMenus, (newValue) => {  
58 - console.log(newValue);  
59 - });  
60 57
61 // 递归函数,将RouteItem里面的字段换名称 58 // 递归函数,将RouteItem里面的字段换名称
62 function processChildren(items: RouteItem[]) { 59 function processChildren(items: RouteItem[]) {
@@ -79,7 +76,7 @@ @@ -79,7 +76,7 @@
79 arr.splice(index, 1); 76 arr.splice(index, 1);
80 return arr; 77 return arr;
81 } 78 }
82 - 79 + const originMenus = ref();
83 const [registerDrawer, { setDrawerProps, closeDrawer }] = useDrawerInner(async (data) => { 80 const [registerDrawer, { setDrawerProps, closeDrawer }] = useDrawerInner(async (data) => {
84 resetFields(); 81 resetFields();
85 roleId.value = ''; 82 roleId.value = '';
@@ -95,6 +92,7 @@ @@ -95,6 +92,7 @@
95 if (unref(isUpdate)) { 92 if (unref(isUpdate)) {
96 //通过角色id去获取角色对应的菜单的ids 93 //通过角色id去获取角色对应的菜单的ids
97 roleMenus.value = await getMenusIdsByRoleId(data.record.id); 94 roleMenus.value = await getMenusIdsByRoleId(data.record.id);
  95 + originMenus.value = [...roleMenus.value];
98 for (let m of treeData.value) { 96 for (let m of treeData.value) {
99 for (let m1 of roleMenus.value) { 97 for (let m1 of roleMenus.value) {
100 // 利用continue特性优化一下性能 98 // 利用continue特性优化一下性能
@@ -103,6 +101,7 @@ @@ -103,6 +101,7 @@
103 } 101 }
104 } 102 }
105 treeRef.value.setCheckedKeys(roleMenus.value); 103 treeRef.value.setCheckedKeys(roleMenus.value);
  104 + console.log(originMenus.value);
106 roleId.value = data.record.id; 105 roleId.value = data.record.id;
107 setFieldsValue(data.record); 106 setFieldsValue(data.record);
108 } 107 }
@@ -119,7 +118,7 @@ @@ -119,7 +118,7 @@
119 name: values.name, 118 name: values.name,
120 remark: values.remark, 119 remark: values.remark,
121 status: values.status, 120 status: values.status,
122 - menu: allCheckedKeys.value.length ? allCheckedKeys.value : roleMenus.value, 121 + menu: allCheckedKeys.value.length ? allCheckedKeys.value : originMenus.value,
123 }; 122 };
124 saveOrUpdateRoleInfoWithMenu(req).then(() => { 123 saveOrUpdateRoleInfoWithMenu(req).then(() => {
125 closeDrawer(); 124 closeDrawer();
@@ -78,7 +78,7 @@ @@ -78,7 +78,7 @@
78 arr.splice(index, 1); 78 arr.splice(index, 1);
79 return arr; 79 return arr;
80 } 80 }
81 - 81 + const originMenus = ref();
82 const [registerDrawer, { setDrawerProps, closeDrawer }] = useDrawerInner(async (data) => { 82 const [registerDrawer, { setDrawerProps, closeDrawer }] = useDrawerInner(async (data) => {
83 resetFields(); 83 resetFields();
84 roleId.value = ''; 84 roleId.value = '';
@@ -94,6 +94,7 @@ @@ -94,6 +94,7 @@
94 if (unref(isUpdate)) { 94 if (unref(isUpdate)) {
95 //通过角色id去获取角色对应的菜单的ids 95 //通过角色id去获取角色对应的菜单的ids
96 roleMenus.value = await getMenusIdsByRoleId(data.record.id); 96 roleMenus.value = await getMenusIdsByRoleId(data.record.id);
  97 + originMenus.value = [...roleMenus.value];
97 for (let m of treeData.value) { 98 for (let m of treeData.value) {
98 for (let m1 of roleMenus.value) { 99 for (let m1 of roleMenus.value) {
99 // 利用continue特性优化一下性能 100 // 利用continue特性优化一下性能
@@ -118,7 +119,7 @@ @@ -118,7 +119,7 @@
118 remark: values.remark, 119 remark: values.remark,
119 status: values.status, 120 status: values.status,
120 roleType: RoleEnum.TENANT_ADMIN, 121 roleType: RoleEnum.TENANT_ADMIN,
121 - menu: allCheckedKeys.value.length ? allCheckedKeys.value : roleMenus.value, 122 + menu: allCheckedKeys.value.length ? allCheckedKeys.value : originMenus.value,
122 }; 123 };
123 await saveOrUpdateRoleInfoWithMenu(req); 124 await saveOrUpdateRoleInfoWithMenu(req);
124 closeDrawer(); 125 closeDrawer();