bzkf3 2 gadi atpakaļ
vecāks
revīzija
d70f21a9a0

+ 12 - 0
feature.md

@@ -3,3 +3,15 @@
 
 学校总课表》年级总课表》-教师课表分配-》教师总课表
 数据来源 学校总课表 课程管理下可控制
+
+
+# 7-28
+
+<C:\Users\EDY\Desktop\create-template\src\pages\xdjx\kbgl\jskb\index.vue>
+/xdjx/kbgl_jskb/index
+  'xkj_jsbh': string; // 教师编号
+  'xjj_zgbh':string // 职工编号
+
+<C:\Users\EDY\Desktop\create-template\src\pages\xdjx\jsrkgl\kcgl.vue>
+/xdjx/jsrkgl_kcgl
+ xjj_zgbh 无用

+ 3 - 2
src/pages/xdhq/jyly/jylb.vue

@@ -178,7 +178,7 @@ function queryApi() {
       ...queryForm_Data.value,
       limit: limit.value,
       page: currentPage.value,
-      xhj_jlxz:'1'
+      xhj_jlxz: '1'
     }
   }).then((response: { data: { total_rows: string, page_data: TYPE_TABLE_FIELD[] } }) => {
     const { data } = response
@@ -204,7 +204,7 @@ function editApi(data: Partial<TYPE_TABLE_FIELD>) {
     url: URL_CUT + '/edit',
     data: {
       [TABLE_KEY]: data[TABLE_KEY],
-      [URL_SUBMIT_KEY]: pick(data, ['xhj_zcmc', 'xhj_zcbh', 'xhj_ssbm', 'xhj_jlxz', 'xhj_jlr', 'xhj_jlsj', 'xhj_pzr','xhj_zt']),
+      [URL_SUBMIT_KEY]: pick(data, ['xhj_zcmc', 'xhj_zcbh', 'xhj_ssbm', 'xhj_jlxz', 'xhj_jlr', 'xhj_jlsj', 'xhj_pzr', 'xhj_zt']),
     }
   })
 }
