Browse Source

数据上报

ZhaoJing 1 year ago
parent
commit
950347b3b6

+ 288 - 0
src/pages/personal/components/sjsb/edit.vue

@@ -0,0 +1,288 @@
+<script setup>
+import { ElMessage } from "element-plus";
+import { user } from "~/store/user";
+const props = defineProps({
+  id: String,
+});
+
+let form = $ref({});
+let time = $ref();
+let timeList = $ref([
+  "2023-09~2024-08",
+  "2024-09~2025-08",
+  "2025-09~2026-08",
+  "2026-09~2027-08",
+  "2027-09~2028-08",
+]);
+
+let isEdit = $ref(false);
+let user_role = $ref("sj");
+let loading = $ref(true);
+let schoolList = $ref([]);
+let subSchoolList = $ref([]);
+async function getSchool() {
+  if (user.user_role_id == "72" || user.user_role_id == "75") {
+    user_role = "xj";
+  } else {
+    user_role = "sj";
+  }
+  await request({
+    url: "/sjsb/zjh_yshlw_school/index",
+    data: {
+      page: "1",
+      limit: 999,
+    },
+  }).then((res) => {
+    if (res.code == "1") {
+      schoolList = res.data.page_data;
+      if (!isEdit && user_role == "xj") {
+        let index = res.data.page_data.findIndex(
+          (el) => user.sm_id == el.szyx_sm_id
+        );
+        if (index === -1) {
+          ElMessage.warning("用户所在学校异常,请联系管理员处理");
+        } else {
+          form.zjhx_sm_id = res.data.page_data[index].szyx_sm_id;
+          handleChangeSm(form.zjhx_sm_id)
+        }
+      }
+    }
+  });
+}
+
+function handleChangeSm(e) {
+  form.jgtId = "";
+  if (!e) {
+    subSchoolList = [];
+    return;
+  }
+  request({
+    url: "/sjsb/zjh_yshlw_school/index",
+    data: {
+      page: "1",
+      limit: 999,
+      szyx_sm_id: e,
+    },
+  }).then((res) => {
+    if (res.code == "1") {
+      subSchoolList = res.data.page_data;
+    }
+  });
+}
+
+if (props.id) {
+  isEdit = true;
+  getSchool();
+  request({
+    url: "/sjsb/zjh_yshlw_xxtj/detail",
+    data: {
+      szyx_id: props.id,
+    },
+  }).then((res) => {
+    if (res.code === "1") {
+      console.log("res :>> ", res);
+      // Object.keys(form).forEach((key) => {
+      //   form[key] = res.data.one_info[key];
+      // });
+      for (const key in res.data.one_info) {
+        form[key] = res.data.one_info[key];
+      }
+      handleChangeSm(res.data.one_info.zjhx_sm_id);
+      form.jgtId = res.data.one_info.jgtId;
+      time = `${res.data.one_info.startTime}~${res.data.one_info.endTime}`;
+      // form.ym_student_num = res.data.one_info.ym_student_num * 1;
+      // form.ym_timetable_json = res.data.one_info.ym_timetable_json?.split(',')
+      // form.ym_date = res.data.one_info.ym_date;
+      loading = false;
+    }
+  });
+} else {
+  isEdit = false;
+  getSchool();
+  loading = false;
+}
+
+const rules = {
+  zjhx_sm_id: [
+    { required: true, message: "请选择艺校学校名称", trigger: "submit" },
+  ],
+  jgtId: [
+    { required: true, message: "请选择教共体学校名称", trigger: "submit" },
+  ],
+  bindClassNum: [
+    { required: true, message: "请输入已结对班级数", trigger: "submit" },
+  ],
+  partClassNum: [
+    { required: true, message: "请输入参与班级数", trigger: "submit" },
+  ],
+  centerNum: [
+    { required: true, message: "请输入主讲老师数", trigger: "submit" },
+  ],
+  partNum: [{ required: true, message: "请输入助教⽼师数", trigger: "submit" }],
+  studentNum: [
+    { required: true, message: "请输入参与学生数", trigger: "submit" },
+  ],
+  teacherNum: [
+    { required: true, message: "请输入总教师数", trigger: "submit" },
+  ],
+  time: [{ required: true, message: "请选择考核周期", trigger: "submit" }],
+};
+
+let isRead = $ref(false);
+let formRef = $ref();
+function handleSubmit() {
+  console.log("form :>> ", form);
+  if (isRead) {
+    formRef.validate().then((res) => {
+      console.log("res :>> ", res);
+      if (res === true) {
+        let zjhx_sm_name;
+        let smIndex = schoolList.findIndex(
+          (el) => el.szyx_sm_id == form.zjhx_sm_id
+        );
+        if (smIndex > -1) zjhx_sm_name = schoolList[smIndex].szyx_sm_name;
+        let jgtId_name;
+        let subIndex = subSchoolList.findIndex((el) => el.jgtId == form.jgtId);
+        if (subIndex > -1) jgtId_name = subSchoolList[subIndex].jgtId_name;
+        request({
+          url: `/sjsb/zjh_yshlw_xxtj/${props.id ? "edit" : "add"}`,
+          data: {
+            szyx_id: props.id,
+            sjsb_zjh_yshlw_xxtj: {
+              ...form,
+              startTime: time.split("~")[0],
+              endTime: time.split("~")[1],
+              zjhx_sm_name,
+              jgtId_name,
+            },
+          },
+        }).then((res) => {
+          if (res.code === "1") {
+            ElMessage.success(res.msg);
+            handleBack();
+          }
+        });
+      }
+    });
+  } else {
+    ElMessage.warning("请先勾选协议");
+  }
+}
+
+const router = useRouter();
+function handleBack() {
+  router.push({ name: "personal_sjsb" });
+}
+</script>
+
+<template>
+  <div
+    class="w-full flex flex-col shadow bg-white rounded-md mt-4 p-4 items-center"
+  >
+    <div class="text-lg text-hex-050026 w-full font-semibold">数据上报</div>
+
+    <div class="w-480px text-hex-949494" v-loading="loading">
+      <el-form
+        :model="form"
+        label-position="top"
+        ref="formRef"
+        :rules="rules"
+        v-if="!loading"
+      >
+        <div class="flex justify-between">
+          <div>
+            <el-form-item label="艺校学校名称" prop="zjhx_sm_id">
+              <el-select
+                v-model="form.zjhx_sm_id"
+                clearable
+                :disabled="isEdit || user_role=='xj'"
+                @change="handleChangeSm"
+              >
+                <el-option
+                  v-for="item in schoolList"
+                  :key="item.szyx_sm_id"
+                  :value="item.szyx_sm_id"
+                  :label="item.szyx_sm_name"
+                />
+              </el-select>
+            </el-form-item>
+            <el-form-item label=" 已结对班级数" prop="bindClassNum">
+              <el-input-number v-model="form.bindClassNum" />
+            </el-form-item>
+            <el-form-item label="参与班级数" prop="partClassNum">
+              <el-input-number v-model="form.partClassNum" />
+            </el-form-item>
+            <el-form-item label="主讲老师数" prop="centerNum">
+              <el-input-number v-model="form.centerNum" />
+            </el-form-item>
+            <el-form-item label=" 总教师数" prop="teacherNum">
+              <el-input-number v-model="form.teacherNum" />
+            </el-form-item>
+          </div>
+          <div>
+            <el-form-item label="教共体学校名称" prop="jgtId">
+              <el-select :disabled="isEdit" v-model="form.jgtId" clearable>
+                <el-option
+                  v-for="item in subSchoolList"
+                  :key="item.jgtId"
+                  :value="item.jgtId"
+                  :label="item.jgtId_name"
+                />
+              </el-select>
+            </el-form-item>
+            <el-form-item label="约课数" prop="subNum">
+              <el-input-number v-model="form.subNum" />
+            </el-form-item>
+            <el-form-item label="考核周期" prop="time">
+              <el-select v-model="time" clearable>
+                <el-option
+                  v-for="(item, index) in timeList"
+                  :key="index"
+                  :value="item"
+                  :label="item"
+                />
+              </el-select>
+            </el-form-item>
+            <el-form-item label=" 助教教师数" prop="partNum">
+              <el-input-number v-model="form.partNum" />
+            </el-form-item>
+            <el-form-item label=" 参与学生数" prop="studentNum">
+              <el-input-number v-model="form.studentNum" />
+            </el-form-item>
+          </div>
+        </div>
+
+        <el-checkbox
+          v-model="isRead"
+          label="已阅读并同意《约课协议》"
+          size="large"
+        />
+
+        <div class="flex justify-around items-center text-sm mt-8">
+          <div
+            class="w-166px h-50px flex_center rounded bg-hex-00A3FF text-white cursor-pointer"
+            @click="handleSubmit"
+          >
+            提交
+          </div>
+          <div
+            class="w-166px h-50px flex_center rounded bg-hex-F4F4F4 text-hex-41387F cursor-pointer"
+            @click="handleBack"
+          >
+            关闭
+          </div>
+        </div>
+      </el-form>
+    </div>
+  </div>
+</template>
+
+<style lang="scss" scoped>
+:deep() {
+  .el-input,
+  .el-select,
+  .el-input-number {
+    width: 200px;
+  }
+}
+</style>

