Commit 31a096adbc84cd5bba7ba74588a44dcc55086492

Authored by guzijian
1 parent 837cf76e

feat: 新增线路配置

src/api/config/config.js 0 → 100644
  1 +import request from '@/utils/request'
  2 +
  3 +// 查询线路配置列表
  4 +export function listConfig(query) {
  5 + return request({
  6 + url: '/config/config/list',
  7 + method: 'get',
  8 + params: query
  9 + })
  10 +}
  11 +
  12 +// 查询线路配置详细
  13 +export function getConfig(id) {
  14 + return request({
  15 + url: '/config/config/' + id,
  16 + method: 'get'
  17 + })
  18 +}
  19 +
  20 +// 新增线路配置
  21 +export function addConfig(data) {
  22 + return request({
  23 + url: '/config/config',
  24 + method: 'post',
  25 + data: data
  26 + })
  27 +}
  28 +
  29 +// 修改线路配置
  30 +export function updateConfig(data) {
  31 + return request({
  32 + url: '/config/config',
  33 + method: 'put',
  34 + data: data
  35 + })
  36 +}
  37 +
  38 +// 删除线路配置
  39 +export function delConfig(id) {
  40 + return request({
  41 + url: '/config/config/' + id,
  42 + method: 'delete'
  43 + })
  44 +}