@@ -261,6 +261,7 @@ init()
 const handleTableColBtn_return = async (scope: { row: TYPE_TABLE_FIELD }) => {
   await editApi({
     [TABLE_KEY]: scope.row[TABLE_KEY],
+    xhj_zcbh: scope.row.xhj_zcbh,
     xhj_zt: '3'
   })
   queryApi()

+ 4 - 4
src/pages/xdhq/jyly/lylb.vue

@@ -312,17 +312,17 @@ const handleTableColBtn_return = async (scope: { row: TYPE_TABLE_FIELD }) => {
         <el-table-column prop="xhj_jlr" label="借领人" width="auto" show-overflow-tooltip></el-table-column>
         <el-table-column prop="xhj_jlsj" label="借领时间" width="auto" show-overflow-tooltip></el-table-column>
         <el-table-column prop="xhj_pzr" label="批准人" width="auto" show-overflow-tooltip></el-table-column>
-        <el-table-column label="操作" fixed="right">
+        <!-- <el-table-column label="操作" fixed="right">
           <template #default="scope">
-            <!-- <el-button link :auto-insert-space="false" @click="handleTableColBtn_edit(scope)" type="primary" >编辑</el-button>
+            <el-button link :auto-insert-space="false" @click="handleTableColBtn_edit(scope)" type="primary" >编辑</el-button>
             <el-button link :auto-insert-space="false" @click="handleTableColBtn_audit(scope)" type="primary" >审核</el-button>
             <el-button link :auto-insert-space="false" @click="handleTableColBtn_detail(scope)" type="primary" >详情</el-button>
-            <el-button link :auto-insert-space="false" @click="handleTableColBtn_delete(scope)" type="primary" >删除</el-button> -->
+            <el-button link :auto-insert-space="false" @click="handleTableColBtn_delete(scope)" type="primary" >删除</el-button>
             <el-button link :auto-insert-space="false" @click="handleTableColBtn_return(scope)" type="primary"
               :disabled="scope.row.xhj_zt_option_k === '3'">dev:{{ scope.row.xhj_zt_option_k === '3' ? '已归还' : '归还' }}
             </el-button>
           </template>
-        </el-table-column>
+        </el-table-column> -->
       </el-table>
     </div>
 

+ 3 - 3
src/pages/xdhq/jyly/xclb.vue

@@ -315,7 +315,7 @@ const handleDialogFormBtn_submit_borrow = async (formRefKey: string, extendData?
     //   xhx_zt: '2'
     // })
     handleDialogFormBtn_cancel()
-    // queryApi()
+    queryApi()
   }
 }
 
@@ -401,8 +401,8 @@ const handleTableColBtn_borrow2 = async (row: Partial<TYPE_TABLE_FIELD>) => {
         <el-table-column prop="xhx_spr" label="审批人" width="auto" show-overflow-tooltip></el-table-column>
         <el-table-column label="操作" fixed="right">
           <template #default="scope">
-            <el-button link :auto-insert-space="false" @click="handleTableColBtn_borrow2(scope.row)" type="primary">dev:归还
-            </el-button>
+            <!-- <el-button link :auto-insert-space="false" @click="handleTableColBtn_borrow2(scope.row)" type="primary">dev:归还
+            </el-button> -->
             <!-- <el-button link :auto-insert-space="false" @click="handleTableColBtn_audit(scope)" type="primary" >审核</el-button>
             <el-button link :auto-insert-space="false" @click="handleTableColBtn_detail(scope)" type="primary" >详情</el-button> -->
             <!-- <el-button link :auto-insert-space="false" @click="handleTableColBtn_delete(scope)" type="primary">删除

+ 383 - 0
src/pages/xdhq/sbbx/bxlb.vue

@@ -0,0 +1,383 @@
+<script setup lang="ts">
+import { ref, getCurrentInstance, reactive } from "vue";
+import { useRouter } from "vue-router";
+import request, { download } from '~/utils/request';
+import { pick } from 'lodash-es';
+import { ElMessage } from 'element-plus'
+import type { FormInstance, FormRules } from 'element-plus'
+import type { AxiosRequestConfig } from 'axios'
+
+// #region (constant)
+const TABLE_KEY = 'cs_id'
+const URL_CUT = '/common/sjzd'
+const URL_CUT_REF = ref(URL_CUT)
+const URL_SUBMIT_KEY = URL_CUT.split('/').join('_').slice(1)
+const instance = getCurrentInstance()
+const router = useRouter()
+// #endregion
+
+// #region (variable)
+const loading_table = ref(true)
+let whichDialogSubmit: 'add' | 'edit'
+// #endregion
+
+// #region (type)
+type TYPE_TABLE_FIELD = {
+  [TABLE_KEY]: string;
+  'cs_pid': string; // 上级编号
+  'cs_name': string; // 字典名称
+  'cs_code': string; // 字典编号
+  'cs_sort': string; // 排序编号
+  'cs_level': string; // 字典层级(备用)
+  'cs_path': string; // 字典路径(备用)
+  'cs_zdlx': string; // 字典类型
+  'cs_sfqy': string; // 是否启用
+  'cs_sjlx': string; // 数据类型
+  'cs_sjcd': string; // 数据长度
+  'cs_bz': string; // 备注
+  'cs_pcode': string; // 父级code
+}
+// #endregion
+
+// #region (props)
+// #endregion
+
+// #region (query row)
+const queryForm_Data = ref<Partial<TYPE_TABLE_FIELD> & { keyword?: string }>({})
+
+const handleQueryFormBtn_search = () => {
+  queryApi()
+}
+const handleQueryFormBtn_clear = () => {
+  queryForm_Data.value = {}
+}
+// #endregion
+
+// #region (table selection)
+const multipleSelection = ref<TYPE_TABLE_FIELD[]>([])
+const handleSelectionChange = (val: TYPE_TABLE_FIELD[]) => {
+  multipleSelection.value = val
+}
+// #endregion
+
+// #region (table row)
+const handleTableRowBtn_import = async ({ file }: { file: File }) => {
+  const res = await API_MAP['import']({ file })
+  if (res.code === '1') {
+    queryApi()
+    ElMessage.success(res.msg)
+  }
+}
+const handleTableRowBtn_export = () => {
+  exportApi()
+}
+const handleTableRowBtn_add = () => {
+  whichDialogSubmit = 'add'
+  dialogForm_Data.value = {}
+  dialogVisible_addOrEdit.value = true
+}
+const handleTableRowBtn_delete = async () => {
+  await deleteApi(multipleSelection.value.map((item: TYPE_TABLE_FIELD) => item[TABLE_KEY]))
+  queryApi()
+}
+// #endregion
+
+// #region (table body)
+const tableData = ref<TYPE_TABLE_FIELD[]>([])
+
+const handleTableColBtn_edit = async (scope: { row: TYPE_TABLE_FIELD }) => {
+  whichDialogSubmit = 'edit'
+  const res = await detailApi(scope.row[TABLE_KEY])
+  dialogForm_Data.value = (res.data.one_info)
+  dialogVisible_addOrEdit.value = true
+}
+const handleTableColBtn_delete = async (scope: { row: TYPE_TABLE_FIELD }) => {
+  await deleteApi(scope.row[TABLE_KEY])
+  queryApi()
+}
+// #endregion
+
+// #region (pagination)
+const total = ref(0)
+const limit = ref(10)
+
+const currentPage = ref(1)
+function handleCurrentChange() {
+  queryApi()
+}
+// #endregion
+
+// #region (dialog base)
+const dialogForm_Data = ref<Partial<TYPE_TABLE_FIELD> & { keyword?: string }>({})
+
+const handleDialogFormBtn_submit = async (formRefKey: string, extendData?: Partial<TYPE_TABLE_FIELD>) => {
+  const isValid = await (instance?.refs[formRefKey] as FormInstance).validate((valid: boolean) => valid)
+  if (isValid) {
+    await API_MAP[whichDialogSubmit](<TYPE_TABLE_FIELD>({ ...dialogForm_Data.value, ...extendData, cs_pid: '837' }))
+    handleDialogFormBtn_cancel()
+    queryApi()
+  }
+}
+const handleDialogFormBtn_cancel = (formRefKey?: string) => {
+  dialogVisible_addOrEdit.value = false
+}
+// #endregion
+
+// #region (dialog add/edit)
+const dialogVisible_addOrEdit = ref<boolean>(false)
+
+const dialogForm_Ref_addOrEdit = ref<FormInstance>()
+const dialogForm_Rules_addOrEdit = reactive({
+  'cs_pid': { required: true, message: '上级编号不能为空', trigger: 'submit' },
+  'cs_name': { required: true, message: '报修类别名称不能为空', trigger: 'submit' },
+  'cs_code': { required: true, message: '字典编号不能为空', trigger: 'submit' },
+  'cs_sort': { required: true, message: '排序编号不能为空', trigger: 'submit' },
+  'cs_level': { required: true, message: '字典层级(备用)不能为空', trigger: 'submit' },
+  'cs_path': { required: true, message: '字典路径(备用)不能为空', trigger: 'submit' },
+  'cs_zdlx': { required: true, message: '字典类型不能为空', trigger: 'submit' },
+  'cs_sfqy': { required: true, message: '是否启用不能为空', trigger: 'submit' },
+  'cs_sjlx': { required: true, message: '数据类型不能为空', trigger: 'submit' },
+  'cs_sjcd': { required: true, message: '数据长度不能为空', trigger: 'submit' },
+  'cs_bz': { required: true, message: '备注不能为空', trigger: 'submit' },
+  'cs_pcode': { required: true, message: '父级code不能为空', trigger: 'submit' },
+})
+// #endregion
+
+// #region (request api): 
+function queryApi() {
+  loading_table.value = true
+  return request({
+    url: URL_CUT + '/index',
+    data: {
+      ...queryForm_Data.value,
+      limit: limit.value,
+      page: currentPage.value,
+      cs_pid: 837,
+    }
+  }).then((response: { data: { total_rows: string, page_data: TYPE_TABLE_FIELD[] } }) => {
+    const { data } = response
+    total.value = parseInt(data.total_rows)
+    tableData.value = data.page_data
+    return response
+  }).then(() => {
+    loading_table.value = false
+  })
+}
+
+function addApi(data: TYPE_TABLE_FIELD) {
+  return request({
+    url: URL_CUT + '/add',
+    data: {
+      [URL_SUBMIT_KEY]: data,
+    }
+  })
+}
+
+function editApi(data: Partial<TYPE_TABLE_FIELD>) {
+  return request({
+    url: URL_CUT + '/edit',
+    data: {
+      [TABLE_KEY]: data[TABLE_KEY],
+      [URL_SUBMIT_KEY]: pick(data, ['cs_pid', 'cs_name', 'cs_code', 'cs_sort', 'cs_level', 'cs_path', 'cs_zdlx', 'cs_sfqy', 'cs_sjlx', 'cs_sjcd', 'cs_bz', 'cs_pcode',]),
+    }
+  })
+}
+
+function deleteApi(id: string | string[]) {
+  return request({
+    url: URL_CUT + '/delete',
+    data: {
+      [TABLE_KEY]: id,
+    }
+  })
+}
+
+function detailApi(id: string) {
+  return request({
+    url: URL_CUT + '/detail',
+    data: {
+      [TABLE_KEY]: id,
+    }
+  })
+}
+
+function importApi(data: { file: File }) {
+  return request({
+    $type: 'import',
+    url: URL_CUT + '/import',
+    data
+  } as AxiosRequestConfig)
+}
+
+function exportApi() {
+  return download(URL_CUT + '/index', queryForm_Data.value)
+}
+
+const API_MAP = {
+  query: queryApi,
+  add: addApi,
+  edit: editApi,
+  delete: deleteApi,
+  detail: detailApi,
+  import: importApi,
+  export: exportApi,
+}
+// #endregion
+
+// #region (page init)
+function init() {
+  queryApi()
+}
+init()
+// #endregion
+
+</script>
+
+<template>
+  <div class="card flex-grow flex flex-col">
+    <el-form inline :model="queryForm_Data">
+      <!-- <el-form-item label="关键字"><el-input v-model="queryForm_Data.keyword" ></el-input></el-form-item> -->
+      <!-- <el-form-item label="上级编号">
+        <el-input v-model="queryForm_Data.cs_pid" clearable />
+      </el-form-item> -->
+      <el-form-item label="类别名称">
+        <el-input v-model="queryForm_Data.cs_name" clearable />
+      </el-form-item>
+      <!-- <el-form-item label="字典编号">
+        <el-input v-model="queryForm_Data.cs_code" clearable />
+      </el-form-item>
+      <el-form-item label="排序编号">
+        <el-input v-model="queryForm_Data.cs_sort" clearable />
+      </el-form-item>
+      <el-form-item label="字典层级(备用)">
+        <el-input v-model="queryForm_Data.cs_level" clearable />
+      </el-form-item>
+      <el-form-item label="字典路径(备用)">
+        <el-input v-model="queryForm_Data.cs_path" clearable />
+      </el-form-item>
+      <el-form-item label="字典类型">
+        <el-select v-model="queryForm_Data.cs_zdlx" clearable filterable>
+          <el-option label="自定义" value="1" />
+          <el-option label="地方" value="2" />
+          <el-option label="国标" value="3" />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="是否启用">
+        <el-select v-model="queryForm_Data.cs_sfqy" clearable filterable>
+          <el-option label="未启用" value="0" />
+          <el-option label="已启用" value="1" />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="数据类型">
+        <el-input v-model="queryForm_Data.cs_sjlx" clearable />
+      </el-form-item>
+      <el-form-item label="数据长度">
+        <el-input v-model="queryForm_Data.cs_sjcd" clearable />
+      </el-form-item>
+      <el-form-item label="备注">
+        <el-input v-model="queryForm_Data.cs_bz" clearable />
+      </el-form-item>
+      <el-form-item label="父级code">
+        <el-input v-model="queryForm_Data.cs_pcode" clearable />
+      </el-form-item> -->
+      <el-form-item>
+        <el-button @click="handleQueryFormBtn_search" type="primary">搜索</el-button>
+        <el-button @click="handleQueryFormBtn_clear" type="warning">清空</el-button>
+      </el-form-item>
+    </el-form>
+    <div class="divider"></div>
+    <div>
+      <import-button :url="URL_CUT_REF"></import-button>
+      <el-button @click="handleTableRowBtn_export" type="success">导出</el-button>
+      <el-button @click="handleTableRowBtn_add" type="primary">新增</el-button>
+      <el-button @click="handleTableRowBtn_delete" type="danger">删除</el-button>
+    </div>
+
+    <div class="divider"></div>
+    <div class="flex-auto">
+      <el-table :data="tableData" @selection-change="handleSelectionChange" v-loading="loading_table"
+        element-loading-background="#ffffff70">
+        <el-table-column type="selection"></el-table-column>
+        <el-table-column prop="cs_id" label="编号" width="auto" show-overflow-tooltip></el-table-column>
+        <!-- <el-table-column prop="cs_pid" label="上级编号" width="auto" show-overflow-tooltip></el-table-column> -->
+        <el-table-column prop="cs_name" label="报修类别名称" width="auto" show-overflow-tooltip></el-table-column>
+        <!-- <el-table-column prop="cs_code" label="字典编号" width="auto" show-overflow-tooltip></el-table-column>
+        <el-table-column prop="cs_sort" label="排序编号" width="auto" show-overflow-tooltip></el-table-column>
+        <el-table-column prop="cs_level" label="字典层级(备用)" width="auto" show-overflow-tooltip></el-table-column>
+        <el-table-column prop="cs_path" label="字典路径(备用)" width="auto" show-overflow-tooltip></el-table-column>
+        <el-table-column prop="cs_zdlx" label="字典类型" width="auto" show-overflow-tooltip></el-table-column>
+        <el-table-column prop="cs_sfqy" label="是否启用" width="auto" show-overflow-tooltip></el-table-column>
+        <el-table-column prop="cs_sjlx" label="数据类型" width="auto" show-overflow-tooltip></el-table-column>
+        <el-table-column prop="cs_sjcd" label="数据长度" width="auto" show-overflow-tooltip></el-table-column>
+        <el-table-column prop="cs_bz" label="备注" width="auto" show-overflow-tooltip></el-table-column>
+        <el-table-column prop="cs_pcode" label="父级code" width="auto" show-overflow-tooltip></el-table-column> -->
+        <el-table-column label="操作" fixed="right">
+          <template #default="scope">
+            <el-button link :auto-insert-space="false" @click="handleTableColBtn_edit(scope)" type="primary">编辑
+            </el-button>
+            <el-button link :auto-insert-space="false" @click="handleTableColBtn_delete(scope)" type="primary">删除
+            </el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+    </div>
+
+    <div class="flex justify-end mt-10 py-4">
+      <el-pagination :page-size="limit" v-model:current-page="currentPage" @current-change="handleCurrentChange"
+        background layout="total, prev, pager, next" :total="total" />
+    </div>
+  </div>
+
+  <el-dialog v-model="dialogVisible_addOrEdit" append-to-body destroy-on-close>
+    <el-form :model="dialogForm_Data" ref="dialogForm_Ref_addOrEdit" :rules="dialogForm_Rules_addOrEdit"
+      label-width="120px">
+      <!-- <el-form-item label="上级编号" prop="cs_pid">
+        <el-input v-model="dialogForm_Data.cs_pid" clearable />
+      </el-form-item> -->
+      <el-form-item label="报修类别名称" prop="cs_name">
+        <el-input v-model="dialogForm_Data.cs_name" clearable />
+      </el-form-item>
+      <!-- <el-form-item label="字典编号" prop="cs_code">
+        <el-input v-model="dialogForm_Data.cs_code" clearable />
+      </el-form-item>
+      <el-form-item label="排序编号" prop="cs_sort">
+        <el-input v-model="dialogForm_Data.cs_sort" clearable />
+      </el-form-item>
+      <el-form-item label="字典层级(备用)" prop="cs_level">
+        <el-input v-model="dialogForm_Data.cs_level" clearable />
+      </el-form-item>
+      <el-form-item label="字典路径(备用)" prop="cs_path">
+        <el-input v-model="dialogForm_Data.cs_path" clearable />
+      </el-form-item>
+      <el-form-item label="字典类型" prop="cs_zdlx">
+        <el-radio-group v-model="dialogForm_Data.cs_zdlx">
+          <el-radio label="1">自定义</el-radio>
+          <el-radio label="2">地方</el-radio>
+          <el-radio label="3">国标</el-radio>
+        </el-radio-group>
+      </el-form-item>
+      <el-form-item label="是否启用" prop="cs_sfqy">
+        <el-radio-group v-model="dialogForm_Data.cs_sfqy">
+          <el-radio label="0">未启用</el-radio>
+          <el-radio label="1">已启用</el-radio>
+        </el-radio-group>
+      </el-form-item>
+      <el-form-item label="数据类型" prop="cs_sjlx">
+        <el-input v-model="dialogForm_Data.cs_sjlx" clearable />
+      </el-form-item>
+      <el-form-item label="数据长度" prop="cs_sjcd">
+        <el-input v-model="dialogForm_Data.cs_sjcd" clearable />
+      </el-form-item>
+      <el-form-item label="备注" prop="cs_bz">
+        <el-input v-model="dialogForm_Data.cs_bz" clearable />
+      </el-form-item>
+      <el-form-item label="父级code" prop="cs_pcode">
+        <el-input v-model="dialogForm_Data.cs_pcode" clearable />
+      </el-form-item> -->
+      <div class="flex justify-center">
+        <el-button @click="handleDialogFormBtn_submit('dialogForm_Ref_addOrEdit')" type="primary">提交</el-button>
+        <el-button @click="handleDialogFormBtn_cancel('dialogForm_Ref_addOrEdit')" type="default">取消</el-button>
+      </div>
+    </el-form>
+  </el-dialog>
+</template>

+ 3 - 2
src/pages/xdhq/sbbx/index.vue

@@ -468,14 +468,15 @@ init()
         <el-input v-model="dialogForm_Data.xhs_lb_lj" clearable />
       </el-form-item> -->
       <el-form-item label="报修类型" prop="xhs_bxlb">
-        <el-select v-model="dialogForm_Data.xhs_bxlb" clearable filterable>
+        <!-- <el-select v-model="dialogForm_Data.xhs_bxlb" clearable filterable>
           <el-option label="电脑" value="1" />
           <el-option label="多媒体" value="2" />
           <el-option label="平台软件" value="3" />
           <el-option label="门窗五金" value="4" />
           <el-option label="水暖电气" value="5" />
           <el-option label="其他" value="6" />
-        </el-select>
+        </el-select> -->
+        <remote-dictionary-select to="BXLB" v-model="dialogForm_Data.xhs_bxlb"></remote-dictionary-select>
       </el-form-item>
       <div class="flex justify-center">
         <el-button @click="handleDialogFormBtn_submit('dialogForm_Ref_addOrEdit', { xhs_wxjg: '2' })" type="primary">提交

+ 1 - 1
src/pages/xdhq/xcgl/xcgl/index.vue

@@ -300,7 +300,7 @@ init()
     <div>
       <import-button :url="URL_CUT_REF"></import-button>
       <el-button @click="handleTableRowBtn_export" type="success">导出</el-button>
-      <el-button @click="handleTableRowBtn_add" type="primary">dev:新增</el-button>
+      <!-- <el-button @click="handleTableRowBtn_add" type="primary">dev:新增</el-button> -->
       <el-button @click="handleTableRowBtn_delete" type="danger">删除</el-button>
     </div>
 

+ 6 - 5
src/pages/xdhq/xcgl/xcgllb.vue

@@ -112,13 +112,14 @@ function handleCurrentChange() {
 
 // #region (dialog base)
 const dialogForm_Data = ref<Partial<TYPE_TABLE_FIELD> & { keyword?: string }>({})
-
+const timestamp = ref(Date.now())
 const handleDialogFormBtn_submit = async (formRefKey: string, extendData?: Partial<TYPE_TABLE_FIELD>) => {
   const isValid = await (instance?.refs[formRefKey] as FormInstance).validate((valid: boolean) => valid)
   if (isValid) {
     await API_MAP[whichDialogSubmit](<TYPE_TABLE_FIELD>({ ...dialogForm_Data.value, ...extendData }))
     handleDialogFormBtn_cancel()
-    queryApi()
+    await queryApi()
+    timestamp.value = Date.now()
   }
 }
 const handleDialogFormBtn_cancel = (formRefKey?: string) => {
@@ -309,7 +310,7 @@ const load = (
     <div class="divider"></div>
     <div class="flex-auto">
       <el-table :data="tableData" @selection-change="handleSelectionChange" v-loading="loading_table"
-        element-loading-background="#ffffff70" row-key="xhxl_id" lazy :load="load">
+        element-loading-background="#ffffff70" row-key="xhxl_id" lazy :load="load" :key="timestamp">
         <el-table-column type="selection"></el-table-column>
         <el-table-column prop="xhxl_mc" label="分类名称" width="auto" show-overflow-tooltip></el-table-column>
         <el-table-column prop="xhxl_bm" label="分类编码" width="auto" show-overflow-tooltip></el-table-column>
@@ -360,9 +361,9 @@ const load = (
           <el-radio label="2">否</el-radio>
         </el-radio-group>
       </el-form-item>
-      <el-form-item label="上级编号" prop="xhxl_pid">
+      <!-- <el-form-item label="上级编号" prop="xhxl_pid">
         <el-input v-model="dialogForm_Data.xhxl_pid" clearable />
-      </el-form-item>
+      </el-form-item> -->
       <div class="flex justify-center">
         <el-button @click="handleDialogFormBtn_submit('dialogForm_Ref_addOrEdit')" type="primary">提交</el-button>
         <el-button @click="handleDialogFormBtn_cancel('dialogForm_Ref_addOrEdit')" type="default">取消</el-button>

+ 8 - 6
src/pages/xdjx/jsrkgl/kcgl.vue

@@ -33,6 +33,7 @@ type TYPE_TABLE_FIELD = {
   'subject_name': string; // 学科名称
   'xjk_rkjs': string; // 任课教师
   'xjk_rkjs_json': string; // 任课教师JSON
+  'xjj_zgbh':string // 职工编号
 }
 // #endregion
 
@@ -208,7 +209,7 @@ function editApi(data: Partial<TYPE_TABLE_FIELD>) {
     url: URL_CUT + '/edit',
     data: {
       [TABLE_KEY]: data[TABLE_KEY],
-      [URL_SUBMIT_KEY]: pick(data, ['xjk_kcmc', 'grade_id', 'grade_name', 'class_id', 'class_name', 'subject_id', 'subject_name', 'xjk_rkjs', 'xjk_rkjs_json',]),
+      [URL_SUBMIT_KEY]: pick(data, ['xjk_kcmc', 'grade_id', 'grade_name', 'class_id', 'class_name', 'subject_id', 'subject_name', 'xjk_rkjs', 'xjk_rkjs_json','xjj_zgbh']),
     }
   })
 }
@@ -303,8 +304,8 @@ init()
         <el-table-column prop="class_name" label="班级名称" width="auto" show-overflow-tooltip></el-table-column>
         <!-- <el-table-column prop="subject_id" label="学科编号" width="auto" show-overflow-tooltip></el-table-column> -->
         <el-table-column prop="subject_name" label="学科名称" width="auto" show-overflow-tooltip></el-table-column>
-        <el-table-column prop="xjk_rkjs" label="任课教师" width="auto" show-overflow-tooltip></el-table-column>
-        <!-- <el-table-column prop="xjk_rkjs_json" label="任课教师JSON" width="auto" show-overflow-tooltip></el-table-column> -->
+        <!-- <el-table-column prop="xjk_rkjs" label="任课教师" width="auto" show-overflow-tooltip></el-table-column> -->
+        <el-table-column prop="xjk_rkjs_json" label="任课教师" width="auto" show-overflow-tooltip></el-table-column>
         <el-table-column label="操作" fixed="right">
           <template #default="scope">
             <el-button link :auto-insert-space="false" @click="handleTableColBtn_edit(scope)" type="primary" >编辑</el-button>
@@ -352,11 +353,12 @@ init()
         <remote-select to="subject" v-model="dialogForm_Data.subject_id" v-model:modelName="dialogForm_Data.subject_name"></remote-select>
       </el-form-item>
       <el-form-item label="任课教师" prop="xjk_rkjs">
-        <el-input v-model="dialogForm_Data.xjk_rkjs" type="textarea" />
+        <!-- <el-input v-model="dialogForm_Data.xjk_rkjs" type="textarea" /> -->
+        <remote-multi-select url="/xdbg/jzggl_jsgl/index" :fields="['xjj_zgbh','xjj_xm']"  v-model="dialogForm_Data.xjk_rkjs"  v-model:model-name="dialogForm_Data.xjk_rkjs_json" ></remote-multi-select>
       </el-form-item>
-      <el-form-item label="任课教师JSON" prop="xjk_rkjs_json">
+      <!-- <el-form-item label="任课教师JSON" prop="xjk_rkjs_json">
         <el-input v-model="dialogForm_Data.xjk_rkjs_json" type="textarea" />
-      </el-form-item>
+      </el-form-item> -->
       <div class="flex justify-center">
         <el-button @click="handleDialogFormBtn_submit('dialogForm_Ref_addOrEdit')" type="primary">提交</el-button>
         <el-button @click="handleDialogFormBtn_cancel('dialogForm_Ref_addOrEdit')" type="default">取消</el-button>

+ 4 - 2
src/pages/xdjx/jsrkgl/rkjsgl.vue

@@ -31,6 +31,7 @@ type TYPE_TABLE_FIELD = {
   'grade_name': string; // 年级名称
   'class_id': string; // 班级编号
   'class_name': string; // 班级名称
+  'xjj_zgbh':string // 职工编号
 }
 // #endregion
 
@@ -202,7 +203,7 @@ function editApi(data: Partial<TYPE_TABLE_FIELD>) {
     url: URL_CUT + '/edit',
     data: {
       [TABLE_KEY]: data[TABLE_KEY],
-      [URL_SUBMIT_KEY]: pick(data, ['xjr_jsxm', 'xjr_rjkm_mc', 'xjr_rjkm_json', 'grade_id', 'grade_name', 'class_id', 'class_name',]),
+      [URL_SUBMIT_KEY]: pick(data, ['xjr_jsxm', 'xjr_rjkm_mc', 'xjr_rjkm_json', 'grade_id', 'grade_name', 'class_id', 'class_name','xjj_zgbh']),
     }
   })
 }
@@ -317,7 +318,8 @@ init()
     <el-form :model="dialogForm_Data" ref="dialogForm_Ref_addOrEdit" :rules="dialogForm_Rules_addOrEdit"
       label-width="120px">
       <el-form-item label="教师姓名" prop="xjr_jsxm">
-        <el-input v-model="dialogForm_Data.xjr_jsxm" clearable />
+        <!-- <el-input v-model="dialogForm_Data.xjr_jsxm" clearable /> -->
+        <remote-select url="/xdbg/jzggl_jsgl/index" :fields="['xjj_zgbh','xjj_xm']"  v-model="dialogForm_Data.xjj_zgbh"  v-model:model-name="dialogForm_Data.xjr_jsxm" ></remote-select>
       </el-form-item>
       <el-form-item label="班级名称" prop="class_name">
         <!-- <el-input v-model="dialogForm_Data.class_name" clearable /> -->

+ 425 - 0
src/pages/xdjx/kbgl/bjkb/index.vue

@@ -0,0 +1,425 @@
+<script setup lang="ts">
+import { ref, getCurrentInstance, reactive } from "vue";
+import { useRouter } from "vue-router";
+import request, { download } from '~/utils/request';
+import { pick } from 'lodash-es';
+import { ElMessage } from 'element-plus'
+import type { FormInstance, FormRules } from 'element-plus'
+import type { AxiosRequestConfig } from 'axios'
+
+// #region (constant)
+const TABLE_KEY = 'xkn_id'
+const URL_CUT = '/xdjx/kbgl_njbjkb'
+const URL_CUT_REF = ref(URL_CUT)
+const URL_SUBMIT_KEY = URL_CUT.split('/').join('_').slice(1)
+const instance = getCurrentInstance()
+const router = useRouter()
+// #endregion
+
+// #region (variable)
+const loading_table = ref(true)
+let whichDialogSubmit: 'add' | 'edit'
+// #endregion
+
+// #region (type)
+type TYPE_TABLE_FIELD = {
+  [TABLE_KEY]: string;
+  'xkn_kbmc': string; // 课表名称
+  'team_id': string; // 学期编号
+  'team_name': string; // 学期名称
+  'grade_id': string; // 年级编号
+  'grade_name': string; // 年级名称
+  'class_id': string; // 班级编号
+  'class_name': string; // 班级名称
+  'xkn_scr': string; // 上传人
+  'xkn_kbxq_json': string; // 课表详情JSON
+  'xxk_kblx': string; // 课表类型
+  'xkn_xls': string; // 课表文件
+  'xkn_img': string; // 课表图片
+}
+// #endregion
+
+// #region (props)
+// #endregion
+
+// #region (query row)
+const queryForm_Data = ref<Partial<TYPE_TABLE_FIELD> & { keyword?: string }>({})
+
+const handleQueryFormBtn_search = () => {
+  queryApi()
+}
+const handleQueryFormBtn_clear = () => {
+  queryForm_Data.value = {}
+}
+// #endregion
+
+// #region (table selection)
+const multipleSelection = ref<TYPE_TABLE_FIELD[]>([])
+const handleSelectionChange = (val: TYPE_TABLE_FIELD[]) => {
+  multipleSelection.value = val
+}
+// #endregion
+
+// #region (table row)
+const handleTableRowBtn_import = async ({ file }: { file: File }) => {
+  const res = await API_MAP['import']({ file })
+  if (res.code === '1') {
+    queryApi()
+    ElMessage.success(res.msg)
+  }
+}
+const handleTableRowBtn_export = () => {
+  exportApi()
+}
+const handleTableRowBtn_add = () => {
+  whichDialogSubmit = 'add'
+  dialogForm_Data.value = {}
+  dialogVisible_addOrEdit.value = true
+}
+const handleTableRowBtn_delete = async () => {
+  await deleteApi(multipleSelection.value.map((item: TYPE_TABLE_FIELD) => item[TABLE_KEY]))
+  queryApi()
+}
+// #endregion
+
+// #region (table body)
+const tableData = ref<TYPE_TABLE_FIELD[]>([])
+const DetailName = '-KBGL-NBJKB-DETAIL'
+const DetailParam = 'aid'
+
+const handleTableColBtn_edit = async (scope: { row: TYPE_TABLE_FIELD }) => {
+  whichDialogSubmit = 'edit'
+  const res = await detailApi(scope.row[TABLE_KEY])
+  dialogForm_Data.value = (res.data.one_info)
+  dialogVisible_addOrEdit.value = true
+}
+const handleTableColBtn_audit = (scope: { row: TYPE_TABLE_FIELD }) => {
+  whichDialogSubmit = 'edit'
+  dialogForm_Data.value = pick(scope.row, [`${TABLE_KEY}`, ...Object.keys(dialogForm_Rules_audit)])
+  dialogVisible_audit.value = true
+}
+const handleTableColBtn_detail = (scope: { row: TYPE_TABLE_FIELD }) => {
+  router.push({ name: DetailName, params: { [DetailParam]: scope.row[TABLE_KEY] } })
+}
+const handleTableColBtn_delete = async (scope: { row: TYPE_TABLE_FIELD }) => {
+  await deleteApi(scope.row[TABLE_KEY])
+  queryApi()
+}
+// #endregion
+
+// #region (pagination)
+const total = ref(0)
+const limit = ref(10)
+
+const currentPage = ref(1)
+function handleCurrentChange() {
+  queryApi()
+}
+// #endregion
+
+// #region (dialog base)
+const dialogForm_Data = ref<Partial<TYPE_TABLE_FIELD> & { keyword?: string }>({})
+
+const handleDialogFormBtn_submit = async (formRefKey: string, extendData?: Partial<TYPE_TABLE_FIELD>) => {
+  const isValid = await (instance?.refs[formRefKey] as FormInstance).validate((valid: boolean) => valid)
+  if (isValid) {
+    await API_MAP[whichDialogSubmit](<TYPE_TABLE_FIELD>({ ...dialogForm_Data.value, ...extendData }))
+    handleDialogFormBtn_cancel()
+    queryApi()
+  }
+}
+const handleDialogFormBtn_cancel = (formRefKey?: string) => {
+  dialogVisible_addOrEdit.value = false
+  dialogVisible_audit.value = false
+}
+// #endregion
+
+// #region (dialog add/edit)
+const dialogVisible_addOrEdit = ref<boolean>(false)
+
+const dialogForm_Ref_addOrEdit = ref<FormInstance>()
+const dialogForm_Rules_addOrEdit = reactive({
+  'xkn_kbmc': { required: true, message: '课表名称不能为空', trigger: 'submit' },
+  'team_id': { required: true, message: '学期编号不能为空', trigger: 'submit' },
+  'team_name': { required: true, message: '学期名称不能为空', trigger: 'submit' },
+  'grade_id': { required: true, message: '年级编号不能为空', trigger: 'submit' },
+  'grade_name': { required: true, message: '年级名称不能为空', trigger: 'submit' },
+  'class_id': { required: true, message: '班级编号不能为空', trigger: 'submit' },
+  'class_name': { required: true, message: '班级名称不能为空', trigger: 'submit' },
+  'xkn_scr': { required: true, message: '上传人不能为空', trigger: 'submit' },
+  'xkn_kbxq_json': { required: true, message: '课表详情JSON不能为空', trigger: 'submit' },
+  'xxk_kblx': { required: true, message: '课表类型不能为空', trigger: 'submit' },
+  'xkn_xls': { required: true, message: '课表文件不能为空', trigger: 'submit' },
+  'xkn_img': { required: true, message: '课表图片不能为空', trigger: 'submit' },
+})
+// #endregion
+
+// #region (dialog audit)
+const dialogVisible_audit = ref<boolean>(false)
+
+const dialogForm_Field_audit = reactive<{
+  FLAG: keyof TYPE_TABLE_FIELD,
+  REASON?: keyof TYPE_TABLE_FIELD
+}>({
+  FLAG: 'xkn_id',
+  REASON: 'xkn_id'
+})
+
+const dialogForm_Ref_audit = ref<FormInstance>()
+const dialogForm_Rules_audit = reactive<FormRules>({
+  'xkn_kbmc': { required: true, message: '课表名称不能为空', trigger: 'submit' },
+  'team_id': { required: true, message: '学期编号不能为空', trigger: 'submit' },
+  'team_name': { required: true, message: '学期名称不能为空', trigger: 'submit' },
+  'grade_id': { required: true, message: '年级编号不能为空', trigger: 'submit' },
+  'grade_name': { required: true, message: '年级名称不能为空', trigger: 'submit' },
+  'class_id': { required: true, message: '班级编号不能为空', trigger: 'submit' },
+  'class_name': { required: true, message: '班级名称不能为空', trigger: 'submit' },
+  'xkn_scr': { required: true, message: '上传人不能为空', trigger: 'submit' },
+  'xkn_kbxq_json': { required: true, message: '课表详情JSON不能为空', trigger: 'submit' },
+})
+
+// #endregion
+
+// #region (request api): 
+function queryApi() {
+  loading_table.value = true
+  return request({
+    url: URL_CUT + '/index',
+    data: {
+      ...queryForm_Data.value,
+      limit: limit.value,
+      page: currentPage.value,
+      xxk_kblx: '3'
+    }
+  }).then((response: { data: { total_rows: string, page_data: TYPE_TABLE_FIELD[] } }) => {
+    const { data } = response
+    total.value = parseInt(data.total_rows)
+    tableData.value = data.page_data
+    return response
+  }).then(() => {
+    loading_table.value = false
+  })
+}
+
+function addApi(data: TYPE_TABLE_FIELD) {
+  return request({
+    url: URL_CUT + '/add',
+    data: {
+      [URL_SUBMIT_KEY]: data,
+    }
+  })
+}
+
+function editApi(data: Partial<TYPE_TABLE_FIELD>) {
+  return request({
+    url: URL_CUT + '/edit',
+    data: {
+      [TABLE_KEY]: data[TABLE_KEY],
+      [URL_SUBMIT_KEY]: pick(data, ['xkn_kbmc', 'team_id', 'team_name', 'grade_id', 'grade_name', 'class_id', 'class_name', 'xkn_scr', 'xkn_kbxq_json', 'xxk_kblx', 'xkn_xls', 'xkn_img',]),
+    }
+  })
+}
+
+function deleteApi(id: string | string[]) {
+  return request({
+    url: URL_CUT + '/delete',
+    data: {
+      [TABLE_KEY]: id,
+    }
+  })
+}
+
+function detailApi(id: string) {
+  return request({
+    url: URL_CUT + '/detail',
+    data: {
+      [TABLE_KEY]: id,
+    }
+  })
+}
+
+function importApi(data: { file: File }) {
+  return request({
+    $type: 'import',
+    url: URL_CUT + '/import',
+    data
+  } as AxiosRequestConfig)
+}
+
+function exportApi() {
+  return download(URL_CUT + '/index', queryForm_Data.value)
+}
+
+const API_MAP = {
+  query: queryApi,
+  add: addApi,
+  edit: editApi,
+  delete: deleteApi,
+  detail: detailApi,
+  import: importApi,
+  export: exportApi,
+}
+// #endregion
+
+// #region (page init)
+function init() {
+  queryApi()
+}
+init()
+// #endregion
+
+</script>
+
+<template>
+  <div class="card flex-grow flex flex-col">
+    <el-form inline :model="queryForm_Data">
+      <el-form-item label="关键字">
+        <el-input v-model="queryForm_Data.keyword" clearable />
+      </el-form-item>
+      <!-- <el-form-item label="课表名称"><el-input v-model="queryForm_Data.xkn_kbmc" clearable /></el-form-item> -->
+      <!-- <el-form-item label="学期编号"><el-input v-model="queryForm_Data.team_id" clearable /></el-form-item> -->
+      <!-- <el-form-item label="学期名称"><el-input v-model="queryForm_Data.team_name" clearable /></el-form-item> -->
+      <!-- <el-form-item label="课表类型编号"><el-input v-model="queryForm_Data.xkk_id" clearable /></el-form-item> -->
+      <!-- <el-form-item label="课表类型名称"><el-input v-model="queryForm_Data.xkk_kblxmc" clearable /></el-form-item> -->
+      <!-- <el-form-item label="年级编号"><el-input v-model="queryForm_Data.grade_id" clearable /></el-form-item> -->
+      <!-- <el-form-item label="年级名称"><el-input v-model="queryForm_Data.grade_name" clearable /></el-form-item> -->
+      <!-- <el-form-item label="班级编号"><el-input v-model="queryForm_Data.class_id" clearable /></el-form-item> -->
+      <!-- <el-form-item label="班级名称"><el-input v-model="queryForm_Data.class_name" clearable /></el-form-item> -->
+      <!-- <el-form-item label="上传人"><el-input v-model="queryForm_Data.xkn_scr" clearable /></el-form-item> -->
+      <!-- <el-form-item label="课表详情JSON"><el-input v-model="queryForm_Data.xkn_kbxq_json" clearable /></el-form-item> -->
+      <el-form-item>
+        <el-button @click="handleQueryFormBtn_search" type="primary">搜索</el-button>
+        <el-button @click="handleQueryFormBtn_clear" type="warning">清空</el-button>
+      </el-form-item>
+    </el-form>
+    <div class="divider"></div>
+    <div>
+      <import-button :url="URL_CUT_REF"></import-button>
+      <!-- <el-button @click="handleTableRowBtn_export" type="success">导出</el-button> -->
+      <el-button @click="handleTableRowBtn_add" type="primary">新增</el-button>
+      <!-- <el-button @click="handleTableRowBtn_delete" type="danger">删除</el-button> -->
+    </div>
+
+    <div class="divider"></div>
+    <div class="flex-auto">
+      <el-table :data="tableData" @selection-change="handleSelectionChange" v-loading="loading_table"
+        element-loading-background="#ffffff70">
+        <el-table-column type="selection"></el-table-column>
+        <el-table-column type="index" label="序号" width="60" :index="(i: number) => (currentPage - 1) * limit + i + 1" />
+        <el-table-column prop="xkn_kbmc" label="课表名称" width="auto" show-overflow-tooltip></el-table-column>
+        <!-- <el-table-column prop="team_id" label="学期编号" width="auto" show-overflow-tooltip></el-table-column> -->
+        <el-table-column prop="team_name" label="学期名称" width="auto" show-overflow-tooltip></el-table-column>
+        <!-- <el-table-column prop="xkk_id" label="课表类型编号" width="auto" show-overflow-tooltip></el-table-column> -->
+        <!-- <el-table-column prop="xkk_kblxmc" label="课表类型名称" width="auto" show-overflow-tooltip></el-table-column> -->
+        <!-- <el-table-column prop="grade_id" label="年级编号" width="auto" show-overflow-tooltip></el-table-column> -->
+        <el-table-column prop="grade_name" label="年级名称" width="auto" show-overflow-tooltip></el-table-column>
+        <!-- <el-table-column prop="class_id" label="班级编号" width="auto" show-overflow-tooltip></el-table-column> -->
+        <el-table-column prop="class_name" label="班级名称" width="auto" show-overflow-tooltip></el-table-column>
+        <el-table-column prop="xkn_scr" label="上传人" width="auto" show-overflow-tooltip></el-table-column>
+        <!-- <el-table-column prop="xkn_kbxq_json" label="课表详情JSON" width="auto" show-overflow-tooltip></el-table-column> -->
+        <el-table-column prop="xxk_kblx" label="课表类型" width="auto" show-overflow-tooltip></el-table-column>
+        <!-- <el-table-column prop="xkn_xls" label="课表文件" width="auto" show-overflow-tooltip></el-table-column>
+        <el-table-column prop="xkn_img" label="课表图片" width="auto" show-overflow-tooltip></el-table-column> -->
+        <el-table-column label="操作" fixed="right">
+          <template #default="scope">
+            <!-- <el-button link :auto-insert-space="false" @click="handleTableColBtn_edit(scope)" type="primary" >编辑</el-button> -->
+            <!-- <el-button link :auto-insert-space="false" @click="handleTableColBtn_audit(scope)" type="primary" >审核</el-button> -->
+            <el-button link :auto-insert-space="false" @click="handleTableColBtn_detail(scope)" type="primary">查看课表
+            </el-button>
+            <el-button link :auto-insert-space="false" @click="handleTableColBtn_delete(scope)" type="primary">删除
+            </el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+    </div>
+
+    <div class="flex justify-end mt-10 py-4">
+      <el-pagination :page-size="limit" v-model:current-page="currentPage" @current-change="handleCurrentChange"
+        background layout="total, prev, pager, next" :total="total" />
+    </div>
+  </div>
+
+  <el-dialog v-model="dialogVisible_addOrEdit" append-to-body destroy-on-close>
+    <el-form :model="dialogForm_Data" ref="dialogForm_Ref_addOrEdit" :rules="dialogForm_Rules_addOrEdit"
+      label-width="120px">
+      <el-form-item label="课表名称" prop="xkn_kbmc">
+        <el-input v-model="dialogForm_Data.xkn_kbmc" clearable />
+      </el-form-item>
+      <!-- <el-form-item label="课表类型编号" prop="xkk_id">
+        <el-input v-model="dialogForm_Data.xkk_id" clearable />
+      </el-form-item>
+      <el-form-item label="课表类型名称" prop="xkk_kblxmc">
+        <el-input v-model="dialogForm_Data.xkk_kblxmc" clearable />
+      </el-form-item> -->
+      <!-- <el-form-item label="学期编号" prop="team_id">
+        <el-input v-model="dialogForm_Data.team_id" clearable />
+      </el-form-item> -->
+      <!-- <el-form-item label="学期名称" prop="team_name">
+        <remote-select to="team" v-model="dialogForm_Data.team_id" v-model:modelName="dialogForm_Data.team_name"
+          clearable />
+      </el-form-item> -->
+
+      <!-- <el-form-item label="年级编号" prop="grade_id">
+        <el-input v-model="dialogForm_Data.grade_id" clearable />
+      </el-form-item> -->
+      <!-- <el-form-item label="年级名称" prop="grade_name">
+        <remote-select to="grade" v-model="dialogForm_Data.grade_id" v-model:modelName="dialogForm_Data.grade_name"
+          clearable />
+      </el-form-item> -->
+      <!-- <el-form-item label="班级编号" prop="class_id">
+        <el-input v-model="dialogForm_Data.class_id" clearable />
+      </el-form-item> -->
+      <el-form-item label="班级名称" prop="class_name">
+        <!-- <el-input v-model="dialogForm_Data.class_name" clearable /> -->
+        <remote-cascader-class focusing v-model="dialogForm_Data.class_id"
+          v-model:modelName="dialogForm_Data.class_name" v-model:teamId="dialogForm_Data.team_id"
+          v-model:teamName="dialogForm_Data.team_name" v-model:gradeId="dialogForm_Data.grade_id"
+          v-model:gradeName="dialogForm_Data.grade_name" clearable />
+      </el-form-item>
+      <el-form-item label="上传人" prop="xkn_scr">
+        <el-input v-model="dialogForm_Data.xkn_scr" clearable />
+      </el-form-item>
+      <!-- <el-form-item label="课表详情JSON" prop="xkn_kbxq_json">
+        <el-input v-model="dialogForm_Data.xkn_kbxq_json" clearable />
+      </el-form-item> -->
+      <!-- <el-form-item label="课表类型" prop="xxk_kblx">
+        <el-select v-model="dialogForm_Data.xxk_kblx" >
+          <el-option label="学校总课表" value="1" />
+          <el-option label="年级课表" value="2" />
+          <el-option label="班级课表" value="3" />
+          <el-option label="教师课表" value="4" />
+          <el-option label="学生课表" value="5" />
+        </el-select>
+      </el-form-item> -->
+      <el-form-item label="课表文件" prop="xkn_xls">
+        <file-upload v-model:part="dialogForm_Data.xkn_xls" />
+      </el-form-item>
+      <el-form-item label="课表图片" prop="xkn_img">
+        <file-upload v-model:part="dialogForm_Data.xkn_img" />
+      </el-form-item>
+      <div class="flex justify-center">
+        <el-button @click="handleDialogFormBtn_submit('dialogForm_Ref_addOrEdit', { xxk_kblx: '3' })" type="primary">提交
+        </el-button>
+        <el-button @click="handleDialogFormBtn_cancel('dialogForm_Ref_addOrEdit')" type="default">取消</el-button>
+      </div>
+    </el-form>
+  </el-dialog>
+
+  <el-dialog v-model="dialogVisible_audit" append-to-body destroy-on-close>
+    <el-form :model="dialogForm_Data" ref="dialogForm_Ref_audit" :rules="dialogForm_Rules_audit" label-width="120px">
+      <el-form-item label="状态">
+        <el-radio-group v-model="dialogForm_Data[dialogForm_Field_audit.FLAG]">
+          <el-radio label="1">通过</el-radio>
+          <el-radio label="2">未通过</el-radio>
+        </el-radio-group>
+      </el-form-item>
+      <!-- <el-form-item label="原因" v-show="dialogForm_Data[dialogForm_Field_audit.FLAG] === '1'">
+        <el-input type="textarea" v-model="dialogForm_Data[dialogForm_Field_audit.REASON]" :rows="5" />
+      </el-form-item> -->
+      <div class="flex justify-center">
+        <el-button @click="handleDialogFormBtn_submit('dialogForm_Ref_audit')" type="primary">提交</el-button>
+        <el-button @click="handleDialogFormBtn_cancel('dialogForm_Ref_audit')" type="default">取消</el-button>
+      </div>
+    </el-form>
+  </el-dialog>
+</template>

+ 4 - 2
src/pages/xdjx/kbgl/jsbjrk.vue

@@ -30,6 +30,7 @@ type TYPE_TABLE_FIELD = {
   'class_id': string; // 任教班级编号
   'class_name': string; // 任教班级名称
   'xkj_sf': string; // 身份
+  'xjj_zgbh':string // 职工编号
 }
 // #endregion
 
@@ -199,7 +200,7 @@ function editApi(data: Partial<TYPE_TABLE_FIELD>) {
     url: URL_CUT + '/edit',
     data: {
       [TABLE_KEY]: data[TABLE_KEY],
-      [URL_SUBMIT_KEY]: pick(data, ['xkj_jsxm', 'grade_id', 'grade_name', 'class_id', 'class_name', 'xkj_sf',]),
+      [URL_SUBMIT_KEY]: pick(data, ['xkj_jsxm', 'grade_id', 'grade_name', 'class_id', 'class_name', 'xkj_sf','xjj_zgbh']),
     }
   })
 }
