From b71d999d5e20f3d26411d3935ab7394818a7b00a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=9D=E5=85=88=E7=91=9E?= <1490493387@qq.com> Date: Tue, 2 Aug 2022 23:48:23 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=90=8C=E6=AD=A5=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Former-commit-id: 29a22a96043a55445d48a086aa0a9157bcf7d6c6 --- src/api/lab/seata.ts | 36 -- src/api/pms/category.ts | 14 +- src/api/sms/coupon.ts | 12 +- src/api/system/menu.ts | 7 +- src/api/system/role.ts | 22 +- src/lang/index.ts | 1 + src/types/api/lab/seata.d.ts | 9 - src/types/api/system/menu.d.ts | 39 +- src/types/api/system/role.d.ts | 3 +- src/views/lab/seata/index.vue | 376 ------------------ .../pms/category/components/Category.vue | 221 +++++----- .../pms/goods/components/GoodsCategory.vue | 10 +- src/views/pms/goods/index.vue | 16 +- src/views/sms/advert/index.vue | 24 +- src/views/sms/coupon/index.vue | 30 +- src/views/system/client/index.vue | 8 +- src/views/system/dept/index.vue | 4 +- src/views/system/menu/components/Menu.vue | 38 +- src/views/system/menu/components/Perm.vue | 20 +- src/views/system/menu/index.vue | 30 +- src/views/system/role/index.vue | 167 +++++--- src/views/system/user/index.vue | 5 +- 22 files changed, 390 insertions(+), 702 deletions(-) delete mode 100644 src/api/lab/seata.ts delete mode 100644 src/types/api/lab/seata.d.ts delete mode 100644 src/views/lab/seata/index.vue diff --git a/src/api/lab/seata.ts b/src/api/lab/seata.ts deleted file mode 100644 index ab1156c8..00000000 --- a/src/api/lab/seata.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { SeataFormData } from '@/types/api/lab/seata'; -import request from '@/utils/request'; - -/** - * 订单支付 - * @returns - */ -export function payOrder(data: SeataFormData) { - return request({ - url: '/youlai-lab/api/v1/seata/order/_pay', - method: 'post', - data: data, - }); -} - -/** - * 获取Seata模拟数据(包括订单信息、商品信息、会员余额信息) - * @returns - */ -export function getSeataData() { - return request({ - url: '/youlai-lab/api/v1/seata/data', - method: 'get', - }); -} - -/** - * 重置Seata模拟数据 - * @returns - */ -export function resetSeataData() { - return request({ - url: '/youlai-lab/api/v1/seata/data/_reset', - method: 'put', - }); -} diff --git a/src/api/pms/category.ts b/src/api/pms/category.ts index 74828b50..806a705c 100644 --- a/src/api/pms/category.ts +++ b/src/api/pms/category.ts @@ -11,7 +11,7 @@ export function listCategories(queryParams: object) { return request({ url: '/mall-pms/api/v1/categories', method: 'get', - params: queryParams + params: queryParams, }); } @@ -23,7 +23,7 @@ export function listCategories(queryParams: object) { export function listCategoryOptions(): AxiosPromise { return request({ url: '/mall-pms/api/v1/categories/options', - method: 'get' + method: 'get', }); } @@ -35,7 +35,7 @@ export function listCategoryOptions(): AxiosPromise { export function getCategoryDetail(id: number) { return request({ url: '/mall-pms/api/v1/categories/' + id, - method: 'get' + method: 'get', }); } @@ -48,7 +48,7 @@ export function addCategory(data: object) { return request({ url: '/mall-pms/api/v1/categories', method: 'post', - data: data + data: data, }); } @@ -62,7 +62,7 @@ export function updateCategory(id: number, data: object) { return request({ url: '/mall-pms/api/v1/categories/' + id, method: 'put', - data: data + data: data, }); } @@ -74,7 +74,7 @@ export function updateCategory(id: number, data: object) { export function deleteCategories(ids: string) { return request({ url: '/mall-pms/api/v1/categories/' + ids, - method: 'delete' + method: 'delete', }); } @@ -88,6 +88,6 @@ export function updateCategoryPart(id: number, data: object) { return request({ url: '/mall-pms/api/v1/categories/' + id, method: 'patch', - data: data + data: data, }); } diff --git a/src/api/sms/coupon.ts b/src/api/sms/coupon.ts index 8ede02f3..79c3b639 100644 --- a/src/api/sms/coupon.ts +++ b/src/api/sms/coupon.ts @@ -1,7 +1,7 @@ import { CouponQueryParam, CouponPageResult, - CouponFormData + CouponFormData, } from '@/types/api/sms/coupon'; import request from '@/utils/request'; import { AxiosPromise } from 'axios'; @@ -17,7 +17,7 @@ export function lisCouponPages( return request({ url: '/mall-sms/api/v1/coupons/pages', method: 'get', - params: queryParams + params: queryParams, }); } @@ -29,7 +29,7 @@ export function lisCouponPages( export function getCouponFormData(id: number): AxiosPromise { return request({ url: '/mall-sms/api/v1/coupons/' + id + '/form_data', - method: 'get' + method: 'get', }); } @@ -42,7 +42,7 @@ export function addCoupon(data: CouponFormData) { return request({ url: '/mall-sms/api/v1/coupons', method: 'post', - data: data + data: data, }); } @@ -56,7 +56,7 @@ export function updateCoupon(id: number, data: CouponFormData) { return request({ url: '/mall-sms/api/v1/coupons/' + id, method: 'put', - data: data + data: data, }); } @@ -68,6 +68,6 @@ export function updateCoupon(id: number, data: CouponFormData) { export function deleteCoupons(ids: string) { return request({ url: '/mall-sms/api/v1/coupons/' + ids, - method: 'delete' + method: 'delete', }); } diff --git a/src/api/system/menu.ts b/src/api/system/menu.ts index 3f3850f9..ae388999 100644 --- a/src/api/system/menu.ts +++ b/src/api/system/menu.ts @@ -2,6 +2,7 @@ import { MenuFormData, MenuItem, MenuQueryParam, + Resource, } from '@/types/api/system/menu'; import { Option } from '@/types/common'; import request from '@/utils/request'; @@ -43,9 +44,9 @@ export function listMenuOptions(): AxiosPromise { } /** - * 获取菜单权限树形列表 + * 获取资源(菜单+权限)树形列表 */ -export function getResource(): AxiosPromise { +export function listResources(): AxiosPromise { return request({ url: '/youlai-admin/api/v1/menus/resources', method: 'get', @@ -56,7 +57,7 @@ export function getResource(): AxiosPromise { * 获取菜单详情 * @param id */ -export function getMenuDetail(id: number): AxiosPromise { +export function getMenuDetail(id: string): AxiosPromise { return request({ url: '/youlai-admin/api/v1/menus/' + id, method: 'get', diff --git a/src/api/system/role.ts b/src/api/system/role.ts index 2f36e221..36ca1ec5 100644 --- a/src/api/system/role.ts +++ b/src/api/system/role.ts @@ -2,7 +2,7 @@ import { RoleFormData, RolePageResult, RoleQueryParam, - RoleResourceData + RoleResource, } from '@/types/api/system/role'; import { Option } from '@/types/common'; @@ -20,7 +20,7 @@ export function listRolePages( return request({ url: '/youlai-admin/api/v1/roles/pages', method: 'get', - params: queryParams + params: queryParams, }); } @@ -35,7 +35,7 @@ export function listRoleOptions( return request({ url: '/youlai-admin/api/v1/roles/options', method: 'get', - params: queryParams + params: queryParams, }); } @@ -44,10 +44,10 @@ export function listRoleOptions( * * @param queryParams */ -export function getRoleResourceIds(roleId: string): AxiosPromise { +export function getRoleResources(roleId: string): AxiosPromise { return request({ url: '/youlai-admin/api/v1/roles/' + roleId + '/resources', - method: 'get' + method: 'get', }); } @@ -58,12 +58,12 @@ export function getRoleResourceIds(roleId: string): AxiosPromise { */ export function updateRoleResource( roleId: string, - data: RoleResourceData + data: RoleResource ): AxiosPromise { return request({ url: '/youlai-admin/api/v1/roles/' + roleId + '/resources', method: 'put', - data: data + data: data, }); } @@ -75,7 +75,7 @@ export function updateRoleResource( export function getRoleFormDetail(id: number): AxiosPromise { return request({ url: '/youlai-admin/api/v1/roles/' + id, - method: 'get' + method: 'get', }); } @@ -88,7 +88,7 @@ export function addRole(data: RoleFormData) { return request({ url: '/youlai-admin/api/v1/roles', method: 'post', - data: data + data: data, }); } @@ -102,7 +102,7 @@ export function updateRole(id: number, data: RoleFormData) { return request({ url: '/youlai-admin/api/v1/roles/' + id, method: 'put', - data: data + data: data, }); } @@ -114,6 +114,6 @@ export function updateRole(id: number, data: RoleFormData) { export function deleteRoles(ids: string) { return request({ url: '/youlai-admin/api/v1/roles/' + ids, - method: 'delete' + method: 'delete', }); } diff --git a/src/lang/index.ts b/src/lang/index.ts index c5270750..4c7b0008 100644 --- a/src/lang/index.ts +++ b/src/lang/index.ts @@ -38,6 +38,7 @@ export const getLanguage = () => { }; const i18n = createI18n({ + legacy: false, locale: getLanguage(), messages: messages }); diff --git a/src/types/api/lab/seata.d.ts b/src/types/api/lab/seata.d.ts deleted file mode 100644 index 1d371eb8..00000000 --- a/src/types/api/lab/seata.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -/** - * Seata表单类型声明 - */ -export interface SeataFormData { - openTx: boolean; - stockEx: boolean; - accountEx: boolean; - orderEx: boolean; -} diff --git a/src/types/api/system/menu.d.ts b/src/types/api/system/menu.d.ts index 3d4a848c..02365c5f 100644 --- a/src/types/api/system/menu.d.ts +++ b/src/types/api/system/menu.d.ts @@ -10,8 +10,9 @@ export interface MenuQueryParam { */ export interface MenuItem { - id: number; + id?: number; parentId: number; + type?: string | 'CATEGORY' | 'MENU' | 'EXTLINK'; createTime: string; updateTime: string; name: string; @@ -65,3 +66,39 @@ export interface MenuFormData { */ type: string; } + +/** + * 资源(菜单+权限)类型 + */ +export interface Resource { + /** + * 菜单值 + */ + value: string; + /** + * 菜单文本 + */ + label: string; + /** + * 子菜单 + */ + children: Resource[]; + /** + * 权限集合 + */ + perms: Permission[]; +} + +/** + * 权限类型 + */ +export interface Permission { + /** + * 权限值 + */ + value: string; + /** + * 权限文本 + */ + label: string; +} diff --git a/src/types/api/system/role.d.ts b/src/types/api/system/role.d.ts index 3ce9a228..eb800856 100644 --- a/src/types/api/system/role.d.ts +++ b/src/types/api/system/role.d.ts @@ -1,3 +1,4 @@ +import { StringMap } from 'i18next'; import { PageQueryParam, PageResult } from '../base'; /** @@ -40,7 +41,7 @@ export interface RoleFormData { /** * */ -export interface RoleResourceData { +export interface RoleResource { menuIds: string[]; permIds: string[]; } diff --git a/src/views/lab/seata/index.vue b/src/views/lab/seata/index.vue deleted file mode 100644 index 84670087..00000000 --- a/src/views/lab/seata/index.vue +++ /dev/null @@ -1,376 +0,0 @@ - - - - - - - - diff --git a/src/views/pms/category/components/Category.vue b/src/views/pms/category/components/Category.vue index ddb80ceb..971182e6 100644 --- a/src/views/pms/category/components/Category.vue +++ b/src/views/pms/category/components/Category.vue @@ -1,111 +1,3 @@ - - - + + + diff --git a/src/views/pms/goods/components/GoodsCategory.vue b/src/views/pms/goods/components/GoodsCategory.vue index a0c92035..b8417fbd 100644 --- a/src/views/pms/goods/components/GoodsCategory.vue +++ b/src/views/pms/goods/components/GoodsCategory.vue @@ -49,20 +49,20 @@ const emit = defineEmits(['next', 'update:modelValue']); const props = defineProps({ modelValue: { type: Object, - default: () => {} - } + default: () => {}, + }, }); const goodsInfo: any = computed({ get: () => props.modelValue, - set: value => { + set: (value) => { emit('update:modelValue', value); - } + }, }); const state = reactive({ categoryOptions: [] as Option[], - pathLabels: [] + pathLabels: [], }); const { categoryOptions, pathLabels } = toRefs(state); diff --git a/src/views/pms/goods/index.vue b/src/views/pms/goods/index.vue index e3dacfb8..8dd29236 100644 --- a/src/views/pms/goods/index.vue +++ b/src/views/pms/goods/index.vue @@ -1,7 +1,7 @@ @@ -16,7 +16,7 @@ import { Edit, Refresh, Delete, - View + View, } from '@element-plus/icons-vue'; import { listSpuPages, deleteSpu } from '@/api/pms/goods'; import { listCategoryOptions } from '@/api/pms/category'; @@ -39,12 +39,12 @@ const state = reactive({ total: 0, queryParams: { pageNum: 1, - pageSize: 10 + pageSize: 10, } as GoodsQueryParam, goodsList: [] as GoodsItem[], categoryOptions: [] as Option[], goodDetail: undefined, - dialogVisible: false + dialogVisible: false, }); const { @@ -55,7 +55,7 @@ const { categoryOptions, goodDetail, total, - dialogVisible + dialogVisible, } = toRefs(state); function handleQuery() { @@ -72,7 +72,7 @@ function resetQuery() { pageNum: 1, pageSize: 10, name: undefined, - categoryId: undefined + categoryId: undefined, }; handleQuery(); } @@ -89,7 +89,7 @@ function handleAdd() { function handleUpdate(row: any) { router.push({ path: 'goods-detail', - query: { goodsId: row.id, categoryId: row.categoryId } + query: { goodsId: row.id, categoryId: row.categoryId }, }); } @@ -98,7 +98,7 @@ function handleDelete(row: any) { ElMessageBox.confirm('是否确认删除选中的数据项?', '警告', { confirmButtonText: '确定', cancelButtonText: '取消', - type: 'warning' + type: 'warning', }) .then(function () { return deleteSpu(ids); diff --git a/src/views/sms/advert/index.vue b/src/views/sms/advert/index.vue index 1e3a41e7..b8d47eb6 100644 --- a/src/views/sms/advert/index.vue +++ b/src/views/sms/advert/index.vue @@ -1,6 +1,6 @@ @@ -14,17 +14,17 @@ import { getAdvertFormDetail, updateAdvert, addAdvert, - deleteAdverts + deleteAdverts, } from '@/api/sms/advert'; import { Dialog } from '@/types/common'; import { AdvertFormData, AdvertItem, - AdvertQueryParam + AdvertQueryParam, } from '@/types/api/sms/advert'; -const queryFormRef = ref(ElForm); -const dataFormRef = ref(ElForm); +const queryFormRef = ref(ElForm); // 属性名必须和元素的ref属性值一致 +const dataFormRef = ref(ElForm); // 属性名必须和元素的ref属性值一致 const state = reactive({ loading: true, @@ -40,13 +40,13 @@ const state = reactive({ dialog: { title: '', visible: false } as Dialog, formData: { status: 1, - sort: 100 + sort: 100, } as AdvertFormData, rules: { title: [{ required: true, message: '请输入广告名称', trigger: 'blur' }], - picUrl: [{ required: true, message: '请上传广告图片', trigger: 'blur' }] + picUrl: [{ required: true, message: '请上传广告图片', trigger: 'blur' }], }, - validityPeriod: '' as any + validityPeriod: '' as any, }); const { @@ -58,7 +58,7 @@ const { dialog, formData, rules, - validityPeriod + validityPeriod, } = toRefs(state); function handleQuery() { @@ -84,14 +84,14 @@ function handleSelectionChange(selection: any) { function handleAdd() { state.dialog = { title: '添加广告', - visible: true + visible: true, }; } function handleUpdate(row: any) { state.dialog = { title: '修改广告', - visible: true + visible: true, }; const advertId = row.id || state.ids; getAdvertFormDetail(advertId).then(({ data }) => { @@ -138,7 +138,7 @@ function handleDelete(row: any) { ElMessageBox.confirm('确认删除已选中的数据项?', '警告', { confirmButtonText: '确定', cancelButtonText: '取消', - type: 'warning' + type: 'warning', }) .then(() => { deleteAdverts(ids).then(() => { diff --git a/src/views/sms/coupon/index.vue b/src/views/sms/coupon/index.vue index 6de85685..bfc35044 100644 --- a/src/views/sms/coupon/index.vue +++ b/src/views/sms/coupon/index.vue @@ -1,7 +1,7 @@ @@ -14,7 +14,7 @@ import { getCouponFormData, updateCoupon, addCoupon, - deleteCoupons + deleteCoupons, } from '@/api/sms/coupon'; import { listCategoryOptions } from '@/api/pms/category'; @@ -23,7 +23,7 @@ import { Dialog, Option } from '@/types/common'; import { CouponItem, CouponQueryParam, - CouponFormData + CouponFormData, } from '@/types/api/sms/coupon'; import { GoodsItem, GoodsQueryParam } from '@/types/api/pms/goods'; @@ -40,38 +40,38 @@ const state = reactive({ couponList: [] as CouponItem[], total: 0, dialog: { - visible: false + visible: false, } as Dialog, //指定商品分类选择Dialog spuCategoryChooseDialog: { - visible: false + visible: false, } as Dialog, // 指定商品选择ialog spuChooseDialog: { - visible: false + visible: false, } as Dialog, formData: { type: 1, platform: 0, validityPeriodType: 1, perLimit: 1, - applicationScope: 0 + applicationScope: 0, } as CouponFormData, rules: { type: [{ required: true, message: '请输入优惠券名称', trigger: 'blur' }], - name: [{ required: true, message: '请选择优惠券类型', trigger: 'blur' }] + name: [{ required: true, message: '请选择优惠券类型', trigger: 'blur' }], }, validityPeriod: '' as any, perLimitChecked: false, spuCategoryOptions: [] as Option[], spuCategoryProps: { multiple: true, - emitPath: false + emitPath: false, }, spuList: [] as GoodsItem[], spuTotal: 0, spuQueryParams: { pageNum: 1, pageSize: 10 } as GoodsQueryParam, - checkedSpuIds: [] + checkedSpuIds: [], }); const { @@ -89,7 +89,7 @@ const { spuCategoryProps, spuList, spuTotal, - checkedSpuIds + checkedSpuIds, } = toRefs(state); /** @@ -136,7 +136,7 @@ async function loadSpuList() { function handleAdd() { dialog.value = { title: '新增优惠券', - visible: true + visible: true, }; loadSpuCategoryOptions(); @@ -146,7 +146,7 @@ function handleAdd() { async function handleUpdate(row: any) { dialog.value = { title: '编辑优惠券', - visible: true + visible: true, }; const id = row.id; @@ -230,7 +230,7 @@ function handleDelete(row: any) { ElMessageBox.confirm('确认删除已选中的数据项?', '警告', { confirmButtonText: '确定', cancelButtonText: '取消', - type: 'warning' + type: 'warning', }) .then(() => { deleteCoupons(ids).then(() => { @@ -492,7 +492,7 @@ onMounted(() => { :titles="['商品列表', '已选择商品']" :props="{ key: 'id', - label: 'name' + label: 'name', }" > + + + +