+ 183 - 0
src/pages/personal/components/sjsb/index.vue

@@ -0,0 +1,183 @@
+<script setup>
+import { getFullUrl, getAvatarUrl } from "~/utils/helper";
+import { Search as IconSearch } from "@element-plus/icons-vue";
+import { ElMessage } from "element-plus";
+
+let keyword = $ref("");
+const queryForm = reactive({
+  page: 1,
+});
+
+// 我创建的
+let data = $ref([]);
+let total = $ref(0);
+
+let loading = $ref(false);
+function queryData() {
+  loading = true;
+  request({
+    url: "/sjsb/zjh_yshlw_xxtj/index",
+    data: { ...queryForm,limit: '6', zjhx_sm_name: keyword },
+  }).then((res) => {
+    if (res.code === "1") {
+      data = res.data.page_data;
+      total = res.data.total_rows * 1;
+      queryForm.page = res.data.page_now
+      loading = false;
+    }
+  });
+}
+queryData();
+
+watch(queryForm, () => {
+  queryData();
+});
+
+let columnList = $ref([
+  {
+    prop: "zjhx_sm_name",
+    label: "艺校学校名称",
+    width:200
+  },
+  {
+    prop: "jgtId_name",
+    label: "教共体学校名称",
+    width:200
+  },
+  {
+    prop: "bindClassNum",
+    label: "已结对班级数",
+  },
+  {
+    prop: "subNum",
+    label: "约课数",
+    width: 100,
+  },
+  {
+    prop: "partClassNum",
+    label: "参与班级数",
+  },
+  {
+    prop: "time",
+    label: "考核周期",
+    width: 160,
+  },
+  {
+    prop: "centerNum",
+    label: "主讲老师数",
+  },
+  {
+    prop: "partNum",
+    label: "助教教师数",
+  },
+  {
+    prop: "teacherNum",
+    label: "总教师数",
+    width:100
+  },
+  {
+    prop: "studentNum",
+    label: "参与学生数",
+  },
+]);
+
+const router = useRouter();
+function handleClickAdd() {
+  router.push({ name: "personal_sjsb_add" });
+}
+function handleClickEdit(i) {
+  router.push({ name: "personal_sjsb_edit", params: { id: i.szyx_id } });
+}
+</script>
+
+<template>
+  <!-- <div class="w-full shadow bg-white rounded-md flex items-center px-36 py-4">
+      <div class="text-lg text-hex-050026">名师优课</div>
+      <el-divider direction="vertical" />
+      <div class="text-sm">
+        <span class="text-hex-949494">我的课程</span>
+        <span class="text-hex-949494"> - 我创建的</span>
+        <span> - 名师优课</span>
+      </div>
+    </div> -->
+
+  <div
+    class="w-full shadow bg-white flex flex-col rounded-md mt-4 bg-white"
+  >
+    <div class="flex justify-end px-8 py-2">
+      <div
+        class="w-100px h-50px flex_center rounded bg-hex-00A3FF text-white cursor-pointer"
+        @click="handleClickAdd"
+      >
+        创建
+      </div>
+      <div class="w-500px h-50px ml-8">
+        <el-input
+          class="w-500px h-full rounded-md"
+          placeholder="搜索关键字"
+          v-model="keyword"
+        >
+          <template #suffix>
+            <div
+              class="w-26px h-26px bg-hex-00A3FF rounded-md flex justify-center items-center cursor-pointer"
+              @click="queryData()"
+            >
+              <el-icon size="13" color="#fff">
+                <IconSearch />
+              </el-icon>
+            </div>
+          </template>
+        </el-input>
+      </div>
+    </div>
+
+    <div class="p-4">
+      <div class="flex flex-wrap justify-between">
+        <template v-if="data.length">
+          <!-- @click="handleClickDetail(i)" -->
+          <el-table :data="data" v-loading="loading" :height="280">
+            <el-table-column
+              v-for="(item, index) in columnList"
+              :key="index"
+              :prop="item.prop"
+              :label="item.label"
+              show-overflow-tooltip
+              :width="item.width"
+            >
+              <template v-if="item.prop == 'time'" #default="{ row }">
+                {{ row.startTime }}~{{ row.endTime }}
+              </template>
+            </el-table-column>
+            <el-table-column label="操作">
+              <template #default="{ row }">
+                <el-button type="primary" link @click="handleClickEdit(row)">
+                  编辑
+                </el-button>
+              </template>
+            </el-table-column>
+          </el-table>
+        </template>
+        <div v-else class="flex justify-center w-full">
+          <el-empty description="暂无数据" />
+        </div>
+      </div>
+      <div class="w-full flex justify-end my-10px">
+        <el-pagination
+          background
+          layout="total, prev, pager, next"
+          :total="total"
+          :page-size="6"
+          v-model:current-page="queryForm.page"
+        />
+      </div>
+    </div>
+  </div>
+</template>
+<style lang="scss" scoped>
+:deep(){
+    .el-table__inner-wrapper::before{
+        border: none;
+    }
+}
+    
+</style>

