Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| af51469121 | |||
| 490e1845f6 |
@@ -29,4 +29,9 @@ public interface ZYBMapper extends BaseMapper<ZYB> {
|
|||||||
* @return 分页对象
|
* @return 分页对象
|
||||||
*/
|
*/
|
||||||
Page<ZYB> selectPageList(Page<ZYB> page, @Param("zyb") ZYB zyb);
|
Page<ZYB> selectPageList(Page<ZYB> page, @Param("zyb") ZYB zyb);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 当前最大序号标识,用于新增时排到列表最前且顺序连续。
|
||||||
|
*/
|
||||||
|
Integer selectMaxXhbs();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -50,8 +50,8 @@
|
|||||||
<include refid="Base_Column_List" />
|
<include refid="Base_Column_List" />
|
||||||
FROM "专业表"
|
FROM "专业表"
|
||||||
WHERE 1=1
|
WHERE 1=1
|
||||||
<if test="zyb.ty != null and zyb.ty != ''">
|
<if test="zyb.ty != null">
|
||||||
AND 停用 = #{zyb.ty},
|
AND 停用 = #{zyb.ty}
|
||||||
</if>
|
</if>
|
||||||
<if test="zyb.zymc != null and zyb.zymc != ''">
|
<if test="zyb.zymc != null and zyb.zymc != ''">
|
||||||
AND 专业名称 LIKE CONCAT('%', #{zyb.zymc}, '%')
|
AND 专业名称 LIKE CONCAT('%', #{zyb.zymc}, '%')
|
||||||
@@ -68,7 +68,11 @@
|
|||||||
<if test="zyb.zyfx != null and zyb.zyfx != ''">
|
<if test="zyb.zyfx != null and zyb.zyfx != ''">
|
||||||
AND 专业方向 LIKE CONCAT('%', #{zyb.zyfx}, '%')
|
AND 专业方向 LIKE CONCAT('%', #{zyb.zyfx}, '%')
|
||||||
</if>
|
</if>
|
||||||
ORDER BY 序号标识
|
ORDER BY 序号标识 DESC NULLS LAST, 启用时间 DESC NULLS LAST
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="selectMaxXhbs" resultType="java.lang.Integer">
|
||||||
|
SELECT MAX("序号标识") FROM "专业表"
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
</mapper>
|
</mapper>
|
||||||
|
|||||||
@@ -6,8 +6,8 @@ import request from '@/utils/request'
|
|||||||
/**
|
/**
|
||||||
* 新增培养方案(专业)
|
* 新增培养方案(专业)
|
||||||
* POST /training/add
|
* POST /training/add
|
||||||
* 请求体(ZYB):zydh/zymc/zydm/pxcc/pxlx 必填;
|
* 请求体(ZYB):zymc/pxcc/pxlx 必填;
|
||||||
* 主键 zydh 需手动传入(留空时后端自动生成 UUID,后端同时置 ty=false、qysj=当前时间)
|
* zydh 留空时按 ZYSEED01 规则生成;zydm 留空时按 ZSY001 规则生成;后端同时置 ty=false、qysj=当前时间
|
||||||
*/
|
*/
|
||||||
export function addTraining(data) {
|
export function addTraining(data) {
|
||||||
return request({
|
return request({
|
||||||
|
|||||||
@@ -151,6 +151,16 @@
|
|||||||
<el-input v-model="dialog.form.zymc" placeholder="请输入专业名称" />
|
<el-input v-model="dialog.form.zymc" placeholder="请输入专业名称" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="专业代号">
|
||||||
|
<el-input v-model="dialog.form.zydh" :disabled="dialog.isEdit" placeholder="可留空,自动生成如 ZYSEED01" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="专业代码">
|
||||||
|
<el-input v-model="dialog.form.zydm" placeholder="可留空,自动生成如 ZSY001" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="专业方向">
|
<el-form-item label="专业方向">
|
||||||
<el-select
|
<el-select
|
||||||
@@ -227,13 +237,13 @@
|
|||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="学年制">
|
<el-form-item label="学年制" prop="xnz">
|
||||||
<el-input v-model="dialog.form.xnz" placeholder="请输入学年制" />
|
<el-input v-model="dialog.form.xnz" placeholder="请输入学年制,如 4" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="学期数">
|
<el-form-item label="学期数" prop="xqs">
|
||||||
<el-input-number v-model="dialog.form.xqs" :min="1" :max="20" controls-position="right" class="w-full" />
|
<el-input-number v-model="dialog.form.xqs" :min="1" :max="20" controls-position="right" class="w-full" @change="onXqsChange" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
@@ -407,7 +417,9 @@ export default {
|
|||||||
rules: {
|
rules: {
|
||||||
zymc: [{ required: true, message: '请输入专业名称', trigger: 'blur' }],
|
zymc: [{ required: true, message: '请输入专业名称', trigger: 'blur' }],
|
||||||
pxcc: [{ required: true, message: '请选择培训层次', trigger: 'change' }],
|
pxcc: [{ required: true, message: '请选择培训层次', trigger: 'change' }],
|
||||||
pxlx: [{ required: true, message: '请选择培训类型', trigger: 'change' }]
|
pxlx: [{ required: true, message: '请选择培训类型', trigger: 'change' }],
|
||||||
|
xnz: [{ required: true, message: '请输入学年制', trigger: 'blur' }],
|
||||||
|
xqs: [{ required: true, message: '请输入学期数', trigger: 'change' }]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -536,6 +548,7 @@ export default {
|
|||||||
this.dialog.title = '新建人才培养方案'
|
this.dialog.title = '新建人才培养方案'
|
||||||
this.dialog.isEdit = false
|
this.dialog.isEdit = false
|
||||||
this.dialog.form = this.createEmptyForm()
|
this.dialog.form = this.createEmptyForm()
|
||||||
|
this.fillGeneratedCodes(this.dialog.form, this.tableData)
|
||||||
this.dialog.visible = true
|
this.dialog.visible = true
|
||||||
this.$nextTick(() => {
|
this.$nextTick(() => {
|
||||||
if (this.$refs.trainingForm) this.$refs.trainingForm.clearValidate()
|
if (this.$refs.trainingForm) this.$refs.trainingForm.clearValidate()
|
||||||
@@ -554,8 +567,8 @@ export default {
|
|||||||
this.$refs.trainingForm.validate(valid => {
|
this.$refs.trainingForm.validate(valid => {
|
||||||
if (!valid) return
|
if (!valid) return
|
||||||
this.dialog.submitting = true
|
this.dialog.submitting = true
|
||||||
const payload = this.cleanPayload(this.dialog.form)
|
|
||||||
const isEdit = this.dialog.isEdit
|
const isEdit = this.dialog.isEdit
|
||||||
|
const payload = this.cleanPayload(this.applyNotNullDefaults(this.dialog.form, isEdit))
|
||||||
const req = isEdit ? updateTraining(payload) : addTraining(payload)
|
const req = isEdit ? updateTraining(payload) : addTraining(payload)
|
||||||
req.then(() => {
|
req.then(() => {
|
||||||
this.$message.success(isEdit ? '修改成功' : '新增成功')
|
this.$message.success(isEdit ? '修改成功' : '新增成功')
|
||||||
@@ -632,6 +645,75 @@ export default {
|
|||||||
},
|
},
|
||||||
|
|
||||||
/* ---------- 工具 ---------- */
|
/* ---------- 工具 ---------- */
|
||||||
|
onXqsChange(xqs) {
|
||||||
|
if (!this.dialog.form.xnz && xqs) {
|
||||||
|
this.dialog.form.xnz = String(Math.max(1, Math.round(xqs / 2)))
|
||||||
|
}
|
||||||
|
},
|
||||||
|
/** 达梦非空列必须带真实值,空串会被当成 NULL;提交前补默认值。 */
|
||||||
|
applyNotNullDefaults(form, isEdit) {
|
||||||
|
const payload = Object.assign({}, form)
|
||||||
|
if (!isEdit) {
|
||||||
|
this.fillGeneratedCodes(payload, this.tableData)
|
||||||
|
}
|
||||||
|
if (!payload.xnz && payload.xqs) {
|
||||||
|
payload.xnz = String(Math.max(1, Math.round(payload.xqs / 2)))
|
||||||
|
}
|
||||||
|
if (!payload.xnz) {
|
||||||
|
payload.xnz = '4'
|
||||||
|
}
|
||||||
|
if (payload.xqs == null) {
|
||||||
|
payload.xqs = Number(payload.xnz) * 2 || 8
|
||||||
|
}
|
||||||
|
const name = payload.zymc || '-'
|
||||||
|
payload.gfmc = payload.gfmc || name
|
||||||
|
payload.zybsh = payload.zybsh || payload.zydh
|
||||||
|
payload.jc = payload.jc || name
|
||||||
|
payload.zyfx = payload.zyfx || '-'
|
||||||
|
payload.zybb = payload.zybb || '-'
|
||||||
|
payload.pxlx2 = payload.pxlx2 || '其他'
|
||||||
|
payload.xylb = payload.xylb || '其他'
|
||||||
|
payload.jclb = payload.jclb || '双节次'
|
||||||
|
payload.xtms = payload.xtms || '军校模式'
|
||||||
|
if (payload.zgzy !== true) {
|
||||||
|
payload.zgzy = false
|
||||||
|
}
|
||||||
|
return payload
|
||||||
|
},
|
||||||
|
fillGeneratedCodes(target, records) {
|
||||||
|
if (!target.zydh) {
|
||||||
|
target.zydh = this.nextSerialFrom(records, 'zydh', 'ZYSEED', 2)
|
||||||
|
}
|
||||||
|
if (!target.zydm) {
|
||||||
|
target.zydm = this.nextSerialFrom(records, 'zydm', 'ZSY', 3)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
nextSerialFrom(records, field, prefix, width) {
|
||||||
|
let max = 0
|
||||||
|
const used = new Set()
|
||||||
|
;(records || []).forEach(row => {
|
||||||
|
const code = row && row[field]
|
||||||
|
if (!code) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
const text = String(code)
|
||||||
|
used.add(text)
|
||||||
|
if (text.indexOf(prefix) !== 0) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
const digits = text.slice(prefix.length)
|
||||||
|
if (/^\d+$/.test(digits)) {
|
||||||
|
max = Math.max(max, parseInt(digits, 10))
|
||||||
|
}
|
||||||
|
})
|
||||||
|
for (let seq = max + 1; seq <= max + 500; seq++) {
|
||||||
|
const candidate = prefix + String(seq).padStart(width, '0')
|
||||||
|
if (!used.has(candidate)) {
|
||||||
|
return candidate
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return prefix + String(max + 1).padStart(width, '0')
|
||||||
|
},
|
||||||
createEmptyForm() {
|
createEmptyForm() {
|
||||||
return {
|
return {
|
||||||
zydh: '',
|
zydh: '',
|
||||||
|
|||||||
@@ -9,9 +9,9 @@ const CompressionPlugin = require('compression-webpack-plugin')
|
|||||||
|
|
||||||
const name = process.env.VUE_APP_TITLE || '教学管理信息系统' // 网页标题
|
const name = process.env.VUE_APP_TITLE || '教学管理信息系统' // 网页标题
|
||||||
|
|
||||||
const baseUrl = 'http://127.10.0.193:8080' // 后端接口
|
const baseUrl = 'http://10.1.1.193:8080' // 后端接口
|
||||||
|
|
||||||
const port = 80 // 固定开发服务器端口,避免多实例端口混乱
|
const port = 1024 // 固定开发服务器端口,避免多实例端口混乱
|
||||||
|
|
||||||
// vue.config.js 配置说明
|
// vue.config.js 配置说明
|
||||||
//官方vue.config.js 参考文档 https://cli.vuejs.org/zh/config/#css-loaderoptions
|
//官方vue.config.js 参考文档 https://cli.vuejs.org/zh/config/#css-loaderoptions
|
||||||
|
|||||||
Reference in New Issue
Block a user