feat: admin set share

This commit is contained in:
archer
2023-06-14 23:37:05 +08:00
parent c6259fca78
commit bf1592d2c6
7 changed files with 77 additions and 26 deletions

View File

@@ -1,4 +1,4 @@
import { User, Model, Kb } from '../schema.js'; import { Model, Kb } from '../schema.js';
import { auth } from './system.js'; import { auth } from './system.js';
export const useAppRoute = (app) => { export const useAppRoute = (app) => {
@@ -8,18 +8,19 @@ export const useAppRoute = (app) => {
const start = parseInt(req.query._start) || 0; const start = parseInt(req.query._start) || 0;
const end = parseInt(req.query._end) || 20; const end = parseInt(req.query._end) || 20;
const order = req.query._order === 'DESC' ? -1 : 1; const order = req.query._order === 'DESC' ? -1 : 1;
const sort = req.query._sort || '_id'; const sort = req.query._sort;
const userId = req.query.userId || '';
const name = req.query.name || ''; const name = req.query.name || '';
const id = req.query.id || '';
const where = { const where = {
...(userId ? { userId: userId } : {}), ...(name && { name: { $regex: name, $options: 'i' } }),
name ...(id && { _id: id })
}; };
const modelsRaw = await Model.find() const modelsRaw = await Model.find(where)
.skip(start) .skip(start)
.limit(end - start) .limit(end - start)
.sort({ [sort]: order }); .sort({ [sort]: order, 'share.isShare': -1, 'share.collection': -1 });
const models = []; const models = [];
@@ -37,15 +38,19 @@ export const useAppRoute = (app) => {
id: model._id.toString(), id: model._id.toString(),
userId: model.userId, userId: model.userId,
name: model.name, name: model.name,
model: model.chat?.chatModel,
relatedKbs: kbNames, // 将relatedKbs的id转换为相应的Kb名称 relatedKbs: kbNames, // 将relatedKbs的id转换为相应的Kb名称
searchMode: model.chat?.searchMode, searchMode: model.chat?.searchMode,
systemPrompt: model.chat?.systemPrompt || '', systemPrompt: model.chat?.systemPrompt || '',
temperature: model.chat?.temperature 'share.topNum': model.share?.topNum || 0,
'share.isShare': model.share?.isShare || false,
'share.intro': model.share?.intro,
'share.collection': model.share?.collection || 0
}; };
models.push(orderedModel); models.push(orderedModel);
} }
const totalCount = await Model.countDocuments(); const totalCount = await Model.countDocuments(where);
res.header('Access-Control-Expose-Headers', 'X-Total-Count'); res.header('Access-Control-Expose-Headers', 'X-Total-Count');
res.header('X-Total-Count', totalCount); res.header('X-Total-Count', totalCount);
res.json(models); res.json(models);
@@ -54,4 +59,28 @@ export const useAppRoute = (app) => {
res.status(500).json({ error: 'Error fetching models', details: err.message }); res.status(500).json({ error: 'Error fetching models', details: err.message });
} }
}); });
// 修改 app 信息
app.put('/models/:id', auth(), async (req, res) => {
try {
const _id = req.params.id;
let {
share: { isShare, intro, topNum }
} = req.body;
await Model.findByIdAndUpdate(_id, {
$set: {
'share.topNum': Number(topNum),
'share.isShare': isShare === 'true',
'share.intro': intro
}
});
res.json({});
} catch (err) {
console.log(`Error updating user: ${err}`);
res.status(500).json({ error: 'Error updating user' });
}
});
}; };

View File