... ...
src/views/config/config/index.vue 0 → 100644
  1 +<template>
  2 + <div class="app-container">
  3 + <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch">
  4 + <el-form-item label="线路名" prop="lineName">
  5 + <el-input v-model="queryParams.lineName" placeholder="请输入线路名" clearable @keyup.enter="handleQuery" />
  6 + </el-form-item>
  7 + <el-form-item label="路牌" prop="lpName">
  8 + <el-input v-model="queryParams.lpName" placeholder="请输入路牌" clearable @keyup.enter="handleQuery" />
  9 + </el-form-item>
  10 + <el-form-item label="第一次签到时间" prop="firstSignInTime">
  11 + <el-input v-model="queryParams.firstSignInTime" placeholder="请输入第一次签到时间" clearable @keyup.enter="handleQuery" />
  12 + </el-form-item>
  13 + <el-form-item label="第一次签退时间" prop="firstSignOutTime">
  14 + <el-input v-model="queryParams.firstSignOutTime" placeholder="请输入第一次签退时间" clearable @keyup.enter="handleQuery" />
  15 + </el-form-item>
  16 + <el-form-item label="今天还是隔天" prop="firstSignTodayTomorrow">
  17 + <el-input v-model="queryParams.firstSignTodayTomorrow" placeholder="请输入今天还是隔天" clearable
  18 + @keyup.enter="handleQuery" />
  19 + </el-form-item>
  20 + <el-form-item label="分班标识" prop="secondFlag">
  21 + <el-input v-model="queryParams.secondFlag" placeholder="请输入分班标识" clearable @keyup.enter="handleQuery" />
  22 + </el-form-item>
  23 + <el-form-item label="分班签到时间" prop="secondSignInTime">
  24 + <el-input v-model="queryParams.secondSignInTime" placeholder="请输入分班签到时间" clearable @keyup.enter="handleQuery" />
  25 + </el-form-item>
  26 + <el-form-item label="分班签退时间" prop="secondSignOutTime">
  27 + <el-input v-model="queryParams.secondSignOutTime" placeholder="请输入分班签退时间" clearable @keyup.enter="handleQuery" />
  28 + </el-form-item>
  29 + <el-form-item label="今天还是隔天" prop="secondSignTodayTomorrow">
  30 + <el-input v-model="queryParams.secondSignTodayTomorrow" placeholder="请输入今天还是隔天" clearable
  31 + @keyup.enter="handleQuery" />
  32 + </el-form-item>
  33 + <el-form-item>
  34 + <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
  35 + <el-button icon="Refresh" @click="resetQuery">重置</el-button>
  36 + </el-form-item>
  37 + </el-form>
  38 +
  39 + <el-row :gutter="10" class="mb8">
  40 + <el-col :span="1.5">
  41 + <el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['config:config:add']">新增</el-button>
  42 + </el-col>
  43 + <el-col :span="1.5">
  44 + <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate"
  45 + v-hasPermi="['config:config:edit']">修改</el-button>
  46 + </el-col>
  47 + <el-col :span="1.5">
  48 + <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete"
  49 + v-hasPermi="['config:config:remove']">删除</el-button>
  50 + </el-col>
  51 + <el-col :span="1.5">
  52 + <el-button type="warning" plain icon="Download" @click="handleExport"
  53 + v-hasPermi="['config:config:export']">导出</el-button>
  54 + </el-col>
  55 + <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
  56 + </el-row>
  57 +
  58 + <el-table v-loading="loading" :data="configList" @selection-change="handleSelectionChange">
  59 + <el-table-column type="selection" width="55" align="center" />
  60 + <el-table-column label="线路名" align="center" prop="lineName" />
  61 + <el-table-column label="路牌" align="center" prop="lpName" />
  62 + <el-table-column label="签到时间" align="center" prop="firstSignInTime" />
  63 + <el-table-column label="签退时间" align="center" prop="firstSignOutTime" />
  64 + <el-table-column label="今天还是隔天" align="center" prop="firstSignTodayTomorrow">
  65 + <template #default="scope">
  66 + <dict-tag :options="today_or_tomorrow" :value="scope.row.firstSignTodayTomorrow" />
  67 + </template>
  68 + </el-table-column>
  69 + <el-table-column label="分班标识" align="center" prop="secondFlag">
  70 + <template #default="scope">
  71 + <dict-tag :options="sublevel" :value="scope.row.secondFlag" />
  72 + </template>
  73 + </el-table-column>
  74 + <el-table-column label="分班签到时间" align="center" prop="secondSignInTime" />
  75 + <el-table-column label="分班签退时间" align="center" prop="secondSignOutTime" />
  76 + <el-table-column label="今天还是隔天" align="center" prop="secondSignTodayTomorrow">
  77 + <template #default="scope">
  78 + <dict-tag :options="today_or_tomorrow" :value="scope.row.secondSignTodayTomorrow" />
  79 + </template>
  80 + </el-table-column>
  81 + <el-table-column label="备注" align="center" prop="remark" />
  82 + <el-table-column label="操作" align="center" class-name="small-padding fixed-width" fixed="right" width="160">
  83 + <template #default="scope">
  84 + <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)"
  85 + v-hasPermi="['config:config:edit']">修改</el-button>
  86 + <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)"
  87 + v-hasPermi="['config:config:remove']">删除</el-button>
  88 + </template>
  89 + </el-table-column>
  90 + </el-table>
  91 +
  92 + <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize"
  93 + @pagination="getList" />
  94 +
  95 + <!-- 添加或修改线路配置对话框 -->
  96 + <el-dialog :title="title" v-model="open" width="800px" append-to-body>
  97 + <el-form @validate="formChangeHandle" ref="configRef" :model="form" :rules="rules">
  98 + <el-form-item label="线路名" prop="lineName">
  99 + <el-input v-model="form.lineName" placeholder="请输入线路名" />
  100 + </el-form-item>
  101 + <el-row>
  102 + <el-form-item label="路牌" prop="lpName">
  103 + <el-input v-model="form.lpName" placeholder="请输入路牌" />
  104 + </el-form-item>
  105 + </el-row>
  106 + <el-row>
  107 + <el-col :span="10">
  108 + <el-form-item label="第一段上下班" prop="firstSignInTime">
  109 + <el-time-picker value-format="HH:mm" v-model="form.firstSignInTime" format="HH:mm" placeholder="上班时间" />
  110 + </el-form-item>
  111 + </el-col>
  112 + <el-col :span="4">
  113 + <el-form-item label="到" prop="firstSignTodayTomorrow">
  114 + <el-select v-model="form.firstSignTodayTomorrow" placeholder="至">
  115 + <el-option v-for="dict in today_or_tomorrow" :key="dict.value" :label="dict.label"
  116 + :default-first-option="true" :value="parseInt(dict.value)">
  117 + </el-option>
  118 + </el-select>
  119 + </el-form-item>
  120 + </el-col>
  121 + <el-col :span="10">
  122 + <el-form-item label="" prop="firstSignOutTime">
  123 + <el-time-picker value-format="HH:mm" format="HH:mm" v-model="form.firstSignOutTime" placeholder="下班时间" />
  124 + </el-form-item>
  125 + </el-col>
  126 + </el-row>
  127 + <el-row>
  128 + <el-col :span="12">
  129 + <el-form-item label="第二段开启标识" prop="secondFlag">
  130 + <el-radio-group v-model="form.secondFlag">
  131 + <el-radio v-for="dict in sublevel" :key="dict.value" :label="parseInt(dict.value)">
  132 + {{ dict.label }}
  133 + </el-radio>
  134 + </el-radio-group>
  135 + </el-form-item>
  136 + </el-col>
  137 + </el-row>
  138 + <el-row v-if="form.secondFlag == 2">
  139 + <el-row>
  140 + <el-col :span="10">
  141 + <el-form-item label="第二段上班下班" prop="secondSignInTime">
  142 + <el-time-picker value-format="HH:mm" format="HH:mm" v-model="form.secondSignInTime" placeholder="上班时间" />
  143 + </el-form-item>
  144 + </el-col>
  145 + <el-col :span="4">
  146 + <el-form-item label="到" prop="secondSignTodayTomorrow">
  147 + <el-select v-model="form.secondSignTodayTomorrow" placeholder="至">
  148 + <el-option v-for="dict in today_or_tomorrow" :key="dict.value" :label="dict.label"
  149 + :default-first-option="true" :value="parseInt(dict.value)"></el-option>
  150 + </el-select>
  151 + </el-form-item>
  152 + </el-col>
  153 + <el-col :span="10">
  154 + <el-form-item prop="secondSignOutTime">
  155 + <el-time-picker value-format="HH:mm" format="HH:mm" v-model="form.secondSignOutTime" placeholder="下班时间" />
  156 + </el-form-item>
  157 + </el-col>
  158 + </el-row>
  159 + </el-row>
  160 + <el-form-item label="备注" prop="remark">
  161 + <el-input v-model="form.remark" placeholder="请输入备注" />
  162 + </el-form-item>
  163 + </el-form>
  164 + <template #footer>
  165 + <div class="dialog-footer">
  166 + <el-button type="primary" @click="submitForm">确 定</el-button>
  167 + <el-button @click="cancel">取 消</el-button>
  168 + </div>
  169 + </template>
  170 + </el-dialog>
  171 + </div>
  172 +</template>
  173 +
  174 +<script setup name="Config">
  175 +import { addConfig, delConfig, getConfig, listConfig, updateConfig } from "@/api/config/config";
  176 +const { proxy } = getCurrentInstance();
  177 +const { sublevel, today_or_tomorrow } = proxy.useDict('sublevel', 'today_or_tomorrow', 'work_hour_type', 'work_hour_plan');
  178 +
  179 +const configList = ref([]);
  180 +const open = ref(false);
  181 +const loading = ref(true);
  182 +const showSearch = ref(true);
  183 +const ids = ref([]);
  184 +const single = ref(true);
  185 +const multiple = ref(true);
  186 +const total = ref(0);
  187 +const title = ref("");
  188 +
  189 +const data = reactive({
  190 + form: {},
  191 + queryParams: {
  192 + pageNum: 1,
  193 + pageSize: 10,
  194 + lineName: null,
  195 + lpName: null,
  196 + firstSignInTime: null,
  197 + firstSignOutTime: null,
  198 + firstSignTodayTomorrow: null,
  199 + secondFlag: null,
  200 + secondSignInTime: null,
  201 + secondSignOutTime: null,
  202 + secondSignTodayTomorrow: null,
  203 + },
  204 + rules: {
  205 + lineName: [
  206 + { required: true, message: "线路名不能为空", trigger: "blur" }
  207 + ],
  208 + lpName: [
  209 + { required: true, message: "线路配置不能为空", trigger: "blur" }
  210 + ],
  211 +
  212 + firstSignInTime: [
  213 + { required: true, message: "第一段上班签到时间不能为空", trigger: "blur" }
  214 + ],
  215 + firstSignOutTime: [
  216 + { required: true, message: "第一段下班签退时间不能为空", trigger: "blur" }
  217 + ],
  218 + firstSignTodayTomorrow: [
  219 + { required: true, message: "第一段上下班标识,今天时间还是隔天不能为空", trigger: "change" }
  220 + ],
  221 + secondFlag: [
  222 + { required: true, message: "第二段开启标识不能为空", trigger: "change" }
  223 + ],
  224 + // 第二段上班下班
  225 + secondSignInTime: [
  226 + { required: true, message: "第二段上班签到时间不能为空", trigger: "blur" }
  227 + ],
  228 + secondSignOutTime: [
  229 + { required: true, message: "第二段下班签退时间不能为空", trigger: "blur" }
  230 + ],
  231 + secondSignTodayTomorrow: [
  232 + { required: true, message: "第二段上下班标识,今天时间还是隔天不能为空", trigger: "change" }
  233 + ]
  234 +
  235 + }
  236 +});
  237 +
  238 +const { queryParams, form, rules } = toRefs(data);
  239 +
  240 +/** 查询线路配置列表 */
  241 +function getList() {
  242 + loading.value = true;
  243 + listConfig(queryParams.value).then(response => {
  244 + configList.value = response.rows;
  245 + total.value = response.total;
  246 + loading.value = false;
  247 + });
  248 +}
  249 +
  250 +// 取消按钮
  251 +function cancel() {
  252 + open.value = false;
  253 + reset();
  254 +}
  255 +
  256 +// 表单重置
  257 +function reset() {
  258 + form.value = {
  259 + id: null,
  260 + lineName: null,
  261 + lpName: null,
  262 + firstSignInTime: null,
  263 + firstSignOutTime: null,
  264 + firstSignTodayTomorrow: null,
  265 + secondFlag: 1,
  266 + secondSignInTime: null,
  267 + secondSignOutTime: null,
  268 + secondSignTodayTomorrow: null,
  269 + createTime: null,
  270 + updateTime: null,
  271 + createBy: null,
  272 + updateBy: null,
  273 + remark: null
  274 + };
  275 + proxy.resetForm("configRef");
  276 +}
  277 +
  278 +/** 搜索按钮操作 */
  279 +function handleQuery() {
  280 + queryParams.value.pageNum = 1;
  281 + getList();
  282 +}
  283 +
  284 +/** 重置按钮操作 */
  285 +function resetQuery() {
  286 + proxy.resetForm("queryRef");
  287 + handleQuery();
  288 +}
  289 +
  290 +// 多选框选中数据
  291 +function handleSelectionChange(selection) {
  292 + ids.value = selection.map(item => item.id);
  293 + single.value = selection.length != 1;
  294 + multiple.value = !selection.length;
  295 +}
  296 +
  297 +/** 新增按钮操作 */
  298 +function handleAdd() {
  299 + reset();
  300 + open.value = true;
  301 + title.value = "添加线路配置";
  302 +}
  303 +
  304 +/** 修改按钮操作 */
  305 +function handleUpdate(row) {
  306 + reset();
  307 + const _id = row.id || ids.value
  308 + getConfig(_id).then(response => {
  309 + form.value = response.data;
  310 + open.value = true;
  311 + title.value = "修改线路配置";
  312 + });
  313 +}
  314 +
  315 +/** 提交按钮 */
  316 +function submitForm() {
  317 + handlerFormValue();
  318 + proxy.$refs["configRef"].validate(valid => {
  319 + if (valid) {
  320 + if (form.value.id != null) {
  321 + updateConfig(form.value).then(response => {
  322 + proxy.$modal.msgSuccess("修改成功");
  323 + open.value = false;
  324 + getList();
  325 + });
  326 + } else {
  327 + addConfig(form.value).then(response => {
  328 + proxy.$modal.msgSuccess("新增成功");
  329 + open.value = false;
  330 + getList();
  331 + });
  332 + }
  333 + }
  334 + });
  335 +}
  336 +
  337 +const handlerFormValue = () => {
  338 + if (form.value.secondFlag === 1) {
  339 + form.value.secondSignInTime = null;
  340 + form.value.secondSignOutTime = null;
  341 + form.value.secondSignTodayTomorrow = null;
  342 + }
  343 +}
  344 +
  345 +/** 删除按钮操作 */
  346 +function handleDelete(row) {
  347 + const _ids = row.id || ids.value;
  348 + proxy.$modal.confirm('是否确认删除线路配置编号为"' + _ids + '"的数据项?').then(function () {
  349 + return delConfig(_ids);
  350 + }).then(() => {
  351 + getList();
  352 + proxy.$modal.msgSuccess("删除成功");
  353 + }).catch(() => { });
  354 +}
  355 +
  356 +/** 导出按钮操作 */
  357 +function handleExport() {
  358 + proxy.download('config/config/export', {
  359 + ...queryParams.value
  360 + }, `config_${new Date().getTime()}.xlsx`)
  361 +}
  362 +
  363 +getList();
  364 +</script>
... ...