feat: 新增班次管理页面

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
caoqianming 2026-04-29 10:37:08 +08:00
parent 8230773736
commit adef0b9b24
2 changed files with 152 additions and 0 deletions

View File

@ -231,6 +231,33 @@ export default {
return await http.get(`${config.API_URL}/mtm/shift/`, data); return await http.get(`${config.API_URL}/mtm/shift/`, data);
}, },
}, },
item: {
name: "获取详情",
req: async function (id) {
return await http.get(`${config.API_URL}/mtm/shift/${id}/`);
},
},
create: {
name: "创建",
req: async function (data) {
return await http.post(`${config.API_URL}/mtm/shift/`, data);
},
},
update: {
name: "更新",
req: async function (id, data) {
return await http.put(
`${config.API_URL}/mtm/shift/${id}/`,
data
);
},
},
delete: {
name: "删除",
req: async function (id) {
return await http.delete(`${config.API_URL}/mtm/shift/${id}/`);
},
},
}, },
//班组 //班组
team: { team: {

125
src/views/mtm/shift.vue Normal file
View File

@ -0,0 +1,125 @@
<template>
<el-container>
<el-header>
<div class="left-panel">
<el-input style="margin-right: 5px" v-model="query.search" placeholder="名称/所属规则" clearable></el-input>
<el-button type="primary" icon="el-icon-search" @click="handleQuery"></el-button>
</div>
<div class="right-panel">
<el-button type="primary" icon="el-icon-plus" @click="table_add" v-auth="'shift.create'"></el-button>
</div>
</el-header>
<el-main class="nopadding">
<scTable ref="table" :apiObj="apiObj" :params="query" row-key="id" hidePagination>
<el-table-column label="#" type="index" width="50"></el-table-column>
<el-table-column label="名称" prop="name" min-width="120"></el-table-column>
<el-table-column label="所属规则" prop="rule" min-width="120"></el-table-column>
<el-table-column label="开始时间" prop="start_time_o" min-width="100"></el-table-column>
<el-table-column label="结束时间" prop="end_time_o" min-width="100"></el-table-column>
<el-table-column label="排序" prop="sort" width="80"></el-table-column>
<el-table-column label="操作" fixed="right" align="center" width="140">
<template #default="scope">
<el-button link size="small" type="primary" v-auth="'shift.update'"
@click="table_edit(scope.row)">编辑</el-button>
<el-divider direction="vertical"></el-divider>
<el-popconfirm title="确定删除吗?" @confirm="table_del(scope.row, scope.$index)">
<template #reference>
<el-button link size="small" v-auth="'shift.delete'" type="danger">删除</el-button>
</template>
</el-popconfirm>
</template>
</el-table-column>
</scTable>
</el-main>
<el-dialog :title="mode === 'add' ? '新增班次' : '编辑班次'" v-model="dialogVisible" :width="600" destroy-on-close>
<el-form ref="dialogForm" :model="form" :rules="rules" label-width="100px">
<el-form-item label="名称" prop="name">
<el-input v-model="form.name" clearable></el-input>
</el-form-item>
<el-form-item label="所属规则" prop="rule">
<el-input v-model="form.rule" clearable placeholder="同一规则下的班次将被一起循环"></el-input>
</el-form-item>
<el-form-item label="开始时间" prop="start_time_o">
<el-time-picker v-model="form.start_time_o" value-format="HH:mm:ss" placeholder="选择开始时间"
class="width-100"></el-time-picker>
</el-form-item>
<el-form-item label="结束时间" prop="end_time_o">
<el-time-picker v-model="form.end_time_o" value-format="HH:mm:ss" placeholder="选择结束时间"
class="width-100"></el-time-picker>
</el-form-item>
<el-form-item label="排序" prop="sort">
<el-input-number v-model="form.sort" :min="1" class="width-100"></el-input-number>
</el-form-item>
</el-form>
<template #footer>
<el-button @click="dialogVisible = false">取消</el-button>
<el-button type="primary" :loading="isSaving" @click="save">保存</el-button>
</template>
</el-dialog>
</el-container>
</template>
<script>
const dForm = {
name: '',
rule: '默认',
start_time_o: '',
end_time_o: '',
sort: 1,
}
export default {
name: 'shift',
data() {
return {
apiObj: this.$API.mtm.shift.list,
query: {},
dialogVisible: false,
isSaving: false,
mode: 'add',
form: Object.assign({}, dForm),
rules: {
name: [{ required: true, message: '请输入名称', trigger: 'blur' }],
rule: [{ required: true, message: '请输入所属规则', trigger: 'blur' }],
start_time_o: [{ required: true, message: '请选择开始时间', trigger: 'change' }],
end_time_o: [{ required: true, message: '请选择结束时间', trigger: 'change' }],
},
}
},
methods: {
handleQuery() {
this.$refs.table.queryData(this.query);
},
table_add() {
this.mode = 'add';
this.form = Object.assign({}, dForm);
this.dialogVisible = true;
},
table_edit(row) {
this.mode = 'edit';
this.form = Object.assign({}, dForm, row);
this.dialogVisible = true;
},
save() {
this.$refs.dialogForm.validate(valid => {
if (!valid) return;
this.isSaving = true;
const req = this.mode === 'add'
? this.$API.mtm.shift.create.req(this.form)
: this.$API.mtm.shift.update.req(this.form.id, this.form);
req.then(() => {
this.dialogVisible = false;
this.$refs.table.refresh();
this.$message.success('操作成功');
}).finally(() => {
this.isSaving = false;
});
});
},
table_del(row) {
this.$API.mtm.shift.delete.req(row.id).then(() => {
this.$refs.table.refresh();
this.$message.success('操作成功');
});
},
}
}
</script>