@@ -69,6 +69,7 @@ const modelSchema = new mongoose.Schema({
chatModel: String chatModel: String
}, },
share: { share: {
topNum: Number,
isShare: Boolean, isShare: Boolean,
isShareDetail: Boolean, isShareDetail: Boolean,
intro: String, intro: String,

View File

@@ -54,7 +54,25 @@ function App() {
/> />
} }
/> />
<Resource
name="models"
icon={<IconApps />}
label="应用"
list={
<ListTable
filter={[
createTextField('id', {
label: 'id'
}),
createTextField('name', {
label: 'name'
})
]}
fields={ModelFields}
action={{ detail: true, edit: true }}
/>
}
/>
<Resource <Resource
name="pays" name="pays"
label="支付记录" label="支付记录"
@@ -90,12 +108,7 @@ function App() {
/> />
} }
/> />
<Resource
name="models"
icon={<IconApps />}
label="应用"
list={<ListTable fields={ModelFields} action={{ detail: true }} />}
/>
<Resource <Resource
name="system" name="system"
label="系统" label="系统"

View File

@@ -26,17 +26,21 @@ export const kbFields = [
export const ModelFields = [ export const ModelFields = [
createTextField('id', { label: 'ID' }), createTextField('id', { label: 'ID' }),
createTextField('userId', { label: '所属用户' }), createTextField('userId', { label: '所属用户', list: { hidden: true } }),
createTextField('name', { label: '名字' }), createTextField('name', { label: '名字' }),
createTextField('relatedKbs', { label: '引用的知识库' }), createTextField('model', { label: '模型' }),
createTextField('searchMode', { label: '搜索模式' }), createTextField('share.collection', { label: '收藏数', list: { sort: true } }),
createTextField('share.topNum', { label: '置顶等级', list: { sort: true } }),
createTextField('share.isShare', { label: '是否分享(true,false)' }),
createTextField('share.intro', { label: '介绍', list: { width: 400 } }),
createTextField('relatedKbs', { label: '引用的知识库', list: { hidden: true } }),
createTextField('systemPrompt', { createTextField('systemPrompt', {
label: '提示词', label: '提示词',
list: { list: {
width: 400 width: 400,
hidden: true
} }
}), })
createTextField('temperature', { label: '温度' })
]; ];
export const SystemFields = [ export const SystemFields = [

View File

@@ -77,7 +77,7 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse<
} }
}, },
{ {
$sort: { 'share.collection': -1 } $sort: { 'share.topNum': -1, 'share.collection': -1 }
}, },
{ {
$skip: (pageNum - 1) * pageSize $skip: (pageNum - 1) * pageSize

View File

@@ -344,7 +344,7 @@ ${e.password ? `密码为: ${e.password}` : ''}`;
{isOwner && ( {isOwner && (
<> <>
{/* model share setting */} {/* model share setting */}
<Card p={4}> {/* <Card p={4}>
<Box fontWeight={'bold'}>分享设置</Box> <Box fontWeight={'bold'}>分享设置</Box>
<Box> <Box>
<Flex mt={5} alignItems={'center'}> <Flex mt={5} alignItems={'center'}>
@@ -373,7 +373,7 @@ ${e.password ? `密码为: ${e.password}` : ''}`;
/> />
</Box> </Box>
</Box> </Box>
</Card> </Card> */}
<Card p={4}> <Card p={4}>
<Flex justifyContent={'space-between'}> <Flex justifyContent={'space-between'}>
<Box fontWeight={'bold'}></Box> <Box fontWeight={'bold'}></Box>
@@ -411,7 +411,7 @@ ${e.password ? `密码为: ${e.password}` : ''}`;
</> </>
)} )}
{/* shareChat */} {/* shareChat */}
<Card p={4} gridColumnStart={1} gridColumnEnd={[2, 3]}> <Card p={4}>
<Flex justifyContent={'space-between'}> <Flex justifyContent={'space-between'}>
<Box fontWeight={'bold'}> <Box fontWeight={'bold'}>

View File

@@ -61,6 +61,10 @@ const ModelSchema = new Schema({
} }
}, },
share: { share: {
topNum: {
type: Number,
default: 0
},
isShare: { isShare: {
type: Boolean, type: Boolean,
default: false default: false