@@ -328,7 +329,8 @@ init()
     <el-form :model="dialogForm_Data" ref="dialogForm_Ref_addOrEdit" :rules="dialogForm_Rules_addOrEdit"
       label-width="120px">
       <el-form-item label="教师姓名" prop="xkj_jsxm">
-        <el-input v-model="dialogForm_Data.xkj_jsxm" clearable />
+        <!-- <el-input v-model="dialogForm_Data.xkj_jsxm" clearable /> -->
+        <remote-select url="/xdbg/jzggl_jsgl/index" :fields="['xjj_zgbh','xjj_xm']"  v-model="dialogForm_Data.xjj_zgbh"  v-model:model-name="dialogForm_Data.xkj_jsxm"></remote-select>
       </el-form-item>
       <!-- <el-form-item label="任教年级编号" prop="grade_id"><el-input v-model="dialogForm_Data.grade_id" clearable /></el-form-item>
       <el-form-item label="任教年级名称" prop="grade_name"><el-input v-model="dialogForm_Data.grade_name" clearable /></el-form-item>

+ 38 - 20
src/pages/xdjx/kbgl/jskb/detail.vue

@@ -1,6 +1,7 @@
 <script setup lang="ts">
 import { ref } from "vue";
 import request, { download } from '~/utils/request';
+import { handleImageUrl } from '~/utils/index';
 
 // #region (constant)
 const TABLE_KEY = 'xkj_id'
@@ -14,10 +15,12 @@ type TYPE_TABLE_FIELD = {
   'xkj_kbmc': string; // 课表名称
   'team_id': string; // 学期编号
   'team_name': string; // 学期名称
-  'xkk_id': string; // 课表类型编号
-  'xkk_kblxmc': string; // 课表类型名称
   'xkj_scr': string; // 上传人
   'xkj_kbxq_json': string; // 课表详情JSON
+  'xxk_kblx': string; // 课表类型
+  'xkj_xls': string; // 课表文件
+  'xkj_jsbh': string; // 教师编号
+  'xkj_img': string; // 课表图片
 }
 // #endregion
 
@@ -56,41 +59,56 @@ init()
 <template>
   <div :loading="loading">
     <template v-if="detail_Data">
-      <div class="flex">
-        <div>教师名称</div>
-        <div>{{detail_Data.xkj_jsmc}}</div>
+
+      <div class="flex text-2xl">
+        <!-- <div>课表名称</div> -->
+        <div>{{ detail_Data.xkj_kbmc }}</div>
       </div>
-      <div class="flex">
-        <div>课表名称</div>
-        <div>{{detail_Data.xkj_kbmc}}</div>
+      <!-- <div class="flex">
+        <div>教师名称</div>
+        <div>{{ detail_Data.xkj_jsmc }}</div>
       </div>
       <div class="flex">
         <div>学期编号</div>
-        <div>{{detail_Data.team_id}}</div>
+        <div>{{ detail_Data.team_id }}</div>
       </div>
       <div class="flex">
         <div>学期名称</div>
-        <div>{{detail_Data.team_name}}</div>
+        <div>{{ detail_Data.team_name }}</div>
       </div>
       <div class="flex">
-        <div>课表类型编号</div>
-        <div>{{detail_Data.xkk_id}}</div>
+        <div>上传人</div>
+        <div>{{ detail_Data.xkj_scr }}</div>
       </div>
       <div class="flex">
-        <div>课表类型名称</div>
-        <div>{{detail_Data.xkk_kblxmc}}</div>
+        <div>课表详情JSON</div>
+        <div>{{ detail_Data.xkj_kbxq_json }}</div>
       </div>
       <div class="flex">
-        <div>上传人</div>
-        <div>{{detail_Data.xkj_scr}}</div>
+        <div>课表类型</div>
+        <div>{{ detail_Data.xxk_kblx }}</div>
       </div>
       <div class="flex">
-        <div>课表详情JSON</div>
-        <div>{{detail_Data.xkj_kbxq_json}}</div>
+        <div>课表文件</div>
+        <div>{{ detail_Data.xkj_xls }}</div>
+      </div>
+      <div class="flex">
+        <div>教师编号</div>
+        <div>{{ detail_Data.xkj_jsbh }}</div>
+      </div>
+      <div class="flex">
+        <div>课表图片</div>
+        <div>{{ detail_Data.xkj_img }}</div>
+      </div> -->
+       <div class="flex my-4">
+        <div>课表文件:</div>
+        <file-link :file="detail_Data.xkj_xls" />
+      </div>
+
+      <div>
+        <img class="w-full" :src="handleImageUrl(detail_Data?.xkj_img)" alt="">
       </div>
     </template>
   </div>
 
 </template>
-
-

+ 62 - 84
src/pages/xdjx/kbgl/jskb/index.vue

