Kaynağa Gözat

feat 新增一体机院校功能

sys5923812@126.com 1 ay önce
ebeveyn
işleme
ab84db9906

+ 1 - 0
package.json

@@ -32,6 +32,7 @@
     "nprogress": "0.2.0",
     "pinia": "3.0.2",
     "splitpanes": "4.0.4",
+    "video.js": "^8.23.3",
     "vue": "3.5.16",
     "vue-cropper": "1.1.1",
     "vue-router": "4.5.1",

+ 72 - 0
src/api/xjc-integratedmachine/university.js

@@ -0,0 +1,72 @@
+import request from '@/utils/request'
+
+export function universityList(query) {
+    return request({
+        url: '/integratedmachine/tsytj/university/universityList',
+        method: 'get',
+        params: query
+    })
+}
+
+export function universityDetail(data) {
+    return request({
+        url: '/integratedmachine/tsytj/university/universityDetail',
+        method: 'post',
+        data: data
+    })
+}
+
+export function universityQuery() {
+    return request({
+        url: '/integratedmachine/tsytj/university/universityQuery',
+        method: 'post',
+    })
+}
+
+export function getPlanYearList(data) {
+    return request({
+        url: '/integratedmachine/tsytj/university/getPlanYearList',
+        method: 'post',
+        data: data
+    })
+}
+
+export function getScoreList(data) {
+    return request({
+        url: '/integratedmachine/tsytj/university/getScoreList',
+        method: 'post',
+        data: data
+    })
+}
+
+export function getPlanList(data) {
+    return request({
+        url: '/integratedmachine/tsytj/university/getPlanList',
+        method: 'post',
+        data: data
+    })
+}
+
+//收藏
+export function addCollection(data) {
+    return request({
+        url: '/integratedmachine/tsytj/university/addCollection',
+        method: 'post',
+        data: data
+    })
+}
+export function getCollection(data) {
+    return request({
+        url: '/integratedmachine/tsytj/university/getCollection',
+        method: 'post',
+        data: data
+    })
+}
+export function removeCollection(data) {
+    return request({
+        url: '/integratedmachine/tsytj/university/removeCollection',
+        method: 'post',
+        data: data
+    })
+}
+

+ 46 - 0
src/api/xjc-platform/collection.js

@@ -0,0 +1,46 @@
+import request from '@/utils/request'
+
+// 查询收藏列表
+export function listCollection(query) {
+    return request({
+        url: '/platform/collection/list',
+        method: 'get',
+        params: query
+    })
+}
+
+// 查询收藏详细
+export function getCollection(id) {
+    return request({
+        url: '/platform/collection/' + id,
+        method: 'get'
+    })
+}
+
+// 新增收藏
+export function addCollection(data) {
+    return request({
+        url: '/platform/collection',
+        method: 'post',
+        data: data
+    })
+}
+
+// 修改收藏
+export function updateCollection(data) {
+    return request({
+        url: '/platform/collection',
+        method: 'put',
+        data: data
+    })
+}
+
+// 删除收藏
+export function delCollection(id) {
+    return request({
+        url: '/platform/collection/' + id,
+        method: 'delete'
+    })
+}
+
+

+ 1 - 2
src/router/router_cognize.js

@@ -14,11 +14,10 @@ const router = [
         path: '/xjc-integratedmachine/cognize/knowledge_explanation',
         component: () => import('@/views/xjc-integratedmachine/cognize/knowledge_explanation.vue'),
     },
