¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div class="ArticleManagement"> |
| | | <el-row :gutter="20"> |
| | | <el-col :span="24" :xs="24"> |
| | | <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px"> |
| | | <el-form-item label="æç« æ é¢" prop="title"> |
| | | <el-input |
| | | v-model="queryParams.title" |
| | | placeholder="请è¾å
¥æç« æ é¢" |
| | | clearable |
| | | style="width: 200px" |
| | | @keyup.enter.native="handleQuery" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="æç« åç±»" prop="category"> |
| | | <el-select v-model="queryParams.category" placeholder="è¯·éæ©åç±»" clearable style="width: 200px"> |
| | | <el-option |
| | | v-for="item in categoryOptions" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="ç¶æ" prop="status"> |
| | | <el-select v-model="queryParams.status" placeholder="è¯·éæ©ç¶æ" clearable style="width: 200px"> |
| | | <el-option |
| | | v-for="item in statusOptions" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button type="primary" icon="el-icon-search" size="medium" @click="handleQuery">æç´¢</el-button> |
| | | <el-button icon="el-icon-refresh" size="medium" @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="el-icon-plus" |
| | | size="medium" |
| | | @click="handleAdd" |
| | | >æ°å¢</el-button> |
| | | </el-col> |
| | | <el-col :span="1.5"> |
| | | <el-button |
| | | type="danger" |
| | | plain |
| | | icon="el-icon-delete" |
| | | size="medium" |
| | | :disabled="multiple" |
| | | @click="handleDelete" |
| | | >å é¤</el-button> |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | <el-table v-loading="loading" :data="filteredArticleList" @selection-change="handleSelectionChange"> |
| | | <el-table-column type="selection" width="50" align="center" /> |
| | | <el-table-column label="æç« ID" align="center" prop="id" width="80" /> |
| | | <el-table-column label="æç« æ é¢" align="center" prop="title" :show-overflow-tooltip="true" /> |
| | | <el-table-column label="æç« åç±»" align="center" prop="category" width="120"> |
| | | <template slot-scope="scope"> |
| | | <dict-tag :options="categoryOptions" :value="scope.row.category"/> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="å°é¢å¾" align="center" prop="coverImage" width="120"> |
| | | <template slot-scope="scope"> |
| | | <el-image |
| | | v-if="scope.row.coverImage" |
| | | style="width: 80px; height: 60px" |
| | | :src="scope.row.coverImage" |
| | | :preview-src-list="[scope.row.coverImage]" |
| | | fit="cover" |
| | | /> |
| | | <span v-else>æ å°é¢</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="ä½è
" align="center" prop="author" width="120" /> |
| | | <el-table-column label="å叿¶é´" align="center" prop="publishTime" width="160"> |
| | | <template slot-scope="scope"> |
| | | <span>{{ parseTime(scope.row.publishTime, '{y}-{m}-{d} {h}:{i}') }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="é
读é" align="center" prop="views" width="80" /> |
| | | <el-table-column label="ç¶æ" align="center" prop="status" width="100"> |
| | | <template slot-scope="scope"> |
| | | <dict-tag :options="statusOptions" :value="scope.row.status"/> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="æä½" align="center" class-name="small-padding fixed-width" width="180"> |
| | | <template slot-scope="scope"> |
| | | <el-button |
| | | size="mini" |
| | | type="text" |
| | | icon="el-icon-edit" |
| | | @click="handleUpdate(scope.row)" |
| | | >ä¿®æ¹</el-button> |
| | | <el-button |
| | | size="mini" |
| | | type="text" |
| | | icon="el-icon-delete" |
| | | @click="handleDelete(scope.row)" |
| | | >å é¤</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | |
| | | <pagination |
| | | v-show="total>0" |
| | | :total="total" |
| | | :page.sync="queryParams.pageNum" |
| | | :limit.sync="queryParams.pageSize" |
| | | @pagination="getList" |
| | | /> |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | <!-- æ·»å æä¿®æ¹æç« å¯¹è¯æ¡ --> |
| | | <el-dialog :title="title" :visible.sync="open" width="800px" append-to-body> |
| | | <el-form ref="form" :model="form" :rules="rules" label-width="80px"> |
| | | <el-row> |
| | | <el-col :span="24"> |
| | | <el-form-item label="æç« æ é¢" prop="title"> |
| | | <el-input v-model="form.title" placeholder="请è¾å
¥æç« æ é¢" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="æç« åç±»" prop="category"> |
| | | <el-select v-model="form.category" placeholder="è¯·éæ©åç±»"> |
| | | <el-option |
| | | v-for="item in categoryOptions" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="ç¶æ" prop="status"> |
| | | <el-radio-group v-model="form.status"> |
| | | <el-radio |
| | | v-for="dict in statusOptions" |
| | | :key="dict.value" |
| | | :label="dict.value" |
| | | >{{dict.label}}</el-radio> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <el-form-item label="å°é¢å¾"> |
| | | <el-upload |
| | | class="avatar-uploader" |
| | | action="#" |
| | | :show-file-list="false" |
| | | :on-change="handleCoverChange" |
| | | :auto-upload="false"> |
| | | <img v-if="form.coverImage" :src="form.coverImage" class="avatar"> |
| | | <i v-else class="el-icon-plus avatar-uploader-icon"></i> |
| | | </el-upload> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <el-form-item label="æç« æè¦" prop="summary"> |
| | | <el-input |
| | | type="textarea" |
| | | :rows="3" |
| | | v-model="form.summary" |
| | | placeholder="请è¾å
¥æç« æè¦" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <el-form-item label="æç« å
容" prop="content"> |
| | | <editor v-model="form.content" :min-height="300"/> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </el-form> |
| | | <div slot="footer" class="dialog-footer"> |
| | | <el-button type="primary" @click="submitForm">ç¡® å®</el-button> |
| | | <el-button @click="cancel">å æ¶</el-button> |
| | | </div> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import { parseTime } from '@/utils/ruoyi' |
| | | |
| | | export default { |
| | | name: "ArticleManagement", |
| | | dicts: ['sys_normal_disable', 'sys_user_sex'], |
| | | data() { |
| | | return { |
| | | // é®ç½©å± |
| | | loading: false, |
| | | // é䏿°ç» |
| | | ids: [], |
| | | // éå个ç¦ç¨ |
| | | single: true, |
| | | // éå¤ä¸ªç¦ç¨ |
| | | multiple: true, |
| | | // æ¾ç¤ºæç´¢æ¡ä»¶ |
| | | showSearch: true, |
| | | // æ»æ¡æ° |
| | | total: 0, |
| | | // æç« è¡¨æ ¼æ°æ® |
| | | articleList: [ |
| | | { |
| | | id: 1, |
| | | title: "å¦ä½æé«å端å¼åæç", |
| | | category: "1", |
| | | coverImage: "https://pic.rmb.bdstatic.com/bjh/news/5e5f1b3e7b1a8a7f8a3d6a7d3a6a7d3a.jpeg", |
| | | author: "å¼ ä¸", |
| | | publishTime: "2023-05-10 09:30:00", |
| | | views: 1250, |
| | | status: "1", |
| | | summary: "æ¬æä»ç»äºå ç§æé«å端å¼åæççæ¹æ³åå·¥å
·", |
| | | content: "<p>å端å¼åæççæå对äºé¡¹ç®è¿åº¦è³å
³éè¦...</p>" |
| | | }, |
| | | { |
| | | id: 2, |
| | | title: "Vue3æ°ç¹æ§è§£æ", |
| | | category: "2", |
| | | coverImage: "https://pic.rmb.bdstatic.com/bjh/news/8e5f1b3e7b1a8a7f8a3d6a7d3a6a7d3a.jpeg", |
| | | author: "æå", |
| | | publishTime: "2023-05-15 14:20:00", |
| | | views: 3200, |
| | | status: "1", |
| | | summary: "详ç»è§£æVue3çæ°ç¹æ§å使ç¨åºæ¯", |
| | | content: "<p>Vue3带æ¥äºè®¸å¤ä»¤äººå
´å¥çæ°ç¹æ§...</p>" |
| | | }, |
| | | { |
| | | id: 3, |
| | | title: "Element UIä½¿ç¨æå·§", |
| | | category: "3", |
| | | coverImage: "https://pic.rmb.bdstatic.com/bjh/news/9e5f1b3e7b1a8a7f8a3d6a7d3a6a7d3a.jpeg", |
| | | author: "çäº", |
| | | publishTime: "2023-05-20 10:15:00", |
| | | views: 890, |
| | | status: "0", |
| | | summary: "å享ä¸äºElement UIçé«çº§ä½¿ç¨æå·§", |
| | | content: "<p>Element UIä½ä¸ºæµè¡çUIæ¡æ¶ï¼æè®¸å¤å®ç¨æå·§...</p>" |
| | | }, |
| | | { |
| | | id: 4, |
| | | title: "å端æ§è½ä¼åæå", |
| | | category: "1", |
| | | coverImage: "https://pic.rmb.bdstatic.com/bjh/news/7e5f1b3e7b1a8a7f8a3d6a7d3a6a7d3a.jpeg", |
| | | author: "èµµå
", |
| | | publishTime: "2023-05-25 16:45:00", |
| | | views: 4500, |
| | | status: "1", |
| | | summary: "å
¨é¢çå端æ§è½ä¼åæ¹æ³åå®è·µ", |
| | | content: "<p>æ§è½ä¼åæ¯å端å¼å䏿°¸æçè¯é¢...</p>" |
| | | }, |
| | | { |
| | | id: 5, |
| | | title: "TypeScriptå
¥é¨æç¨", |
| | | category: "2", |
| | | coverImage: "https://pic.rmb.bdstatic.com/bjh/news/6e5f1b3e7b1a8a7f8a3d6a7d3a6a7d3a.jpeg", |
| | | author: "é±ä¸", |
| | | publishTime: "2023-06-01 11:10:00", |
| | | views: 2100, |
| | | status: "1", |
| | | summary: "ä»é¶å¼å§å¦ä¹ TypeScript", |
| | | content: "<p>TypeScriptä½ä¸ºJavaScriptçè¶
éè¶æ¥è¶å欢è¿...</p>" |
| | | } |
| | | ], |
| | | // å¼¹åºå±æ é¢ |
| | | title: "", |
| | | // æ¯å¦æ¾ç¤ºå¼¹åºå± |
| | | open: false, |
| | | // æ¥è¯¢åæ° |
| | | queryParams: { |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | title: undefined, |
| | | category: undefined, |
| | | status: undefined |
| | | }, |
| | | // 表ååæ° |
| | | form: {}, |
| | | // è¡¨åæ ¡éª |
| | | rules: { |
| | | title: [ |
| | | { required: true, message: "æç« æ é¢ä¸è½ä¸ºç©º", trigger: "blur" } |
| | | ], |
| | | category: [ |
| | | { required: true, message: "æç« åç±»ä¸è½ä¸ºç©º", trigger: "change" } |
| | | ], |
| | | status: [ |
| | | { required: true, message: "ç¶æä¸è½ä¸ºç©º", trigger: "change" } |
| | | ], |
| | | summary: [ |
| | | { required: true, message: "æç« æè¦ä¸è½ä¸ºç©º", trigger: "blur" } |
| | | ], |
| | | content: [ |
| | | { required: true, message: "æç« å
容ä¸è½ä¸ºç©º", trigger: "blur" } |
| | | ] |
| | | }, |
| | | // æç« åç±»é项 |
| | | categoryOptions: [ |
| | | { value: "1", label: "ææ¯æç« " }, |
| | | { value: "2", label: "æç¨æå" }, |
| | | { value: "3", label: "ç»éªå享" }, |
| | | { value: "4", label: "è¡ä¸èµè®¯" } |
| | | ], |
| | | // ç¶æé项 |
| | | statusOptions: [ |
| | | { value: "0", label: "è稿" }, |
| | | { value: "1", label: "å·²åå¸" }, |
| | | { value: "2", label: "已䏿¶" } |
| | | ] |
| | | }; |
| | | }, |
| | | computed: { |
| | | filteredArticleList() { |
| | | let list = [...this.articleList]; |
| | | if (this.queryParams.title) { |
| | | list = list.filter(item => |
| | | item.title.includes(this.queryParams.title) |
| | | ); |
| | | } |
| | | if (this.queryParams.category) { |
| | | list = list.filter(item => |
| | | item.category === this.queryParams.category |
| | | ); |
| | | } |
| | | if (this.queryParams.status) { |
| | | list = list.filter(item => |
| | | item.status === this.queryParams.status |
| | | ); |
| | | } |
| | | return list; |
| | | } |
| | | }, |
| | | created() { |
| | | this.total = this.articleList.length; |
| | | }, |
| | | methods: { |
| | | // è§£ææ¶é´ |
| | | parseTime, |
| | | /** æ¥è¯¢æç« å表 */ |
| | | getList() { |
| | | this.loading = true; |
| | | setTimeout(() => { |
| | | this.loading = false; |
| | | }, 500); |
| | | }, |
| | | /** æç´¢æé®æä½ */ |
| | | handleQuery() { |
| | | this.queryParams.pageNum = 1; |
| | | }, |
| | | /** éç½®æé®æä½ */ |
| | | resetQuery() { |
| | | this.resetForm("queryForm"); |
| | | this.handleQuery(); |
| | | }, |
| | | // å¤éæ¡é䏿°æ® |
| | | handleSelectionChange(selection) { |
| | | this.ids = selection.map(item => item.id); |
| | | this.single = selection.length !== 1; |
| | | this.multiple = !selection.length; |
| | | }, |
| | | /** æ°å¢æé®æä½ */ |
| | | handleAdd() { |
| | | this.reset(); |
| | | this.open = true; |
| | | this.title = "æ·»å æç« "; |
| | | }, |
| | | /** ä¿®æ¹æé®æä½ */ |
| | | handleUpdate(row) { |
| | | this.reset(); |
| | | const id = row.id || this.ids; |
| | | const article = this.articleList.find(item => item.id === id); |
| | | this.form = Object.assign({}, article); |
| | | this.open = true; |
| | | this.title = "ä¿®æ¹æç« "; |
| | | }, |
| | | /** æäº¤æé® */ |
| | | submitForm() { |
| | | this.$refs["form"].validate(valid => { |
| | | if (valid) { |
| | | if (this.form.id != null) { |
| | | // 模æä¿®æ¹æç« |
| | | const index = this.articleList.findIndex(item => item.id === this.form.id); |
| | | if (index !== -1) { |
| | | this.articleList.splice(index, 1, this.form); |
| | | } |
| | | this.$modal.msgSuccess("ä¿®æ¹æå"); |
| | | } else { |
| | | // æ¨¡ææ°å¢æç« |
| | | this.form.id = Math.max(...this.articleList.map(item => item.id)) + 1; |
| | | this.form.publishTime = new Date().toLocaleString(); |
| | | this.form.views = 0; |
| | | this.articleList.unshift(this.form); |
| | | this.total = this.articleList.length; |
| | | this.$modal.msgSuccess("æ°å¢æå"); |
| | | } |
| | | this.open = false; |
| | | } |
| | | }); |
| | | }, |
| | | /** å é¤æé®æä½ */ |
| | | handleDelete(row) { |
| | | const articleIds = row.id || this.ids; |
| | | this.$modal.confirm('æ¯å¦ç¡®è®¤å é¤æç« æ é¢ä¸º"' + row.title + '"çæ°æ®é¡¹ï¼').then(() => { |
| | | // 模æå é¤æç« |
| | | this.articleList = this.articleList.filter(item => item.id !== articleIds); |
| | | this.total = this.articleList.length; |
| | | this.$modal.msgSuccess("å 餿å"); |
| | | }).catch(() => {}); |
| | | }, |
| | | /** åæ¶æé® */ |
| | | cancel() { |
| | | this.open = false; |
| | | this.reset(); |
| | | }, |
| | | /** 表åéç½® */ |
| | | reset() { |
| | | this.form = { |
| | | id: undefined, |
| | | title: undefined, |
| | | category: undefined, |
| | | coverImage: undefined, |
| | | author: "管çå", |
| | | publishTime: undefined, |
| | | views: 0, |
| | | status: "1", |
| | | summary: undefined, |
| | | content: undefined |
| | | }; |
| | | this.resetForm("form"); |
| | | }, |
| | | // å°é¢å¾ä¸ä¼ å¤ç |
| | | handleCoverChange(file) { |
| | | const reader = new FileReader(); |
| | | reader.onload = (e) => { |
| | | this.form.coverImage = e.target.result; |
| | | }; |
| | | reader.readAsDataURL(file.raw); |
| | | } |
| | | } |
| | | }; |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | .ArticleManagement { |
| | | padding: 20px; |
| | | } |
| | | |
| | | .avatar-uploader ::v-deep .el-upload { |
| | | border: 1px dashed #d9d9d9; |
| | | border-radius: 6px; |
| | | cursor: pointer; |
| | | position: relative; |
| | | overflow: hidden; |
| | | } |
| | | |
| | | .avatar-uploader ::v-deep .el-upload:hover { |
| | | border-color: #409EFF; |
| | | } |
| | | |
| | | .avatar-uploader-icon { |
| | | font-size: 28px; |
| | | color: #8c939d; |
| | | width: 178px; |
| | | height: 178px; |
| | | line-height: 178px; |
| | | text-align: center; |
| | | } |
| | | |
| | | .avatar { |
| | | width: 178px; |
| | | height: 178px; |
| | | display: block; |
| | | } |
| | | </style> |
| | |
| | | <template> |
| | | <div> |
| | | è¯åç¥è¯åº |
| | | <div class="DrugKnowledgeManagement"> |
| | | <!-- 左侧æ --> |
| | | <div class="sidecolumn"> |
| | | <div class="sidecolumn-top"> |
| | | <div class="top-wj">è¯ååç±»</div> |
| | | <div class="top-tj" @click="dialogFormVisible = true">+æ·»å </div> |
| | | </div> |
| | | <div class="center-ss"> |
| | | <el-input |
| | | placeholder="请è¾å
¥å
容" |
| | | v-model="sidecolumnval" |
| | | class="input-with-select" |
| | | size="medium"> |
| | | </el-input> |
| | | </div> |
| | | |
| | | <div class="head-container" style="margin-top: 20px"> |
| | | <el-tree |
| | | :data="deptOptions" |
| | | :props="defaultProps" |
| | | :expand-on-click-node="false" |
| | | :filter-node-method="filterNode" |
| | | ref="tree" |
| | | node-key="id" |
| | | default-expand-all |
| | | highlight-current |
| | | @node-click="handleNodeClick"> |
| | | <span class="custom-tree-node" slot-scope="{ node, data }"> |
| | | <span>{{ node.label }}</span> |
| | | <span v-if="data.id > 0"> |
| | | <el-button |
| | | type="text" |
| | | icon="el-icon-delete" |
| | | circle |
| | | size="mini" |
| | | @click="() => remove(node, data)"> |
| | | </el-button> |
| | | </span> |
| | | <span v-if="data.id > 0"> |
| | | <el-button |
| | | type="text" |
| | | circle |
| | | size="mini" |
| | | @click="() => altertag(node, data)"> |
| | | <span class="button-textxg"><i class="el-icon-edit-outline"></i></span> |
| | | </el-button> |
| | | </span> |
| | | </span> |
| | | </el-tree> |
| | | </div> |
| | | </div> |
| | | <!-- å³ä¾§æ°æ® --> |
| | | <div class="leftvlue"> |
| | | <div class="leftvlue-bg"> |
| | | <el-row :gutter="20"> |
| | | <!--è¯åæ°æ®--> |
| | | <el-col :span="24" :xs="24"> |
| | | <el-form |
| | | :model="queryParams" |
| | | ref="queryForm" |
| | | size="small" |
| | | :inline="true" |
| | | v-show="showSearch" |
| | | label-width="98px"> |
| | | <el-form-item label="è¯ååç§°" prop="drugName"> |
| | | <el-input |
| | | v-model="queryParams.drugName" |
| | | placeholder="请è¾å
¥" |
| | | clearable |
| | | style="width: 200px" |
| | | @keyup.enter.native="handleQuery"/> |
| | | </el-form-item> |
| | | <el-form-item label="è¯ååç±»" prop="categoryId"> |
| | | <el-select v-model="queryParams.categoryId" placeholder="è¯·éæ©"> |
| | | <el-option |
| | | v-for="item in drugCategories" |
| | | :key="item.id" |
| | | :label="item.categoryName" |
| | | :value="item.id"> |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="è¯åç±»å" prop="drugType"> |
| | | <el-select v-model="queryParams.drugType" placeholder="è¯·éæ©"> |
| | | <el-option |
| | | v-for="item in drugTypes" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value"> |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="æ¯å¦å¤æ¹è¯" prop="isPrescription"> |
| | | <el-select v-model="queryParams.isPrescription" placeholder="è¯·éæ©"> |
| | | <el-option |
| | | v-for="item in prescriptionOptions" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value"> |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | |
| | | <el-form-item> |
| | | <el-button |
| | | type="primary" |
| | | icon="el-icon-search" |
| | | size="medium" |
| | | @click="handleQuery">æç´¢</el-button> |
| | | <el-button |
| | | icon="el-icon-refresh" |
| | | size="medium" |
| | | @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="el-icon-plus" |
| | | size="medium" |
| | | @click="handleAdd">æ°å¢</el-button> |
| | | </el-col> |
| | | <el-col :span="1.5"> |
| | | <el-button |
| | | type="danger" |
| | | plain |
| | | icon="el-icon-delete" |
| | | size="medium" |
| | | :disabled="multiple" |
| | | @click="handleDelete">å é¤</el-button> |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | <el-table |
| | | v-loading="loading" |
| | | :data="filteredDrugList" |
| | | @selection-change="handleSelectionChange"> |
| | | <el-table-column type="selection" width="50" align="center" /> |
| | | <el-table-column |
| | | label="è¯ååç§°" |
| | | fixed |
| | | align="center" |
| | | key="drugName" |
| | | prop="drugName" |
| | | :show-overflow-tooltip="true"> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="éç¨å" |
| | | align="center" |
| | | key="genericName" |
| | | prop="genericName" |
| | | :show-overflow-tooltip="true" |
| | | width="200"/> |
| | | <el-table-column |
| | | label="è¯ååç±»" |
| | | align="center" |
| | | key="categoryName" |
| | | prop="categoryName" |
| | | :show-overflow-tooltip="true"/> |
| | | <el-table-column |
| | | label="è¯åç±»å" |
| | | align="center" |
| | | key="drugType" |
| | | prop="drugType"> |
| | | <template slot-scope="scope"> |
| | | <dict-tag :options="drugTypes" :value="scope.row.drugType"/> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="æ¯å¦å¤æ¹è¯" |
| | | align="center" |
| | | key="isPrescription" |
| | | prop="isPrescription"> |
| | | <template slot-scope="scope"> |
| | | <dict-tag :options="prescriptionOptions" :value="scope.row.isPrescription"/> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="è§æ ¼" |
| | | align="center" |
| | | key="specification" |
| | | prop="specification" |
| | | width="120"/> |
| | | <el-table-column |
| | | label="åä½" |
| | | align="center" |
| | | key="unit" |
| | | prop="unit" |
| | | width="80"/> |
| | | <el-table-column |
| | | label="ç产åå®¶" |
| | | align="center" |
| | | key="manufacturer" |
| | | prop="manufacturer" |
| | | width="150"/> |
| | | <el-table-column |
| | | label="æ¹åæå·" |
| | | align="center" |
| | | key="approvalNumber" |
| | | prop="approvalNumber" |
| | | width="150"/> |
| | | <el-table-column |
| | | label="æä½" |
| | | fixed="right" |
| | | align="center" |
| | | width="200" |
| | | class-name="small-padding fixed-width"> |
| | | <template slot-scope="scope"> |
| | | <el-button |
| | | size="medium" |
| | | type="text" |
| | | @click="handleUpdate(scope.row)"> |
| | | <span class="button-textxg"><i class="el-icon-edit"></i>ä¿®æ¹</span> |
| | | </el-button> |
| | | <el-button |
| | | size="medium" |
| | | type="text" |
| | | @click="handleDelete(scope.row)"> |
| | | <span class="button-textsc"><i class="el-icon-delete"></i>å é¤</span> |
| | | </el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | |
| | | <pagination |
| | | v-show="total>0" |
| | | :total="total" |
| | | :page.sync="queryParams.pageNum" |
| | | :limit.sync="queryParams.pageSize" |
| | | @pagination="getList"/> |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | <!-- æ·»å æä¿®æ¹è¯åå¯¹è¯æ¡ --> |
| | | <el-dialog |
| | | :title="title" |
| | | :visible.sync="drugOpen" |
| | | :close-on-click-modal="false" |
| | | width="900px" |
| | | append-to-body> |
| | | <el-form |
| | | ref="drugForm" |
| | | :model="drugForm" |
| | | :rules="rules" |
| | | label-width="100px"> |
| | | <div class="headline"> |
| | | <div class="basics">åºç¡ä¿¡æ¯</div> |
| | | </div> |
| | | <el-divider></el-divider> |
| | | <el-row> |
| | | <el-col :span="12"> |
| | | <el-form-item label="è¯ååç§°" prop="drugName"> |
| | | <el-input |
| | | v-model="drugForm.drugName" |
| | | placeholder="请è¾å
¥è¯ååç§°" |
| | | maxlength="40"/> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="éç¨å" prop="genericName"> |
| | | <el-input |
| | | v-model="drugForm.genericName" |
| | | placeholder="请è¾å
¥è¯åéç¨å" |
| | | maxlength="40"/> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row> |
| | | <el-col :span="12"> |
| | | <el-form-item label="è¯ååç±»" prop="categoryId"> |
| | | <el-select |
| | | style="width: 300px;" |
| | | v-model="drugForm.categoryId" |
| | | size="medium" |
| | | filterable |
| | | placeholder="è¯·éæ©åç±»"> |
| | | <el-option-group |
| | | v-for="group in deptOptions" |
| | | :key="group.id" |
| | | :label="group.categoryName"> |
| | | <el-option |
| | | v-for="item in group.children" |
| | | :key="item.id" |
| | | :label="item.categoryName" |
| | | :value="item.id"> |
| | | </el-option> |
| | | </el-option-group> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="è¯åç±»å" prop="drugType"> |
| | | <el-select v-model="drugForm.drugType" placeholder="è¯·éæ©è¯åç±»å"> |
| | | <el-option |
| | | v-for="item in drugTypes" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value"> |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row> |
| | | <el-col :span="12"> |
| | | <el-form-item label="æ¯å¦å¤æ¹è¯" prop="isPrescription"> |
| | | <el-radio-group v-model="drugForm.isPrescription"> |
| | | <el-radio |
| | | v-for="(item, index) in prescriptionOptions" |
| | | :label="item.value">{{ item.label }}</el-radio> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="æ¹åæå·" prop="approvalNumber"> |
| | | <el-input |
| | | v-model="drugForm.approvalNumber" |
| | | placeholder="请è¾å
¥æ¹åæå·" |
| | | maxlength="40"/> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row> |
| | | <el-col :span="12"> |
| | | <el-form-item label="è§æ ¼" prop="specification"> |
| | | <el-input |
| | | v-model="drugForm.specification" |
| | | placeholder="请è¾å
¥è¯åè§æ ¼" |
| | | maxlength="40"/> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="åä½" prop="unit"> |
| | | <el-select v-model="drugForm.unit" placeholder="è¯·éæ©åä½"> |
| | | <el-option |
| | | v-for="item in unitOptions" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value"> |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row> |
| | | <el-col :span="12"> |
| | | <el-form-item label="ç产åå®¶" prop="manufacturer"> |
| | | <el-input |
| | | v-model="drugForm.manufacturer" |
| | | placeholder="请è¾å
¥ç产åå®¶" |
| | | maxlength="100"/> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="æ¡å½¢ç " prop="barcode"> |
| | | <el-input |
| | | v-model="drugForm.barcode" |
| | | placeholder="请è¾å
¥æ¡å½¢ç " |
| | | maxlength="40"/> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | <div class="headline"> |
| | | <div class="basics">è¯åæå</div> |
| | | </div> |
| | | <el-divider></el-divider> |
| | | <el-form-item prop="ingredients"> |
| | | <el-input |
| | | type="textarea" |
| | | :rows="3" |
| | | placeholder="请è¾å
¥è¯åä¸»è¦æå" |
| | | v-model="drugForm.ingredients"> |
| | | </el-input> |
| | | </el-form-item> |
| | | |
| | | <div class="headline"> |
| | | <div class="basics">ç¨æ³ç¨é</div> |
| | | </div> |
| | | <el-divider></el-divider> |
| | | <el-form-item prop="usageDosage"> |
| | | <el-input |
| | | type="textarea" |
| | | :rows="3" |
| | | placeholder="请è¾å
¥ç¨æ³ç¨é说æ" |
| | | v-model="drugForm.usageDosage"> |
| | | </el-input> |
| | | </el-form-item> |
| | | |
| | | <div class="headline"> |
| | | <div class="basics">ä¸è¯ååº</div> |
| | | </div> |
| | | <el-divider></el-divider> |
| | | <el-form-item prop="adverseReactions"> |
| | | <el-input |
| | | type="textarea" |
| | | :rows="3" |
| | | placeholder="请è¾å
¥ä¸è¯ååºè¯´æ" |
| | | v-model="drugForm.adverseReactions"> |
| | | </el-input> |
| | | </el-form-item> |
| | | |
| | | <div class="headline"> |
| | | <div class="basics">ç¦å¿</div> |
| | | </div> |
| | | <el-divider></el-divider> |
| | | <el-form-item prop="contraindications"> |
| | | <el-input |
| | | type="textarea" |
| | | :rows="3" |
| | | placeholder="请è¾å
¥ç¦å¿è¯´æ" |
| | | v-model="drugForm.contraindications"> |
| | | </el-input> |
| | | </el-form-item> |
| | | |
| | | <div class="headline"> |
| | | <div class="basics">注æäºé¡¹</div> |
| | | </div> |
| | | <el-divider></el-divider> |
| | | <el-form-item prop="precautions"> |
| | | <el-input |
| | | type="textarea" |
| | | :rows="3" |
| | | placeholder="请è¾å
¥æ³¨æäºé¡¹" |
| | | v-model="drugForm.precautions"> |
| | | </el-input> |
| | | </el-form-item> |
| | | </el-form> |
| | | <div slot="footer" class="dialog-footer"> |
| | | <el-button type="primary" @click="submitForm">ä¿ å</el-button> |
| | | <el-button @click="cancel">å
³ é</el-button> |
| | | </div> |
| | | </el-dialog> |
| | | </div> |
| | | </div> |
| | | <!-- æ·»å ç±»å«å¼¹æ¡ --> |
| | | <el-dialog title="æ°å¢ç±»å«" width="30%" :visible.sync="dialogFormVisible"> |
| | | <div style="text-align: center; margin-bottom: 20px"> |
| | | <el-radio-group v-model="radio"> |
| | | <el-radio-button label="主åç±»"></el-radio-button> |
| | | <el-radio-button label="ååç±»"></el-radio-button> |
| | | </el-radio-group> |
| | | </div> |
| | | <el-divider></el-divider> |
| | | |
| | | <el-form :model="classifyform"> |
| | | <el-form-item label="è¯·éæ©è¯å大类" v-if="radio == 'ååç±»'"> |
| | | <el-select v-model="classifyform.pid" placeholder="è¯·éæ©"> |
| | | <el-option |
| | | v-for="item in deptOptions" |
| | | :key="item.id" |
| | | :label="item.categoryName" |
| | | :value="item.id"> |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="请è¾å
¥ç±»å«åç§°"> |
| | | <el-input |
| | | v-model="classifyform.categoryName" |
| | | autocomplete="off"></el-input> |
| | | </el-form-item> |
| | | </el-form> |
| | | <div slot="footer" class="dialog-footer"> |
| | | <el-button @click="getDeptTree()">å æ¶</el-button> |
| | | <el-button type="primary" @click="submitsidecolumn">ç¡® å®</el-button> |
| | | </div> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | export default { |
| | | data () { |
| | | name: "DrugKnowledge", |
| | | dicts: ["sys_normal_disable", "sys_user_sex"], |
| | | data() { |
| | | return { |
| | | |
| | | // é®ç½©å± |
| | | loading: false, |
| | | // é䏿°ç» |
| | | ids: [], |
| | | // éå个ç¦ç¨ |
| | | single: true, |
| | | // éå¤ä¸ªç¦ç¨ |
| | | multiple: true, |
| | | // æ¾ç¤ºæç´¢æ¡ä»¶ |
| | | showSearch: true, |
| | | // æ»æ¡æ° |
| | | total: 0, |
| | | idds: "", |
| | | classifyform: { // æ·»å è¿ä¸ªå¯¹è±¡ |
| | | id: undefined, |
| | | pid: undefined, |
| | | categoryName: undefined |
| | | }, |
| | | amendtag: false, //æ¯å¦ä¿®æ¹ç±»å« |
| | | dialogFormVisible: false, //ä¿®æ¹æ·»å ç±»å«å¼¹æ¡ |
| | | deleteVisible: false, //åç±»å é¤å¼¹æ¡ |
| | | deletefenl: "é«è¡å", //å é¤é¡¹ |
| | | radio: "主åç±»", |
| | | // è¡¨æ ¼æ°æ® |
| | | drugList: [ |
| | | { |
| | | id: 1, |
| | | drugName: "é¿è«è¥¿æè¶å", |
| | | genericName: "é¿è«è¥¿æ", |
| | | categoryId: 101, |
| | | categoryName: "æçç´ ", |
| | | drugType: "1", |
| | | isPrescription: "1", |
| | | specification: "0.25gÃ24ç²", |
| | | unit: "ç", |
| | | manufacturer: "ååå¶è¯", |
| | | approvalNumber: "å½è¯ååH13024176", |
| | | barcode: "6923450601234", |
| | | ingredients: "é¿è«è¥¿æ", |
| | | usageDosage: "壿ãæäººä¸æ¬¡0.5gï¼æ¯6ï½8å°æ¶1次ï¼ä¸æ¥åéä¸è¶
è¿4gã", |
| | | adverseReactions: "1.æ¶å¿ãååãè
¹æ³»ååèæ§è ççèè éååºã2.ç®ç¹ãè¯ç©çåå®åçè¿æååºã", |
| | | contraindications: "ééç´ è¿æåééç´ ç®è¤è¯éªé³æ§æ£è
ç¦ç¨ã", |
| | | precautions: "1.ééç´ ç±»å£æè¯ç©å¶å¯å¼èµ·è¿ææ§ä¼å
ï¼å°¤å¤è§äºæééç´ æå¤´å¢èç´ è¿æå²çæ£è
ã2.ä¼ ææ§åæ ¸ç»èå¢å¤çæ£è
åºç¨æ¬åæåçç®ç¹ï¼åºé¿å
使ç¨ã" |
| | | }, |
| | | { |
| | | id: 2, |
| | | drugName: "æ¿èæ ¹é¢ç²", |
| | | genericName: "æ¿èæ ¹", |
| | | categoryId: 302, |
| | | categoryName: "çå", |
| | | drugType: "3", |
| | | isPrescription: "0", |
| | | specification: "10gÃ20è¢", |
| | | unit: "ç", |
| | | manufacturer: "ç½äºå±±å¶è¯", |
| | | approvalNumber: "å½è¯ååZ44023445", |
| | | barcode: "6923450605678", |
| | | ingredients: "æ¿èæ ¹", |
| | | usageDosage: "弿°´å²æã䏿¬¡5ï½10gï¼ä¸æ¥3ï½4次ã", |
| | | adverseReactions: "å°ä¸æç¡®ã", |
| | | contraindications: "å°ä¸æç¡®ã", |
| | | precautions: "1.å¿çãé
åè¾è¾£ãçå·ãæ²¹è
»é£ç©ã2.ä¸å®å¨æè¯æé´åæ¶æç¨æ»è¡¥æ§ä¸è¯ã" |
| | | }, |
| | | { |
| | | id: 3, |
| | | drugName: "夿¹ä¸¹åç", |
| | | genericName: "夿¹ä¸¹å", |
| | | categoryId: 303, |
| | | categoryName: "è¶å", |
| | | drugType: "3", |
| | | isPrescription: "0", |
| | | specification: "60ç", |
| | | unit: "ç¶", |
| | | manufacturer: "åä»å ", |
| | | approvalNumber: "å½è¯ååZ11020672", |
| | | barcode: "6923450609012", |
| | | ingredients: "丹åãä¸ä¸ãå°ç", |
| | | usageDosage: "壿ã䏿¬¡3çï¼ä¸æ¥3次ã", |
| | | adverseReactions: "å°ä¸æç¡®ã", |
| | | contraindications: "åå¦ç¦ç¨ã", |
| | | precautions: "1.å¿é£çå·ãè¾è¾£ãæ²¹è
»é£ç©ã2.æè¯æé´å¦æä¸éï¼åºç«å³åè¯å¹¶å°±å»ã" |
| | | }, |
| | | { |
| | | id: 4, |
| | | drugName: "叿´è¬ç¼éè¶å", |
| | | genericName: "叿´è¬", |
| | | categoryId: 102, |
| | | categoryName: "è§£çéçè¯", |
| | | drugType: "1", |
| | | isPrescription: "0", |
| | | specification: "0.3gÃ20ç²", |
| | | unit: "ç", |
| | | manufacturer: "ä¸ç¾å²å
", |
| | | approvalNumber: "å½è¯ååH10900089", |
| | | barcode: "6923450612345", |
| | | ingredients: "叿´è¬", |
| | | usageDosage: "壿ãæäººä¸æ¬¡1ç²ï¼ä¸æ¥2次(æ©æå䏿¬¡)ã", |
| | | adverseReactions: "1.å°æ°ç
人å¯åºç°æ¶å¿ãååãèç§ç¼ææè½»åº¦æ¶åä¸è¯ãèè éæºç¡ååºè¡ã转氨é
¶åé«ã头çã头æãè³é¸£ãè§å模ç³ãç²¾ç¥ç´§å¼ ãåç¡ãä¸è¢æ°´è¿æä½é骤å¢ã", |
| | | contraindications: "1.对å
¶ä»éç¾ä½æçè¯è¿æè
ç¦ç¨ã2.åå¦ååºä¹³æå¦å¥³ç¦ç¨ã3.对é¿å¸å¹æè¿æçå®åæ£è
ç¦ç¨ã", |
| | | precautions: "1.æ¬åä¸ºå¯¹çæ²»çè¯ï¼ä¸å®é¿ææå¤§é使ç¨ï¼ç¨äºæ¢çä¸å¾è¶
è¿5天ï¼ç¨äºè§£çä¸å¾è¶
è¿3天ï¼å¦çç¶ä¸ç¼è§£ï¼è¯·å¨è¯¢å»å¸æè¯å¸ã2.ä¸è½åæ¶æç¨å
¶ä»å«æè§£çéçè¯çè¯å(妿äºå¤æ¹ææåè¯)ã" |
| | | }, |
| | | { |
| | | id: 5, |
| | | drugName: "å
å³å°é»ä¸¸", |
| | | genericName: "å
å³å°é»", |
| | | categoryId: 201, |
| | | categoryName: "è¡¥çè¯", |
| | | drugType: "3", |
| | | isPrescription: "0", |
| | | specification: "200丸", |
| | | unit: "ç¶", |
| | | manufacturer: "åä»å ", |
| | | approvalNumber: "å½è¯ååZ11020061", |
| | | barcode: "6923450615678", |
| | | ingredients: "çå°é»ãé
è¸èãç¡ä¸¹ç®ãå±±è¯ãè¯èãæ³½æ³»", |
| | | usageDosage: "壿ã䏿¬¡8丸ï¼ä¸æ¥3次ã", |
| | | adverseReactions: "å°ä¸æç¡®ã", |
| | | contraindications: "å°ä¸æç¡®ã", |
| | | precautions: "1.å¿è¾è¾£é£ç©ã2.ä¸å®å¨æè¯æé´ææåè¯ã3.æè¯æé´åºç°é£æ¬²ä¸æ¯ï¼èèä¸éï¼å¤§ä¾¿ç¨ï¼è
¹çççç¶æ¶ï¼åºå»å»é¢å°±è¯ã" |
| | | } |
| | | ], |
| | | // å¼¹åºå±æ é¢ |
| | | title: "", |
| | | // æ¯å¦æ¾ç¤ºå¼¹åºå± |
| | | drugOpen: false, |
| | | // æ¥æèå´ |
| | | dateRange: [], |
| | | // è¯ååç±»é项 |
| | | drugCategories: [ |
| | | { id: 101, categoryName: "æçç´ " }, |
| | | { id: 102, categoryName: "è§£çéçè¯" }, |
| | | { id: 103, categoryName: "å¿è¡ç®¡è¯ç©" }, |
| | | { id: 201, categoryName: "è¡¥çè¯" }, |
| | | { id: 202, categoryName: "æ¸
çè¯" }, |
| | | { id: 203, categoryName: "ç¥æ¹¿è¯" }, |
| | | { id: 301, categoryName: "丸å" }, |
| | | { id: 302, categoryName: "çå" }, |
| | | { id: 303, categoryName: "è¶å" } |
| | | ], |
| | | // æ·»å ãä¿®æ¹åæ° |
| | | drugForm: {}, |
| | | deptOptions: [ |
| | | { |
| | | id: 1, |
| | | categoryName: "西è¯", |
| | | children: [ |
| | | { id: 101, categoryName: "æçç´ " }, |
| | | { id: 102, categoryName: "è§£çéçè¯" }, |
| | | { id: 103, categoryName: "å¿è¡ç®¡è¯ç©" } |
| | | ] |
| | | }, |
| | | { |
| | | id: 2, |
| | | categoryName: "ä¸è¯", |
| | | children: [ |
| | | { id: 201, categoryName: "è¡¥çè¯" }, |
| | | { id: 202, categoryName: "æ¸
çè¯" }, |
| | | { id: 203, categoryName: "ç¥æ¹¿è¯" } |
| | | ] |
| | | }, |
| | | { |
| | | id: 3, |
| | | categoryName: "䏿è¯", |
| | | children: [ |
| | | { id: 301, categoryName: "丸å" }, |
| | | { id: 302, categoryName: "çå" }, |
| | | { id: 303, categoryName: "è¶å" } |
| | | ] |
| | | } |
| | | ], |
| | | defaultProps: { |
| | | children: "children", |
| | | label: "categoryName", |
| | | }, |
| | | sidecolumnform: {}, //æ·»å ç±»å«è¡¨å |
| | | dialogFormVisible: false, //æ·»å ç±»å«å¼¹æ¡ |
| | | sidecolumnval: "", //ç±»å«æç´¢ |
| | | // æ¥è¯¢åæ° |
| | | queryParams: { |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | drugName: undefined, |
| | | categoryId: undefined, |
| | | drugType: undefined, |
| | | isPrescription: undefined |
| | | }, |
| | | // è¯åç±»åé项 |
| | | drugTypes: [ |
| | | { value: "1", label: "西è¯" }, |
| | | { value: "2", label: "ä¸è¯" }, |
| | | { value: "3", label: "䏿è¯" }, |
| | | { value: "4", label: "çç©å¶å" }, |
| | | { value: "5", label: "å
¶ä»" } |
| | | ], |
| | | // æ¯å¦å¤æ¹è¯é项 |
| | | prescriptionOptions: [ |
| | | { value: "1", label: "夿¹è¯" }, |
| | | { value: "0", label: "é夿¹è¯" } |
| | | ], |
| | | // åä½é项 |
| | | unitOptions: [ |
| | | { value: "ç", label: "ç" }, |
| | | { value: "ç¶", label: "ç¶" }, |
| | | { value: "æ¯", label: "æ¯" }, |
| | | { value: "è¢", label: "è¢" }, |
| | | { value: "ç", label: "ç" }, |
| | | { value: "ç²", label: "ç²" }, |
| | | { value: "g", label: "å
" }, |
| | | { value: "ml", label: "毫å" } |
| | | ], |
| | | // è¡¨åæ ¡éª |
| | | rules: { |
| | | drugName: [ |
| | | { required: true, message: "è¯ååç§°ä¸è½ä¸ºç©º", trigger: "blur" } |
| | | ], |
| | | genericName: [ |
| | | { required: true, message: "éç¨åä¸è½ä¸ºç©º", trigger: "blur" } |
| | | ], |
| | | categoryId: [ |
| | | { required: true, message: "è¯ååç±»ä¸è½ä¸ºç©º", trigger: "blur" } |
| | | ], |
| | | drugType: [ |
| | | { required: true, message: "è¯åç±»åä¸è½ä¸ºç©º", trigger: "blur" } |
| | | ], |
| | | isPrescription: [ |
| | | { required: true, message: "æ¯å¦å¤æ¹è¯ä¸è½ä¸ºç©º", trigger: "blur" } |
| | | ], |
| | | specification: [ |
| | | { required: true, message: "è§æ ¼ä¸è½ä¸ºç©º", trigger: "blur" } |
| | | ], |
| | | unit: [ |
| | | { required: true, message: "åä½ä¸è½ä¸ºç©º", trigger: "blur" } |
| | | ], |
| | | approvalNumber: [ |
| | | { required: true, message: "æ¹åæå·ä¸è½ä¸ºç©º", trigger: "blur" } |
| | | ], |
| | | manufacturer: [ |
| | | { required: true, message: "ç产åå®¶ä¸è½ä¸ºç©º", trigger: "blur" } |
| | | ] |
| | | } |
| | | }; |
| | | }, |
| | | computed: { |
| | | filteredDrugList() { |
| | | let list = [...this.drugList]; |
| | | if (this.queryParams.drugName) { |
| | | list = list.filter(item => |
| | | item.drugName.includes(this.queryParams.drugName) |
| | | ); |
| | | } |
| | | if (this.queryParams.categoryId) { |
| | | list = list.filter(item => |
| | | item.categoryId == this.queryParams.categoryId |
| | | ); |
| | | } |
| | | if (this.queryParams.drugType) { |
| | | list = list.filter(item => |
| | | item.drugType == this.queryParams.drugType |
| | | ); |
| | | } |
| | | if (this.queryParams.isPrescription) { |
| | | list = list.filter(item => |
| | | item.isPrescription == this.queryParams.isPrescription |
| | | ); |
| | | } |
| | | return list; |
| | | } |
| | | }, |
| | | |
| | | created () { |
| | | |
| | | watch: { |
| | | // æ ¹æ®åç§°çéé¨é¨æ |
| | | sidecolumnval(val) { |
| | | this.$refs.tree.filter(val); |
| | | } |
| | | }, |
| | | |
| | | created() { |
| | | // åå§åæ°æ® |
| | | this.total = this.drugList.length; |
| | | }, |
| | | methods: { |
| | | /** æ¥è¯¢è¯åå表 */ |
| | | getList() { |
| | | this.loading = true; |
| | | setTimeout(() => { |
| | | this.loading = false; |
| | | }, 500); |
| | | }, |
| | | /** æ¥è¯¢è¯ååç±»æ ç»æ */ |
| | | getDeptTree() { |
| | | this.dialogFormVisible = false; |
| | | }, |
| | | // çéèç¹ |
| | | filterNode(value, data) { |
| | | if (!value) return true; |
| | | return data.categoryName.indexOf(value) !== -1; |
| | | }, |
| | | // æ·»å ç±»å«æ |
| | | submitsidecolumn() { |
| | | if (this.classifyform.id) { |
| | | // 模æä¿®æ¹åç±» |
| | | const category = this.findCategory(this.classifyform.id); |
| | | if (category) { |
| | | category.categoryName = this.classifyform.categoryName; |
| | | if (this.classifyform.pid) { |
| | | category.pid = this.classifyform.pid; |
| | | } |
| | | } |
| | | this.$modal.msgSuccess("ä¿®æ¹æå"); |
| | | this.classifyform = {}; |
| | | this.dialogFormVisible = false; |
| | | return; |
| | | } |
| | | |
| | | // æ¨¡ææ°å¢åç±» |
| | | const newCategory = { |
| | | id: Math.max(...this.deptOptions.flatMap(group => |
| | | [group.id, ...(group.children || []).map(child => child.id)] |
| | | )) + 1, |
| | | categoryName: this.classifyform.categoryName, |
| | | pid: this.radio === "ååç±»" ? this.classifyform.pid : null |
| | | }; |
| | | |
| | | if (this.radio === "ååç±»") { |
| | | const parent = this.findCategory(this.classifyform.pid); |
| | | if (parent) { |
| | | if (!parent.children) parent.children = []; |
| | | parent.children.push(newCategory); |
| | | } |
| | | } else { |
| | | newCategory.children = []; |
| | | this.deptOptions.push(newCategory); |
| | | } |
| | | |
| | | this.$modal.msgSuccess("æ°å¢æå"); |
| | | this.classifyform = {}; |
| | | this.dialogFormVisible = false; |
| | | }, |
| | | |
| | | findCategory(id) { |
| | | for (const group of this.deptOptions) { |
| | | if (group.id === id) return group; |
| | | if (group.children) { |
| | | for (const child of group.children) { |
| | | if (child.id === id) return child; |
| | | } |
| | | } |
| | | } |
| | | return null; |
| | | }, |
| | | |
| | | remove(a, b) { |
| | | if (b.pid) { |
| | | this.$modal |
| | | .confirm('æ¯å¦ç¡®è®¤å é¤å类项为"' + b.categoryName + '"çæ°æ®é¡¹ï¼') |
| | | .then(() => { |
| | | // 模æå é¤ååç±» |
| | | const parent = this.findCategory(b.pid); |
| | | if (parent && parent.children) { |
| | | parent.children = parent.children.filter(child => child.id !== b.id); |
| | | } |
| | | this.$modal.msgSuccess("å 餿å"); |
| | | }) |
| | | .catch(() => {}); |
| | | } else { |
| | | this.$modal |
| | | .confirm( |
| | | 'æ¯å¦ç¡®è®¤å é¤ä¸çº§åç±»"' + |
| | | b.categoryName + |
| | | '"ï¼å é¤åå
¶ä¸åç±»å°å½ç±»âæªåç±»â' |
| | | ) |
| | | .then(() => { |
| | | // 模æå é¤ä¸»åç±» |
| | | this.deptOptions = this.deptOptions.filter(group => group.id !== b.id); |
| | | this.$modal.msgSuccess("å 餿å"); |
| | | }) |
| | | .catch(() => {}); |
| | | } |
| | | }, |
| | | altertag(a, b) { |
| | | this.dialogFormVisible = true; |
| | | if (!b.pid) { |
| | | this.radio = "主åç±»"; |
| | | } else { |
| | | this.radio = "ååç±»"; |
| | | } |
| | | this.classifyform = JSON.parse(JSON.stringify(b)); |
| | | this.dialogFormVisible = true; |
| | | }, |
| | | handleNodeClick(data) { |
| | | this.queryParams.categoryId = data.id; |
| | | }, |
| | | |
| | | // åæ¶æé® |
| | | cancel() { |
| | | this.drugForm = {}; |
| | | this.drugOpen = false; |
| | | this.reset(); |
| | | }, |
| | | |
| | | // 表åéç½® |
| | | reset() { |
| | | this.drugForm = { |
| | | id: undefined, |
| | | drugName: undefined, |
| | | genericName: undefined, |
| | | categoryId: undefined, |
| | | drugType: undefined, |
| | | isPrescription: undefined, |
| | | specification: undefined, |
| | | unit: undefined, |
| | | manufacturer: undefined, |
| | | approvalNumber: undefined, |
| | | barcode: undefined, |
| | | ingredients: undefined, |
| | | usageDosage: undefined, |
| | | adverseReactions: undefined, |
| | | contraindications: undefined, |
| | | precautions: undefined |
| | | }; |
| | | }, |
| | | /** æç´¢æé®æä½ */ |
| | | handleQuery() { |
| | | this.queryParams.pageNum = 1; |
| | | }, |
| | | /** éç½®æé®æä½ */ |
| | | resetQuery() { |
| | | this.dateRange = []; |
| | | this.resetForm("queryForm"); |
| | | this.queryParams = { |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | drugName: undefined, |
| | | categoryId: undefined, |
| | | drugType: undefined, |
| | | isPrescription: undefined |
| | | }; |
| | | this.$refs.tree.setCurrentKey(null); |
| | | }, |
| | | // å¤éæ¡é䏿°æ® |
| | | handleSelectionChange(selection) { |
| | | this.ids = selection.map(item => item.id); |
| | | this.single = selection.length != 1; |
| | | this.multiple = !selection.length; |
| | | }, |
| | | /** æ°å¢æé®æä½ */ |
| | | handleAdd() { |
| | | this.reset(); |
| | | this.title = "æ°å¢è¯å"; |
| | | this.drugForm = {}; |
| | | this.drugOpen = true; |
| | | }, |
| | | /** ä¿®æ¹æé®æä½ */ |
| | | handleUpdate(row) { |
| | | this.reset(); |
| | | this.title = "ä¿®æ¹è¯åä¿¡æ¯"; |
| | | this.drugForm = Object.assign({}, row); |
| | | this.drugOpen = true; |
| | | }, |
| | | /** æäº¤æé® */ |
| | | submitForm: function() { |
| | | this.$refs["drugForm"].validate(valid => { |
| | | if (valid) { |
| | | if (this.drugForm.id != undefined) { |
| | | // 模æä¿®æ¹è¯å |
| | | const index = this.drugList.findIndex(item => item.id === this.drugForm.id); |
| | | if (index !== -1) { |
| | | this.drugList.splice(index, 1, this.drugForm); |
| | | } |
| | | this.$modal.msgSuccess("ä¿®æ¹æå"); |
| | | } else { |
| | | // æ¨¡ææ°å¢è¯å |
| | | this.drugForm.id = Math.max(...this.drugList.map(item => item.id)) + 1; |
| | | this.drugList.unshift(this.drugForm); |
| | | this.total = this.drugList.length; |
| | | this.$modal.msgSuccess("æ°å¢æå"); |
| | | } |
| | | this.drugOpen = false; |
| | | } |
| | | }); |
| | | }, |
| | | /** å é¤æé®æä½ */ |
| | | handleDelete(row) { |
| | | const drugIds = row.id || this.ids; |
| | | this.$modal |
| | | .confirm('æ¯å¦ç¡®è®¤å é¤è¯åå称为"' + row.drugName + '"çæ°æ®é¡¹ï¼') |
| | | .then(() => { |
| | | // 模æå é¤è¯å |
| | | this.drugList = this.drugList.filter(item => item.id !== drugIds); |
| | | this.total = this.drugList.length; |
| | | this.$modal.msgSuccess("å 餿å"); |
| | | }) |
| | | .catch(() => {}); |
| | | } |
| | | } |
| | | } |
| | | }; |
| | | </script> |
| | | |
| | | <style lang='scss' scoped> |
| | | |
| | | <style lang="scss" scoped> |
| | | .DrugKnowledgeManagement { |
| | | display: flex; |
| | | } |
| | | .sidecolumn { |
| | | width: 300px; |
| | | min-height: 100vh; |
| | | text-align: center; |
| | | margin-top: 20px; |
| | | margin: 20px; |
| | | padding: 30px; |
| | | background: #fff; |
| | | border: 1px solid #dcdfe6; |
| | | -webkit-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12), |
| | | 0 0 6px 0 rgba(0, 0, 0, 0.04); |
| | | .sidecolumn-top { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | .top-wj { |
| | | font-size: 20px; |
| | | } |
| | | .top-tj { |
| | | font-size: 18px; |
| | | color: rgb(0, 89, 255); |
| | | cursor: pointer; |
| | | } |
| | | } |
| | | .center-ss { |
| | | margin-top: 30px; |
| | | .input-with-select { |
| | | height: 40px !important; |
| | | } |
| | | } |
| | | .bottom-fl { |
| | | margin-top: 30px; |
| | | display: center !important; |
| | | } |
| | | } |
| | | .headline { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | font-size: 20px; |
| | | border-left: 4px solid #41a1be; |
| | | padding-left: 5px; |
| | | margin: 15px 0; |
| | | } |
| | | .leftvlue { |
| | | width: 80%; |
| | | margin-top: 20px; |
| | | padding: 30px; |
| | | background: #ffff; |
| | | border: 1px solid #dcdfe6; |
| | | -webkit-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12), |
| | | 0 0 6px 0 rgba(0, 0, 0, 0.04); |
| | | } |
| | | ::v-deep .el-tree-node__content { |
| | | display: -webkit-box; |
| | | display: -ms-flexbox; |
| | | display: flex; |
| | | -webkit-box-align: center; |
| | | -ms-flex-align: center; |
| | | align-items: center; |
| | | height: 46px; |
| | | font-size: 20px; |
| | | cursor: pointer; |
| | | } |
| | | ::v-deep .el-tree { |
| | | position: relative; |
| | | cursor: default; |
| | | border-radius: 5px; |
| | | background: #eff8fe; |
| | | color: #606266; |
| | | border: 1px solid #bbe1fa; |
| | | -webkit-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12), |
| | | 0 0 6px 0 rgba(0, 0, 0, 0.04); |
| | | } |
| | | ::v-deep |
| | | .el-tree--highlight-current |
| | | .el-tree-node.is-current |
| | | > .el-tree-node__content { |
| | | background-color: #7799fb; |
| | | color: #fff; |
| | | } |
| | | ::v-deep .el-button--mini.is-circle { |
| | | padding: 7px; |
| | | margin: 0; |
| | | color: red; |
| | | } |
| | | .button-text { |
| | | color: rgb(70, 204, 238); |
| | | } |
| | | .button-textcs { |
| | | color: rgb(39, 167, 67); |
| | | } |
| | | .button-textxg { |
| | | color: rgb(35, 81, 233); |
| | | } |
| | | .button-textsc { |
| | | color: rgb(235, 23, 23); |
| | | } |
| | | </style> |
| | |
| | | smsCode: "", |
| | | rememberMe: false, |
| | | code: "", |
| | | orgid: "1", |
| | | orgid: "47255004333112711A1001", |
| | | }, |
| | | options: [ |
| | | { value: "1", label: "æ¯å®ç²æèªæ²»å¿äººæ°å»é¢" }, |
| | |
| | | |
| | | const loginData = { |
| | | username: this.loginForm.username, |
| | | orgid: "1", |
| | | orgid: "47255004333112711A1001", |
| | | loginType: this.loginMethod |
| | | }; |
| | | |
| | |
| | | this.$store |
| | | .dispatch("Login", loginData) |
| | | .then(() => { |
| | | this.$router.push({ path: this.redirect || "/" }).catch(() => {}); |
| | | this.$router.push({ path: this.redirect || "/followvisit/discharge" }).catch(() => {}); |
| | | }) |
| | | .catch(() => { |
| | | this.loading = false; |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div class="TeamManagement"> |
| | | <!-- å¢é管ç --> |
| | | <el-tabs v-model="activeTab" type="card"> |
| | | <el-tab-pane label="å¢é管ç" name="team"> |
| | | <el-row :gutter="20"> |
| | | <el-col :span="24" :xs="24"> |
| | | <el-form :model="teamQueryParams" ref="teamQueryForm" size="small" :inline="true" v-show="showSearch" label-width="68px"> |
| | | <el-form-item label="å¢éåç§°" prop="name"> |
| | | <el-input |
| | | v-model="teamQueryParams.name" |
| | | placeholder="请è¾å
¥å¢éåç§°" |
| | | clearable |
| | | style="width: 200px" |
| | | @keyup.enter.native="handleTeamQuery" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="å¢éç¶æ" prop="status"> |
| | | <el-select v-model="teamQueryParams.status" placeholder="è¯·éæ©ç¶æ" clearable style="width: 200px"> |
| | | <el-option |
| | | v-for="item in teamStatusOptions" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button type="primary" icon="el-icon-search" size="medium" @click="handleTeamQuery">æç´¢</el-button> |
| | | <el-button icon="el-icon-refresh" size="medium" @click="resetTeamQuery">éç½®</el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | | |
| | | <el-row :gutter="10" class="mb8"> |
| | | <el-col :span="1.5"> |
| | | <el-button |
| | | type="primary" |
| | | plain |
| | | icon="el-icon-plus" |
| | | size="medium" |
| | | @click="handleTeamAdd" |
| | | >æ°å¢å¢é</el-button> |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | <el-table v-loading="teamLoading" :data="filteredTeamList" @selection-change="handleTeamSelectionChange"> |
| | | <el-table-column type="selection" width="50" align="center" /> |
| | | <el-table-column label="å¢éID" align="center" prop="id" width="80" /> |
| | | <el-table-column label="å¢éåç§°" align="center" prop="name" :show-overflow-tooltip="true" /> |
| | | <el-table-column label="å¢éç»é¿" align="center" prop="leader" width="120" /> |
| | | <el-table-column label="å¢éæå" align="center" prop="memberCount" width="100"> |
| | | <template slot-scope="scope"> |
| | | <el-tag>{{ (scope.row.members || []).length }}人</el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="å建æ¶é´" align="center" prop="createTime" width="160"> |
| | | <template slot-scope="scope"> |
| | | <span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="å¢éç¶æ" align="center" prop="status" width="100"> |
| | | <template slot-scope="scope"> |
| | | <dict-tag :options="teamStatusOptions" :value="scope.row.status"/> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="æä½" align="center" class-name="small-padding fixed-width" width="180"> |
| | | <template slot-scope="scope"> |
| | | <el-button |
| | | size="mini" |
| | | type="text" |
| | | icon="el-icon-view" |
| | | @click="handleTeamDetail(scope.row)" |
| | | >详æ
</el-button> |
| | | <el-button |
| | | size="mini" |
| | | type="text" |
| | | icon="el-icon-edit" |
| | | @click="handleTeamUpdate(scope.row)" |
| | | >ç¼è¾</el-button> |
| | | <el-button |
| | | size="mini" |
| | | type="text" |
| | | icon="el-icon-delete" |
| | | @click="handleTeamDelete(scope.row)" |
| | | >å é¤</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | |
| | | <pagination |
| | | v-show="teamTotal>0" |
| | | :total="teamTotal" |
| | | :page.sync="teamQueryParams.pageNum" |
| | | :limit.sync="teamQueryParams.pageSize" |
| | | @pagination="getTeamList" |
| | | /> |
| | | </el-col> |
| | | </el-row> |
| | | </el-tab-pane> |
| | | |
| | | <!-- 人ååç» --> |
| | | <el-tab-pane label="人ååç»" name="member"> |
| | | <el-row :gutter="20"> |
| | | <el-col :span="24" :xs="24"> |
| | | <el-form :model="memberQueryParams" ref="memberQueryForm" size="small" :inline="true" v-show="showSearch" label-width="68px"> |
| | | <el-form-item label="æåå§å" prop="name"> |
| | | <el-input |
| | | v-model="memberQueryParams.name" |
| | | placeholder="请è¾å
¥æåå§å" |
| | | clearable |
| | | style="width: 200px" |
| | | @keyup.enter.native="handleMemberQuery" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="æå±å¢é" prop="teamId"> |
| | | <el-select v-model="memberQueryParams.teamId" placeholder="è¯·éæ©å¢é" clearable style="width: 200px"> |
| | | <el-option |
| | | v-for="item in teamList" |
| | | :key="item.id" |
| | | :label="item.name" |
| | | :value="item.id" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="æåç¶æ" prop="status"> |
| | | <el-select v-model="memberQueryParams.status" placeholder="è¯·éæ©ç¶æ" clearable style="width: 200px"> |
| | | <el-option |
| | | v-for="item in memberStatusOptions" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button type="primary" icon="el-icon-search" size="medium" @click="handleMemberQuery">æç´¢</el-button> |
| | | <el-button icon="el-icon-refresh" size="medium" @click="resetMemberQuery">éç½®</el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | | |
| | | <el-row :gutter="10" class="mb8"> |
| | | <el-col :span="1.5"> |
| | | <el-button |
| | | type="primary" |
| | | plain |
| | | icon="el-icon-plus" |
| | | size="medium" |
| | | @click="handleMemberAdd" |
| | | >æ°å¢æå</el-button> |
| | | </el-col> |
| | | <el-col :span="1.5"> |
| | | <el-button |
| | | type="danger" |
| | | plain |
| | | icon="el-icon-delete" |
| | | size="medium" |
| | | :disabled="multiple" |
| | | @click="handleMemberDelete" |
| | | >å é¤</el-button> |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | <el-table v-loading="memberLoading" :data="filteredMemberList" @selection-change="handleMemberSelectionChange"> |
| | | <el-table-column type="selection" width="50" align="center" /> |
| | | <el-table-column label="æåID" align="center" prop="id" width="80" /> |
| | | <el-table-column label="æåå§å" align="center" prop="name" :show-overflow-tooltip="true" /> |
| | | <el-table-column label="æå±å¢é" align="center" prop="teamName" width="150" /> |
| | | <el-table-column label="èä½" align="center" prop="position" width="120" /> |
| | | <el-table-column label="èç³»çµè¯" align="center" prop="phone" width="150" /> |
| | | <el-table-column label="é®ç®±" align="center" prop="email" width="200" /> |
| | | <el-table-column label="å½åå·¥å" align="center" prop="currentWorkOrder" width="120"> |
| | | <template slot-scope="scope"> |
| | | <el-tag :type="scope.row.currentWorkOrder ? '' : 'info'"> |
| | | {{ scope.row.currentWorkOrder || '空é²' }} |
| | | </el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="æåç¶æ" align="center" prop="status" width="100"> |
| | | <template slot-scope="scope"> |
| | | <dict-tag :options="memberStatusOptions" :value="scope.row.status"/> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="æä½" align="center" class-name="small-padding fixed-width" width="180"> |
| | | <template slot-scope="scope"> |
| | | <el-button |
| | | size="mini" |
| | | type="text" |
| | | icon="el-icon-edit" |
| | | @click="handleMemberUpdate(scope.row)" |
| | | >ç¼è¾</el-button> |
| | | <el-button |
| | | size="mini" |
| | | type="text" |
| | | icon="el-icon-delete" |
| | | @click="handleMemberDelete(scope.row)" |
| | | >å é¤</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | |
| | | <pagination |
| | | v-show="memberTotal>0" |
| | | :total="memberTotal" |
| | | :page.sync="memberQueryParams.pageNum" |
| | | :limit.sync="memberQueryParams.pageSize" |
| | | @pagination="getMemberList" |
| | | /> |
| | | </el-col> |
| | | </el-row> |
| | | </el-tab-pane> |
| | | |
| | | <!-- 工忿´¾ --> |
| | | <el-tab-pane label="工忿´¾" name="workOrder"> |
| | | <el-row :gutter="20"> |
| | | <el-col :span="24" :xs="24"> |
| | | <el-form :model="workOrderQueryParams" ref="workOrderQueryForm" size="small" :inline="true" v-show="showSearch" label-width="68px"> |
| | | <el-form-item label="å·¥åç¼å·" prop="id"> |
| | | <el-input |
| | | v-model="workOrderQueryParams.id" |
| | | placeholder="请è¾å
¥å·¥åç¼å·" |
| | | clearable |
| | | style="width: 200px" |
| | | @keyup.enter.native="handleWorkOrderQuery" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="å·¥åç¶æ" prop="status"> |
| | | <el-select v-model="workOrderQueryParams.status" placeholder="è¯·éæ©ç¶æ" clearable style="width: 200px"> |
| | | <el-option |
| | | v-for="item in workOrderStatusOptions" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="å¤ç人" prop="assignee"> |
| | | <el-select v-model="workOrderQueryParams.assignee" placeholder="è¯·éæ©å¤ç人" clearable style="width: 200px"> |
| | | <el-option |
| | | v-for="item in memberList" |
| | | :key="item.id" |
| | | :label="item.name" |
| | | :value="item.id" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button type="primary" icon="el-icon-search" size="medium" @click="handleWorkOrderQuery">æç´¢</el-button> |
| | | <el-button icon="el-icon-refresh" size="medium" @click="resetWorkOrderQuery">éç½®</el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | | |
| | | <el-row :gutter="10" class="mb8"> |
| | | <el-col :span="1.5"> |
| | | <el-button |
| | | type="primary" |
| | | plain |
| | | icon="el-icon-plus" |
| | | size="medium" |
| | | @click="handleWorkOrderAdd" |
| | | >æ°å»ºå·¥å</el-button> |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | <el-table v-loading="workOrderLoading" :data="filteredWorkOrderList" @selection-change="handleWorkOrderSelectionChange"> |
| | | <el-table-column type="selection" width="50" align="center" /> |
| | | <el-table-column label="å·¥åç¼å·" align="center" prop="id" width="120" /> |
| | | <el-table-column label="å·¥åæ é¢" align="center" prop="title" :show-overflow-tooltip="true" /> |
| | | <el-table-column label="ä¼å
级" align="center" prop="priority" width="100"> |
| | | <template slot-scope="scope"> |
| | | <el-tag :type="scope.row.priority === '1' ? 'danger' : scope.row.priority === '2' ? 'warning' : ''"> |
| | | {{ scope.row.priority === '1' ? 'é«' : scope.row.priority === '2' ? 'ä¸' : 'ä½' }} |
| | | </el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="å建æ¶é´" align="center" prop="createTime" width="160"> |
| | | <template slot-scope="scope"> |
| | | <span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="æªæ¢æ¶é´" align="center" prop="deadline" width="160"> |
| | | <template slot-scope="scope"> |
| | | <span>{{ parseTime(scope.row.deadline, '{y}-{m}-{d}') }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="å¤ç人" align="center" prop="assigneeName" width="120" /> |
| | | <el-table-column label="å·¥åç¶æ" align="center" prop="status" width="120"> |
| | | <template slot-scope="scope"> |
| | | <dict-tag :options="workOrderStatusOptions" :value="scope.row.status"/> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="æä½" align="center" class-name="small-padding fixed-width" width="180"> |
| | | <template slot-scope="scope"> |
| | | <el-button |
| | | size="mini" |
| | | type="text" |
| | | icon="el-icon-edit" |
| | | @click="handleWorkOrderUpdate(scope.row)" |
| | | >ç¼è¾</el-button> |
| | | <el-button |
| | | size="mini" |
| | | type="text" |
| | | icon="el-icon-delete" |
| | | @click="handleWorkOrderDelete(scope.row)" |
| | | >å é¤</el-button> |
| | | <el-button |
| | | size="mini" |
| | | type="text" |
| | | icon="el-icon-s-promotion" |
| | | @click="handleAssignWorkOrder(scope.row)" |
| | | v-if="scope.row.status === '0'" |
| | | >ææ´¾</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | |
| | | <pagination |
| | | v-show="workOrderTotal>0" |
| | | :total="workOrderTotal" |
| | | :page.sync="workOrderQueryParams.pageNum" |
| | | :limit.sync="workOrderQueryParams.pageSize" |
| | | @pagination="getWorkOrderList" |
| | | /> |
| | | </el-col> |
| | | </el-row> |
| | | </el-tab-pane> |
| | | </el-tabs> |
| | | |
| | | <!-- å¢é详æ
å¯¹è¯æ¡ --> |
| | | <el-dialog :title="teamDialogTitle" :visible.sync="teamDialogVisible" width="70%" append-to-body> |
| | | <el-descriptions :column="2" border> |
| | | <el-descriptions-item label="å¢éID">{{ currentTeam.id }}</el-descriptions-item> |
| | | <el-descriptions-item label="å¢éåç§°">{{ currentTeam.name }}</el-descriptions-item> |
| | | <el-descriptions-item label="å¢éç»é¿">{{ currentTeam.leader }}</el-descriptions-item> |
| | | <el-descriptions-item label="å¢éæå">{{ (currentTeam.members || []).length }}人</el-descriptions-item> <el-descriptions-item label="å建æ¶é´">{{ parseTime(currentTeam.createTime, '{y}-{m}-{d} {h}:{i}') }}</el-descriptions-item> |
| | | <el-descriptions-item label="å¢éç¶æ"> |
| | | <dict-tag :options="teamStatusOptions" :value="currentTeam.status"/> |
| | | </el-descriptions-item> |
| | | <el-descriptions-item label="å¢éæè¿°" :span="2">{{ currentTeam.description || 'æ ' }}</el-descriptions-item> |
| | | </el-descriptions> |
| | | |
| | | <div class="team-members" style="margin-top: 20px;"> |
| | | <div class="headline"> |
| | | <div class="basics">å¢éæå</div> |
| | | </div> |
| | | <el-divider></el-divider> |
| | | <el-table :data="currentTeam.members" border style="width: 100%"> |
| | | <el-table-column prop="name" label="æåå§å" width="120" /> |
| | | <el-table-column prop="position" label="èä½" width="120" /> |
| | | <el-table-column prop="phone" label="èç³»çµè¯" width="150" /> |
| | | <el-table-column prop="email" label="é®ç®±" width="200" /> |
| | | <el-table-column prop="currentWorkOrder" label="å½åå·¥å" width="150"> |
| | | <template slot-scope="scope"> |
| | | <el-tag :type="scope.row.currentWorkOrder ? '' : 'info'"> |
| | | {{ scope.row.currentWorkOrder || '空é²' }} |
| | | </el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="status" label="æåç¶æ" width="100"> |
| | | <template slot-scope="scope"> |
| | | <dict-tag :options="memberStatusOptions" :value="scope.row.status"/> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | |
| | | <div class="team-work-orders" style="margin-top: 20px;"> |
| | | <div class="headline"> |
| | | <div class="basics">å¢éå·¥å</div> |
| | | </div> |
| | | <el-divider></el-divider> |
| | | <el-table :data="teamWorkOrders" border style="width: 100%"> |
| | | <el-table-column prop="id" label="å·¥åç¼å·" width="120" /> |
| | | <el-table-column prop="title" label="å·¥åæ é¢" /> |
| | | <el-table-column prop="priority" label="ä¼å
级" width="100"> |
| | | <template slot-scope="scope"> |
| | | <el-tag :type="scope.row.priority === '1' ? 'danger' : scope.row.priority === '2' ? 'warning' : ''"> |
| | | {{ scope.row.priority === '1' ? 'é«' : scope.row.priority === '2' ? 'ä¸' : 'ä½' }} |
| | | </el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="assigneeName" label="å¤ç人" width="120" /> |
| | | <el-table-column prop="status" label="å·¥åç¶æ" width="120"> |
| | | <template slot-scope="scope"> |
| | | <dict-tag :options="workOrderStatusOptions" :value="scope.row.status"/> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="createTime" label="å建æ¶é´" width="160"> |
| | | <template slot-scope="scope"> |
| | | <span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="deadline" label="æªæ¢æ¶é´" width="160"> |
| | | <template slot-scope="scope"> |
| | | <span>{{ parseTime(scope.row.deadline, '{y}-{m}-{d}') }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | |
| | | <div slot="footer" class="dialog-footer"> |
| | | <el-button @click="teamDialogVisible = false">å
³ é</el-button> |
| | | </div> |
| | | </el-dialog> |
| | | |
| | | <!-- æ°å¢/ç¼è¾å¢éå¯¹è¯æ¡ --> |
| | | <el-dialog :title="teamFormTitle" :visible.sync="teamFormVisible" width="50%" append-to-body> |
| | | <el-form ref="teamForm" :model="teamForm" :rules="teamRules" label-width="80px"> |
| | | <el-row> |
| | | <el-col :span="24"> |
| | | <el-form-item label="å¢éåç§°" prop="name"> |
| | | <el-input v-model="teamForm.name" placeholder="请è¾å
¥å¢éåç§°" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="å¢éç»é¿" prop="leader"> |
| | | <el-select v-model="teamForm.leader" placeholder="è¯·éæ©å¢éç»é¿"> |
| | | <el-option |
| | | v-for="item in memberList" |
| | | :key="item.id" |
| | | :label="item.name" |
| | | :value="item.id" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="å¢éç¶æ" prop="status"> |
| | | <el-radio-group v-model="teamForm.status"> |
| | | <el-radio |
| | | v-for="dict in teamStatusOptions" |
| | | :key="dict.value" |
| | | :label="dict.value" |
| | | >{{dict.label}}</el-radio> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <el-form-item label="å¢éæå" prop="members"> |
| | | <el-transfer |
| | | v-model="teamForm.members" |
| | | :data="memberOptions" |
| | | :titles="['å¯éæå', 'å¢éæå']" |
| | | :props="{ |
| | | key: 'id', |
| | | label: 'name' |
| | | }" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <el-form-item label="å¢éæè¿°" prop="description"> |
| | | <el-input type="textarea" :rows="3" v-model="teamForm.description" placeholder="请è¾å
¥å¢éæè¿°" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </el-form> |
| | | <div slot="footer" class="dialog-footer"> |
| | | <el-button type="primary" @click="submitTeamForm">ç¡® å®</el-button> |
| | | <el-button @click="cancelTeamForm">å æ¶</el-button> |
| | | </div> |
| | | </el-dialog> |
| | | |
| | | <!-- æ°å¢/ç¼è¾æåå¯¹è¯æ¡ --> |
| | | <el-dialog :title="memberFormTitle" :visible.sync="memberFormVisible" width="50%" append-to-body> |
| | | <el-form ref="memberForm" :model="memberForm" :rules="memberRules" label-width="80px"> |
| | | <el-row> |
| | | <el-col :span="12"> |
| | | <el-form-item label="æåå§å" prop="name"> |
| | | <el-input v-model="memberForm.name" placeholder="请è¾å
¥æåå§å" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="æå±å¢é" prop="teamId"> |
| | | <el-select v-model="memberForm.teamId" placeholder="è¯·éæ©æå±å¢é"> |
| | | <el-option |
| | | v-for="item in teamList" |
| | | :key="item.id" |
| | | :label="item.name" |
| | | :value="item.id" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="èä½" prop="position"> |
| | | <el-input v-model="memberForm.position" placeholder="请è¾å
¥èä½" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="èç³»çµè¯" prop="phone"> |
| | | <el-input v-model="memberForm.phone" placeholder="请è¾å
¥èç³»çµè¯" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="é®ç®±" prop="email"> |
| | | <el-input v-model="memberForm.email" placeholder="请è¾å
¥é®ç®±" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="æåç¶æ" prop="status"> |
| | | <el-radio-group v-model="memberForm.status"> |
| | | <el-radio |
| | | v-for="dict in memberStatusOptions" |
| | | :key="dict.value" |
| | | :label="dict.value" |
| | | >{{dict.label}}</el-radio> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </el-form> |
| | | <div slot="footer" class="dialog-footer"> |
| | | <el-button type="primary" @click="submitMemberForm">ç¡® å®</el-button> |
| | | <el-button @click="cancelMemberForm">å æ¶</el-button> |
| | | </div> |
| | | </el-dialog> |
| | | |
| | | <!-- æ°å¢/ç¼è¾å·¥åå¯¹è¯æ¡ --> |
| | | <el-dialog :title="workOrderFormTitle" :visible.sync="workOrderFormVisible" width="60%" append-to-body> |
| | | <el-form ref="workOrderForm" :model="workOrderForm" :rules="workOrderRules" label-width="80px"> |
| | | <el-row> |
| | | <el-col :span="24"> |
| | | <el-form-item label="å·¥åæ é¢" prop="title"> |
| | | <el-input v-model="workOrderForm.title" placeholder="请è¾å
¥å·¥åæ é¢" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="ä¼å
级" prop="priority"> |
| | | <el-select v-model="workOrderForm.priority" placeholder="è¯·éæ©ä¼å
级"> |
| | | <el-option |
| | | v-for="item in priorityOptions" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="æªæ¢æ¶é´" prop="deadline"> |
| | | <el-date-picker |
| | | v-model="workOrderForm.deadline" |
| | | type="datetime" |
| | | placeholder="è¯·éæ©æªæ¢æ¶é´" |
| | | value-format="yyyy-MM-dd HH:mm:ss" |
| | | style="width: 100%" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <el-form-item label="å·¥åå
容" prop="content"> |
| | | <el-input type="textarea" :rows="4" v-model="workOrderForm.content" placeholder="请è¾å
¥å·¥åå
容" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="å·¥åç¶æ" prop="status"> |
| | | <el-radio-group v-model="workOrderForm.status"> |
| | | <el-radio |
| | | v-for="dict in workOrderStatusOptions" |
| | | :key="dict.value" |
| | | :label="dict.value" |
| | | >{{dict.label}}</el-radio> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12" v-if="workOrderForm.status === '1'"> |
| | | <el-form-item label="å¤ç人" prop="assignee"> |
| | | <el-select v-model="workOrderForm.assignee" placeholder="è¯·éæ©å¤ç人"> |
| | | <el-option |
| | | v-for="item in memberList" |
| | | :key="item.id" |
| | | :label="item.name" |
| | | :value="item.id" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </el-form> |
| | | <div slot="footer" class="dialog-footer"> |
| | | <el-button type="primary" @click="submitWorkOrderForm">ç¡® å®</el-button> |
| | | <el-button @click="cancelWorkOrderForm">å æ¶</el-button> |
| | | </div> |
| | | </el-dialog> |
| | | |
| | | <!-- ææ´¾å·¥åå¯¹è¯æ¡ --> |
| | | <el-dialog title="ææ´¾å·¥å" :visible.sync="assignDialogVisible" width="40%" append-to-body> |
| | | <el-form :model="assignForm" label-width="80px"> |
| | | <el-form-item label="å·¥åæ é¢"> |
| | | <el-input v-model="assignForm.title" disabled /> |
| | | </el-form-item> |
| | | <el-form-item label="å¤ç人" prop="assignee"> |
| | | <el-select v-model="assignForm.assignee" placeholder="è¯·éæ©å¤ç人" style="width: 100%"> |
| | | <el-option |
| | | v-for="item in availableMembers" |
| | | :key="item.id" |
| | | :label="item.name" |
| | | :value="item.id" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="ä¼å
级" prop="priority"> |
| | | <el-select v-model="assignForm.priority" placeholder="è¯·éæ©ä¼å
级" style="width: 100%"> |
| | | <el-option |
| | | v-for="item in priorityOptions" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="æªæ¢æ¶é´" prop="deadline"> |
| | | <el-date-picker |
| | | v-model="assignForm.deadline" |
| | | type="datetime" |
| | | placeholder="è¯·éæ©æªæ¢æ¶é´" |
| | | value-format="yyyy-MM-dd HH:mm:ss" |
| | | style="width: 100%" |
| | | /> |
| | | </el-form-item> |
| | | </el-form> |
| | | <div slot="footer" class="dialog-footer"> |
| | | <el-button type="primary" @click="submitAssign">ç¡® å®</el-button> |
| | | <el-button @click="assignDialogVisible = false">å æ¶</el-button> |
| | | </div> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import { parseTime } from '@/utils/ruoyi' |
| | | |
| | | export default { |
| | | name: "TeamManagement", |
| | | dicts: ['sys_normal_disable', 'sys_user_sex'], |
| | | data() { |
| | | return { |
| | | // å½åæ¿æ´»çæ ç¾é¡µ |
| | | activeTab: 'team', |
| | | // æ¾ç¤ºæç´¢æ¡ä»¶ |
| | | showSearch: true, |
| | | |
| | | // å¢é管çç¸å
³æ°æ® |
| | | teamLoading: false, |
| | | multiple: false, // è¿éæ·»å |
| | | teamList: [ |
| | | { |
| | | id: 1, |
| | | name: "å端å¼åå¢é", |
| | | leader: "å¼ ä¸", |
| | | members: [ |
| | | { id: 1, name: "å¼ ä¸", position: "å端ç»é¿", phone: "13800138001", email: "zhangsan@example.com", currentWorkOrder: "WO20230001", status: "1" }, |
| | | { id: 2, name: "æå", position: "é«çº§å端", phone: "13800138002", email: "lisi@example.com", currentWorkOrder: "", status: "1" }, |
| | | { id: 3, name: "çäº", position: "å端å¼å", phone: "13800138003", email: "wangwu@example.com", currentWorkOrder: "WO20230002", status: "1" } |
| | | ], |
| | | createTime: "2023-01-15 09:30:00", |
| | | status: "1", |
| | | description: "è´è´£å
¬å¸ææå端项ç®çå¼ååç»´æ¤" |
| | | }, |
| | | { |
| | | id: 2, |
| | | name: "å端å¼åå¢é", |
| | | leader: "èµµå
", |
| | | members: [ |
| | | { id: 4, name: "èµµå
", position: "å端ç»é¿", phone: "13800138004", email: "zhaoliu@example.com", currentWorkOrder: "WO20230003", status: "1" }, |
| | | { id: 5, name: "é±ä¸", position: "é«çº§å端", phone: "13800138005", email: "qianqi@example.com", currentWorkOrder: "", status: "1" }, |
| | | { id: 6, name: "åå
«", position: "å端å¼å", phone: "13800138006", email: "sunba@example.com", currentWorkOrder: "", status: "1" } |
| | | ], |
| | | createTime: "2023-01-20 14:20:00", |
| | | status: "1", |
| | | description: "è´è´£å
¬å¸ææå端æå¡çå¼ååç»´æ¤" |
| | | }, |
| | | { |
| | | id: 3, |
| | | name: "æµè¯å¢é", |
| | | leader: "å¨ä¹", |
| | | members: [ |
| | | { id: 7, name: "å¨ä¹", position: "æµè¯ç»ç", phone: "13800138007", email: "zhoujiu@example.com", currentWorkOrder: "WO20230004", status: "1" }, |
| | | { id: 8, name: "å´å", position: "æµè¯å·¥ç¨å¸", phone: "13800138008", email: "wushi@example.com", currentWorkOrder: "", status: "1" } |
| | | ], |
| | | createTime: "2023-02-10 10:15:00", |
| | | status: "1", |
| | | description: "è´è´£å
¬å¸ææé¡¹ç®çæµè¯å·¥ä½" |
| | | } |
| | | ], |
| | | teamQueryParams: { |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | name: undefined, |
| | | status: undefined |
| | | }, |
| | | teamTotal: 3, |
| | | teamStatusOptions: [ |
| | | { value: "0", label: "ç¦ç¨" }, |
| | | { value: "1", label: "å¯ç¨" } |
| | | ], |
| | | teamDialogVisible: false, |
| | | teamDialogTitle: "", |
| | | currentTeam: { |
| | | id: undefined, |
| | | name: undefined, |
| | | leader: undefined, |
| | | members: [], // ç¡®ä¿æé»è®¤ç©ºæ°ç» |
| | | createTime: undefined, |
| | | status: undefined, |
| | | description: undefined |
| | | }, |
| | | teamFormVisible: false, |
| | | teamFormTitle: "", |
| | | teamForm: { |
| | | id: undefined, |
| | | name: undefined, |
| | | leader: undefined, |
| | | members: [], |
| | | status: "1", |
| | | description: undefined |
| | | }, |
| | | teamRules: { |
| | | name: [ |
| | | { required: true, message: "å¢éåç§°ä¸è½ä¸ºç©º", trigger: "blur" } |
| | | ], |
| | | leader: [ |
| | | { required: true, message: "å¢éç»é¿ä¸è½ä¸ºç©º", trigger: "change" } |
| | | ], |
| | | status: [ |
| | | { required: true, message: "å¢éç¶æä¸è½ä¸ºç©º", trigger: "change" } |
| | | ] |
| | | }, |
| | | |
| | | // 人ååç»ç¸å
³æ°æ® |
| | | memberLoading: false, |
| | | memberList: [ |
| | | { id: 1, name: "å¼ ä¸", teamId: 1, teamName: "å端å¼åå¢é", position: "å端ç»é¿", phone: "13800138001", email: "zhangsan@example.com", currentWorkOrder: "WO20230001", status: "1" }, |
| | | { id: 2, name: "æå", teamId: 1, teamName: "å端å¼åå¢é", position: "é«çº§å端", phone: "13800138002", email: "lisi@example.com", currentWorkOrder: "", status: "1" }, |
| | | { id: 3, name: "çäº", teamId: 1, teamName: "å端å¼åå¢é", position: "å端å¼å", phone: "13800138003", email: "wangwu@example.com", currentWorkOrder: "WO20230002", status: "1" }, |
| | | { id: 4, name: "èµµå
", teamId: 2, teamName: "å端å¼åå¢é", position: "å端ç»é¿", phone: "13800138004", email: "zhaoliu@example.com", currentWorkOrder: "WO20230003", status: "1" }, |
| | | { id: 5, name: "é±ä¸", teamId: 2, teamName: "å端å¼åå¢é", position: "é«çº§å端", phone: "13800138005", email: "qianqi@example.com", currentWorkOrder: "", status: "1" }, |
| | | { id: 6, name: "åå
«", teamId: 2, teamName: "å端å¼åå¢é", position: "å端å¼å", phone: "13800138006", email: "sunba@example.com", currentWorkOrder: "", status: "1" }, |
| | | { id: 7, name: "å¨ä¹", teamId: 3, teamName: "æµè¯å¢é", position: "æµè¯ç»ç", phone: "13800138007", email: "zhoujiu@example.com", currentWorkOrder: "WO20230004", status: "1" }, |
| | | { id: 8, name: "å´å", teamId: 3, teamName: "æµè¯å¢é", position: "æµè¯å·¥ç¨å¸", phone: "13800138008", email: "wushi@example.com", currentWorkOrder: "", status: "1" } |
| | | ], |
| | | memberQueryParams: { |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | name: undefined, |
| | | teamId: undefined, |
| | | status: undefined |
| | | }, |
| | | memberTotal: 8, |
| | | memberStatusOptions: [ |
| | | { value: "0", label: "ç¦ç¨" }, |
| | | { value: "1", label: "å¯ç¨" } |
| | | ], |
| | | memberFormVisible: false, |
| | | memberFormTitle: "", |
| | | memberForm: { |
| | | id: undefined, |
| | | name: undefined, |
| | | teamId: undefined, |
| | | position: undefined, |
| | | phone: undefined, |
| | | email: undefined, |
| | | status: "1" |
| | | }, |
| | | memberRules: { |
| | | name: [ |
| | | { required: true, message: "æåå§åä¸è½ä¸ºç©º", trigger: "blur" } |
| | | ], |
| | | teamId: [ |
| | | { required: true, message: "æå±å¢éä¸è½ä¸ºç©º", trigger: "change" } |
| | | ], |
| | | position: [ |
| | | { required: true, message: "èä½ä¸è½ä¸ºç©º", trigger: "blur" } |
| | | ], |
| | | phone: [ |
| | | { required: true, message: "èç³»çµè¯ä¸è½ä¸ºç©º", trigger: "blur" } |
| | | ], |
| | | email: [ |
| | | { required: true, message: "é®ç®±ä¸è½ä¸ºç©º", trigger: "blur" }, |
| | | { type: 'email', message: '请è¾å
¥æ£ç¡®çé®ç®±å°å', trigger: ['blur', 'change'] } |
| | | ], |
| | | status: [ |
| | | { required: true, message: "æåç¶æä¸è½ä¸ºç©º", trigger: "change" } |
| | | ] |
| | | }, |
| | | |
| | | // 工忿´¾ç¸å
³æ°æ® |
| | | workOrderLoading: false, |
| | | workOrderList: [ |
| | | { id: "WO20230001", title: "é¦é¡µæ¹çéæ±å¼å", priority: "1", createTime: "2023-03-01 09:30:00", deadline: "2023-03-15 18:00:00", assignee: 1, assigneeName: "å¼ ä¸", status: "1", content: "宿é¦é¡µæ¹ççææå端å¼åå·¥ä½" }, |
| | | { id: "WO20230002", title: "ç¨æ·ä¸å¿æ¥å£å¼å", priority: "2", createTime: "2023-03-05 14:20:00", deadline: "2023-03-20 18:00:00", assignee: 3, assigneeName: "çäº", status: "1", content: "å¼åç¨æ·ä¸å¿ç¸å
³æ¥å£" }, |
| | | { id: "WO20230003", title: "订åç³»ç»æ§è½ä¼å", priority: "1", createTime: "2023-03-10 10:15:00", deadline: "2023-03-25 18:00:00", assignee: 4, assigneeName: "èµµå
", status: "1", content: "ä¼å订åç³»ç»æ§è½ï¼æé«ååºé度" }, |
| | | { id: "WO20230004", title: "æ¯ä»åè½æµè¯", priority: "3", createTime: "2023-03-15 16:45:00", deadline: "2023-03-30 18:00:00", assignee: 7, assigneeName: "å¨ä¹", status: "1", content: "宿æ¯ä»åè½çå
¨é¢æµè¯" }, |
| | | { id: "WO20230005", title: "æ°æ®æ¥è¡¨å¼å", priority: "2", createTime: "2023-03-20 11:10:00", deadline: "2023-04-05 18:00:00", assignee: undefined, assigneeName: undefined, status: "0", content: "å¼åæ°æ®ç»è®¡æ¥è¡¨åè½" } |
| | | ], |
| | | workOrderQueryParams: { |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | id: undefined, |
| | | status: undefined, |
| | | assignee: undefined |
| | | }, |
| | | workOrderTotal: 5, |
| | | workOrderStatusOptions: [ |
| | | { value: "0", label: "å¾
ææ´¾" }, |
| | | { value: "1", label: "è¿è¡ä¸" }, |
| | | { value: "2", label: "已宿" }, |
| | | { value: "3", label: "已忶" } |
| | | ], |
| | | priorityOptions: [ |
| | | { value: "1", label: "é«" }, |
| | | { value: "2", label: "ä¸" }, |
| | | { value: "3", label: "ä½" } |
| | | ], |
| | | workOrderFormVisible: false, |
| | | workOrderFormTitle: "", |
| | | workOrderForm: { |
| | | id: undefined, |
| | | title: undefined, |
| | | priority: "2", |
| | | createTime: undefined, |
| | | deadline: undefined, |
| | | assignee: undefined, |
| | | status: "0", |
| | | content: undefined |
| | | }, |
| | | workOrderRules: { |
| | | title: [ |
| | | { required: true, message: "å·¥åæ é¢ä¸è½ä¸ºç©º", trigger: "blur" } |
| | | ], |
| | | priority: [ |
| | | { required: true, message: "ä¼å
级ä¸è½ä¸ºç©º", trigger: "change" } |
| | | ], |
| | | deadline: [ |
| | | { required: true, message: "æªæ¢æ¶é´ä¸è½ä¸ºç©º", trigger: "change" } |
| | | ], |
| | | content: [ |
| | | { required: true, message: "å·¥åå
容ä¸è½ä¸ºç©º", trigger: "blur" } |
| | | ], |
| | | status: [ |
| | | { required: true, message: "å·¥åç¶æä¸è½ä¸ºç©º", trigger: "change" } |
| | | ] |
| | | }, |
| | | |
| | | // ææ´¾å·¥åç¸å
³æ°æ® |
| | | assignDialogVisible: false, |
| | | assignForm: { |
| | | id: undefined, |
| | | title: undefined, |
| | | assignee: undefined, |
| | | priority: "2", |
| | | deadline: undefined |
| | | } |
| | | }; |
| | | }, |
| | | computed: { |
| | | // å¢éæåé项ï¼ç¨äºç©¿æ¢æ¡ï¼ |
| | | memberOptions() { |
| | | return this.memberList.map(member => ({ |
| | | key: member.id, |
| | | label: member.name, |
| | | disabled: member.status === "0" |
| | | })); |
| | | }, |
| | | // è¿æ»¤åçå¢éå表 |
| | | filteredTeamList() { |
| | | let list = [...this.teamList]; |
| | | if (this.teamQueryParams.name) { |
| | | list = list.filter(item => |
| | | item.name.includes(this.teamQueryParams.name) |
| | | ); |
| | | } |
| | | if (this.teamQueryParams.status) { |
| | | list = list.filter(item => |
| | | item.status === this.teamQueryParams.status |
| | | ); |
| | | } |
| | | return list; |
| | | }, |
| | | // è¿æ»¤åçæåå表 |
| | | filteredMemberList() { |
| | | let list = [...this.memberList]; |
| | | if (this.memberQueryParams.name) { |
| | | list = list.filter(item => |
| | | item.name.includes(this.memberQueryParams.name) |
| | | ); |
| | | } |
| | | if (this.memberQueryParams.teamId) { |
| | | list = list.filter(item => |
| | | item.teamId === this.memberQueryParams.teamId |
| | | ); |
| | | } |
| | | if (this.memberQueryParams.status) { |
| | | list = list.filter(item => |
| | | item.status === this.memberQueryParams.status |
| | | ); |
| | | } |
| | | return list; |
| | | }, |
| | | // è¿æ»¤åçå·¥åå表 |
| | | filteredWorkOrderList() { |
| | | let list = [...this.workOrderList]; |
| | | if (this.workOrderQueryParams.id) { |
| | | list = list.filter(item => |
| | | item.id.includes(this.workOrderQueryParams.id) |
| | | ); |
| | | } |
| | | if (this.workOrderQueryParams.status) { |
| | | list = list.filter(item => |
| | | item.status === this.workOrderQueryParams.status |
| | | ); |
| | | } |
| | | if (this.workOrderQueryParams.assignee) { |
| | | list = list.filter(item => |
| | | item.assignee === this.workOrderQueryParams.assignee |
| | | ); |
| | | } |
| | | return list; |
| | | }, |
| | | // å¢éå·¥åï¼ç¨äºå¢é详æ
ï¼ |
| | | teamWorkOrders() { |
| | | if (!this.currentTeam.id) return []; |
| | | const teamMemberIds = this.currentTeam.members.map(member => member.id); |
| | | return this.workOrderList.filter(order => |
| | | teamMemberIds.includes(order.assignee) |
| | | ); |
| | | }, |
| | | // å¯ç¨æåï¼ç¨äºå·¥åææ´¾ï¼ |
| | | availableMembers() { |
| | | return this.memberList.filter(member => |
| | | member.status === "1" && !member.currentWorkOrder |
| | | ); |
| | | } |
| | | }, |
| | | methods: { |
| | | // è§£ææ¶é´ |
| | | parseTime, |
| | | /** å¢é管çç¸å
³æ¹æ³ */ |
| | | // æ¥è¯¢å¢éå表 |
| | | getTeamList() { |
| | | this.teamLoading = true; |
| | | setTimeout(() => { |
| | | this.teamLoading = false; |
| | | }, 500); |
| | | }, |
| | | // å¢éæç´¢ |
| | | handleTeamQuery() { |
| | | this.teamQueryParams.pageNum = 1; |
| | | }, |
| | | // éç½®å¢éæç´¢ |
| | | resetTeamQuery() { |
| | | this.resetForm("teamQueryForm"); |
| | | this.handleTeamQuery(); |
| | | }, |
| | | // å¢éå¤é |
| | | handleTeamSelectionChange(selection) { |
| | | this.ids = selection.map(item => item.id); |
| | | this.single = selection.length !== 1; |
| | | this.multiple = !selection.length; |
| | | }, |
| | | // æ¥çå¢é详æ
|
| | | handleTeamDetail(row) { |
| | | this.currentTeam = row; |
| | | this.teamDialogTitle = "å¢é详æ
- " + row.name; |
| | | this.teamDialogVisible = true; |
| | | }, |
| | | // æ°å¢å¢é |
| | | handleTeamAdd() { |
| | | this.resetTeamForm(); |
| | | this.teamFormTitle = "æ°å¢å¢é"; |
| | | this.teamFormVisible = true; |
| | | }, |
| | | // ä¿®æ¹å¢é |
| | | handleTeamUpdate(row) { |
| | | this.resetTeamForm(); |
| | | const team = this.teamList.find(item => item.id === row.id); |
| | | this.teamForm = Object.assign({}, team); |
| | | this.teamForm.members = team.members.map(member => member.id); |
| | | this.teamFormTitle = "ä¿®æ¹å¢é"; |
| | | this.teamFormVisible = true; |
| | | }, |
| | | // å é¤å¢é |
| | | handleTeamDelete(row) { |
| | | const teamIds = row.id || this.ids; |
| | | this.$modal.confirm('æ¯å¦ç¡®è®¤å é¤å¢éå称为"' + row.name + '"çæ°æ®é¡¹ï¼').then(() => { |
| | | // 模æå é¤å¢é |
| | | this.teamList = this.teamList.filter(item => item.id !== teamIds); |
| | | this.teamTotal = this.teamList.length; |
| | | this.$modal.msgSuccess("å 餿å"); |
| | | }).catch(() => {}); |
| | | }, |
| | | // æäº¤å¢é表å |
| | | submitTeamForm() { |
| | | this.$refs["teamForm"].validate(valid => { |
| | | if (valid) { |
| | | if (this.teamForm.id != null) { |
| | | // 模æä¿®æ¹å¢é |
| | | const index = this.teamList.findIndex(item => item.id === this.teamForm.id); |
| | | if (index !== -1) { |
| | | const leader = this.memberList.find(member => member.id === this.teamForm.leader); |
| | | const members = this.memberList.filter(member => |
| | | this.teamForm.members.includes(member.id) |
| | | ); |
| | | |
| | | this.teamList.splice(index, 1, { |
| | | ...this.teamForm, |
| | | leader: leader ? leader.name : '', |
| | | members: members |
| | | }); |
| | | } |
| | | this.$modal.msgSuccess("ä¿®æ¹æå"); |
| | | } else { |
| | | // æ¨¡ææ°å¢å¢é |
| | | const newId = Math.max(...this.teamList.map(item => item.id)) + 1; |
| | | const leader = this.memberList.find(member => member.id === this.teamForm.leader); |
| | | const members = this.memberList.filter(member => |
| | | this.teamForm.members.includes(member.id) |
| | | ); |
| | | |
| | | this.teamList.unshift({ |
| | | ...this.teamForm, |
| | | id: newId, |
| | | leader: leader ? leader.name : '', |
| | | members: members, |
| | | createTime: new Date().toLocaleString() |
| | | }); |
| | | this.teamTotal = this.teamList.length; |
| | | this.$modal.msgSuccess("æ°å¢æå"); |
| | | } |
| | | this.teamFormVisible = false; |
| | | } |
| | | }); |
| | | }, |
| | | // éç½®å¢é表å |
| | | resetTeamForm() { |
| | | this.teamForm = { |
| | | id: undefined, |
| | | name: undefined, |
| | | leader: undefined, |
| | | members: [], |
| | | status: "1", |
| | | description: undefined |
| | | }; |
| | | this.resetForm("teamForm"); |
| | | }, |
| | | // åæ¶å¢é表å |
| | | cancelTeamForm() { |
| | | this.teamFormVisible = false; |
| | | this.resetTeamForm(); |
| | | }, |
| | | |
| | | /** 人ååç»ç¸å
³æ¹æ³ */ |
| | | // æ¥è¯¢æåå表 |
| | | getMemberList() { |
| | | this.memberLoading = true; |
| | | setTimeout(() => { |
| | | this.memberLoading = false; |
| | | }, 500); |
| | | }, |
| | | // æåæç´¢ |
| | | handleMemberQuery() { |
| | | this.memberQueryParams.pageNum = 1; |
| | | }, |
| | | // éç½®æåæç´¢ |
| | | resetMemberQuery() { |
| | | this.resetForm("memberQueryForm"); |
| | | this.handleMemberQuery(); |
| | | }, |
| | | // æåå¤é |
| | | handleMemberSelectionChange(selection) { |
| | | this.ids = selection.map(item => item.id); |
| | | this.single = selection.length !== 1; |
| | | this.multiple = !selection.length; |
| | | }, |
| | | // æ°å¢æå |
| | | handleMemberAdd() { |
| | | this.resetMemberForm(); |
| | | this.memberFormTitle = "æ°å¢æå"; |
| | | this.memberFormVisible = true; |
| | | }, |
| | | // ä¿®æ¹æå |
| | | handleMemberUpdate(row) { |
| | | this.resetMemberForm(); |
| | | const member = this.memberList.find(item => item.id === row.id); |
| | | this.memberForm = Object.assign({}, member); |
| | | this.memberFormTitle = "ä¿®æ¹æå"; |
| | | this.memberFormVisible = true; |
| | | }, |
| | | // å 餿å |
| | | handleMemberDelete(row) { |
| | | const memberIds = row.id || this.ids; |
| | | this.$modal.confirm('æ¯å¦ç¡®è®¤å 餿åå§å为"' + row.name + '"çæ°æ®é¡¹ï¼').then(() => { |
| | | // 模æå 餿å |
| | | this.memberList = this.memberList.filter(item => item.id !== memberIds); |
| | | this.memberTotal = this.memberList.length; |
| | | this.$modal.msgSuccess("å 餿å"); |
| | | }).catch(() => {}); |
| | | }, |
| | | // æäº¤æå表å |
| | | submitMemberForm() { |
| | | this.$refs["memberForm"].validate(valid => { |
| | | if (valid) { |
| | | if (this.memberForm.id != null) { |
| | | // 模æä¿®æ¹æå |
| | | const index = this.memberList.findIndex(item => item.id === this.memberForm.id); |
| | | if (index !== -1) { |
| | | const team = this.teamList.find(item => item.id === this.memberForm.teamId); |
| | | this.memberList.splice(index, 1, { |
| | | ...this.memberForm, |
| | | teamName: team ? team.name : '' |
| | | }); |
| | | } |
| | | this.$modal.msgSuccess("ä¿®æ¹æå"); |
| | | } else { |
| | | // æ¨¡ææ°å¢æå |
| | | const newId = Math.max(...this.memberList.map(item => item.id)) + 1; |
| | | const team = this.teamList.find(item => item.id === this.memberForm.teamId); |
| | | this.memberList.unshift({ |
| | | ...this.memberForm, |
| | | id: newId, |
| | | teamName: team ? team.name : '', |
| | | currentWorkOrder: '' |
| | | }); |
| | | this.memberTotal = this.memberList.length; |
| | | this.$modal.msgSuccess("æ°å¢æå"); |
| | | } |
| | | this.memberFormVisible = false; |
| | | } |
| | | }); |
| | | }, |
| | | // éç½®æå表å |
| | | resetMemberForm() { |
| | | this.memberForm = { |
| | | id: undefined, |
| | | name: undefined, |
| | | teamId: undefined, |
| | | position: undefined, |
| | | phone: undefined, |
| | | email: undefined, |
| | | status: "1" |
| | | }; |
| | | this.resetForm("memberForm"); |
| | | }, |
| | | // åæ¶æå表å |
| | | cancelMemberForm() { |
| | | this.memberFormVisible = false; |
| | | this.resetMemberForm(); |
| | | }, |
| | | |
| | | /** 工忿´¾ç¸å
³æ¹æ³ */ |
| | | // æ¥è¯¢å·¥åå表 |
| | | getWorkOrderList() { |
| | | this.workOrderLoading = true; |
| | | setTimeout(() => { |
| | | this.workOrderLoading = false; |
| | | }, 500); |
| | | }, |
| | | // å·¥åæç´¢ |
| | | handleWorkOrderQuery() { |
| | | this.workOrderQueryParams.pageNum = 1; |
| | | }, |
| | | // é置工åæç´¢ |
| | | resetWorkOrderQuery() { |
| | | this.resetForm("workOrderQueryForm"); |
| | | this.handleWorkOrderQuery(); |
| | | }, |
| | | // å·¥åå¤é |
| | | handleWorkOrderSelectionChange(selection) { |
| | | this.ids = selection.map(item => item.id); |
| | | this.single = selection.length !== 1; |
| | | this.multiple = !selection.length; |
| | | }, |
| | | // æ°å¢å·¥å |
| | | handleWorkOrderAdd() { |
| | | this.resetWorkOrderForm(); |
| | | this.workOrderFormTitle = "æ°å»ºå·¥å"; |
| | | this.workOrderFormVisible = true; |
| | | }, |
| | | // ä¿®æ¹å·¥å |
| | | handleWorkOrderUpdate(row) { |
| | | this.resetWorkOrderForm(); |
| | | const workOrder = this.workOrderList.find(item => item.id === row.id); |
| | | this.workOrderForm = Object.assign({}, workOrder); |
| | | this.workOrderFormTitle = "ç¼è¾å·¥å"; |
| | | this.workOrderFormVisible = true; |
| | | }, |
| | | // å é¤å·¥å |
| | | handleWorkOrderDelete(row) { |
| | | const workOrderIds = row.id || this.ids; |
| | | this.$modal.confirm('æ¯å¦ç¡®è®¤å é¤å·¥åæ é¢ä¸º"' + row.title + '"çæ°æ®é¡¹ï¼').then(() => { |
| | | // 模æå é¤å·¥å |
| | | this.workOrderList = this.workOrderList.filter(item => item.id !== workOrderIds); |
| | | this.workOrderTotal = this.workOrderList.length; |
| | | this.$modal.msgSuccess("å 餿å"); |
| | | }).catch(() => {}); |
| | | }, |
| | | // ææ´¾å·¥å |
| | | handleAssignWorkOrder(row) { |
| | | this.assignForm = { |
| | | id: row.id, |
| | | title: row.title, |
| | | assignee: undefined, |
| | | priority: row.priority, |
| | | deadline: row.deadline |
| | | }; |
| | | this.assignDialogVisible = true; |
| | | }, |
| | | // æäº¤å·¥å表å |
| | | submitWorkOrderForm() { |
| | | this.$refs["workOrderForm"].validate(valid => { |
| | | if (valid) { |
| | | if (this.workOrderForm.id != null) { |
| | | // 模æä¿®æ¹å·¥å |
| | | const index = this.workOrderList.findIndex(item => item.id === this.workOrderForm.id); |
| | | if (index !== -1) { |
| | | const assignee = this.memberList.find(member => member.id === this.workOrderForm.assignee); |
| | | this.workOrderList.splice(index, 1, { |
| | | ...this.workOrderForm, |
| | | assigneeName: assignee ? assignee.name : undefined |
| | | }); |
| | | } |
| | | this.$modal.msgSuccess("ä¿®æ¹æå"); |
| | | } else { |
| | | // æ¨¡ææ°å¢å·¥å |
| | | const newId = "WO" + new Date().getFullYear() + (Math.floor(Math.random() * 90000) + 10000); |
| | | const assignee = this.memberList.find(member => member.id === this.workOrderForm.assignee); |
| | | this.workOrderList.unshift({ |
| | | ...this.workOrderForm, |
| | | id: newId, |
| | | assigneeName: assignee ? assignee.name : undefined, |
| | | createTime: new Date().toLocaleString() |
| | | }); |
| | | this.workOrderTotal = this.workOrderList.length; |
| | | this.$modal.msgSuccess("æ°å¢æå"); |
| | | } |
| | | this.workOrderFormVisible = false; |
| | | } |
| | | }); |
| | | }, |
| | | // é置工å表å |
| | | resetWorkOrderForm() { |
| | | this.workOrderForm = { |
| | | id: undefined, |
| | | title: undefined, |
| | | priority: "2", |
| | | createTime: undefined, |
| | | deadline: undefined, |
| | | assignee: undefined, |
| | | status: "0", |
| | | content: undefined |
| | | }; |
| | | this.resetForm("workOrderForm"); |
| | | }, |
| | | // åæ¶å·¥å表å |
| | | cancelWorkOrderForm() { |
| | | this.workOrderFormVisible = false; |
| | | this.resetWorkOrderForm(); |
| | | }, |
| | | // æäº¤ææ´¾ |
| | | submitAssign() { |
| | | if (!this.assignForm.assignee) { |
| | | this.$modal.msgError("è¯·éæ©å¤ç人"); |
| | | return; |
| | | } |
| | | |
| | | // æ¨¡æææ´¾å·¥å |
| | | const index = this.workOrderList.findIndex(item => item.id === this.assignForm.id); |
| | | if (index !== -1) { |
| | | const assignee = this.memberList.find(member => member.id === this.assignForm.assignee); |
| | | if (assignee) { |
| | | // æ´æ°å·¥åç¶æ |
| | | this.workOrderList.splice(index, 1, { |
| | | ...this.workOrderList[index], |
| | | assignee: this.assignForm.assignee, |
| | | assigneeName: assignee.name, |
| | | priority: this.assignForm.priority, |
| | | deadline: this.assignForm.deadline, |
| | | status: "1" |
| | | }); |
| | | |
| | | // æ´æ°æåå½åå·¥å |
| | | const memberIndex = this.memberList.findIndex(member => member.id === this.assignForm.assignee); |
| | | if (memberIndex !== -1) { |
| | | this.memberList.splice(memberIndex, 1, { |
| | | ...this.memberList[memberIndex], |
| | | currentWorkOrder: this.assignForm.id |
| | | }); |
| | | } |
| | | |
| | | this.$modal.msgSuccess("ææ´¾æå"); |
| | | this.assignDialogVisible = false; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | }; |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | .TeamManagement { |
| | | padding: 20px; |
| | | } |
| | | |
| | | .headline { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | font-size: 20px; |
| | | border-left: 4px solid #41a1be; |
| | | padding-left: 5px; |
| | | margin: 15px 0; |
| | | } |
| | | |
| | | .avatar-uploader ::v-deep .el-upload { |
| | | border: 1px dashed #d9d9d9; |
| | | border-radius: 6px; |
| | | cursor: pointer; |
| | | position: relative; |
| | | overflow: hidden; |
| | | } |
| | | |
| | | .avatar-uploader ::v-deep .el-upload:hover { |
| | | border-color: #409EFF; |
| | | } |
| | | |
| | | .avatar-uploader-icon { |
| | | font-size: 28px; |
| | | color: #8c939d; |
| | | width: 178px; |
| | | height: 178px; |
| | | line-height: 178px; |
| | | text-align: center; |
| | | } |
| | | |
| | | .avatar { |
| | | width: 178px; |
| | | height: 178px; |
| | | display: block; |
| | | } |
| | | |
| | | .team-members, .team-work-orders { |
| | | margin-top: 20px; |
| | | } |
| | | </style> |