@@ -28,10 +28,13 @@ type TYPE_TABLE_FIELD = {
   'xkj_kbmc': string; // 课表名称
   'team_id': string; // 学期编号
   'team_name': string; // 学期名称
-  'xkk_id': string; // 课表类型编号
-  'xkk_kblxmc': string; // 课表类型名称
   'xkj_scr': string; // 上传人
   'xkj_kbxq_json': string; // 课表详情JSON
+  'xxk_kblx': string; // 课表类型
+  'xkj_xls': string; // 课表文件
+  'xkj_jsbh': string; // 教师编号
+  'xkj_img': string; // 课表图片
+  'xjj_zgbh':string // 职工编号
 }
 // #endregion
 
@@ -89,18 +92,13 @@ const handleTableColBtn_edit = async (scope: { row: TYPE_TABLE_FIELD }) => {
   dialogForm_Data.value = (res.data.one_info)
   dialogVisible_addOrEdit.value = true
 }
-const handleTableColBtn_audit = (scope: { row: TYPE_TABLE_FIELD }) => {
-  whichDialogSubmit = 'edit'
-  dialogForm_Data.value = pick(scope.row, [`${TABLE_KEY}`, ...Object.keys(dialogForm_Rules_audit)])
-  dialogVisible_audit.value = true
-}
-const handleTableColBtn_detail = (scope: { row: TYPE_TABLE_FIELD }) => {
-  router.push({ name: DetailName, params: { [DetailParam]: scope.row[TABLE_KEY] } })
-}
 const handleTableColBtn_delete = async (scope: { row: TYPE_TABLE_FIELD }) => {
   await deleteApi(scope.row[TABLE_KEY])
   queryApi()
 }
+const handleTableColBtn_detail = (scope: { row: TYPE_TABLE_FIELD }) => {
+  router.push({ name: DetailName, params: { [DetailParam]: scope.row[TABLE_KEY] } })
+}
 // #endregion
 
 // #region (pagination)
@@ -116,17 +114,17 @@ function handleCurrentChange() {
 // #region (dialog base)
 const dialogForm_Data = ref<Partial<TYPE_TABLE_FIELD> & { keyword?: string }>({})
 
-const handleDialogFormBtn_submit = async (formRefKey: string,extendData?:Partial<TYPE_TABLE_FIELD>) => {
+const handleDialogFormBtn_submit = async (formRefKey: string, extendData?: Partial<TYPE_TABLE_FIELD>) => {
   const isValid = await (instance?.refs[formRefKey] as FormInstance).validate((valid: boolean) => valid)
   if (isValid) {
-    await API_MAP[whichDialogSubmit](<TYPE_TABLE_FIELD>({...dialogForm_Data.value,...extendData}))
+    await API_MAP[whichDialogSubmit](<TYPE_TABLE_FIELD>({ ...dialogForm_Data.value, ...extendData }))
     handleDialogFormBtn_cancel()
     queryApi()
   }
 }
 const handleDialogFormBtn_cancel = (formRefKey?: string) => {
   dialogVisible_addOrEdit.value = false
-  dialogVisible_audit.value = false
+  // dialogVisible_audit.value = false
 }
 // #endregion
 
@@ -139,36 +137,13 @@ const dialogForm_Rules_addOrEdit = reactive({
   'xkj_kbmc': { required: true, message: '课表名称不能为空', trigger: 'submit' },
   'team_id': { required: true, message: '学期编号不能为空', trigger: 'submit' },
   'team_name': { required: true, message: '学期名称不能为空', trigger: 'submit' },
-  'xkk_id': { required: true, message: '课表类型编号不能为空', trigger: 'submit' },
-  'xkk_kblxmc': { required: true, message: '课表类型名称不能为空', trigger: 'submit' },
-  'xkj_scr': { required: true, message: '上传人不能为空', trigger: 'submit' },
-  'xkj_kbxq_json': { required: true, message: '课表详情JSON不能为空', trigger: 'submit' },
-})
-// #endregion
-
-// #region (dialog audit)
-const dialogVisible_audit = ref<boolean>(false)
-
-const dialogForm_Field_audit = reactive<{
-  FLAG: keyof TYPE_TABLE_FIELD,
-  REASON?: keyof TYPE_TABLE_FIELD
-}>({
-  FLAG: 'xkj_id',
-  REASON: 'xkj_id'
-})
-
-const dialogForm_Ref_audit = ref<FormInstance>()
-const dialogForm_Rules_audit = reactive<FormRules>({
-  'xkj_jsmc': { required: true, message: '教师名称不能为空', trigger: 'submit' },
-  'xkj_kbmc': { required: true, message: '课表名称不能为空', trigger: 'submit' },
-  'team_id': { required: true, message: '学期编号不能为空', trigger: 'submit' },
-  'team_name': { required: true, message: '学期名称不能为空', trigger: 'submit' },
-  'xkk_id': { required: true, message: '课表类型编号不能为空', trigger: 'submit' },
-  'xkk_kblxmc': { required: true, message: '课表类型名称不能为空', trigger: 'submit' },
   'xkj_scr': { required: true, message: '上传人不能为空', trigger: 'submit' },
   'xkj_kbxq_json': { required: true, message: '课表详情JSON不能为空', trigger: 'submit' },
+  'xxk_kblx': { required: true, message: '课表类型不能为空', trigger: 'submit' },
+  'xkj_xls': { required: true, message: '课表文件不能为空', trigger: 'submit' },
+  'xkj_jsbh': { required: true, message: '教师编号不能为空', trigger: 'submit' },
+  'xkj_img': { required: true, message: '课表图片不能为空', trigger: 'submit' },
 })
-
 // #endregion
 
 // #region (request api): 
@@ -205,7 +180,7 @@ function editApi(data: Partial<TYPE_TABLE_FIELD>) {
     url: URL_CUT + '/edit',
     data: {
       [TABLE_KEY]: data[TABLE_KEY],
-      [URL_SUBMIT_KEY]: pick(data, ['xkj_jsmc', 'xkj_kbmc', 'team_id', 'team_name', 'xkk_id', 'xkk_kblxmc', 'xkj_scr', 'xkj_kbxq_json',]),
+      [URL_SUBMIT_KEY]: pick(data, ['xkj_jsmc', 'xkj_kbmc', 'team_id', 'team_name', 'xkj_scr', 'xkj_kbxq_json', 'xxk_kblx', 'xkj_xls', 'xkj_jsbh', 'xkj_img','xjj_zgbh']),
     }
   })
 }
@@ -264,16 +239,18 @@ init()
   <div class="card flex-grow flex flex-col">
     <el-form inline :model="queryForm_Data">
       <el-form-item label="关键字">
-        <el-input v-model="queryForm_Data.keyword" clearable />
+        <el-input v-model="queryForm_Data.keyword"></el-input>
       </el-form-item>
-      <!-- <el-form-item label="教师名称"><el-input v-model="queryForm_Data.xkj_jsmc" clearable /></el-form-item> -->
-      <!-- <el-form-item label="课表名称"><el-input v-model="queryForm_Data.xkj_kbmc" clearable /></el-form-item> -->
-      <!-- <el-form-item label="学期编号"><el-input v-model="queryForm_Data.team_id" clearable /></el-form-item> -->
-      <!-- <el-form-item label="学期名称"><el-input v-model="queryForm_Data.team_name" clearable /></el-form-item> -->
-      <!-- <el-form-item label="课表类型编号"><el-input v-model="queryForm_Data.xkk_id" clearable /></el-form-item> -->
-      <!-- <el-form-item label="课表类型名称"><el-input v-model="queryForm_Data.xkk_kblxmc" clearable /></el-form-item> -->
-      <!-- <el-form-item label="上传人"><el-input v-model="queryForm_Data.xkj_scr" clearable /></el-form-item> -->
-      <!-- <el-form-item label="课表详情JSON"><el-input v-model="queryForm_Data.xkj_kbxq_json" clearable /></el-form-item> -->
+      <!-- <el-form-item label="教师名称"><el-input v-model="queryForm_Data.xkj_jsmc" clearable /></el-form-item>
+      <el-form-item label="课表名称"><el-input v-model="queryForm_Data.xkj_kbmc" clearable /></el-form-item>
+      <el-form-item label="学期编号"><el-input v-model="queryForm_Data.team_id" clearable /></el-form-item>
+      <el-form-item label="学期名称"><el-input v-model="queryForm_Data.team_name" clearable /></el-form-item>
+      <el-form-item label="上传人"><el-input v-model="queryForm_Data.xkj_scr" clearable /></el-form-item>
+      <el-form-item label="课表详情JSON"><el-input v-model="queryForm_Data.xkj_kbxq_json" clearable /></el-form-item>
+      <el-form-item label="课表类型"><el-select v-model="queryForm_Data.xxk_kblx" clearable filterable ><el-option label="学校总课表" value="1" /><el-option label="年级课表" value="2" /><el-option label="班级课表" value="3" /><el-option label="教师课表" value="4" /><el-option label="学生课表" value="5" /></el-select></el-form-item>
+      <el-form-item label="课表文件"><file-upload v-model:part="queryForm_Data.xkj_xls" /></el-form-item>
+      <el-form-item label="教师编号"><el-input v-model="queryForm_Data.xkj_jsbh" clearable /></el-form-item>
+      <el-form-item label="课表图片"><file-upload v-model:part="queryForm_Data.xkj_img" /></el-form-item> -->
       <el-form-item>
         <el-button @click="handleQueryFormBtn_search" type="primary">搜索</el-button>
         <el-button @click="handleQueryFormBtn_clear" type="warning">清空</el-button>
@@ -283,7 +260,7 @@ init()
     <div>
       <import-button :url="URL_CUT_REF"></import-button>
       <!-- <el-button @click="handleTableRowBtn_export" type="success">导出</el-button> -->
-      <!-- <el-button @click="handleTableRowBtn_add" type="primary">新增</el-button> -->
+      <el-button @click="handleTableRowBtn_add" type="primary">新增</el-button>
       <!-- <el-button @click="handleTableRowBtn_delete" type="danger">删除</el-button> -->
     </div>
 
@@ -291,23 +268,26 @@ init()
     <div class="flex-auto">
       <el-table :data="tableData" @selection-change="handleSelectionChange" v-loading="loading_table"
         element-loading-background="#ffffff70">
-        <el-table-column type="selection"></el-table-column><el-table-column type="index" label="序号" width="60" :index="(i: number) => (currentPage - 1) * limit + i + 1" />
+        <el-table-column type="selection"></el-table-column>
+        <el-table-column type="index" label="序号" width="60" :index="(i: number) => (currentPage - 1) * limit + i + 1" />
         <el-table-column prop="xkj_jsmc" label="教师名称" width="auto" show-overflow-tooltip></el-table-column>
         <el-table-column prop="xkj_kbmc" label="课表名称" width="auto" show-overflow-tooltip></el-table-column>
         <!-- <el-table-column prop="team_id" label="学期编号" width="auto" show-overflow-tooltip></el-table-column> -->
         <el-table-column prop="team_name" label="学期名称" width="auto" show-overflow-tooltip></el-table-column>
-        <!-- <el-table-column prop="xkk_id" label="课表类型编号" width="auto" show-overflow-tooltip></el-table-column> -->
-        <el-table-column prop="xkk_kblxmc" label="课表类型名称" width="auto" show-overflow-tooltip></el-table-column>
         <!-- <el-table-column prop="xkj_scr" label="上传人" width="auto" show-overflow-tooltip></el-table-column> -->
         <!-- <el-table-column prop="xkj_kbxq_json" label="课表详情JSON" width="auto" show-overflow-tooltip></el-table-column> -->
+        <el-table-column prop="xxk_kblx" label="课表类型" width="auto" show-overflow-tooltip></el-table-column>
+        <!-- <el-table-column prop="xkj_xls" label="课表文件" width="auto" show-overflow-tooltip></el-table-column> -->
+        <!-- <el-table-column prop="xkj_jsbh" label="教师编号" width="auto" show-overflow-tooltip></el-table-column> -->
+        <!-- <el-table-column prop="xkj_img" label="课表图片" width="auto" show-overflow-tooltip></el-table-column> -->
         <el-table-column label="操作" fixed="right">
           <template #default="scope">
             <!-- <el-button link :auto-insert-space="false" @click="handleTableColBtn_edit(scope)" type="primary" >编辑</el-button> -->
-            <!-- <el-button link :auto-insert-space="false" @click="handleTableColBtn_audit(scope)" type="primary" >审核</el-button> -->
-            <el-button link :auto-insert-space="false" @click="handleTableColBtn_detail(scope)" type="primary" >查看课表
+            <el-button link :auto-insert-space="false" @click="handleTableColBtn_detail(scope)" type="primary">查看课表
             </el-button>
-            <el-button link :auto-insert-space="false" @click="handleTableColBtn_delete(scope)" type="primary" >删除
+            <el-button link :auto-insert-space="false" @click="handleTableColBtn_delete(scope)" type="primary">删除
             </el-button>
+
           </template>
         </el-table-column>
       </el-table>
@@ -322,8 +302,12 @@ init()
   <el-dialog v-model="dialogVisible_addOrEdit" append-to-body destroy-on-close>
     <el-form :model="dialogForm_Data" ref="dialogForm_Ref_addOrEdit" :rules="dialogForm_Rules_addOrEdit"
       label-width="120px">
+      <!-- <el-form-item label="教师编号" prop="xkj_jsbh">
+        <el-input v-model="dialogForm_Data.xkj_jsbh" clearable />
+      </el-form-item> -->
       <el-form-item label="教师名称" prop="xkj_jsmc">
-        <el-input v-model="dialogForm_Data.xkj_jsmc" clearable />
+        <!-- <el-input v-model="dialogForm_Data.xkj_jsmc" clearable /> -->
+        <remote-select url="/xdbg/jzggl_jsgl/index" :fields="['xjj_zgbh','xjj_xm']"  v-model="dialogForm_Data.xjj_zgbh"  v-model:model-name="dialogForm_Data.xkj_jsmc" ></remote-select>
       </el-form-item>
       <el-form-item label="课表名称" prop="xkj_kbmc">
         <el-input v-model="dialogForm_Data.xkj_kbmc" clearable />
@@ -333,41 +317,35 @@ init()
       </el-form-item> -->
       <el-form-item label="学期名称" prop="team_name">
         <!-- <el-input v-model="dialogForm_Data.team_name" clearable /> -->
-        <remote-select to="team" v-model="dialogForm_Data.team_id"  v-model:modelName="dialogForm_Data.team_name" ></remote-select>
-      </el-form-item>
-      <el-form-item label="课表类型编号" prop="xkk_id">
-        <el-input v-model="dialogForm_Data.xkk_id" clearable />
-      </el-form-item>
-      <el-form-item label="课表类型名称" prop="xkk_kblxmc">
-        <el-input v-model="dialogForm_Data.xkk_kblxmc" clearable />
+        <remote-select to="team" v-model="dialogForm_Data.team_id" v-model:modelName="dialogForm_Data.team_name">
+        </remote-select>
       </el-form-item>
       <el-form-item label="上传人" prop="xkj_scr">
         <el-input v-model="dialogForm_Data.xkj_scr" clearable />
       </el-form-item>
-      <el-form-item label="课表详情JSON" prop="xkj_kbxq_json">
+      <!-- <el-form-item label="课表详情JSON" prop="xkj_kbxq_json">
         <el-input v-model="dialogForm_Data.xkj_kbxq_json" clearable />
+      </el-form-item> -->
+      <!-- <el-form-item label="课表类型" prop="xxk_kblx">
+        <el-select v-model="dialogForm_Data.xxk_kblx" clearable filterable>
+          <el-option label="学校总课表" value="1" />
+          <el-option label="年级课表" value="2" />
+          <el-option label="班级课表" value="3" />
+          <el-option label="教师课表" value="4" />
+          <el-option label="学生课表" value="5" />
+        </el-select>
+      </el-form-item> -->
+      <el-form-item label="课表文件" prop="xkj_xls">
+        <file-upload v-model:part="dialogForm_Data.xkj_xls" />
       </el-form-item>
-      <div class="flex justify-center">
-        <el-button @click="handleDialogFormBtn_submit('dialogForm_Ref_addOrEdit')" type="primary">提交</el-button>
-        <el-button @click="handleDialogFormBtn_cancel('dialogForm_Ref_addOrEdit')" type="default">取消</el-button>
-      </div>
-    </el-form>
-  </el-dialog>
 
-  <el-dialog v-model="dialogVisible_audit" append-to-body destroy-on-close>
-    <el-form :model="dialogForm_Data" ref="dialogForm_Ref_audit" :rules="dialogForm_Rules_audit" label-width="120px">
-      <el-form-item label="状态">
-        <el-radio-group v-model="dialogForm_Data[dialogForm_Field_audit.FLAG]">
-          <el-radio label="1">通过</el-radio>
-          <el-radio label="2">未通过</el-radio>
-        </el-radio-group>
+      <el-form-item label="课表图片" prop="xkj_img">
+        <file-upload v-model:part="dialogForm_Data.xkj_img" />
       </el-form-item>
-      <!-- <el-form-item label="原因" v-show="dialogForm_Data[dialogForm_Field_audit.FLAG] === '1'">
-        <el-input type="textarea" v-model="dialogForm_Data[dialogForm_Field_audit.REASON]" :rows="5" />
-      </el-form-item> -->
       <div class="flex justify-center">
-        <el-button @click="handleDialogFormBtn_submit('dialogForm_Ref_audit')" type="primary">提交</el-button>
-        <el-button @click="handleDialogFormBtn_cancel('dialogForm_Ref_audit')" type="default">取消</el-button>
+        <el-button @click="handleDialogFormBtn_submit('dialogForm_Ref_addOrEdit', { xxk_kblx: '4' })" type="primary">提交
+        </el-button>
+        <el-button @click="handleDialogFormBtn_cancel('dialogForm_Ref_addOrEdit')" type="default">取消</el-button>
       </div>
     </el-form>
   </el-dialog>

+ 3 - 1
src/pages/xdjx/kbgl/jsxkgs.vue

@@ -27,6 +27,7 @@ type TYPE_TABLE_FIELD = {
   'xkj_jsxm': string; // 教师姓名
   'subject_id': string; // 所教科目编号
   'subject_name': string; // 所教科目名称
+  'xjj_zgbh':string // 职工编号
 }
 // #endregion
 
@@ -297,7 +298,8 @@ init()
     <el-form :model="dialogForm_Data" ref="dialogForm_Ref_addOrEdit" :rules="dialogForm_Rules_addOrEdit"
       label-width="120px">
       <el-form-item label="教师姓名" prop="xkj_jsxm">
-        <el-input v-model="dialogForm_Data.xkj_jsxm" clearable />
+        <!-- <el-input v-model="dialogForm_Data.xkj_jsxm" clearable /> -->
+        <remote-select url="/xdbg/jzggl_jsgl/index" :fields="['xjj_zgbh','xjj_xm']"  v-model="dialogForm_Data.xjj_zgbh"  v-model:model-name="dialogForm_Data.xkj_jsxm" ></remote-select>
       </el-form-item>
       <!-- <el-form-item label="所教科目编号" prop="subject_id">
         <el-input v-model="dialogForm_Data.subject_id" clearable />

+ 25 - 11
src/pages/xdjx/kbgl/nbjkb/detail.vue