-    ,
     //兴趣探索测评
     {
         path: '/xjc-integratedmachine/cognize/evaluation',
-        component: () => import('@/views/xjc-integratedmachine/cognize/evaluation.vues'),
+        component: () => import('@/views/xjc-integratedmachine/cognize/evaluation.vue'),
     },
     //兴趣探索网页报告
     {

+ 25 - 4
src/views/xjc-integratedmachine/environment/index.vue

@@ -1,10 +1,31 @@
 <template>
-    环境探索首页
+    数字化生涯学习系列资源<br>
+    环境探索学习系统<br>
+    生涯学习不仅要对自我进行认知,还要对家庭和社会环境进行探索,对学职世界的外部环境进行探索,即对高校、专业、职业的探究。<br>
+    <button @click="jumpTo('/xjc-integratedmachine/environment/query_universitydb_conditions')">高校库</button>
+    <button>专业库</button>
+    <button>职业库</button>
+    <button>学职咨询</button>
+    <button>高校视频</button>
+    <button>专业视频</button>
+    <button>职业视频</button>
+    <button>家庭职业树</button>
+    <button>科学与未来专业职业</button>
+    <button>专业检索体验单</button>
+    <button>职业检索体验单</button>
+
+
 </template>
 
-<script>
-    export default {
-        name: "index"
+<script setup>
+    const route = useRoute()
+    const router = useRouter()
+    const {proxy} = getCurrentInstance()
+
+    function jumpTo(path) {
+        router.push({
+            path : path
+        })
     }
 </script>
 

+ 97 - 0
src/views/xjc-integratedmachine/environment/query_universitydb_conditions.vue

@@ -1,8 +1,105 @@
 <template>
     高校库条件查询
+
+    <el-card style="width:200px">
+        <div v-for="o in 4" :key="o" class="text item">
+            {{'列表内容 ' + o }}
+        </div>
+    </el-card>
+
+    <div @click="showAreaChooseHandler">院校属地::{{form.areaname}}</div>
+    <div @click="showEducationlevelHandler">学历层次:: {{form.educationlevelName}}</div>
+    <div @click="showCharacteristicHandler">特色::{{form.characteristicName}}</div>
+
+
+
+    <div>
+        <!--院校属地-->
+        <el-dialog v-model="showAreaChoose" width="600px" append-to-body>
+            <div v-for="dict in gk_province" :key="dict.value" @click="chooseArea(dict)">{{dict.label}}</div>
+        </el-dialog>
+    </div>
+    <div>
+        <!--学历层次-->
+        <el-dialog v-model="showEducationlevel" width="600px" append-to-body>
+            <div v-for="dict in educationlevel" :key="dict.value" @click="chooseEducationlevel(dict)">{{dict.label}}</div>
+        </el-dialog>
+    </div>
+    <div>
+        <!--特色-->
+        <el-dialog v-model="showCharacteristic" width="600px" append-to-body>
+            <div v-for="dict in characteristic" :key="dict.value" @click="chooseCharacteristic(dict)">{{dict.label}}</div>
+        </el-dialog>
+    </div>
+
+    <el-button @click="search">开始查询</el-button>
+
 </template>
 
 <script setup>
+    const router = useRouter()
+
+    const showAreaChoose = ref(false)
+    const showEducationlevel = ref(false)
+    const showCharacteristic = ref(false)
+
+    const {proxy} = getCurrentInstance()
+    const {gk_province, educationlevel, characteristic} = proxy.useDict('gk_province', 'educationlevel', 'characteristic')
+
+    const form = ref({
+        areaid: null,
+        areaname: null,
+        educationlevel: null,
+        educationlevelName: null,
+        characteristic: null,
+        characteristicName : null
+    })
+
+    function showAreaChooseHandler() {
+        showAreaChoose.value = true
+    }
+
+    function chooseArea(item) {
+        form.value.areaid = item.value
+        form.value.areaname = item.label
+        showAreaChoose.value = false
+    }
+
+    function showEducationlevelHandler() {
+        showEducationlevel.value = true
+    }
+
+    function chooseEducationlevel(item) {
+        form.value.educationlevel = item.value
+        form.value.educationlevelName = item.label
+        showEducationlevel.value = false
+    }
+
+    function showCharacteristicHandler() {
+        showCharacteristic.value = true
+    }
+
+    function chooseCharacteristic(item) {
+        form.value.characteristic = item.value
+        form.value.characteristicName = item.label
+        showCharacteristic.value = false
+    }
+
+    function search() {
+        router.push({
+            path : '/xjc-integratedmachine/environment/university_list',
+            query : form.value
+        })
+    }
+    // function showAreaChooseHandler() {
+    //     showAreaChoose.value = true
+    // }
+    //
+    // function chooseArea(item) {
+    //     form.value.areaid = item.value
+    //     form.value.areaname = item.label
+    //     showAreaChoose.value = false
+    // }
 
 </script>
 

+ 258 - 1
src/views/xjc-integratedmachine/environment/university_details_video.vue

@@ -1,8 +1,265 @@
 <template>
-    高校详情视频
+
+    <div>
+
+        创建时间:{{entity.ctime}} 所在地区:{{entity.areaname}}
+        学历层次:
+        <dict-tag :options="educationlevel" :value="entity.educationlevel"/>
+        办学性质:
+        <dict-tag :options="property" :value="entity.property"/>
+        院校类型:
+        <dict-tag :options="school_category" :value="entity.school_category"/>
+        院校隶属:{{entity.subjection}}
+        联系电话:{{entity.telephone}}
+        通讯地址:{{entity.address}}
+    </div>
+
+    <el-button @click="collection" v-if="collectionList.length == 0">收藏</el-button>
+    <el-button @click="cancle_collection" v-if="collectionList.length == 1">取消收藏</el-button>
+
+
+    <el-card style="width:80%;">
+        <div style="display: flex;flex-direction: row;justify-content: space-between">
+            <div @click="changeShowIndex(1)">学校简介</div>
+            <div @click="changeShowIndex(2)">院系设置</div>
+            <div @click="changeShowIndex(3)">学科专业</div>
+            <div @click="changeShowIndex(4)">奖励资助</div>
+            <div @click="changeShowIndex(5)">考分查询</div>
+            <div @click="changeShowIndex(6)">计划查询</div>
+            <div @click="changeShowIndex(7)">招生简章</div>
+            <div @click="changeShowIndex(8)">学校视频</div>
+        </div>
+    </el-card>
+
+    <div v-show="showIndex == 1">
+        <div v-html="entity.summary">
+        </div>
+    </div>
+    <div v-show="showIndex == 2">
+        <div v-html="entity.collegeset">
+        </div>
+    </div>
+    <div v-show="showIndex == 3">
+        <div v-html="entity.specialtyintroduction">
+        </div>
+    </div>
+    <div v-show="showIndex == 4">
+        <div v-html="entity.incentivegrant">
+        </div>
+    </div>
+    <div v-show="showIndex == 5">
+        -------考分查询-------
+        <div @click="showAreaChooseHandler">招生地区::{{form.areaname}}</div>
+        <div @click="showCategoryHandler">考生类别::{{form.categoryName}}</div>
+        <el-button @click="getScore">点击查询</el-button>
+        <el-table :data="kf_tableData">
+            <el-table-column label="招生年份" align="center" key="years" prop="years"/>
+            <el-table-column label="录取批次" align="center" key="batchname" prop="batchname"/>
+            <el-table-column label="最低分" align="center" key="lowscore" prop="lowscore"/>
+            <el-table-column label="最低分位次" align="center" key="totalorder" prop="totalorder"/>
+        </el-table>
+    </div>
+    <div v-show="showIndex == 6">
+        <div @click="showAreaChooseHandler">招生地区::{{form.areaname}}</div>
+        <div @click="showGradeHandler">年份::{{form.grade}}</div>
+        <div @click="showCategoryHandler">考生类别::{{form.categoryName}}</div>
+        <el-button @click="getPlan">点击查询</el-button>
+        <el-table :data="jh_tableData">
+            <el-table-column label="招生年份" align="center" key="years" prop="years"/>
+            <el-table-column label="专业名称" align="center" key="enrollname" prop="enrollname"/>
+            <el-table-column label="大学学制" align="center" key="studyyears" prop="studyyears"/>
+            <el-table-column label="批次" align="center" key="batch_name" prop="batch_name"/>
+            <el-table-column label="计划招生人数" align="center" key="plannum" prop="plannum"/>
+            <el-table-column label="学费" align="center" key="fee" prop="fee"/>
+        </el-table>
+    </div>
+    <div v-show="showIndex == 7">
+        <div v-html="entity.sturecruitmen">
+
+        </div>
+    </div>
+    <div v-show="showIndex == 8">
+        <div ref="videoContainer" class="video-container">
+            <video ref="videoPlayer" class="video-js vjs-default-skin" controls preload="auto" :data-setup="{}">
+                <!-- 可以在这里插入source标签以指定你的视频源 -->
+                <source :src="entity.path" type="video/mp4">
+            </video>
+        </div>
+    </div>
+
+    <div>
+        <!--招生地区-->
+        <el-dialog v-model="showAreaChoose" width="600px" append-to-body>
+            <div v-for="dict in gk_province" :key="dict.value" @click="chooseArea(dict)">{{dict.label}}</div>
+        </el-dialog>
+        <!--考生类别-->
+        <el-dialog v-model="showCategoryChoose" width="600px" append-to-body>
+            <div v-for="dict in category" :key="dict.value" @click="chooseCategory(dict)">{{dict.label}}</div>
+        </el-dialog>
+        <!--年份-->
+        <el-dialog v-model="showGradeChoose" width="600px" append-to-body>
+            <div v-for="item in grade" :key="item" @click="chooseGrade(item)">{{item}}</div>
+        </el-dialog>
+    </div>
+
+
 </template>
 
 <script setup>
+    import {
+        universityDetail,
+        getPlanYearList,
+        getScoreList,
+        getPlanList,
+        addCollection,
+        getCollection,
+        removeCollection
+    } from '@/api/xjc-integratedmachine/university.js'
+    import videojs from 'video.js';
+    import 'video.js/dist/video-js.css';
+
+    const showAreaChoose = ref(false)
+    const showCategoryChoose = ref(false)
+    const showGradeChoose = ref(false)
+
+    const router = useRouter()
+    const route = useRoute()
+
+    const param = route.query
+    const showIndex = ref(1)
+
+    const grade = ref([])
+
+    const {proxy} = getCurrentInstance()
+
+    const {gk_province, category, educationlevel, property, school_category} = proxy.useDict('gk_province', 'category', 'educationlevel', 'property', 'school_category')
+
+    const form = ref({
+        area: null,
+        areaname: null,
+        university: param.name,
+    })
+
+    const entity = ref({})
+    const collectionList = ref([])
+
+    function detail() {
+        universityDetail({
+            id: param.id
+        }).then(resp => {
+            entity.value.oldid = resp.entity.oldid
+            //学校信息在这里
+            entity.value = resp.entity
+            //看看收藏
+            queryConnection()
+        })
+    }
+
+    function changeShowIndex(index) {
+        showIndex.value = index
+        if (showIndex.value == 8) {
+            const player = videojs(playerId, {autoplay: true});
+            player.src(entity.value.path);
+            player.on("ended", () => {
+            })
+        }
+    }
+
+    function showAreaChooseHandler() {
+        showAreaChoose.value = true
+    }
+
+    function chooseArea(item) {
+        form.value.area = item.value
+        form.value.areaname = item.label
+        showAreaChoose.value = false
+        getPlanYear()
+    }
+
+    function showCategoryHandler() {
+        showCategoryChoose.value = true
+    }
+
+    function chooseCategory(item) {
+        form.value.category = item.value
+        form.value.categoryName = item.label
+        showCategoryChoose.value = false
+    }
+
+    function showGradeHandler() {
+        showGradeChoose.value = true
+    }
+
+    function chooseGrade(item) {
+        form.value.grade = item
+        showGradeChoose.value = false
+    }
+
+    function getPlanYear() {
+        getPlanYearList({
+            university: param.name,
+            area: form.value.area
+        }).then(resp => {
+            grade.value = resp.list
+        })
+    }
+
+    const kf_tableData = ref([])
+
+    function getScore() {
+        let data = {
+            area: form.value.area,
+            university: entity.value.oldid,
+            category: form.value.category
+        }
+        getScoreList(data).then(resp => {
+            kf_tableData.value = resp.list
+        })
+    }
+
+    const jh_tableData = ref([])
+
+    function getPlan() {
+        let data = {
+            university: param.name,
+            area: form.value.area,
+            category: form.value.category,
+            year: form.value.grade
+        }
+        getPlanList(data).then(resp => {
+            jh_tableData.value = resp.list
+        })
+    }
+
+    function collection() {
+        let data = {
+            contentType: 1,
+            contentId: param.id,
+        }
+        addCollection(data).then(resp => {
+            queryConnection()
+        })
+    }
+    function queryConnection() {
+        let data = {
+            contentType: 1,
+            contentId: param.id,
+        }
+        getCollection(data).then(resp => {
+            collectionList.value = resp.collection
+        })
+    }
+    function cancle_collection() {
+        let data = {
+            id: collectionList.value[0].id,
+        }
+        removeCollection(data).then(resp => {
+            queryConnection()
+        })
+    }
+
+
+    detail()
 
 </script>
 

+ 72 - 0
src/views/xjc-integratedmachine/environment/university_list.vue

@@ -1,8 +1,80 @@
 <template>
     高校列表页
+    <el-table :data="tableData">
+        <el-table-column label="地区" align="center" key="areaname" prop="areaname"/>
+        <el-table-column label="名称" align="center" key="name" prop="name"/>
+        <el-table-column label="隶属" align="center" key="subjection" prop="subjection"/>
+        <el-table-column label="创建时间" align="center" key="ctime" prop="ctime"/>
+        <el-table-column label="详情">
+            <template #default="scope">
+                <el-tooltip content="详情>>" placement="top">
+                    <el-button link type="primary" icon="Edit" @click="handleDetail(scope.row)"></el-button>
+                </el-tooltip>
+            </template>
+        </el-table-column>
+    </el-table>
+
+    <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
+                v-model:limit="queryParams.pageSize" @pagination="getList"/>
 </template>
 
 <script setup>
+    import {universityList} from '@/api/xjc-integratedmachine/university.js'
+    const router = useRouter()
+    const route = useRoute()
+
+    const params = route.query
+
+    const total = ref(0)
+    const tableData = ref(null)
+
+
+    // const queryParams = ref({
+    //     pageNum: 1,
+    //     pageSize: 10,
+    //     areaid: params.areaid,
+    //     educationlevel: params.educationlevel,
+    //     characteristic: params.characteristic,
+    // })
+
+    const data = reactive({
+        queryParams: {
+            pageNum: 1,
+            pageSize: 10,
+            areaid: params.areaid,
+            educationlevel: params.educationlevel,
+            characteristic: params.characteristic,
+        },
+    })
+    const {proxy} = getCurrentInstance()
+    const {queryParams} = toRefs(data)
+
+
+
+
+    function getList() {
+        universityList(proxy.addDateRange(queryParams.value)).then(resp => {
+            console.log("####",resp)
+            tableData.value = resp.data.rows
+            total.value = resp.data.total
+        })
+    }
+
+    function handleDetail(row) {
+        console.log("%%%%%%%%%%%%%%%%",row)
+        router.push({
+            path : '/xjc-integratedmachine/environment/university_details_video',
+            query : {
+                id : row.id,
+                name : row.name,
+                oldid : row.oldid,
+            }
+        })
+
+    }
+
+    getList()
+
 
 </script>
 

+ 297 - 0
src/views/xjc-platform/collection/index.vue

@@ -0,0 +1,297 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="用户ID" prop="userId">
+        <el-input
+          v-model="queryParams.userId"
+          placeholder="请输入用户ID"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="收藏类型" prop="contentType">
+        <el-select v-model="queryParams.contentType" placeholder="请选择收藏类型" clearable>
+          <el-option
+            v-for="dict in content_type"
+            :key="dict.value"
+            :label="dict.label"
+            :value="dict.value"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="对应业务ID" prop="contentId">
+        <el-input
+          v-model="queryParams.contentId"
+          placeholder="请输入对应业务ID"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="收藏时间" prop="sroredate">
+        <el-date-picker clearable
+          v-model="queryParams.sroredate"
+          type="date"
+          value-format="YYYY-MM-DD"
+          placeholder="请选择收藏时间">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
+        <el-button icon="Refresh" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="Plus"
+          @click="handleAdd"
+          v-hasPermi="['platform:collection:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="Edit"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['platform:collection:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="Delete"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['platform:collection:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="Download"
+          @click="handleExport"
+          v-hasPermi="['platform:collection:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="collectionList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="用户ID" align="center" prop="userId" />
+      <el-table-column label="收藏类型" align="center" prop="contentType">
+        <template #default="scope">
+          <dict-tag :options="content_type" :value="scope.row.contentType"/>
+        </template>
+      </el-table-column>
+      <el-table-column label="对应业务ID" align="center" prop="contentId" />
+      <el-table-column label="收藏时间" align="center" prop="sroredate" width="180">
+        <template #default="scope">
+          <span>{{ parseTime(scope.row.sroredate, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template #default="scope">
+          <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['platform:collection:edit']">修改</el-button>
+          <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['platform:collection:remove']">删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    
+    <pagination
+      v-show="total>0"
+      :total="total"
+      v-model:page="queryParams.pageNum"
+      v-model:limit="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改收藏对话框 -->
+    <el-dialog :title="title" v-model="open" width="500px" append-to-body>
+      <el-form ref="collectionRef" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="id" prop="id">
+          <el-input v-model="form.id" placeholder="请输入id" />
+        </el-form-item>
+        <el-form-item label="用户ID" prop="userId">
+          <el-input v-model="form.userId" placeholder="请输入用户ID" />
+        </el-form-item>
+        <el-form-item label="收藏类型" prop="contentType">
+          <el-select v-model="form.contentType" placeholder="请选择收藏类型">
+            <el-option
+              v-for="dict in content_type"
+              :key="dict.value"
+              :label="dict.label"
+              :value="dict.value"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="对应业务ID" prop="contentId">
+          <el-input v-model="form.contentId" placeholder="请输入对应业务ID" />
+        </el-form-item>
+        <el-form-item label="收藏时间" prop="sroredate">
+          <el-date-picker clearable
+            v-model="form.sroredate"
+            type="date"
+            value-format="YYYY-MM-DD"
+            placeholder="请选择收藏时间">
+          </el-date-picker>
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button type="primary" @click="submitForm">确 定</el-button>
+          <el-button @click="cancel">取 消</el-button>
+        </div>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script setup name="Collection">
+import { listCollection, getCollection, delCollection, addCollection, updateCollection } from "@/api/platform/collection"
+
+const { proxy } = getCurrentInstance()
+const { content_type } = proxy.useDict('content_type')
+
+const collectionList = ref([])
+const open = ref(false)
+const loading = ref(true)
+const showSearch = ref(true)
+const ids = ref([])
+const single = ref(true)
+const multiple = ref(true)
+const total = ref(0)
+const title = ref("")
+
+const data = reactive({
+  form: {},
+  queryParams: {
+    pageNum: 1,
+    pageSize: 10,
+    userId: null,
+    contentType: null,
+    contentId: null,
+    sroredate: null
+  },
+  rules: {
+    id: [
+      { required: true, message: "id不能为空", trigger: "blur" }
+    ],
+  }
+})
+
+const { queryParams, form, rules } = toRefs(data)
+
+/** 查询收藏列表 */
+function getList() {
+  loading.value = true
+  listCollection(queryParams.value).then(response => {
+    collectionList.value = response.rows
+    total.value = response.total
+    loading.value = false
+  })
+}
+
+// 取消按钮
+function cancel() {
+  open.value = false
+  reset()
+}
+
+// 表单重置
+function reset() {
+  form.value = {
+    id: null,
+    userId: null,
+    contentType: null,
+    contentId: null,
+    sroredate: null
+  }
+  proxy.resetForm("collectionRef")
+}
+
+/** 搜索按钮操作 */
+function handleQuery() {
+  queryParams.value.pageNum = 1
+  getList()
+}
+
+/** 重置按钮操作 */
+function resetQuery() {
+  proxy.resetForm("queryRef")
+  handleQuery()
+}
+
+// 多选框选中数据
+function handleSelectionChange(selection) {
+  ids.value = selection.map(item => item.id)
+  single.value = selection.length != 1
+  multiple.value = !selection.length
+}
+
+/** 新增按钮操作 */
+function handleAdd() {
+  reset()
+  open.value = true
+  title.value = "添加收藏"
+}
+
+/** 修改按钮操作 */
+function handleUpdate(row) {
+  reset()
+  const _id = row.id || ids.value
+  getCollection(_id).then(response => {
+    form.value = response.data
+    open.value = true
+    title.value = "修改收藏"
+  })
+}
+
+/** 提交按钮 */
+function submitForm() {
+  proxy.$refs["collectionRef"].validate(valid => {
+    if (valid) {
+      if (form.value.id != null) {
+        updateCollection(form.value).then(response => {
+          proxy.$modal.msgSuccess("修改成功")
+          open.value = false
+          getList()
+        })
+      } else {
+        addCollection(form.value).then(response => {
+          proxy.$modal.msgSuccess("新增成功")
+          open.value = false
+          getList()
+        })
+      }
+    }
+  })
+}
+
+/** 删除按钮操作 */
+function handleDelete(row) {
+  const _ids = row.id || ids.value
+  proxy.$modal.confirm('是否确认删除收藏编号为"' + _ids + '"的数据项?').then(function() {
+    return delCollection(_ids)
+  }).then(() => {
+    getList()
+    proxy.$modal.msgSuccess("删除成功")
+  }).catch(() => {})
+}
+
+/** 导出按钮操作 */
+function handleExport() {
+  proxy.download('platform/collection/export', {
+    ...queryParams.value
+  }, `collection_${new Date().getTime()}.xlsx`)
+}
+
+getList()
+</script>