bzkf3 лет назад: 2
Родитель
Сommit
1466e3a545

+ 5 - 1
src/pages/xdjx/kbgl/bjkb/index.vue

@@ -392,7 +392,11 @@ init()
         </el-select>
       </el-form-item> -->
       <el-form-item label="课表文件" prop="xkn_xls">
-        <file-upload v-model:part="dialogForm_Data.xkn_xls" />
+        <file-upload accept=".xlsx,.xls" v-model:part="dialogForm_Data.xkn_xls" >
+          <template #tip>
+            <div>支持.xlsx,.xls类型文件</div>
+          </template>
+        </file-upload>
       </el-form-item>
       <el-form-item label="课表图片" prop="xkn_img">
         <file-upload v-model:part="dialogForm_Data.xkn_img" />

+ 5 - 1
src/pages/xdjx/kbgl/jskb/index.vue

@@ -337,7 +337,11 @@ init()
         </el-select>
       </el-form-item> -->
       <el-form-item label="课表文件" prop="xkj_xls">
-        <file-upload v-model:part="dialogForm_Data.xkj_xls" />
+        <file-upload accept=".xlsx,.xls" v-model:part="dialogForm_Data.xkj_xls" >
+          <template #tip>
+            <div>支持.xlsx,.xls类型文件</div>
+          </template>
+        </file-upload>
       </el-form-item>
 
       <el-form-item label="课表图片" prop="xkj_img">

+ 10 - 6
src/pages/xdjx/kbgl/njkb/index.vue

@@ -69,7 +69,7 @@ const handleTableRowBtn_import = async ({ file }: { file: File }) => {
   }
 }
 const handleTableRowBtn_export = () => {
-  if(multipleSelection.value.length===0) return ElMessage.info('请先勾选导出文件');exportApi({[TABLE_KEY]:multipleSelection.value.map((item: TYPE_TABLE_FIELD)=>item[TABLE_KEY])?.join()})
+  if (multipleSelection.value.length === 0) return ElMessage.info('请先勾选导出文件'); exportApi({ [TABLE_KEY]: multipleSelection.value.map((item: TYPE_TABLE_FIELD) => item[TABLE_KEY])?.join() })
 }
 const handleTableRowBtn_add = () => {
   whichDialogSubmit = 'add'
@@ -77,7 +77,7 @@ const handleTableRowBtn_add = () => {
   dialogVisible_addOrEdit.value = true
 }
 const handleTableRowBtn_delete = async () => {
-  if(multipleSelection.value.length===0) return ElMessage.info('请先勾选文件');const resp = await deleteApi(multipleSelection.value.map((item: TYPE_TABLE_FIELD) => item[TABLE_KEY]));if(resp.code!=='1')return;ElMessage.success('删除成功');
+  if (multipleSelection.value.length === 0) return ElMessage.info('请先勾选文件'); const resp = await deleteApi(multipleSelection.value.map((item: TYPE_TABLE_FIELD) => item[TABLE_KEY])); if (resp.code !== '1') return; ElMessage.success('删除成功');
   queryApi()
 }
 // #endregion
@@ -102,7 +102,7 @@ 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 }) => {
-  const resp = await deleteApi(scope.row[TABLE_KEY]);if(resp.code!=='1')return;ElMessage.success('删除成功');
+  const resp = await deleteApi(scope.row[TABLE_KEY]); if (resp.code !== '1') return; ElMessage.success('删除成功');
   queryApi()
 }
 // #endregion
@@ -124,7 +124,7 @@ const handleDialogFormBtn_submit = async (formRefKey: string, extendData?: Parti
   const isValid = await (instance?.refs[formRefKey] as FormInstance).validate((valid: boolean) => valid)
   if (isValid) {
     const resp = await API_MAP[whichDialogSubmit](<TYPE_TABLE_FIELD>({ ...dialogForm_Data.value, ...extendData }))
-    if(resp.code!=='1')return;ElMessage.success('操作成功');handleDialogFormBtn_cancel()
+    if (resp.code !== '1') return; ElMessage.success('操作成功'); handleDialogFormBtn_cancel()
     queryApi()
   }
 }