@@ -1,6 +1,7 @@
 <script setup lang="ts">
 import { ref } from "vue";
 import request, { download } from '~/utils/request';
+import { handleImageUrl } from '~/utils/index';
 
 // #region (constant)
 const TABLE_KEY = 'xkn_id'
@@ -13,14 +14,15 @@ type TYPE_TABLE_FIELD = {
   'xkn_kbmc': string; // 课表名称
   'team_id': string; // 学期编号
   'team_name': string; // 学期名称
-  'xkk_id': string; // 课表类型编号
-  'xkk_kblxmc': string; // 课表类型名称
   'grade_id': string; // 年级编号
   'grade_name': string; // 年级名称
   'class_id': string; // 班级编号
   'class_name': string; // 班级名称
   'xkn_scr': string; // 上传人
   'xkn_kbxq_json': string; // 课表详情JSON
+  'xxk_kblx': string; // 课表类型
+  'xkn_xls': string; // 课表文件
+  'xkn_img': string; // 课表图片
 }
 // #endregion
 
@@ -59,22 +61,17 @@ init()
 <template>
   <div :loading="loading">
     <template v-if="detail_Data">
-      <div class="flex">
-        <div>课表名称</div><div>{{detail_Data.xkn_kbmc}}</div>
+      <div class="flex text-2xl">
+        <!-- <div>课表名称</div> -->
+        <div>{{detail_Data.xkn_kbmc}}</div>
       </div>
-      <div class="flex">
+      <!-- <div class="flex">
         <div>学期编号</div><div>{{detail_Data.team_id}}</div>
       </div>
       <div class="flex">
         <div>学期名称</div><div>{{detail_Data.team_name}}</div>
       </div>
       <div class="flex">
-        <div>课表类型编号</div><div>{{detail_Data.xkk_id}}</div>
-      </div>
-      <div class="flex">
-        <div>课表类型名称</div><div>{{detail_Data.xkk_kblxmc}}</div>
-      </div>
-      <div class="flex">
         <div>年级编号</div><div>{{detail_Data.grade_id}}</div>
       </div>
       <div class="flex">
@@ -92,6 +89,23 @@ init()
       <div class="flex">
         <div>课表详情JSON</div><div>{{detail_Data.xkn_kbxq_json}}</div>
       </div>
+      <div class="flex">
+        <div>课表类型</div><div>{{detail_Data.xxk_kblx}}</div>
+      </div>
+      <div class="flex">
+        <div>课表文件</div><div>{{detail_Data.xkn_xls}}</div>
+      </div>
+      <div class="flex">
+        <div>课表图片</div><div>{{detail_Data.xkn_img}}</div>
+      </div> -->
+      <div class="flex my-4">
+        <div>课表文件:</div>
+        <file-link :file="detail_Data.xkn_xls" />
+      </div>
+
+      <div>
+        <img class="w-full" :src="handleImageUrl(detail_Data?.xkn_img)" alt="">
+      </div>
     </template>      
   </div>
 

+ 41 - 20
src/pages/xdjx/kbgl/nbjkb/index.vue

@@ -27,14 +27,15 @@ type TYPE_TABLE_FIELD = {
   'xkn_kbmc': string; // 课表名称
   'team_id': string; // 学期编号
   'team_name': string; // 学期名称
-  'xkk_id': string; // 课表类型编号
-  'xkk_kblxmc': string; // 课表类型名称
   'grade_id': string; // 年级编号
   'grade_name': string; // 年级名称
   'class_id': string; // 班级编号
   'class_name': string; // 班级名称
   'xkn_scr': string; // 上传人
   'xkn_kbxq_json': string; // 课表详情JSON
+  'xxk_kblx': string; // 课表类型
+  'xkn_xls': string; // 课表文件
+  'xkn_img': string; // 课表图片
 }
 // #endregion
 
