Merge branch 'dev' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into dev
This commit is contained in:
		| @@ -10,8 +10,8 @@ | ||||
|       </template> | ||||
|     </ai-search-bar> | ||||
|     <ai-table :tableData="tableData" :total="page.total" :current.sync="page.current" :colConfigs="columns" | ||||
|               :size.sync="page.size" border @getList="getTableData" tableSize="mini"> | ||||
|       <el-table-column slot="chb" width="100px"> | ||||
|               :size.sync="page.size" @getList="getTableData" tableSize="mini" :dict="dict" v-bind="$attrs"> | ||||
|       <el-table-column slot="chb" width="100px" v-if="!disabled"> | ||||
|         <template #header> | ||||
|           <el-checkbox v-if="multiple" v-model="selectAll" @change="handleCheckAll"/> | ||||
|         </template> | ||||
| @@ -40,13 +40,15 @@ export default { | ||||
|       default: () => [ | ||||
|         {prop: 'label', label: "应用名称"}, | ||||
|         {prop: 'project', label: "项目/框架"}, | ||||
|         {prop: 'category', label: "分类"}, | ||||
|         {prop: 'category', label: "分类", dict: "appsCategory"}, | ||||
|         {prop: 'name', label: "模块名"}, | ||||
|       ] | ||||
|     }, | ||||
|     nodeKey: {default: "id"}, | ||||
|     searchKey: {default: "name"}, | ||||
|     multiple: Boolean | ||||
|     multiple: Boolean, | ||||
|     disabled: Boolean, | ||||
|     meta: {default: () => []} | ||||
|   }, | ||||
|   data() { | ||||
|     return { | ||||
| @@ -73,25 +75,31 @@ export default { | ||||
|   }, | ||||
|   methods: { | ||||
|     getTableData() { | ||||
|       let {page, search, action, nodeKey} = this | ||||
|       this.instance?.post(action, null, { | ||||
|       const {page, search, action, meta, searchKey, dict} = this | ||||
|       if (meta.length > 0) { | ||||
|         const reg = new RegExp(search[searchKey]) | ||||
|         this.handleTableData(meta.filter(e => reg.test(e.label) || reg.test(e.name) || reg.test(dict.getLabel('appsCategory', e.category)))) | ||||
|       } else this.instance?.post(action, null, { | ||||
|         params: {...page, ...search} | ||||
|       }).then(res => { | ||||
|         if (res?.data) { | ||||
|           const list = res.data.records || res.data || [] | ||||
|           list.map(e => { | ||||
|             e.category = e.libPath.replace(/^\/[^\/]+\/([^\/]+)\/.+/, '$1') | ||||
|             if (/\/project\//.test(e.libPath)) { | ||||
|               e.project = e.libPath.replace(/.*project\/([^\/]+)\/.+/, '$1') | ||||
|             } else if (/\/core\//.test(e.libPath)) { | ||||
|               e.project = "core" | ||||
|             } else e.project = "standard" | ||||
|           }) | ||||
|           this.tableData = list.map(e => ({...e, checked: this.selected.includes(e[nodeKey])})) | ||||
|           this.page.total = res.data.total | ||||
|           this.handleTableData(res.data.records || res.data || []) | ||||
|         } | ||||
|       }) | ||||
|     }, | ||||
|     handleTableData(list) { | ||||
|       const {nodeKey} = this | ||||
|       list.map(e => { | ||||
|         e.category = e.libPath.replace(/^\/[^\/]+\/([^\/]+)\/.+/, '$1') | ||||
|         if (/\/project\//.test(e.libPath)) { | ||||
|           e.project = e.libPath.replace(/.*project\/([^\/]+)\/.+/, '$1') | ||||
|         } else if (/\/core\//.test(e.libPath)) { | ||||
|           e.project = "core" | ||||
|         } else e.project = "standard" | ||||
|       }) | ||||
|       this.tableData = list.map(e => ({...e, checked: this.selected.includes(e[nodeKey])})) | ||||
|     }, | ||||
|     handleCheck(row) { | ||||
|       const {nodeKey} = this | ||||
|       if (this.multiple) { | ||||
| @@ -116,6 +124,7 @@ export default { | ||||
|     } | ||||
|   }, | ||||
|   created() { | ||||
|     this.dict.load('appsCategory') | ||||
|     this.$set(this.search, this.searchKey, "") | ||||
|     this.getTableData() | ||||
|   } | ||||
|   | ||||
| @@ -24,7 +24,7 @@ export default { | ||||
|     } | ||||
|   }, | ||||
|   created() { | ||||
|     this.dict.load('yesOrNo','systemType') | ||||
|     this.dict.load('yesOrNo', 'systemType', 'appsCategory') | ||||
|   } | ||||
| } | ||||
| </script> | ||||
|   | ||||
| @@ -3,47 +3,54 @@ | ||||
|     <ai-detail> | ||||
|       <ai-title slot="title" :title="pageTitle" isShowBottomBorder/> | ||||
|       <template #content> | ||||
|         <el-form ref="AddForm" :model="form" size="small" label-width="120px" :rules="rules"> | ||||
|           <ai-card title="基本信息"> | ||||
|             <template #content> | ||||
|               <el-form-item label="项目/系统名称" prop="name"> | ||||
|                 <el-input v-model="form.name" placeholder="请输入" clearable/> | ||||
|               </el-form-item> | ||||
|               <el-row type="flex"> | ||||
|                 <div class="fill"> | ||||
|                   <el-form-item label="系统类型" prop="type"> | ||||
|                     <ai-select v-model="form.type" :selectList="dict.getDict('systemType')"/> | ||||
|         <el-tabs tab-position="left"> | ||||
|           <el-tab-pane label="方案设置"> | ||||
|             <el-form ref="AddForm" :model="form" size="small" label-width="120px" :rules="rules"> | ||||
|               <ai-card title="基本信息"> | ||||
|                 <template #content> | ||||
|                   <el-form-item label="项目/系统名称" prop="name"> | ||||
|                     <el-input v-model="form.name" placeholder="请输入" clearable/> | ||||
|                   </el-form-item> | ||||
|                   <el-form-item label="更新项目路径" prop="dist"> | ||||
|                     <el-input v-model="form.dist" placeholder="常填写nginx路径,下载包从这里取" clearable/> | ||||
|                   </el-form-item> | ||||
|                 </div> | ||||
|                 <div class="fill mar-l16"> | ||||
|                   <el-form-item label="库项目根路径" prop="customPath"> | ||||
|                     <el-input v-model="form.customPath" placeholder="请输入" clearable/> | ||||
|                   </el-form-item> | ||||
|                   <el-form-item label="版本号" prop="version"> | ||||
|                     <el-input v-model="form.version" placeholder="请输入" clearable/> | ||||
|                   </el-form-item> | ||||
|                 </div> | ||||
|               </el-row> | ||||
|             </template> | ||||
|           </ai-card> | ||||
|           <ai-card title="主库应用"> | ||||
|             <template #content> | ||||
|               <ai-lib-table v-if="form.type" v-model="form.apps" v-bind="$props" multiple searchKey="name" | ||||
|                             :action="`/node/wechatapps/list?type=${form.type}&isMain=1`"/> | ||||
|               <ai-empty v-else>请先选择系统类型</ai-empty> | ||||
|             </template> | ||||
|           </ai-card> | ||||
|           <ai-card title="扩展设置"> | ||||
|             <template #content> | ||||
|               <el-form-item label="主包应用设置" prop="extra"> | ||||
|                   <el-row type="flex"> | ||||
|                     <div class="fill"> | ||||
|                       <el-form-item label="系统类型" prop="type"> | ||||
|                         <ai-select v-model="form.type" :selectList="dict.getDict('systemType')"/> | ||||
|                       </el-form-item> | ||||
|                       <el-form-item label="更新项目路径" prop="dist"> | ||||
|                         <el-input v-model="form.dist" placeholder="常填写nginx路径,下载包从这里取" clearable/> | ||||
|                       </el-form-item> | ||||
|                     </div> | ||||
|                     <div class="fill mar-l16"> | ||||
|                       <el-form-item label="库项目根路径" prop="customPath"> | ||||
|                         <el-input v-model="form.customPath" placeholder="请输入" clearable/> | ||||
|                       </el-form-item> | ||||
|                       <el-form-item label="版本号" prop="version"> | ||||
|                         <el-input v-model="form.version" placeholder="请输入" clearable/> | ||||
|                       </el-form-item> | ||||
|                     </div> | ||||
|                   </el-row> | ||||
|                 </template> | ||||
|               </ai-card> | ||||
|               <ai-card title="主库应用"> | ||||
|                 <template #content> | ||||
|                   <ai-lib-table v-if="form.type" v-model="form.apps" v-bind="$props" multiple searchKey="name" | ||||
|                                 :action="`/node/wechatapps/list?type=${form.type}&isMain=1`" border/> | ||||
|                   <ai-empty v-else>请先选择系统类型</ai-empty> | ||||
|                 </template> | ||||
|               </ai-card> | ||||
|               <ai-card title="扩展设置"> | ||||
|                 <template #content> | ||||
|                   <el-form-item label="主包应用设置" prop="extra"> | ||||
|  | ||||
|               </el-form-item> | ||||
|             </template> | ||||
|           </ai-card> | ||||
|         </el-form> | ||||
|                   </el-form-item> | ||||
|                 </template> | ||||
|               </ai-card> | ||||
|             </el-form> | ||||
|           </el-tab-pane> | ||||
|           <el-tab-pane label="方案应用" lazy> | ||||
|             <ai-lib-table :meta="appList" :isShowPagination="false" v-bind="$props" disabled/> | ||||
|           </el-tab-pane> | ||||
|         </el-tabs> | ||||
|       </template> | ||||
|       <template #footer> | ||||
|         <el-button @click="back">取消</el-button> | ||||
| @@ -67,6 +74,17 @@ export default { | ||||
|   computed: { | ||||
|     isEdit: v => !!v.$route.query.id, | ||||
|     pageTitle: v => v.isEdit ? "编辑定制方案" : "新增定制方案", | ||||
|     appList() { | ||||
|       return this.form.appList?.map(e => { | ||||
|         e.category = e.libPath.replace(/^\/[^\/]+\/([^\/]+)\/.+/, '$1') | ||||
|         if (/\/project\//.test(e.libPath)) { | ||||
|           e.project = e.libPath.replace(/.*project\/([^\/]+)\/.+/, '$1') | ||||
|         } else if (/\/core\//.test(e.libPath)) { | ||||
|           e.project = "core" | ||||
|         } else e.project = "standard" | ||||
|         return e | ||||
|       }) | ||||
|     } | ||||
|   }, | ||||
|   data() { | ||||
|     return { | ||||
|   | ||||
| @@ -1,149 +1,45 @@ | ||||
| <template> | ||||
|   <ai-list class="addressBook"> | ||||
|   <ai-list class="AppAnnounce"> | ||||
|     <template slot="title"> | ||||
|       <ai-title title="通讯录管理" isShowBottomBorder></ai-title> | ||||
|     </template> | ||||
|     <template #left> | ||||
|       <div class="addressBook-left"> | ||||
|         <div class="addressBook-left__title"> | ||||
|           <h2 @click="tabIndex = 0, search.current = 1, getList()" :class="[tabIndex === 0 ? 'tab-active' : '']"> | ||||
|             组织架构</h2> | ||||
|           <h2 @click="tabIndex = 1, search.current = 1, getList()" :class="[tabIndex === 1 ? 'tab-active' : '']">标签</h2> | ||||
|         </div> | ||||
|         <div class="addressBook-left__list--title" v-if="tabIndex === 0"> | ||||
|           <el-input | ||||
|               size="mini" | ||||
|               placeholder="请输入部门名称" | ||||
|               v-model="unitName" | ||||
|               suffix-icon="iconfont iconSearch"> | ||||
|           </el-input> | ||||
|         </div> | ||||
|         <div class="addressBook-left__list--title" v-if="tabIndex === 1"> | ||||
|           <el-button size="mini" icon="iconfont iconAdd" @click="isShowTags = true">添加标签</el-button> | ||||
|           <el-input | ||||
|               class="addressBook-left__list--search" | ||||
|               size="mini" | ||||
|               clearable | ||||
|               style="width: 154px;" | ||||
|               placeholder="请输入标签名称" | ||||
|               v-model="tagName" | ||||
|               suffix-icon="iconfont iconSearch"> | ||||
|           </el-input> | ||||
|         </div> | ||||
|         <div class="addressBook-left__list--wrapper"> | ||||
|           <div class="addressBook-left__list" v-show="tabIndex === 0"> | ||||
|             <el-tree | ||||
|                 :filter-node-method="filterNode" | ||||
|                 ref="tree" | ||||
|                 :props="defaultProps" | ||||
|                 node-key="id" | ||||
|                 :data="unitList" | ||||
|                 highlight-current | ||||
|                 @node-contextmenu="nodeContextmenu" | ||||
|                 :current-node-key="search.departmentId" | ||||
|                 :default-expanded-keys="defaultExpanded" | ||||
|                 :default-checked-keys="defaultChecked" | ||||
|                 @current-change="onTreeChange"> | ||||
|               <template v-slot="{ node, data }"> | ||||
|                 <ai-open-data type="departmentName" :openid="data.id"/> | ||||
|               </template> | ||||
|             </el-tree> | ||||
|             <ul | ||||
|                 v-if="isShowMenu" | ||||
|                 class="el-dropdown-menu el-popper" | ||||
|                 :style="{top: menuInfo.y + 'px', left: menuInfo.x + 'px', position: 'fixed', zIndex: 2023}" | ||||
|                 x-placement="top-end"> | ||||
|               <li class="el-dropdown-menu__item" @click="handleTreeCommand('add', menuInfo.node)">添加子部门</li> | ||||
|               <li class="el-dropdown-menu__item" @click="handleTreeCommand('edit', menuInfo.node)">修改名称</li> | ||||
|               <li class="el-dropdown-menu__item" @click="handleTreeCommand('remove', menuInfo.node)">删除</li> | ||||
|               <li class="el-dropdown-menu__item" :class="[!menuInfo.node.i ? 'is-disabled' : '']" | ||||
|                   @click="handleTreeCommand('top', menuInfo.node)">上移 | ||||
|               </li> | ||||
|               <li | ||||
|                   class="el-dropdown-menu__item" | ||||
|                   :class="[(menuInfo.node.i === menuInfo.node.len - 1) || (!menuInfo.node.i && menuInfo.node.i !== 0) ? 'is-disabled' : '']" | ||||
|                   @click="handleTreeCommand('bottom', menuInfo.node)">下移 | ||||
|               </li> | ||||
|             </ul> | ||||
|           </div> | ||||
|           <div class="addressBook-left__list" v-show="tabIndex === 1"> | ||||
|             <div class="addressBook-left__tags"> | ||||
|               <div | ||||
|                   @click="changeTag(index)" | ||||
|                   class="addressBook-left__tags--item" | ||||
|                   :class="[currIndex === index ? 'addressBook-left__tags--item-active' : '']" | ||||
|                   v-for="(item, index) in tagsList" :key="index"> | ||||
|                 <span>{{ item.tagname }}</span> | ||||
|                 <el-dropdown @command="e => handleCommand(e, item)"> | ||||
|                   <i class="iconfont iconmore"></i> | ||||
|                   <el-dropdown-menu slot="dropdown"> | ||||
|                     <el-dropdown-item command="edit">编辑</el-dropdown-item> | ||||
|                     <el-dropdown-item command="remove">删除</el-dropdown-item> | ||||
|                   </el-dropdown-menu> | ||||
|                 </el-dropdown> | ||||
|               </div> | ||||
|             </div> | ||||
|           </div> | ||||
|         </div> | ||||
|       </div> | ||||
|       <ai-title title="群发居民群" isShowBottomBorder> | ||||
|         <template #sub> | ||||
|           <span>管理员统一创建宣发任务,选择要发送的居民群后通知群主发送,群主确认后即可群发到居民群。群主向同一个居民群每天最多可群发10条消息。</span> | ||||
|         </template> | ||||
|       </ai-title> | ||||
|     </template> | ||||
|     <template slot="content"> | ||||
|       <ai-search-bar class="search-bar"> | ||||
|         <template #left> | ||||
|           <el-button size="small" type="primary" icon="iconfont iconAdd" v-if="tabIndex === 0" @click="toAdd('')">添加成员 | ||||
|           </el-button> | ||||
|           <ai-import :instance="instance" :dict="dict" v-if="tabIndex === 0" type="wxcp/wxuser" name="通讯录管理" | ||||
|                      :importParams="{departmentId:search.departmentId}"/> | ||||
|           <el-button size="small" icon="iconfont iconUpdate_Files" v-if="tabIndex === 0" :loading="btnLoading" | ||||
|                      @click="syncMembers">同步数据 | ||||
|           </el-button> | ||||
|           <ai-user-get refs="addTags" :instance="instance" v-model="users" @change="onChooseUser" | ||||
|                               :disabled="currIndex < 0" v-if="tabIndex === 1" sass> | ||||
|             <el-button size="small" :disabled="currIndex < 0" type="primary" icon="iconfont iconAdd">添加成员</el-button> | ||||
|           </ai-user-get> | ||||
|         </template> | ||||
|         <template slot="right"> | ||||
|           <el-input | ||||
|               v-model="search.name" | ||||
|               size="small" | ||||
|               v-throttle="() => {search.current = 1, getList()}" | ||||
|               placeholder="请输入成员姓名、手机号或标签名称" | ||||
|               clearable | ||||
|               @clear="search.current = 1, search.name = '', getList()" | ||||
|               suffix-icon="iconfont iconSearch"> | ||||
|             v-model="search.name" | ||||
|             size="small" | ||||
|             v-throttle="() => {search.current = 1, getList()}" | ||||
|             placeholder="请输入成员姓名、手机号或标签名称" | ||||
|             clearable | ||||
|             @clear="search.current = 1, search.name = '', getList()" | ||||
|             suffix-icon="iconfont iconSearch"> | ||||
|           </el-input> | ||||
|         </template> | ||||
|       </ai-search-bar> | ||||
|       <ai-table | ||||
|           :tableData="tableData" | ||||
|           :col-configs="colConfigs" | ||||
|           :total="total" | ||||
|           v-loading="loading" | ||||
|           style="margin-top: 6px;" | ||||
|           :current.sync="search.current" | ||||
|           :size.sync="search.size" | ||||
|           @handleSelectionChange="handleSelectionChange" | ||||
|           @getList="getList"> | ||||
|         <el-table-column slot="avatar" label="" align="right" width="100px"> | ||||
|           <template slot-scope="{ row }"> | ||||
|             <img class="table-avatar" :src="row.avatar || 'https://cdn.cunwuyun.cn/dvcp/h5/defaultAvatar.png'"> | ||||
|           </template> | ||||
|         </el-table-column> | ||||
|         :tableData="tableData" | ||||
|         :col-configs="colConfigs" | ||||
|         :total="total" | ||||
|         v-loading="loading" | ||||
|         style="margin-top: 6px;" | ||||
|         :current.sync="search.current" | ||||
|         :size.sync="search.size" | ||||
|         @handleSelectionChange="handleSelectionChange" | ||||
|         @getList="getList"> | ||||
|         <el-table-column slot="username" label="姓名"> | ||||
|           <template slot-scope="{ row }"> | ||||
|             <ai-open-data style="height: 20px" type="userName" :openid="row.name"/> | ||||
|           </template> | ||||
|         </el-table-column> | ||||
|         <el-table-column slot="tags" label="标签" align="left"> | ||||
|           <template slot-scope="{ row }"> | ||||
|             <div class="table-tags" v-if="row.tagNames"> | ||||
|               <el-tag type="info" v-for="(item, index) in row.tagNames.split('、')" size="small" :key="index">{{ | ||||
|                   item | ||||
|                 }} | ||||
|               </el-tag> | ||||
|             </div> | ||||
|           </template> | ||||
|         </el-table-column> | ||||
|         <el-table-column slot="options" width="120px" fixed="right" label="操作" align="center"> | ||||
|           <template slot-scope="{ row }"> | ||||
|             <div class="table-options"> | ||||
| @@ -153,38 +49,7 @@ | ||||
|             </div> | ||||
|           </template> | ||||
|         </el-table-column> | ||||
|         <div slot="paginationBtns" class="addressBook-table__btns"> | ||||
|           <span style="margin-right: 8px;" @click="removeAll">{{ tabIndex === 0 ? '批量删除' : '批量移除' }}</span> | ||||
|           <ai-user-get :instance="instance" v-model="department" sass @change="onDepartment" | ||||
|                               v-if="tabIndex === 0"> | ||||
|             <span>批量导出</span> | ||||
|           </ai-user-get> | ||||
|         </div> | ||||
|       </ai-table> | ||||
|       <ai-dialog | ||||
|           :visible.sync="isShowTags" | ||||
|           width="590px" | ||||
|           :title="tagId ? '编辑标签' : '添加标签'" | ||||
|           @close="onClose" | ||||
|           @onConfirm="onFormConfirm"> | ||||
|         <el-form ref="tagForm" :model="tagForm" label-width="110px" label-position="right"> | ||||
|           <el-form-item label="标签名称" prop="tagname" :rules="[{ required: true, message: '请输入标签名称', trigger: 'blur' }]"> | ||||
|             <el-input size="small" placeholder="请输入标签名称" v-model="tagForm.tagname"></el-input> | ||||
|           </el-form-item> | ||||
|         </el-form> | ||||
|       </ai-dialog> | ||||
|       <ai-dialog | ||||
|           :visible.sync="isShowDepart" | ||||
|           width="590px" | ||||
|           :title="departId ? '修改名称' : '添加部门'" | ||||
|           @close="onClose" | ||||
|           @onConfirm="onDepartConfirm"> | ||||
|         <el-form ref="departForm" :model="departForm" label-width="110px" label-position="right"> | ||||
|           <el-form-item label="部门名称" prop="name" :rules="[{ required: true, message: '请输入部门名称', trigger: 'blur' }]"> | ||||
|             <el-input size="small" placeholder="请输入部门名称" v-model="departForm.name"></el-input> | ||||
|           </el-form-item> | ||||
|         </el-form> | ||||
|       </ai-dialog> | ||||
|     </template> | ||||
|   </ai-list> | ||||
| </template> | ||||
| @@ -698,294 +563,7 @@ export default { | ||||
| </script> | ||||
|  | ||||
| <style lang="scss" scoped> | ||||
| .addressBook { | ||||
|   .addressBook-table__btns { | ||||
|     display: flex; | ||||
|     align-items: center; | ||||
|   } | ||||
|  | ||||
|  | ||||
|   .table-tags { | ||||
|     .el-tag { | ||||
|       margin-right: 8px; | ||||
|       margin-bottom: 8px; | ||||
|  | ||||
|       &:last-child { | ||||
|         margin-right: 0; | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   .import-wrapper { | ||||
|     & > h2 { | ||||
|       margin-bottom: 8px; | ||||
|       font-size: 16px; | ||||
|       color: #222222; | ||||
|       font-weight: Bold; | ||||
|     } | ||||
|  | ||||
|     .import-wrapper__tips { | ||||
|       line-height: 1; | ||||
|       margin-bottom: 24px; | ||||
|  | ||||
|       div { | ||||
|         display: flex; | ||||
|         margin-bottom: 8px; | ||||
|         color: #222222; | ||||
|         font-size: 14px; | ||||
|  | ||||
|         span { | ||||
|           cursor: pointer; | ||||
|           color: #2266FF; | ||||
|  | ||||
|           &:hover { | ||||
|             opacity: 0.8; | ||||
|             text-decoration: underline; | ||||
|           } | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     .import-files { | ||||
|       i { | ||||
|         display: block; | ||||
|         margin-top: 8px; | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     i { | ||||
|       color: #999999; | ||||
|       font-size: 12px; | ||||
|       font-style: normal; | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   .tree-container { | ||||
|     position: relative; | ||||
|     display: flex; | ||||
|     align-items: center; | ||||
|     justify-content: space-between; | ||||
|     width: 100%; | ||||
|   .AppAnnounce { | ||||
|     height: 100%; | ||||
|  | ||||
|     .tree-name { | ||||
|       padding-right: 30px; | ||||
|     } | ||||
|  | ||||
|     i { | ||||
|       position: absolute; | ||||
|       top: 50%; | ||||
|       right: 8px; | ||||
|       transform: translateY(-50%); | ||||
|       padding-right: 8px; | ||||
|       font-weight: normal; | ||||
|       color: #fff; | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   .el-tag { | ||||
|     margin-right: 8px; | ||||
|     border: 1px solid #D0D4DC; | ||||
|     background: #F3F4F7; | ||||
|     border-radius: 4px; | ||||
|     font-size: 13px; | ||||
|     color: #222222; | ||||
|  | ||||
|     &:last-child { | ||||
|       margin-right: 0; | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   .table-avatar { | ||||
|     width: 40px; | ||||
|     height: 40px; | ||||
|     margin-top: 3px; | ||||
|     border-radius: 2px; | ||||
|     border: 1px solid #CCCCCC; | ||||
|   } | ||||
|  | ||||
|   .el-button--mini, .el-button--mini.is-round { | ||||
|     height: 28px; | ||||
|     line-height: 28px; | ||||
|     padding: 0; | ||||
|     font-size: 12px; | ||||
|  | ||||
|     ::v-deep span { | ||||
|       margin-left: 0; | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   .addressBook-left__list--title { | ||||
|     display: flex; | ||||
|     align-items: center; | ||||
|     margin: 8px 8px 0; | ||||
|  | ||||
|     .addressBook-left__list--search { | ||||
|       flex: 1; | ||||
|  | ||||
|       ::v-deep input { | ||||
|         width: 100%; | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     .el-button { | ||||
|       width: 84px; | ||||
|       flex-shrink: 1; | ||||
|       margin-right: 8px; | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   .addressBook-left { | ||||
|     width: 100%; | ||||
|     height: auto; | ||||
|     background: #FAFAFB; | ||||
|  | ||||
|     .addressBook-left__title { | ||||
|       display: flex; | ||||
|       align-items: center; | ||||
|       width: 100%; | ||||
|       height: 40px; | ||||
|       background: #ffffff; | ||||
|  | ||||
|       h2 { | ||||
|         flex: 1; | ||||
|         height: 100%; | ||||
|         line-height: 40px; | ||||
|         color: #222; | ||||
|         font-size: 14px; | ||||
|         text-align: center; | ||||
|         cursor: pointer; | ||||
|         border-bottom: 2px solid transparent; | ||||
|  | ||||
|         &.tab-active { | ||||
|           color: #2266FF; | ||||
|           border-bottom: 2px solid #2266FF; | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     // ::-webkit-scrollbar { | ||||
|     //   width: 1px; | ||||
|     // } | ||||
|  | ||||
|     .addressBook-left__list--wrapper { | ||||
|       height: calc(100% - 68px); | ||||
|       padding: 8px; | ||||
|     } | ||||
|  | ||||
|     .addressBook-left__list { | ||||
|       width: 100%; | ||||
|       height: 100%; | ||||
|       overflow: auto; | ||||
|  | ||||
|       ::v-deep .el-tree { | ||||
|         width: fit-content; | ||||
|         min-width: 100%; | ||||
|       } | ||||
|  | ||||
|       ::v-deep .el-scrollbar__wrap { | ||||
|         margin-bottom: 0 !important; | ||||
|         overflow-x: hidden; | ||||
|  | ||||
|         .el-scrollbar__view { | ||||
|           width: fit-content; | ||||
|           min-width: 100%; | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .addressBook-left__tags--item { | ||||
|         display: flex; | ||||
|         align-items: center; | ||||
|         justify-content: space-between; | ||||
|         height: 40px; | ||||
|         padding: 0 8px 0 16px; | ||||
|         cursor: pointer; | ||||
|         color: #222222; | ||||
|  | ||||
|         &.addressBook-left__tags--item-active, &:hover { | ||||
|           background: #E8EFFF; | ||||
|           color: #2266FF; | ||||
|  | ||||
|           i, span { | ||||
|             color: #2266FF; | ||||
|           } | ||||
|         } | ||||
|  | ||||
|         span { | ||||
|           font-size: 14px; | ||||
|         } | ||||
|  | ||||
|         i { | ||||
|           cursor: pointer; | ||||
|           color: #8e9ebf; | ||||
|           font-size: 16px; | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       span { | ||||
|         color: #222222; | ||||
|         font-size: 14px; | ||||
|       } | ||||
|  | ||||
|       ::v-deep .el-tree { | ||||
|         background: transparent; | ||||
|  | ||||
|         .el-tree-node__expand-icon.is-leaf { | ||||
|           color: transparent !important; | ||||
|         } | ||||
|  | ||||
|         .el-tree-node__content > .el-tree-node__expand-icon { | ||||
|           padding: 4px; | ||||
|         } | ||||
|  | ||||
|         .el-tree-node__content { | ||||
|           height: 32px; | ||||
|         } | ||||
|  | ||||
|         .el-tree__empty-text { | ||||
|           color: #222; | ||||
|           font-size: 14px; | ||||
|         } | ||||
|  | ||||
|         .el-tree-node__children .el-tree-node__content { | ||||
|           height: 32px; | ||||
|         } | ||||
|  | ||||
|         .el-tree-node__content:hover { | ||||
|           background: #E8EFFF; | ||||
|           color: #222222; | ||||
|           border-radius: 2px; | ||||
|         } | ||||
|  | ||||
|         .is-current > .el-tree-node__content { | ||||
|           &:hover { | ||||
|             background: #2266FF; | ||||
|             color: #fff; | ||||
|           } | ||||
|  | ||||
|           background: #2266FF; | ||||
|  | ||||
|           span { | ||||
|             color: #fff; | ||||
|           } | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   ::v-deep .ai-list__content--right { | ||||
|     flex: 1; | ||||
|     min-width: 0; | ||||
|     margin-left: 1px; | ||||
|     box-shadow: none; | ||||
|  | ||||
|     .ai-list__content--right-wrapper { | ||||
|       width: 100%; | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   ::v-deep ai-open-data { | ||||
|   } | ||||
|  | ||||
| } | ||||
| </style> | ||||
|   | ||||
| @@ -104,11 +104,10 @@ | ||||
| import {mapState} from "vuex"; | ||||
| import EnterpriseDialog from "../../../components/enterpriseDialog"; | ||||
| import PersonCreditReport from "../../../components/personCreditReport"; | ||||
| import AiDialogBtn from "../../../components/AiDialogBtn"; | ||||
|  | ||||
| export default { | ||||
|   name: "loanDetail", | ||||
|   components: {AiDialogBtn, PersonCreditReport, EnterpriseDialog}, | ||||
|   components: {PersonCreditReport, EnterpriseDialog}, | ||||
|   props: { | ||||
|     instance: Function, | ||||
|     dict: Object, | ||||
|   | ||||
| @@ -58,11 +58,10 @@ | ||||
| import {mapState} from "vuex"; | ||||
| import EnterpriseDialog from "../../../components/enterpriseDialog"; | ||||
| import PersonCreditReport from "../../../components/personCreditReport"; | ||||
| import AiDialogBtn from "../../../components/AiDialogBtn"; | ||||
|  | ||||
| export default { | ||||
|   name: "needsDetail", | ||||
|   components: {AiDialogBtn, PersonCreditReport, EnterpriseDialog}, | ||||
|   components: {PersonCreditReport, EnterpriseDialog}, | ||||
|   props: { | ||||
|     instance: Function, | ||||
|     dict: Object, | ||||
|   | ||||
| @@ -84,12 +84,11 @@ | ||||
| import {mapState} from "vuex"; | ||||
| import EnterpriseDialog from "../../../components/enterpriseDialog"; | ||||
| import PersonCreditReport from "../../../components/personCreditReport"; | ||||
| import AiDialogBtn from "../../../components/AiDialogBtn"; | ||||
|  | ||||
|  | ||||
| export default { | ||||
|   name: "grabDetail", | ||||
|   components: {AiDialogBtn, PersonCreditReport, EnterpriseDialog}, | ||||
|   components: {PersonCreditReport, EnterpriseDialog}, | ||||
|   props: { | ||||
|     instance: Function, | ||||
|     dict: Object, | ||||
|   | ||||
| @@ -302,7 +302,6 @@ import moment from 'dayjs' | ||||
| import {mapState} from "vuex"; | ||||
| import Viewer from 'v-viewer' | ||||
| import Vue from 'vue' | ||||
| import AiDialogBtn from "../../../../components/AiDialogBtn"; | ||||
| import PersonCreditReport from "../../../../components/personCreditReport"; | ||||
| import EnterpriseDialog from "../../../../components/enterpriseDialog"; | ||||
|  | ||||
| @@ -310,7 +309,7 @@ Vue.use(Viewer) | ||||
|  | ||||
| export default { | ||||
|   name: "approvalDetail", | ||||
|   components: {EnterpriseDialog, PersonCreditReport, AiDialogBtn}, | ||||
|   components: {EnterpriseDialog, PersonCreditReport}, | ||||
|   inject: ['approval'], | ||||
|   props: { | ||||
|     instance: Function, | ||||
|   | ||||
| @@ -1,34 +0,0 @@ | ||||
| <template> | ||||
|   <section class="AiDialogBtn"> | ||||
|     <div @click="dialog=true"> | ||||
|       <slot v-if="$scopedSlots.btn" name="btn"/> | ||||
|       <el-button type="text">{{ text }}</el-button> | ||||
|     </div> | ||||
|     <ai-dialog :visible.sync="dialog" :title="dialogTitle" width="1200px" customFooter> | ||||
|       <slot/> | ||||
|       <template #footer> | ||||
|         <el-button @click="dialog=false">关闭</el-button> | ||||
|       </template> | ||||
|     </ai-dialog> | ||||
|   </section> | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
| export default { | ||||
|   name: "AiDialogBtn", | ||||
|   props: { | ||||
|     text: {default: "点击弹窗"}, | ||||
|     dialogTitle: {default: "展示信息"} | ||||
|   }, | ||||
|   data() { | ||||
|     return { | ||||
|       dialog: false | ||||
|     } | ||||
|   } | ||||
| } | ||||
| </script> | ||||
|  | ||||
| <style lang="scss" scoped> | ||||
| .AiDialogBtn { | ||||
| } | ||||
| </style> | ||||
		Reference in New Issue
	
	Block a user