@@ -247,7 +247,7 @@ function importApi(data: { file: File }) {
 }
 
 function exportApi(d) {
-  return download(URL_CUT + '/index', {...queryForm_Data.value,...d})
+  return download(URL_CUT + '/index', { ...queryForm_Data.value, ...d })
 }
 
 const API_MAP = {
@@ -393,7 +393,11 @@ init()
         </el-select>
       </el-form-item> -->
       <el-form-item label="课表文件" prop="xkn_xls">
-        <file-upload v-model:part="dialogForm_Data.xkn_xls" />
+        <file-upload accept=".xlsx,.xls" v-model:part="dialogForm_Data.xkn_xls">
+          <template #tip>
+            <div>支持.xlsx,.xls类型文件</div>
+          </template>
+        </file-upload>
       </el-form-item>
       <el-form-item label="课表图片" prop="xkn_img">
         <file-upload v-model:part="dialogForm_Data.xkn_img" />

+ 10 - 6
src/pages/xdjx/kbgl/xxzkb/index.vue

@@ -65,7 +65,7 @@ const handleTableRowBtn_import = async ({ file }: { file: File }) => {
   }
 }
 const handleTableRowBtn_export = () => {
-  if(multipleSelection.value.length===0) return ElMessage.info('请先勾选导出文件');exportApi({[TABLE_KEY]:multipleSelection.value.map((item: TYPE_TABLE_FIELD)=>item[TABLE_KEY])?.join()})
+  if (multipleSelection.value.length === 0) return ElMessage.info('请先勾选导出文件'); exportApi({ [TABLE_KEY]: multipleSelection.value.map((item: TYPE_TABLE_FIELD) => item[TABLE_KEY])?.join() })
 }
 const handleTableRowBtn_add = () => {
   whichDialogSubmit = 'add'
@@ -73,7 +73,7 @@ const handleTableRowBtn_add = () => {
   dialogVisible_addOrEdit.value = true
 }
 const handleTableRowBtn_delete = async () => {
-  if(multipleSelection.value.length===0) return ElMessage.info('请先勾选文件');const resp = await deleteApi(multipleSelection.value.map((item: TYPE_TABLE_FIELD) => item[TABLE_KEY]));if(resp.code!=='1')return;ElMessage.success('删除成功');
+  if (multipleSelection.value.length === 0) return ElMessage.info('请先勾选文件'); const resp = await deleteApi(multipleSelection.value.map((item: TYPE_TABLE_FIELD) => item[TABLE_KEY])); if (resp.code !== '1') return; ElMessage.success('删除成功');
   queryApi()
 }
 // #endregion
@@ -98,7 +98,7 @@ 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 }) => {
-  const resp = await deleteApi(scope.row[TABLE_KEY]);if(resp.code!=='1')return;ElMessage.success('删除成功');
+  const resp = await deleteApi(scope.row[TABLE_KEY]); if (resp.code !== '1') return; ElMessage.success('删除成功');
   queryApi()
 }
 // #endregion
@@ -120,7 +120,7 @@ const handleDialogFormBtn_submit = async (formRefKey: string, extendData?: Parti
   const isValid = await (instance?.refs[formRefKey] as FormInstance).validate((valid: boolean) => valid)
   if (isValid) {
     const resp = await API_MAP[whichDialogSubmit](<TYPE_TABLE_FIELD>({ ...dialogForm_Data.value, ...extendData }))
-    if(resp.code!=='1')return;ElMessage.success('操作成功');handleDialogFormBtn_cancel()
+    if (resp.code !== '1') return; ElMessage.success('操作成功'); handleDialogFormBtn_cancel()
     queryApi()
   }
 }
