Zory hai 2 meses
pai
achega
e280c5922f

+ 33 - 0
src/api/model/level.js

@@ -0,0 +1,33 @@
+import config from "@/config"
+import http from "@/utils/request"
+
+export default {
+    list: {
+        url: `${config.API_URL}/level/list`,
+        name: "-",
+        get: async function(data={}){
+            return await http.get(this.url, data);
+        }
+    },
+    save: {
+        url: `${config.API_URL}/level/save`,
+        name: "-",
+        post: async function(data={}){
+            return await http.post(this.url, data);
+        }
+    },
+    batch: {
+        url: `${config.API_URL}/level/batch`,
+        name: "-",
+        post: async function(data={}){
+            return await http.post(this.url, data);
+        }
+    },
+    del: {
+        url: `${config.API_URL}/level/del`,
+        name: "-",
+        post: async function(data={}){
+            return await http.post(this.url, data);
+        }
+    }
+}

+ 21 - 0
src/api/model/task.js

@@ -2,6 +2,13 @@ import config from "@/config"
 import http from "@/utils/request"
 
 export default {
+    list: {
+        url: `${config.API_URL}/task/list`,
+        name: "-",
+        get: async function(data={}){
+            return await http.get(this.url, data);
+        }
+    },
     job: {
         url: `${config.API_URL}/task/job`,
         name: "-",
@@ -22,5 +29,19 @@ export default {
         post: async function(data={}){
             return await http.post(this.url, data);
         }
+    },
+    batch: {
+        url: `${config.API_URL}/task/batch`,
+        name: "-",
+        post: async function(data={}){
+            return await http.post(this.url, data);
+        }
+    },
+    param: {
+        url: `${config.API_URL}/task/param`,
+        name: "-",
+        get: async function(data={}){
+            return await http.get(this.url, data);
+        }
     }
 }

+ 115 - 0
src/views/manage/expert/level/components/form.vue

@@ -0,0 +1,115 @@
+<template>
+    <el-dialog :title="titleMap[mode]" v-model="visible" :width="600" destroy-on-close @closed="$emit('closed')">
+        <el-form ref="dialogForm" :model="formData" :rules="rules" label-width="100px" label-position="top">
+            <el-form-item label="等级名称" prop="name">
+                <el-input v-model="formData.name" clearable placeholder="请输入"></el-input>
+                <div class="el-form-item-msg"></div>
+            </el-form-item>
+            <el-form-item label="等级标识" prop="level">
+                <el-select v-model="formData.level" clearable placeholder="等级标识" :style="{width: '100%'}">
+                    <el-option :value="item" :label="item" v-for="(item,index) in 20" :key="index"></el-option>
+                </el-select>
+                <div class="el-form-item-msg">数字越大等级越高</div>
+            </el-form-item>
+            <fieldset>
+                <legend><el-tag>升级条件</el-tag></legend>
+                <el-row :gutter="10">
+                    <el-col :span="12">
+                        <el-form-item label="素材GMV大于" prop="gmv_start">
+                            <el-input v-model="formData.gmv_start" clearable placeholder="请输入">
+                                <template #append>元</template>
+                            </el-input>
+                            <div class="el-form-item-msg"></div>
+                        </el-form-item>
+                    </el-col>
+                    <el-col :span="12">
+                        <el-form-item label="素材GMV小于" prop="gmv_end">
+                            <el-input v-model="formData.gmv_end" clearable placeholder="请输入">
+                                <template #append>元</template>
+                            </el-input>
+                            <div class="el-form-item-msg"></div>
+                        </el-form-item>
+                    </el-col>
+                </el-row>
+            </fieldset>
+            <el-form-item label="状态" prop="status">
+                <el-radio-group v-model="formData.status">
+                    <el-radio-button :label="1">正常</el-radio-button>
+                    <el-radio-button :label="2">禁用</el-radio-button>
+                </el-radio-group>
+            </el-form-item>
+        </el-form>
+		<template #footer>
+            <el-button @click="visible=false" size="large">取 消</el-button>
+            <el-button v-if="mode!='show'" size="large" type="primary" :loading="isSaveing" @click="submit()">保 存</el-button>
+		</template>
+    </el-dialog>
+    
+</template>
+
+<script>
+export default {
+    data(){
+        return {
+            loading: false,
+            isSaveing: false,
+            mode:"add",
+            titleMap:{
+                add:"新增达人等级",
+                edit:"编辑达人等级"
+            },
+            visible:false,
+            formData:{},
+            rules:{
+                status: [
+                    {required: true, message: '请选择'}
+                ],
+                name: [
+                    {required: true, message: '请输入'}
+                ],
+                level: [
+                    {required: true, message: '请选择'}
+                ],
+                gmv_start: [
+                    {required: true, message: '请输入'}
+                ],
+                gmv_end: [
+                    {required: true, message: '请输入'}
+                ]
+            }
+        }
+    },
+    methods:{
+        open(mode = 'add'){
+            this.mode = mode;
+            this.visible = true;
+            return this
+        },
+        //表单注入数据
+        setData(data){
+            this.formData = JSON.parse(JSON.stringify(data));
+        },
+        async submit(){
+            var validate = await this.$refs.dialogForm.validate().catch(()=>{});
+            if(!validate){ return false }
+            this.isSaveing = true;
+            let submitData = JSON.parse(JSON.stringify(this.formData));
+            submitData.type = 1;
+            var resp = await this.$API.level.save.post(submitData);
+            this.isSaveing = false;
+            if (resp.code == 0) {
+                return this.$message.error(resp.msg);
+            }
+            this.$message.success(resp.msg);
+            this.visible = false;
+            this.formData = {};
+            this.submitState = false;
+            this.$emit("success");
+        }
+    }
+}
+</script>
+
+<style>
+.text-center{text-align: center;}
+</style>

+ 62 - 0
src/views/manage/expert/level/components/option.vue

@@ -0,0 +1,62 @@
+<template>
+    <fieldset>
+        <legend>
+            <el-tag type="info">按需操作</el-tag>
+        </legend>
+        <div class="op-header">
+            <div class="left-panel">
+                <el-button icon="el-icon-plus" type="primary" @click="addData()">新增等级</el-button>
+                <el-button icon="el-icon-unlock" @click="table_batch_status(1)" :disabled="dataSelect.length>0?false:true">启用</el-button>
+                <el-button icon="el-icon-lock" type="danger" @click="table_batch_status(2)" :disabled="dataSelect.length>0?false:true">禁用</el-button>
+            </div>
+        </div>
+    </fieldset>
+    <formMain ref="formMain" @success="handleSuccess"></formMain>
+</template>
+
+<script>
+import formMain from './form';
+export default {
+    components: {
+        formMain
+    },
+    props: {
+        dataSelect: { type: Array, default: () => [] },
+        dataSelectFull: { type: Array, default: () => [] }
+    },
+    data(){
+        return {
+
+        }
+    },
+    methods: {
+        addData(){
+            this.$nextTick(() => {
+                this.$refs.formMain.open()
+            })
+        },
+        async table_batch_status(status){
+            if (this.dataSelect.length == 0) {
+                return this.$message.error("请选择修改数据")
+            }
+            var loading = this.$loading()
+            let submitData = {"id":this.dataSelect,"value":status,"field":"status","type":"batch"};
+            loading.close()
+            var resp = await this.$API.level.batch.post(submitData);
+            if (resp.code == 0) {
+                return this.$message.error(resp.msg);
+            }
+            this.$message.success(resp.msg);
+            this.$emit("success");
+        },
+        handleSuccess(){
+            this.$emit("success");
+        },
+        table_add(){
+            this.$nextTick(() => {
+                this.$refs.formMain.open("add")
+            })
+        },
+    }
+}
+</script>

+ 49 - 0
src/views/manage/expert/level/components/search.vue

@@ -0,0 +1,49 @@
+<template>
+    <fieldset>
+        <legend>
+            <el-tag type="info">条件筛选</el-tag>
+        </legend>
+        <el-form class="lv-form-inline" ref="searchForm" :model="searchKey" label-position="right" label-width="100px">
+            <div class="search-form">
+                <div class="form-left">
+                    <el-row :gutter="10">
+                        <el-col :xs="12" :sm="12" :md="12" :lg="6" :xl="4">
+                            <el-input v-model="searchKey.truename" placeholder="团长姓名" clearable :style="{ width: '100%' }" @keyup.enter="searchForm()">
+                                <template #prepend>团长姓名</template>
+                            </el-input>
+                        </el-col>
+                        <el-col :xs="12" :sm="12" :md="12" :lg="6" :xl="4">
+                            <el-select v-model="searchKey.status" clearable placeholder="请选择状态" @change="searchForm" :style="{width: '100%'}" class="diy-select">
+                                <el-option value="1" label="正常"></el-option>
+                                <el-option value="2" label="禁用"></el-option>
+                                <template #prefix>状态</template>
+                            </el-select>
+                        </el-col>
+                        <el-col :xs="12" :sm="6" :md="6" :lg="6" :xl="4">
+                            <el-date-picker v-model="searchKey.create" :style="{width: '100%'}" placeholder="请选择创建时间" start-placeholder="开始时间" end-placeholder="结束时间" type="daterange" range-separator="至" @change="searchForm" />
+                        </el-col>
+                    </el-row>
+                </div>
+                <div class="form-line"></div>
+                <div class="form-right">
+                    <el-button type="primary" icon="el-icon-search" @click="searchForm">搜索</el-button>
+                </div>
+            </div>
+        </el-form>
+    </fieldset>
+</template>
+
+<script>
+export default {
+    data(){
+        return {
+            searchKey:{}
+        }
+    },
+    methods: {
+        searchForm(){
+            this.$emit("success",this.searchKey);
+        }
+    }
+}
+</script>

+ 108 - 0
src/views/manage/expert/level/components/table.vue

@@ -0,0 +1,108 @@
+<template>
+    <scTable ref="table" :apiObj="list.apiObj" :params="searchKey" @selectionChange="selectionChange" row-key="id">
+        <el-table-column type="selection" width="50" fixed="left"></el-table-column>
+        <el-table-column label="等级名称" prop="name"></el-table-column>
+        <el-table-column label="GMV要求" prop="level" width="200">
+            <template #default="scope">
+                {{ scope.row.gmv_start }} ~ {{ scope.row.gmv_end }}元
+            </template>
+        </el-table-column>
+        <el-table-column label="等级标识" prop="level" width="120"></el-table-column>
+        <el-table-column label="状态" prop="status" width="120" align="center">
+            <template #default="scope">
+                <div class="status-success" v-if="scope.row.status==1"><sc-status-indicator type="success"></sc-status-indicator> 正常</div>
+                <div class="status-danger" v-if="scope.row.status==2"><sc-status-indicator type="danger"></sc-status-indicator> 禁用</div>
+            </template>
+        </el-table-column>
+        <el-table-column label="创建时间" prop="create_at" width="160"></el-table-column>
+        <el-table-column label="操作" width="140" align="left" fixed="right">
+            <template #default="scope">
+                <el-button size="small" @click="table_view(scope.row)">编辑</el-button>
+                <el-button type="danger" size="small" @click="table_del(scope.row)">删除</el-button>
+            </template>
+        </el-table-column>
+    </scTable>
+    <formMain ref="formMain" @success="handleSuccess"></formMain>
+</template>
+
+<script>
+import formMain from './form';
+export default {
+    components: {
+        formMain
+    },
+    data(){
+        return {
+            list: {
+                apiObj: this.$API.level.list
+            },
+            dataSelect:[],
+            dataSelectFull:[],
+            searchKey:{}
+        }
+    },
+    methods: {
+        table_auth(data){
+            this.$nextTick(() => {
+                this.$refs.comboMain.open("edit").setData(data)
+            })
+        },
+        table_view(data){
+            this.$nextTick(() => {
+                this.$refs.formMain.open("edit").setData(data)
+            })
+        },
+        table_del(data){
+            this.$confirm(`确定要执行删除吗`, '提示', {
+                type: 'warning'
+            }).then(async ()=>{
+                var resp = await this.$API.article.del.post({"id":data.id});
+                if (resp.code == 0) {
+                    return this.$message.error(resp.msg);
+                }
+                this.$message.success(resp.msg);
+                this.refresh()
+            }).catch(()=>{})
+        },
+        refresh(){
+            this.$refs.table.refresh()
+        },
+        upData(data){
+            this.$refs.table.upData(data)
+        },
+        handleSuccess(){
+            this.$refs.table.refresh()
+        },
+        sortChange(event){
+            if (event.order) {
+                var data = {
+                    "field":event.prop,
+                    "order":event.order
+                }
+                this.$refs.table.upData(data)
+            } else {
+                this.$refs.table.reload(this.searchKey)
+            }
+            return ;
+        },
+        selectionChange(event){
+            this.dataSelect = [];
+            var arr = [];
+            var arrCompany = [];
+            event.forEach(function(val,index){
+                arr[index] = val.id;
+                arrCompany[index] = val;
+            });
+            this.dataSelectFull = arrCompany;
+            this.dataSelect = arr;
+            this.$emit("success",this.dataSelect);
+            this.$emit("successFull",this.dataSelectFull);
+        },
+        table_passwd(row){
+            this.$nextTick(() => {
+                this.$refs.userPasswd.open("edit").setData(row)
+            })
+        }
+    }
+}
+</script>

+ 47 - 0
src/views/manage/expert/level/index.vue

@@ -0,0 +1,47 @@
+<template>
+    <el-container class="flex-column">
+        <div class="table-search">
+            <search @success="handleSuccess"></search>
+            <optionBtn @success="handleSuccess" :dataSelect="dataSelect" :dataSelectFull="dataSelectFull" type="3"></optionBtn>
+        </div>
+        <el-main class="nopadding">
+            <div class="table-container">
+                <tablePage ref="tablePage" @success="tableHandle" @successFull="tableHandleFull" type="3"></tablePage>
+            </div>
+        </el-main>
+    </el-container>  
+</template>
+
+<script>
+import search from './components/search';
+import optionBtn from './components/option';
+import tablePage from './components/table';
+export default {
+    components: {
+        search,tablePage,optionBtn
+    },
+    data(){
+        return {
+            searchKey:{},
+            dataSelect:[],
+            dataSelectFull:[],
+        }
+    },
+    methods: {
+        tableHandle(data){
+            this.dataSelect = data;
+        },
+        tableHandleFull(data){
+            this.dataSelectFull = data;
+        },
+        handleSuccess(data){
+            this.$refs.tablePage.upData(data)
+        },
+        handleClick(name){
+            this.activeName = name;
+            this.searchKey.type = name;
+            this.$refs.tablePage.upData(this.searchKey)
+        }
+    }
+}
+</script>

+ 2 - 4
src/views/manage/school/lists/components/table.vue

@@ -33,10 +33,8 @@
         <el-table-column label="创建时间" prop="create_at" width="160"></el-table-column>
         <el-table-column label="操作" width="140" align="left" fixed="right">
             <template #default="scope">
-                <el-button-group>
-                    <el-button size="small" @click="table_view(scope.row)">编辑</el-button>
-                    <el-button type="danger" size="small" @click="table_del(scope.row)">删除</el-button>
-                </el-button-group>
+                <el-button size="small" @click="table_view(scope.row)">编辑</el-button>
+                <el-button type="danger" size="small" @click="table_del(scope.row)">删除</el-button>
             </template>
         </el-table-column>
     </scTable>

+ 1 - 1
src/views/manage/setting/page/index.vue

@@ -44,7 +44,7 @@ export default {
     },
     methods: {
         handleSuccess(){
-
+            this.getPage()
         },
         editPage(data){
             this.$nextTick(() => {

+ 58 - 13
src/views/manage/task/lists/components/form.vue

@@ -22,7 +22,7 @@
                     <template v-if="formData.auto==2">
                         <el-form-item label="任务ID" prop="job_id">
                             <el-input v-model="formData.job_id" clearable placeholder="任务ID">
-                                <template #append>
+                                <template #append v-if="mode=='add'">
                                     <el-button @click="getJobDetail">获取数据</el-button>
                                 </template>
                             </el-input>
@@ -73,13 +73,38 @@
                                 <div class="el-form-item-msg"></div>
                             </el-form-item>
                         </fieldset>
-                        
-                        <el-form-item label="投稿截止时间" prop="expiration_time_end">
-                            <div style="width: 30%;">
-                                <el-date-picker v-model="formData.expiration_time_end" placeholder="投稿截止时间" type="datetime" />
-                            </div>
-                            <div class="el-form-item-msg"></div>
-                        </el-form-item>
+                        <el-row :gutter="15">
+                            <el-col :span="8">
+                                <el-form-item label="投稿截止时间" prop="expiration_time_end">
+                                    <div style="width: 100%;">
+                                        <el-date-picker v-model="formData.expiration_time_end" placeholder="投稿截止时间" type="datetime" :style="{width: '100%'}" />
+                                    </div>
+                                    <div class="el-form-item-msg"></div>
+                                </el-form-item>
+                            </el-col>
+                            <el-col :span="8">
+                                <el-form-item label="要求达人等级" prop="level">
+                                    <el-select v-model="formData.level" clearable placeholder="要求达人等级" :style="{width: '100%'}">
+                                        <el-option :value="item.id" :label="item.name" v-for="(item,index) in levelData" :key="index">
+                                            <span style="float: left">{{ item.name }} ({{ item.start_format }} ~ {{ item.end_format }}元)</span>
+                                            <span style="float: right;color: var(--el-text-color-secondary);font-size: 12px;">以上</span>
+                                        </el-option>
+                                    </el-select>
+                                    <div class="el-form-item-msg"></div>
+                                </el-form-item>
+                            </el-col>
+                            <el-col :span="8">
+                                <el-form-item label="平台要求等级" prop="sys_level">
+                                    <el-select v-model="formData.sys_level" clearable placeholder="平台要求等级" :style="{width: '100%'}">
+                                        <el-option :value="item.code" :label="item.name" v-for="(item,index) in dicData" :key="index">
+                                            <span style="float: left">{{ item.name }}</span>
+                                            <span style="float: right;color: var(--el-text-color-secondary);font-size: 12px;">以上</span>
+                                        </el-option>
+                                    </el-select>
+                                    <div class="el-form-item-msg"></div>
+                                </el-form-item>
+                            </el-col>
+                        </el-row>
                         <el-row :gutter="15">
                             <el-col :span="12">
                                 <el-form-item label="招募人数" prop="need_number">
@@ -130,7 +155,15 @@ export default {
                 add:"发布新任务",
                 edit:"编辑新任务"
             },
+            levelData:[],
+            dicData:[],
             rules:{
+                level:[
+                    {required: true, message: '请选择'}
+                ],
+                sys_level:[
+                    {required: true, message: '请选择'}
+                ],
                 auto:[
                     {required: true, message: '请选择'}
                 ],
@@ -174,7 +207,8 @@ export default {
             this.getCategory();
             if (mode == 'add') {
                 this.formData = {
-                    auto:2
+                    auto:2,
+                    category:"douyin"
                 }
             }
             return this
@@ -183,9 +217,11 @@ export default {
             if (!this.formData.job_id) {
                 return this.$message.error("请输入任务ID")
             }
-            var loading = this.$loading();
+            // var loading = this.$loading();
+            this.loading = true;
             var resp = await this.$API.task.job.get(this.formData);
-            loading.close()
+            this.loading = false;
+            // loading.close()
             this.autoState = true;
             if (resp.code == 0) {
                 this.$message.error(resp.msg)
@@ -196,13 +232,18 @@ export default {
         //表单注入数据
         setData(data){
             this.formData = JSON.parse(JSON.stringify(data));
+            if (this.formData.auto == 2) {
+                this.autoState = true;
+            }
         },
         async getCategory(){
-            var resp = await this.$API.category.list.get({"type":1});
+            var resp = await this.$API.task.param.get({"type":this.formData.category});
             if (resp.code == 0) {
                 return this.$message.error(resp.msg)
             }
-            this.categoryData = resp.data;
+            this.categoryData = resp.data.category;
+            this.levelData = resp.data.level;
+            this.dicData = resp.data.dic;
         },
         async submit(){
             var validate = await this.$refs.dialogForm.validate().catch(()=>{});
@@ -210,6 +251,9 @@ export default {
             if (this.formData.auto == 2 && !this.autoState) {
                 return this.$message.error("请先完成数据获取")
             }
+            if (this.formData.expiration_time_end) {
+                this.formData.expiration_time_end = this.$TOOL.dateFormat(this.formData.expiration_time_end)
+            }
             this.isSaveing = true;
             var resp = await this.$API.task.save.post(this.formData);
             this.isSaveing = false;
@@ -219,6 +263,7 @@ export default {
             this.$message.success(resp.msg);
             this.visible = false;
             this.formData = {};
+            this.autoState = false;
             this.$emit("success");
         }
     }

+ 1 - 1
src/views/manage/task/lists/components/option.vue

@@ -42,7 +42,7 @@ export default {
             var loading = this.$loading()
             let submitData = {"id":this.dataSelect,"value":status,"field":"status","type":"batch"};
             loading.close()
-            var resp = await this.$API.category.batch.post(submitData);
+            var resp = await this.$API.task.batch.post(submitData);
             if (resp.code == 0) {
                 return this.$message.error(resp.msg);
             }

+ 1 - 3
src/views/manage/task/lists/components/search.vue

@@ -37,9 +37,7 @@
 export default {
     data(){
         return {
-            searchKey:{
-                type:1
-            }
+            searchKey:{}
         }
     },
     methods: {

+ 155 - 1
src/views/manage/task/lists/components/table.vue

@@ -1,3 +1,157 @@
 <template>
+    <scTable ref="table" :apiObj="list.apiObj" :params="searchKey" @selectionChange="selectionChange" row-key="id">
+        <el-table-column type="selection" width="50" fixed="left"></el-table-column>
+        <el-table-column label="任务编码" prop="task_sn" width="150"></el-table-column>
+        <el-table-column label="任务信息" prop="id" width="300">
+            <template #default="scope">
+                <div class="info">
+                    <el-tooltip effect="dark" :content="scope.row.title" placement="top-start">
+                        <div class="goods-name">
+                            {{ scope.row.title }}
+                        </div>
+                    </el-tooltip>
+                    <div class="goods-desc">任务ID:{{ scope.row.job_id }}</div>
+                </div>
+            </template>
+        </el-table-column>
+        <el-table-column label="任务平台" prop="name">
+            <template #default="scope">
+                <div class="task-flex-center" v-if="scope.row.categoryJoin">
+                    <div class="img" v-if="scope.row.categoryJoin.icon"><el-image :src="scope.row.categoryJoin.icon" fit="cover" style="width: 20px;"></el-image></div>
+                    <div class="info">{{ scope.row.categoryJoin.name }}</div>
+                </div>
+                <el-tag v-else>-</el-tag>
+            </template>
+        </el-table-column>
+        <el-table-column label="投放商品" prop="name" width="300">
+            <template #default="scope">
+                <div class="task-flex">
+                    <div class="img"><el-image :src="scope.row.product_cover_url" fit="cover" style="width: 40px;"></el-image></div>
+                    <div class="info">
+                        <el-tooltip effect="dark" :content="scope.row.product_name" placement="top-start">
+                            <div class="goods-name">
+                                {{ scope.row.product_name }}
+                            </div>
+                        </el-tooltip>
+                        <div class="goods-desc">ID:{{ scope.row.product_id }}</div>
+                    </div>
+                </div>
+            </template>
+        </el-table-column>
+        <el-table-column label="报名进度" prop="name" width="160">
+            <template #default="scope">
+                <div class="task-flex-p">
+                    <div class="flex-s"><el-progress :text-inside="true" striped :percentage="scope.row.progress" :show-text="false" /></div>
+                    <div class="flex-n">{{ scope.row.sign_number }}/{{ scope.row.need_number }}</div>
+                </div>
+            </template>
+        </el-table-column>
+        <el-table-column label="报名截止时间" prop="expiration_time_end" width="150"></el-table-column>
+        <el-table-column label="状态" prop="status" align="center">
+            <template #default="scope">
+                <div class="status-success" v-if="scope.row.status==1"><sc-status-indicator type="success"></sc-status-indicator> 正常</div>
+                <div class="status-danger" v-if="scope.row.status==2"><sc-status-indicator type="danger"></sc-status-indicator> 禁用</div>
+            </template>
+        </el-table-column>
+        <el-table-column label="创建时间" prop="create_at" width="150"></el-table-column>
+        <el-table-column label="操作" width="140" align="left" fixed="right">
+            <template #default="scope">
+                <el-button size="small" @click="table_view(scope.row)">编辑</el-button>
+                <el-button type="danger" size="small" @click="table_del(scope.row)">删除</el-button>
+            </template>
+        </el-table-column>
+    </scTable>
+    <formMain ref="formMain" @success="handleSuccess"></formMain>
+</template>
 
-</template>
+<script>
+import formMain from './form';
+export default {
+    components: {
+        formMain
+    },
+    data(){
+        return {
+            list: {
+                apiObj: this.$API.task.list
+            },
+            dataSelect:[],
+            dataSelectFull:[],
+            searchKey:{}
+        }
+    },
+    
+    methods: {
+        table_auth(data){
+            this.$nextTick(() => {
+                this.$refs.comboMain.open("edit").setData(data)
+            })
+        },
+        table_view(data){
+            this.$nextTick(() => {
+                this.$refs.formMain.open("edit").setData(data)
+            })
+        },
+        table_del(data){
+            this.$confirm(`确定要执行删除吗`, '提示', {
+                type: 'warning'
+            }).then(async ()=>{
+                var resp = await this.$API.task.del.post({"id":data.id});
+                if (resp.code == 0) {
+                    return this.$message.error(resp.msg);
+                }
+                this.$message.success(resp.msg);
+                this.refresh()
+            }).catch(()=>{})
+        },
+        refresh(){
+            this.$refs.table.refresh()
+        },
+        upData(data){
+            this.$refs.table.upData(data)
+        },
+        handleSuccess(){
+            this.$refs.table.refresh()
+        },
+        sortChange(event){
+            if (event.order) {
+                var data = {
+                    "field":event.prop,
+                    "order":event.order
+                }
+                this.$refs.table.upData(data)
+            } else {
+                this.$refs.table.reload(this.searchKey)
+            }
+            return ;
+        },
+        selectionChange(event){
+            this.dataSelect = [];
+            var arr = [];
+            var arrCompany = [];
+            event.forEach(function(val,index){
+                arr[index] = val.id;
+                arrCompany[index] = val;
+            });
+            this.dataSelectFull = arrCompany;
+            this.dataSelect = arr;
+            this.$emit("success",this.dataSelect);
+            this.$emit("successFull",this.dataSelectFull);
+        },
+        table_passwd(row){
+            this.$nextTick(() => {
+                this.$refs.userPasswd.open("edit").setData(row)
+            })
+        }
+    }
+}
+</script>
+
+<style>
+.task-flex{display: flex;gap: 10px;}
+.goods-name{text-overflow: ellipsis;overflow: hidden;white-space: nowrap;}
+.goods-desc{font-size: 12px;color: #999;}
+.flex-s{flex: 1;}
+.task-flex-p{display: flex;align-items: center;gap: 5px;}
+.task-flex-center{display: flex;align-items: center;gap: 5px;}
+</style>