+ 8 - 1
src/pages/personal/index.vue

@@ -14,7 +14,9 @@
 
         <div class="menuDiv" v-if="!isStudent">
           <div class="list pointer" :class="activeMenu == item.url ? 'active' : ''" v-for="item in menuData" :key="item.name" @click="goToPage(item.url, item.type)">
-            {{ item.name }}
+            <template v-if="!item.hidden">
+              {{ item.name }} 
+            </template>
           </div>
         </div>
         <div class="menuDiv" v-if="isStudent">
@@ -126,6 +128,11 @@ export default {
           url: "http://www.txhlwxx.com/index.php?mod=txwx&action=hdhy&do=index&api=html",
           type: 1
         },
+        {
+          name: "数据上报",
+          url: "personal_sjsb",
+          hidden: user.user_role_id != '69' && user.user_role_id != '72' && user.user_role_id != '75'
+        },
       ],
       menuData1: [
         {

+ 28 - 1
src/router/index.js

@@ -162,7 +162,7 @@ const router = createRouter({
           path: "zjcm",
           name: "szmsg_zjcm",
           component: () => import("~/pages/szmsg/zjcm/index.vue"),
-        }
+        },
       ],
     },
 
@@ -712,6 +712,33 @@ const router = createRouter({
             },
           ],
         },
+        {
+          path: "sjsb",
+          title: "数据上报",
+          children: [
+            {
+              path: "",
+              name: "personal_sjsb",
+              props: true,
+              component: () =>
+                import("~/pages/personal/components/sjsb/index.vue"),
+            },
+            {
+              path: "add",
+              name: "personal_sjsb_add",
+              props: true,
+              component: () =>
+                import("~/pages/personal/components/sjsb/edit.vue"),
+            },
+            {
+              path: "edit/:id",
+              name: "personal_sjsb_edit",
+              props: true,
+              component: () =>
+                import("~/pages/personal/components/sjsb/edit.vue"),
+            },
+          ],
+        },
       ],
     },
     {