Переглянути джерело

feat(权限):产品属性、产品种类、sku发布、产品种类发布、评论详情增删改按钮添加权限;
用户管理-店铺授权添加权限;
角色管理-权限配置-保存按钮添加loading效果;

xinyan 6 місяців тому
батько
коміт
0cc43992ca

+ 2 - 1
src/views/product-manage/comment-detail/component/DataTable.vue

@@ -18,6 +18,7 @@ import CreateDialog from '/@/views/product-manage/comment-detail/component/Creat
 import { DictionaryStore } from '/@/stores/dictionary';
 import { useScoreEnum, useTivEnum } from '/@/views/product-manage/comment-detail/enum';
 import NegativeLabel from '/@/views/product-manage/comment-detail/component/NegativeLabel.vue';
+import { hasPermission } from '/@/utils/hasPermission';
 
 const { data: staticData } = DictionaryStore();
 
@@ -208,7 +209,7 @@ defineExpose({ fetchList });
 	<vxe-grid ref="gridRef" class="z-0" v-bind="gridOptions">
 		<template #toolbar_buttons>
 			<div class="flex gap-2">
-				<PermissionButton :icon="Plus" plain round type="primary" @click="handleCreate"> 新 增 </PermissionButton>
+				<PermissionButton v-if="hasPermission('ReviewCreate')" :icon="Plus" plain round type="primary" @click="handleCreate"> 新 增 </PermissionButton>
 				<VerticalDivider class="px-1" style="margin-left: 7px" />
 			</div>
 		</template>

+ 4 - 3
src/views/product-manage/comment-detail/component/NegativeLabel.vue

@@ -16,6 +16,7 @@ import { useResponse } from '/@/utils/useResponse';
 import { ElMessage } from 'element-plus';
 import { handleCopy } from '/@/utils/useCopyText';
 import 'echarts-wordcloud';
+import { hasPermission } from '/@/utils/hasPermission';
 
 
 const isShowLabel = defineModel({ default: false });
