|
@@ -2,7 +2,10 @@
|
|
|
import { ref, computed, reactive } from "vue";
|
|
|
import { useAsync } from "/@/hooks";
|
|
|
import { ElForm } from "element-plus";
|
|
|
-import { httpUserList, httpMenuList, httpUserGroup, httpAdd, httpDetail } from "/@/api/interest/dataShare";
|
|
|
+import { rules } from "./../config/configs";
|
|
|
+import { httpUserList, httpMenuList, httpUserGroup, httpAdd, httpDetail, httpUpdate } from "/@/api/interest/dataShare";
|
|
|
+
|
|
|
+const emit = defineEmits(['reload']);
|
|
|
|
|
|
const id = ref("");
|
|
|
const readonly = ref(false);
|
|
@@ -21,18 +24,26 @@ const initalData = {
|
|
|
}
|
|
|
|
|
|
const shareTypes = reactive({
|
|
|
- origin: '1',
|
|
|
+ source: '1',
|
|
|
target: '1'
|
|
|
})
|
|
|
|
|
|
-const formData = ref({ ...initalData })
|
|
|
-
|
|
|
const title = computed(() => {
|
|
|
if (readonly.value) return '数据共享详情'
|
|
|
-
|
|
|
return isCreate.value ? '创建数据共享' : '编辑数据共享'
|
|
|
})
|
|
|
|
|
|
+const onBeforeAction = () => {
|
|
|
+ visible.value = false;
|
|
|
+ emit('reload')
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+const initalLoading = computed(() => groupLoading.value || menuLoading.value || userLoading.value || detailLoading.value)
|
|
|
+const actionLoading = computed(() => createLoading.value || updateLoading.value)
|
|
|
+
|
|
|
+const formData = ref({ ...initalData })
|
|
|
+
|
|
|
const { run: userlistRun, data: userlist, loading: userLoading } = useAsync<Array<Record<string, string>>>({
|
|
|
initalData: [],
|
|
|
});
|
|
@@ -46,9 +57,36 @@ const { run: grouplistRun, data: grouplist, loading: groupLoading } = useAsync<A
|
|
|
isList: true
|
|
|
});
|
|
|
|
|
|
-const { run: createDataShareRun } = useAsync()
|
|
|
+const { run: createDataShareRun, loading: createLoading } = useAsync({
|
|
|
+ success: () => onBeforeAction()
|
|
|
+})
|
|
|
+const { run: updateDateShareRun, loading: updateLoading } = useAsync({
|
|
|
+ success: () => onBeforeAction()
|
|
|
+})
|
|
|
|
|
|
-const { run:dataShareDetailRun,data:dataShareDetail } = useAsync();
|
|
|
+const { run: dataShareDetailRun, data: dataShareDetail, loading: detailLoading } = useAsync<Record<string, any>>({
|
|
|
+ initalData: {},
|
|
|
+ success: () => {
|
|
|
+ let { menu_list, source_data_group_id, data_group_id, uid, source_uid, type } = dataShareDetail.value;
|
|
|
+
|
|
|
+ shareTypes.source = source_uid === '0' ? '2' : '1'
|
|
|
+ shareTypes.target = uid === '0' ? '2' : '1'
|
|
|
+
|
|
|
+ data_group_id = data_group_id === '0' ? '' : data_group_id
|
|
|
+ source_data_group_id = source_data_group_id === '0' ? '' : source_data_group_id
|
|
|
+ uid = uid === '0' ? '' : uid
|
|
|
+ source_uid = source_uid === '0' ? '' : source_uid
|
|
|
+
|
|
|
+ formData.value = {
|
|
|
+ menu_ids: menu_list.map(({ id }) => id),
|
|
|
+ source_data_group_id,
|
|
|
+ data_group_id,
|
|
|
+ source_uid,
|
|
|
+ uid,
|
|
|
+ type
|
|
|
+ }
|
|
|
+ }
|
|
|
+});
|
|
|
|
|
|
function createDataShare() {
|
|
|
createDataShareRun(
|
|
@@ -58,33 +96,49 @@ function createDataShare() {
|
|
|
);
|
|
|
}
|
|
|
|
|
|
+function updateDataShare() {
|
|
|
+ updateDateShareRun(
|
|
|
+ httpUpdate(
|
|
|
+ {
|
|
|
+ ...formData.value,
|
|
|
+ id: id.value
|
|
|
+ }
|
|
|
+ )
|
|
|
+ )
|
|
|
+}
|
|
|
+
|
|
|
function handleConfirm() {
|
|
|
formRef.value.validate(isValid => {
|
|
|
console.log(isValid)
|
|
|
if (!isValid) return;
|
|
|
|
|
|
if (isCreate.value) return createDataShare();
|
|
|
+
|
|
|
+ updateDataShare();
|
|
|
})
|
|
|
}
|
|
|
|
|
|
defineExpose({
|
|
|
onDisplay(_id = "", _readonly = false) {
|
|
|
visible.value = true;
|
|
|
- formData.value = { ...initalData }
|
|
|
userlistRun(httpUserList());
|
|
|
menulistRun(httpMenuList());
|
|
|
grouplistRun(httpUserGroup());
|
|
|
readonly.value = _readonly;
|
|
|
id.value = _id;
|
|
|
+
|
|
|
+ if (!_id) return formData.value = { ...initalData }
|
|
|
+
|
|
|
+ dataShareDetailRun(httpDetail({ id: id.value }))
|
|
|
}
|
|
|
})
|
|
|
</script>
|
|
|
|
|
|
|
|
|
<template>
|
|
|
- <el-dialog v-model="visible" :title="title" center>
|
|
|
- <el-form label-width="120px" ref="formRef" :model="formData" :disabled="readonly"
|
|
|
- v-loading="groupLoading || menuLoading || userLoading">
|
|
|
+ <el-dialog v-model="visible" :title="title" center @close="() => formData = {...initalData}">
|
|
|
+ <el-form label-width="120px" ref="formRef" :model="formData" :disabled="readonly" v-loading="initalLoading"
|
|
|
+ :rules="rules">
|
|
|
|
|
|
<el-form-item prop="menu_ids" label="共享的菜单数据">
|
|
|
<el-select w-full v-model="formData.menu_ids" multiple>
|
|
@@ -92,12 +146,13 @@ defineExpose({
|
|
|
</el-select>
|
|
|
</el-form-item>
|
|
|
|
|
|
- <el-form-item label="数据源共享对象">
|
|
|
- <el-select w-100px v-model="shareTypes.origin">
|
|
|
+ <el-form-item label="数据源共享对象" :prop="shareTypes.source === '1' ? 'source_uid' : 'source_data_group_id'">
|
|
|
+ <el-select w-100px v-model="shareTypes.source"
|
|
|
+ @change="val => val === '1' ? formData.source_data_group_id = '' : formData.source_uid = ''">
|
|
|
<el-option value="1" label="用户" />
|
|
|
<el-option value="2" label="用户组" />
|
|
|
</el-select>
|
|
|
- <el-select flex-1 placeholder="请选择用户" v-if="shareTypes.origin === '1'" v-model="formData.source_uid">
|
|
|
+ <el-select flex-1 placeholder="请选择用户" v-if="shareTypes.source === '1'" v-model="formData.source_uid">
|
|
|
<el-option v-for="user in userlist" :key="user.id" :value="user.id" :label="user.nickname"></el-option>
|
|
|
</el-select>
|
|
|
<el-select flex-1 placeholder="请选择用户组" v-else v-model="formData.source_data_group_id">
|
|
@@ -107,8 +162,9 @@ defineExpose({
|
|
|
|
|
|
<el-divider />
|
|
|
|
|
|
- <el-form-item label="数据共享对象">
|
|
|
- <el-select w-100px v-model="shareTypes.target">
|
|
|
+ <el-form-item label="数据共享对象" :prop="shareTypes.target === '1' ? 'uid' : 'data_group_id'">
|
|
|
+ <el-select w-100px v-model="shareTypes.target"
|
|
|
+ @change="val => val === '1' ? formData.source_uid = '' : formData.uid = ''">
|
|
|
<el-option value="1" label="用户" />
|
|
|
<el-option value="2" label="用户组" />
|
|
|
</el-select>
|
|
@@ -121,7 +177,7 @@ defineExpose({
|
|
|
</el-form-item>
|
|
|
|
|
|
|
|
|
- <el-form-item label="共享的数据权限">
|
|
|
+ <el-form-item label="共享的数据权限" prop="type">
|
|
|
<el-radio-group v-model="formData.type">
|
|
|
<el-radio label="2">只读</el-radio>
|
|
|
<el-radio label="1">读写</el-radio>
|
|
@@ -130,7 +186,8 @@ defineExpose({
|
|
|
|
|
|
<el-form-item>
|
|
|
<div w-full flex justify-end>
|
|
|
- <el-button type="primary" @click="() => handleConfirm()">提交</el-button>
|
|
|
+ <el-button type="primary" @click="() => handleConfirm()" :loading="actionLoading">提交
|
|
|
+ </el-button>
|
|
|
<el-button @click="() => visible = false">取消</el-button>
|
|
|
</div>
|
|
|
</el-form-item>
|