@@ -119,10 +120,10 @@ function handleCurrentChange() {
 // #region (dialog base)
 const dialogForm_Data = ref<Partial<TYPE_TABLE_FIELD> & { keyword?: string }>({})
 
-const handleDialogFormBtn_submit = async (formRefKey: string,extendData?:Partial<TYPE_TABLE_FIELD>) => {
+const handleDialogFormBtn_submit = async (formRefKey: string, extendData?: Partial<TYPE_TABLE_FIELD>) => {
   const isValid = await (instance?.refs[formRefKey] as FormInstance).validate((valid: boolean) => valid)
   if (isValid) {
-    await API_MAP[whichDialogSubmit](<TYPE_TABLE_FIELD>({...dialogForm_Data.value,...extendData}))
+    await API_MAP[whichDialogSubmit](<TYPE_TABLE_FIELD>({ ...dialogForm_Data.value, ...extendData }))
     handleDialogFormBtn_cancel()
     queryApi()
   }
@@ -141,14 +142,15 @@ const dialogForm_Rules_addOrEdit = reactive({
   'xkn_kbmc': { required: true, message: '课表名称不能为空', trigger: 'submit' },
   'team_id': { required: true, message: '学期编号不能为空', trigger: 'submit' },
   'team_name': { required: true, message: '学期名称不能为空', trigger: 'submit' },
-  'xkk_id': { required: true, message: '课表类型编号不能为空', trigger: 'submit' },
-  'xkk_kblxmc': { required: true, message: '课表类型名称不能为空', trigger: 'submit' },
   'grade_id': { required: true, message: '年级编号不能为空', trigger: 'submit' },
   'grade_name': { required: true, message: '年级名称不能为空', trigger: 'submit' },
   'class_id': { required: true, message: '班级编号不能为空', trigger: 'submit' },
   'class_name': { required: true, message: '班级名称不能为空', trigger: 'submit' },
   'xkn_scr': { required: true, message: '上传人不能为空', trigger: 'submit' },
   'xkn_kbxq_json': { required: true, message: '课表详情JSON不能为空', trigger: 'submit' },
+  'xxk_kblx': { required: true, message: '课表类型不能为空', trigger: 'submit' },
+  'xkn_xls': { required: true, message: '课表文件不能为空', trigger: 'submit' },
+  'xkn_img': { required: true, message: '课表图片不能为空', trigger: 'submit' },
 })
 // #endregion
 
@@ -168,8 +170,6 @@ const dialogForm_Rules_audit = reactive<FormRules>({
   'xkn_kbmc': { required: true, message: '课表名称不能为空', trigger: 'submit' },
   'team_id': { required: true, message: '学期编号不能为空', trigger: 'submit' },
   'team_name': { required: true, message: '学期名称不能为空', trigger: 'submit' },
-  'xkk_id': { required: true, message: '课表类型编号不能为空', trigger: 'submit' },
-  'xkk_kblxmc': { required: true, message: '课表类型名称不能为空', trigger: 'submit' },
   'grade_id': { required: true, message: '年级编号不能为空', trigger: 'submit' },
   'grade_name': { required: true, message: '年级名称不能为空', trigger: 'submit' },
   'class_id': { required: true, message: '班级编号不能为空', trigger: 'submit' },
@@ -214,7 +214,7 @@ function editApi(data: Partial<TYPE_TABLE_FIELD>) {
     url: URL_CUT + '/edit',
     data: {
       [TABLE_KEY]: data[TABLE_KEY],
-      [URL_SUBMIT_KEY]: pick(data, ['xkn_kbmc', 'team_id', 'team_name', 'xkk_id', 'xkk_kblxmc', 'grade_id', 'grade_name', 'class_id', 'class_name', 'xkn_scr', 'xkn_kbxq_json',]),
+      [URL_SUBMIT_KEY]: pick(data, ['xkn_kbmc', 'team_id', 'team_name', 'grade_id', 'grade_name', 'class_id', 'class_name', 'xkn_scr', 'xkn_kbxq_json', 'xxk_kblx', 'xkn_xls', 'xkn_img',]),
     }
   })
 }
@@ -294,34 +294,38 @@ init()
     <div class="divider"></div>
     <div>
       <import-button :url="URL_CUT_REF"></import-button>
-      <!-- <el-button @click="handleTableRowBtn_export" type="success">导出</el-button>
+      <!-- <el-button @click="handleTableRowBtn_export" type="success">导出</el-button> -->
       <el-button @click="handleTableRowBtn_add" type="primary">新增</el-button>
-      <el-button @click="handleTableRowBtn_delete" type="danger">删除</el-button> -->
+      <!-- <el-button @click="handleTableRowBtn_delete" type="danger">删除</el-button> -->
     </div>
 
     <div class="divider"></div>
     <div class="flex-auto">
       <el-table :data="tableData" @selection-change="handleSelectionChange" v-loading="loading_table"
         element-loading-background="#ffffff70">
-        <el-table-column type="selection"></el-table-column><el-table-column type="index" label="序号" width="60" :index="(i: number) => (currentPage - 1) * limit + i + 1" />
+        <el-table-column type="selection"></el-table-column>
+        <el-table-column type="index" label="序号" width="60" :index="(i: number) => (currentPage - 1) * limit + i + 1" />
         <el-table-column prop="xkn_kbmc" label="课表名称" width="auto" show-overflow-tooltip></el-table-column>
         <!-- <el-table-column prop="team_id" label="学期编号" width="auto" show-overflow-tooltip></el-table-column> -->
         <el-table-column prop="team_name" label="学期名称" width="auto" show-overflow-tooltip></el-table-column>
         <!-- <el-table-column prop="xkk_id" label="课表类型编号" width="auto" show-overflow-tooltip></el-table-column> -->
-        <el-table-column prop="xkk_kblxmc" label="课表类型名称" width="auto" show-overflow-tooltip></el-table-column>
+        <!-- <el-table-column prop="xkk_kblxmc" label="课表类型名称" width="auto" show-overflow-tooltip></el-table-column> -->
         <!-- <el-table-column prop="grade_id" label="年级编号" width="auto" show-overflow-tooltip></el-table-column> -->
         <el-table-column prop="grade_name" label="年级名称" width="auto" show-overflow-tooltip></el-table-column>
         <!-- <el-table-column prop="class_id" label="班级编号" width="auto" show-overflow-tooltip></el-table-column> -->
         <el-table-column prop="class_name" label="班级名称" width="auto" show-overflow-tooltip></el-table-column>
         <el-table-column prop="xkn_scr" label="上传人" width="auto" show-overflow-tooltip></el-table-column>
         <!-- <el-table-column prop="xkn_kbxq_json" label="课表详情JSON" width="auto" show-overflow-tooltip></el-table-column> -->
+        <el-table-column prop="xxk_kblx" label="课表类型" width="auto" show-overflow-tooltip></el-table-column>
+        <!-- <el-table-column prop="xkn_xls" label="课表文件" width="auto" show-overflow-tooltip></el-table-column>
+        <el-table-column prop="xkn_img" label="课表图片" width="auto" show-overflow-tooltip></el-table-column> -->
         <el-table-column label="操作" fixed="right">
           <template #default="scope">
             <!-- <el-button link :auto-insert-space="false" @click="handleTableColBtn_edit(scope)" type="primary" >编辑</el-button> -->
             <!-- <el-button link :auto-insert-space="false" @click="handleTableColBtn_audit(scope)" type="primary" >审核</el-button> -->
-            <el-button link :auto-insert-space="false" @click="handleTableColBtn_detail(scope)" type="primary" >查看课表
+            <el-button link :auto-insert-space="false" @click="handleTableColBtn_detail(scope)" type="primary">查看课表
             </el-button>
-            <el-button link :auto-insert-space="false" @click="handleTableColBtn_delete(scope)" type="primary" >删除
+            <el-button link :auto-insert-space="false" @click="handleTableColBtn_delete(scope)" type="primary">删除
             </el-button>
           </template>
         </el-table-column>
@@ -340,12 +344,12 @@ init()
       <el-form-item label="课表名称" prop="xkn_kbmc">
         <el-input v-model="dialogForm_Data.xkn_kbmc" clearable />
       </el-form-item>
-      <el-form-item label="课表类型编号" prop="xkk_id">
+      <!-- <el-form-item label="课表类型编号" prop="xkk_id">
         <el-input v-model="dialogForm_Data.xkk_id" clearable />
       </el-form-item>
       <el-form-item label="课表类型名称" prop="xkk_kblxmc">
         <el-input v-model="dialogForm_Data.xkk_kblxmc" clearable />
-      </el-form-item>
+      </el-form-item> -->
       <!-- <el-form-item label="学期编号" prop="team_id">
         <el-input v-model="dialogForm_Data.team_id" clearable />
       </el-form-item> -->
@@ -368,14 +372,31 @@ init()
       </el-form-item> -->
       <el-form-item label="班级名称" prop="class_name">
         <!-- <el-input v-model="dialogForm_Data.class_name" clearable /> -->
-        <remote-cascader-class focusing v-model="dialogForm_Data.class_id" v-model:modelName="dialogForm_Data.class_name" v-model:teamId="dialogForm_Data.team_id" v-model:teamName="dialogForm_Data.team_name" v-model:gradeId="dialogForm_Data.grade_id" v-model:gradeName="dialogForm_Data.grade_name"
-          clearable />
+        <remote-cascader-class focusing v-model="dialogForm_Data.class_id"
+          v-model:modelName="dialogForm_Data.class_name" v-model:teamId="dialogForm_Data.team_id"
+          v-model:teamName="dialogForm_Data.team_name" v-model:gradeId="dialogForm_Data.grade_id"
+          v-model:gradeName="dialogForm_Data.grade_name" clearable />
       </el-form-item>
       <el-form-item label="上传人" prop="xkn_scr">
         <el-input v-model="dialogForm_Data.xkn_scr" clearable />
       </el-form-item>
-      <el-form-item label="课表详情JSON" prop="xkn_kbxq_json">
+      <!-- <el-form-item label="课表详情JSON" prop="xkn_kbxq_json">
         <el-input v-model="dialogForm_Data.xkn_kbxq_json" clearable />
+      </el-form-item> -->
+      <el-form-item label="课表类型" prop="xxk_kblx">
+        <el-select v-model="dialogForm_Data.xxk_kblx" >
+          <!-- <el-option label="学校总课表" value="1" /> -->
+          <el-option label="年级课表" value="2" />
+          <el-option label="班级课表" value="3" />
+          <!-- <el-option label="教师课表" value="4" />
+          <el-option label="学生课表" value="5" /> -->
+        </el-select>
+      </el-form-item>
+      <el-form-item label="课表文件" prop="xkn_xls">
+        <file-upload v-model:part="dialogForm_Data.xkn_xls" />
+      </el-form-item>
+      <el-form-item label="课表图片" prop="xkn_img">
+        <file-upload v-model:part="dialogForm_Data.xkn_img" />
       </el-form-item>
       <div class="flex justify-center">
         <el-button @click="handleDialogFormBtn_submit('dialogForm_Ref_addOrEdit')" type="primary">提交</el-button>

+ 426 - 0
src/pages/xdjx/kbgl/njkb/index.vue

@@ -0,0 +1,426 @@
+<script setup lang="ts">
+import { ref, getCurrentInstance, reactive } from "vue";
+import { useRouter } from "vue-router";
+import request, { download } from '~/utils/request';
+import { pick } from 'lodash-es';
+import { ElMessage } from 'element-plus'
+import type { FormInstance, FormRules } from 'element-plus'
+import type { AxiosRequestConfig } from 'axios'
+
+// #region (constant)
+const TABLE_KEY = 'xkn_id'
+const URL_CUT = '/xdjx/kbgl_njbjkb'
+const URL_CUT_REF = ref(URL_CUT)
+const URL_SUBMIT_KEY = URL_CUT.split('/').join('_').slice(1)
+const instance = getCurrentInstance()
+const router = useRouter()
+// #endregion
+
+// #region (variable)
+const loading_table = ref(true)
+let whichDialogSubmit: 'add' | 'edit'
+// #endregion
+
+// #region (type)
+type TYPE_TABLE_FIELD = {
+  [TABLE_KEY]: string;
+  'xkn_kbmc': string; // 课表名称
+  'team_id': string; // 学期编号
+  'team_name': string; // 学期名称
+  'grade_id': string; // 年级编号
+  'grade_name': string; // 年级名称
+  'class_id': string; // 班级编号
+  'class_name': string; // 班级名称
+  'xkn_scr': string; // 上传人
+  'xkn_kbxq_json': string; // 课表详情JSON
+  'xxk_kblx': string; // 课表类型
+  'xkn_xls': string; // 课表文件
+  'xkn_img': string; // 课表图片
+}
+// #endregion
+
+// #region (props)
+// #endregion
+
+// #region (query row)
+const queryForm_Data = ref<Partial<TYPE_TABLE_FIELD> & { keyword?: string }>({})
+
+const handleQueryFormBtn_search = () => {
+  queryApi()
+}
+const handleQueryFormBtn_clear = () => {
+  queryForm_Data.value = {}
+}
+// #endregion
+
+// #region (table selection)
+const multipleSelection = ref<TYPE_TABLE_FIELD[]>([])
+const handleSelectionChange = (val: TYPE_TABLE_FIELD[]) => {
+  multipleSelection.value = val
+}
+// #endregion
+
+// #region (table row)
+const handleTableRowBtn_import = async ({ file }: { file: File }) => {
+  const res = await API_MAP['import']({ file })
+  if (res.code === '1') {
+    queryApi()
+    ElMessage.success(res.msg)
+  }
+}
+const handleTableRowBtn_export = () => {
+  exportApi()
+}
+const handleTableRowBtn_add = () => {
+  whichDialogSubmit = 'add'
+  dialogForm_Data.value = {}
+  dialogVisible_addOrEdit.value = true
+}
+const handleTableRowBtn_delete = async () => {
+  await deleteApi(multipleSelection.value.map((item: TYPE_TABLE_FIELD) => item[TABLE_KEY]))
+  queryApi()
+}
+// #endregion
+
+// #region (table body)
+const tableData = ref<TYPE_TABLE_FIELD[]>([])
+const DetailName = '-KBGL-NBJKB-DETAIL'
+const DetailParam = 'aid'
+
+const handleTableColBtn_edit = async (scope: { row: TYPE_TABLE_FIELD }) => {
+  whichDialogSubmit = 'edit'
+  const res = await detailApi(scope.row[TABLE_KEY])
+  dialogForm_Data.value = (res.data.one_info)
+  dialogVisible_addOrEdit.value = true
+}
+const handleTableColBtn_audit = (scope: { row: TYPE_TABLE_FIELD }) => {
+  whichDialogSubmit = 'edit'
+  dialogForm_Data.value = pick(scope.row, [`${TABLE_KEY}`, ...Object.keys(dialogForm_Rules_audit)])
+  dialogVisible_audit.value = true
+}
+const handleTableColBtn_detail = (scope: { row: TYPE_TABLE_FIELD }) => {
+  router.push({ name: DetailName, params: { [DetailParam]: scope.row[TABLE_KEY] } })
+}
+const handleTableColBtn_delete = async (scope: { row: TYPE_TABLE_FIELD }) => {
+  await deleteApi(scope.row[TABLE_KEY])
+  queryApi()
+}
+// #endregion
+
+// #region (pagination)
+const total = ref(0)
+const limit = ref(10)
+
+const currentPage = ref(1)
+function handleCurrentChange() {
+  queryApi()
+}
+// #endregion
+
+// #region (dialog base)
+const dialogForm_Data = ref<Partial<TYPE_TABLE_FIELD> & { keyword?: string }>({})
+
+const handleDialogFormBtn_submit = async (formRefKey: string, extendData?: Partial<TYPE_TABLE_FIELD>) => {
+  const isValid = await (instance?.refs[formRefKey] as FormInstance).validate((valid: boolean) => valid)
+  if (isValid) {
+    await API_MAP[whichDialogSubmit](<TYPE_TABLE_FIELD>({ ...dialogForm_Data.value, ...extendData }))
+    handleDialogFormBtn_cancel()
+    queryApi()
+  }
+}
+const handleDialogFormBtn_cancel = (formRefKey?: string) => {
+  dialogVisible_addOrEdit.value = false
+  dialogVisible_audit.value = false
+}
+// #endregion
+
+// #region (dialog add/edit)
+const dialogVisible_addOrEdit = ref<boolean>(false)
+
+const dialogForm_Ref_addOrEdit = ref<FormInstance>()
+const dialogForm_Rules_addOrEdit = reactive({
+  'xkn_kbmc': { required: true, message: '课表名称不能为空', trigger: 'submit' },
+  'team_id': { required: true, message: '学期编号不能为空', trigger: 'submit' },
+  'team_name': { required: true, message: '学期名称不能为空', trigger: 'submit' },
+  'grade_id': { required: true, message: '年级编号不能为空', trigger: 'submit' },
+  'grade_name': { required: true, message: '年级名称不能为空', trigger: 'submit' },
+  'class_id': { required: true, message: '班级编号不能为空', trigger: 'submit' },
+  'class_name': { required: true, message: '班级名称不能为空', trigger: 'submit' },
+  'xkn_scr': { required: true, message: '上传人不能为空', trigger: 'submit' },
+  'xkn_kbxq_json': { required: true, message: '课表详情JSON不能为空', trigger: 'submit' },
+  'xxk_kblx': { required: true, message: '课表类型不能为空', trigger: 'submit' },
+  'xkn_xls': { required: true, message: '课表文件不能为空', trigger: 'submit' },
+  'xkn_img': { required: true, message: '课表图片不能为空', trigger: 'submit' },
+})
+// #endregion
+
+// #region (dialog audit)
+const dialogVisible_audit = ref<boolean>(false)
+
+const dialogForm_Field_audit = reactive<{
+  FLAG: keyof TYPE_TABLE_FIELD,
+  REASON?: keyof TYPE_TABLE_FIELD
+}>({
+  FLAG: 'xkn_id',
+  REASON: 'xkn_id'
+})
+
+const dialogForm_Ref_audit = ref<FormInstance>()
+const dialogForm_Rules_audit = reactive<FormRules>({
+  'xkn_kbmc': { required: true, message: '课表名称不能为空', trigger: 'submit' },
+  'team_id': { required: true, message: '学期编号不能为空', trigger: 'submit' },
+  'team_name': { required: true, message: '学期名称不能为空', trigger: 'submit' },
+  'grade_id': { required: true, message: '年级编号不能为空', trigger: 'submit' },
+  'grade_name': { required: true, message: '年级名称不能为空', trigger: 'submit' },
+  'class_id': { required: true, message: '班级编号不能为空', trigger: 'submit' },
+  'class_name': { required: true, message: '班级名称不能为空', trigger: 'submit' },
+  'xkn_scr': { required: true, message: '上传人不能为空', trigger: 'submit' },
+  'xkn_kbxq_json': { required: true, message: '课表详情JSON不能为空', trigger: 'submit' },
+})
+
+// #endregion
+
+// #region (request api): 
+function queryApi() {
+  loading_table.value = true
+  return request({
+    url: URL_CUT + '/index',
+    data: {
+      ...queryForm_Data.value,
+      limit: limit.value,
+      page: currentPage.value,
+      xxk_kblx: '2'
+    }
+  }).then((response: { data: { total_rows: string, page_data: TYPE_TABLE_FIELD[] } }) => {
+    const { data } = response
+    total.value = parseInt(data.total_rows)
+    tableData.value = data.page_data
+    return response
+  }).then(() => {
+    loading_table.value = false
+  })
+}
+
+function addApi(data: TYPE_TABLE_FIELD) {
+  return request({
+    url: URL_CUT + '/add',
+    data: {
+      [URL_SUBMIT_KEY]: data,
+    }
+  })
+}
+
+function editApi(data: Partial<TYPE_TABLE_FIELD>) {
+  return request({
+    url: URL_CUT + '/edit',
+    data: {
+      [TABLE_KEY]: data[TABLE_KEY],
+      [URL_SUBMIT_KEY]: pick(data, ['xkn_kbmc', 'team_id', 'team_name', 'grade_id', 'grade_name', 'class_id', 'class_name', 'xkn_scr', 'xkn_kbxq_json', 'xxk_kblx', 'xkn_xls', 'xkn_img',]),
+    }
+  })
+}
+
+function deleteApi(id: string | string[]) {
+  return request({
+    url: URL_CUT + '/delete',
+    data: {
+      [TABLE_KEY]: id,
+    }
+  })
+}
+
+function detailApi(id: string) {
+  return request({
+    url: URL_CUT + '/detail',
+    data: {
+      [TABLE_KEY]: id,
+    }
+  })
+}
+
+function importApi(data: { file: File }) {
+  return request({
+    $type: 'import',
+    url: URL_CUT + '/import',
+    data
+  } as AxiosRequestConfig)
+}
+
+function exportApi() {
+  return download(URL_CUT + '/index', queryForm_Data.value)
+}
+
+const API_MAP = {
+  query: queryApi,
+  add: addApi,
+  edit: editApi,
+  delete: deleteApi,
+  detail: detailApi,
+  import: importApi,
+  export: exportApi,
+}
+// #endregion
+
+// #region (page init)
+function init() {
+  queryApi()
+}
+init()
+// #endregion
+
+</script>
+
+<template>
+  <div class="card flex-grow flex flex-col">
+    <el-form inline :model="queryForm_Data">
+      <el-form-item label="关键字">
+        <el-input v-model="queryForm_Data.keyword" clearable />
+      </el-form-item>
+      <!-- <el-form-item label="课表名称"><el-input v-model="queryForm_Data.xkn_kbmc" clearable /></el-form-item> -->
+      <!-- <el-form-item label="学期编号"><el-input v-model="queryForm_Data.team_id" clearable /></el-form-item> -->
+      <!-- <el-form-item label="学期名称"><el-input v-model="queryForm_Data.team_name" clearable /></el-form-item> -->
+      <!-- <el-form-item label="课表类型编号"><el-input v-model="queryForm_Data.xkk_id" clearable /></el-form-item> -->
+      <!-- <el-form-item label="课表类型名称"><el-input v-model="queryForm_Data.xkk_kblxmc" clearable /></el-form-item> -->
+      <!-- <el-form-item label="年级编号"><el-input v-model="queryForm_Data.grade_id" clearable /></el-form-item> -->
+      <!-- <el-form-item label="年级名称"><el-input v-model="queryForm_Data.grade_name" clearable /></el-form-item> -->
+      <!-- <el-form-item label="班级编号"><el-input v-model="queryForm_Data.class_id" clearable /></el-form-item> -->
+      <!-- <el-form-item label="班级名称"><el-input v-model="queryForm_Data.class_name" clearable /></el-form-item> -->
+      <!-- <el-form-item label="上传人"><el-input v-model="queryForm_Data.xkn_scr" clearable /></el-form-item> -->
+      <!-- <el-form-item label="课表详情JSON"><el-input v-model="queryForm_Data.xkn_kbxq_json" clearable /></el-form-item> -->
+      <el-form-item>
+        <el-button @click="handleQueryFormBtn_search" type="primary">搜索</el-button>
+        <el-button @click="handleQueryFormBtn_clear" type="warning">清空</el-button>
+      </el-form-item>
+    </el-form>
+    <div class="divider"></div>
+    <div>
+      <import-button :url="URL_CUT_REF"></import-button>
+      <!-- <el-button @click="handleTableRowBtn_export" type="success">导出</el-button> -->
+      <el-button @click="handleTableRowBtn_add" type="primary">新增</el-button>
+      <!-- <el-button @click="handleTableRowBtn_delete" type="danger">删除</el-button> -->
+    </div>
+
+    <div class="divider"></div>
+    <div class="flex-auto">
+      <el-table :data="tableData" @selection-change="handleSelectionChange" v-loading="loading_table"
+        element-loading-background="#ffffff70">
+        <el-table-column type="selection"></el-table-column>
+        <el-table-column type="index" label="序号" width="60" :index="(i: number) => (currentPage - 1) * limit + i + 1" />
+        <el-table-column prop="xkn_kbmc" label="课表名称" width="auto" show-overflow-tooltip></el-table-column>
+        <!-- <el-table-column prop="team_id" label="学期编号" width="auto" show-overflow-tooltip></el-table-column> -->
+        <el-table-column prop="team_name" label="学期名称" width="auto" show-overflow-tooltip></el-table-column>
+        <!-- <el-table-column prop="xkk_id" label="课表类型编号" width="auto" show-overflow-tooltip></el-table-column> -->
+        <!-- <el-table-column prop="xkk_kblxmc" label="课表类型名称" width="auto" show-overflow-tooltip></el-table-column> -->
+        <!-- <el-table-column prop="grade_id" label="年级编号" width="auto" show-overflow-tooltip></el-table-column> -->
+        <el-table-column prop="grade_name" label="年级名称" width="auto" show-overflow-tooltip></el-table-column>
+        <!-- <el-table-column prop="class_id" label="班级编号" width="auto" show-overflow-tooltip></el-table-column> -->
+        <!-- <el-table-column prop="class_name" label="班级名称" width="auto" show-overflow-tooltip></el-table-column> -->
+        <el-table-column prop="xkn_scr" label="上传人" width="auto" show-overflow-tooltip></el-table-column>
+        <!-- <el-table-column prop="xkn_kbxq_json" label="课表详情JSON" width="auto" show-overflow-tooltip></el-table-column> -->
+        <el-table-column prop="xxk_kblx" label="课表类型" width="auto" show-overflow-tooltip></el-table-column>
+        <!-- <el-table-column prop="xkn_xls" label="课表文件" width="auto" show-overflow-tooltip></el-table-column>
+        <el-table-column prop="xkn_img" label="课表图片" width="auto" show-overflow-tooltip></el-table-column> -->
+        <el-table-column label="操作" fixed="right">
+          <template #default="scope">
+            <!-- <el-button link :auto-insert-space="false" @click="handleTableColBtn_edit(scope)" type="primary" >编辑</el-button> -->
+            <!-- <el-button link :auto-insert-space="false" @click="handleTableColBtn_audit(scope)" type="primary" >审核</el-button> -->
+            <el-button link :auto-insert-space="false" @click="handleTableColBtn_detail(scope)" type="primary">查看课表
+            </el-button>
+            <el-button link :auto-insert-space="false" @click="handleTableColBtn_delete(scope)" type="primary">删除
+            </el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+    </div>
+
+    <div class="flex justify-end mt-10 py-4">
+      <el-pagination :page-size="limit" v-model:current-page="currentPage" @current-change="handleCurrentChange"
+        background layout="total, prev, pager, next" :total="total" />
+    </div>
+  </div>
+
+  <el-dialog v-model="dialogVisible_addOrEdit" append-to-body destroy-on-close>
+    <el-form :model="dialogForm_Data" ref="dialogForm_Ref_addOrEdit" :rules="dialogForm_Rules_addOrEdit"
+      label-width="120px">
+      <el-form-item label="课表名称" prop="xkn_kbmc">
+        <el-input v-model="dialogForm_Data.xkn_kbmc" clearable />
+      </el-form-item>
+      <!-- <el-form-item label="课表类型编号" prop="xkk_id">
+        <el-input v-model="dialogForm_Data.xkk_id" clearable />
+      </el-form-item>
+      <el-form-item label="课表类型名称" prop="xkk_kblxmc">
+        <el-input v-model="dialogForm_Data.xkk_kblxmc" clearable />
+      </el-form-item> -->
+      <!-- <el-form-item label="学期编号" prop="team_id">
+        <el-input v-model="dialogForm_Data.team_id" clearable />
+      </el-form-item> -->
+      <el-form-item label="学期名称" prop="team_name">
+        <!-- <el-input v-model="dialogForm_Data.team_name" clearable /> -->
+        <remote-select to="team" v-model="dialogForm_Data.team_id" v-model:modelName="dialogForm_Data.team_name"
+          clearable />
+      </el-form-item>
+
+      <!-- <el-form-item label="年级编号" prop="grade_id">
+        <el-input v-model="dialogForm_Data.grade_id" clearable />
+      </el-form-item> -->
+      <el-form-item label="年级名称" prop="grade_name">
+        <!-- <el-input v-model="dialogForm_Data.grade_name" clearable /> -->
+        <remote-select to="grade" v-model="dialogForm_Data.grade_id" v-model:modelName="dialogForm_Data.grade_name"
+          clearable />
+      </el-form-item>
+      <!-- <el-form-item label="班级编号" prop="class_id">
+        <el-input v-model="dialogForm_Data.class_id" clearable />
+      </el-form-item> -->
+      <!-- <el-form-item label="班级名称" prop="class_name">
+        <remote-cascader-class focusing v-model="dialogForm_Data.class_id"
+          v-model:modelName="dialogForm_Data.class_name" v-model:teamId="dialogForm_Data.team_id"
+          v-model:teamName="dialogForm_Data.team_name" v-model:gradeId="dialogForm_Data.grade_id"
+          v-model:gradeName="dialogForm_Data.grade_name" clearable />
+      </el-form-item> -->
+      <el-form-item label="上传人" prop="xkn_scr">
+        <el-input v-model="dialogForm_Data.xkn_scr" clearable />
+      </el-form-item>
+      <!-- <el-form-item label="课表详情JSON" prop="xkn_kbxq_json">
+        <el-input v-model="dialogForm_Data.xkn_kbxq_json" clearable />
+      </el-form-item> -->
+      <!-- <el-form-item label="课表类型" prop="xxk_kblx">
+        <el-select v-model="dialogForm_Data.xxk_kblx">
+          <el-option label="学校总课表" value="1" />
+          <el-option label="年级课表" value="2" />
+          <el-option label="班级课表" value="3" />
+          <el-option label="教师课表" value="4" />
+          <el-option label="学生课表" value="5" />
+        </el-select>
+      </el-form-item> -->
+      <el-form-item label="课表文件" prop="xkn_xls">
+        <file-upload v-model:part="dialogForm_Data.xkn_xls" />
+      </el-form-item>
+      <el-form-item label="课表图片" prop="xkn_img">
+        <file-upload v-model:part="dialogForm_Data.xkn_img" />
+      </el-form-item>
+      <div class="flex justify-center">
+        <el-button @click="handleDialogFormBtn_submit('dialogForm_Ref_addOrEdit', { xxk_kblx: '2' })" type="primary">提交
+        </el-button>
+        <el-button @click="handleDialogFormBtn_cancel('dialogForm_Ref_addOrEdit')" type="default">取消</el-button>
+      </div>
+    </el-form>
+  </el-dialog>
+
+  <el-dialog v-model="dialogVisible_audit" append-to-body destroy-on-close>
+    <el-form :model="dialogForm_Data" ref="dialogForm_Ref_audit" :rules="dialogForm_Rules_audit" label-width="120px">
+      <el-form-item label="状态">
+        <el-radio-group v-model="dialogForm_Data[dialogForm_Field_audit.FLAG]">
+          <el-radio label="1">通过</el-radio>
+          <el-radio label="2">未通过</el-radio>
+        </el-radio-group>
+      </el-form-item>
+      <!-- <el-form-item label="原因" v-show="dialogForm_Data[dialogForm_Field_audit.FLAG] === '1'">
+        <el-input type="textarea" v-model="dialogForm_Data[dialogForm_Field_audit.REASON]" :rows="5" />
+      </el-form-item> -->
+      <div class="flex justify-center">
+        <el-button @click="handleDialogFormBtn_submit('dialogForm_Ref_audit')" type="primary">提交</el-button>
+        <el-button @click="handleDialogFormBtn_cancel('dialogForm_Ref_audit')" type="default">取消</el-button>
+      </div>
+    </el-form>
+  </el-dialog>
+</template>

+ 2 - 1
src/pages/xdjx/kbgl/xxzkb/index.vue

@@ -287,7 +287,8 @@ init()
     <div class="flex-auto">
       <el-table :data="tableData" @selection-change="handleSelectionChange" v-loading="loading_table"
         element-loading-background="#ffffff70">
-        <el-table-column type="selection"></el-table-column><el-table-column type="index" label="序号" width="60" :index="(i: number) => (currentPage - 1) * limit + i + 1" />
+        <el-table-column type="selection"></el-table-column>
+        <el-table-column type="index" label="序号" width="60" :index="(i: number) => (currentPage - 1) * limit + i + 1" />
         <el-table-column prop="xkx_kbmc" label="课表名称" width="auto" show-overflow-tooltip></el-table-column>
         <!-- <el-table-column prop="team_id" label="学期编号" width="auto" show-overflow-tooltip></el-table-column> -->
         <el-table-column prop="team_name" label="学期名称" width="auto" show-overflow-tooltip></el-table-column>

+ 120 - 104
src/pages/xdjx/kcpzgl/kmjksz.vue

@@ -18,7 +18,7 @@ const router = useRouter()
 
 // #region (variable)
 const loading_table = ref(true)
-let whichDialogSubmit:'add'|'edit'
+let whichDialogSubmit: 'add' | 'edit'
 // #endregion
 
 // #region (type)
@@ -27,6 +27,7 @@ type TYPE_TABLE_FIELD = {
   'xkkm_kmmc': string; // 科目名称
   'xkkm_jkjs': string; // 监考教师
   'xkkm_jkjs_json': string; // 监考教师JSON
+  'xjj_zgbh': string // 职工编号
 }
 // #endregion
 
@@ -37,40 +38,40 @@ type TYPE_TABLE_FIELD = {
 const queryForm_Data = ref<Partial<TYPE_TABLE_FIELD> & { keyword?: string }>({})
 
 const handleQueryFormBtn_search = () => {
-      queryApi()
-    }
+  queryApi()
+}
 const handleQueryFormBtn_clear = () => {
-      queryForm_Data.value = {}
-    }
+  queryForm_Data.value = {}
+}
 // #endregion
 
 // #region (table selection)
 const multipleSelection = ref<TYPE_TABLE_FIELD[]>([])
-const handleSelectionChange = (val:TYPE_TABLE_FIELD[]) => {
+const handleSelectionChange = (val: TYPE_TABLE_FIELD[]) => {
   multipleSelection.value = val
 }
 // #endregion
 
 // #region (table row)
 const handleTableRowBtn_import = async ({ file }: { file: File }) => {
-      const res = await API_MAP['import']({ file })
-      if(res.code === '1'){
-        queryApi()
-        ElMessage.success(res.msg)
-      }
-    }
+  const res = await API_MAP['import']({ file })
+  if (res.code === '1') {
+    queryApi()
+    ElMessage.success(res.msg)
+  }
+}
 const handleTableRowBtn_export = () => {
-      exportApi()
-    }
+  exportApi()
+}
 const handleTableRowBtn_add = () => {
-      whichDialogSubmit = 'add'
-      dialogForm_Data.value = {}
-      dialogVisible_addOrEdit.value = true
-    }
+  whichDialogSubmit = 'add'
+  dialogForm_Data.value = {}
+  dialogVisible_addOrEdit.value = true
+}
 const handleTableRowBtn_delete = async () => {
-      await deleteApi(multipleSelection.value.map((item: TYPE_TABLE_FIELD)=>item[TABLE_KEY]))
-      queryApi()
-    }
+  await deleteApi(multipleSelection.value.map((item: TYPE_TABLE_FIELD) => item[TABLE_KEY]))
+  queryApi()
+}
 // #endregion
 
 // #region (table body)
