| | |
| | | <template> |
| | | <div class="app-container"> |
| | | <el-row :gutter="20"> |
| | | <!--ç¨æ·æ°æ®--> |
| | | <el-col :span="24" :xs="24"> |
| | | <el-form |
| | | :model="topqueryParams" |
| | | ref="queryForm" |
| | | size="small" |
| | | :inline="true" |
| | | v-show="showSearch" |
| | | label-width="98px" |
| | | > |
| | | <el-form-item label="æè¯ç±»å" prop="status"> |
| | | <el-select v-model="topqueryParams.topic" placeholder="è¯·éæ©"> |
| | | <el-option |
| | | v-for="item in topicoptions" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | > |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="æè¯ç¶æ" prop="status"> |
| | | <el-select v-model="topqueryParams.topic" placeholder="è¯·éæ©"> |
| | | <el-option |
| | | v-for="item in topicoptions" |
| | | :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-divider></el-divider> |
| | | <el-row :gutter="10" class="mb8"> |
| | | <el-col :span="1.5"> |
| | | <el-button |
| | | type="primary" |
| | | icon="el-icon-plus" |
| | | size="medium" |
| | | @click="handleAdd" |
| | | v-hasPermi="['system:user:add']" |
| | | >æ°å¢</el-button |
| | | > |
| | | </el-col> |
| | | <el-col :span="1.5"> |
| | | <el-button |
| | | type="success" |
| | | plain |
| | | icon="el-icon-edit" |
| | | size="medium" |
| | | :disabled="single" |
| | | @click="handleUpdate" |
| | | v-hasPermi="['system:user:edit']" |
| | | >ä¿®æ¹</el-button |
| | | > |
| | | </el-col> |
| | | <el-col :span="1.5"> |
| | | <el-button |
| | | type="danger" |
| | | plain |
| | | icon="el-icon-delete" |
| | | size="medium" |
| | | :disabled="multiple" |
| | | @click="handleDelete" |
| | | v-hasPermi="['system:user:remove']" |
| | | >å é¤</el-button |
| | | > |
| | | </el-col> |
| | | <el-col :span="19"> |
| | | <div class="documentf"> |
| | | <div class="document"> |
| | | <el-button |
| | | type="warning" |
| | | plain |
| | | icon="el-icon-download" |
| | | size="medium" |
| | | @click="handleExport" |
| | | v-hasPermi="['system:user:export']" |
| | | >导åº</el-button |
| | | > |
| | | </div> |
| | | </div> |
| | | </el-col> |
| | | <!-- <el-col :span="1.5"> </el-col> --> |
| | | </el-row> |
| | | <!-- <right-toolbar |
| | | :showSearch.sync="showSearch" |
| | | @queryTable="getList" |
| | | :columns="columns" |
| | | ></right-toolbar> --> |
| | | <el-table |
| | | v-loading="loading" |
| | | :data="userList" |
| | | @selection-change="handleSelectionChange" |
| | | > |
| | | <el-table-column type="selection" width="50" align="center" /> |
| | | <el-table-column |
| | | label="åºå·" |
| | | align="center" |
| | | key="userId" |
| | | prop="userId" |
| | | /> |
| | | <!-- æç´¢æ --> |
| | | <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="70px"> |
| | | <el-form-item label="建议类å" prop="adviceType"> |
| | | <el-select v-model="queryParams.adviceType" placeholder="å
¨é¨ç±»å" clearable style="width: 130px"> |
| | | <el-option label="æè¯" value="1" /> |
| | | <el-option label="建议" value="2" /> |
| | | <el-option label="表æ¬" value="3" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="å
容" prop="content"> |
| | | <el-input v-model="queryParams.content" placeholder="请è¾å
¥å
容å
³é®å" clearable style="width: 180px" @keyup.enter.native="handleQuery" /> |
| | | </el-form-item> |
| | | <el-form-item label="å建è
" prop="createBy"> |
| | | <el-input v-model="queryParams.createBy" placeholder="请è¾å
¥å建è
" clearable style="width: 140px" @keyup.enter.native="handleQuery" /> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">æç´¢</el-button> |
| | | <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">éç½®</el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | | |
| | | <el-table-column |
| | | label="ç
人å§å" |
| | | align="center" |
| | | sortable |
| | | key="userName" |
| | | prop="userName" |
| | | width="100" |
| | | :show-overflow-tooltip="true" |
| | | /> |
| | | <el-table-column |
| | | label="ææºå·" |
| | | align="center" |
| | | key="types" |
| | | prop="types" |
| | | /> |
| | | <el-table-column |
| | | label="æ§å«"width="100" |
| | | align="center" |
| | | key="nickName" |
| | | prop="nickName" |
| | | /> |
| | | <el-table-column |
| | | label="æè¯æ¹å¼" |
| | | align="center" |
| | | key="phonenumber" |
| | | prop="phonenumber" |
| | | width="120" |
| | | /> |
| | | |
| | | <el-table-column |
| | | label="æè¯å¯¹è±¡" |
| | | align="center" |
| | | key="topicnumber" |
| | | prop="topicnumber" |
| | | width="120" |
| | | :show-overflow-tooltip="true" |
| | | /> |
| | | <el-table-column |
| | | label="级å«" |
| | | align="center" |
| | | key="topicnumberaa" |
| | | prop="topicnumberaa" |
| | | sortable |
| | | width="120" |
| | | :show-overflow-tooltip="true" |
| | | /> |
| | | |
| | | <el-table-column |
| | | label="æè¯æ¥æ" |
| | | sortable |
| | | align="center" |
| | | prop="createTime" |
| | | width="160" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <span>{{ formatTime(scope.row.createTime) }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="æä½" |
| | | align="center" |
| | | width="160" |
| | | class-name="small-padding fixed-width" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-button |
| | | size="medium" |
| | | type="text" |
| | | icon="el-icon-edit" |
| | | @click="handleUpdate(scope.row)" |
| | | v-hasPermi="['system:user:edit']" |
| | | >ä¿®æ¹</el-button |
| | | > |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | |
| | | <pagination |
| | | v-show="total > 0" |
| | | :total="total" |
| | | :page.sync="topqueryParams.pageNum" |
| | | :limit.sync="topqueryParams.pageSize" |
| | | @pagination="getList" |
| | | /> |
| | | <!-- æä½æ --> |
| | | <el-row :gutter="10" class="mb8"> |
| | | <el-col :span="1.5"> |
| | | <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd">æ°å¢</el-button> |
| | | </el-col> |
| | | <el-col :span="1.5"> |
| | | <el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete">å é¤</el-button> |
| | | </el-col> |
| | | <el-col :span="1.5"> |
| | | <el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport">导åº</el-button> |
| | | </el-col> |
| | | <right-toolbar :showSearch.sync="showSearch" @queryTable="getList" /> |
| | | </el-row> |
| | | <!-- æ·»å æä¿®æ¹æè¯å¯¹è¯æ¡ --> |
| | | <el-dialog |
| | | :title="title" |
| | | :visible.sync="addalteropen" |
| | | width="900px" |
| | | append-to-body |
| | | > |
| | | <el-form ref="form" :model="form" label-width="80px"> |
| | | |
| | | <!-- è¡¨æ ¼ --> |
| | | <el-table v-loading="loading" :data="adviceList" @selection-change="handleSelectionChange"> |
| | | <el-table-column type="selection" width="50" align="center" /> |
| | | <el-table-column label="建议类å" align="center" prop="adviceType" width="100"> |
| | | <template slot-scope="scope"> |
| | | <el-tag :type="adviceTypeTag(scope.row.adviceType)" size="small">{{ adviceTypeText(scope.row.adviceType) }}</el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="å
容" align="center" prop="content" min-width="200" :show-overflow-tooltip="true" /> |
| | | <el-table-column label="æ¶åç§å®¤" align="center" prop="deptCodes" width="140" :show-overflow-tooltip="true"> |
| | | <template slot-scope="scope">{{ getDeptNames(scope.row.deptCodes) }}</template> |
| | | </el-table-column> |
| | | <el-table-column label="æ¶åç
åº" align="center" prop="wardCodes" width="140" :show-overflow-tooltip="true"> |
| | | <template slot-scope="scope">{{ getWardNames(scope.row.wardCodes) }}</template> |
| | | </el-table-column> |
| | | <el-table-column label="æ¶å人å" align="center" prop="involvedUsers" width="120" :show-overflow-tooltip="true" /> |
| | | <el-table-column label="夿³¨" align="center" prop="remark" min-width="140" :show-overflow-tooltip="true" /> |
| | | <el-table-column label="å建è
" align="center" prop="createBy" width="100" /> |
| | | <el-table-column label="å建æ¶é´" align="center" prop="createTime" width="160" /> |
| | | <el-table-column label="æä½" align="center" width="120" class-name="small-padding fixed-width"> |
| | | <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" style="color: #f56c6c" @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-dialog :title="title" :visible.sync="open" width="600px" append-to-body :close-on-click-modal="false"> |
| | | <el-form ref="form" :model="form" :rules="rules" label-width="100px"> |
| | | <el-form-item label="建议类å" prop="adviceType"> |
| | | <el-radio-group v-model="form.adviceType"> |
| | | <el-radio label="1">æè¯</el-radio> |
| | | <el-radio label="2">建议</el-radio> |
| | | <el-radio label="3">表æ¬</el-radio> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | <el-row :gutter="20"> |
| | | <el-col :span="12" |
| | | ><el-form-item label="ç
人å§å"> |
| | | <el-input v-model="form.name"></el-input> </el-form-item |
| | | ></el-col> |
| | | <el-col :span="12" |
| | | ><el-form-item label="æ§å«"width="100"> |
| | | <el-radio v-model="form.radio" label="1">ç·</el-radio> |
| | | <el-radio v-model="form.radio" label="2">女</el-radio> |
| | | <el-radio v-model="form.radio" label="3">æªç¥</el-radio> |
| | | </el-form-item></el-col |
| | | > |
| | | </el-row> |
| | | <el-row :gutter="20"> |
| | | <el-col :span="24"> |
| | | <el-form-item label="èç³»çµè¯"> |
| | | <div style="margin-top: 15px"> |
| | | <el-input |
| | | placeholder="请è¾å
¥ææºå·" |
| | | v-model="form.telcode" |
| | | class="input-with-select" |
| | | > |
| | | <el-button slot="append" icon="el-icon-search"></el-button> |
| | | </el-input> |
| | | </div> |
| | | <el-col :span="12"> |
| | | <el-form-item label="ä»»å¡ID" prop="subid"> |
| | | <el-input v-model="form.subid" placeholder="ä»»å¡ID" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="æå¡ID" prop="taskid"> |
| | | <el-input v-model="form.taskid" placeholder="æå¡ID" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row :gutter="20"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="æè¯ç±»å"> |
| | | <el-select v-model="form.region" placeholder="è¯·éæ©æ´»å¨åºå"> |
| | | <el-option label="åºåä¸" value="shanghai"></el-option> |
| | | <el-option label="åºåäº" value="beijing"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="æè¯æ¥æ"> |
| | | <el-date-picker |
| | | v-model="form.value2" |
| | | align="right" |
| | | type="date" |
| | | placeholder="éæ©æ¥æ" |
| | | :picker-options="pickerOptions" |
| | | > |
| | | </el-date-picker> |
| | | <el-form-item label="ç
人ID" prop="patid"> |
| | | <el-input v-model="form.patid" placeholder="ç
人ID" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row :gutter="20"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="æè¯çº§å«"> |
| | | <el-select v-model="form.region" placeholder="è¯·éæ©æ´»å¨åºå"> |
| | | <el-option label="ä¸çº§" value="shanghai"></el-option> |
| | | <el-option label="äºçº§" value="beijing"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12" |
| | | ><el-form-item label="é¨è¯æ¥æ"> |
| | | <el-date-picker |
| | | v-model="form.value2" |
| | | align="right" |
| | | type="date" |
| | | placeholder="éæ©æ¥æ" |
| | | :picker-options="pickerOptions" |
| | | > |
| | | </el-date-picker> </el-form-item |
| | | ></el-col> |
| | | </el-row> |
| | | <el-row :gutter="20"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="æè¯å¯¹è±¡æç´¢"> |
| | | <el-select |
| | | v-model="value" |
| | | multiple |
| | | filterable |
| | | remote |
| | | reserve-keyword |
| | | placeholder="请è¾å
¥å
³é®è¯" |
| | | :remote-method="remoteMethod" |
| | | :loading="loading" |
| | | > |
| | | <el-option |
| | | v-for="item in options" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | > |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="æè¯å¯¹è±¡æ¾ç¤º"> |
| | | <div>{{ form.name }}</div> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row :gutter="20"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="æè¯æè¿°"> |
| | | <el-input type="textarea" v-model="form.desc"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="æè¯è¦æ±"> |
| | | <el-input type="textarea" v-model="form.desc"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-form-item label="æ¶åç§å®¤" prop="deptCodes"> |
| | | <el-select v-model="form.deptCodes" multiple filterable clearable placeholder="è¯·éæ©æ¶åç§å®¤ï¼å¯å¤éï¼" style="width: 100%"> |
| | | <el-option v-for="d in deptOptions" :key="d.value" :label="d.label" :value="d.value" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="æ¶åç
åº" prop="wardCodes"> |
| | | <el-select v-model="form.wardCodes" multiple filterable clearable placeholder="è¯·éæ©æ¶åç
åºï¼å¯å¤éï¼" style="width: 100%"> |
| | | <el-option v-for="w in wardOptions" :key="w.value" :label="w.label" :value="w.value" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="æ¶å人å" prop="involvedUsers"> |
| | | <el-input v-model="form.involvedUsers" placeholder="æ¶å人å代ç ï¼å¤ä¸ªç¨éå·åé" /> |
| | | </el-form-item> |
| | | <el-form-item label="å
容" prop="content"> |
| | | <el-input type="textarea" :rows="4" v-model="form.content" placeholder="请è¾å
¥æè¯/建议/表æ¬å
容" /> |
| | | </el-form-item> |
| | | <el-form-item label="夿³¨" prop="remark"> |
| | | <el-input type="textarea" :rows="2" v-model="form.remark" placeholder="请è¾å
¥å¤æ³¨" /> |
| | | </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> |
| | | <el-button @click="open = false">å æ¶</el-button> |
| | | <el-button type="primary" @click="submitForm">ç¡® å®</el-button> |
| | | </div> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import { |
| | | listUser, |
| | | getUser, |
| | | delUser, |
| | | addUser, |
| | | updateUser, |
| | | resetUserPwd, |
| | | changeUserStatus, |
| | | } from "@/api/system/user"; |
| | | import Treeselect from "@riophae/vue-treeselect"; |
| | | import "@riophae/vue-treeselect/dist/vue-treeselect.css"; |
| | | import { listAdvice, getAdvice, addAdvice, updateAdvice, delAdvice } from "@/api/followvisit/advice"; |
| | | import store from "@/store"; |
| | | |
| | | export default { |
| | | name: "User", |
| | | dicts: ["sys_normal_disable", "sys_user_sex"], |
| | | components: { Treeselect }, |
| | | name: "ComplaintMy", |
| | | data() { |
| | | return { |
| | | // é®ç½©å± |
| | | loading: true, |
| | | // é䏿°ç» |
| | | ids: [], |
| | | // éå个ç¦ç¨ |
| | | single: true, |
| | | // éå¤ä¸ªç¦ç¨ |
| | | multiple: true, |
| | | // æ¾ç¤ºæç´¢æ¡ä»¶ |
| | | showSearch: true, |
| | | // æ»æ¡æ° |
| | | total: 0, |
| | | // ç¨æ·è¡¨æ ¼æ°æ® |
| | | userList: null, |
| | | // å¼¹åºå±æ é¢ |
| | | title: "æ°å¢æè¯", |
| | | // æ¯å¦æ¾ç¤ºä¿®æ¹ãæ·»å å¼¹åºå± |
| | | addalteropen: false, |
| | | // é¨é¨åç§° |
| | | deptName: undefined, |
| | | // é»è®¤å¯ç |
| | | initPassword: undefined, |
| | | // æ¥æèå´ |
| | | dateRange: [], |
| | | // å²ä½é项 |
| | | postOptions: [], |
| | | // è§è²é项 |
| | | roleOptions: [], |
| | | dynamicTags: ["é项ä¸", "é项äº", "é项ä¸"], //é项 |
| | | inputVisible: false, |
| | | inputValue: "", |
| | | previewVisible: false, //æè¯é¢è§å¼¹æ¡ |
| | | radio: "", |
| | | radios: [], |
| | | previewtype: 2, //é¢è§æè¯ç±»å |
| | | total: 0, // æ»æ¡æ° |
| | | ImportQuantity: 999, //导æè¯æ°é |
| | | //é¢è§æè¯ä¿¡æ¯ |
| | | previewvalue: { |
| | | username: "è¿ä¸ªå»çå¯¹ä½ æä¹æ ·", |
| | | }, |
| | | value: [], |
| | | list: [], |
| | | loading: false, |
| | | states: [ |
| | | "Alabama", |
| | | "Alaska", |
| | | "Arizona", |
| | | "Arkansas", |
| | | "California", |
| | | "Colorado", |
| | | "Connecticut", |
| | | "Delaware", |
| | | "Florida", |
| | | "Georgia", |
| | | "Hawaii", |
| | | "Idaho", |
| | | "Illinois", |
| | | "Indiana", |
| | | "Iowa", |
| | | "Kansas", |
| | | "Kentucky", |
| | | "Louisiana", |
| | | "Maine", |
| | | "Maryland", |
| | | "Massachusetts", |
| | | "Michigan", |
| | | "Minnesota", |
| | | "Mississippi", |
| | | "Missouri", |
| | | "Montana", |
| | | "Nebraska", |
| | | "Nevada", |
| | | "New Hampshire", |
| | | "New Jersey", |
| | | "New Mexico", |
| | | "New York", |
| | | "North Carolina", |
| | | "North Dakota", |
| | | "Ohio", |
| | | "Oklahoma", |
| | | "Oregon", |
| | | "Pennsylvania", |
| | | "Rhode Island", |
| | | "South Carolina", |
| | | "South Dakota", |
| | | "Tennessee", |
| | | "Texas", |
| | | "Utah", |
| | | "Vermont", |
| | | "Virginia", |
| | | "Washington", |
| | | "West Virginia", |
| | | "Wisconsin", |
| | | "Wyoming", |
| | | ], |
| | | pickerOptions: { |
| | | disabledDate(time) { |
| | | return time.getTime() > Date.now(); |
| | | }, |
| | | shortcuts: [ |
| | | { |
| | | text: "ä»å¤©", |
| | | onClick(picker) { |
| | | picker.$emit("pick", new Date()); |
| | | }, |
| | | }, |
| | | { |
| | | text: "æ¨å¤©", |
| | | onClick(picker) { |
| | | const date = new Date(); |
| | | date.setTime(date.getTime() - 3600 * 1000 * 24); |
| | | picker.$emit("pick", date); |
| | | }, |
| | | }, |
| | | { |
| | | text: "ä¸å¨å", |
| | | onClick(picker) { |
| | | const date = new Date(); |
| | | date.setTime(date.getTime() - 3600 * 1000 * 24 * 7); |
| | | picker.$emit("pick", date); |
| | | }, |
| | | }, |
| | | ], |
| | | }, |
| | | // 表ååæ° |
| | | form: { |
| | | phonenumber: "", |
| | | totagid: "", |
| | | types: "", |
| | | nickName: "", |
| | | qystatus: "", |
| | | btstatus: "", |
| | | }, |
| | | //导å
¥è¿åº¦ |
| | | dractive: 1, |
| | | // 导å
¥å±ç¤ºè¡¨å |
| | | uploadingData: {}, |
| | | // æ¥è¯¢åæ° |
| | | topqueryParams: { |
| | | adviceList: [], |
| | | total: 0, |
| | | ids: [], |
| | | single: true, |
| | | multiple: true, |
| | | showSearch: true, |
| | | title: "", |
| | | open: false, |
| | | queryParams: { |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | userName: undefined, |
| | | tagid: undefined, |
| | | topic: undefined, |
| | | adviceType: undefined, |
| | | content: undefined, |
| | | createBy: undefined |
| | | }, |
| | | propss: { multiple: true }, |
| | | options: [], |
| | | |
| | | topicoptions: [ |
| | | { |
| | | value: 1, |
| | | label: "åé", |
| | | }, |
| | | { |
| | | value: 2, |
| | | label: "å¤é", |
| | | }, |
| | | { |
| | | value: 3, |
| | | label: "填空", |
| | | }, |
| | | ], |
| | | // è¡¨åæ ¡éª |
| | | form: {}, |
| | | rules: { |
| | | userName: [ |
| | | { required: true, message: "ç¨æ·åç§°ä¸è½ä¸ºç©º", trigger: "blur" }, |
| | | { |
| | | min: 2, |
| | | max: 20, |
| | | message: "ç¨æ·åç§°é¿åº¦å¿
é¡»ä»äº 2 å 20 ä¹é´", |
| | | trigger: "blur", |
| | | }, |
| | | ], |
| | | nickName: [ |
| | | { required: true, message: "ç¨æ·æµç§°ä¸è½ä¸ºç©º", trigger: "blur" }, |
| | | ], |
| | | password: [ |
| | | { required: true, message: "ç¨æ·å¯ç ä¸è½ä¸ºç©º", trigger: "blur" }, |
| | | { |
| | | min: 5, |
| | | max: 20, |
| | | message: "ç¨æ·å¯ç é¿åº¦å¿
é¡»ä»äº 5 å 20 ä¹é´", |
| | | trigger: "blur", |
| | | }, |
| | | ], |
| | | email: [ |
| | | { |
| | | type: "email", |
| | | message: "请è¾å
¥æ£ç¡®çé®ç®±å°å", |
| | | trigger: ["blur", "change"], |
| | | }, |
| | | ], |
| | | phonenumber: [ |
| | | { |
| | | pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/, |
| | | message: "请è¾å
¥æ£ç¡®çææºå·ç ", |
| | | trigger: "blur", |
| | | }, |
| | | ], |
| | | IDnumber: [ |
| | | { |
| | | pattern: |
| | | /^\d{6}((((((19|20)\d{2})(0[13-9]|1[012])(0[1-9]|[12]\d|30))|(((19|20)\d{2})(0[13578]|1[02])31)|((19|20)\d{2})02(0[1-9]|1\d|2[0-8])|((((19|20)([13579][26]|[2468][048]|0[48]))|(2000))0229))\d{3})|((((\d{2})(0[13-9]|1[012])(0[1-9]|[12]\d|30))|((\d{2})(0[13578]|1[02])31)|((\d{2})02(0[1-9]|1\d|2[0-8]))|(([13579][26]|[2468][048]|0[048])0229))\d{2}))(\d|X|x)$/, |
| | | message: "请è¾å
¥æ£ç¡®ç身份è¯å·ç ", |
| | | trigger: "blur", |
| | | }, |
| | | ], |
| | | }, |
| | | adviceType: [{ required: true, message: "è¯·éæ©å»ºè®®ç±»å", trigger: "change" }], |
| | | content: [{ required: true, message: "请è¾å
¥å
容", trigger: "blur" }] |
| | | } |
| | | }; |
| | | }, |
| | | watch: {}, |
| | | computed: { |
| | | deptOptions() { |
| | | return (store.getters.belongDepts || []).map(d => ({ label: d.deptName, value: d.deptCode })); |
| | | }, |
| | | wardOptions() { |
| | | return (store.getters.belongWards || []).map(w => ({ label: w.districtName, value: w.districtCode })); |
| | | } |
| | | }, |
| | | created() { |
| | | this.getList(); |
| | | this.getConfigKey("sys.user.initPassword").then((response) => { |
| | | this.initPassword = response.msg; |
| | | }); |
| | | }, |
| | | // æç´¢ |
| | | mounted() { |
| | | this.list = this.states.map((item) => { |
| | | return { value: `value:${item}`, label: `label:${item}` }; |
| | | }); |
| | | }, |
| | | methods: { |
| | | /** æ¥è¯¢æè¯å表 */ |
| | | adviceTypeText(t) { |
| | | const map = { "1": "æè¯", "2": "建议", "3": "表æ¬" }; |
| | | return map[t] || "æªç¥"; |
| | | }, |
| | | adviceTypeTag(t) { |
| | | const map = { "1": "danger", "2": "primary", "3": "success" }; |
| | | return map[t] || "info"; |
| | | }, |
| | | getDeptNames(codes) { |
| | | if (!codes) return "-"; |
| | | return codes.split(",").filter(Boolean).map(c => { |
| | | const found = this.deptOptions.find(d => d.value == c); |
| | | return found ? found.label : c; |
| | | }).join("ã") || "-"; |
| | | }, |
| | | getWardNames(codes) { |
| | | if (!codes) return "-"; |
| | | return codes.split(",").filter(Boolean).map(c => { |
| | | const found = this.wardOptions.find(w => w.value == c); |
| | | return found ? found.label : c; |
| | | }).join("ã") || "-"; |
| | | }, |
| | | |
| | | getList() { |
| | | this.loading = true; |
| | | listUser(this.addDateRange(this.topqueryParams, this.dateRange)).then( |
| | | (response) => { |
| | | this.userList = response.rows; |
| | | this.total = response.total; |
| | | this.loading = false; |
| | | } |
| | | ); |
| | | }, |
| | | // æ¥çæè¯è¯¦æ
|
| | | Referencequestion(row) { |
| | | this.previewVisible = true; |
| | | }, |
| | | // æ·»å å¼¹æ¡æç´¢ |
| | | remoteMethod(query) { |
| | | if (query !== "") { |
| | | this.loading = true; |
| | | setTimeout(() => { |
| | | this.loading = false; |
| | | this.options = this.list.filter((item) => { |
| | | return item.label.toLowerCase().indexOf(query.toLowerCase()) > -1; |
| | | }); |
| | | }, 200); |
| | | } else { |
| | | this.options = []; |
| | | } |
| | | }, |
| | | // æè¯ç¶æä¿®æ¹ |
| | | handleStatusChange(row) { |
| | | let text = row.status === "0" ? "å¯ç¨" : "åç¨"; |
| | | this.$modal |
| | | .confirm('确认è¦"' + text + '""' + row.userName + '"ç¨æ·åï¼') |
| | | .then(function () { |
| | | return changeUserStatus(row.userId, row.status); |
| | | }) |
| | | .then(() => { |
| | | this.$modal.msgSuccess(text + "æå"); |
| | | }) |
| | | .catch(function () { |
| | | row.status = row.status === "0" ? "1" : "0"; |
| | | }); |
| | | }, |
| | | // åæ¶æé® |
| | | cancel() { |
| | | this.addalteropen = false; |
| | | this.reset(); |
| | | }, |
| | | // 表åéç½® |
| | | reset() { |
| | | this.form = { |
| | | userId: undefined, |
| | | deptId: undefined, |
| | | userName: undefined, |
| | | nickName: undefined, |
| | | password: undefined, |
| | | phonenumber: undefined, |
| | | email: undefined, |
| | | sex: undefined, |
| | | status: "0", |
| | | remark: undefined, |
| | | postIds: [], |
| | | roleIds: [], |
| | | const body = { |
| | | adviceType: this.queryParams.adviceType || undefined, |
| | | content: this.queryParams.content || undefined, |
| | | createBy: this.queryParams.createBy || undefined |
| | | }; |
| | | this.resetForm("form"); |
| | | const query = { |
| | | pageNum: this.queryParams.pageNum, |
| | | pageSize: this.queryParams.pageSize |
| | | }; |
| | | listAdvice(body, query).then(res => { |
| | | this.adviceList = res.rows || []; |
| | | this.total = res.total || 0; |
| | | this.loading = false; |
| | | }).catch(() => { this.loading = false; }); |
| | | }, |
| | | /** æç´¢æé®æä½ */ |
| | | handleQuery() { |
| | | this.topqueryParams.pageNum = 1; |
| | | this.queryParams.pageNum = 1; |
| | | this.getList(); |
| | | }, |
| | | /** éç½®æé®æä½ */ |
| | | resetQuery() { |
| | | this.dateRange = []; |
| | | this.resetForm("queryForm"); |
| | | this.topqueryParams.deptId = undefined; |
| | | this.$refs.tree.setCurrentKey(null); |
| | | this.queryParams.adviceType = undefined; |
| | | this.queryParams.content = undefined; |
| | | this.queryParams.createBy = undefined; |
| | | this.handleQuery(); |
| | | }, |
| | | // å¤éæ¡é䏿°æ® |
| | | handleSelectionChange(selection) { |
| | | this.ids = selection.map((item) => item.userId); |
| | | this.single = selection.length != 1; |
| | | this.ids = selection.map(item => item.id); |
| | | this.single = selection.length !== 1; |
| | | this.multiple = !selection.length; |
| | | }, |
| | | //å é¤é项 |
| | | handleClose(tag) { |
| | | this.dynamicTags.splice(this.dynamicTags.indexOf(tag), 1); |
| | | reset() { |
| | | this.form = { |
| | | id: undefined, |
| | | subid: undefined, |
| | | taskid: undefined, |
| | | patid: undefined, |
| | | adviceType: "1", |
| | | deptCodes: [], |
| | | wardCodes: [], |
| | | involvedUsers: "", |
| | | content: "", |
| | | remark: "" |
| | | }; |
| | | }, |
| | | //è§¦åæ°å¢è¾å
¥ |
| | | showInput() { |
| | | this.inputVisible = true; |
| | | this.$nextTick((_) => { |
| | | this.$refs.saveTagInput.$refs.input.focus(); |
| | | }); |
| | | }, |
| | | //è·å失å»ç¦ç¹è§¦å |
| | | handleInputConfirm() { |
| | | let inputValue = this.inputValue; |
| | | if (inputValue) { |
| | | this.dynamicTags.push(inputValue); |
| | | } |
| | | this.inputVisible = false; |
| | | this.inputValue = ""; |
| | | }, |
| | | /** æ°å¢æé®æä½ */ |
| | | handleAdd() { |
| | | this.reset(); |
| | | this.addalteropen = true; |
| | | // getUser().then((response) => { |
| | | // this.postOptions = response.posts; |
| | | // this.roleOptions = response.roles; |
| | | // this.title = "æ°å¢æè¯"; |
| | | // this.form.password = this.initPassword; |
| | | // }); |
| | | this.title = "æ°å¢æè¯å»ºè®®"; |
| | | this.open = true; |
| | | }, |
| | | /** ä¿®æ¹æé®æä½ */ |
| | | handleUpdate(row) { |
| | | this.reset(); |
| | | const userId = row.userId || this.ids; |
| | | getUser(userId).then((response) => { |
| | | this.form = response.data; |
| | | this.postOptions = response.posts; |
| | | this.roleOptions = response.roles; |
| | | this.$set(this.form, "postIds", response.postIds); |
| | | this.$set(this.form, "roleIds", response.roleIds); |
| | | this.addalteropen = true; |
| | | this.title = "ä¿®æ¹ç¨æ·"; |
| | | this.form.password = ""; |
| | | this.title = "ä¿®æ¹æè¯å»ºè®®"; |
| | | getAdvice(row.id).then(res => { |
| | | const data = res.data || {}; |
| | | this.form = { |
| | | id: data.id, |
| | | subid: data.subid, |
| | | taskid: data.taskid, |
| | | patid: data.patid, |
| | | adviceType: data.adviceType || "1", |
| | | deptCodes: data.deptCodes ? data.deptCodes.split(",").filter(Boolean) : [], |
| | | wardCodes: data.wardCodes ? data.wardCodes.split(",").filter(Boolean) : [], |
| | | involvedUsers: data.involvedUsers || "", |
| | | content: data.content || "", |
| | | remark: data.remark || "" |
| | | }; |
| | | this.open = true; |
| | | }); |
| | | }, |
| | | /** éç½®å¯ç æé®æä½ */ |
| | | handleResetPwd(row) { |
| | | this.$prompt('请è¾å
¥"' + row.userName + '"çæ°å¯ç ', "æç¤º", { |
| | | confirmButtonText: "ç¡®å®", |
| | | cancelButtonText: "åæ¶", |
| | | closeOnClickModal: false, |
| | | inputPattern: /^.{5,20}$/, |
| | | inputErrorMessage: "ç¨æ·å¯ç é¿åº¦å¿
é¡»ä»äº 5 å 20 ä¹é´", |
| | | }) |
| | | .then(({ value }) => { |
| | | resetUserPwd(row.userId, value).then((response) => { |
| | | this.$modal.msgSuccess("ä¿®æ¹æåï¼æ°å¯ç æ¯ï¼" + value); |
| | | }); |
| | | }) |
| | | .catch(() => {}); |
| | | }, |
| | | |
| | | /** æäº¤æé® */ |
| | | submitForm: function () { |
| | | this.$refs["form"].validate((valid) => { |
| | | if (valid) { |
| | | if (this.form.userId != undefined) { |
| | | updateUser(this.form).then((response) => { |
| | | this.$modal.msgSuccess("ä¿®æ¹æå"); |
| | | this.open = false; |
| | | this.getList(); |
| | | }); |
| | | submitForm() { |
| | | this.$refs["form"].validate(valid => { |
| | | if (!valid) return; |
| | | const data = { |
| | | id: this.form.id, |
| | | subid: this.form.subid, |
| | | taskid: this.form.taskid, |
| | | patid: this.form.patid, |
| | | adviceType: this.form.adviceType, |
| | | deptCodes: this.form.deptCodes.join(","), |
| | | wardCodes: this.form.wardCodes.join(","), |
| | | involvedUsers: this.form.involvedUsers, |
| | | content: this.form.content, |
| | | remark: this.form.remark, |
| | | delFlag: "0" |
| | | }; |
| | | const api = this.form.id ? updateAdvice(data) : addAdvice(data); |
| | | api.then(res => { |
| | | if (res.code === 200) { |
| | | this.$modal.msgSuccess(this.form.id ? "ä¿®æ¹æå" : "æ°å¢æå"); |
| | | this.open = false; |
| | | this.getList(); |
| | | } else { |
| | | addUser(this.form).then((response) => { |
| | | this.$modal.msgSuccess("æ°å¢æå"); |
| | | this.open = false; |
| | | this.getList(); |
| | | }); |
| | | this.$modal.msgError(res.msg || "æä½å¤±è´¥"); |
| | | } |
| | | } |
| | | }); |
| | | }); |
| | | }, |
| | | /** å é¤æé®æä½ */ |
| | | handleDelete(row) { |
| | | const userIds = row.userId || this.ids; |
| | | this.$modal |
| | | .confirm('æ¯å¦ç¡®è®¤å é¤ç¨æ·ç¼å·ä¸º"' + userIds + '"çæ°æ®é¡¹ï¼') |
| | | .then(function () { |
| | | return delUser(userIds); |
| | | }) |
| | | .then(() => { |
| | | const ids = row.id ? [row.id] : this.ids; |
| | | if (!ids.length) { |
| | | this.$modal.msgWarning("è¯·éæ©è¦å é¤çæ°æ®"); |
| | | return; |
| | | } |
| | | this.$modal.confirm("æ¯å¦ç¡®è®¤å 餿éæè¯å»ºè®®ï¼").then(() => { |
| | | return delAdvice(ids.join(",")); |
| | | }).then(res => { |
| | | if (res.code === 200) { |
| | | this.getList(); |
| | | this.$modal.msgSuccess("å 餿å"); |
| | | }) |
| | | .catch(() => {}); |
| | | } |
| | | }).catch(() => {}); |
| | | }, |
| | | /** å¯¼åºæé®æä½ */ |
| | | handleExport() { |
| | | this.download( |
| | | "system/user/export", |
| | | "/system/serviceSubtaskAdvice/export", |
| | | { |
| | | ...this.topqueryParams, |
| | | adviceType: this.queryParams.adviceType, |
| | | content: this.queryParams.content, |
| | | createBy: this.queryParams.createBy |
| | | }, |
| | | `user_${new Date().getTime()}.xlsx` |
| | | `éè®¿å»ºè®®æ°æ®_${new Date().getTime()}.xlsx` |
| | | ); |
| | | }, |
| | | }, |
| | | }; |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | .el-button--primary.is-plain { |
| | | color: #ffffff; |
| | | background: #409eff; |
| | | border-color: #4fabe9; |
| | | } |
| | | |
| | | .document { |
| | | width: 100px; |
| | | height: 50px; |
| | | } |
| | | |
| | | .documentf { |
| | | display: flex; |
| | | justify-content: flex-end; |
| | | } |
| | | |
| | | .download { |
| | | text-align: center; |
| | | |
| | | .el-upload__tip { |
| | | font-size: 23px; |
| | | } |
| | | |
| | | .el-upload__text { |
| | | font-size: 23px; |
| | | } |
| | | } |
| | | |
| | | .uploading { |
| | | margin-top: 20px; |
| | | margin: 20px; |
| | | padding: 30px; |
| | | background: #ffffff; |
| | | 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); |
| | | } |
| | | |
| | | .el-tag + .el-tag { |
| | | margin-left: 10px; |
| | | } |
| | | |
| | | .button-new-tag { |
| | | margin-left: 10px; |
| | | height: 32px; |
| | | line-height: 30px; |
| | | padding-top: 0; |
| | | padding-bottom: 0; |
| | | } |
| | | |
| | | .input-new-tag { |
| | | width: 90px; |
| | | margin-left: 10px; |
| | | vertical-align: bottom; |
| | | } |
| | | |
| | | .drexamine { |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | padding: 30px; |
| | | background: #daeaf5; |
| | | |
| | | img { |
| | | width: 100px; |
| | | height: 100px; |
| | | } |
| | | } |
| | | |
| | | .qrcode-dialo { |
| | | // text-align: center; |
| | | // display: flex; |
| | | margin: 20px; |
| | | padding: 30px; |
| | | background: #edf1f7; |
| | | 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); |
| | | |
| | | .topic-dev { |
| | | margin-bottom: 25px; |
| | | font-size: 20px !important; |
| | | |
| | | .dev-text { |
| | | margin-bottom: 10px; |
| | | } |
| | | } |
| | | } |
| | | |
| | | ::v-deep.el-radio-group { |
| | | span { |
| | | font-size: 24px; |
| | | } |
| | | } |
| | | |
| | | ::v-deep.el-checkbox-group { |
| | | span { |
| | | font-size: 24px; |
| | | } |
| | | } |
| | | </style> |
| | | }; |
| | | </script> |
| | |
| | | this.topqueryParams.leavehospitaldistrictcodes[0] && |
| | | this.topqueryParams.visitDeptCodes[0] |
| | | ) { |
| | | this.topqueryParams.deptOrDistrict = 4; |
| | | this.topqueryParams.deptOrDistrict = 2; |
| | | } else { |
| | | this.topqueryParams.deptOrDistrict = 1; |
| | | } |
| | |
| | | <template> |
| | | <div class="advice-list"> |
| | | <!-- æç´¢æ --> |
| | | <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" label-width="70px"> |
| | | <el-form-item label="建议类å" prop="adviceType"> |
| | | <el-select v-model="queryParams.adviceType" placeholder="å
¨é¨ç±»å" clearable style="width: 140px"> |
| | | <el-option label="æè¯" value="1" /> |
| | | <el-option label="建议" value="2" /> |
| | | <el-option label="表æ¬" value="3" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="å
容" prop="content"> |
| | | <el-input v-model="queryParams.content" placeholder="请è¾å
¥å
容å
³é®å" clearable style="width: 180px" /> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">æç´¢</el-button> |
| | | <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">éç½®</el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | | <div class="advice-blocks"> |
| | | <!-- ç±»å Tab å±ç¤º --> |
| | | <el-tabs v-model="activeType"> |
| | | <el-tab-pane |
| | | v-for="type in adviceTypes" |
| | | :key="type.value" |
| | | :name="type.value" |
| | | > |
| | | <span slot="label"> |
| | | <span class="tab-icon">{{ type.icon }}</span> {{ type.label }} |
| | | </span> |
| | | |
| | | <!-- æä½æ --> |
| | | <el-row :gutter="10" class="mb8"> |
| | | <el-col :span="1.5"> |
| | | <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd">æ°å¢</el-button> |
| | | </el-col> |
| | | <el-col :span="1.5"> |
| | | <el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete">å é¤</el-button> |
| | | </el-col> |
| | | <el-col :span="1.5"> |
| | | <el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport">导åº</el-button> |
| | | </el-col> |
| | | </el-row> |
| | | <!-- æè®°å½ --> |
| | | <div v-if="getAdviceByType(type.value)" class="advice-content" :class="type.className"> |
| | | <div class="advice-head"> |
| | | <span class="advice-label">{{ type.label }}å
容</span> |
| | | <el-button size="mini" type="primary" plain icon="el-icon-edit" @click="handleEdit(type.value)">ä¿®æ¹</el-button> |
| | | </div> |
| | | <div class="advice-text">{{ getAdviceByType(type.value).content }}</div> |
| | | <div class="advice-meta" v-if="getAdviceByType(type.value).deptCodes || getAdviceByType(type.value).wardCodes"> |
| | | <span v-if="getAdviceByType(type.value).deptCodes" class="meta-item"> |
| | | <i class="el-icon-office-building"></i>{{ getDeptNames(getAdviceByType(type.value).deptCodes) }} |
| | | </span> |
| | | <span v-if="getAdviceByType(type.value).wardCodes" class="meta-item"> |
| | | <i class="el-icon-s-home"></i>{{ getWardNames(getAdviceByType(type.value).wardCodes) }} |
| | | </span> |
| | | </div> |
| | | <div class="advice-meta" v-if="getAdviceByType(type.value).involvedUsers"> |
| | | <span class="meta-item"><i class="el-icon-user"></i>æ¶å人åï¼{{ getAdviceByType(type.value).involvedUsers }}</span> |
| | | </div> |
| | | <div class="advice-meta" v-if="getAdviceByType(type.value).remark"> |
| | | <span class="meta-item">夿³¨ï¼{{ getAdviceByType(type.value).remark }}</span> |
| | | </div> |
| | | <div class="advice-foot"> |
| | | <span>{{ getAdviceByType(type.value).createBy || "-" }}</span> |
| | | <span>{{ getAdviceByType(type.value).createTime || "-" }}</span> |
| | | </div> |
| | | </div> |
| | | |
| | | <!-- è¡¨æ ¼ --> |
| | | <el-table v-loading="loading" :data="adviceList" @selection-change="handleSelectionChange"> |
| | | <el-table-column type="selection" width="50" align="center" /> |
| | | <el-table-column label="建议类å" align="center" prop="adviceType" width="100"> |
| | | <template slot-scope="scope"> |
| | | <el-tag :type="adviceTypeTag(scope.row.adviceType)" size="small"> |
| | | {{ adviceTypeText(scope.row.adviceType) }} |
| | | </el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="å
容" align="center" prop="content" min-width="200" :show-overflow-tooltip="true" /> |
| | | <el-table-column label="æ¶åç§å®¤" align="center" prop="deptCodes" width="140" :show-overflow-tooltip="true"> |
| | | <template slot-scope="scope">{{ getDeptNames(scope.row.deptCodes) }}</template> |
| | | </el-table-column> |
| | | <el-table-column label="æ¶åç
åº" align="center" prop="wardCodes" width="140" :show-overflow-tooltip="true"> |
| | | <template slot-scope="scope">{{ getWardNames(scope.row.wardCodes) }}</template> |
| | | </el-table-column> |
| | | <el-table-column label="夿³¨" align="center" prop="remark" min-width="150" :show-overflow-tooltip="true" /> |
| | | <el-table-column label="å建è
" align="center" prop="createBy" width="100" /> |
| | | <el-table-column label="å建æ¶é´" align="center" prop="createTime" width="160" /> |
| | | <el-table-column label="æä½" align="center" width="120" class-name="small-padding fixed-width"> |
| | | <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" style="color: #f56c6c" @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" |
| | | /> |
| | | <!-- 空æ --> |
| | | <div v-else class="advice-empty"> |
| | | <span class="empty-icon">{{ type.icon }}</span> |
| | | <p>ææ {{ type.label }}è®°å½</p> |
| | | <el-button size="small" type="primary" plain icon="el-icon-plus" @click="handleAdd(type.value)">æ°å¢{{ type.label }}</el-button> |
| | | </div> |
| | | </el-tab-pane> |
| | | </el-tabs> |
| | | |
| | | <!-- æ°å¢/ç¼è¾å¼¹çª --> |
| | | <el-dialog :title="title" :visible.sync="open" width="600px" append-to-body :close-on-click-modal="false"> |
| | | <el-form ref="form" :model="form" :rules="rules" label-width="100px"> |
| | | <el-form-item label="建议类å" prop="adviceType"> |
| | | <el-radio-group v-model="form.adviceType"> |
| | | <el-radio label="1">æè¯</el-radio> |
| | | <el-radio label="2">建议</el-radio> |
| | | <el-radio label="3">表æ¬</el-radio> |
| | | </el-radio-group> |
| | | <el-dialog |
| | | :title="dialogTitle" |
| | | :visible.sync="open" |
| | | width="560px" |
| | | append-to-body |
| | | :close-on-click-modal="false" |
| | | > |
| | | <el-form ref="form" :model="form" :rules="rules" label-width="90px"> |
| | | <el-form-item label="ç±»å"> |
| | | <el-tag :type="currentTypeTag" size="small">{{ currentTypeText }}</el-tag> |
| | | </el-form-item> |
| | | <el-form-item label="æ¶åç§å®¤" prop="deptCodes"> |
| | | <el-select v-model="form.deptCodes" multiple filterable clearable placeholder="è¯·éæ©æ¶åç§å®¤" style="width: 100%"> |
| | | <el-select v-model="form.deptCodes" multiple filterable clearable placeholder="è¯·éæ©æ¶åç§å®¤ï¼å¯å¤éï¼" style="width: 100%"> |
| | | <el-option v-for="d in deptOptions" :key="d.value" :label="d.label" :value="d.value" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="æ¶åç
åº" prop="wardCodes"> |
| | | <el-select v-model="form.wardCodes" multiple filterable clearable placeholder="è¯·éæ©æ¶åç
åº" style="width: 100%"> |
| | | <el-select v-model="form.wardCodes" multiple filterable clearable placeholder="è¯·éæ©æ¶åç
åºï¼å¯å¤éï¼" style="width: 100%"> |
| | | <el-option v-for="w in wardOptions" :key="w.value" :label="w.label" :value="w.value" /> |
| | | </el-select> |
| | | </el-form-item> |
| | |
| | | <el-input v-model="form.involvedUsers" placeholder="æ¶å人å代ç ï¼å¤ä¸ªç¨éå·åé" /> |
| | | </el-form-item> |
| | | <el-form-item label="å
容" prop="content"> |
| | | <el-input type="textarea" :rows="3" v-model="form.content" placeholder="请è¾å
¥æè¯/建议/表æ¬å
容" /> |
| | | <el-input type="textarea" :rows="4" v-model="form.content" :placeholder="'请è¾å
¥' + currentTypeText + 'å
容'" /> |
| | | </el-form-item> |
| | | <el-form-item label="夿³¨" prop="remark"> |
| | | <el-input type="textarea" :rows="2" v-model="form.remark" placeholder="请è¾å
¥å¤æ³¨" /> |
| | |
| | | </template> |
| | | |
| | | <script> |
| | | import { listAdvice, getAdvice, addAdvice, updateAdvice, delAdvice } from "@/api/followvisit/advice"; |
| | | import { listAdvice, getAdvice, addAdvice, updateAdvice } from "@/api/followvisit/advice"; |
| | | import store from "@/store"; |
| | | |
| | | export default { |
| | |
| | | return { |
| | | loading: false, |
| | | adviceList: [], |
| | | total: 0, |
| | | ids: [], |
| | | single: true, |
| | | multiple: true, |
| | | title: "", |
| | | activeType: "1", |
| | | open: false, |
| | | queryParams: { |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | adviceType: undefined, |
| | | content: undefined |
| | | }, |
| | | dialogTitle: "", |
| | | currentType: "1", |
| | | form: {}, |
| | | rules: { |
| | | adviceType: [{ required: true, message: "è¯·éæ©å»ºè®®ç±»å", trigger: "change" }], |
| | | content: [{ required: true, message: "请è¾å
¥å
容", trigger: "blur" }] |
| | | } |
| | | }, |
| | | adviceTypes: [ |
| | | { value: "1", label: "æè¯", icon: "â ï¸", className: "type-complaint", tagType: "danger" }, |
| | | { value: "2", label: "建议", icon: "ð¡", className: "type-suggest", tagType: "primary" }, |
| | | { value: "3", label: "表æ¬", icon: "ð", className: "type-praise", tagType: "success" } |
| | | ] |
| | | }; |
| | | }, |
| | | computed: { |
| | |
| | | }, |
| | | wardOptions() { |
| | | return (store.getters.belongWards || []).map(w => ({ label: w.districtName, value: w.districtCode })); |
| | | }, |
| | | currentTypeText() { |
| | | const t = this.adviceTypes.find(x => x.value === this.currentType); |
| | | return t ? t.label : ""; |
| | | }, |
| | | currentTypeTag() { |
| | | const t = this.adviceTypes.find(x => x.value === this.currentType); |
| | | return t ? t.tagType : "info"; |
| | | } |
| | | }, |
| | | created() { |
| | | this.getList(); |
| | | }, |
| | | methods: { |
| | | adviceTypeText(t) { |
| | | const map = { "1": "æè¯", "2": "建议", "3": "表æ¬" }; |
| | | return map[t] || "æªç¥"; |
| | | }, |
| | | adviceTypeTag(t) { |
| | | const map = { "1": "danger", "2": "primary", "3": "success" }; |
| | | return map[t] || "info"; |
| | | getAdviceByType(type) { |
| | | return this.adviceList.find(item => String(item.adviceType) === String(type)); |
| | | }, |
| | | getDeptNames(codes) { |
| | | if (!codes) return "-"; |
| | | const arr = codes.split(",").filter(Boolean); |
| | | const names = arr.map(c => { |
| | | if (!codes) return ""; |
| | | return codes.split(",").filter(Boolean).map(c => { |
| | | const found = this.deptOptions.find(d => d.value == c); |
| | | return found ? found.label : c; |
| | | }); |
| | | return names.join("ã") || "-"; |
| | | }).join("ã"); |
| | | }, |
| | | getWardNames(codes) { |
| | | if (!codes) return "-"; |
| | | const arr = codes.split(",").filter(Boolean); |
| | | const names = arr.map(c => { |
| | | if (!codes) return ""; |
| | | return codes.split(",").filter(Boolean).map(c => { |
| | | const found = this.wardOptions.find(w => w.value == c); |
| | | return found ? found.label : c; |
| | | }); |
| | | return names.join("ã") || "-"; |
| | | }).join("ã"); |
| | | }, |
| | | |
| | | getList() { |
| | | this.loading = true; |
| | | // åé¡µåæ°èµ° queryï¼è¿æ»¤æ¡ä»¶èµ° body |
| | | const body = { |
| | | subid: this.subid || undefined, |
| | | taskid: this.taskid || undefined, |
| | | patid: this.patid || undefined, |
| | | adviceType: this.queryParams.adviceType || undefined, |
| | | content: this.queryParams.content || undefined |
| | | patid: this.patid || undefined |
| | | }; |
| | | const query = { |
| | | pageNum: this.queryParams.pageNum, |
| | | pageSize: this.queryParams.pageSize |
| | | }; |
| | | const query = { pageNum: 1, pageSize: 100 }; |
| | | listAdvice(body, query).then(res => { |
| | | this.adviceList = res.rows || []; |
| | | this.total = res.total || 0; |
| | | this.loading = false; |
| | | }).catch(() => { this.loading = false; }); |
| | | }, |
| | | handleQuery() { |
| | | this.queryParams.pageNum = 1; |
| | | this.getList(); |
| | | }, |
| | | resetQuery() { |
| | | this.queryParams.adviceType = undefined; |
| | | this.queryParams.content = undefined; |
| | | this.handleQuery(); |
| | | }, |
| | | handleSelectionChange(selection) { |
| | | this.ids = selection.map(item => item.id); |
| | | this.single = selection.length !== 1; |
| | | this.multiple = !selection.length; |
| | | }, |
| | | reset() { |
| | | |
| | | resetForm() { |
| | | this.form = { |
| | | id: undefined, |
| | | adviceType: "1", |
| | | adviceType: this.currentType, |
| | | deptCodes: [], |
| | | wardCodes: [], |
| | | involvedUsers: "", |
| | |
| | | remark: "" |
| | | }; |
| | | }, |
| | | handleAdd() { |
| | | this.reset(); |
| | | this.title = "æ°å¢æè¯å»ºè®®"; |
| | | |
| | | handleAdd(type) { |
| | | this.currentType = type; |
| | | this.resetForm(); |
| | | this.dialogTitle = "æ°å¢" + this.currentTypeText; |
| | | this.open = true; |
| | | }, |
| | | handleUpdate(row) { |
| | | this.reset(); |
| | | this.title = "ä¿®æ¹æè¯å»ºè®®"; |
| | | getAdvice(row.id).then(res => { |
| | | const data = res.data || {}; |
| | | this.form = { |
| | | id: data.id, |
| | | adviceType: data.adviceType || "1", |
| | | deptCodes: data.deptCodes ? data.deptCodes.split(",").filter(Boolean) : [], |
| | | wardCodes: data.wardCodes ? data.wardCodes.split(",").filter(Boolean) : [], |
| | | involvedUsers: data.involvedUsers || "", |
| | | content: data.content || "", |
| | | remark: data.remark || "" |
| | | }; |
| | | this.open = true; |
| | | }); |
| | | |
| | | handleEdit(type) { |
| | | this.currentType = type; |
| | | const existing = this.getAdviceByType(type); |
| | | if (existing) { |
| | | getAdvice(existing.id).then(res => { |
| | | const data = res.data || existing; |
| | | this.form = { |
| | | id: data.id, |
| | | adviceType: data.adviceType || type, |
| | | deptCodes: data.deptCodes ? data.deptCodes.split(",").filter(Boolean) : [], |
| | | wardCodes: data.wardCodes ? data.wardCodes.split(",").filter(Boolean) : [], |
| | | involvedUsers: data.involvedUsers || "", |
| | | content: data.content || "", |
| | | remark: data.remark || "" |
| | | }; |
| | | this.dialogTitle = "ä¿®æ¹" + this.currentTypeText; |
| | | this.open = true; |
| | | }); |
| | | } |
| | | }, |
| | | |
| | | submitForm() { |
| | | this.$refs["form"].validate(valid => { |
| | | if (!valid) return; |
| | |
| | | } |
| | | }); |
| | | }); |
| | | }, |
| | | handleDelete(row) { |
| | | const ids = row.id ? [row.id] : this.ids; |
| | | if (!ids.length) { |
| | | this.$modal.msgWarning("è¯·éæ©è¦å é¤çæ°æ®"); |
| | | return; |
| | | } |
| | | this.$modal.confirm("æ¯å¦ç¡®è®¤å 餿éæè¯å»ºè®®ï¼").then(() => { |
| | | return delAdvice(ids.join(",")); |
| | | }).then(res => { |
| | | if (res.code === 200) { |
| | | this.getList(); |
| | | this.$modal.msgSuccess("å 餿å"); |
| | | } |
| | | }).catch(() => {}); |
| | | }, |
| | | handleExport() { |
| | | this.download( |
| | | "/system/serviceSubtaskAdvice/export", |
| | | { |
| | | subid: this.subid, |
| | | taskid: this.taskid, |
| | | patid: this.patid, |
| | | adviceType: this.queryParams.adviceType, |
| | | content: this.queryParams.content |
| | | }, |
| | | `éè®¿å»ºè®®æ°æ®_${new Date().getTime()}.xlsx` |
| | | ); |
| | | } |
| | | } |
| | | }; |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | .advice-list { |
| | | padding: 10px 0; |
| | | .advice-blocks { |
| | | padding: 0; |
| | | |
| | | ::v-deep .el-tabs__item { |
| | | .tab-icon { |
| | | margin-right: 4px; |
| | | } |
| | | } |
| | | } |
| | | |
| | | .advice-content { |
| | | padding: 16px 20px; |
| | | border-radius: 6px; |
| | | border-left: 4px solid transparent; |
| | | background: #fafafa; |
| | | |
| | | &.type-complaint { border-left-color: #f56c6c; } |
| | | &.type-suggest { border-left-color: #409eff; } |
| | | &.type-praise { border-left-color: #67c23a; } |
| | | |
| | | .advice-head { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | align-items: center; |
| | | margin-bottom: 10px; |
| | | .advice-label { |
| | | font-size: 14px; |
| | | font-weight: 600; |
| | | color: #303133; |
| | | } |
| | | } |
| | | |
| | | .advice-text { |
| | | font-size: 14px; |
| | | color: #303133; |
| | | line-height: 1.7; |
| | | margin-bottom: 10px; |
| | | word-break: break-all; |
| | | } |
| | | |
| | | .advice-meta { |
| | | font-size: 13px; |
| | | color: #909399; |
| | | margin-bottom: 6px; |
| | | .meta-item { |
| | | display: inline-block; |
| | | margin-right: 16px; |
| | | i { margin-right: 4px; color: #606266; } |
| | | } |
| | | } |
| | | |
| | | .advice-foot { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | font-size: 12px; |
| | | color: #c0c4cc; |
| | | padding-top: 10px; |
| | | border-top: 1px solid #ebeef5; |
| | | } |
| | | } |
| | | |
| | | .advice-empty { |
| | | padding: 50px 0; |
| | | text-align: center; |
| | | .empty-icon { font-size: 36px; display: block; margin-bottom: 12px; } |
| | | p { color: #c0c4cc; font-size: 14px; margin-bottom: 16px; } |
| | | } |
| | | </style> |
| | |
| | | <div>é访å
容</div> |
| | | </div> |
| | | <div> |
| | | <el-tabs v-model="activeName" type="border-card"> |
| | | <el-tabs v-model="activeName" type="card"> |
| | | <el-tab-pane name="wj"> |
| | | <span class="mulsz" slot="label" |
| | | ><i class="el-icon-notebook-1"></i> é®å·éè®¿ç»æ</span |
| | |
| | | </el-form> |
| | | </div> |
| | | |
| | | <!-- æ£è
æ¡£æ¡ä¿¡æ¯ --> |
| | | <div class="detailed"> |
| | | <h3>æ£è
æ¡£æ¡ä¿¡æ¯</h3> |
| | | <el-form ref="userform" :model="userform" label-width="100px"> |
| | | <el-row :gutter="20"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="æ£è
å§å" prop="name"> |
| | | <el-input |
| | | v-model="userform.name" |
| | | placeholder="请è¾å
¥å§å" |
| | | maxlength="30" |
| | | ></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row :gutter="20"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="æ§å«" prop="sex"> |
| | | <el-select v-model="userform.sex" placeholder="è¯·éæ©"> |
| | | <el-option label="ç·" :value="1"> </el-option> |
| | | <el-option label="女" :value="2"> </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="å¹´é¾" prop="age"> |
| | | <el-input |
| | | v-model="userform.age" |
| | | placeholder="请è¾å
¥å¹´é¾" |
| | | maxlength="20" |
| | | ></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | <el-row :gutter="20"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="èç³»æ¹å¼" prop="telcode"> |
| | | <el-input |
| | | v-model="userform.telcode" |
| | | placeholder="请è¾å
¥èç³»æ¹å¼" |
| | | maxlength="20" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="亲å±èç³»æ¹å¼" prop="relativetelcode"> |
| | | <el-input |
| | | v-model="userform.relativetelcode" |
| | | placeholder="请è¾å
¥äº²å±èç³»æ¹å¼" |
| | | maxlength="20" |
| | | ></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row :gutter="20"> |
| | | <el-col :span="24"> |
| | | <el-form-item label="è¯æåç§°" prop="leavediagname"> |
| | | <el-input |
| | | v-model="form.leavediagname" |
| | | placeholder="请è¾å
¥è¯æ" |
| | | maxlength="50" |
| | | ></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row :gutter="20"> |
| | | <el-col :span="24"> |
| | | <el-form-item label="åºçå°" prop="birthplace"> |
| | | <el-input |
| | | v-model="userform.birthplace" |
| | | placeholder="å½ãçãå°å¸ãåºå¿ãè¡éç详ç»ä¿¡æ¯" |
| | | maxlength="50" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row :gutter="20"> |
| | | <el-col :span="24"> |
| | | <el-form-item label="å±
ä½å°" prop="placeOfResidence"> |
| | | <el-input |
| | | v-model="userform.placeOfResidence" |
| | | placeholder="å½ãçãå°å¸ãåºå¿ãè¡éç详ç»ä¿¡æ¯" |
| | | maxlength="50" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </el-form> |
| | | <!-- æå 颿¿ï¼æ£è
æ¡£æ¡ä¿¡æ¯ + æè¯å»ºè®® --> |
| | | <div class="collapse-section"> |
| | | <el-collapse v-model="collapseActive" accordion> |
| | | <el-collapse-item title="æ£è
æ¡£æ¡ä¿¡æ¯" name="patient"> |
| | | <el-form ref="userform2" :model="userform" label-width="90px" size="small"> |
| | | <el-row :gutter="16"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="æ£è
å§å"> |
| | | <el-input v-model="userform.name" placeholder="请è¾å
¥å§å" maxlength="30"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="æ§å«"> |
| | | <el-select v-model="userform.sex" placeholder="è¯·éæ©" style="width: 100%"> |
| | | <el-option label="ç·" :value="1"></el-option> |
| | | <el-option label="女" :value="2"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row :gutter="16"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="å¹´é¾"> |
| | | <el-input v-model="userform.age" placeholder="请è¾å
¥å¹´é¾" maxlength="20"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="èç³»æ¹å¼"> |
| | | <el-input v-model="userform.telcode" placeholder="请è¾å
¥èç³»æ¹å¼" maxlength="20"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row :gutter="16"> |
| | | <el-col :span="24"> |
| | | <el-form-item label="亲å±çµè¯"> |
| | | <el-input v-model="userform.relativetelcode" placeholder="请è¾å
¥äº²å±èç³»æ¹å¼" maxlength="20"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row :gutter="16"> |
| | | <el-col :span="24"> |
| | | <el-form-item label="è¯æåç§°"> |
| | | <el-input v-model="form.leavediagname" placeholder="请è¾å
¥è¯æ" maxlength="50"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row :gutter="16"> |
| | | <el-col :span="24"> |
| | | <el-form-item label="åºçå°"> |
| | | <el-input v-model="userform.birthplace" placeholder="å½ãçãå°å¸ãåºå¿ãè¡éç" maxlength="50"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row :gutter="16"> |
| | | <el-col :span="24"> |
| | | <el-form-item label="å±
ä½å°"> |
| | | <el-input v-model="userform.placeOfResidence" placeholder="å½ãçãå°å¸ãåºå¿ãè¡éç" maxlength="50"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </el-form> |
| | | </el-collapse-item> |
| | | <el-collapse-item title="æè¯å»ºè®®" name="advice" v-if="orgname=='ç¼äºå¿äººæ°å»é¢'"> |
| | | <AdviceList :subid="taskid" :taskid="id" :patid="patid" /> |
| | | </el-collapse-item> |
| | | </el-collapse> |
| | | </div> |
| | | |
| | | |
| | | |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <!-- æè¯å»ºè®® --> |
| | | <el-card class="advice-card"> |
| | | <div slot="header" class="clearfix"> |
| | | <span class="detail-title">æè¯å»ºè®®</span> |
| | | </div> |
| | | <AdviceList :subid="taskid" :taskid="id" :patid="patid" /> |
| | | </el-card> |
| | | <!-- çä¿¡åéå¯¹è¯æ¡ --> |
| | | <el-dialog title="çä¿¡åé" :visible.sync="smsDialogVisible"> |
| | | <!-- 注æè¿é使ç¨äº smsDialogVisible 以åºåå·²æç dialogFormVisible --> |
| | |
| | | return { |
| | | visitAgain: 1, |
| | | activeNames: ["next"], // åªå±å¼"䏿¬¡é访"ï¼å
¶ä»é½æå |
| | | collapseActive: ["patient"], // 人工å¤çæå 颿¿æ¿æ´»é¡¹ï¼é»è®¤å±å¼æ£è
æ¡£æ¡ï¼ |
| | | userid: "", |
| | | defaultKey: false, //æ¯å¦å¯é»è®¤å¡«æ¥ |
| | | currentPhoneNumber: "", |
| | |
| | | background-color: #fff; |
| | | } |
| | | |
| | | .advice-card { |
| | | margin: 0 10px 20px 10px; |
| | | .detail-title { |
| | | font-size: 16px; |
| | | font-weight: 600; |
| | | color: #303133; |
| | | .collapse-section { |
| | | width: 100%; |
| | | align-self: stretch; |
| | | margin-top: 10px; |
| | | |
| | | ::v-deep .el-collapse { |
| | | border: none; |
| | | |
| | | .el-collapse-item__header { |
| | | background: linear-gradient(135deg, #ecf5ff 0%, #f5f9ff 100%); |
| | | border-radius: 8px; |
| | | padding: 0 20px; |
| | | height: 48px; |
| | | font-size: 16px; |
| | | font-weight: 700; |
| | | color: #303133; |
| | | border-bottom: 1px solid #e4e7ed; |
| | | margin-bottom: 8px; |
| | | letter-spacing: 1px; |
| | | |
| | | .el-collapse-item__arrow { |
| | | font-size: 16px; |
| | | color: #409eff; |
| | | } |
| | | |
| | | &:hover { |
| | | background: linear-gradient(135deg, #e0efff 0%, #ecf5ff 100%); |
| | | } |
| | | |
| | | &.is-active { |
| | | border-bottom-color: transparent; |
| | | color: #409eff; |
| | | } |
| | | } |
| | | |
| | | .el-collapse-item__wrap { |
| | | border-bottom: none; |
| | | padding: 4px 2px 8px; |
| | | } |
| | | |
| | | .el-collapse-item__content { |
| | | padding: 16px; |
| | | background: #fff; |
| | | border-radius: 8px; |
| | | border: 1px solid #ebeef5; |
| | | box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04); |
| | | } |
| | | } |
| | | |
| | | .el-form-item { |
| | | margin-bottom: 12px; |
| | | } |
| | | } |
| | | </style> |