@@ -147,12 +148,12 @@ onMounted(() => {
           <vxe-grid ref="gridRef" :cell-style="cellStyle" v-bind="gridOptions">
             <template #toolbar_buttons>
               <div class="flex gap-2">
-                <PermissionButton :icon="Plus" plain round type="primary" @click="handleCreate"> 新 增</PermissionButton>
+                <PermissionButton v-if="hasPermission('ReviewLabelCreate')" :icon="Plus" plain round type="primary" @click="handleCreate"> 新 增</PermissionButton>
               </div>
             </template>
             <template #operate="{ row }">
               <div class="flex justify-center ">
-								<PermissionButton circle plain type="warning" size="small" @click="handleEdit(row)">
+								<PermissionButton v-if="hasPermission('ReviewLabelUpdate')" circle plain type="warning" size="small" @click="handleEdit(row)">
 									<el-icon>
 										<Operation />
 									</el-icon>
@@ -165,7 +166,7 @@ onMounted(() => {
                     @confirm="singleDelete(row)"
                 >
                   <template #reference>
-                    <PermissionButton circle plain size="small" type="danger">
+                    <PermissionButton circle plain size="small" type="danger" v-if="hasPermission('ReviewLabelDelete')">
                       <el-icon>
                         <Delete />
                       </el-icon>

+ 3 - 3
src/views/sku-manage/Columns.ts

@@ -64,7 +64,7 @@ export const ProductCategoryColumns = [
 
 export const CompanySkuColumns = [
   { type: 'checkbox', width: 50, align: 'center', fixed: 'left' },
-  { field: 'sku', title: 'SKU', width: 'auto', align: 'center', fixed: 'left',
+  { field: 'sku', title: 'SKU',  align: 'center', fixed: 'left',
     slots: { default: 'sku' }
   },
   {
@@ -72,11 +72,11 @@ export const CompanySkuColumns = [
     slots: { default: 'brand' }
   },
   {
-    field: 'kind', title: '种 类', align: 'center', width: 'auto',
+    field: 'kind', title: '种 类', align: 'center',
     slots: { default: 'kind' }
   },
   {
-    field: 'version_feature', title: '版本特性', align: 'center', minWidth: 'auto',
+    field: 'version_feature', title: '版本特性', align: 'center',
     slots: { default: 'version_feature' }
   },
   {

+ 1 - 1
src/views/sku-manage/company-sku/component/DataTable.vue

@@ -221,7 +221,7 @@ defineExpose({ fetchList });
         <div>
           <PermissionButton :icon="Plus" v-if="hasPermission('SkuCreate')" plain round type="primary" @click="handleCreate">新 增</PermissionButton>
         </div>
-        <div>
+        <div v-if="hasPermission('SkuBulkPublish')">
           <el-popconfirm :icon="InfoFilled" icon-color="#626AEF" title="此操作将会把所有选中的SKU全部发布, 是否继续?"
                          width="360" @confirm="batchRelease">
             <template #reference>

+ 1 - 1
src/views/sku-manage/company-sku/component/DataTableSlot.vue

@@ -64,7 +64,7 @@ function showDetail() {
             </template>
           </el-popconfirm>
         </div>
-				<div>
+				<div v-if="hasPermission('SkuPublish')">
 					<el-popconfirm :icon="InfoFilled" icon-color="#626AEF" title="发布后此sku将无法更改, 是否继续?" width="220"
 												 @confirm="release">
 						<template #reference>

+ 8 - 3
src/views/sku-manage/product-attribute/component/manage-enum/index.vue

@@ -15,6 +15,7 @@ import CreateDialog from '/@/views/sku-manage/product-attribute/component/manage
 import EditDrawer from '/@/views/sku-manage/product-attribute/component/manage-enum/component/EditDrawer.vue';
 import EditLabelDialog from '/@/views/product-manage/comment-detail/component/EditLabelDialog.vue';
 import ShowEnumDrawer from '/@/views/sku-manage/product-attribute/component/manage-enum/component/ShowEnumDrawer.vue';
+import { hasPermission } from '/@/utils/hasPermission';
 
 const manageOpen = defineModel({ default: false });
 
@@ -159,7 +160,7 @@ onMounted(() => {
 					<vxe-grid ref="gridRef" :cell-style="cellStyle" v-bind="gridOptions">
 						<template #toolbar_buttons>
 							<div class="flex gap-2">
-								<PermissionButton :icon="Plus" plain round type="primary" @click="handleCreate"> 新 增</PermissionButton>
+								<PermissionButton :icon="Plus" v-if="hasPermission('AttrCreate')" plain round type="primary" @click="handleCreate"> 新 增</PermissionButton>
 							</div>
 						</template>
 						<template #status="{ row }">
@@ -168,12 +169,15 @@ onMounted(() => {
 						</template>
 						<template #operate="{ row }">
 							<div class="flex justify-center gap-2">
-								<el-button size="small" circle plain type="success" :icon="View" @click="handleView(row)"></el-button>
-								<PermissionButton circle plain type="warning" size="small" @click="handleEdit(row)">
+								<div>
+									<el-button size="small" circle plain type="success" :icon="View" @click="handleView(row)"></el-button>
+								</div>
+								<PermissionButton v-if="hasPermission('AttrUpdate')" circle plain type="warning" size="small" @click="handleEdit(row)">
 									<el-icon>
 										<Operation />
 									</el-icon>
 								</PermissionButton>
+								<div v-if="hasPermission('AttrDelete')">
 								<el-popconfirm
 									:icon="InfoFilled"
 									icon-color="#626AEF"
@@ -199,6 +203,7 @@ onMounted(() => {
 										</el-button>
 									</template>
 								</el-popconfirm>
+								</div>
 							</div>
 						</template>
 						<template #pager>

+ 5 - 4
src/views/sku-manage/product-category/component/AttributeManage.vue

@@ -16,6 +16,7 @@ import AttributeManageEdit from '/@/views/sku-manage/product-category/component/
 import { useResponse } from '/@/utils/useResponse';
 import { ElMessage } from 'element-plus';
 import AttributeManageCreate from '/@/views/sku-manage/product-category/component/AttributeManageCreate.vue';
+import { hasPermission } from '/@/utils/hasPermission';
 
 
 const visible = defineModel({ default: false });
@@ -195,11 +196,11 @@ const gridEvents = {
           <template #toolbar_buttons>
             <div class="flex gap-2">
               <div>
-                <PermissionButton :icon="Plus" plain round type="primary" @click="handleCreate">
+                <PermissionButton :icon="Plus" v-if="hasPermission('SkuKindAttrCreate')" plain round type="primary" @click="handleCreate">
                   新 增
                 </PermissionButton>
               </div>
-              <div>
+              <div v-if="hasPermission('SkuKindPublish')">
                 <el-popconfirm :icon="InfoFilled" icon-color="#626AEF" title="发布后将无法更改, 是否继续?"
                                width="230" @confirm="handleRelease">
                   <template #reference>
@@ -255,14 +256,14 @@ const gridEvents = {
           </template>
           <template #operate="{ row }">
             <div class="flex justify-center gap-2">
-              <div>
+              <div v-if="hasPermission('SkuKindAttrUpdate')">
                 <PermissionButton :disabled="row.is_competitors" circle plain type="warning" @click="handleEdit(row)">
                   <el-icon>
                     <Operation />
                   </el-icon>
                 </PermissionButton>
               </div>
-              <div>
+              <div v-if="hasPermission('SkuKindAttrDelete')">
                 <el-popconfirm
                     :icon="InfoFilled"
                     icon-color="#626AEF"

+ 12 - 7
src/views/system/role/components/PermissionComNew/index.vue

@@ -10,7 +10,7 @@
         </el-col>
         <el-col :span="6">
           <div>
-            <el-button size="small" type="primary" class="pc-save-btn" @click="handleSavePermission">保存菜单授权
+            <el-button :loading="loading" size="small" type="primary" class="pc-save-btn" @click="handleSavePermission">保存菜单授权
             </el-button>
           </div>
         </el-col>
@@ -102,6 +102,8 @@ import {
 import { MenuDataType, MenusType, DataPermissionRangeType, CustomDataPermissionDeptType } from './types';
 import { ElMessage } from 'element-plus'
 
+const loading = ref(false)
+
 const props = defineProps({
   roleId: {
     type: Number,
@@ -234,12 +236,15 @@ const handleDialogClose = () => {
 
 //保存权限
 const handleSavePermission = () => {
-  setRolePremission(props.roleId, menuData.value).then((res: any) => {
-    ElMessage({
-      message: res.msg,
-      type: 'success',
-    })
-  })
+	loading.value = true;
+	setRolePremission(props.roleId, menuData.value).then((res: any) => {
+		ElMessage({
+			message: res.msg,
+			type: 'success',
+		});
+	}).finally(() => {
+		loading.value = false;
+	});
 }
 
 const column = reactive({

+ 1 - 1
src/views/system/user/ShopAuthorize.vue

@@ -63,7 +63,7 @@ async function fetchShopOptions() {
 }
 
 async function fetchAuthorizedShop() {
-  const resp = await useResponse(api.getAuthorizedShop, { user_id: rowData?.id });
+  const resp = await useResponse(api.getAuthorizedShop, { user_id: rowData?.id ,is_all : true });
   const authorizedShops = (resp.data.authorized_shops ?? []).filter((item: any) => item !== null); // 过滤掉 null 值
 
   if (resp.data.is_authorized_all_shops) {