@@ -235,7 +235,7 @@ function importApi(data: { file: File }) {
 }
 
 function exportApi(d) {
-  return download(URL_CUT + '/index', {...queryForm_Data.value,...d})
+  return download(URL_CUT + '/index', { ...queryForm_Data.value, ...d })
 }
 
 const API_MAP = {
@@ -338,7 +338,11 @@ init()
         <el-input v-model="dialogForm_Data.xkx_kbxq_json" clearable />
       </el-form-item> -->
       <el-form-item label="课表文件" prop="xkx_xls">
-        <file-upload v-model:full="dialogForm_Data.xkx_xls" clearable />
+        <file-upload accept=".xlsx,.xls" v-model:full="dialogForm_Data.xkx_xls" clearable>
+          <template #tip>
+            <div>支持.xlsx,.xls类型文件</div>
+          </template>
+        </file-upload>
       </el-form-item>
       <el-form-item label="课表图片" prop="xkx_img">
         <file-upload v-model:full="dialogForm_Data.xkx_img" clearable />

+ 18 - 6
src/pages/xdjx/tdkgl/tdksh.vue

@@ -78,7 +78,7 @@ const handleTableRowBtn_import = async ({ file }: { file: File }) => {
   }
 }
 const handleTableRowBtn_export = () => {
-  if(multipleSelection.value.length===0) return ElMessage.info('请先勾选导出文件');exportApi({[TABLE_KEY]:multipleSelection.value.map((item: TYPE_TABLE_FIELD)=>item[TABLE_KEY])?.join()})
+  if (multipleSelection.value.length === 0) return ElMessage.info('请先勾选导出文件'); exportApi({ [TABLE_KEY]: multipleSelection.value.map((item: TYPE_TABLE_FIELD) => item[TABLE_KEY])?.join() })
 }
 const handleTableRowBtn_add = () => {
   whichDialogSubmit = 'add'
@@ -86,7 +86,7 @@ const handleTableRowBtn_add = () => {
   dialogVisible_addOrEdit.value = true
 }
 const handleTableRowBtn_delete = async () => {
-  if(multipleSelection.value.length===0) return ElMessage.info('请先勾选文件');const resp = await deleteApi(multipleSelection.value.map((item: TYPE_TABLE_FIELD) => item[TABLE_KEY]));if(resp.code!=='1')return;ElMessage.success('删除成功');
+  if (multipleSelection.value.length === 0) return ElMessage.info('请先勾选文件'); const resp = await deleteApi(multipleSelection.value.map((item: TYPE_TABLE_FIELD) => item[TABLE_KEY])); if (resp.code !== '1') return; ElMessage.success('删除成功');
   queryApi()
 }
 // #endregion
@@ -111,7 +111,7 @@ 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 }) => {
-  const resp = await deleteApi(scope.row[TABLE_KEY]);if(resp.code!=='1')return;ElMessage.success('删除成功');
+  const resp = await deleteApi(scope.row[TABLE_KEY]); if (resp.code !== '1') return; ElMessage.success('删除成功');
   queryApi()
 }
 // #endregion
