291 lines
11 KiB
TypeScript
291 lines
11 KiB
TypeScript
import * as api from "./api";
|
||
import {dict, compute, PageQuery, AddReq, DelReq, EditReq, CrudExpose, CrudOptions,} from "@fast-crud/fast-crud";
|
||
import {request} from "/@/utils/service";
|
||
import {dictionary} from "/@/utils/dictionary";
|
||
import tableSelector from "/@/components/tableSelector/index.vue"
|
||
import {shallowRef} from "vue";
|
||
import manyToMany from "/@/components/manyToMany/index.vue"
|
||
|
||
interface CreateCrudOptionsTypes {
|
||
crudOptions: CrudOptions;
|
||
}
|
||
|
||
export const createCrudOptions = function ({crudExpose}: { crudExpose: CrudExpose }): CreateCrudOptionsTypes {
|
||
const pageRequest = async (query: PageQuery) => {
|
||
return await api.GetList(query);
|
||
};
|
||
const editRequest = async ({form, row}: EditReq) => {
|
||
form.id = row.id;
|
||
return await api.UpdateObj(form);
|
||
};
|
||
const delRequest = async ({row}: DelReq) => {
|
||
return await api.DelObj(row.id);
|
||
};
|
||
const addRequest = async ({form}: AddReq) => {
|
||
return await api.AddObj(form);
|
||
};
|
||
return {
|
||
crudOptions: {
|
||
request: {
|
||
pageRequest,
|
||
addRequest,
|
||
editRequest,
|
||
delRequest
|
||
},
|
||
columns: {
|
||
|
||
id: {
|
||
title: 'id',
|
||
form: {
|
||
show: false
|
||
}
|
||
|
||
},
|
||
title: {
|
||
title: '标题',
|
||
search: {
|
||
disabled: false
|
||
},
|
||
type: ["text", "colspan"],
|
||
form: {
|
||
rules: [ // 表单校验规则
|
||
{
|
||
required: true,
|
||
message: '必填项'
|
||
}
|
||
],
|
||
component: {span: 24, placeholder: '请输入标题'}
|
||
}
|
||
},
|
||
is_read: {
|
||
title: '是否已读',
|
||
type: 'dict-select',
|
||
column: {
|
||
show: false
|
||
},
|
||
dict: dict({
|
||
data: [
|
||
{label: '已读', value: true, color: 'success'},
|
||
{label: '未读', value: false, color: 'danger'}
|
||
]
|
||
}),
|
||
form: {
|
||
show: false
|
||
}
|
||
},
|
||
target_type: {
|
||
title: '目标类型',
|
||
type: ['dict-radio', 'colspan'],
|
||
width: 120,
|
||
// show() {
|
||
// return vm.tabActivted === 'send'
|
||
// },
|
||
dict: dict({
|
||
data: [{value: 0, label: '按用户'}, {value: 1, label: '按角色'}, {
|
||
value: 2,
|
||
label: '按部门'
|
||
}, {value: 3, label: '通知公告'}]
|
||
}),
|
||
form: {
|
||
component: {
|
||
optionName: "el-radio-button"
|
||
},
|
||
rules: [
|
||
{
|
||
required: true,
|
||
message: '必选项',
|
||
trigger: ['blur', 'change']
|
||
}
|
||
]
|
||
}
|
||
},
|
||
target_user: {
|
||
title: '目标用户',
|
||
search: {
|
||
disabled: true
|
||
},
|
||
width: 130,
|
||
disabled: true,
|
||
form: {
|
||
component: {
|
||
name: shallowRef(tableSelector),
|
||
vModel: "modelValue",
|
||
displayLabel:compute(({row}) => {
|
||
if(row){
|
||
return row.user_info;
|
||
}
|
||
return null
|
||
}),
|
||
tableConfig: {
|
||
url: '/api/system/user/',
|
||
label: 'name',
|
||
value: 'id',
|
||
isMultiple: true,
|
||
columns: [{
|
||
prop: 'name',
|
||
label: '用户名称',
|
||
width: 120
|
||
}, {
|
||
prop: 'phone',
|
||
label: '用户电话',
|
||
width: 120
|
||
}]
|
||
}
|
||
},
|
||
show: compute(({form}) => {
|
||
return form.target_type === 0
|
||
}),
|
||
rules: [ // 表单校验规则
|
||
{
|
||
required: true,
|
||
message: '必填项'
|
||
}
|
||
]
|
||
},
|
||
column:{
|
||
component: {
|
||
name: shallowRef(manyToMany),
|
||
vModel: "modelValue",
|
||
bindValue:compute(({row}) => {return row.user_info}),
|
||
displayLabel: 'name'
|
||
}
|
||
}
|
||
},
|
||
target_role: {
|
||
title: '目标角色',
|
||
search: {
|
||
disabled: true
|
||
},
|
||
disabled: true,
|
||
width: 130,
|
||
form: {
|
||
component: {
|
||
name: shallowRef(tableSelector),
|
||
vModel: "modelValue",
|
||
displayLabel:compute(({row}) => {
|
||
if(row){
|
||
return row.role_info;
|
||
}
|
||
return null
|
||
}),
|
||
tableConfig: {
|
||
url: '/api/system/role/',
|
||
label: 'name',
|
||
value: 'id',
|
||
isMultiple: true,
|
||
columns: [{
|
||
prop: 'name',
|
||
label: '角色名称'
|
||
},
|
||
{
|
||
prop: 'key',
|
||
label: '权限标识'
|
||
}]
|
||
}
|
||
},
|
||
show: compute(({form}) => {
|
||
return form.target_type === 1
|
||
}),
|
||
rules: [ // 表单校验规则
|
||
{
|
||
required: true,
|
||
message: '必填项'
|
||
}
|
||
]
|
||
},
|
||
column:{
|
||
component: {
|
||
name: shallowRef(manyToMany),
|
||
vModel: "modelValue",
|
||
bindValue:compute(({row}) => {return row.role_info}),
|
||
displayLabel: 'name'
|
||
}
|
||
}
|
||
},
|
||
target_dept: {
|
||
title: '目标部门',
|
||
search: {
|
||
disabled: true
|
||
},
|
||
width: 130,
|
||
type: 'table-selector',
|
||
form: {
|
||
component: {
|
||
name: shallowRef(tableSelector),
|
||
vModel: "modelValue",
|
||
displayLabel:compute(({ form }) => {
|
||
return form.target_dept_name;
|
||
}),
|
||
tableConfig: {
|
||
url: '/api/system/dept/all_dept/',
|
||
label: 'name',
|
||
value: 'id',
|
||
isTree: true,
|
||
isMultiple: true,
|
||
columns: [{
|
||
prop: 'name',
|
||
label: '部门名称'
|
||
},
|
||
{
|
||
prop: 'status_label',
|
||
label: '状态'
|
||
},
|
||
{
|
||
prop: 'parent_name',
|
||
label: '父级部门'
|
||
}]
|
||
}
|
||
},
|
||
show: compute(({form}) => {
|
||
return form.target_type === 2
|
||
}),
|
||
rules: [ // 表单校验规则
|
||
{
|
||
required: true,
|
||
message: '必填项'
|
||
}
|
||
]
|
||
},
|
||
column:{
|
||
component: {
|
||
name: shallowRef(manyToMany),
|
||
vModel: "modelValue",
|
||
bindValue:compute(({row}) => {return row.dept_info}),
|
||
displayLabel: 'name'
|
||
}
|
||
}
|
||
},
|
||
content: {
|
||
title: '内容',
|
||
column: {
|
||
width: 300,
|
||
show: false
|
||
},
|
||
type: ["editor-wang5", "colspan"],
|
||
form: {
|
||
rules: [ // 表单校验规则
|
||
{
|
||
required: true,
|
||
message: '必填项'
|
||
}
|
||
],
|
||
component: {
|
||
// disabled: compute(({form}) => {
|
||
// return form.disabled;
|
||
// }),
|
||
id: "1", // 当同一个页面有多个editor时,需要配置不同的id
|
||
config: {},
|
||
uploader: {
|
||
type: "form",
|
||
buildUrl(res: any) {
|
||
return res.url;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|