Merge remote-tracking branch 'origin/dev' into dev
This commit is contained in:
		| @@ -4,17 +4,20 @@ | ||||
|       <u-navbar title="走访慰问" back-icon-color="#fff" title-color="#fff" title-width="300" title-size="36" :border-bottom="false" :background="backgroundNavbar"> </u-navbar> | ||||
|  | ||||
|       <div class="header-top"> | ||||
|         <u-tabs :list="tabList" :is-scroll="false" :current="current" height="96" bg-color="#3975C6" inactive-color="#fff" active-color="#fff" @change="change"></u-tabs> | ||||
|         <u-tabs :list="tabList" :is-scroll="false" :current="currentTabs" height="96" bg-color="#3975C6" inactive-color="#fff" active-color="#fff" @change="change"></u-tabs> | ||||
|       </div> | ||||
|  | ||||
|       <div class="header-middle"> | ||||
|         <div class="currentLeft" v-if="current == 0"> | ||||
|         <div class="currentLeft" v-if="currentTabs == 0"> | ||||
|           <div class="currentLeft-top"> | ||||
|             <div class="left"> | ||||
|               <u-icon name="map"></u-icon> | ||||
|               <div class="btns" style="display: inline-block" @click="show = true"> | ||||
|               <img src="./components/images/icon2.png" alt="" /> | ||||
|  | ||||
|               <ai-area-picker v-model="areaId" ref="areaIds" :areaId="areaId" @select="areaSelect" style="color: #fff"> </ai-area-picker> | ||||
|  | ||||
|               <!-- <div class="btns" style="display: inline-block" @click="show = true"> | ||||
|                 <u-icon name="arrow-down"></u-icon> | ||||
|               </div> | ||||
|               </div> --> | ||||
|             </div> | ||||
|  | ||||
|             <u-search v-model="keyword" :clearabled="true" placeholder="请输入标题" :show-action="false" bg-color="#1F5CAF" search-icon-color="#E2E8F1" color="#E2E8F1" height="58" @search="handerSearch" @clear="handerClear"></u-search> | ||||
| @@ -22,7 +25,6 @@ | ||||
|             <u-select v-model="show" :list="areaList"></u-select> | ||||
|           </div> | ||||
|  | ||||
|           <!-- v-if="data.length > 0" --> | ||||
|           <div @click.stop="btnHide" class="datas" v-if="data.length > 0"> | ||||
|             <div class="cards" @click.stop="toDetail" v-for="(item, i) in 4" :key="i"> | ||||
|               <div class="cards-top"> | ||||
| @@ -62,7 +64,7 @@ | ||||
|           </div> | ||||
|         </div> | ||||
|  | ||||
|         <div class="currentRight" v-if="current == 1">1</div> | ||||
|         <div class="currentRight" v-if="currentTabs == 1">1</div> | ||||
|       </div> | ||||
|  | ||||
|       <u-modal v-model="deletShow" content="您确认要删除该条信息吗?" :show-cancel-button="true" :mask-close-able="true" :show-title="false" @confirm="delet"></u-modal> | ||||
| @@ -75,14 +77,16 @@ | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
| import { mapState } from 'vuex' | ||||
| import AiEmpty from '../../components/AiEmpty.vue' | ||||
| import add from './components/add.vue' | ||||
| import detail from './components/detail.vue' | ||||
| import AiAreaPicker from '../../components/AiAreaPicker.vue' | ||||
|  | ||||
| export default { | ||||
|   name: 'AppWalkask', | ||||
|   appName: '走访慰问', | ||||
|   components: { AiEmpty, add, detail }, | ||||
|   components: { AiEmpty, add, detail, AiAreaPicker }, | ||||
|   props: {}, | ||||
|   data() { | ||||
|     return { | ||||
| @@ -98,7 +102,7 @@ export default { | ||||
|           name: '我的走访', | ||||
|         }, | ||||
|       ], | ||||
|       current: 0, | ||||
|       currentTabs: 0, | ||||
|       show: false, | ||||
|       areaList: [ | ||||
|         { | ||||
| @@ -117,14 +121,44 @@ export default { | ||||
|       isList: true, | ||||
|       comp: '', | ||||
|       params: null, | ||||
|       current: 1, | ||||
|       areaId: '', | ||||
|     } | ||||
|   }, | ||||
|   computed: {}, | ||||
|   onLoad() {}, | ||||
|   onShow() {}, | ||||
|   computed: { ...mapState(['user']) }, | ||||
|   created() { | ||||
|     console.log(this.user) | ||||
|     this.areaId = this.user.areaId | ||||
|     this.getList() | ||||
|   }, | ||||
|   mounted() {}, | ||||
|   methods: { | ||||
|     getList() { | ||||
|       this.$http | ||||
|         .post('/app/appvisitvondolence/list', null, { | ||||
|           params: { | ||||
|             size: 6, | ||||
|             current: this.current, | ||||
|             areaId: this.areaId, | ||||
|           }, | ||||
|         }) | ||||
|         .then((res) => { | ||||
|           if (res.code == 0) { | ||||
|             this.data = res.data.records | ||||
|           } | ||||
|         }) | ||||
|     }, | ||||
|  | ||||
|     areaSelect(e) { | ||||
|       if (e.type == 5) { | ||||
|         this.areaId = e.id | ||||
|       } else { | ||||
|         return this.$u.toast('请选择到村') | ||||
|       } | ||||
|     }, | ||||
|  | ||||
|     change(index) { | ||||
|       this.current = index | ||||
|       this.currentTabs = index | ||||
|     }, | ||||
|  | ||||
|     toAdd(item) { | ||||
| @@ -191,7 +225,13 @@ export default { | ||||
|         background: #3975c6; | ||||
|         padding: 24px 30px; | ||||
|         .left { | ||||
|           width: 50%; | ||||
|           width: 40%; | ||||
|           display: flex; | ||||
|           align-items: center; | ||||
|           img { | ||||
|             width: 48px; | ||||
|             height: 48px; | ||||
|           } | ||||
|         } | ||||
|       } | ||||
|  | ||||
|   | ||||
| @@ -6,11 +6,7 @@ | ||||
|       <div class="header-content"> | ||||
|         <u-form :model="forms" ref="uForm" label-width="auto"> | ||||
|           <u-form-item label="区域选择" prop="areaId" required style="position: relative"> | ||||
|             <u-input v-model="forms.areaId" disabled placeholder="请选择区域" @click="showAreaId = true" /> | ||||
|  | ||||
|             <u-select v-model="showAreaId" :list="areaIdlist" @confirm="changeAreaId"></u-select> | ||||
|  | ||||
|             <u-icon name="arrow-right" color="#CCCCCC" style="position: absolute; top: 25px; right: 30px"></u-icon> | ||||
|             <ai-area-picker v-model="forms.areaId" ref="areaIds" :areaId="areaIdProps" @select="areaSelect" style="color: #333"> </ai-area-picker> | ||||
|           </u-form-item> | ||||
|  | ||||
|           <u-form-item label="走访对象" prop="object" style="position: relative"> | ||||
| @@ -22,10 +18,11 @@ | ||||
|             <u-icon name="arrow-right" color="#CCCCCC" style="position: absolute; top: 25px; right: 30px"></u-icon> | ||||
|           </u-form-item> | ||||
|  | ||||
|           <u-form-item label="现实状态" prop="nowStstus" required style="position: relative"> | ||||
|             <u-input v-model="forms.nowStstus" disabled placeholder="请选择走访对象" @click="showStstus = true" /> | ||||
|           <u-form-item label="现实状态" prop="reality" required style="position: relative"> | ||||
|             <u-input v-model="forms.reality" disabled placeholder="请选择走访对象" @click="showStstus = true" /> | ||||
|  | ||||
|             <u-select v-model="showStstus" :list="Objectlist" @confirm="changeStstus"></u-select> | ||||
|             <!-- :disabled="!forms.object" --> | ||||
|             <u-select v-model="showStstus" :list="$dict.getDict('realityStatus')" value-name="dictValue" label-name="dictName" @confirm="changeStstus"></u-select> | ||||
|  | ||||
|             <u-icon name="arrow-right" color="#CCCCCC" style="position: absolute; top: 25px; right: 30px"></u-icon> | ||||
|           </u-form-item> | ||||
| @@ -56,23 +53,27 @@ | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
| import { mapState } from 'vuex' | ||||
| import AiUploader from '../../../components/AiUploader.vue' | ||||
| import AiBack from '../../../components/AiBack.vue' | ||||
| import walkObject from './walkObject.vue' | ||||
| import AiAreaPicker from '../../../components/AiAreaPicker' | ||||
|  | ||||
| export default { | ||||
|   name: 'add', | ||||
|   components: { AiUploader, AiBack, walkObject }, | ||||
|   components: { AiUploader, AiBack, walkObject, AiAreaPicker }, | ||||
|   props: {}, | ||||
|   data() { | ||||
|     return { | ||||
|       backgroundNavbar: { | ||||
|         backgroundColor: '#3975C6', | ||||
|       }, | ||||
|  | ||||
|       forms: { | ||||
|         areaId: '', | ||||
|         object: '', | ||||
|         nowStstus: '', | ||||
|         reality: '', | ||||
|         realitylabel: '', | ||||
|         things: '', | ||||
|         content: '', | ||||
|         avatar: [], | ||||
| @@ -102,18 +103,22 @@ export default { | ||||
|       showStstus: false, | ||||
|       flag: false, | ||||
|       addList: true, | ||||
|       areaIdProps: '', | ||||
|     } | ||||
|   }, | ||||
|   computed: {}, | ||||
|   onLoad() {}, | ||||
|   onShow() {}, | ||||
|   computed: { ...mapState(['user']) }, | ||||
|   created() { | ||||
|     this.areaIdProps = this.user.areaId | ||||
|     this.$dict.load('realityStatus').then(() => {}) | ||||
|   }, | ||||
|   mounted() {}, | ||||
|   methods: { | ||||
|     submit() { | ||||
|       if (this.flag) return | ||||
|  | ||||
|       this.$refs.uForm.validate((valid) => { | ||||
|         if (valid) { | ||||
|           if (!this.form.areaId) { | ||||
|           if (!this.areaId) { | ||||
|             return this.$u.toast('请选择走访对象') | ||||
|           } | ||||
|           if (!this.form.things) { | ||||
| @@ -125,7 +130,7 @@ export default { | ||||
|             .post(`/appjobresume/addOrUpdate`, { | ||||
|               areaId: this.forms.areaId, | ||||
|               object: this.forms.object, | ||||
|               nowStstus: this.forms.nowStstus, | ||||
|               reality: this.forms.reality == Number ? this.forms.reality : this.forms.realitylabel, | ||||
|               things: this.forms.things, | ||||
|               content: this.forms.content, | ||||
|               avatar: this.forms.avatar[0], | ||||
| @@ -145,10 +150,12 @@ export default { | ||||
|       }) | ||||
|     }, | ||||
|  | ||||
|     changeAreaId(e) { | ||||
|       console.log(e) | ||||
|       this.forms.areaId = e[0].value | ||||
|       this.forms.areaIdValue = e[0].label | ||||
|     areaSelect(e) { | ||||
|       if (e.type == 5) { | ||||
|         this.forms.areaId = e.id | ||||
|       } else { | ||||
|         return this.$u.toast('请选择到村') | ||||
|       } | ||||
|     }, | ||||
|  | ||||
|     changeObject(e) { | ||||
| @@ -159,8 +166,8 @@ export default { | ||||
|  | ||||
|     changeStstus(e) { | ||||
|       console.log(e) | ||||
|       this.forms.nowStstus = e[0].value | ||||
|       this.forms.nowStstuslabel = e[0].label | ||||
|       this.forms.reality = e[0].value | ||||
|       this.forms.realitylabel = e[0].label | ||||
|     }, | ||||
|  | ||||
|     toWalkObject() { | ||||
|   | ||||
| @@ -56,8 +56,8 @@ export default { | ||||
|     } | ||||
|   }, | ||||
|   computed: {}, | ||||
|   onLoad() {}, | ||||
|   onShow() {}, | ||||
|   created() {}, | ||||
|   mounted() {}, | ||||
|   methods: {}, | ||||
| } | ||||
| </script> | ||||
|   | ||||
							
								
								
									
										
											BIN
										
									
								
								src/apps/AppWalkask/components/images/icon1.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								src/apps/AppWalkask/components/images/icon1.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 396 B | 
							
								
								
									
										
											BIN
										
									
								
								src/apps/AppWalkask/components/images/icon2.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								src/apps/AppWalkask/components/images/icon2.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 766 B | 
| @@ -61,8 +61,8 @@ export default { | ||||
|     } | ||||
|   }, | ||||
|   computed: {}, | ||||
|   onLoad() {}, | ||||
|   onShow() {}, | ||||
|   created() {}, | ||||
|   mounted() {}, | ||||
|   methods: { | ||||
|     checkboxGroupChange(e) { | ||||
|       console.log(1, e) | ||||
|   | ||||
							
								
								
									
										222
									
								
								src/components/AiAreaPicker.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										222
									
								
								src/components/AiAreaPicker.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,222 @@ | ||||
| <template> | ||||
|   <section class="AiAreaPicker"> | ||||
|     <ai-search-popup mode="bottom" ref="areaSelector"> | ||||
|       <div slot="btn" @tap="handleInit"> | ||||
|         <slot v-if="$slots.default" /> | ||||
|         <div v-else class="areaSelector"> | ||||
|           <image :src="icon" class="location" /> | ||||
|           <div v-text="currentArea.name" /> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="areaSelector"> | ||||
|         <div class="fixedTop"> | ||||
|           <span v-for="(area, i) in fullArea" :key="area.id" v-text="area.name" :class="{ current: area.id == index }" @click="selectNode(area, i)" /> | ||||
|         </div> | ||||
|         <span v-text="currentArea.name" /> | ||||
|       </div> | ||||
|       <div class="pendingItem flexRow" flex v-for="op in list" :key="op.id"> | ||||
|         <div class="fill" :class="{ self: index == op.id }" v-html="op.name" @tap="handleSelect(op)" /> | ||||
|         <u-icon v-if="index != op.id" name="arrow-right" color="#ddd" @click="getChild(op)" /> | ||||
|       </div> | ||||
|     </ai-search-popup> | ||||
|   </section> | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
| import AiSearchPopup from './AiSearchPopup' | ||||
| import AiCell from './AiCell.vue' | ||||
| import { mapState } from 'vuex' | ||||
|  | ||||
| export default { | ||||
|   name: 'AiAreaPicker', | ||||
|   components: { AiCell, AiSearchPopup }, | ||||
|   props: { | ||||
|     areaId: { default: '' }, | ||||
|     name: { default: '' }, | ||||
|     all: Boolean, | ||||
|   }, | ||||
|   computed: { | ||||
|     ...mapState(['user']), | ||||
|     dataRange() { | ||||
|       let rules = [10, 8, 6, 3, 0], | ||||
|         level = 0 | ||||
|       if (this.all) return (level = 0) | ||||
|       rules.some((e, i) => { | ||||
|         let reg = new RegExp(`0{${e}}`, 'g') | ||||
|         if (reg.test(this.areaId || this.user.areaId || this.$areaId)) { | ||||
|           return (level = i) | ||||
|         } | ||||
|       }) | ||||
|       return level | ||||
|     }, | ||||
|     currentArea() { | ||||
|       return this.fullArea?.slice(-1)?.[0] || {} | ||||
|     }, | ||||
|     icon() { | ||||
|       return this.$cdn + '/img/location.svg' | ||||
|     }, | ||||
|   }, | ||||
|   data() { | ||||
|     return { | ||||
|       fullArea: [{ name: '全国', id: 0 }], | ||||
|       index: '', | ||||
|       list: [], | ||||
|     } | ||||
|   }, | ||||
|   watch: { | ||||
|     areaId(v) { | ||||
|       v && this.getFullArea() | ||||
|     }, | ||||
|   }, | ||||
|   methods: { | ||||
|     getFullArea() { | ||||
|       let areaId = this.areaId || (this.all ? '' : this.$areaId) | ||||
|       areaId && | ||||
|         this.$http | ||||
|           .post('/admin/area/getAllParentAreaId', null, { | ||||
|             withoutToken: true, | ||||
|             params: { areaId }, | ||||
|           }) | ||||
|           .then((res) => { | ||||
|             if (res?.data) { | ||||
|               if (res.data.length > 1) { | ||||
|                 this.fullArea = res.data.reverse().slice(this.dataRange) | ||||
|               } else { | ||||
|                 this.fullArea = res.data | ||||
|               } | ||||
|               this.fullArea.unshift({ name: '全国', id: 0 }) | ||||
|             } | ||||
|           }) | ||||
|     }, | ||||
|     getChildAreas(id) { | ||||
|       id && | ||||
|         this.$http | ||||
|           .post('/admin/area/queryAreaByParentId', null, { | ||||
|             withoutToken: true, | ||||
|             params: { id }, | ||||
|           }) | ||||
|           .then((res) => { | ||||
|             if (res?.data) { | ||||
|               this.list = res.data | ||||
|               let self = this.fullArea.find((e) => e.id == this.index) | ||||
|               this.list.unshift(self) | ||||
|             } | ||||
|           }) | ||||
|     }, | ||||
|     getProvinces() { | ||||
|       this.$http.post('/admin/area/queryProvinceList', null, { withoutToken: true }).then((res) => { | ||||
|         if (res?.data) { | ||||
|           this.list = res.data | ||||
|         } | ||||
|       }) | ||||
|     }, | ||||
|     handleSelect(op) { | ||||
|       if (op.id != this.index) { | ||||
|         this.fullArea.push(op) | ||||
|         this.index = op.id | ||||
|       } | ||||
|       this.$emit('select', op) | ||||
|       this.$emit('update:name', this.currentArea.name) | ||||
|       this.$refs.areaSelector?.handleSelect() | ||||
|     }, | ||||
|     getChild(op) { | ||||
|       this.fullArea.push(op) | ||||
|       this.index = op.id | ||||
|       this.getChildAreas(op.id) | ||||
|     }, | ||||
|     selectNode(area, i) { | ||||
|       this.fullArea.splice(i + 1, this.fullArea.length - i) | ||||
|       if (this.all && !area.id) { | ||||
|         this.index = '' | ||||
|         this.getProvinces() | ||||
|       } else { | ||||
|         this.index = area.id | ||||
|         this.getChildAreas(area.id) | ||||
|       } | ||||
|     }, | ||||
|     handleInit() { | ||||
|       this.index = this.currentArea.id | ||||
|       if (this.all && !this.currentArea.id) this.getProvinces() | ||||
|       else this.getChildAreas(this.currentArea.id) | ||||
|     }, | ||||
|   }, | ||||
|   created() { | ||||
|     this.index = this.areaId | ||||
|     this.getFullArea() | ||||
|   }, | ||||
| } | ||||
| </script> | ||||
|  | ||||
| <style lang="scss" scoped> | ||||
| .AiAreaPicker { | ||||
|   ::v-deep .areaSelector { | ||||
|     display: flex; | ||||
|     align-items: center; | ||||
|  | ||||
|     span { | ||||
|       cursor: pointer; | ||||
|       color: #333; | ||||
|  | ||||
|       &:first-of-type:before { | ||||
|         content: ''; | ||||
|         padding: 0; | ||||
|       } | ||||
|  | ||||
|       &:before { | ||||
|         color: #333; | ||||
|         content: '/'; | ||||
|         padding: 0 16px; | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     .current { | ||||
|       color: #3f8df5; | ||||
|     } | ||||
|  | ||||
|     .fixedTop { | ||||
|       position: fixed; | ||||
|       top: 0; | ||||
|       width: 100%; | ||||
|       left: 0; | ||||
|       background: #fff; | ||||
|       border-bottom: 4px solid #f5f5f5; | ||||
|       z-index: 1; | ||||
|       text-align: start; | ||||
|       padding: 0 16px; | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   ::v-deep.u-drawer-content { | ||||
|     position: fixed; | ||||
|  | ||||
|     .areaSelector { | ||||
|       padding: 0 16px; | ||||
|       box-sizing: border-box; | ||||
|       border-bottom: 16px solid #f5f5f5; | ||||
|  | ||||
|       span { | ||||
|         line-height: 100px; | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   ::v-deep.pendingItem { | ||||
|     color: #333; | ||||
|     margin-left: 32px; | ||||
|     padding-right: 32px; | ||||
|     height: 104px; | ||||
|     border-bottom: 1px solid #ddd; | ||||
|     text-align: start; | ||||
|  | ||||
|     .self { | ||||
|       font-weight: bold; | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   .location { | ||||
|     width: 28px; | ||||
|     height: 80px; | ||||
|     margin-right: 12px; | ||||
|   } | ||||
| } | ||||
| </style> | ||||
| @@ -28,7 +28,7 @@ | ||||
|       "port": "10323", | ||||
|       "proxy": { | ||||
|         "/lan": { | ||||
|           "target": "http://192.168.1.34:19898", | ||||
|           "target": "http://192.168.1.87:9000", | ||||
|           "changeOrigin": true, | ||||
|           "pathRewrite": { | ||||
|             "^/lan": "/" | ||||
|   | ||||
		Reference in New Issue
	
	Block a user