@@ -133,7 +133,7 @@ const handleDialogFormBtn_submit = async (formRefKey: string, extendData?: Parti
   const isValid = await (instance?.refs[formRefKey] as FormInstance).validate((valid: boolean) => valid)
   if (isValid) {
     const resp = await API_MAP[whichDialogSubmit](<TYPE_TABLE_FIELD>({ ...dialogForm_Data.value, ...extendData }))
-    if(resp.code!=='1')return;ElMessage.success('操作成功');handleDialogFormBtn_cancel()
+    if (resp.code !== '1') return; ElMessage.success('操作成功'); handleDialogFormBtn_cancel()
     queryApi()
     if (formRefKey === 'dialogForm_Ref_audit') {
       ElMessage.success('已提醒相关老师')
@@ -141,6 +141,14 @@ const handleDialogFormBtn_submit = async (formRefKey: string, extendData?: Parti
 
   }
 }
+const handleTableColBtn_audit1 = async (scope: { row: TYPE_TABLE_FIELD }) => {
+  const resp = await editApi({ [TABLE_KEY]: scope.row[TABLE_KEY], xtw_shzt: '1' })
+  if (resp.code !== '1') return;
+  queryApi()
+
+  ElMessage.success('已提醒相关老师')
+
+}
 const handleDialogFormBtn_cancel = (formRefKey?: string) => {
   dialogVisible_addOrEdit.value = false
   dialogVisible_audit.value = false
@@ -275,7 +283,7 @@ function importApi(data: { file: File }) {
 }
 
 function exportApi(d) {
-  return download(URL_CUT + '/index', {...queryForm_Data.value,...d})
+  return download(URL_CUT + '/index', { ...queryForm_Data.value, ...d })
 }
 
 const API_MAP = {
@@ -417,7 +425,11 @@ init()
         <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" :disabled="scope.row.xtw_shzt !== '3'">审核
+            <!-- <el-button link :auto-insert-space="false" @click="handleTableColBtn_audit(scope)" type="primary"
+              :disabled="scope.row.xtw_shzt !== '3'">审核
+            </el-button> -->
+            <el-button link :auto-insert-space="false" @click="handleTableColBtn_audit1(scope)" type="primary"
+              :disabled="scope.row.xtw_shzt !== '3'">通过
             </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> -->

+ 8 - 5
src/pages/xdjx/tdkgl/wdtdk.vue

@@ -379,6 +379,9 @@ const handleTargetChange = (item: any) => {
         <el-form-item>
           <el-button @click="handleQueryFormBtn_search2" type="primary">搜索</el-button>
           <el-button @click="handleQueryFormBtn_clear2" type="warning">清空</el-button>
+
+          <import-button @success="queryApi" url="/xdjx/kbgl_jskbmx">老师课表导入</import-button>
+
         </el-form-item>
       </el-form>
       <div class="divider"></div>
@@ -480,10 +483,10 @@ const handleTargetChange = (item: any) => {
         <div>
           <import-button @success="queryApi" :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>
 
-          <import-button @success="queryApi" url="/xdjx/kbgl_jskbmx">老师课表导入</import-button>
+          <!-- <import-button @success="queryApi" url="/xdjx/kbgl_jskbmx">老师课表导入</import-button> -->
 
         </div>
 
@@ -609,7 +612,7 @@ const handleTargetChange = (item: any) => {
           <el-form-item label="调课名称" prop="xtw_tkmc">
             <remote-select v-model="dialogForm_Data.id_old" url="/xdjx/kbgl_jskbmx/index" :d="{
               xjj_zgbh: user.user_no,
-              tkzt: 1
+              tkzt: '1,4',
               // team_id: info_team_id
             }" :fields="['id', 'lesson_name']" :change="handleOriginChange" :label="({ xjj_xm, skrq, skjc, lesson_name }) => [xjj_xm, skrq, `第${skjc}节`,
 lesson_name].join(' / ')">
@@ -627,7 +630,7 @@ lesson_name].join(' / ')">
 
           <el-form-item label="换课名称" prop="xtw_hdkmc" v-if="dialogForm_Data.xtw_tklx === '2'">
             <remote-select v-model="dialogForm_Data.id_new" url="/xdjx/kbgl_jskbmx/index"
-              :d="{ tkzt: 1/*xjj_zgbh: user.user_no, team_id: info_team_id*/ }" :fields="['id', 'lesson_name']"
+              :d="{ tkzt: '1,4',not_in:user.user_no,/*xjj_zgbh: user.user_no, team_id: info_team_id*/ }" :fields="['id', 'lesson_name']"
               :change="handleTargetChange" :label="({ xjj_xm, skrq, skjc, lesson_name }) => [xjj_xm, skrq, `第${skjc}节`,
               lesson_name].join(' / ')">
               <template #default="{ item: { xjj_xm, skrq, skjc, lesson_name } }">{{ [xjj_xm, skrq, `第${skjc}节`,
@@ -638,7 +641,7 @@ lesson_name].join(' / ')">
           <el-form-item label="代课教师" prop="xtw_hdkjsxm" v-if="dialogForm_Data.xtw_tklx === '1'">
             <!-- <el-input v-model="dialogForm_Data.xtw_hdkjsxm" clearable /> -->
             <remote-select url="/user/main/index" :fields="['user_no', 'user_realname']"
-              :d="{ user_role_id: '7', dept_id: user.dept_id }" v-model="dialogForm_Data.xtw_hdkjs_user_id"
+              :d="{ not_in:user.user_no,user_role_id: '7', dept_id: user.dept_id }" v-model="dialogForm_Data.xtw_hdkjs_user_id"
               v-model:model-name="dialogForm_Data.xtw_hdkjsxm"></remote-select>
           </el-form-item>
           <!-- <el-form-item label="换代课周次" prop="xtw_hdkzc">

+ 2 - 2
src/router/index.ts

@@ -2,9 +2,9 @@ import { createRouter, createWebHashHistory, RouteRecordRaw } from 'vue-router';
 import { RouteRecordDetailRaw } from './routes.d';
 import { app_ready,app_routes } from '~/store/app';
 
-// import localRoutes from './routes/xdjx';
+import localRoutes from './routes/xdjx';
 // import localRoutes from './routes/xdjy';
-import localRoutes from './routes/xdhq';
+// import localRoutes from './routes/xdhq';
 
 const router = createRouter({
   history: createWebHashHistory(),

+ 104 - 0
src/store/local/wyj.js

@@ -0,0 +1,104 @@
+export default {
+  "user_id": "1936",
+  "user_name": "62b9422ff70a66a2829396a2",
+  "user_realname": "汪元吉1936",
+  "user_password": "b923bc037bffebe673963ddd046c7306990ea7aa",
+  "user_group_id": "1",
+  "user_role_id": "7",
+  "user_level_id": "1",
+  "user_detail_id": "0",
+  "user_score": "0",
+  "create_dateline": "0",
+  "modify_dateline": "1669861231",
+  "isdelete": "0",
+  "area_id1": "0",
+  "area_id2": "0",
+  "area_id3": "0",
+  "area_id4": "0",
+  "dept_id": "1070",
+
+  "class_id": null,
+  "user_phone": "",
+  "user_cardno": "",
+  "phone_validation": "0",
+  "parent_user_id": "0",
+  "user_nickname": "",
+  "user_avatar": "",
+  "user_email": "",
+  "email_validation": "0",
+  "email_token": "",
+  "email_token_exptime": "0",
+  "ischeck": "1",
+  "address": "",
+  "gender": "1",
+
+  "about": null,
+  "qq": "",
+  "openid": "",
+  "user_birthday": "0000-00-00",
+  "webchatopenid": "",
+  "user_level": "1",
+  "user_abalance": "0.00",
+  "user_dcash": "0.00",
+  "user_dqsj": "",
+  "user_alipay_account": "",
+  "cubeUserId": "62b9422ff70a66a2829396a2",
+  "outUserId": "",
+  "cubeOrgId": "103265160",
+  "cubeinfo": "null",
+  "user_no": "1936",
+  "token": "d619hqD59nZBti2vZWai0OZn_bRWo4U_bC7oKXakm5BBB2g5GvRB142JHYt5Sv5Kolc8uOWjEDP_aSr4WYEqQQHZ_ap1fIgHvjqHMw_bkznYTMg",
+
+  "setting": {
+  "sitename": "景宁教育魔方",
+  "sitedomain": "http://jnjymf_api.bozedu.top/",
+  "site_icp": "浙ICP备05048509号-1",
+  "sitelogo": "http://jnjymf_api.bozedu.top/src/assets/image/public/logo3.png",
+  "siteqrcode": "http://jnjymf_api.bozedu.top/dev.qr.png",
+  "sitefavicon": "",
+  "user_failedlogin_max": "5"
+  },
+
+  "user_org": [
+
+  {
+  "uo_id": "323",
+  "uo_name": "景宁畲族自治县教育局",
+  "uo_master_username": "625cce3e63fae8144b719348,6268f6def6e7a89284f6d9d8",
+  "uo_type": "1"
+  },
+
+  {
+  "uo_id": "1036",
+  "uo_name": "学校",
+  "uo_master_username": "",
+  "uo_type": "1"
+  },
+
+  {
+  "uo_id": "1046",
+  "uo_name": "高中",
+  "uo_master_username": "",
+  "uo_type": "1"
+  },
+
+  {
+  "uo_id": "1070",
+  "uo_name": "测试实验高中",
+  "uo_master_username": "",
+  "uo_type": "1"
+  }
+  ],
+  "uo_id": "1070",
+  "uo_type": "1",
+  "uo_name": "测试实验高中",
+
+  "dept_ids": [
+  "323",
+  "1036",
+  "1046",
+  "1070"
+  ],
+
+  "dept_master": []
+  }

+ 10 - 3
src/store/user.ts

@@ -1,4 +1,11 @@
-import local from './local/zj'
+// import local from './local/wyj'
+import local from './local/zjx'
 
-export const user = local
-// export const user = JSON.parse(localStorage.getItem('userInfo') as string)
+localStorage.setItem('userInfo', JSON.stringify(local))
+// export const user = local
+// export const user = JSON.parse(localStorage.getItem('userInfo') as string)
+
+let user = JSON.parse(localStorage.getItem('userInfo') as string)
+export {
+  user
+}

+ 28 - 3
src/utils/request.ts

@@ -80,13 +80,33 @@ Request.interceptors.request.use(
   }
 )
 
+let isRelogin = false
 // response interceptor
 Request.interceptors.response.use(
   (response) => {
     response.data.code = response.data?.code?.toString()
     response.data.msg = response.data.msg.replaceAll(/<.*?>/g, ' ')
-    const { code, msg } = response.data
-    if (code !== '1') {
+    const { code, msg, data } = response.data
+    if (code === '10001') {
+      if (!isRelogin) {
+        isRelogin = true
+        ElMessage.error(msg)
+        Request({
+          url: '/user/main/login',
+          data: {
+            token: data.token
+          }
+        }).then(res => {
+          if (res.code === '1') {
+            localStorage.setItem('userInfo', JSON.stringify(res.data));
+            isRelogin = false
+            // 视情况打开
+            location.reload()
+          }
+        })
+      }
+
+    } else if (code !== '1') {
       ElMessage.error(msg)
     }
     return response.data
@@ -106,7 +126,12 @@ export function download(url: string, data?: object | null) {
   el.click()
 }
 
-export default Request
+export default (...args) => {
+  if (!isRelogin)
+    return Request(...args)
+  else
+    return Promise.reject({})
+}
 
 const obj2form = (data) => {
   const formData = new FormData()