@@ -78,32 +79,32 @@ const tableData = ref<TYPE_TABLE_FIELD[]>([])
 const DetailName = '-KCPZGL-KMJKSZ'
 const DetailParam = 'aid'
 
-const handleTableColBtn_edit = async (scope:{row:TYPE_TABLE_FIELD}) => {
-      whichDialogSubmit = 'edit'
-      const res = await detailApi(scope.row[TABLE_KEY])
-      dialogForm_Data.value = (res.data.one_info)
-      dialogVisible_addOrEdit.value = true
-    }
-const handleTableColBtn_audit = (scope:{row:TYPE_TABLE_FIELD}) => {
-      whichDialogSubmit = 'edit'
-      dialogForm_Data.value = pick(scope.row, [`${TABLE_KEY}`, ...Object.keys(dialogForm_Rules_audit)])
-      dialogVisible_audit.value = true
-    }
-const handleTableColBtn_detail = (scope:{row:TYPE_TABLE_FIELD}) => {
-      router.push({ name:DetailName, params:{ [DetailParam]:scope.row[TABLE_KEY]} })
-    }
-const handleTableColBtn_delete = async (scope:{row:TYPE_TABLE_FIELD}) => {
-      await deleteApi(scope.row[TABLE_KEY])
-      queryApi()
-    }
+const handleTableColBtn_edit = async (scope: { row: TYPE_TABLE_FIELD }) => {
+  whichDialogSubmit = 'edit'
+  const res = await detailApi(scope.row[TABLE_KEY])
+  dialogForm_Data.value = (res.data.one_info)
+  dialogVisible_addOrEdit.value = true
+}
+const handleTableColBtn_audit = (scope: { row: TYPE_TABLE_FIELD }) => {
+  whichDialogSubmit = 'edit'
+  dialogForm_Data.value = pick(scope.row, [`${TABLE_KEY}`, ...Object.keys(dialogForm_Rules_audit)])
+  dialogVisible_audit.value = true
+}
+const handleTableColBtn_detail = (scope: { row: TYPE_TABLE_FIELD }) => {
+  router.push({ name: DetailName, params: { [DetailParam]: scope.row[TABLE_KEY] } })
+}
+const handleTableColBtn_delete = async (scope: { row: TYPE_TABLE_FIELD }) => {
+  await deleteApi(scope.row[TABLE_KEY])
+  queryApi()
+}
 // #endregion
 
 // #region (pagination)
 const total = ref(0)
 const limit = ref(10)
 
-const currentPage=ref(1) 
-function handleCurrentChange(){
+const currentPage = ref(1)
+function handleCurrentChange() {
   queryApi()
 }
 // #endregion
@@ -111,53 +112,53 @@ function handleCurrentChange(){
 // #region (dialog base)
 const dialogForm_Data = ref<Partial<TYPE_TABLE_FIELD> & { keyword?: string }>({})
 
-const handleDialogFormBtn_submit = async (formRefKey:string, extendData?: Partial<TYPE_TABLE_FIELD>) => {
-      const isValid = await (instance?.refs[formRefKey] as FormInstance).validate((valid:boolean) => valid)
-      if (isValid) {
-        await API_MAP[whichDialogSubmit](<TYPE_TABLE_FIELD>({...dialogForm_Data.value,...extendData}))
-        handleDialogFormBtn_cancel()
-        queryApi()
-      }
-    }
-const handleDialogFormBtn_cancel = (formRefKey?:string) => {
-      dialogVisible_addOrEdit.value = false
-      dialogVisible_audit.value = false
-    }
+const handleDialogFormBtn_submit = async (formRefKey: string, extendData?: Partial<TYPE_TABLE_FIELD>) => {
+  const isValid = await (instance?.refs[formRefKey] as FormInstance).validate((valid: boolean) => valid)
+  if (isValid) {
+    await API_MAP[whichDialogSubmit](<TYPE_TABLE_FIELD>({ ...dialogForm_Data.value, ...extendData }))
+    handleDialogFormBtn_cancel()
+    queryApi()
+  }
+}
+const handleDialogFormBtn_cancel = (formRefKey?: string) => {
+  dialogVisible_addOrEdit.value = false
+  dialogVisible_audit.value = false
+}
 // #endregion
 
 // #region (dialog add/edit)
 const dialogVisible_addOrEdit = ref<boolean>(false)
 
-const dialogForm_Ref_addOrEdit= ref<FormInstance>()
-const dialogForm_Rules_addOrEdit = reactive({ 
-  'xkkm_kmmc':{required : true ,message:'科目名称不能为空', trigger: 'submit'},
-  'xkkm_jkjs':{required : true ,message:'监考教师不能为空', trigger: 'submit'},
-  'xkkm_jkjs_json':{required : true ,message:'监考教师JSON不能为空', trigger: 'submit'},
+const dialogForm_Ref_addOrEdit = ref<FormInstance>()
+const dialogForm_Rules_addOrEdit = reactive({
+  'xkkm_kmmc': { required: true, message: '科目名称不能为空', trigger: 'submit' },
+  'xkkm_jkjs': { required: true, message: '监考教师不能为空', trigger: 'submit' },
+  'xkkm_jkjs_json': { required: true, message: '监考教师JSON不能为空', trigger: 'submit' },
 })
 // #endregion
 
 // #region (dialog audit)
 const dialogVisible_audit = ref<boolean>(false)
 
-const dialogForm_Field_audit= reactive<{
-  FLAG:keyof TYPE_TABLE_FIELD,
-  REASON?:keyof TYPE_TABLE_FIELD
+const dialogForm_Field_audit = reactive<{
+  FLAG: keyof TYPE_TABLE_FIELD,
+  REASON?: keyof TYPE_TABLE_FIELD
 }>({
-  FLAG:'xkkm_id',
-  REASON:'xkkm_id'
+  FLAG: 'xkkm_id',
+  REASON: 'xkkm_id'
 })
 
-const dialogForm_Ref_audit= ref<FormInstance>()
-const dialogForm_Rules_audit = reactive<FormRules>({ 
-  'xkkm_kmmc':{required : true ,message:'科目名称不能为空', trigger: 'submit'},
-  'xkkm_jkjs':{required : true ,message:'监考教师不能为空', trigger: 'submit'},
-  'xkkm_jkjs_json':{required : true ,message:'监考教师JSON不能为空', trigger: 'submit'},
+const dialogForm_Ref_audit = ref<FormInstance>()
+const dialogForm_Rules_audit = reactive<FormRules>({
+  'xkkm_kmmc': { required: true, message: '科目名称不能为空', trigger: 'submit' },
+  'xkkm_jkjs': { required: true, message: '监考教师不能为空', trigger: 'submit' },
+  'xkkm_jkjs_json': { required: true, message: '监考教师JSON不能为空', trigger: 'submit' },
 })
 
 // #endregion
 
 // #region (request api): 
-function queryApi(){
+function queryApi() {
   loading_table.value = true
   return request({
     url: URL_CUT + '/index',
@@ -166,7 +167,7 @@ function queryApi(){
       limit: limit.value,
       page: currentPage.value
     }
-  }).then((response:{data:{total_rows:string,page_data:TYPE_TABLE_FIELD[]}}) => {
+  }).then((response: { data: { total_rows: string, page_data: TYPE_TABLE_FIELD[] } }) => {
     const { data } = response
     total.value = parseInt(data.total_rows)
     tableData.value = data.page_data
@@ -176,44 +177,44 @@ function queryApi(){
   })
 }
 
-function addApi(data:TYPE_TABLE_FIELD){
+function addApi(data: TYPE_TABLE_FIELD) {
   return request({
     url: URL_CUT + '/add',
     data: {
-      [URL_SUBMIT_KEY]:data,
+      [URL_SUBMIT_KEY]: data,
     }
   })
 }
 
-function editApi(data:Partial<TYPE_TABLE_FIELD>){
+function editApi(data: Partial<TYPE_TABLE_FIELD>) {
   return request({
     url: URL_CUT + '/edit',
     data: {
-      [TABLE_KEY]:data[TABLE_KEY],
-      [URL_SUBMIT_KEY]:pick(data,['xkkm_kmmc','xkkm_jkjs','xkkm_jkjs_json',]),
+      [TABLE_KEY]: data[TABLE_KEY],
+      [URL_SUBMIT_KEY]: pick(data, ['xkkm_kmmc', 'xkkm_jkjs', 'xkkm_jkjs_json', 'xjj_zgbh']),
     }
   })
 }
 
-function deleteApi(id:string|string[]){
+function deleteApi(id: string | string[]) {
   return request({
     url: URL_CUT + '/delete',
     data: {
-      [TABLE_KEY]:id,
+      [TABLE_KEY]: id,
     }
   })
 }
 
-function detailApi(id:string){
+function detailApi(id: string) {
   return request({
     url: URL_CUT + '/detail',
     data: {
-      [TABLE_KEY]:id,
+      [TABLE_KEY]: id,
     }
   })
 }
 
-function importApi(data:{file:File}){  
+function importApi(data: { file: File }) {
   return request({
     $type: 'import',
     url: URL_CUT + '/import',
@@ -221,23 +222,23 @@ function importApi(data:{file:File}){
   } as AxiosRequestConfig)
 }
 
-function exportApi(){
+function exportApi() {
   return download(URL_CUT + '/index', queryForm_Data.value)
 }
 
 const API_MAP = {
-  query:queryApi,
-  add:addApi,
-  edit:editApi,
-  delete:deleteApi,
-  detail:detailApi,
-  import:importApi,
-  export:exportApi,
+  query: queryApi,
+  add: addApi,
+  edit: editApi,
+  delete: deleteApi,
+  detail: detailApi,
+  import: importApi,
+  export: exportApi,
 }
 // #endregion
 
 // #region (page init)
-function init(){
+function init() {
   queryApi()
 }
 init()
@@ -248,8 +249,12 @@ init()
 <template>
   <div class="card flex-grow flex flex-col">
     <el-form inline :model="queryForm_Data">
-      <el-form-item label="科目名称"><el-input v-model="queryForm_Data.xkkm_kmmc" clearable /></el-form-item>
-      <el-form-item label="监考教师"><el-input v-model="queryForm_Data.xkkm_jkjs" clearable /></el-form-item>
+      <el-form-item label="科目名称">
+        <el-input v-model="queryForm_Data.xkkm_kmmc" clearable />
+      </el-form-item>
+      <el-form-item label="监考教师">
+        <el-input v-model="queryForm_Data.xkkm_jkjs" clearable />
+      </el-form-item>
       <!-- <el-form-item label="监考教师JSON"><el-input v-model="queryForm_Data.xkkm_jkjs_json" type="textarea" /></el-form-item> -->
       <el-form-item>
         <el-button @click="handleQueryFormBtn_search" type="primary">搜索</el-button>
@@ -258,26 +263,29 @@ init()
     </el-form>
     <div class="divider"></div>
     <div>
-        <import-button :url="URL_CUT_REF"></import-button>
-        <el-button @click="handleTableRowBtn_export" type="success">导出</el-button>
-        <el-button @click="handleTableRowBtn_add" type="primary">新增</el-button>
-        <el-button @click="handleTableRowBtn_delete" type="danger">删除</el-button>
+      <import-button :url="URL_CUT_REF"></import-button>
+      <el-button @click="handleTableRowBtn_export" type="success">导出</el-button>
+      <el-button @click="handleTableRowBtn_add" type="primary">新增</el-button>
+      <el-button @click="handleTableRowBtn_delete" type="danger">删除</el-button>
     </div>
 
     <div class="divider"></div>
     <div class="flex-auto">
       <el-table :data="tableData" @selection-change="handleSelectionChange" v-loading="loading_table"
         element-loading-background="#ffffff70">
-        <el-table-column type="selection"></el-table-column><el-table-column type="index" label="序号" width="60" :index="(i: number) => (currentPage - 1) * limit + i + 1" />
+        <el-table-column type="selection"></el-table-column>
+        <el-table-column type="index" label="序号" width="60" :index="(i: number) => (currentPage - 1) * limit + i + 1" />
         <el-table-column prop="xkkm_kmmc" label="科目名称" width="auto" show-overflow-tooltip></el-table-column>
-        <el-table-column prop="xkkm_jkjs" label="监考教师" width="auto" show-overflow-tooltip></el-table-column>
-        <!-- <el-table-column prop="xkkm_jkjs_json" label="监考教师JSON" width="auto" show-overflow-tooltip></el-table-column> -->
+        <!-- <el-table-column prop="xkkm_jkjs" label="监考教师" width="auto" show-overflow-tooltip></el-table-column> -->
+        <el-table-column prop="xkkm_jkjs_json" label="监考教师" width="auto" show-overflow-tooltip></el-table-column>
         <el-table-column label="操作" fixed="right">
           <template #default="scope">
-            <el-button link :auto-insert-space="false" @click="handleTableColBtn_edit(scope)" type="primary" >编辑</el-button>
+            <el-button link :auto-insert-space="false" @click="handleTableColBtn_edit(scope)" type="primary">编辑
+            </el-button>
             <!-- <el-button link :auto-insert-space="false" @click="handleTableColBtn_audit(scope)" type="primary" >审核</el-button>
             <el-button link :auto-insert-space="false" @click="handleTableColBtn_detail(scope)" type="primary" >详情</el-button> -->
-            <el-button link :auto-insert-space="false" @click="handleTableColBtn_delete(scope)" type="primary" >删除</el-button>
+            <el-button link :auto-insert-space="false" @click="handleTableColBtn_delete(scope)" type="primary">删除
+            </el-button>
           </template>
         </el-table-column>
       </el-table>
@@ -290,10 +298,18 @@ init()
   </div>
 
   <el-dialog v-model="dialogVisible_addOrEdit" append-to-body destroy-on-close>
-    <el-form :model="dialogForm_Data" ref="dialogForm_Ref_addOrEdit" :rules="dialogForm_Rules_addOrEdit" label-width="120px">
-      <el-form-item label="科目名称" prop="xkkm_kmmc"><el-input v-model="dialogForm_Data.xkkm_kmmc" clearable /></el-form-item>
-      <el-form-item label="监考教师" prop="xkkm_jkjs"><el-input v-model="dialogForm_Data.xkkm_jkjs" clearable /></el-form-item>
-      <el-form-item label="监考教师JSON" prop="xkkm_jkjs_json"><el-input v-model="dialogForm_Data.xkkm_jkjs_json" type="textarea" /></el-form-item>
+    <el-form :model="dialogForm_Data" ref="dialogForm_Ref_addOrEdit" :rules="dialogForm_Rules_addOrEdit"
+      label-width="120px">
+      <el-form-item label="科目名称" prop="xkkm_kmmc">
+        <el-input v-model="dialogForm_Data.xkkm_kmmc" clearable />
+      </el-form-item>
+      <el-form-item label="监考教师" prop="xkkm_jkjs">
+        <!-- <el-input v-model="dialogForm_Data.xkkm_jkjs" clearable /> -->
+        <remote-multi-select url="/xdbg/jzggl_jsgl/index" :fields="['xjj_zgbh','xjj_xm']"  v-model="dialogForm_Data.xkkm_jkjs"  v-model:model-name="dialogForm_Data.xkkm_jkjs_json" ></remote-multi-select>
+      </el-form-item>
+      <!-- <el-form-item label="监考教师JSON" prop="xkkm_jkjs_json">
+        <el-input v-model="dialogForm_Data.xkkm_jkjs_json" type="textarea" />
+      </el-form-item> -->
       <div class="flex justify-center">
         <el-button @click="handleDialogFormBtn_submit('dialogForm_Ref_addOrEdit')" type="primary">提交</el-button>
         <el-button @click="handleDialogFormBtn_cancel('dialogForm_Ref_addOrEdit')" type="default">取消</el-button>

+ 5 - 2
src/pages/xdjx/stxkgl/kcxkgl/index.vue

@@ -38,6 +38,7 @@ type TYPE_TABLE_FIELD = {
   'xsxk_kbrs': string; // 开班人数
   'xsxk_xkkssj': string; // 选课开始时间
   'xsxk_xkjssj': string; // 选课结束时间
+  'xjj_zgbh':string // 职工编号
 }
 // #endregion
 
@@ -223,7 +224,7 @@ function editApi(data: Partial<TYPE_TABLE_FIELD>) {
     url: URL_CUT + '/edit',
     data: {
       [TABLE_KEY]: data[TABLE_KEY],
-      [URL_SUBMIT_KEY]: pick(data, ['xsxk_kcmc', 'xsxk_kclx', 'xsxk_rkjs', 'team_id', 'team_name', 'grade_id', 'grade_name', 'xsxk_xkzt', 'xsxk_kcsm', 'xsxk_kcfm', 'xsxk_kksj', 'xsxk_kbrs', 'xsxk_xkkssj', 'xsxk_xkjssj',]),
+      [URL_SUBMIT_KEY]: pick(data, ['xsxk_kcmc', 'xsxk_kclx', 'xsxk_rkjs', 'team_id', 'team_name', 'grade_id', 'grade_name', 'xsxk_xkzt', 'xsxk_kcsm', 'xsxk_kcfm', 'xsxk_kksj', 'xsxk_kbrs', 'xsxk_xkkssj', 'xsxk_xkjssj','xjj_zgbh']),
     }
   })
 }
@@ -388,7 +389,9 @@ init()
         </el-radio-group>
       </el-form-item>
       <el-form-item label="任课教师" prop="xsxk_rkjs">
-        <el-input v-model="dialogForm_Data.xsxk_rkjs" clearable />
+        <!-- <el-input v-model="dialogForm_Data.xsxk_rkjs" clearable /> -->
+        <remote-select url="/xdbg/jzggl_jsgl/index" :fields="['xjj_zgbh','xjj_xm']"  v-model="dialogForm_Data.xjj_zgbh"  v-model:model-name="dialogForm_Data.xsxk_rkjs" ></remote-select>
+
       </el-form-item>
       <!-- <el-form-item label="学期编号" prop="team_id"><el-input v-model="dialogForm_Data.team_id" clearable /></el-form-item> -->
       <el-form-item label="学期名称" prop="team_name">

+ 5 - 2
src/pages/xdjx/stxkgl/xktj/tjsh.vue

@@ -36,6 +36,7 @@ type TYPE_TABLE_FIELD = {
   'xsxt_sksj': string; // 上课时间
   'xsxt_shzt': string; // 审核状态
   'xsxk_id': string; // 所属课程编号
+  'xjj_zgbh':string // 职工编号
 }
 // #endregion
 
@@ -217,7 +218,7 @@ function editApi(data: Partial<TYPE_TABLE_FIELD>) {
     url: URL_CUT + '/edit',
     data: {
       [TABLE_KEY]: data[TABLE_KEY],
-      [URL_SUBMIT_KEY]: pick(data, ['xsxt_xsxm', 'team_id', 'team_name', 'grade_id', 'grade_name', 'class_id', 'class_name', 'xsxt_sqkc', 'xsxt_rkjs', 'xsxt_sksj', 'xsxt_shzt', 'xsxk_id',]),
+      [URL_SUBMIT_KEY]: pick(data, ['xsxt_xsxm', 'team_id', 'team_name', 'grade_id', 'grade_name', 'class_id', 'class_name', 'xsxt_sqkc', 'xsxt_rkjs', 'xsxt_sksj', 'xsxt_shzt', 'xsxk_id','xjj_zgbh']),
     }
   })
 }
@@ -388,7 +389,9 @@ init()
         <el-input v-model="dialogForm_Data.xsxt_sqkc" clearable />
       </el-form-item>
       <el-form-item label="任课教师" prop="xsxt_rkjs">
-        <el-input v-model="dialogForm_Data.xsxt_rkjs" clearable />
+        <!-- <el-input v-model="dialogForm_Data.xsxt_rkjs" clearable /> -->
+        <remote-select url="/xdbg/jzggl_jsgl/index" :fields="['xjj_zgbh','xjj_xm']"  v-model="dialogForm_Data.xjj_zgbh"  v-model:model-name="dialogForm_Data.xsxt_rkjs" ></remote-select>
+
       </el-form-item>
       <el-form-item label="上课时间" prop="xsxt_sksj">
         <el-input v-model="dialogForm_Data.xsxt_sksj" clearable />

+ 5 - 2
src/pages/xdjx/xypjgl/cjlr/index.vue

@@ -35,6 +35,7 @@ type TYPE_TABLE_FIELD = {
   'xxc_kmmc_json': string; // 科目名称JSON
   'xxc_js': string; // 教师名称
   'xxc_shzt': string; // 审核状态
+  'xjj_zgbh':string // 职工编号
 }
 // #endregion
 
@@ -227,7 +228,7 @@ function editApi(data: Partial<TYPE_TABLE_FIELD>) {
     url: URL_CUT + '/edit',
     data: {
       [TABLE_KEY]: data[TABLE_KEY],
-      [URL_SUBMIT_KEY]: pick(data, ['xxc_mc', 'team_id', 'xxc_yhncmc', 'team_name', 'xxc_yhncmc_json', 'xxk_id', 'xxk_mc', 'xxc_kmmc', 'xxc_kmmc_json', 'xxc_js', 'xxc_shzt',]),
+      [URL_SUBMIT_KEY]: pick(data, ['xxc_mc', 'team_id', 'xxc_yhncmc', 'team_name', 'xxc_yhncmc_json', 'xxk_id', 'xxk_mc', 'xxc_kmmc', 'xxc_kmmc_json', 'xxc_js', 'xxc_shzt','xjj_zgbh']),
     }
   })
 }
@@ -413,7 +414,9 @@ init()
         <el-input v-model="dialogForm_Data.xxc_kmmc_json" clearable />
       </el-form-item> -->
       <el-form-item label="教师名称" prop="xxc_js">
-        <el-input v-model="dialogForm_Data.xxc_js" clearable />
+        <!-- <el-input v-model="dialogForm_Data.xxc_js" clearable /> -->
+        <remote-select url="/xdbg/jzggl_jsgl/index" :fields="['xjj_zgbh','xjj_xm']"  v-model="dialogForm_Data.xjj_zgbh"  v-model:model-name="dialogForm_Data.xxc_js" ></remote-select>
+
       </el-form-item>
       <!-- <el-form-item label="审核状态" prop="xxc_shzt">
         <el-radio-group v-model="dialogForm_Data.xxc_shzt">

+ 45 - 17
src/pages/xdjx/xypjgl/kskmsz.vue

@@ -65,9 +65,9 @@ const handleTableRowBtn_import = async ({ file }: { file: File }) => {
 const handleTableRowBtn_export = () => {
   exportApi()
 }
-const handleTableRowBtn_add = () => {
+const handleTableRowBtn_add = (d?: Partial<TYPE_TABLE_FIELD>) => {
   whichDialogSubmit = 'add'
-  dialogForm_Data.value = {}
+  dialogForm_Data.value = { ...d }
   dialogVisible_addOrEdit.value = true
 }
 const handleTableRowBtn_delete = async () => {
@@ -113,13 +113,15 @@ function handleCurrentChange() {
 
 // #region (dialog base)
 const dialogForm_Data = ref<Partial<TYPE_TABLE_FIELD> & { keyword?: string }>({})
+const timestamp = ref(Date.now())
 
-const handleDialogFormBtn_submit = async (formRefKey: string,extendData?:Partial<TYPE_TABLE_FIELD>) => {
+const handleDialogFormBtn_submit = async (formRefKey: string, extendData?: Partial<TYPE_TABLE_FIELD>) => {
   const isValid = await (instance?.refs[formRefKey] as FormInstance).validate((valid: boolean) => valid)
   if (isValid) {
-    await API_MAP[whichDialogSubmit](<TYPE_TABLE_FIELD>({...dialogForm_Data.value,...extendData}))
+    await API_MAP[whichDialogSubmit](<TYPE_TABLE_FIELD>({ ...dialogForm_Data.value, ...extendData }))
     handleDialogFormBtn_cancel()
-    queryApi()
+    await queryApi()
+    timestamp.value = Date.now()
   }
 }
 const handleDialogFormBtn_cancel = (formRefKey?: string) => {
@@ -173,12 +175,13 @@ function queryApi() {
     data: {
       ...queryForm_Data.value,
       limit: limit.value,
-      page: currentPage.value
+      page: currentPage.value,
+      xxkm_pid: '1'
     }
   }).then((response: { data: { total_rows: string, page_data: TYPE_TABLE_FIELD[] } }) => {
     const { data } = response
     total.value = parseInt(data.total_rows)
-    tableData.value = data.page_data
+    tableData.value = data.page_data.map((row) => ({ ...row, hasChildren: true }))
     return response
   }).then(() => {
     loading_table.value = false
@@ -252,6 +255,25 @@ function init() {
 init()
 // #endregion
 
+const load = (
+  row: TYPE_TABLE_FIELD,
+  treeNode: unknown,
+  resolve: (date: TYPE_TABLE_FIELD[]) => void
+) => {
+
+  request({
+    url: URL_CUT + '/index',
+    data: {
+      limit: 100,
+      page: 1,
+      xxkm_pid: row[TABLE_KEY]
+    }
+  }).then((response: { data: { total_rows: string, page_data: TYPE_TABLE_FIELD[] } }) => {
+    const { data } = response
+    const tableData = data.page_data.map((row) => ({ ...row, hasChildren: true }))
+    resolve(tableData)
+  })
+}
 </script>
 
 <template>
@@ -278,16 +300,17 @@ init()
     <div>
       <!-- <import-button :url="URL_CUT_REF"></import-button>
       <el-button @click="handleTableRowBtn_export" type="success">导出</el-button> -->
-      <el-button @click="handleTableRowBtn_add" type="primary">新增</el-button>
+      <el-button @click="handleTableRowBtn_add({ xxkm_pid: '1' })" type="primary">新增</el-button>
       <!-- <el-button @click="handleTableRowBtn_delete" type="danger">删除</el-button> -->
     </div>
 
     <div class="divider"></div>
     <div class="flex-auto">
       <el-table :data="tableData" @selection-change="handleSelectionChange" v-loading="loading_table"
-        element-loading-background="#ffffff70">
-        <el-table-column type="selection"></el-table-column><el-table-column type="index" label="序号" width="60" :index="(i: number) => (currentPage - 1) * limit + i + 1" />
-        <!-- <el-table-column prop="xxkm_xh" label="序号" width="auto" show-overflow-tooltip></el-table-column> -->
+        element-loading-background="#ffffff70" row-key="xxkm_id" lazy :load="load" :key="timestamp">
+        <el-table-column type="selection"></el-table-column>
+        <el-table-column type="index" label="序号" width="60" :index="(i: number) => (currentPage - 1) * limit + i + 1" />
+        <el-table-column prop="xxkm_xh" label="科目编号" width="auto" show-overflow-tooltip></el-table-column>
         <!-- <el-table-column prop="xxkm_pid" label="所属父级编号" width="auto" show-overflow-tooltip></el-table-column> -->
         <el-table-column prop="xxkm_kmmc" label="科目名称" width="auto" show-overflow-tooltip></el-table-column>
         <el-table-column prop="xxkm_kmdj" label="科目等级" width="auto" show-overflow-tooltip></el-table-column>
@@ -295,10 +318,14 @@ init()
         <el-table-column prop="xxkm_yynjmc_json" label="应用年级" width="auto" show-overflow-tooltip></el-table-column>
         <el-table-column label="操作" fixed="right">
           <template #default="scope">
-            <el-button link :auto-insert-space="false" @click="handleTableColBtn_edit(scope)" type="primary" >编辑</el-button>
+            <el-button link :auto-insert-space="false" @click="handleTableColBtn_edit(scope)" type="primary">编辑
+            </el-button>
             <!-- <el-button link :auto-insert-space="false" @click="handleTableColBtn_audit(scope)" type="primary" >审核</el-button>
             <el-button link :auto-insert-space="false" @click="handleTableColBtn_detail(scope)" type="primary" >详情</el-button> -->
-            <el-button link :auto-insert-space="false" @click="handleTableColBtn_delete(scope)" type="primary" >删除
+            <el-button link :auto-insert-space="false" @click="handleTableColBtn_delete(scope)" type="primary">删除
+            </el-button>
+            <el-button link :auto-insert-space="false" @click="handleTableRowBtn_add({ xxkm_pid: scope.row.xxkm_pid })"
+              type="primary">添加下级
             </el-button>
           </template>
         </el-table-column>
@@ -314,12 +341,12 @@ init()
   <el-dialog v-model="dialogVisible_addOrEdit" append-to-body destroy-on-close>
     <el-form :model="dialogForm_Data" ref="dialogForm_Ref_addOrEdit" :rules="dialogForm_Rules_addOrEdit"
       label-width="120px">
-      <el-form-item label="号" prop="xxkm_xh">
+      <el-form-item label="科目编号" prop="xxkm_xh">
         <el-input v-model="dialogForm_Data.xxkm_xh" clearable />
       </el-form-item>
-      <el-form-item label="所属父级编号" prop="xxkm_pid">
+      <!-- <el-form-item label="所属父级编号" prop="xxkm_pid">
         <el-input v-model="dialogForm_Data.xxkm_pid" clearable />
-      </el-form-item>
+      </el-form-item> -->
       <el-form-item label="科目名称" prop="xxkm_kmmc">
         <el-input v-model="dialogForm_Data.xxkm_kmmc" clearable />
       </el-form-item>
@@ -328,7 +355,8 @@ init()
       </el-form-item>
       <el-form-item label="应用年级名称" prop="xxkm_yynjmc">
         <!-- <el-input v-model="dialogForm_Data.xxkm_yynjmc" clearable /> -->
-        <remote-select to="grade" v-model="dialogForm_Data.xxkm_yynjmc" v-model:modelName="dialogForm_Data.xxkm_yynjmc_json" />
+        <remote-select to="grade" v-model="dialogForm_Data.xxkm_yynjmc"
+          v-model:modelName="dialogForm_Data.xxkm_yynjmc_json" />
       </el-form-item>
       <!-- <el-form-item label="应用年级JSON" prop="xxkm_yynjmc_json">
         <el-input v-model="dialogForm_Data.xxkm_yynjmc_json" clearable />

+ 46 - 32
src/router/routes/xdhq.ts

@@ -9,7 +9,8 @@ export default <RouteRecordDetailRaw[]>[
     "meta": {
       "hidden": false,
       "breadcrumb": false,
-      "sort": 0
+      "sort": 0,
+      "title": "设备报修"
     },
     "component": () => import('~/pages/xdhq/sbbx.vue'),
     "children": [
@@ -26,17 +27,30 @@ export default <RouteRecordDetailRaw[]>[
         "component": () => import('~/pages/xdhq/sbbx/index.vue'),
         "redirect": null
       },
+      // {
+      //   "path": "bxw/:aid",
+      //   "name": "-SBBX-BXW",
+      //   "props": true,
+      //   "meta": {
+      //     "hidden": true,
+      //     "breadcrumb": false,
+      //     "sort": 1,
+      //     "title": "被维修"
+      //   },
+      //   "component": () => import('~/pages/xdhq/sbbx/bxw.vue'),
+      //   "redirect": null
+      // },
       {
-        "path": "bxw/:aid",
-        "name": "-SBBX-BXW",
+        "path": "bxlb",
+        "name": "-SBBX-BXLB",
         "props": true,
         "meta": {
-          "hidden": true,
+          "hidden": false,
           "breadcrumb": false,
           "sort": 1,
-          "title": "被维修"
+          "title": "报修类别"
         },
-        "component": () => import('~/pages/xdhq/sbbx/bxw.vue'),
+        "component": () => import('~/pages/xdhq/sbbx/bxlb.vue'),
         "redirect": null
       }
     ],
@@ -205,32 +219,32 @@ export default <RouteRecordDetailRaw[]>[
             "component": () => import('~/pages/xdhq/xcgl/xcgl/index.vue'),
             "redirect": null
           },
-          {
-            "path": "bjl/:aid",
-            "name": "-XCGL-XCGL-BJL",
-            "props": true,
-            "meta": {
-              "hidden": true,
-              "breadcrumb": false,
-              "sort": 1,
-              "title": "被借领"
-            },
-            "component": () => import('~/pages/xdhq/xcgl/xcgl/bjl.vue'),
-            "redirect": null
-          },
-          {
-            "path": "bxw/:aid",
-            "name": "-XCGL-XCGL-BXW",
-            "props": true,
-            "meta": {
-              "hidden": true,
-              "breadcrumb": false,
-              "sort": 2,
-              "title": "被维修"
-            },
-            "component": () => import('~/pages/xdhq/xcgl/xcgl/bxw.vue'),
-            "redirect": null
-          }
+          // {
+          //   "path": "bjl/:aid",
+          //   "name": "-XCGL-XCGL-BJL",
+          //   "props": true,
+          //   "meta": {
+          //     "hidden": true,
+          //     "breadcrumb": false,
+          //     "sort": 1,
+          //     "title": "被借领"
+          //   },
+          //   "component": () => import('~/pages/xdhq/xcgl/xcgl/bjl.vue'),
+          //   "redirect": null
+          // },
+          // {
+          //   "path": "bxw/:aid",
+          //   "name": "-XCGL-XCGL-BXW",
+          //   "props": true,
+          //   "meta": {
+          //     "hidden": true,
+          //     "breadcrumb": false,
+          //     "sort": 2,
+          //     "title": "被维修"
+          //   },
+          //   "component": () => import('~/pages/xdhq/xcgl/xcgl/bxw.vue'),
+          //   "redirect": null
+          // }
         ],
         "redirect": {
           "name": "-XCGL-XCGL-INDEX"

+ 94 - 8
src/router/routes/xdjx.ts

@@ -274,29 +274,115 @@ export default <RouteRecordDetailRaw[]>[
           "name": "-KBGL-XXZKB-INDEX"
         }
       },
+      // {
+      //   "path": "nbjkb",
+      //   "name": "-KBGL-NBJKB",
+      //   "props": false,
+      //   "meta": {
+      //     "hidden": false,
+      //     "breadcrumb": false,
+      //     "sort": 5,
+      //     "title": "年/班级课表"
+      //   },
+      //   "component": () => import('~/pages/xdjx/kbgl/nbjkb.vue'),
+      //   "children": [
+      //     {
+      //       "path": "",
+      //       "name": "-KBGL-NBJKB-INDEX",
+      //       "props": false,
+      //       "meta": {
+      //         "hidden": false,
+      //         "breadcrumb": false,
+      //         "sort": 0,
+      //         "title": "年/班级课表"
+      //       },
+      //       "component": () => import('~/pages/xdjx/kbgl/nbjkb/index.vue'),
+      //       "redirect": null
+      //     },
+      //     {
+      //       "path": "detail/:aid",
+      //       "name": "-KBGL-NBJKB-DETAIL",
+      //       "props": true,
+      //       "meta": {
+      //         "hidden": true,
+      //         "breadcrumb": false,
+      //         "sort": 1,
+      //         "title": "年/班级课表详情"
+      //       },
+      //       "component": () => import('~/pages/xdjx/kbgl/nbjkb/detail.vue'),
+      //       "redirect": null
+      //     }
+      //   ],
+      //   "redirect": {
+      //     "name": "-KBGL-NBJKB-INDEX"
+      //   }
+      // },
+      {
+        "path": "njkb",
+        "name": "-KBGL-NJKB",
+        "props": false,
+        "meta": {
+          "hidden": false,
+          "breadcrumb": false,
+          "sort": 5,
+          "title": "年级课表"
+        },
+        "component": () => import('~/pages/xdjx/kbgl/nbjkb.vue'),
+        "children": [
+          {
+            "path": "",
+            "name": "-KBGL-NJKB-INDEX",
+            "props": false,
+            "meta": {
+              "hidden": false,
+              "breadcrumb": false,
+              "sort": 0,
+              "title": "年级课表"
+            },
+            "component": () => import('~/pages/xdjx/kbgl/njkb/index.vue'),
+            "redirect": null
+          },
+          {
+            "path": "detail/:aid",
+            "name": "-KBGL-NBJKB-DETAIL",
+            "props": true,
+            "meta": {
+              "hidden": true,
+              "breadcrumb": false,
+              "sort": 1,
+              "title": "年级课表详情"
+            },
+            "component": () => import('~/pages/xdjx/kbgl/nbjkb/detail.vue'),
+            "redirect": null
+          }
+        ],
+        "redirect": {
+          "name": "-KBGL-NJKB-INDEX"
+        }
+      },
       {
-        "path": "nbjkb",
-        "name": "-KBGL-NBJKB",
+        "path": "bjkb",
+        "name": "-KBGL-BJKB",
         "props": false,
         "meta": {
           "hidden": false,
           "breadcrumb": false,
           "sort": 5,
-          "title": "年/班级课表"
+          "title": "班级课表"
         },
         "component": () => import('~/pages/xdjx/kbgl/nbjkb.vue'),
         "children": [
           {
             "path": "",
-            "name": "-KBGL-NBJKB-INDEX",
+            "name": "-KBGL-BJKB-INDEX",
             "props": false,
             "meta": {
               "hidden": false,
               "breadcrumb": false,
               "sort": 0,
-              "title": "年/班级课表"
+              "title": "班级课表"
             },
-            "component": () => import('~/pages/xdjx/kbgl/nbjkb/index.vue'),
+            "component": () => import('~/pages/xdjx/kbgl/bjkb/index.vue'),
             "redirect": null
           },
           {
@@ -307,14 +393,14 @@ export default <RouteRecordDetailRaw[]>[
               "hidden": true,
               "breadcrumb": false,
               "sort": 1,
-              "title": "年/班级课表详情"
+              "title": "班级课表详情"
             },
             "component": () => import('~/pages/xdjx/kbgl/nbjkb/detail.vue'),
             "redirect": null
           }
         ],
         "redirect": {
-          "name": "-KBGL-NBJKB-INDEX"
+          "name": "-KBGL-BJKB-INDEX"
         }
       },
       {