调整工程目录
This commit is contained in:
		
							
								
								
									
										12
									
								
								bin/serve.js
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								bin/serve.js
									
									
									
									
									
								
							| @@ -69,13 +69,23 @@ const start = () => { | ||||
|     } | ||||
|   } | ||||
|   findApp('src/apps', file => { | ||||
|     if (/.*\\.+\\App[^\\]+\\[^\\]+\.vue/g.test(file)) { | ||||
|     if (/.+\\App[^\\]+\\[^\\]+\.vue/g.test(file)) { | ||||
|       let app = { | ||||
|         name: file.replace(/.*\\([^\\]+).vue/g, '$1'), | ||||
|         path: file.replace(/^src\\(.*).vue/g, '$1').replace(/\\/g, '/') | ||||
|       } | ||||
|       json.pages.push(app) | ||||
|     } | ||||
|   }).then(() => { | ||||
|     return findApp('src/sass', file => { | ||||
|       if (/.+\\App[^\\]+\\[^\\]+\.vue/g.test(file)) { | ||||
|         let app = { | ||||
|           name: file.replace(/.*\\([^\\]+).vue/g, '$1'), | ||||
|           path: file.replace(/^src\\(.*).vue/g, '$1').replace(/\\/g, '/') | ||||
|         } | ||||
|         json.pages.push(app) | ||||
|       } | ||||
|     }) | ||||
|   }).then(() => { | ||||
|     fsExtra.outputJson('src/pages.json', json, () => { | ||||
|       chalkTag.done('生成pages.json') | ||||
|   | ||||
| @@ -11,7 +11,8 @@ | ||||
|   "main": "src/apps/index.js", | ||||
|   "files": [ | ||||
|     "src/components", | ||||
|     "src/apps" | ||||
|     "src/apps", | ||||
|     "src/sass" | ||||
|   ], | ||||
|   "dependencies": { | ||||
|     "@amap/amap-jsapi-loader": "^1.0.1", | ||||
|   | ||||
| @@ -1,193 +0,0 @@ | ||||
| <template> | ||||
|   <div class="template-wrapper"> | ||||
|     <div class="form-list"> | ||||
|       <div | ||||
|         class="form-list__item" | ||||
|         @click="toAdd(index)" | ||||
|         :style="{'background-image': `url(${$cdn}askform/${index + 1}.png)`}" | ||||
|         v-for="(item, index) in itemList" | ||||
|         :key="index"> | ||||
|         <h2>{{ item.name }}</h2> | ||||
|         <div>立即创建</div> | ||||
|       </div> | ||||
|     </div> | ||||
|     <div class="template" v-if="list.length"> | ||||
|       <h2>共享模板</h2> | ||||
|       <div class="template-list"> | ||||
|         <div class="template-item" v-for="(item, index) in list" :key="index" hover-class="bg-hover" @click="quote(item.id)"> | ||||
|           <image :src="`${$cdn}askform/6.png`" /> | ||||
|           <h2>{{ item.title }}</h2> | ||||
|           <u-icon name="arrow-right" color="#E1E2E3" /> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
|   </div> | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
| export default { | ||||
|   name: 'addList', | ||||
|   label: '新建项目', | ||||
|  | ||||
|   data () { | ||||
|     return { | ||||
|       itemList: [{ | ||||
|         name: '问卷调查' | ||||
|       }, { | ||||
|         name: '考试测评' | ||||
|       }, { | ||||
|         name: '报名登记' | ||||
|       }, { | ||||
|         name: '满意调查' | ||||
|       }, { | ||||
|         name: '投票评选' | ||||
|       }], | ||||
|       list: [] | ||||
|     } | ||||
|   }, | ||||
|  | ||||
|   mounted () { | ||||
|     this.getList() | ||||
|   }, | ||||
|  | ||||
|   methods: { | ||||
|     toAdd (type) { | ||||
|       this.$emit('change', { | ||||
|         type: 'AddForm', | ||||
|         params: { | ||||
|           type | ||||
|         } | ||||
|       }) | ||||
|     }, | ||||
|  | ||||
|     quote (id) { | ||||
|       this.$emit('change', { | ||||
|         type: 'AddForm', | ||||
|         params: { | ||||
|           id, | ||||
|           isQuote: 1 | ||||
|         } | ||||
|       }) | ||||
|     }, | ||||
|  | ||||
|     getList () { | ||||
|       this.$http.post(`/app/appquestionnairetemplate/list`, null, { | ||||
|         params: { | ||||
|           current: 1, | ||||
|           templateType: 1, | ||||
|           size: 10000 | ||||
|         } | ||||
|       }).then(res => { | ||||
|         if (res.code == 0) { | ||||
|           this.list = res.data.records | ||||
|         } | ||||
|       }) | ||||
|     } | ||||
|   } | ||||
| } | ||||
| </script> | ||||
|  | ||||
| <style lang="scss" scoped> | ||||
|   .template-wrapper { | ||||
|     padding-bottom: 120rpx; | ||||
|  | ||||
|     .template { | ||||
|       margin: 32px 32px 0; | ||||
|       background: #fff; | ||||
|       border-radius: 8px; | ||||
|       overflow: hidden; | ||||
|  | ||||
|       & > h2 { | ||||
|         height: 88px; | ||||
|         line-height: 88px; | ||||
|         padding: 0 24px; | ||||
|         color: #333333; | ||||
|         font-size: 30px; | ||||
|       } | ||||
|  | ||||
|       .template-item { | ||||
|         display: flex; | ||||
|         align-items: center; | ||||
|         height: 104px; | ||||
|         padding: 0 24px; | ||||
|         border-bottom: 1px solid #D8DDE6; | ||||
|  | ||||
|         &:active { | ||||
|           background-color: #eee; | ||||
|         } | ||||
|  | ||||
|         &:last-child { | ||||
|           border: none; | ||||
|         } | ||||
|  | ||||
|         image { | ||||
|           width: 36px; | ||||
|           height: 42px; | ||||
|         } | ||||
|  | ||||
|         i { | ||||
|           font-size: 30px; | ||||
|           color: #E1E2E3; | ||||
|         } | ||||
|  | ||||
|         h2 { | ||||
|           flex: 1; | ||||
|           padding: 0 18px; | ||||
|           color: #333333; | ||||
|           font-size: 28px; | ||||
|           font-weight: normal; | ||||
|           overflow: hidden; | ||||
|           text-overflow:ellipsis; | ||||
|           white-space: nowrap; | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     .form-list { | ||||
|       display: flex; | ||||
|       flex-wrap: wrap; | ||||
|       padding: 0 32px 0; | ||||
|  | ||||
|       div { | ||||
|         box-sizing: border-box; | ||||
|       } | ||||
|  | ||||
|       .form-list__item { | ||||
|         width: calc(50% - 13px); | ||||
|         height: 216px; | ||||
|         margin: 32px 24px 0 0; | ||||
|         padding: 40px 20px 52px; | ||||
|         background-color: #FFFFFF; | ||||
|         border-radius: 8px; | ||||
|         background-size: 100% 100%; | ||||
|  | ||||
|         &:active { | ||||
|           background-color: #eee; | ||||
|         } | ||||
|  | ||||
|         &:nth-of-type(2n) { | ||||
|           margin-right: 0; | ||||
|         } | ||||
|  | ||||
|         div { | ||||
|           width: 148px; | ||||
|           height: 48px; | ||||
|           line-height: 48px; | ||||
|           text-align: center; | ||||
|           color: #fff; | ||||
|           font-size: 28px; | ||||
|           background: #6BA1F9; | ||||
|           border-radius: 24px; | ||||
|         } | ||||
|  | ||||
|         h2 { | ||||
|           margin-bottom: 32px; | ||||
|           padding-left: 10px; | ||||
|           color: #333333; | ||||
|           font-weight: 700; | ||||
|           font-size: 32px; | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| </style> | ||||
| @@ -1,163 +0,0 @@ | ||||
| export const components = [ | ||||
| 	{ | ||||
| 		type: 'radio', | ||||
| 		label: '单选', | ||||
| 		fixedLabel: '单选', | ||||
| 		value: '', | ||||
| 		points: '', | ||||
| 		icon: 'iconradio', | ||||
| 		isShowPoints: false, | ||||
| 		required: true, | ||||
| 		hasAnswer: false, | ||||
| 		answer: '', | ||||
| 		pointType: '0', | ||||
| 		pointDict: [ | ||||
| 			{ | ||||
| 				dictName: '此题有唯一答案和分值', | ||||
| 				dictValue: '0' | ||||
| 			}, | ||||
| 			{ | ||||
| 				dictName: '每个选项都有对应分值', | ||||
| 				dictValue: '1' | ||||
| 			} | ||||
| 		], | ||||
| 		options: [ | ||||
| 			{ | ||||
| 				label: '选项1', | ||||
| 				value: '', | ||||
| 				point: '', | ||||
| 				img: [] | ||||
| 			}, | ||||
| 			{ | ||||
| 				label: '选项2', | ||||
| 				value: '', | ||||
| 				point: '', | ||||
| 				img: [] | ||||
| 			} | ||||
| 		], | ||||
| 		title: '' | ||||
| 	}, | ||||
| 	{ | ||||
| 		type: 'checkbox', | ||||
| 		label: '多选', | ||||
| 		fixedLabel: '多选', | ||||
| 		points: '', | ||||
| 		icon: 'iconcheck_box', | ||||
| 		isShowPoints: false, | ||||
| 		required: true, | ||||
| 		hasAnswer: false, | ||||
| 		answer: [], | ||||
| 		value: [], | ||||
| 		pointType: '0', | ||||
| 		pointDict: [ | ||||
| 			{ | ||||
| 				dictName: '此题有唯一答案和分值', | ||||
| 				dictValue: '0' | ||||
| 			}, | ||||
| 			{ | ||||
| 				dictName: '每个选项都有对应分值', | ||||
| 				dictValue: '1' | ||||
| 			}, | ||||
| 			{ | ||||
| 				dictName: '答对几项得几分,答错不得分', | ||||
| 				dictValue: '2' | ||||
| 			} | ||||
| 		], | ||||
| 		options: [ | ||||
| 			{ | ||||
| 				label: '选项1', | ||||
| 				value: '', | ||||
| 				point: '', | ||||
| 				img: [], | ||||
| 				checked: false | ||||
| 			}, | ||||
| 			{ | ||||
| 				label: '选项2', | ||||
| 				point: '', | ||||
| 				value: '', | ||||
| 				img: [], | ||||
| 				checked: false | ||||
| 			} | ||||
| 		], | ||||
| 		title: '' | ||||
| 	}, | ||||
| 	{ | ||||
| 		type: 'select', | ||||
| 		label: '单下拉框', | ||||
| 		fixedLabel: '单下拉框', | ||||
| 		value: '', | ||||
| 		points: '', | ||||
| 		icon: 'iconSelect', | ||||
| 		isShowPoints: false, | ||||
| 		required: true, | ||||
| 		hasAnswer: false, | ||||
| 		answer: '', | ||||
| 		pointType: '0', | ||||
| 		placeholder: '请选择', | ||||
| 		pointDict: [ | ||||
| 			{ | ||||
| 				dictName: '此题有唯一答案和分值', | ||||
| 				dictValue: '0' | ||||
| 			}, | ||||
| 			{ | ||||
| 				dictName: '每个选项都有对应分值', | ||||
| 				dictValue: '1' | ||||
| 			} | ||||
| 		], | ||||
| 		options: [ | ||||
| 			{ | ||||
| 				label: '选项1', | ||||
| 				value: '', | ||||
| 				point: '', | ||||
| 				img: [] | ||||
| 			}, | ||||
| 			{ | ||||
| 				label: '选项2', | ||||
| 				value: '', | ||||
| 				point: '', | ||||
| 				img: [] | ||||
| 			} | ||||
| 		], | ||||
| 		title: '' | ||||
| 	}, | ||||
| 	{ | ||||
| 		type: 'input', | ||||
| 		label: '单行填空', | ||||
| 		fixedLabel: '单行填空', | ||||
| 		value: '', | ||||
| 		pointType: '0', | ||||
| 		icon: 'icontext_box', | ||||
| 		isShowPoints: false, | ||||
| 		points: '', | ||||
| 		required: true, | ||||
| 		hasAnswer: false, | ||||
| 		placeholder: '请输入...', | ||||
| 		answer: '' | ||||
| 	}, | ||||
| 	{ | ||||
| 		type: 'textarea', | ||||
| 		label: '多行填空', | ||||
| 		fixedLabel: '多行填空', | ||||
| 		pointType: '0', | ||||
| 		icon: 'icontext_area', | ||||
| 		points: '', | ||||
| 		isShowPoints: false, | ||||
| 		required: true, | ||||
| 		hasAnswer: false, | ||||
| 		answer: '', | ||||
| 		placeholder: '请输入...', | ||||
| 		value: '' | ||||
| 	}, | ||||
| 	{ | ||||
| 		type: 'upload', | ||||
| 		label: '上传图片', | ||||
| 		fixedLabel: '上传图片', | ||||
| 		value: '', | ||||
| 		icon: 'iconpic', | ||||
| 		isShowPoints: false, | ||||
| 		points: '', | ||||
| 		required: true, | ||||
| 		hasAnswer: false, | ||||
| 		answer: '' | ||||
| 	} | ||||
| ]; | ||||
| @@ -1,558 +0,0 @@ | ||||
| <template> | ||||
|   <div class="detail" v-if="pageShow"> | ||||
|     <template v-if="!list"> | ||||
|       <div class="card"> | ||||
|         <header>{{ detail.title }}</header> | ||||
|         <u-gap height="16"></u-gap> | ||||
|         <u-row v-if="detail.createUserId"> | ||||
| <!--          <u-avatar :src="$cdn + 'common/xzh.png'" v-if="false"></u-avatar>--> | ||||
|           <div class="u-avatar__img"> | ||||
|             <AiOpenData type="userName" :openid="detail.createUserId"></AiOpenData> | ||||
|           </div> | ||||
|           <span class="user-name"> | ||||
|             <AiOpenData type="userName" :openid="detail.createUserId"></AiOpenData> | ||||
|           </span> | ||||
|         </u-row> | ||||
|         <u-gap height="32"></u-gap> | ||||
|         <u-row> | ||||
|           <img :src="$cdn + 'common/meeting.png'" alt=""> | ||||
|           <span :style="{color:color(detail.status)}">{{ $dict.getLabel('meetStatus', detail.status) }}</span> | ||||
|         </u-row> | ||||
|         <u-gap height="8"></u-gap> | ||||
|         <u-row> | ||||
|           <img :src="$cdn + 'common/date.png'" alt=""> | ||||
|           <span>{{ detail.startTime && detail.startTime.substr(0, 16) }} 至 {{ detail.endTime && detail.endTime.substr(0, 16) }}</span> | ||||
|         </u-row> | ||||
|         <u-gap height="8"></u-gap> | ||||
|         <u-row style="align-items: start;flex-wrap: nowrap;"> | ||||
|           <img :src="$cdn + 'common/location.png'" alt=""> | ||||
|           <span>{{ detail.address }}</span> | ||||
|         </u-row> | ||||
|       </div> | ||||
|       <div class="card"> | ||||
|         <span>{{ detail.content }}</span> | ||||
|       </div> | ||||
|       <div class="card" v-if="detail.files && detail.files.length"> | ||||
|         <div class="label">相关附件</div> | ||||
|         <div class="file" v-for="(item,index) in detail.files" @click="preFile(item)" :key="index"> | ||||
|           <u-row justify="between"> | ||||
|             <label class="left"> | ||||
|               <img :src="$cdn + 'common/appendix.png'" alt=""> | ||||
|               <span>{{ item.fileName }}.{{ item.postfix }}</span> | ||||
|             </label> | ||||
|             <span>{{ item.fileSizeStr }}</span> | ||||
|           </u-row> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="card item-wrap"> | ||||
|         <u-row justify="between"> | ||||
|           <span>参会人</span> | ||||
|           <label class="right" @click="list=true"> | ||||
|             查看全部<em>{{ detail.attendees && detail.attendees.length }}</em>人 | ||||
|             <div class="right-arrow"></div> | ||||
|           </label> | ||||
|         </u-row> | ||||
|       </div> | ||||
|  | ||||
|       <div class="footer cancel" v-if="detail.status==1 && detail.createUserId == user.id" @click="handleCancel">取消会议 | ||||
|       </div> | ||||
|  | ||||
|       <template v-else> | ||||
|         <div class="footer" v-if="['1','2'].includes(detail.status) && ['0','3'].includes(detail.joinStatus)"> | ||||
|           <div class="leave" @click="updateStatus(0)"> | ||||
|             <img :src="$cdn + 'sass/leave.png'" alt="">请假 | ||||
|           </div> | ||||
|           <div @click="toDo" class="leave"> | ||||
|             <img :src="$cdn + 'sass/toBe.png'" alt="">待定 | ||||
|           </div> | ||||
|           <div @click="updateStatus(1)">确认会议</div> | ||||
|         </div> | ||||
|  | ||||
|         <!--        <div class="footer" v-if="['1','2'].includes(detail.status) && detail.joinStatus!=0">--> | ||||
|         <!--          <label>{{ detail.joinStatus|transform }}</label>--> | ||||
|         <!--          <img :src="$cdn + tag(detail.joinStatus)" alt="">--> | ||||
|         <!--        </div>--> | ||||
|       </template> | ||||
|  | ||||
|     </template> | ||||
|     <template v-else> | ||||
|       <div class="att-list"> | ||||
|         <AiTopFixed> | ||||
|           <u-tabs :list="tabs" :current="current" height="96" :is-scroll="false" bar-width="192" | ||||
|                   @change="change"></u-tabs> | ||||
|         </AiTopFixed> | ||||
|         <div v-for="(item,index) in detail.attendees && detail.attendees.filter(e=>e.joinStatus==current)" :key="index" | ||||
|              class="att-wrap"> | ||||
|           <div class="left"> | ||||
|             <u-avatar :src="item.avatar || (($cdn + 'common/xztx.png'))" size="74" mode="square" style="margin-right: 8px"></u-avatar> | ||||
|             <AiOpenData type="userName" :openid="item.name"></AiOpenData> | ||||
|           </div> | ||||
|           <!--          <img :src="$cdn + 'common/phone.png'" alt="" @click="call(item)">--> | ||||
|         </div> | ||||
|       </div> | ||||
|     </template> | ||||
|     <u-modal v-model="show" title="提示" show-cancel-button content='是否要取消该会议?' @confirm="onConfirm"></u-modal> | ||||
|     <AiBack/> | ||||
|   </div> | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
|   import {mapActions, mapState} from "vuex"; | ||||
|  | ||||
|   export default { | ||||
|     name: "detail", | ||||
|     data() { | ||||
|       return { | ||||
|         detail: {}, | ||||
|         list: false, | ||||
|         current: 0, | ||||
|         pageShow: false, | ||||
|         show: false, | ||||
|         id:null, | ||||
|       } | ||||
|     }, | ||||
|     onLoad(opt){ | ||||
|       this.id = opt.id; | ||||
|     }, | ||||
|     computed: { | ||||
|       ...mapState(["user"]), | ||||
|       tabs() { | ||||
|         return [ | ||||
|           {name: this.count(0) + "人未确认"}, | ||||
|           {name: this.count(1) + "人已确认"}, | ||||
|           {name: this.count(2) + "人已请假"}, | ||||
|           {name: this.count(3) + "人待定"}, | ||||
|         ] | ||||
|       }, | ||||
|     }, | ||||
|     methods: { | ||||
|       onConfirm() { | ||||
|         this.$http.post("/app/appmeetinginfo/cancel", null, { | ||||
|           params: { | ||||
|             meetingId: this.id, | ||||
|           } | ||||
|         }).then(res => { | ||||
|           if (res.code == 0) { | ||||
|             this.$u.toast("取消成功"); | ||||
|             this.getDetail(); | ||||
|           } | ||||
|         }) | ||||
|       }, | ||||
|       handleCancel() { | ||||
|         this.show = true; | ||||
|       }, | ||||
|       toDo() { | ||||
|         this.$http.post("/app/appmeetinginfo/tobeConfirm", null, { | ||||
|           params: { | ||||
|             meetingId: this.id, | ||||
|           } | ||||
|         }).then(res => { | ||||
|           if (res.code == 0) { | ||||
|             this.$u.toast("会议待定"); | ||||
|             setTimeout(_ => { | ||||
|               uni.navigateBack(); | ||||
|             }, 800) | ||||
|           } | ||||
|         }) | ||||
|       }, | ||||
|       count(sta) { | ||||
|         return this.detail.attendees ? this.detail.attendees?.filter(e => e.joinStatus == sta)?.length : 0; | ||||
|       }, | ||||
|       change(index) { | ||||
|         this.current = index; | ||||
|         this.detail = {}; | ||||
|         this.getDetail(); | ||||
|       }, | ||||
|       call(item) { | ||||
|         if (item.phone) { | ||||
|           uni.makePhoneCall({ | ||||
|             phoneNumber: item.phone | ||||
|           }); | ||||
|         } | ||||
|       }, | ||||
|       ...mapActions(['previewFile', 'injectJWeixin']), | ||||
|       preFile(e) { | ||||
|         if ([".jpg", ".png", ".gif"].includes(e.postfix.toLowerCase())) { | ||||
|           uni.previewImage({ | ||||
|             current: e.url, | ||||
|             urls: [e.url] | ||||
|           }) | ||||
|         } else { | ||||
|           this.previewFile({...e}) | ||||
|         } | ||||
|       }, | ||||
|       tag(status) { | ||||
|         return { | ||||
|           "1": "common/2confirmed2.png", | ||||
|           "2": "common/2absent2.png" | ||||
|         }[status] | ||||
|       }, | ||||
|       updateStatus(status) { | ||||
|         this.$http.post(status == 0 ? "/app/appmeetinginfo/absent" : "/app/appmeetinginfo/confirm", null, { | ||||
|           params: { | ||||
|             meetingId: this.id, | ||||
|             reason: status == 0 ? "" : null | ||||
|           } | ||||
|         }).then(res => { | ||||
|           if (res.code == 0) { | ||||
|             this.$u.toast(status == 0 ? "请假成功" : "确认成功") | ||||
|             this.getDetail() | ||||
|           } | ||||
|         }) | ||||
|       }, | ||||
|       color(status) { | ||||
|         if (status == 1) { | ||||
|           return "#FF8822" | ||||
|         } | ||||
|  | ||||
|         if (status == 2) { | ||||
|           return "#1365DD" | ||||
|         } | ||||
|  | ||||
|         if (status == 3) { | ||||
|           return "#FF4466" | ||||
|         } | ||||
|  | ||||
|         return "#343D65" | ||||
|       }, | ||||
|       getDetail() { | ||||
|         this.$http.post("/app/appmeetinginfo/info-id", null, { | ||||
|           params: {id: this.id} | ||||
|         }).then(res => { | ||||
|           if (res && res.data) { | ||||
|             this.detail = res.data | ||||
|             this.pageShow = true | ||||
|           } | ||||
|         }) | ||||
|       } | ||||
|     }, | ||||
|     created() { | ||||
|       this.injectJWeixin(['sendChatMessage']).then(() => { | ||||
|         this.getDetail() | ||||
|       }) | ||||
|     }, | ||||
|  | ||||
|     onShow() { | ||||
|       document.title = "会议详情"; | ||||
|       this.$dict.load("meetStatus"); | ||||
|       wx.hideOptionMenu(); | ||||
|     }, | ||||
|     filters: { | ||||
|       transform(status) { | ||||
|         if (status == 1) { | ||||
|           return "已确认" | ||||
|         } | ||||
|         if (status == 2) { | ||||
|           return "已请假" | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| </script> | ||||
|  | ||||
| <style lang="scss" scoped> | ||||
|   .detail { | ||||
|     min-height: 100%; | ||||
|     background-color: #F5F5F5; | ||||
|     padding-bottom: 140px; | ||||
|  | ||||
|  | ||||
|     ::v-deep .AiTopFixed { | ||||
|       margin-bottom: 16px; | ||||
|  | ||||
|       .content { | ||||
|         padding: 0 !important; | ||||
|       } | ||||
|     } | ||||
|  | ||||
|  | ||||
|     .att-list { | ||||
|       min-height: 100%; | ||||
|  | ||||
|       .att-wrap { | ||||
|         display: flex; | ||||
|         height: 112px; | ||||
|         align-items: center; | ||||
|         justify-content: space-between; | ||||
|         background-color: #ffffff; | ||||
|         box-sizing: border-box; | ||||
|         padding: 0 50px; | ||||
|         border-bottom: 1px solid #E4E5E6; | ||||
|  | ||||
|         .left { | ||||
|           display: flex; | ||||
|           align-items: center; | ||||
|  | ||||
|           &:after { | ||||
|             content: ""; | ||||
|             position: absolute; | ||||
|             right: 0; | ||||
|             bottom: 0; | ||||
|             width: 622px; | ||||
|             height: 2px; | ||||
|             background-color: rgba(216, 221, 230, 0.5); | ||||
|           } | ||||
|  | ||||
|           .name { | ||||
|             font-size: 30px; | ||||
|             font-weight: 600; | ||||
|             color: #333333; | ||||
|           } | ||||
|         } | ||||
|  | ||||
|         & > img { | ||||
|           width: 48px; | ||||
|           height: 48px; | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     .card { | ||||
|       background-color: #FFFFFF; | ||||
|       margin-bottom: 8px; | ||||
|       box-sizing: border-box; | ||||
|       padding: 16px 32px; | ||||
|  | ||||
|       header { | ||||
|         font-size: 40px; | ||||
|         font-weight: 600; | ||||
|         color: #333333; | ||||
|         line-height: 64px; | ||||
|         letter-spacing: 1px; | ||||
|       } | ||||
|  | ||||
|       .u-row { | ||||
|         & > div { | ||||
|           border-radius: 50%; | ||||
|           text-align: center; | ||||
|           font-size: 30px; | ||||
|           display: flex; | ||||
|           align-items: center; | ||||
|           justify-content: center; | ||||
|           /*margin-left: 8px;*/ | ||||
|         } | ||||
|  | ||||
|         & > span { | ||||
|           font-size: 30px; | ||||
|           color: #343D65; | ||||
|           margin-left: 16px; | ||||
|         } | ||||
|  | ||||
|         ::v-deep .u-avatar__img { | ||||
|           width: 56px; | ||||
|           height: 56px; | ||||
|           vertical-align: middle; | ||||
|           color: #ffffff; | ||||
|           background-color: #2266FF; | ||||
|           font-size: 16px; | ||||
|         } | ||||
|  | ||||
|         .user-name{ | ||||
|           font-size: 30px; | ||||
|           color: #343D65; | ||||
|         } | ||||
|  | ||||
|         img { | ||||
|           width: 48px; | ||||
|           height: 48px; | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       & > span { | ||||
|         font-size: 32px; | ||||
|         color: #333333; | ||||
|         line-height: 48px; | ||||
|         letter-spacing: 1px; | ||||
|         display: inline-block; | ||||
|         box-sizing: border-box; | ||||
|         padding: 16px 0; | ||||
|       } | ||||
|  | ||||
|       .label { | ||||
|         height: 96px; | ||||
|         font-size: 32px; | ||||
|         color: #333333; | ||||
|         display: flex; | ||||
|         align-items: center; | ||||
|         margin-bottom: 16px; | ||||
|       } | ||||
|  | ||||
|       .file { | ||||
|         height: 128px; | ||||
|         background: #FFFFFF; | ||||
|         border-radius: 8px; | ||||
|         border: 1px solid #CCCCCC; | ||||
|         box-sizing: border-box; | ||||
|         padding: 0 16px; | ||||
|         margin-bottom: 32px; | ||||
|  | ||||
|         & > .u-row { | ||||
|           height: 100%; | ||||
|  | ||||
|           .left { | ||||
|             width: 522px; | ||||
|             display: flex; | ||||
|             align-items: center; | ||||
|  | ||||
|             & > img { | ||||
|               width: 96px; | ||||
|               height: 96px; | ||||
|             } | ||||
|  | ||||
|             & > span { | ||||
|               font-size: 32px; | ||||
|               color: #333333; | ||||
|               display: inline-block; | ||||
|               line-height: 44px; | ||||
|               text-overflow: ellipsis; | ||||
|               overflow-x: hidden; | ||||
|               white-space: nowrap; | ||||
|             } | ||||
|           } | ||||
|  | ||||
|           & > span { | ||||
|             font-size: 28px; | ||||
|             color: #999999; | ||||
|           } | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .active { | ||||
|         background-color: #F3F6F9; | ||||
|       } | ||||
|  | ||||
|       .name { | ||||
|         font-size: 32px; | ||||
|         font-weight: 400; | ||||
|         color: #333333; | ||||
|       } | ||||
|  | ||||
|       .wrap { | ||||
|         height: 112px; | ||||
|         display: flex; | ||||
|         align-items: center; | ||||
|         position: relative; | ||||
|  | ||||
|         &:after { | ||||
|           content: ""; | ||||
|           position: absolute; | ||||
|           right: 0; | ||||
|           bottom: 0; | ||||
|           width: 622px; | ||||
|           height: 2px; | ||||
|           background-color: rgba(216, 221, 230, 0.5); | ||||
|         } | ||||
|  | ||||
|         & > label { | ||||
|           width: 80px; | ||||
|           height: 80px; | ||||
|           border-radius: 50%; | ||||
|           background-color: #4E8EEE; | ||||
|           font-size: 28px; | ||||
|           font-weight: 600; | ||||
|           color: #FFFFFF; | ||||
|           display: flex; | ||||
|           align-items: center; | ||||
|           justify-content: center; | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     .item-wrap { | ||||
|       height: 112px; | ||||
|       padding: 0 32px; | ||||
|  | ||||
|       .u-row { | ||||
|         height: 100%; | ||||
|  | ||||
|         & > span { | ||||
|           font-size: 32px; | ||||
|           font-weight: 400; | ||||
|           color: #333333; | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .right { | ||||
|         font-size: 28px; | ||||
|         color: #999999; | ||||
|         display: flex; | ||||
|         align-items: center; | ||||
|  | ||||
|         em { | ||||
|           font-style: normal; | ||||
|           color: #1365DD; | ||||
|         } | ||||
|  | ||||
|         .right-arrow { | ||||
|           width: 16px; | ||||
|           height: 16px; | ||||
|           border-top: 5px solid #CCCCCC; | ||||
|           border-right: 5px solid #CCCCCC; | ||||
|           transform: rotate(45deg); | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     .footer { | ||||
|       height: 112px; | ||||
|       width: 100%; | ||||
|       position: fixed; | ||||
|       left: 0; | ||||
|       bottom: 0; | ||||
|       background-color: #FFFFFF; | ||||
|       display: flex; | ||||
|       align-items: center; | ||||
|       justify-content: center; | ||||
|  | ||||
|       & > div { | ||||
|         font-size: 28px; | ||||
|         color: #666666; | ||||
|         display:flex; | ||||
|         flex-direction: column; | ||||
|  | ||||
|         & > img { | ||||
|           width: 48px; | ||||
|           height: 48px; | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       & > div:nth-child(1), & > div:nth-child(2) { | ||||
|         width: 135px; | ||||
|         height: 100%; | ||||
|         display: flex; | ||||
|         align-items: center; | ||||
|         justify-content: center; | ||||
|       } | ||||
|  | ||||
|       & > div:last-child { | ||||
|         width: calc(100% - 270px); | ||||
|         height: 100%; | ||||
|         color: #FFFFFF; | ||||
|         display: flex; | ||||
|         align-items: center; | ||||
|         justify-content: center; | ||||
|         background-color: #1365DD; | ||||
|       } | ||||
|  | ||||
|       & > label { | ||||
|         font-size: 36px; | ||||
|         font-weight: 400; | ||||
|         color: #999999; | ||||
|       } | ||||
|  | ||||
|       /*img {*/ | ||||
|       /*  width: 158px;*/ | ||||
|       /*  height: 104px;*/ | ||||
|       /*  position: absolute;*/ | ||||
|       /*  right: 0;*/ | ||||
|       /*  top: 0;*/ | ||||
|       /*}*/ | ||||
|     } | ||||
|  | ||||
|     .cancel { | ||||
|       color: #ffffff; | ||||
|       font-size: 36px; | ||||
|       background-color: #005DFF | ||||
|     } | ||||
|   } | ||||
| </style> | ||||
| @@ -1,226 +0,0 @@ | ||||
| <template> | ||||
|   <div class="meeting-list"> | ||||
|     <div class="card" v-for="(item,index) in list" :key="index" @click="detail(item)"> | ||||
|       <header> | ||||
|         <span>{{item.title}}</span> | ||||
|         <span> | ||||
|           <span v-if="index==2">保存于</span> | ||||
|           {{item.createTime}}</span> | ||||
|       </header> | ||||
|       <u-row justify="between"> | ||||
|         <div class="time"> | ||||
|           <span>{{item.startTime|format}}</span> | ||||
|           <span>{{item.startTime|formatDate(0)}}年{{item.startTime|formatDate(1)}}月{{item.startTime|formatDate(2)}}日 周{{item.startTime|formatWeek}}</span> | ||||
|         </div> | ||||
|         <div class="arrow"></div> | ||||
|         <div class="time"> | ||||
|           <span>{{item.endTime|format}}</span> | ||||
|           <span>{{item.endTime|formatDate(0)}}年{{item.endTime|formatDate(1)}}月{{item.endTime|formatDate(2)}}日 周{{item.endTime|formatWeek}}</span> | ||||
|         </div> | ||||
|       </u-row> | ||||
|       <u-row class="info"> | ||||
|         <span>发起人员:</span> | ||||
|         <AiOpenData type="userName" :openid="item.createUserId"/> | ||||
|       </u-row> | ||||
|       <u-gap height="20"></u-gap> | ||||
|       <u-row class="info"> | ||||
|         <span>会议地点:</span> | ||||
|         <span>{{item.address}}</span> | ||||
|       </u-row> | ||||
|       <div class="tag" v-if="item.status!=0" :style="{background:'url(' + $cdn + tag(item.status) +')'}"></div> | ||||
|     </div> | ||||
|     <u-loadmore :status="status" v-if="list.length"/> | ||||
|     <AiEmpty v-if="!list.length"></AiEmpty> | ||||
|     <AiBack/> | ||||
|   </div> | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
|  | ||||
|   export default { | ||||
|     name: "meetingList", | ||||
|     props: { | ||||
|       params: { | ||||
|         type: [String, Number, Object], | ||||
|       } | ||||
|     }, | ||||
|     data() { | ||||
|       return { | ||||
|         list: [], | ||||
|         current: 1, | ||||
|         index: null, | ||||
|         status: "加载更多", | ||||
|       } | ||||
|     }, | ||||
|  | ||||
|     onLoad(opt) { | ||||
|       this.index = opt.index | ||||
|       uni.setNavigationBarTitle({ | ||||
|         title: opt.index == 0 ? "历史会议" : "草稿箱" | ||||
|       }); | ||||
|       this.getData(); | ||||
|     }, | ||||
|  | ||||
|     methods: { | ||||
|       detail({id}) { | ||||
|         let url | ||||
|         if (this.index == 2) { | ||||
|           url = "/apps/AppMeetingNotice/addMeeting?id=" + id | ||||
|         } else { | ||||
|           url = "/apps/AppMeetingNotice/detail?id=" + id | ||||
|         } | ||||
|         uni.navigateTo({url}) | ||||
|       }, | ||||
|       tag(status) { | ||||
|         return { | ||||
|           "1": 'common/1wks.png', | ||||
|           "2": 'common/1jxz.png', | ||||
|           "3": 'common/1yqx.png', | ||||
|           "4": 'common/1yjs.png' | ||||
|         }[status] | ||||
|       }, | ||||
|       getData() { | ||||
|         this.$http.post("/app/appmeetinginfo/list", null, { | ||||
|           params: { | ||||
|             listType: this.index == 0 ? "2" : '0', | ||||
|             meetingStatus: this.index == 0 ? "4" : "0", | ||||
|             size: 10, | ||||
|             current: this.current, | ||||
|           } | ||||
|         }).then(res => { | ||||
|           if (res && res.data) { | ||||
|             if (this.current > 1 && this.current > res.data.pages) { | ||||
|               this.status = "已经到底啦" | ||||
|             } | ||||
|             this.list = this.current > 1 ? [...this.list, ...res.data.records] : res.data.records | ||||
|           } | ||||
|         }) | ||||
|       }, | ||||
|     }, | ||||
|  | ||||
|     onReachBottom() { | ||||
|       this.current ++; | ||||
|       this.getData(); | ||||
|     }, | ||||
|  | ||||
|     filters: { | ||||
|       format(date) { | ||||
|         return date.split(" ")[1].substr(0, 5) | ||||
|       }, | ||||
|       formatDate(date, index) { | ||||
|         return date.split(" ")[0].split("-")[index] | ||||
|       }, | ||||
|       formatWeek(date) { | ||||
|         return "日一二三四五六".charAt((new Date(date.split(" ")[0]).getDay())) | ||||
|       } | ||||
|     }, | ||||
|   } | ||||
| </script> | ||||
|  | ||||
| <style lang="scss" scoped> | ||||
|   .meeting-list { | ||||
|     min-height: 100%; | ||||
|     background-color: #F5F5F5; | ||||
|     box-sizing: border-box; | ||||
|     padding: 32px; | ||||
|  | ||||
|     .card { | ||||
|       background-color: #FFFFFF; | ||||
|       box-sizing: border-box; | ||||
|       padding: 32px; | ||||
|       border-radius: 8px; | ||||
|       margin-bottom: 32px; | ||||
|       position: relative; | ||||
|  | ||||
|       &:last-child { | ||||
|         margin-bottom: 0; | ||||
|       } | ||||
|  | ||||
|       & > header { | ||||
|         width: 95%; | ||||
|         font-size: 32px; | ||||
|         font-weight: 600; | ||||
|         color: #333333; | ||||
|         display: flex; | ||||
|         flex-direction: column; | ||||
|  | ||||
|         & > span:last-child { | ||||
|           font-size: 28px; | ||||
|           font-weight: 400; | ||||
|           color: #999999; | ||||
|           margin-top: 10px; | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .time { | ||||
|         display: flex; | ||||
|         flex-direction: column; | ||||
|         margin: 46px 0; | ||||
|  | ||||
|         & > span:first-child { | ||||
|           font-size: 60px; | ||||
|           font-weight: 600; | ||||
|           color: #333333; | ||||
|           line-height: 84px; | ||||
|         } | ||||
|  | ||||
|         & > span:last-child { | ||||
|           font-size: 22px; | ||||
|           color: #333333; | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .arrow { | ||||
|         width: 28px; | ||||
|         height: 68px; | ||||
|         overflow: hidden; | ||||
|         position: relative; | ||||
|         transform: rotate(180deg); | ||||
|  | ||||
|         &:before, &:after { | ||||
|           content: ""; | ||||
|           width: 50px; | ||||
|           height: 50px; | ||||
|           position: absolute; | ||||
|           transform: scaleY(1.3) translate(30%, -40px) rotate(45deg); | ||||
|         } | ||||
|  | ||||
|         &:before { | ||||
|           top: 59px; | ||||
|           background-color: #CCCCCC; | ||||
|         } | ||||
|  | ||||
|         &:after { | ||||
|           left: 7px; | ||||
|           top: 59px; | ||||
|           background-color: #FFFFFF; | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .info { | ||||
|         flex-wrap: nowrap; | ||||
|  | ||||
|         & > span:first-child { | ||||
|           flex-shrink: 0; | ||||
|           font-size: 30px; | ||||
|           color: #999999; | ||||
|         } | ||||
|  | ||||
|         & > span:last-child { | ||||
|           font-size: 30px; | ||||
|           color: #343D65; | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .tag { | ||||
|         width: 112px; | ||||
|         height: 112px; | ||||
|         background-repeat: no-repeat !important; | ||||
|         background-size: 100% 100% !important; | ||||
|         position: absolute; | ||||
|         top: 0; | ||||
|         right: 0; | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| </style> | ||||
| @@ -1,360 +0,0 @@ | ||||
| <template> | ||||
|   <div class="detail" v-if="pageShow"> | ||||
|     <template v-if="detailObj.status!=2"> | ||||
|       <div class="card"> | ||||
|         <header>{{ detailObj.title }}</header> | ||||
|         <u-gap height="16"></u-gap> | ||||
|         <u-row> | ||||
|           <span>发布人:</span> | ||||
|           <span v-if="detailObj.createUserId"> | ||||
|             <AiOpenData type="userName" :openid="detailObj.createUserId"></AiOpenData> | ||||
|           </span> | ||||
|         </u-row> | ||||
|         <u-gap height="8"></u-gap> | ||||
|         <u-row> | ||||
|           <span>发布部门:</span> | ||||
|           <span v-if="detailObj.unitName"> | ||||
|             <AiOpenData type="departmentName" :openid="detailObj.unitName"></AiOpenData> | ||||
|           </span> | ||||
|         </u-row> | ||||
|         <u-gap height="8"></u-gap> | ||||
|         <u-row> | ||||
|           <span>发布日期:</span> | ||||
|           <span>{{ detailObj.releaseTime }}</span> | ||||
|         </u-row> | ||||
|         <u-gap height="8"></u-gap> | ||||
|       </div> | ||||
|  | ||||
|       <div class="card"> | ||||
|         <div class="label">公告内容</div> | ||||
|         <u-parse :html="detailObj.content"></u-parse> | ||||
|       </div> | ||||
|  | ||||
|       <div class="card" style="padding-top: 0" v-if="detailObj.files && detailObj.files.length"> | ||||
|         <div class="label">相关附件</div> | ||||
|         <div class="file" v-for="(item,index) in detailObj.files" :key="index" @click="preFile(item)"> | ||||
|           <u-row justify="between"> | ||||
|             <label class="left"> | ||||
|               <img :src="$cdn + 'common/appendix.png'" alt=""> | ||||
|               <span>{{ item.name }}.{{ item.postfix }}</span> | ||||
|             </label> | ||||
|             <span>{{ (item.size / 1024).toFixed(2) }}KB</span> | ||||
|           </u-row> | ||||
|         </div> | ||||
|       </div> | ||||
|  | ||||
|       <div class="card" @click="handleClick"> | ||||
|         <u-row justify="between" class="item"> | ||||
|           <span>接收对象</span> | ||||
|           <div class="right"> | ||||
|             <em>{{ detailObj.readNum }}人</em>已读 | ||||
|             <em>{{ detailObj.unReadNum }}人</em>未读 | ||||
|             <div class="arrow"></div> | ||||
|           </div> | ||||
|         </u-row> | ||||
|       </div> | ||||
|     </template> | ||||
|     <AiEmpty description="该通知已撤回" v-else/> | ||||
|     <AiBack/> | ||||
|   </div> | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
|   import {mapActions} from "vuex"; | ||||
|  | ||||
|   export default { | ||||
|     name: "detail", | ||||
|     data() { | ||||
|       return { | ||||
|         detailObj: {}, | ||||
|         id: null, | ||||
|         pageShow: false, | ||||
|         flag: false, | ||||
|       } | ||||
|     }, | ||||
|  | ||||
|     onLoad(opt) { | ||||
|       this.id = opt.id; | ||||
|       this.flag = opt.flag; | ||||
|     }, | ||||
|  | ||||
|     created() { | ||||
|       this.injectJWeixin(['sendChatMessage']).then(() => { | ||||
|         this.getDetail() | ||||
|       }) | ||||
|     }, | ||||
|  | ||||
|     onShow() { | ||||
|       document.title = "公告详情"; | ||||
|       wx.hideOptionMenu(); | ||||
|     }, | ||||
|  | ||||
|     methods: { | ||||
|       ...mapActions(['previewFile', 'injectJWeixin']), | ||||
|       preFile(e) { | ||||
|         if ([".jpg", ".png", ".gif"].includes(e.postfix.toLowerCase())) { | ||||
|           uni.previewImage({ | ||||
|             current: e.url, | ||||
|             urls: [e.url] | ||||
|           }) | ||||
|         } else { | ||||
|           this.previewFile({...e}) | ||||
|         } | ||||
|       }, | ||||
|       getDetail() { | ||||
|         this.$http.post("/app/appannouncement/detail", null, { | ||||
|           params: { | ||||
|             id: this.id, | ||||
|             detail: this.flag | ||||
|           } | ||||
|         }).then(res => { | ||||
|           if (res && res.data) { | ||||
|             this.detailObj = res.data; | ||||
|             this.pageShow = true | ||||
|           } | ||||
|         }) | ||||
|       }, | ||||
|       handleClick() { | ||||
|         uni.navigateTo({ | ||||
|           url:"/apps/AppNotification/read?id=" + this.id, | ||||
|         }) | ||||
|       } | ||||
|     }, | ||||
|   } | ||||
| </script> | ||||
|  | ||||
| <style lang="scss" scoped> | ||||
|   .detail { | ||||
|     min-height: 100%; | ||||
|     background-color: #F5F5F5; | ||||
|     padding-bottom: 140px; | ||||
|  | ||||
|     ::v-deep .content { | ||||
|       padding: 0; | ||||
|     } | ||||
|  | ||||
|     .card { | ||||
|       background-color: #FFFFFF; | ||||
|       margin-bottom: 8px; | ||||
|       box-sizing: border-box; | ||||
|       padding: 16px 32px; | ||||
|  | ||||
|       header { | ||||
|         font-size: 40px; | ||||
|         font-weight: 600; | ||||
|         color: #333333; | ||||
|         line-height: 64px; | ||||
|         letter-spacing: 1px; | ||||
|       } | ||||
|  | ||||
|       .u-row { | ||||
|         & > div { | ||||
|           border-radius: 50%; | ||||
|           text-align: center; | ||||
|           font-size: 22px; | ||||
|           font-weight: bold; | ||||
|           display: flex; | ||||
|           align-items: center; | ||||
|           justify-content: center; | ||||
|         } | ||||
|  | ||||
|         & > span { | ||||
|           font-size: 30px; | ||||
|           color: #343D65; | ||||
|           line-height: 48px; | ||||
|         } | ||||
|  | ||||
|         & > span:last-child { | ||||
|           font-size: 30px; | ||||
|           /*color: #343D65;*/ | ||||
|           /*margin-left: 16px;*/ | ||||
|           line-height: 48px; | ||||
|         } | ||||
|  | ||||
|         .title { | ||||
|           width: 490px; | ||||
|           height: 112px; | ||||
|           display: flex; | ||||
|           align-items: center; | ||||
|           font-size: 32px; | ||||
|           color: #333333; | ||||
|           overflow: hidden; | ||||
|           text-overflow: ellipsis; | ||||
|           white-space: nowrap; | ||||
|         } | ||||
|  | ||||
|         .right { | ||||
|           font-size: 28px; | ||||
|           display: flex; | ||||
|           align-items: center; | ||||
|           color: #666666; | ||||
|  | ||||
|           .arrow { | ||||
|             width: 16px; | ||||
|             height: 16px; | ||||
|             border-top: 3px solid #CCCCCC; | ||||
|             border-right: 3px solid #CCCCCC; | ||||
|             transform: rotate(45deg); | ||||
|           } | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .item { | ||||
|         position: relative; | ||||
|         height: 80px; | ||||
|  | ||||
|         &:after { | ||||
|           width: 100%; | ||||
|           height: 1px; | ||||
|           background-color: rgba(216, 221, 230, 0.5); | ||||
|           content: ""; | ||||
|           position: absolute; | ||||
|           left: 0; | ||||
|           bottom: 0; | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       & > span { | ||||
|         font-size: 32px; | ||||
|         color: #333333; | ||||
|         line-height: 48px; | ||||
|         letter-spacing: 1px; | ||||
|         display: inline-block; | ||||
|       } | ||||
|  | ||||
|       .label { | ||||
|         height: 80px; | ||||
|         font-size: 32px; | ||||
|         color: #333333; | ||||
|         display: flex; | ||||
|         align-items: center; | ||||
|         margin-bottom: 16px; | ||||
|  | ||||
|         & > em { | ||||
|           font-style: normal; | ||||
|           font-size: 32px; | ||||
|           color: #1365DD; | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .file { | ||||
|         height: 128px; | ||||
|         background: #FFFFFF; | ||||
|         border-radius: 8px; | ||||
|         border: 1px solid #CCCCCC; | ||||
|         box-sizing: border-box; | ||||
|         padding: 0 16px; | ||||
|         margin-bottom: 32px; | ||||
|  | ||||
|         & > .u-row { | ||||
|           height: 100%; | ||||
|  | ||||
|           .left { | ||||
|             width: 476px; | ||||
|             display: flex; | ||||
|             align-items: center; | ||||
|             word-break: break-all; | ||||
|  | ||||
|             & > img { | ||||
|               flex-shrink: 0; | ||||
|               width: 96px; | ||||
|               height: 96px; | ||||
|             } | ||||
|  | ||||
|             & > span { | ||||
|               font-size: 32px; | ||||
|               color: #333333; | ||||
|               display: inline-block; | ||||
|               line-height: 44px; | ||||
|               overflow: hidden; | ||||
|               text-overflow: ellipsis; | ||||
|               display: -webkit-box; | ||||
|               -webkit-box-orient: vertical; | ||||
|               -webkit-line-clamp: 2; | ||||
|             } | ||||
|           } | ||||
|  | ||||
|           & > span { | ||||
|             font-size: 28px; | ||||
|             color: #999999; | ||||
|           } | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .active { | ||||
|         background-color: #F3F6F9; | ||||
|       } | ||||
|  | ||||
|       & > text { | ||||
|         width: 100%; | ||||
|         display: inline-block; | ||||
|         font-size: 30px; | ||||
|         color: #649EFD; | ||||
|         text-align: center; | ||||
|       } | ||||
|  | ||||
|       .progress { | ||||
|         height: 12px; | ||||
|         background: #F2F4FC; | ||||
|         border-radius: 12px; | ||||
|         position: relative; | ||||
|         margin: 16px 0 64px 0; | ||||
|  | ||||
|         .pro-active { | ||||
|           height: 12px; | ||||
|           background: #639EFD; | ||||
|           border-radius: 12px; | ||||
|           position: absolute; | ||||
|           left: 0; | ||||
|           top: 0; | ||||
|         } | ||||
|  | ||||
|       } | ||||
|  | ||||
|       em { | ||||
|         font-style: normal; | ||||
|         font-size: 28px; | ||||
|         color: #1365DD; | ||||
|       } | ||||
|  | ||||
|       ::v-deep .u-collapse { | ||||
|         position: relative; | ||||
|  | ||||
|         &:after { | ||||
|           content: ""; | ||||
|           width: 718px; | ||||
|           height: 1px; | ||||
|           background-color: rgba(216, 221, 230, 0.5); | ||||
|           position: absolute; | ||||
|           left: 0; | ||||
|           bottom: 0; | ||||
|         } | ||||
|  | ||||
|         .u-collapse-head { | ||||
|           padding: 40px 0; | ||||
|         } | ||||
|  | ||||
|         .u-collapse-content { | ||||
|           font-size: 32px; | ||||
|           color: #333333; | ||||
|           line-height: 48px; | ||||
|           letter-spacing: 1px; | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     .footer { | ||||
|       height: 112px; | ||||
|       width: 100%; | ||||
|       position: fixed; | ||||
|       left: 0; | ||||
|       bottom: 0; | ||||
|       background: #1365DD; | ||||
|       display: flex; | ||||
|       align-items: center; | ||||
|       justify-content: center; | ||||
|       font-size: 36px; | ||||
|       color: #FFFFFF; | ||||
|     } | ||||
|   } | ||||
| </style> | ||||
| @@ -2,19 +2,23 @@ | ||||
|   <div class="AppWalkask"> | ||||
|     <template v-if="isList"> | ||||
|       <div class="header-top"> | ||||
|         <u-tabs :list="tabList" :is-scroll="false" :current="currentTabs" 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="currentTabs == 0"> | ||||
|           <div class="currentLeft-top"> | ||||
|             <div class="left"> | ||||
|               <img src="./components/images/icon2.png" alt="" /> | ||||
|               <img src="./components/images/icon2.png" alt=""/> | ||||
|  | ||||
|               <AiAreaPicker v-model="areaId" ref="areaIds" :areaId="areaId" @select="areaSelect" style="color: #fff"> </AiAreaPicker> | ||||
|               <AiAreaPicker v-model="areaId" ref="areaIds" :areaId="areaId" @select="areaSelect" | ||||
|                             style="color: #fff"></AiAreaPicker> | ||||
|             </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> | ||||
|             <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> | ||||
|           </div> | ||||
|  | ||||
|           <template v-if="data.length > 0"> | ||||
| @@ -29,7 +33,8 @@ | ||||
|                 <div class="cards-hint">{{ item.description }}</div> | ||||
|  | ||||
|                 <div class="imgs"> | ||||
|                   <img :src="items.url" alt="" v-for="(items, i) in item.images" :key="i" @click.stop="previewImage(item.images, items.url)" /> | ||||
|                   <img :src="items.url" alt="" v-for="(items, i) in item.images" :key="i" | ||||
|                        @click.stop="previewImage(item.images, items.url)"/> | ||||
|                 </div> | ||||
|  | ||||
|                 <div class="cards-bottom"> | ||||
| @@ -46,7 +51,7 @@ | ||||
|           </template> | ||||
|  | ||||
|           <div v-else> | ||||
|             <AiEmpty description="您还未添加过入户调查走访" class="emptyWrap"> </AiEmpty> | ||||
|             <AiEmpty description="您还未添加过入户调查走访" class="emptyWrap"></AiEmpty> | ||||
|  | ||||
|             <div class="addBtn">点击<span class="toAdds" @click="goDetail">新增按钮</span>试试试吧~</div> | ||||
|           </div> | ||||
| @@ -55,12 +60,15 @@ | ||||
|         <div class="currentRight" v-if="currentTabs == 1"> | ||||
|           <div class="currentLeft-top"> | ||||
|             <div class="left"> | ||||
|               <img src="./components/images/icon2.png" alt="" /> | ||||
|               <img src="./components/images/icon2.png" alt=""/> | ||||
|  | ||||
|               <AiAreaPicker v-model="areaId" ref="areaIds" :areaId="areaId" @select="areaSelect" style="color: #fff"> </AiAreaPicker> | ||||
|               <AiAreaPicker v-model="areaId" ref="areaIds" :areaId="areaId" @select="areaSelect" | ||||
|                             style="color: #fff"></AiAreaPicker> | ||||
|             </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> | ||||
|             <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> | ||||
|           </div> | ||||
|  | ||||
|           <template v-if="data.length > 0"> | ||||
| @@ -75,7 +83,8 @@ | ||||
|                 <div class="cards-hint">{{ item.description }}</div> | ||||
|  | ||||
|                 <div class="imgs"> | ||||
|                   <img :src="items.url" alt="" v-for="(items, i) in item.images" :key="i" @click.stop="previewImage(item.images, items.url)" /> | ||||
|                   <img :src="items.url" alt="" v-for="(items, i) in item.images" :key="i" | ||||
|                        @click.stop="previewImage(item.images, items.url)"/> | ||||
|                 </div> | ||||
|  | ||||
|                 <div class="cards-bottom"> | ||||
| @@ -92,17 +101,18 @@ | ||||
|           </template> | ||||
|  | ||||
|           <div v-else> | ||||
|             <AiEmpty description="您还未添加过入户调查走访" class="emptyWrap"> </AiEmpty> | ||||
|             <AiEmpty description="您还未添加过入户调查走访" class="emptyWrap"></AiEmpty> | ||||
|  | ||||
|             <div class="addBtn">点击<span class="toAdds" @click="goDetail">新增按钮</span>试试试吧~</div> | ||||
|           </div> | ||||
|         </div> | ||||
|       </div> | ||||
|  | ||||
|       <u-modal v-model="deletShow" content="您确认要删除该条信息吗?" :show-cancel-button="true" :mask-close-able="true" :show-title="false" @confirm="delet"></u-modal> | ||||
|       <u-modal v-model="deletShow" content="您确认要删除该条信息吗?" :show-cancel-button="true" :mask-close-able="true" | ||||
|                :show-title="false" @confirm="delet"></u-modal> | ||||
|  | ||||
|       <AiFixedBtn> | ||||
|         <div class="addBtn iconfont iconfont-iconfangda" @tap.stop="goDetail()" /> | ||||
|         <div class="addBtn iconfont iconfont-iconfangda" @tap.stop="goDetail()"/> | ||||
|       </AiFixedBtn> | ||||
|     </template> | ||||
|  | ||||
| @@ -111,7 +121,7 @@ | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
| import { mapState } from 'vuex' | ||||
| import {mapState} from 'vuex' | ||||
| import add from './add.vue' | ||||
| import detail from './detail.vue' | ||||
|  | ||||
| @@ -147,12 +157,13 @@ export default { | ||||
|       deletId: '', | ||||
|     } | ||||
|   }, | ||||
|   computed: { ...mapState(['user']) }, | ||||
|   computed: {...mapState(['user'])}, | ||||
|   created() { | ||||
|     this.areaId = this.user.areaId | ||||
|     this.getList() | ||||
|   }, | ||||
|   mounted() {}, | ||||
|   mounted() { | ||||
|   }, | ||||
|   methods: { | ||||
|     getList() { | ||||
|       this.$http | ||||
| @@ -247,11 +258,13 @@ export default { | ||||
| <style lang="scss" scoped> | ||||
| .AppWalkask { | ||||
|   height: 100%; | ||||
|  | ||||
|   .header-middle { | ||||
|     .currentLeft, | ||||
|     .currentRight { | ||||
|       padding-bottom: 56px; | ||||
|       background: #fff; | ||||
|  | ||||
|       .currentLeft-top { | ||||
|         display: flex; | ||||
|         align-items: center; | ||||
| @@ -262,6 +275,7 @@ export default { | ||||
|           width: 40%; | ||||
|           display: flex; | ||||
|           align-items: center; | ||||
|  | ||||
|           img { | ||||
|             width: 48px; | ||||
|             height: 48px; | ||||
| @@ -272,6 +286,7 @@ export default { | ||||
|       .AiCard { | ||||
|         ::v-deep .start { | ||||
|           border-bottom: 1px solid #dddddd; | ||||
|  | ||||
|           .fill { | ||||
|             .cards-left { | ||||
|               .walkName { | ||||
| @@ -280,6 +295,7 @@ export default { | ||||
|                 margin-right: 16px; | ||||
|                 color: #333; | ||||
|               } | ||||
|  | ||||
|               .tags { | ||||
|                 display: inline-block; | ||||
|                 padding: 6px 16px; | ||||
| @@ -290,6 +306,7 @@ export default { | ||||
|                 margin-left: 16px; | ||||
|               } | ||||
|             } | ||||
|  | ||||
|             .cards-hint { | ||||
|               margin-top: 16px; | ||||
|               font-size: 30px; | ||||
| @@ -302,17 +319,21 @@ export default { | ||||
|               -webkit-line-clamp: 2; | ||||
|               -webkit-box-orient: vertical; | ||||
|             } | ||||
|  | ||||
|             .imgs { | ||||
|               margin-top: 20px; | ||||
|  | ||||
|               img { | ||||
|                 width: 221px; | ||||
|                 height: 221px; | ||||
|                 margin-right: 8px; | ||||
|               } | ||||
|  | ||||
|               img:nth-child(3n + 0) { | ||||
|                 margin-right: 0; | ||||
|               } | ||||
|             } | ||||
|  | ||||
|             .cards-bottom { | ||||
|               margin: 24px 0 16px 0; | ||||
|               font-size: 24px; | ||||
| @@ -341,6 +362,7 @@ export default { | ||||
|         color: #b7b7b7; | ||||
|         margin-top: 5px; | ||||
|         font-weight: 800; | ||||
|  | ||||
|         .toAdds { | ||||
|           color: #467dfe; | ||||
|         } | ||||
|   | ||||
| @@ -4,30 +4,34 @@ | ||||
|       <div class="header-description"> | ||||
|         <u-form :model="forms" ref="uForm" label-width="auto"> | ||||
|           <u-form-item label="区域选择" prop="areaId" style="position: relative"> | ||||
|             <AiAreaPicker v-model="forms.areaId" ref="areaIds" :areaId="areaIdProps" @select="areaSelect" style="color: #333"> </AiAreaPicker> | ||||
|             <AiAreaPicker v-model="forms.areaId" ref="areaIds" :areaId="areaIdProps" @select="areaSelect" | ||||
|                           style="color: #333"></AiAreaPicker> | ||||
|           </u-form-item> | ||||
|  | ||||
|           <u-form-item label="走访对象" prop="create_user_name" required style="position: relative"> | ||||
|             <u-input v-model="forms.create_user_name" disabled placeholder="请选择走访对象" @click="toWalkObject" /> | ||||
|             <u-input v-model="forms.create_user_name" disabled placeholder="请选择走访对象" @click="toWalkObject"/> | ||||
|  | ||||
|             <u-icon name="arrow-right" color="#CCCCCC" style="position: absolute; top: 25px; right: 30px"></u-icon> | ||||
|           </u-form-item> | ||||
|  | ||||
|           <u-form-item label="现实状态" prop="reality" style="position: relative"> | ||||
|             <u-input v-model="forms.reality" disabled placeholder="请选择走访慰问对象" @click="showStstus = true" /> | ||||
|             <u-input v-model="forms.reality" disabled placeholder="请选择走访慰问对象" @click="showStstus = true"/> | ||||
|  | ||||
|             <u-select v-model="showStstus" :list="$dict.getDict('realityStatus')" value-name="dictValue" label-name="dictName" @confirm="realityStstus"></u-select> | ||||
|             <u-select v-model="showStstus" :list="$dict.getDict('realityStatus')" value-name="dictValue" | ||||
|                       label-name="dictName" @confirm="realityStstus"></u-select> | ||||
|  | ||||
|             <u-icon name="arrow-right" color="#CCCCCC" style="position: absolute; top: 25px; right: 30px"></u-icon> | ||||
|           </u-form-item> | ||||
|  | ||||
|           <u-form-item label="入户走访事项" prop="title" required label-position="top"> | ||||
|             <u-input v-model="forms.title" placeholder="请输入入户走访事项(30字以内)" type="textarea" auto-height height="60" maxlength="30" /> | ||||
|             <u-input v-model="forms.title" placeholder="请输入入户走访事项(30字以内)" type="textarea" auto-height height="60" | ||||
|                      maxlength="30"/> | ||||
|             <div>{{ forms.title.length }}/30</div> | ||||
|           </u-form-item> | ||||
|  | ||||
|           <u-form-item label="入户走访内容" prop="description" label-position="top"> | ||||
|             <u-input v-model="forms.description" placeholder="请输入入户走访事项(500字以内)" type="textarea" auto-height height="60" maxlength="500" /> | ||||
|             <u-input v-model="forms.description" placeholder="请输入入户走访事项(500字以内)" type="textarea" auto-height height="60" | ||||
|                      maxlength="500"/> | ||||
|             <div>{{ forms.description.length }}/500</div> | ||||
|           </u-form-item> | ||||
|  | ||||
| @@ -47,7 +51,7 @@ | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
| import { mapState } from 'vuex' | ||||
| import {mapState} from 'vuex' | ||||
| import walkObject from './walkObject' | ||||
|  | ||||
| export default { | ||||
| @@ -79,7 +83,7 @@ export default { | ||||
|       clickedUserSelect: false, | ||||
|     } | ||||
|   }, | ||||
|   computed: { ...mapState(['user']) }, | ||||
|   computed: {...mapState(['user'])}, | ||||
|   created() { | ||||
|     this.areaIdProps = this.user.areaId | ||||
|     this.$dict.load('realityStatus').then(() => { | ||||
| @@ -118,7 +122,7 @@ export default { | ||||
|           if (this.forms.images) { | ||||
|             this.forms.images.map((e) => { | ||||
|               console.log(e) | ||||
|               imgs.push({ url: e.url, id: e.id }) | ||||
|               imgs.push({url: e.url, id: e.id}) | ||||
|             }) | ||||
|           } | ||||
|  | ||||
| @@ -143,7 +147,7 @@ export default { | ||||
|               console.log(5) | ||||
|               this.$u.toast('保存成功') | ||||
|               this.flag = false | ||||
|                 uni.navigateTo({ url: `./AppWalkask` }) | ||||
|               uni.navigateTo({url: `./AppWalkask`}) | ||||
|               console.log(6) | ||||
|             } | ||||
|           }) | ||||
| @@ -187,20 +191,24 @@ export default { | ||||
| .add { | ||||
|   height: 100%; | ||||
|   padding-bottom: 112px; | ||||
|  | ||||
|   .header-description { | ||||
|     ::v-deep .u-form { | ||||
|       .u-form-item { | ||||
|         margin-bottom: 16px; | ||||
|  | ||||
|         .u-form-item__body { | ||||
|           .u-form-item--right__content__slot { | ||||
|             padding-bottom: 0; | ||||
|           } | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .u-form-item:last-child { | ||||
|         margin-bottom: 0; | ||||
|         padding-bottom: 20px !important; | ||||
|       } | ||||
|  | ||||
|       .avatars { | ||||
|         .u-form-item__body { | ||||
|           .default { | ||||
|   | ||||
| @@ -28,7 +28,7 @@ | ||||
|       <div class="hint-con" v-if="data.description">{{ data.description }}</div> | ||||
|  | ||||
|       <div class="imgs"> | ||||
|         <img :src="item.url" alt="" v-for="(item, index) in data.images" :key="index" /> | ||||
|         <img :src="item.url" alt="" v-for="(item, index) in data.images" :key="index"/> | ||||
|       </div> | ||||
|     </div> | ||||
|  | ||||
| @@ -54,7 +54,8 @@ export default { | ||||
|       this.getDetail() | ||||
|     }) | ||||
|   }, | ||||
|   mounted() {}, | ||||
|   mounted() { | ||||
|   }, | ||||
|   methods: { | ||||
|     getDetail() { | ||||
|       this.$http.post(`/app/appvisitvondolence/queryDetailById?id=${this.params.id}`).then((res) => { | ||||
| @@ -73,14 +74,17 @@ export default { | ||||
| <style lang="scss" scoped> | ||||
| .detail { | ||||
|   height: 100%; | ||||
|  | ||||
|   .header-top { | ||||
|     background: #3975c6; | ||||
|     padding: 24px 32px 32px; | ||||
|  | ||||
|     .hint { | ||||
|       font-size: 40px; | ||||
|       font-weight: 500; | ||||
|       color: #ffffff; | ||||
|     } | ||||
|  | ||||
|     .walk-item { | ||||
|       font-size: 28px; | ||||
|       color: #d7e3f3; | ||||
| @@ -91,17 +95,21 @@ export default { | ||||
|   .header-middle { | ||||
|     background: #fff; | ||||
|     padding: 32px 32px 32px 32px; | ||||
|  | ||||
|     .hint-con { | ||||
|       font-size: 32px; | ||||
|       color: #666666; | ||||
|     } | ||||
|  | ||||
|     .imgs { | ||||
|       margin: 32px 0 48px 0; | ||||
|  | ||||
|       img { | ||||
|         width: 218px; | ||||
|         height: 218px; | ||||
|         margin-right: 16px; | ||||
|       } | ||||
|  | ||||
|       img:nth-child(3n + 0) { | ||||
|         margin-right: 0; | ||||
|       } | ||||
|   | ||||
| @@ -1,7 +1,8 @@ | ||||
| <template> | ||||
|   <div class="walkObject"> | ||||
|     <div class="header-top"> | ||||
|       <u-search v-model="keyword" placeholder="搜索" :show-action="false" bg-color="#F5F5F5" search-icon-color="#CCCCCC" placeholder-color="#999999" @search="handerSearch" @clear="handerClear"></u-search> | ||||
|       <u-search v-model="keyword" placeholder="搜索" :show-action="false" bg-color="#F5F5F5" search-icon-color="#CCCCCC" | ||||
|                 placeholder-color="#999999" @search="handerSearch" @clear="handerClear"></u-search> | ||||
|     </div> | ||||
|  | ||||
|     <div class="header-middle"> | ||||
| @@ -12,7 +13,8 @@ | ||||
|       <div class="Checkbox"> | ||||
|         <div v-if="DiyList.length > 0"> | ||||
|           <u-collapse event-type="close" arrowaccordion> | ||||
|             <u-collapse-item v-for="(item, index) in DiyList" :title="item.menuLevel2Name" :key="index" @change="selectUser(item)"> | ||||
|             <u-collapse-item v-for="(item, index) in DiyList" :title="item.menuLevel2Name" :key="index" | ||||
|                              @change="selectUser(item)"> | ||||
|               <u-radio-group v-model="value"> | ||||
|                 <u-radio v-for="(item, index) in userList" :key="index" :name="item.create_user_name"> | ||||
|                   {{ item.create_user_name }} | ||||
| @@ -26,7 +28,7 @@ | ||||
|           </u-collapse> | ||||
|         </div> | ||||
|  | ||||
|         <AiEmpty description="没有数据" class="emptyWrap" v-else> </AiEmpty> | ||||
|         <AiEmpty description="没有数据" class="emptyWrap" v-else></AiEmpty> | ||||
|       </div> | ||||
|     </div> | ||||
|  | ||||
| @@ -73,7 +75,8 @@ export default { | ||||
|   created() { | ||||
|     this.getDiyList() | ||||
|   }, | ||||
|   mounted() {}, | ||||
|   mounted() { | ||||
|   }, | ||||
|   methods: { | ||||
|     getDiyList() { | ||||
|       this.$http.post('/app/appapplicationinfo/queryApplicationListByType?type=0').then((res) => { | ||||
| @@ -86,7 +89,7 @@ export default { | ||||
|     selectUser(item) { | ||||
|       console.log(item.id) | ||||
|       this.appId = item.id | ||||
|       this.$http.post(`/app/appapplicationinfo/list?appId=${item.id}¤t=${this.current}&size=${99}`, { searchParam: this.keyword }).then((res) => { | ||||
|       this.$http.post(`/app/appapplicationinfo/list?appId=${item.id}¤t=${this.current}&size=${99}`, {searchParam: this.keyword}).then((res) => { | ||||
|         if (res.code == 0) { | ||||
|           this.userList = res.data.records | ||||
|         } | ||||
| @@ -96,7 +99,7 @@ export default { | ||||
|     submit() { | ||||
|       this.userList.map((item) => { | ||||
|         if (item.create_user_name == this.value) { | ||||
|           this.$emit('back', { item: item, appId: this.appId }) | ||||
|           this.$emit('back', {item: item, appId: this.appId}) | ||||
|         } | ||||
|       }) | ||||
|     }, | ||||
| @@ -109,6 +112,7 @@ export default { | ||||
| .walkObject { | ||||
|   background: #ffffff; | ||||
|   padding-bottom: 118px; | ||||
|  | ||||
|   .header-top { | ||||
|     background: #fff; | ||||
|     padding: 20px 32px; | ||||
| @@ -123,10 +127,12 @@ export default { | ||||
|       font-size: 30px; | ||||
|       font-weight: 500; | ||||
|     } | ||||
|  | ||||
|     .empty-div { | ||||
|       height: 16px; | ||||
|       background: #f5f5f5; | ||||
|     } | ||||
|  | ||||
|     .Checkbox { | ||||
|       padding: 0 20px 0 30px; | ||||
|  | ||||
| @@ -153,6 +159,7 @@ export default { | ||||
|     width: 100%; | ||||
|     box-sizing: border-box; | ||||
|     padding: 0 32px; | ||||
|  | ||||
|     .subBtn { | ||||
|       margin: 20px 0 18px 0; | ||||
|       padding: 18px 32px; | ||||
| @@ -161,8 +168,10 @@ export default { | ||||
|       font-size: 32px; | ||||
|       color: #ffffff; | ||||
|     } | ||||
|  | ||||
|     .typeName { | ||||
|       margin: 36px 0 22px 0; | ||||
|  | ||||
|       .typeName-box { | ||||
|         padding: 16px 14px; | ||||
|         background: #eaeef1; | ||||
| @@ -171,6 +180,7 @@ export default { | ||||
|         font-weight: 500; | ||||
|         margin-left: 10px; | ||||
|       } | ||||
|  | ||||
|       .typeName-box:first-child { | ||||
|         margin-left: 0; | ||||
|       } | ||||
|   | ||||
| @@ -180,7 +180,7 @@ function requestAndroid(permissionID) { | ||||
|   return new Promise((resolve, reject) => { | ||||
|     plus.android.requestPermissions( | ||||
|         [permissionID], | ||||
|             function(resultObj) { | ||||
|         function (resultObj) { | ||||
|           var result = 0; | ||||
|           for (var i = 0; i < resultObj.granted.length; i++) { | ||||
|             var grantedPermission = resultObj.granted[i]; | ||||
| @@ -199,7 +199,7 @@ function requestAndroid(permissionID) { | ||||
|           } | ||||
|           resolve(result); | ||||
|         }, | ||||
|             function(error) { | ||||
|         function (error) { | ||||
|           console.log('result error: ' + error.message) | ||||
|           resolve({ | ||||
|             code: error.code, | ||||
| @@ -234,7 +234,7 @@ function gotoAppPermissionSetting() { | ||||
| } | ||||
|  | ||||
| const permission = { | ||||
|     get isIOS(){ | ||||
|   get isIOS() { | ||||
|     return typeof isIOS === 'boolean' ? isIOS : (isIOS = uni.getSystemInfoSync().platform === 'ios') | ||||
|   }, | ||||
|   requestIOS: requestIOS, | ||||
|   | ||||
| @@ -7,11 +7,9 @@ | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
|   export default { | ||||
| export default { | ||||
|   name: "AiAdd", | ||||
|     props: { | ||||
|  | ||||
|     }, | ||||
|   props: {}, | ||||
|   data() { | ||||
|     return {} | ||||
|   }, | ||||
| @@ -20,11 +18,11 @@ | ||||
|       this.$emit("add") | ||||
|     } | ||||
|   } | ||||
|   } | ||||
| } | ||||
| </script> | ||||
|  | ||||
| <style lang="scss" scoped> | ||||
|   .movableArea { | ||||
| .movableArea { | ||||
|   position: fixed; | ||||
|   left: 0; | ||||
|   top: 0; | ||||
| @@ -36,9 +34,9 @@ | ||||
|   uni-movable-view { | ||||
|     pointer-events: auto; | ||||
|   } | ||||
|   } | ||||
| } | ||||
|  | ||||
|   .AiAdd { | ||||
| .AiAdd { | ||||
|   width: 96px; | ||||
|   height: 96px; | ||||
|   background: #1365DD; | ||||
| @@ -48,7 +46,8 @@ | ||||
|   align-items: center; | ||||
|   flex-direction: column; | ||||
|   justify-content: center; | ||||
|     &:before , &:after{ | ||||
|  | ||||
|   &:before, &:after { | ||||
|     content: ""; | ||||
|     background: #FFFFFF; | ||||
|     display: block; | ||||
| @@ -56,14 +55,14 @@ | ||||
|     border-radius: 4px; | ||||
|   } | ||||
|  | ||||
|     &:before{ | ||||
|   &:before { | ||||
|     height: 48px; | ||||
|     width: 4px; | ||||
|   } | ||||
|  | ||||
|     &:after{ | ||||
|   &:after { | ||||
|     height: 4px; | ||||
|     width: 48px; | ||||
|   } | ||||
|   } | ||||
| } | ||||
| </style> | ||||
|   | ||||
| @@ -2,21 +2,22 @@ | ||||
|   <section class="AiAreaPicker"> | ||||
|     <ai-search-popup mode="bottom" ref="areaSelector"> | ||||
|       <div slot="btn" @tap="handleInit"> | ||||
|         <slot v-if="$slots.default" /> | ||||
|         <slot v-if="$slots.default"/> | ||||
|         <div v-else class="areaSelector"> | ||||
|           <image :src="icon" class="location" /> | ||||
|           <div v-text="currentArea.name" /> | ||||
|           <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)" /> | ||||
|           <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" /> | ||||
|         <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 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> | ||||
| @@ -25,14 +26,14 @@ | ||||
| <script> | ||||
| import AiSearchPopup from './AiSearchPopup' | ||||
| import AiCell from './AiCell.vue' | ||||
| import { mapState } from 'vuex' | ||||
| import {mapState} from 'vuex' | ||||
|  | ||||
| export default { | ||||
|   name: 'AiAreaPicker', | ||||
|   components: { AiCell, AiSearchPopup }, | ||||
|   components: {AiCell, AiSearchPopup}, | ||||
|   props: { | ||||
|     areaId: { default: '' }, | ||||
|     name: { default: '' }, | ||||
|     areaId: {default: ''}, | ||||
|     name: {default: ''}, | ||||
|     all: Boolean, | ||||
|   }, | ||||
|   computed: { | ||||
| @@ -58,7 +59,7 @@ export default { | ||||
|   }, | ||||
|   data() { | ||||
|     return { | ||||
|       fullArea: [{ name: '全国', id: 0 }], | ||||
|       fullArea: [{name: '全国', id: 0}], | ||||
|       index: '', | ||||
|       list: [], | ||||
|     } | ||||
| @@ -75,7 +76,7 @@ export default { | ||||
|       this.$http | ||||
|       .post('/admin/area/getAllParentAreaId', null, { | ||||
|         withoutToken: true, | ||||
|             params: { areaId }, | ||||
|         params: {areaId}, | ||||
|       }) | ||||
|       .then((res) => { | ||||
|         if (res?.data) { | ||||
| @@ -84,7 +85,7 @@ export default { | ||||
|           } else { | ||||
|             this.fullArea = res.data | ||||
|           } | ||||
|               this.fullArea.unshift({ name: '全国', id: 0 }) | ||||
|           this.fullArea.unshift({name: '全国', id: 0}) | ||||
|         } | ||||
|       }) | ||||
|     }, | ||||
| @@ -93,7 +94,7 @@ export default { | ||||
|       this.$http | ||||
|       .post('/admin/area/queryAreaByParentId', null, { | ||||
|         withoutToken: true, | ||||
|             params: { id }, | ||||
|         params: {id}, | ||||
|       }) | ||||
|       .then((res) => { | ||||
|         if (res?.data) { | ||||
| @@ -104,7 +105,7 @@ export default { | ||||
|       }) | ||||
|     }, | ||||
|     getProvinces() { | ||||
|       this.$http.post('/admin/area/queryProvinceList', null, { withoutToken: true }).then((res) => { | ||||
|       this.$http.post('/admin/area/queryProvinceList', null, {withoutToken: true}).then((res) => { | ||||
|         if (res?.data) { | ||||
|           this.list = res.data | ||||
|         } | ||||
|   | ||||
| @@ -26,13 +26,13 @@ export default { | ||||
|   justify-content: center; | ||||
|  | ||||
|   .emptyImg { | ||||
|     width: 400 rpx; | ||||
|     height: 240 rpx; | ||||
|     width: 400px; | ||||
|     height: 240px; | ||||
|     margin-top: 112px; | ||||
|   } | ||||
|  | ||||
|   .emptyText { | ||||
|     font-size: 29 rpx; | ||||
|     font-size: 29px; | ||||
|     font-family: PingFangSC-Regular, PingFang SC; | ||||
|     font-weight: 400; | ||||
|     color: rgba(183, 183, 183, 1); | ||||
|   | ||||
| @@ -45,7 +45,7 @@ export default { | ||||
|             current: this.image, | ||||
|             urls: [this.image], | ||||
|             success() { | ||||
|               sessionStorage.setItem("previewImage"," 1") | ||||
|               sessionStorage.setItem("previewImage", " 1") | ||||
|             } | ||||
|           }) | ||||
|         } else { | ||||
|   | ||||
| @@ -12,10 +12,10 @@ | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
|   import tree from "./AiSelectEnterprise/tree"; | ||||
|   import AiBack from "./AiBack"; | ||||
| import tree from "./AiSelectEnterprise/tree"; | ||||
| import AiBack from "./AiBack"; | ||||
|  | ||||
|   export default { | ||||
| export default { | ||||
|   name: "AiSelectEnterprise", | ||||
|   components: {tree, AiBack}, | ||||
|   props: { | ||||
| @@ -72,11 +72,11 @@ | ||||
|       } | ||||
|     } | ||||
|   }, | ||||
|   } | ||||
| } | ||||
| </script> | ||||
|  | ||||
| <style lang="scss" scoped> | ||||
|   .AiSelectEnterprise { | ||||
| .AiSelectEnterprise { | ||||
|   min-height: 100%; | ||||
|   background-color: #F5F5F5; | ||||
|   position: relative; | ||||
| @@ -144,5 +144,5 @@ | ||||
|       margin-left: 8px; | ||||
|     } | ||||
|   } | ||||
|   } | ||||
| } | ||||
| </style> | ||||
|   | ||||
| @@ -24,10 +24,10 @@ | ||||
|           <div class="inline-item" @click.stop="backTree(item,index)" v-if="index!=0"> | ||||
|             <span style="margin: 0 8px">/</span> | ||||
|             <text v-if="index==parent.length-1" class="none inline-item"> | ||||
|               {{item[tag]}} | ||||
|               {{ item[tag] }} | ||||
|             </text> | ||||
|             <text v-else class="active"> | ||||
|               {{item[tag]}} | ||||
|               {{ item[tag] }} | ||||
|             </text> | ||||
|           </div> | ||||
|         </div> | ||||
| @@ -50,17 +50,17 @@ | ||||
|             <u-row justify="between" style="width: 100%;"> | ||||
|               <div class="word" v-if="tag=='name'"> | ||||
|                 <img :src="$cdn + 'common/xzbq.png'" v-if="item.type==1" alt=""> | ||||
|                 <span class="ellipsis">{{item[tag]}}</span> | ||||
|                 <span class="ellipsis">{{ item[tag] }}</span> | ||||
|               </div> | ||||
|               <div class="word" v-else-if="tag=='tagname'"> | ||||
|                 <template v-if="!item.openId"> | ||||
|                   <img :src="$cdn + 'common/xzbqbottom.png'" alt=""> | ||||
|                   <span class="ellipsis">{{item[tag]}}</span> | ||||
|                   <span class="ellipsis">{{ item[tag] }}</span> | ||||
|                 </template> | ||||
|                 <template v-else> | ||||
|                   <u-avatar :src="item.avatar || ($cdn + 'common/xztx.png')" mode="square" :size="37" | ||||
|                             style="margin: 0 17px;"></u-avatar> | ||||
|                   <span class="ellipsis">{{item["name"]}}</span> | ||||
|                   <span class="ellipsis">{{ item["name"] }}</span> | ||||
|                 </template> | ||||
|               </div> | ||||
|               <div class="right" | ||||
| @@ -75,9 +75,9 @@ | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
|   import AiTopFixed from "../AiTopFixed"; | ||||
| import AiTopFixed from "../AiTopFixed"; | ||||
|  | ||||
|   export default { | ||||
| export default { | ||||
|   name: "tree", | ||||
|   components: {AiTopFixed}, | ||||
|   props: { | ||||
| @@ -282,7 +282,7 @@ | ||||
|       this.isSear = true | ||||
|       this.parent.splice(1, Infinity) | ||||
|       this.tree = this.searchResult | ||||
|         if(!val) this.clear() | ||||
|       if (!val) this.clear() | ||||
|     }, | ||||
|  | ||||
|     search(data, keyword) { | ||||
| @@ -353,12 +353,12 @@ | ||||
|   created() { | ||||
|     this.getTree() | ||||
|   } | ||||
|   } | ||||
| } | ||||
| </script> | ||||
|  | ||||
| <style lang="scss" scoped> | ||||
|  | ||||
|   .tree { | ||||
| .tree { | ||||
|   min-height: 100%; | ||||
|   background-color: #F5F5F5; | ||||
|  | ||||
| @@ -430,7 +430,7 @@ | ||||
|               margin: 0 34px; | ||||
|             } | ||||
|  | ||||
|               .ellipsis{ | ||||
|             .ellipsis { | ||||
|               width: 450px; | ||||
|               overflow: hidden; | ||||
|               text-overflow: ellipsis; | ||||
| @@ -477,5 +477,5 @@ | ||||
|     box-sizing: border-box; | ||||
|     padding: 20px 32px 0; | ||||
|   } | ||||
|   } | ||||
| } | ||||
| </style> | ||||
|   | ||||
| @@ -1,24 +1,26 @@ | ||||
| <template> | ||||
|   <view class="imt-audio"> | ||||
|     <view class="audio-wrapper"> | ||||
| 			<view class="audio-number">{{format(current)}}</view> | ||||
| 			<slider class="audio-slider" :activeColor="color" block-size="16" :value="current" :max="duration || 10" @changing="seek=true,current=$event.detail.value" @change="audio.seek($event.detail.value)"></slider> | ||||
| 			<view class="audio-number">{{format(duration)}}</view> | ||||
|       <view class="audio-number">{{ format(current) }}</view> | ||||
|       <slider class="audio-slider" :activeColor="color" block-size="16" :value="current" :max="duration || 10" | ||||
|               @changing="seek=true,current=$event.detail.value" @change="audio.seek($event.detail.value)"></slider> | ||||
|       <view class="audio-number">{{ format(duration) }}</view> | ||||
|     </view> | ||||
|     <view class="audio-control-wrapper" :style="{color}"> | ||||
|       <image | ||||
|           class="audio-control audio-control-switch" | ||||
|           @click="audio.paused?play():audio.pause()" | ||||
|         :src="paused ? playImg : stopImg" /> | ||||
|           :src="paused ? playImg : stopImg"/> | ||||
|       <p>{{ paused ? '点击播放' : '点击停止播放' }}</p> | ||||
|     </view> | ||||
|   </view> | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
|   import stopImg from '../pages/resourcesManage/img/stop-img.png' | ||||
|   import playImg from '../pages/resourcesManage/img/play-icon.png' | ||||
| 	export default { | ||||
| import stopImg from '../pages/resourcesManage/img/stop-img.png' | ||||
| import playImg from '../pages/resourcesManage/img/play-icon.png' | ||||
|  | ||||
| export default { | ||||
|   data() { | ||||
|     return { | ||||
|       audio: uni.createInnerAudioContext(), | ||||
| @@ -101,7 +103,7 @@ | ||||
|       this.seek = false | ||||
|     }) | ||||
|   }, | ||||
| 		beforeDestroy(){ | ||||
|   beforeDestroy() { | ||||
|     this.audio.destroy() | ||||
|   }, | ||||
|   watch: { | ||||
| @@ -114,72 +116,72 @@ | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| 	} | ||||
| } | ||||
| </script> | ||||
|  | ||||
| <style> | ||||
| 	.imt-audio { | ||||
| .imt-audio { | ||||
|   background: #fff; | ||||
| 		border-radius: 20upx; | ||||
| 	} | ||||
|   border-radius: 20 upx; | ||||
| } | ||||
|  | ||||
| 	.audio-wrapper { | ||||
| .audio-wrapper { | ||||
|   display: flex; | ||||
|   align-items: center; | ||||
| 	} | ||||
| } | ||||
|  | ||||
| 	.audio-number { | ||||
| 		width: 120upx; | ||||
| 		font-size: 24upx; | ||||
| .audio-number { | ||||
|   width: 120 upx; | ||||
|   font-size: 24 upx; | ||||
|   line-height: 1; | ||||
|   color: #999999; | ||||
|   text-align: center; | ||||
| 	} | ||||
| } | ||||
|  | ||||
| 	.audio-slider { | ||||
| .audio-slider { | ||||
|   flex: 1; | ||||
|   margin: 0; | ||||
| 	} | ||||
| } | ||||
|  | ||||
| 	.audio-control-wrapper { | ||||
| 		margin-top: 40upx; | ||||
| .audio-control-wrapper { | ||||
|   margin-top: 40 upx; | ||||
|   text-align: center; | ||||
| 	} | ||||
| } | ||||
|  | ||||
|   .audio-control-wrapper p { | ||||
| .audio-control-wrapper p { | ||||
|   color: #999999; | ||||
|     font-size: 26rpx; | ||||
|   } | ||||
|   font-size: 26 rpx; | ||||
| } | ||||
|  | ||||
|   .audio-control-wrapper image { | ||||
|     width: 128rpx; | ||||
|     height: 128rpx; | ||||
|   } | ||||
| .audio-control-wrapper image { | ||||
|   width: 128 rpx; | ||||
|   height: 128 rpx; | ||||
| } | ||||
|  | ||||
| 	.audio-control { | ||||
| 		font-size: 32upx; | ||||
| .audio-control { | ||||
|   font-size: 32 upx; | ||||
|   line-height: 1; | ||||
|   border-radius: 50%; | ||||
| 	} | ||||
| } | ||||
|  | ||||
| 	.audio-control-next { | ||||
| .audio-control-next { | ||||
|   transform: rotate(180deg); | ||||
| 	} | ||||
| } | ||||
|  | ||||
| 	.audio-control-switch { | ||||
| 		font-size: 40upx; | ||||
| 		margin: 0 100upx; | ||||
| 	} | ||||
| .audio-control-switch { | ||||
|   font-size: 40 upx; | ||||
|   margin: 0 100 upx; | ||||
| } | ||||
|  | ||||
| 	.audioLoading { | ||||
| .audioLoading { | ||||
|   animation: loading 2s; | ||||
|   animation-iteration-count: infinite; | ||||
|   animation-timing-function: linear; | ||||
| 	} | ||||
| } | ||||
|  | ||||
| 	@keyframes loading { | ||||
| @keyframes loading { | ||||
|   to { | ||||
|     transform: rotate(360deg); | ||||
|   } | ||||
| 	} | ||||
| } | ||||
| </style> | ||||
|   | ||||
| @@ -19,7 +19,8 @@ | ||||
|             <span>联系方式</span> | ||||
|           </div> | ||||
|           <div class="right"> | ||||
|             <input placeholder="请输入" type="number" v-model="form.phone" :maxlength="11" placeholder-style="color: #999; font-size: 30rpx;" /> | ||||
|             <input placeholder="请输入" type="number" v-model="form.phone" :maxlength="11" | ||||
|                    placeholder-style="color: #999; font-size: 30rpx;"/> | ||||
|           </div> | ||||
|         </div> | ||||
|       </div> | ||||
| @@ -52,7 +53,7 @@ | ||||
|             <span>家庭住址</span> | ||||
|           </div> | ||||
|           <div class="right"> | ||||
|             <input placeholder="请输入" v-model="form.address" placeholder-style="color: #999; font-size: 30rpx;" /> | ||||
|             <input placeholder="请输入" v-model="form.address" placeholder-style="color: #999; font-size: 30rpx;"/> | ||||
|           </div> | ||||
|         </div> | ||||
|       </div> | ||||
| @@ -64,7 +65,9 @@ | ||||
|           </div> | ||||
|           <div class="right"> | ||||
|             <u-radio-group v-model="form.move"> | ||||
|               <u-radio :name="item.dictValue" v-for="(item, index) in $dict.getDict('fpYesOrNo')" :key="index">{{ item.dictName }}</u-radio> | ||||
|               <u-radio :name="item.dictValue" v-for="(item, index) in $dict.getDict('fpYesOrNo')" :key="index"> | ||||
|                 {{ item.dictName }} | ||||
|               </u-radio> | ||||
|             </u-radio-group> | ||||
|           </div> | ||||
|         </div> | ||||
| @@ -78,7 +81,8 @@ | ||||
|             <span>安置地区</span> | ||||
|           </div> | ||||
|           <div class="right"> | ||||
|             <AiAreaPicker ref="area" class="aiArea" :areaId.sync="form.placeAreaId" mode="custom" all @select="onChange"> | ||||
|             <AiAreaPicker ref="area" class="aiArea" :areaId.sync="form.placeAreaId" mode="custom" all | ||||
|                           @select="onChange"> | ||||
|               <span class="label" v-if="form.placeArea">{{ form.placeArea }}</span> | ||||
|               <i v-else>请选择</i> | ||||
|               <u-icon name="arrow-right" color="#ddd"/> | ||||
| @@ -93,7 +97,7 @@ | ||||
|             <span>安置地区详细地址</span> | ||||
|           </div> | ||||
|           <div class="right"> | ||||
|             <input placeholder="请输入" v-model="form.place" placeholder-style="color: #999; font-size: 30rpx;" /> | ||||
|             <input placeholder="请输入" v-model="form.place" placeholder-style="color: #999; font-size: 30rpx;"/> | ||||
|           </div> | ||||
|         </div> | ||||
|       </div> | ||||
| @@ -103,13 +107,13 @@ | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
|   import AiUploader from '@/components/AiUploader' | ||||
|   import AiSelect from '@/components/AiSelect' | ||||
|   import AiArea from '@/components/AiArea' | ||||
|   import AiAreaPicker from '@/components/AiAreaPicker' | ||||
| import AiUploader from '@/components/AiUploader' | ||||
| import AiSelect from '@/components/AiSelect' | ||||
| import AiArea from '@/components/AiArea' | ||||
| import AiAreaPicker from '@/components/AiAreaPicker' | ||||
|  | ||||
|   export default { | ||||
|     data () { | ||||
| export default { | ||||
|   data() { | ||||
|     return { | ||||
|       form: { | ||||
|         addressAreaId: '', | ||||
| @@ -135,13 +139,13 @@ | ||||
|     AiAreaPicker | ||||
|   }, | ||||
|  | ||||
|     created () { | ||||
|   created() { | ||||
|     this.$areaId = this.$store.state.user.areaId | ||||
|     this.areaName = this.$store.state.user.areaFullName | ||||
|     this.$dict.load(['fpType', 'fpYesOrNo']) | ||||
|   }, | ||||
|  | ||||
|     onLoad (query) { | ||||
|   onLoad(query) { | ||||
|     if (query.id) { | ||||
|       this.isEdit = true | ||||
|       this.id = query.id | ||||
| @@ -151,7 +155,7 @@ | ||||
|   }, | ||||
|  | ||||
|   methods: { | ||||
|       submit () { | ||||
|     submit() { | ||||
|       if (!this.form.type) { | ||||
|         return this.$u.toast('请选择监测类型') | ||||
|       } | ||||
| @@ -180,7 +184,7 @@ | ||||
|       }) | ||||
|     }, | ||||
|  | ||||
|       onAreaChange (e) { | ||||
|     onAreaChange(e) { | ||||
|       this.form.addressAreaId = e.id | ||||
|       const areaList = this.$refs.address.fullArea | ||||
|       let fullAreaName = '' | ||||
| @@ -191,7 +195,7 @@ | ||||
|       this.form.addressArea = fullAreaName.replace('全国', '') | ||||
|     }, | ||||
|  | ||||
|       onChange (e) { | ||||
|     onChange(e) { | ||||
|       this.form.placeAreaId = e.id | ||||
|       const areaList = this.$refs.area.fullArea | ||||
|       let fullAreaName = '' | ||||
| @@ -202,7 +206,7 @@ | ||||
|       this.form.placeArea = fullAreaName.replace('全国', '') | ||||
|     }, | ||||
|  | ||||
|       getInfo (id) { | ||||
|     getInfo(id) { | ||||
|       this.$http.post(`/app/apppreventionreturntopoverty/queryDetailById?id=${id}`).then(res => { | ||||
|         if (res.code === 0) { | ||||
|           this.form = { | ||||
| @@ -213,18 +217,19 @@ | ||||
|       }) | ||||
|     } | ||||
|   } | ||||
|   } | ||||
| } | ||||
| </script> | ||||
|  | ||||
| <style lang="scss"> | ||||
|   .add { | ||||
| .add { | ||||
|   padding-bottom: 120px; | ||||
|  | ||||
|   .aiArea { | ||||
|     display: flex; | ||||
|     align-items: center; | ||||
|  | ||||
|     .label { | ||||
|         color: #303133!important; | ||||
|       color: #303133 !important; | ||||
|       font-size: 30px; | ||||
|     } | ||||
|  | ||||
| @@ -361,5 +366,5 @@ | ||||
|     font-size: 32px; | ||||
|     background: #3192F4; | ||||
|   } | ||||
|   } | ||||
| } | ||||
| </style> | ||||
|   | ||||
| @@ -21,7 +21,7 @@ | ||||
|             <span>姓名</span> | ||||
|           </div> | ||||
|           <div class="right"> | ||||
|             <input placeholder="请输入" v-model="form.name" placeholder-style="color: #999; font-size: 30rpx;" /> | ||||
|             <input placeholder="请输入" v-model="form.name" placeholder-style="color: #999; font-size: 30rpx;"/> | ||||
|           </div> | ||||
|         </div> | ||||
|       </div> | ||||
| @@ -32,7 +32,7 @@ | ||||
|             <span>身份证号</span> | ||||
|           </div> | ||||
|           <div class="right"> | ||||
|             <input placeholder="请输入" v-model="form.idNumber" placeholder-style="color: #999; font-size: 30rpx;" /> | ||||
|             <input placeholder="请输入" v-model="form.idNumber" placeholder-style="color: #999; font-size: 30rpx;"/> | ||||
|           </div> | ||||
|         </div> | ||||
|       </div> | ||||
| @@ -122,7 +122,7 @@ | ||||
|             <span>务工区域</span> | ||||
|           </div> | ||||
|           <div class="right"> | ||||
|             <input placeholder="请输入" v-model="form.workArea" placeholder-style="color: #999; font-size: 30rpx;" /> | ||||
|             <input placeholder="请输入" v-model="form.workArea" placeholder-style="color: #999; font-size: 30rpx;"/> | ||||
|           </div> | ||||
|         </div> | ||||
|       </div> | ||||
| @@ -133,7 +133,8 @@ | ||||
|             <span>务工时长(月)</span> | ||||
|           </div> | ||||
|           <div class="right"> | ||||
|             <input placeholder="请输入" type="number" v-model="form.workingMonths" placeholder-style="color: #999; font-size: 30rpx;" /> | ||||
|             <input placeholder="请输入" type="number" v-model="form.workingMonths" | ||||
|                    placeholder-style="color: #999; font-size: 30rpx;"/> | ||||
|           </div> | ||||
|         </div> | ||||
|       </div> | ||||
| @@ -147,7 +148,9 @@ | ||||
|           </div> | ||||
|           <div class="right"> | ||||
|             <u-radio-group v-model="form.medicalInsurance"> | ||||
|               <u-radio :name="item.dictValue" v-for="(item, index) in $dict.getDict('fpYesOrNo')" :key="index">{{ item.dictName }}</u-radio> | ||||
|               <u-radio :name="item.dictValue" v-for="(item, index) in $dict.getDict('fpYesOrNo')" :key="index"> | ||||
|                 {{ item.dictName }} | ||||
|               </u-radio> | ||||
|             </u-radio-group> | ||||
|           </div> | ||||
|         </div> | ||||
| @@ -160,7 +163,9 @@ | ||||
|           </div> | ||||
|           <div class="right"> | ||||
|             <u-radio-group v-model="form.sicknessInsurance"> | ||||
|               <u-radio :name="item.dictValue" v-for="(item, index) in $dict.getDict('fpYesOrNo')" :key="index">{{ item.dictName }}</u-radio> | ||||
|               <u-radio :name="item.dictValue" v-for="(item, index) in $dict.getDict('fpYesOrNo')" :key="index"> | ||||
|                 {{ item.dictName }} | ||||
|               </u-radio> | ||||
|             </u-radio-group> | ||||
|           </div> | ||||
|         </div> | ||||
| @@ -173,7 +178,9 @@ | ||||
|           </div> | ||||
|           <div class="right"> | ||||
|             <u-radio-group v-model="form.endowmentInsurance"> | ||||
|               <u-radio :name="item.dictValue" v-for="(item, index) in $dict.getDict('fpYesOrNo')" :key="index">{{ item.dictName }}</u-radio> | ||||
|               <u-radio :name="item.dictValue" v-for="(item, index) in $dict.getDict('fpYesOrNo')" :key="index"> | ||||
|                 {{ item.dictName }} | ||||
|               </u-radio> | ||||
|             </u-radio-group> | ||||
|           </div> | ||||
|         </div> | ||||
| @@ -186,7 +193,9 @@ | ||||
|           </div> | ||||
|           <div class="right"> | ||||
|             <u-radio-group v-model="form.subsistenceAllowance"> | ||||
|               <u-radio :name="item.dictValue" v-for="(item, index) in $dict.getDict('fpYesOrNo')" :key="index">{{ item.dictName }}</u-radio> | ||||
|               <u-radio :name="item.dictValue" v-for="(item, index) in $dict.getDict('fpYesOrNo')" :key="index"> | ||||
|                 {{ item.dictName }} | ||||
|               </u-radio> | ||||
|             </u-radio-group> | ||||
|           </div> | ||||
|         </div> | ||||
| @@ -199,7 +208,9 @@ | ||||
|           </div> | ||||
|           <div class="right"> | ||||
|             <u-radio-group v-model="form.destitute"> | ||||
|               <u-radio :name="item.dictValue" v-for="(item, index) in $dict.getDict('fpYesOrNo')" :key="index">{{ item.dictName }}</u-radio> | ||||
|               <u-radio :name="item.dictValue" v-for="(item, index) in $dict.getDict('fpYesOrNo')" :key="index"> | ||||
|                 {{ item.dictName }} | ||||
|               </u-radio> | ||||
|             </u-radio-group> | ||||
|           </div> | ||||
|         </div> | ||||
| @@ -210,10 +221,11 @@ | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
|   import AiSelect from '@/components/AiSelect' | ||||
|   import AiDate from '@/components/AiDate' | ||||
|   export default { | ||||
|     data () { | ||||
| import AiSelect from '@/components/AiSelect' | ||||
| import AiDate from '@/components/AiDate' | ||||
|  | ||||
| export default { | ||||
|   data() { | ||||
|     return { | ||||
|       form: { | ||||
|         destitute: '', | ||||
| @@ -247,7 +259,7 @@ | ||||
|     AiDate | ||||
|   }, | ||||
|  | ||||
|     onLoad (query) { | ||||
|   onLoad(query) { | ||||
|     uni.showLoading() | ||||
|     this.id = query.id | ||||
|     this.$dict.load(['fpRelationship', 'sex', 'fpNation', 'fpHealth', 'fpEducation', 'fpYesOrNo', 'fpLaborSkills', 'fpPoliticalOutlook', | ||||
| @@ -262,7 +274,7 @@ | ||||
|   }, | ||||
|  | ||||
|   methods: { | ||||
|       getInfo (id) { | ||||
|     getInfo(id) { | ||||
|       this.$http.post(`/app/apppreventionreturntopoverty/queryDetailById?id=${id}`).then(res => { | ||||
|         if (res.code === 0) { | ||||
|           if (this.isEdit) { | ||||
| @@ -277,7 +289,7 @@ | ||||
|       }) | ||||
|     }, | ||||
|  | ||||
|       rules () { | ||||
|     rules() { | ||||
|       return { | ||||
|         relationship: '请选择与户主关系', | ||||
|         name: '请输入姓名', | ||||
| @@ -293,7 +305,7 @@ | ||||
|       } | ||||
|     }, | ||||
|  | ||||
|       submit () { | ||||
|     submit() { | ||||
|       const rules = this.rules() | ||||
|  | ||||
|       for (let v of Object.keys(rules)) { | ||||
| @@ -325,11 +337,11 @@ | ||||
|       }) | ||||
|     } | ||||
|   } | ||||
|   } | ||||
| } | ||||
| </script> | ||||
|  | ||||
| <style lang="scss"> | ||||
|   .add { | ||||
| .add { | ||||
|   padding-bottom: 120px; | ||||
|  | ||||
|   ::v-deep .u-radio { | ||||
| @@ -457,5 +469,5 @@ | ||||
|     font-size: 32px; | ||||
|     background: #3192F4; | ||||
|   } | ||||
|   } | ||||
| } | ||||
| </style> | ||||
|   | ||||
| @@ -21,10 +21,10 @@ | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
|   import AiUploader from '@/components/AiUploader' | ||||
| import AiUploader from '@/components/AiUploader' | ||||
|  | ||||
|   export default { | ||||
|     data () { | ||||
| export default { | ||||
|   data() { | ||||
|     return { | ||||
|       detail: '', | ||||
|       pid: '', | ||||
| @@ -37,7 +37,7 @@ | ||||
|     AiUploader | ||||
|   }, | ||||
|  | ||||
|     onLoad (query) { | ||||
|   onLoad(query) { | ||||
|     if (query.id) { | ||||
|       this.getInfo(query.id) | ||||
|       this.id = query.id | ||||
| @@ -46,7 +46,7 @@ | ||||
|   }, | ||||
|  | ||||
|   methods: { | ||||
|       getInfo (id) { | ||||
|     getInfo(id) { | ||||
|       this.$http.post(`/app/apppreventionreturntopovertylog/queryDetailById?id=${id}`).then(res => { | ||||
|         if (res.code === 0) { | ||||
|           this.detail = res.data.detail | ||||
| @@ -55,7 +55,7 @@ | ||||
|       }) | ||||
|     }, | ||||
|  | ||||
|       submit () { | ||||
|     submit() { | ||||
|       if (!this.detail) { | ||||
|         return this.$u.toast('请输入帮扶内容') | ||||
|       } | ||||
| @@ -78,11 +78,11 @@ | ||||
|       }) | ||||
|     } | ||||
|   } | ||||
|   } | ||||
| } | ||||
| </script> | ||||
|  | ||||
| <style lang="scss"> | ||||
|   .form { | ||||
| .form { | ||||
|   padding-bottom: 120px; | ||||
|  | ||||
|   div { | ||||
| @@ -155,5 +155,5 @@ | ||||
|     font-size: 32px; | ||||
|     background: #3192F4; | ||||
|   } | ||||
|   } | ||||
| } | ||||
| </style> | ||||
|   | ||||
| @@ -9,7 +9,7 @@ | ||||
|         <div class="item-wrapper"> | ||||
|           <div class="item-header item-avatar"> | ||||
|             <div class="left"> | ||||
|               <image src="/static/images/avatar.png" /> | ||||
|               <image src="/static/images/avatar.png"/> | ||||
|               <div class="left-right"> | ||||
|                 <h2>{{ info.name }}</h2> | ||||
|                 <p>{{ info.phone }}</p> | ||||
| @@ -47,14 +47,17 @@ | ||||
|           </div> | ||||
|           <div class="item-info"> | ||||
|             <label>监测员电话</label> | ||||
|             <span style="color: #3D94FB;" @click="call(info.monitoringContactPhone)">{{ info.monitoringContactPhone || '-' }}</span> | ||||
|             <span style="color: #3D94FB;" | ||||
|                   @click="call(info.monitoringContactPhone)">{{ info.monitoringContactPhone || '-' }}</span> | ||||
|           </div> | ||||
|         </div> | ||||
|         <div class="item-wrapper"> | ||||
|           <div class="item-header"> | ||||
|             <div class="left"> | ||||
|               <h2>家庭成员</h2> | ||||
|               <i :style="{color: info.familyList.length ? '#2EA222' : '#FF4466'}">({{ info.familyList.length ? '已填写' : '未填写' }})</i> | ||||
|               <i :style="{color: info.familyList.length ? '#2EA222' : '#FF4466'}">({{ | ||||
|                   info.familyList.length ? '已填写' : '未填写' | ||||
|                 }})</i> | ||||
|             </div> | ||||
|             <span @click="linkTo('/pages/Monitor/FamilyMember?id=' + info.id)">编辑</span> | ||||
|           </div> | ||||
| @@ -71,7 +74,9 @@ | ||||
|           <div class="item-header"> | ||||
|             <div class="left"> | ||||
|               <h2>家庭情况</h2> | ||||
|               <i :style="{color: isFamilySituation ? '#2EA222' : '#FF4466'}">({{ isFamilySituation ? '已填写' : '未填写' }})</i> | ||||
|               <i :style="{color: isFamilySituation ? '#2EA222' : '#FF4466'}">({{ | ||||
|                   isFamilySituation ? '已填写' : '未填写' | ||||
|                 }})</i> | ||||
|             </div> | ||||
|             <span @click="linkTo('/pages/Monitor/FamilySituation?id=' + info.id)">编辑</span> | ||||
|           </div> | ||||
| @@ -121,18 +126,19 @@ | ||||
|             <div class="log-item__user"> | ||||
|               <div class="left"> | ||||
|                 <div class="user"> | ||||
|                   <span>{{ item.createUserName.substr(item.createUserName.length - 2)}}</span> | ||||
|                   <span>{{ item.createUserName.substr(item.createUserName.length - 2) }}</span> | ||||
|                 </div> | ||||
|                 <h2>{{ item.createUserName }}</h2> | ||||
|               </div> | ||||
|               <div class="right"> | ||||
|                 <span>{{ item.createTime }}</span> | ||||
|                 <image src="/static/images/more.png" @click="edit(item.id)" /> | ||||
|                 <image src="/static/images/more.png" @click="edit(item.id)"/> | ||||
|               </div> | ||||
|             </div> | ||||
|             <p>{{ item.detail }}</p> | ||||
|             <div class="imgs"> | ||||
|               <image :src="img.url" @click="prevImg(item.imgs, img.url)" v-for="(img, index) in item.imgs" :key="index" /> | ||||
|               <image :src="img.url" @click="prevImg(item.imgs, img.url)" v-for="(img, index) in item.imgs" | ||||
|                      :key="index"/> | ||||
|             </div> | ||||
|           </div> | ||||
|         </div> | ||||
| @@ -146,12 +152,13 @@ | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
|   import AiFixedBtn from '@/components/AiFixedBtn' | ||||
|   import AiEmpty from '@/components/AiEmpty/AiEmpty' | ||||
|   export default { | ||||
| import AiFixedBtn from '@/components/AiFixedBtn' | ||||
| import AiEmpty from '@/components/AiEmpty/AiEmpty' | ||||
|  | ||||
| export default { | ||||
|   name: 'detail', | ||||
|  | ||||
|     data () { | ||||
|   data() { | ||||
|     return { | ||||
|       info: {}, | ||||
|       pageShow: false, | ||||
| @@ -167,7 +174,7 @@ | ||||
|   }, | ||||
|  | ||||
|   computed: { | ||||
|       isIncome () { | ||||
|     isIncome() { | ||||
|       if (!this.info.id) { | ||||
|         return false | ||||
|       } | ||||
| @@ -177,7 +184,7 @@ | ||||
|  | ||||
|     }, | ||||
|  | ||||
|       isPoorStatus () { | ||||
|     isPoorStatus() { | ||||
|       if (!this.info.id) { | ||||
|         return false | ||||
|       } | ||||
| @@ -187,7 +194,7 @@ | ||||
|  | ||||
|     }, | ||||
|  | ||||
|       isFamilySituation () { | ||||
|     isFamilySituation() { | ||||
|       if (!this.info.id) { | ||||
|         return false | ||||
|       } | ||||
| @@ -198,7 +205,7 @@ | ||||
|     } | ||||
|   }, | ||||
|  | ||||
|     onLoad (query) { | ||||
|   onLoad(query) { | ||||
|     if (query.isFrom) { | ||||
|       this.isFrom = true | ||||
|       uni.setNavigationBarTitle({ | ||||
| @@ -217,13 +224,13 @@ | ||||
|   }, | ||||
|  | ||||
|   methods: { | ||||
|       linkTo (url) { | ||||
|     linkTo(url) { | ||||
|       uni.navigateTo({ | ||||
|         url | ||||
|       }) | ||||
|     }, | ||||
|  | ||||
|       call (phone) { | ||||
|     call(phone) { | ||||
|       if (phone) { | ||||
|         uni.makePhoneCall({ | ||||
|           phoneNumber: phone | ||||
| @@ -231,7 +238,7 @@ | ||||
|       } | ||||
|     }, | ||||
|  | ||||
|       edit (id) { | ||||
|     edit(id) { | ||||
|       uni.showActionSheet({ | ||||
|         itemList: ['编辑', '删除'], | ||||
|         success: res => { | ||||
| @@ -256,7 +263,7 @@ | ||||
|       }) | ||||
|     }, | ||||
|  | ||||
|       prevImg (urls, img) { | ||||
|     prevImg(urls, img) { | ||||
|       const imgs = urls.map(v => v.url) | ||||
|       uni.previewImage({ | ||||
|         urls: imgs, | ||||
| @@ -264,17 +271,17 @@ | ||||
|       }) | ||||
|     }, | ||||
|  | ||||
|       toAddLog () { | ||||
|     toAddLog() { | ||||
|       uni.navigateTo({ | ||||
|         url: '/pages/Monitor/AddLog?pid=' + this.info.id | ||||
|       }) | ||||
|     }, | ||||
|  | ||||
|       changeTab (index) { | ||||
|     changeTab(index) { | ||||
|       this.currIndex = index | ||||
|     }, | ||||
|  | ||||
|       getInfo (id) { | ||||
|     getInfo(id) { | ||||
|       this.$http.post(`/app/apppreventionreturntopoverty/queryDetailById?id=${id}`).then(res => { | ||||
|         if (res.code === 0) { | ||||
|           this.info = res.data | ||||
| @@ -308,11 +315,11 @@ | ||||
|       }) | ||||
|     } | ||||
|   } | ||||
|   } | ||||
| } | ||||
| </script> | ||||
|  | ||||
| <style lang="scss"> | ||||
|   .detail { | ||||
| .detail { | ||||
|   padding-top: 96px; | ||||
|   padding-bottom: 60px; | ||||
|  | ||||
| @@ -355,8 +362,8 @@ | ||||
|     span { | ||||
|       position: relative; | ||||
|       flex: 1; | ||||
|         height: 96rpx; | ||||
|         line-height: 96rpx; | ||||
|       height: 96 rpx; | ||||
|       line-height: 96 rpx; | ||||
|       color: #000000; | ||||
|       text-align: center; | ||||
|       font-size: 32px; | ||||
| @@ -463,7 +470,7 @@ | ||||
|  | ||||
|     &:last-child { | ||||
|       .log-item__wrapper { | ||||
|           border: none!important; | ||||
|         border: none !important; | ||||
|       } | ||||
|     } | ||||
|  | ||||
| @@ -535,5 +542,5 @@ | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|   } | ||||
| } | ||||
| </style> | ||||
|   | ||||
| @@ -80,7 +80,7 @@ | ||||
|       <div class="addBtn iconfont iconfont-iconfangda" @tap="toAdd"></div> | ||||
|     </ai-fixed-btn> | ||||
|     <div class="no-more" v-if="!list.length"> | ||||
|       <image src="/static/images/empty.png" /> | ||||
|       <image src="/static/images/empty.png"/> | ||||
|       <div> | ||||
|         <span>您还未添加过家庭成员点击</span> | ||||
|         <i>新增按钮</i> | ||||
| @@ -91,11 +91,11 @@ | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
|   import AiFixedBtn from '@/components/AiFixedBtn' | ||||
|   import AiBack from '@/components/AiBack' | ||||
| import AiFixedBtn from '@/components/AiFixedBtn' | ||||
| import AiBack from '@/components/AiBack' | ||||
|  | ||||
|   export default { | ||||
|     data () { | ||||
| export default { | ||||
|   data() { | ||||
|     return { | ||||
|       list: [], | ||||
|       id: '', | ||||
| @@ -109,7 +109,7 @@ | ||||
|     AiFixedBtn | ||||
|   }, | ||||
|  | ||||
|     onLoad (query) { | ||||
|   onLoad(query) { | ||||
|     uni.showLoading() | ||||
|     this.id = query.id | ||||
|     this.$dict.load(['fpRelationship', 'sex', 'fpNation', 'fpHealth', 'fpEducation', 'fpYesOrNo', 'fpLaborSkills', 'fpPoliticalOutlook', | ||||
| @@ -123,13 +123,13 @@ | ||||
|   }, | ||||
|  | ||||
|   methods: { | ||||
|       toAdd () { | ||||
|     toAdd() { | ||||
|       uni.navigateTo({ | ||||
|         url: '/pages/Monitor/AddFamilyMember?id=' + this.id | ||||
|       }) | ||||
|     }, | ||||
|  | ||||
|       toEdit (index) { | ||||
|     toEdit(index) { | ||||
|       this.$confirm('确定编辑该数据?').then(() => { | ||||
|         uni.navigateTo({ | ||||
|           url: `/pages/Monitor/AddFamilyMember?id=${this.id}&index=${index}` | ||||
| @@ -138,7 +138,7 @@ | ||||
|       }) | ||||
|     }, | ||||
|  | ||||
|       remove (index) { | ||||
|     remove(index) { | ||||
|       this.$confirm('确定删除该数据?').then(() => { | ||||
|         let familyList = JSON.parse(JSON.stringify(this.list)) | ||||
|         familyList.splice(index, 1) | ||||
| @@ -158,11 +158,11 @@ | ||||
|       }) | ||||
|     }, | ||||
|  | ||||
|       showMore (index) { | ||||
|     showMore(index) { | ||||
|       this.list[index].isShow = !this.list[index].isShow | ||||
|     }, | ||||
|  | ||||
|       getInfo (id) { | ||||
|     getInfo(id) { | ||||
|       this.$http.post(`/app/apppreventionreturntopoverty/queryDetailById?id=${id}`).then(res => { | ||||
|         if (res.code === 0) { | ||||
|           this.info = res.data | ||||
| @@ -181,11 +181,11 @@ | ||||
|       }) | ||||
|     } | ||||
|   } | ||||
|   } | ||||
| } | ||||
| </script> | ||||
|  | ||||
| <style lang="scss"> | ||||
|   .familyMember { | ||||
| .familyMember { | ||||
|   padding: 32px 0; | ||||
|  | ||||
|   .no-more { | ||||
| @@ -332,5 +332,5 @@ | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|   } | ||||
| } | ||||
| </style> | ||||
|   | ||||
| @@ -9,7 +9,9 @@ | ||||
|           </div> | ||||
|           <div class="right"> | ||||
|             <u-radio-group v-model="form.dilapidatedHouse"> | ||||
|               <u-radio :name="item.dictValue" v-for="(item, index) in $dict.getDict('fpYesOrNo')" :key="index">{{ item.dictName }}</u-radio> | ||||
|               <u-radio :name="item.dictValue" v-for="(item, index) in $dict.getDict('fpYesOrNo')" :key="index"> | ||||
|                 {{ item.dictName }} | ||||
|               </u-radio> | ||||
|             </u-radio-group> | ||||
|           </div> | ||||
|         </div> | ||||
| @@ -22,7 +24,9 @@ | ||||
|           </div> | ||||
|           <div class="right"> | ||||
|             <u-radio-group v-model="form.drinkingWaterSafety"> | ||||
|               <u-radio :name="item.dictValue" v-for="(item, index) in $dict.getDict('fpYesOrNo')" :key="index">{{ item.dictName }}</u-radio> | ||||
|               <u-radio :name="item.dictValue" v-for="(item, index) in $dict.getDict('fpYesOrNo')" :key="index"> | ||||
|                 {{ item.dictName }} | ||||
|               </u-radio> | ||||
|             </u-radio-group> | ||||
|           </div> | ||||
|         </div> | ||||
| @@ -49,11 +53,11 @@ | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
|   import AiBack from '@/components/AiBack' | ||||
|   import AiSelect from '@/components/AiSelect' | ||||
| import AiBack from '@/components/AiBack' | ||||
| import AiSelect from '@/components/AiSelect' | ||||
|  | ||||
|   export default { | ||||
|     data () { | ||||
| export default { | ||||
|   data() { | ||||
|     return { | ||||
|       form: { | ||||
|         dilapidatedHouse: '', | ||||
| @@ -69,7 +73,7 @@ | ||||
|     AiSelect | ||||
|   }, | ||||
|  | ||||
|     onLoad (query) { | ||||
|   onLoad(query) { | ||||
|     this.$dict.load(['fpYesOrNo', 'fpRiskType']) | ||||
|     uni.showLoading() | ||||
|     this.id = query.id | ||||
| @@ -77,7 +81,7 @@ | ||||
|   }, | ||||
|  | ||||
|   methods: { | ||||
|       getInfo (id) { | ||||
|     getInfo(id) { | ||||
|       this.$http.post(`/app/apppreventionreturntopoverty/queryDetailById?id=${id}`).then(res => { | ||||
|         if (res.code === 0) { | ||||
|           this.form = { | ||||
| @@ -90,7 +94,7 @@ | ||||
|       }) | ||||
|     }, | ||||
|  | ||||
|       submit () { | ||||
|     submit() { | ||||
|       uni.showLoading() | ||||
|       this.$http.post('/app/apppreventionreturntopoverty/addOrUpdate', { | ||||
|         ...this.form, | ||||
| @@ -107,11 +111,11 @@ | ||||
|       }) | ||||
|     }, | ||||
|   } | ||||
|   } | ||||
| } | ||||
| </script> | ||||
|  | ||||
| <style lang="scss"> | ||||
|   .add { | ||||
| .add { | ||||
|   padding-bottom: 120px; | ||||
|  | ||||
|   .form-textarea { | ||||
| @@ -255,5 +259,5 @@ | ||||
|     font-size: 32px; | ||||
|     background: #3192F4; | ||||
|   } | ||||
|   } | ||||
| } | ||||
| </style> | ||||
|   | ||||
| @@ -7,7 +7,8 @@ | ||||
|             <span>工资收入</span> | ||||
|           </div> | ||||
|           <div class="right"> | ||||
|             <input placeholder="请输入" v-model="form.income1" type="number" placeholder-style="color: #999; font-size: 30rpx;" /> | ||||
|             <input placeholder="请输入" v-model="form.income1" type="number" | ||||
|                    placeholder-style="color: #999; font-size: 30rpx;"/> | ||||
|           </div> | ||||
|         </div> | ||||
|       </div> | ||||
| @@ -17,7 +18,8 @@ | ||||
|             <span>生产经营收入</span> | ||||
|           </div> | ||||
|           <div class="right"> | ||||
|             <input placeholder="请输入" v-model="form.income2" type="number" placeholder-style="color: #999; font-size: 30rpx;" /> | ||||
|             <input placeholder="请输入" v-model="form.income2" type="number" | ||||
|                    placeholder-style="color: #999; font-size: 30rpx;"/> | ||||
|           </div> | ||||
|         </div> | ||||
|       </div> | ||||
| @@ -27,7 +29,8 @@ | ||||
|             <span>财产性收入</span> | ||||
|           </div> | ||||
|           <div class="right"> | ||||
|             <input placeholder="请输入" v-model="form.income3" type="number" placeholder-style="color: #999; font-size: 30rpx;" /> | ||||
|             <input placeholder="请输入" v-model="form.income3" type="number" | ||||
|                    placeholder-style="color: #999; font-size: 30rpx;"/> | ||||
|           </div> | ||||
|         </div> | ||||
|       </div> | ||||
| @@ -37,7 +40,8 @@ | ||||
|             <span>转移性收入</span> | ||||
|           </div> | ||||
|           <div class="right"> | ||||
|             <input placeholder="请输入" v-model="form.income4" type="number" placeholder-style="color: #999; font-size: 30rpx;" /> | ||||
|             <input placeholder="请输入" v-model="form.income4" type="number" | ||||
|                    placeholder-style="color: #999; font-size: 30rpx;"/> | ||||
|           </div> | ||||
|         </div> | ||||
|       </div> | ||||
| @@ -47,7 +51,8 @@ | ||||
|             <span>理赔收入</span> | ||||
|           </div> | ||||
|           <div class="right"> | ||||
|             <input placeholder="请输入" v-model="form.income8" type="number" placeholder-style="color: #999; font-size: 30rpx;" /> | ||||
|             <input placeholder="请输入" v-model="form.income8" type="number" | ||||
|                    placeholder-style="color: #999; font-size: 30rpx;"/> | ||||
|           </div> | ||||
|         </div> | ||||
|       </div> | ||||
| @@ -59,7 +64,8 @@ | ||||
|             <span>生产经营支出</span> | ||||
|           </div> | ||||
|           <div class="right"> | ||||
|             <input placeholder="请输入" v-model="form.income5" type="number" placeholder-style="color: #999; font-size: 30rpx;" /> | ||||
|             <input placeholder="请输入" v-model="form.income5" type="number" | ||||
|                    placeholder-style="color: #999; font-size: 30rpx;"/> | ||||
|           </div> | ||||
|         </div> | ||||
|       </div> | ||||
| @@ -69,7 +75,8 @@ | ||||
|             <span>合规自然支出</span> | ||||
|           </div> | ||||
|           <div class="right"> | ||||
|             <input placeholder="请输入" v-model="form.income9" type="number" placeholder-style="color: #999; font-size: 30rpx;" /> | ||||
|             <input placeholder="请输入" v-model="form.income9" type="number" | ||||
|                    placeholder-style="color: #999; font-size: 30rpx;"/> | ||||
|           </div> | ||||
|         </div> | ||||
|       </div> | ||||
| @@ -80,8 +87,8 @@ | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
|   export default { | ||||
|     data () { | ||||
| export default { | ||||
|   data() { | ||||
|     return { | ||||
|       form: { | ||||
|         income1: '', | ||||
| @@ -96,14 +103,14 @@ | ||||
|     } | ||||
|   }, | ||||
|  | ||||
|     onLoad (query) { | ||||
|   onLoad(query) { | ||||
|     uni.showLoading() | ||||
|     this.id = query.id | ||||
|     this.getInfo(query.id) | ||||
|   }, | ||||
|  | ||||
|   methods: { | ||||
|       getInfo (id) { | ||||
|     getInfo(id) { | ||||
|       this.$http.post(`/app/apppreventionreturntopoverty/queryDetailById?id=${id}`).then(res => { | ||||
|         if (res.code === 0) { | ||||
|           this.form = { | ||||
| @@ -116,7 +123,7 @@ | ||||
|       }) | ||||
|     }, | ||||
|  | ||||
|       submit () { | ||||
|     submit() { | ||||
|       uni.showLoading() | ||||
|       this.$http.post('/app/apppreventionreturntopoverty/addOrUpdate', { | ||||
|         ...this.form, | ||||
| @@ -133,11 +140,11 @@ | ||||
|       }) | ||||
|     } | ||||
|   } | ||||
|   } | ||||
| } | ||||
| </script> | ||||
|  | ||||
| <style lang="scss"> | ||||
|   .add { | ||||
| .add { | ||||
|   padding-bottom: 120px; | ||||
|  | ||||
|   .tips { | ||||
| @@ -263,5 +270,5 @@ | ||||
|     font-size: 32px; | ||||
|     background: #3192F4; | ||||
|   } | ||||
|   } | ||||
| } | ||||
| </style> | ||||
|   | ||||
| @@ -12,11 +12,11 @@ | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
|   import Statistics from './components/Statistics.vue' | ||||
|   import List from './components/List.vue' | ||||
| import Statistics from './components/Statistics.vue' | ||||
| import List from './components/List.vue' | ||||
|  | ||||
|   export default { | ||||
|     data () { | ||||
| export default { | ||||
|   data() { | ||||
|     return { | ||||
|       currIndex: 0 | ||||
|     } | ||||
| @@ -28,11 +28,11 @@ | ||||
|   }, | ||||
|  | ||||
|   computed: { | ||||
|       tabBar () { | ||||
|     tabBar() { | ||||
|       const link = icon => `${this.$cdn}askform/${icon}.png` | ||||
|       return [ | ||||
|           {text: "监测对象列表", iconPath: "bdlb1", selectedIconPath: "bdlb2" }, | ||||
|           {text: "数据统计", iconPath: "xjxm1", selectedIconPath: "xjxm2" } | ||||
|         {text: "监测对象列表", iconPath: "bdlb1", selectedIconPath: "bdlb2"}, | ||||
|         {text: "数据统计", iconPath: "xjxm1", selectedIconPath: "xjxm2"} | ||||
|       ].map(e => ({ | ||||
|         ...e, | ||||
|         iconPath: link(e.iconPath), | ||||
| @@ -41,7 +41,7 @@ | ||||
|     } | ||||
|   }, | ||||
|  | ||||
|     onLoad () { | ||||
|   onLoad() { | ||||
|     uni.$on('reload', () => { | ||||
|       if (this.currIndex === 0) { | ||||
|         this.$refs.list.reload() | ||||
| @@ -54,11 +54,11 @@ | ||||
|       this.$refs.list.getList() | ||||
|     } | ||||
|   } | ||||
|   } | ||||
| } | ||||
| </script> | ||||
|  | ||||
| <style lang="scss" scoped> | ||||
|   .povertyMonitor { | ||||
| .povertyMonitor { | ||||
|   .footer { | ||||
|     display: flex; | ||||
|     position: fixed; | ||||
| @@ -83,5 +83,5 @@ | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|   } | ||||
| } | ||||
| </style> | ||||
|   | ||||
| @@ -86,7 +86,9 @@ | ||||
|           </div> | ||||
|           <div class="right"> | ||||
|             <u-radio-group v-model="form.isRisk" @change="onRiskChange"> | ||||
|               <u-radio :name="item.dictValue" v-for="(item, index) in $dict.getDict('fpYesOrNo')" :key="index">{{ item.dictName }}</u-radio> | ||||
|               <u-radio :name="item.dictValue" v-for="(item, index) in $dict.getDict('fpYesOrNo')" :key="index"> | ||||
|                 {{ item.dictName }} | ||||
|               </u-radio> | ||||
|             </u-radio-group> | ||||
|           </div> | ||||
|         </div> | ||||
| @@ -119,11 +121,11 @@ | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
|   import AiSelect from '@/components/AiSelect' | ||||
|   import AiDate from '@/components/AiDate' | ||||
| import AiSelect from '@/components/AiSelect' | ||||
| import AiDate from '@/components/AiDate' | ||||
|  | ||||
|   export default { | ||||
|     data () { | ||||
| export default { | ||||
|   data() { | ||||
|     return { | ||||
|       result: '', | ||||
|       form: { | ||||
| @@ -147,7 +149,7 @@ | ||||
|     AiSelect | ||||
|   }, | ||||
|  | ||||
|     onLoad (query) { | ||||
|   onLoad(query) { | ||||
|     uni.showLoading() | ||||
|     this.$dict.load(['fpYesOrNo', 'fpRiskEliminationMethod', 'fpIndustrialAssistance', 'fpHealthAssistance', 'fpEmploymentAssistance', | ||||
|       'fpEducationalAssistance', 'fpFinancialAssistance', 'fpSocialAssistance', 'fpPublicWelfarePostAssistance']).then(() => { | ||||
| @@ -157,7 +159,7 @@ | ||||
|   }, | ||||
|  | ||||
|   methods: { | ||||
|       getInfo (id) { | ||||
|     getInfo(id) { | ||||
|       this.$http.post(`/app/apppreventionreturntopoverty/queryDetailById?id=${id}`).then(res => { | ||||
|         if (res.code === 0) { | ||||
|           this.form = { | ||||
| @@ -174,14 +176,14 @@ | ||||
|       }) | ||||
|     }, | ||||
|  | ||||
|       onRiskChange (e) { | ||||
|     onRiskChange(e) { | ||||
|       if (e === '02') { | ||||
|         this.form.riskEliminationMethod = '' | ||||
|         this.form.riskEliminationDate = '' | ||||
|       } | ||||
|     }, | ||||
|  | ||||
|       submit () { | ||||
|     submit() { | ||||
|       if (!this.form.isRisk) { | ||||
|         return this.$u.toast('请选择是否消除风险') | ||||
|       } | ||||
| @@ -214,11 +216,11 @@ | ||||
|       }) | ||||
|     } | ||||
|   } | ||||
|   } | ||||
| } | ||||
| </script> | ||||
|  | ||||
| <style lang="scss"> | ||||
|   .add { | ||||
| .add { | ||||
|   padding-bottom: 120px; | ||||
|  | ||||
|   & > div { | ||||
| @@ -346,5 +348,5 @@ | ||||
|     font-size: 32px; | ||||
|     background: #3192F4; | ||||
|   } | ||||
|   } | ||||
| } | ||||
| </style> | ||||
|   | ||||
| @@ -7,7 +7,8 @@ | ||||
|         <div class="label" v-if="addressArea">{{ addressArea }}</div> | ||||
|         <i v-else>请选择</i> | ||||
|       </AiArea> --> | ||||
|       <AiAreaPicker ref="area" class="aiArea" :name.sync="addressArea" :areaId="areaId" mode="custom" @select="onChange"> | ||||
|       <AiAreaPicker ref="area" class="aiArea" :name.sync="addressArea" :areaId="areaId" mode="custom" | ||||
|                     @select="onChange"> | ||||
|         <span class="label" v-if="addressArea">{{ addressArea }}</span> | ||||
|         <i v-else>请选择</i> | ||||
|       </AiAreaPicker> | ||||
| @@ -28,7 +29,7 @@ | ||||
|       </div> | ||||
|       <div class="list-item__wrapper"> | ||||
|         <div class="list-item" v-for="(item, index) in list" :key="index" @click="toDetail(item.id)"> | ||||
|           <image src="/static/images/avatar.png" /> | ||||
|           <image src="/static/images/avatar.png"/> | ||||
|           <div class="right"> | ||||
|             <h2>{{ item.name || item.phone }}</h2> | ||||
|             <p>{{ item.addressArea }}</p> | ||||
| @@ -44,15 +45,15 @@ | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
|   import AiArea from '@/components/AiArea' | ||||
|   import AiFixedBtn from '@/components/AiFixedBtn' | ||||
|   import AiEmpty from '@/components/AiEmpty/AiEmpty' | ||||
|   import AiAreaPicker from '@/components/AiAreaPicker' | ||||
| import AiArea from '@/components/AiArea' | ||||
| import AiFixedBtn from '@/components/AiFixedBtn' | ||||
| import AiEmpty from '@/components/AiEmpty/AiEmpty' | ||||
| import AiAreaPicker from '@/components/AiAreaPicker' | ||||
|  | ||||
|   export default { | ||||
| export default { | ||||
|   name: 'list', | ||||
|  | ||||
|     data () { | ||||
|   data() { | ||||
|     return { | ||||
|       currIndex: 0, | ||||
|       name: '', | ||||
| @@ -72,7 +73,7 @@ | ||||
|     AiFixedBtn | ||||
|   }, | ||||
|  | ||||
|     created () { | ||||
|   created() { | ||||
|     uni.showLoading() | ||||
|     this.areaId = this.$store.state.user.areaId | ||||
|     this.addressAreaId = this.$store.state.user.areaId | ||||
| @@ -89,13 +90,13 @@ | ||||
|   }, | ||||
|  | ||||
|   methods: { | ||||
|       toDetail (id) { | ||||
|     toDetail(id) { | ||||
|       uni.navigateTo({ | ||||
|         url: '/pages/Monitor/Detail?id=' + id | ||||
|       }) | ||||
|     }, | ||||
|  | ||||
|       onChange (e) { | ||||
|     onChange(e) { | ||||
|       this.addressAreaId = e.id | ||||
|  | ||||
|       this.$nextTick(() => { | ||||
| @@ -103,7 +104,7 @@ | ||||
|       }) | ||||
|     }, | ||||
|  | ||||
|       toAdd () { | ||||
|     toAdd() { | ||||
|       uni.navigateTo({ | ||||
|         url: '/pages/Monitor/Add' | ||||
|       }) | ||||
| @@ -119,7 +120,7 @@ | ||||
|       }) | ||||
|     }, | ||||
|  | ||||
|       changeTab (index) { | ||||
|     changeTab(index) { | ||||
|       this.currIndex = index | ||||
|       this.reload() | ||||
|     }, | ||||
| @@ -160,11 +161,11 @@ | ||||
|       }) | ||||
|     } | ||||
|   } | ||||
|   } | ||||
| } | ||||
| </script> | ||||
|  | ||||
| <style lang="scss"> | ||||
|   .list { | ||||
| .list { | ||||
|   padding: 112px 0 120px; | ||||
|  | ||||
|   .addBtn { | ||||
| @@ -234,8 +235,8 @@ | ||||
|       span { | ||||
|         position: relative; | ||||
|         flex: 1; | ||||
|           height: 96rpx; | ||||
|           line-height: 96rpx; | ||||
|         height: 96 rpx; | ||||
|         line-height: 96 rpx; | ||||
|         color: #000000; | ||||
|         text-align: center; | ||||
|         font-size: 32px; | ||||
| @@ -291,5 +292,5 @@ | ||||
|       font-size: 30px; | ||||
|     } | ||||
|   } | ||||
|   } | ||||
| } | ||||
| </style> | ||||
|   | ||||
| @@ -3,7 +3,8 @@ | ||||
|     <div class="area"> | ||||
|       <i>可选范围</i> | ||||
|       <span class="separat">/</span> | ||||
|       <AiAreaPicker ref="area" class="aiArea" :areaId="areaId" :name.sync="addressArea" mode="custom" @select="onChange"> | ||||
|       <AiAreaPicker ref="area" class="aiArea" :areaId="areaId" :name.sync="addressArea" mode="custom" | ||||
|                     @select="onChange"> | ||||
|         <span class="label" v-if="addressArea">{{ addressArea }}</span> | ||||
|         <i v-else>请选择</i> | ||||
|       </AiAreaPicker> | ||||
| @@ -54,14 +55,14 @@ | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
|   import echarts from 'echarts' | ||||
|   import AiArea from '@/components/AiArea' | ||||
|   import AiAreaPicker from '@/components/AiAreaPicker' | ||||
| import echarts from 'echarts' | ||||
| import AiArea from '@/components/AiArea' | ||||
| import AiAreaPicker from '@/components/AiAreaPicker' | ||||
|  | ||||
|   export default { | ||||
| export default { | ||||
|   name: 'statistics', | ||||
|  | ||||
|     data () { | ||||
|   data() { | ||||
|     return { | ||||
|       addressAreaId: '', | ||||
|       addressArea: '', | ||||
| @@ -80,14 +81,14 @@ | ||||
|     AiAreaPicker | ||||
|   }, | ||||
|  | ||||
|     created () { | ||||
|   created() { | ||||
|     this.areaId = this.$store.state.user.areaId | ||||
|     this.addressAreaId = this.$store.state.user.areaId | ||||
|     this.addressArea = this.$store.state.user.areaName | ||||
|   }, | ||||
|  | ||||
|     mounted () { | ||||
|       window.scrollTo(0,0) | ||||
|   mounted() { | ||||
|     window.scrollTo(0, 0) | ||||
|     this.chart1 = echarts.init(document.getElementById('chart1')) | ||||
|     this.chart4 = echarts.init(document.getElementById('chart4')) | ||||
|     this.chart3 = echarts.init(document.getElementById('chart3')) | ||||
| @@ -98,13 +99,13 @@ | ||||
|   }, | ||||
|  | ||||
|   methods: { | ||||
|       reload () { | ||||
|     reload() { | ||||
|       this.$nextTick(() => { | ||||
|         this.getInfo() | ||||
|       }) | ||||
|     }, | ||||
|  | ||||
|       onChange (e) { | ||||
|     onChange(e) { | ||||
|       this.addressAreaId = e.id | ||||
|  | ||||
|       this.$nextTick(() => { | ||||
| @@ -112,7 +113,7 @@ | ||||
|       }) | ||||
|     }, | ||||
|  | ||||
|       initChart1 (data) { | ||||
|     initChart1(data) { | ||||
|       const x = data.map(v => v.m) | ||||
|       const v = data.map(v => v.c) | ||||
|       const option = { | ||||
| @@ -122,7 +123,7 @@ | ||||
|           data: x, | ||||
|           splitLine: { | ||||
|             show: true, | ||||
|               lineStyle:{ | ||||
|             lineStyle: { | ||||
|               width: 1, | ||||
|               type: 'solid', | ||||
|               color: '#f5f5f5' | ||||
| @@ -163,7 +164,7 @@ | ||||
|           }, | ||||
|           splitLine: { | ||||
|             show: true, | ||||
|               lineStyle:{ | ||||
|             lineStyle: { | ||||
|               width: 1, | ||||
|               type: 'solid', | ||||
|               color: '#f5f5f5' | ||||
| @@ -175,7 +176,7 @@ | ||||
|           }, | ||||
|           axisLine: { | ||||
|             show: true, | ||||
|               lineStyle:{ | ||||
|             lineStyle: { | ||||
|               width: 1, | ||||
|               type: 'solid', | ||||
|               color: '#aaa' | ||||
| @@ -196,12 +197,11 @@ | ||||
|       this.chart1.setOption(option) | ||||
|     }, | ||||
|  | ||||
|       initChart3 (data) { | ||||
|     initChart3(data) { | ||||
|       const y = data.map(v => this.$dict.getLabel('fpRiskType', v.risk_type) || '其他') | ||||
|       const v = data.map(v => v.c) | ||||
|       const option = { | ||||
|           tooltip: { | ||||
|           }, | ||||
|         tooltip: {}, | ||||
|         color: ['#2896FF', '#09DBFE', '#61FDB9', '#FFBB69', '#8429FF', '#ea7ccc'], | ||||
|         grid: { | ||||
|           top: '4%', | ||||
| @@ -214,7 +214,7 @@ | ||||
|           type: 'value', | ||||
|           splitLine: { | ||||
|             show: true, | ||||
|               lineStyle:{ | ||||
|             lineStyle: { | ||||
|               width: 1, | ||||
|               type: 'solid', | ||||
|               color: '#f5f5f5' | ||||
| @@ -234,7 +234,7 @@ | ||||
|           boundaryGap: true, | ||||
|           axisLine: { | ||||
|             show: true, | ||||
|               lineStyle:{ | ||||
|             lineStyle: { | ||||
|               width: 1, | ||||
|               type: 'solid', | ||||
|               color: '#aaa' | ||||
| @@ -251,7 +251,7 @@ | ||||
|           }, | ||||
|           splitLine: { | ||||
|             show: true, | ||||
|               lineStyle:{ | ||||
|             lineStyle: { | ||||
|               color: ['#e9e9e9'], | ||||
|               width: 1, | ||||
|               type: 'solid' | ||||
| @@ -263,7 +263,7 @@ | ||||
|           }, | ||||
|           axisLine: { | ||||
|             show: true, | ||||
|               lineStyle:{ | ||||
|             lineStyle: { | ||||
|               width: 1, | ||||
|               type: 'solid', | ||||
|               color: '#aaa' | ||||
| @@ -285,7 +285,7 @@ | ||||
|       this.chart3.setOption(option) | ||||
|     }, | ||||
|  | ||||
|       initChart4 (data) { | ||||
|     initChart4(data) { | ||||
|       const values = data.map(v => { | ||||
|         return { | ||||
|           value: v.c, | ||||
| @@ -324,7 +324,7 @@ | ||||
|       this.chart4.setOption(option) | ||||
|     }, | ||||
|  | ||||
|       getInfo () { | ||||
|     getInfo() { | ||||
|       this.$http.post(`/app/apppreventionreturntopoverty/statistics-prtp?areaId=${this.addressAreaId}`).then(res => { | ||||
|         if (res.code === 0) { | ||||
|           this.info = res.data | ||||
| @@ -335,11 +335,11 @@ | ||||
|       }) | ||||
|     } | ||||
|   } | ||||
|   } | ||||
| } | ||||
| </script> | ||||
|  | ||||
| <style lang="scss"> | ||||
|   .statistics { | ||||
| .statistics { | ||||
|   padding: 112px 0 120px; | ||||
|  | ||||
|   .area { | ||||
| @@ -406,11 +406,11 @@ | ||||
|       height: 160px; | ||||
|  | ||||
|       h2 { | ||||
|           font-size: 48px!important; | ||||
|         font-size: 48px !important; | ||||
|       } | ||||
|  | ||||
|       p { | ||||
|           margin-top: 8px!important; | ||||
|         margin-top: 8px !important; | ||||
|       } | ||||
|     } | ||||
|  | ||||
| @@ -435,5 +435,5 @@ | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|   } | ||||
| } | ||||
| </style> | ||||
|   | ||||
| @@ -10,7 +10,8 @@ | ||||
|       </span> | ||||
|     </div> | ||||
|     <div class="list"> | ||||
|       <div class="item" v-for="(item, index) in list" :key="index" @click="linkTo('/pages/PovertyAlleviation/NewsDetail?id=' + item.id)"> | ||||
|       <div class="item" v-for="(item, index) in list" :key="index" | ||||
|            @click="linkTo('/pages/PovertyAlleviation/NewsDetail?id=' + item.id)"> | ||||
|         <div class="left"> | ||||
|           <h2>{{ item.title }}</h2> | ||||
|           <div class="item-bottom"> | ||||
| @@ -18,7 +19,7 @@ | ||||
|             <span>{{ item.createTime }}</span> | ||||
|           </div> | ||||
|         </div> | ||||
|         <image v-if="item.coverFile" :src="item.coverFile ? item.coverFile.url : ''" /> | ||||
|         <image v-if="item.coverFile" :src="item.coverFile ? item.coverFile.url : ''"/> | ||||
|       </div> | ||||
|       <ai-empty v-if="!list.length && isMore" style="padding-bottom: 20px;"></ai-empty> | ||||
|     </div> | ||||
| @@ -26,9 +27,10 @@ | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
|   import AiEmpty from '@/components/AiEmpty/AiEmpty' | ||||
|   export default { | ||||
|     data () { | ||||
| import AiEmpty from '@/components/AiEmpty/AiEmpty' | ||||
|  | ||||
| export default { | ||||
|   data() { | ||||
|     return { | ||||
|       currIndex: 0, | ||||
|       list: [], | ||||
| @@ -54,7 +56,7 @@ | ||||
|   }, | ||||
|  | ||||
|   methods: { | ||||
|       changeTab (index, type) { | ||||
|     changeTab(index, type) { | ||||
|       this.type = type | ||||
|       this.currIndex = index | ||||
|  | ||||
| @@ -67,7 +69,7 @@ | ||||
|       }) | ||||
|     }, | ||||
|  | ||||
|       linkTo (url) { | ||||
|     linkTo(url) { | ||||
|       uni.navigateTo({ | ||||
|         url | ||||
|       }) | ||||
| @@ -112,11 +114,11 @@ | ||||
|   onReachBottom() { | ||||
|     this.getList() | ||||
|   } | ||||
|   } | ||||
| } | ||||
| </script> | ||||
|  | ||||
| <style lang="scss"> | ||||
|   .news { | ||||
| .news { | ||||
|   padding: 96px 0 40px; | ||||
|  | ||||
|   .list { | ||||
| @@ -198,8 +200,8 @@ | ||||
|     span { | ||||
|       position: relative; | ||||
|       flex: 1; | ||||
|         height: 96rpx; | ||||
|         line-height: 96rpx; | ||||
|       height: 96 rpx; | ||||
|       line-height: 96 rpx; | ||||
|       color: #999999; | ||||
|       text-align: center; | ||||
|       font-size: 28px; | ||||
| @@ -224,5 +226,5 @@ | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|   } | ||||
| } | ||||
| </style> | ||||
| @@ -10,8 +10,8 @@ | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
|   export default { | ||||
|     data () { | ||||
| export default { | ||||
|   data() { | ||||
|     return { | ||||
|       pageShow: false, | ||||
|       info: {}, | ||||
| @@ -22,13 +22,13 @@ | ||||
|     } | ||||
|   }, | ||||
|  | ||||
|     onLoad (query) { | ||||
|   onLoad(query) { | ||||
|     uni.showLoading() | ||||
|     this.getInfo(query.id) | ||||
|   }, | ||||
|  | ||||
|   methods: { | ||||
|       getInfo (id) { | ||||
|     getInfo(id) { | ||||
|       this.$http.post(`/app/appnewscenterinfo/queryDetailById?id=${id}`).then(res => { | ||||
|         if (res.code == 0) { | ||||
|           this.info = res.data | ||||
| @@ -41,11 +41,11 @@ | ||||
|       }) | ||||
|     } | ||||
|   } | ||||
|   } | ||||
| } | ||||
| </script> | ||||
|  | ||||
| <style lang="scss"> | ||||
|   .detail { | ||||
| .detail { | ||||
|   min-height: 100vh; | ||||
|   padding: 40px 32px 40px; | ||||
|   box-sizing: border-box; | ||||
| @@ -94,5 +94,5 @@ | ||||
|       height: 600px; | ||||
|     } | ||||
|   } | ||||
|   } | ||||
| } | ||||
| </style> | ||||
|   | ||||
| @@ -2,22 +2,23 @@ | ||||
|   <div class="info"> | ||||
|     <div class="info-top"> | ||||
|       <div class="info-top__item" @click="linkTo('/pages/Monitor/Monitor')"> | ||||
|         <image src="/static/images/wdbf.png" /> | ||||
|         <image src="/static/images/wdbf.png"/> | ||||
|         <h2>监测对象</h2> | ||||
|       </div> | ||||
|       <div class="info-top__item" @click="linkTo('/pages/povertyMonitor/povertyMonitor')"> | ||||
|         <image src="/static/images/yjjk.png" /> | ||||
|         <image src="/static/images/yjjk.png"/> | ||||
|         <h2>预警监控</h2> | ||||
|       </div> | ||||
|       <div class="info-top__item" @click="linkTo('/pages/PovertyAlleviation/News')"> | ||||
|         <image src="/static/images/news.png" /> | ||||
|         <image src="/static/images/news.png"/> | ||||
|         <h2>政策动态</h2> | ||||
|       </div> | ||||
|     </div> | ||||
|     <div class="news"> | ||||
|       <h2>最新动态</h2> | ||||
|       <div class="news-list"> | ||||
|         <div class="news-item" v-for="(item, index) in list" :key="index" @click="linkTo(`/pages/PovertyAlleviation/NewsDetail?id=${item.id}`)"> | ||||
|         <div class="news-item" v-for="(item, index) in list" :key="index" | ||||
|              @click="linkTo(`/pages/PovertyAlleviation/NewsDetail?id=${item.id}`)"> | ||||
|           <div class="left"> | ||||
|             <h2>{{ item.title }}</h2> | ||||
|             <div class="item-bottom"> | ||||
| @@ -25,7 +26,7 @@ | ||||
|               <span>{{ item.createTime }}</span> | ||||
|             </div> | ||||
|           </div> | ||||
|           <image v-if="item.coverFile" :src="item.coverFile ? item.coverFile.url : ''" /> | ||||
|           <image v-if="item.coverFile" :src="item.coverFile ? item.coverFile.url : ''"/> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
| @@ -33,27 +34,27 @@ | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
|   export default { | ||||
|     data () { | ||||
| export default { | ||||
|   data() { | ||||
|     return { | ||||
|       list: [] | ||||
|     } | ||||
|   }, | ||||
|  | ||||
|     onLoad () { | ||||
|   onLoad() { | ||||
|     this.$dict.load(['newsCenterPolicyType']).then(() => { | ||||
|       this.getList() | ||||
|     }) | ||||
|   }, | ||||
|  | ||||
|   methods: { | ||||
|       linkTo (url) { | ||||
|     linkTo(url) { | ||||
|       uni.navigateTo({ | ||||
|         url | ||||
|       }) | ||||
|     }, | ||||
|  | ||||
|       getList () { | ||||
|     getList() { | ||||
|       this.$http.post(`/app/appnewscenterinfo/listForWx`, null, { | ||||
|         params: { | ||||
|           current: 1, | ||||
| @@ -67,11 +68,11 @@ | ||||
|       }) | ||||
|     } | ||||
|   } | ||||
|   } | ||||
| } | ||||
| </script> | ||||
|  | ||||
| <style lang="scss"> | ||||
|   .info { | ||||
| .info { | ||||
|   padding: 32px 30px; | ||||
|  | ||||
|   .info-top { | ||||
| @@ -165,5 +166,5 @@ | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|   } | ||||
| } | ||||
| </style> | ||||
|   | ||||
| @@ -4,48 +4,54 @@ | ||||
|       <div class="item"> | ||||
|         <div class="label">播发内容</div> | ||||
|         <div class="value" @click="linkTo('/pages/resourcesManage/resourcesManage?isChoose=1')"> | ||||
|           <span :class="formData.mediaName == '请选择' ? 'color-999' : ''">{{formData.mediaName}}</span> | ||||
|           <span :class="formData.mediaName == '请选择' ? 'color-999' : ''">{{ formData.mediaName }}</span> | ||||
|           <img src="./img/right-icon.png" alt=""> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="item"> | ||||
|         <div class="label">播放设备</div> | ||||
|         <div class="value" @click="selectClick('showEquipment', equipmentList)"> | ||||
|           <span :class="formData.serialName == '请选择' ? 'color-999' : ''">{{formData.serialName}}</span> | ||||
|           <span :class="formData.serialName == '请选择' ? 'color-999' : ''">{{ formData.serialName }}</span> | ||||
|           <img src="./img/right-icon.png" alt=""> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="item"> | ||||
|         <div class="label">播发级别</div> | ||||
|         <div class="value" @click="selectClick('showMessageLevel', messageLevelList)"> | ||||
|           <span :class="formData.messageLevelName == '请选择' ? 'color-999' : ''">{{formData.messageLevelName}}</span> | ||||
|           <span :class="formData.messageLevelName == '请选择' ? 'color-999' : ''">{{ formData.messageLevelName }}</span> | ||||
|           <img src="./img/right-icon.png" alt=""> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
|     <div class="radio-content"> | ||||
|       <div class="title">播放方式</div> | ||||
|       <div class="item mar-r50" :class="formData.taskType == 0 ? 'active' : ''"  @click="formData.taskType = 0">立即播放<img src="./img/bigHorn-xz.png" alt=""></div> | ||||
|       <div class="item" :class="formData.taskType == 1 ? 'active' : ''" @click="formData.taskType = 1"><img src="./img/bigHorn-xz.png" alt="">定时播放</div> | ||||
|       <div class="item mar-r50" :class="formData.taskType == 0 ? 'active' : ''" @click="formData.taskType = 0">立即播放<img | ||||
|           src="./img/bigHorn-xz.png" alt=""></div> | ||||
|       <div class="item" :class="formData.taskType == 1 ? 'active' : ''" @click="formData.taskType = 1"><img | ||||
|           src="./img/bigHorn-xz.png" alt="">定时播放 | ||||
|       </div> | ||||
|     </div> | ||||
|     <div class="content" v-if="formData.taskType != 0"> | ||||
|       <div class="item"> | ||||
|         <div class="label">定时策略</div> | ||||
|         <div class="value" @click="selectClick('showCyclingType', cyclingTypeList)"> | ||||
|           <span :class="formData.cyclingTypeName == '请选择' ? 'color-999' : ''">{{formData.cyclingTypeName}}</span> | ||||
|           <span :class="formData.cyclingTypeName == '请选择' ? 'color-999' : ''">{{ formData.cyclingTypeName }}</span> | ||||
|           <img src="./img/right-icon.png" alt=""> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
|     <div class="radio-content" v-if="formData.taskType != 0 && formData.cyclingType == 2"> | ||||
|       <div class="title">播放天数</div> | ||||
|       <div class="mini-item" :class="item.isCheck ? 'mini-active' : ''" v-for="(item, index) in dayList" :key="index" @click="checkClick(index)">{{item.label}}</div> | ||||
|       <div class="mini-item" :class="item.isCheck ? 'mini-active' : ''" v-for="(item, index) in dayList" :key="index" | ||||
|            @click="checkClick(index)">{{ item.label }} | ||||
|       </div> | ||||
|     </div> | ||||
|     <div class="content" v-if="formData.taskType != 0 && formData.cyclingType == 3"> | ||||
|       <div class="item"> | ||||
|         <div class="label">播放天数</div> | ||||
|         <div class="value"> | ||||
|           <u-input type="text" placeholder="请输入" height="18" input-align="right" v-model="formData.broadcastDay" maxlength="4" /> | ||||
|           <u-input type="text" placeholder="请输入" height="18" input-align="right" v-model="formData.broadcastDay" | ||||
|                    maxlength="4"/> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
| @@ -53,33 +59,35 @@ | ||||
|       <div class="item"> | ||||
|         <div class="label">开始日期</div> | ||||
|         <div class="value" @click="timeClick(true, 'showDate')"> | ||||
|           <span :class="formData.startDate ? 'color-999' : ''">{{formData.startDate || '请选择'}}</span> | ||||
|           <span :class="formData.startDate ? 'color-999' : ''">{{ formData.startDate || '请选择' }}</span> | ||||
|           <img src="./img/right-icon.png" alt=""> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="item"> | ||||
|         <div class="label">开始时间</div> | ||||
|         <div class="value" @click="timeClick(false, 'showSatrt')"> | ||||
|           <span :class="formData.startTime ? 'color-999' : ''">{{formData.startTime || '请选择'}}</span> | ||||
|           <span :class="formData.startTime ? 'color-999' : ''">{{ formData.startTime || '请选择' }}</span> | ||||
|           <img src="./img/right-icon.png" alt=""> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="item"> | ||||
|         <div class="label">结束时间</div> | ||||
|         <div class="value" @click="timeClick(false, 'showEnd')"> | ||||
|           <span :class="formData.endTime ? 'color-999' : ''">{{formData.endTime || '请选择'}}</span> | ||||
|           <span :class="formData.endTime ? 'color-999' : ''">{{ formData.endTime || '请选择' }}</span> | ||||
|           <img src="./img/right-icon.png" alt=""> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
|     <div class="btn" @click="addConfirm">确认</div> | ||||
|     <u-select v-model="showSelect" :list="selectList" @confirm="confirm" label-name="dictName" value-name="dictValue"></u-select> | ||||
|     <u-select v-model="showSelect" :list="selectList" @confirm="confirm" label-name="dictName" | ||||
|               value-name="dictValue"></u-select> | ||||
|     <u-picker v-model="showDateTime" mode="time" :params="params" @confirm="confirm"></u-picker> | ||||
|     <AiBack></AiBack> | ||||
|   </div> | ||||
| </template> | ||||
| <script> | ||||
|   import AiBack from "@/components/AiBack"; | ||||
| import AiBack from "@/components/AiBack"; | ||||
|  | ||||
| export default { | ||||
|   name: "addPlay", | ||||
|   data() { | ||||
| @@ -166,7 +174,7 @@ export default { | ||||
|     AiBack | ||||
|   }, | ||||
|  | ||||
|   onLoad () { | ||||
|   onLoad() { | ||||
|     uni.$on('choose', e => { | ||||
|       console.log(e) | ||||
|       this.formData.mediaId = e.mediaId | ||||
| @@ -178,41 +186,41 @@ export default { | ||||
|     addConfirm() { | ||||
|       var cyclingDateList = [] | ||||
|       this.dayList.map((item) => { | ||||
|         if(item.isCheck) { | ||||
|         if (item.isCheck) { | ||||
|           cyclingDateList.push(item.value) | ||||
|         } | ||||
|       }) | ||||
|  | ||||
|       if(!this.formData.mediaId) { | ||||
|       if (!this.formData.mediaId) { | ||||
|         return this.$u.toast('请选择播发内容') | ||||
|       } | ||||
|       if(!this.formData.serialNo) { | ||||
|       if (!this.formData.serialNo) { | ||||
|         return this.$u.toast('请选择播放设备') | ||||
|       } | ||||
|       if(!this.formData.messageLevel) { | ||||
|       if (!this.formData.messageLevel) { | ||||
|         return this.$u.toast('播发级别') | ||||
|       } | ||||
|  | ||||
|       //播放方式(定时播放) | ||||
|       if(this.formData.taskType != 0 && this.formData.startDate == '请选择') { | ||||
|       if (this.formData.taskType != 0 && this.formData.startDate == '请选择') { | ||||
|         return this.$u.toast('请选择开始日期') | ||||
|       } | ||||
|       if(this.formData.taskType != 0 && this.formData.startTime == '请选择') { | ||||
|       if (this.formData.taskType != 0 && this.formData.startTime == '请选择') { | ||||
|         return this.$u.toast('请选择开始时间') | ||||
|       } | ||||
|       if(this.formData.taskType != 0 && this.formData.endTime == '请选择') { | ||||
|       if (this.formData.taskType != 0 && this.formData.endTime == '请选择') { | ||||
|         return this.$u.toast('请选择结束时间') | ||||
|       } | ||||
|       //播放方式(定时播放)定时策略(时长) | ||||
|       if(this.formData.taskType != 0 && this.formData.cyclingType == 3 && !this.formData.broadcastDay) { | ||||
|       if (this.formData.taskType != 0 && this.formData.cyclingType == 3 && !this.formData.broadcastDay) { | ||||
|         return this.$u.toast('请输入播放天数') | ||||
|       } | ||||
|       //播放方式(定时播放)定时策略(自定义) | ||||
|       if(this.formData.taskType != 0 && this.formData.cyclingType == 2 && !cyclingDateList.length) { | ||||
|       if (this.formData.taskType != 0 && this.formData.cyclingType == 2 && !cyclingDateList.length) { | ||||
|         return this.$u.toast('请选择播放天数') | ||||
|       } | ||||
|  | ||||
|       if(this.formData.taskType != 0 && this.formData.cyclingType == 2) { | ||||
|       if (this.formData.taskType != 0 && this.formData.cyclingType == 2) { | ||||
|         this.formData.cyclingDate = cyclingDateList.join(',') | ||||
|       } | ||||
|       this.formData.coverageType = '4' | ||||
| @@ -226,43 +234,43 @@ export default { | ||||
|       }) | ||||
|     }, | ||||
|  | ||||
|     linkTo (path) { | ||||
|     linkTo(path) { | ||||
|       uni.navigateTo({ | ||||
|         url: path | ||||
|       }) | ||||
|     }, | ||||
|  | ||||
|     confirm(e) { | ||||
|       if(this.showMedia) { | ||||
|       if (this.showMedia) { | ||||
|         this.formData.mediaId = e[0].value | ||||
|         this.formData.mediaName = e[0].label | ||||
|       } | ||||
|       if(this.showEquipment) { | ||||
|       if (this.showEquipment) { | ||||
|         this.formData.serialNo = e[0].value | ||||
|         this.formData.serialName = e[0].label | ||||
|       } | ||||
|       if(this.showMessageLevel) { | ||||
|       if (this.showMessageLevel) { | ||||
|         this.formData.messageLevel = e[0].value | ||||
|         this.formData.messageLevelName = e[0].label | ||||
|       } | ||||
|       if(this.showCyclingType) { | ||||
|       if (this.showCyclingType) { | ||||
|         this.formData.cyclingType = e[0].value | ||||
|         this.formData.cyclingTypeName = e[0].label | ||||
|       } | ||||
|       if(this.showDate) { | ||||
|       if (this.showDate) { | ||||
|         this.formData.startDate = e.year + '-' + e.month + '-' + e.day | ||||
|       } | ||||
|       if(this.showSatrt) { | ||||
|       if (this.showSatrt) { | ||||
|         var startTime = e.hour + ':' + e.minute + ':' + e.second | ||||
|         var myDate = new Date(); | ||||
|         var time = myDate.getHours() + ':' + myDate.getMinutes() + ':' + myDate.getSeconds() | ||||
|         if (this.timeToSec(startTime) - this.timeToSec(time) > 0) { | ||||
|           this.formData.startTime = startTime | ||||
|         }else { | ||||
|         } else { | ||||
|           this.$u.toast('开始时间要大于当前时间') | ||||
|         } | ||||
|       } | ||||
|       if(this.showEnd) { | ||||
|       if (this.showEnd) { | ||||
|         var endTime = e.hour + ':' + e.minute + ':' + e.second | ||||
|         console.log(this.timeToSec(endTime), this.timeToSec(this.formData.startTime)) | ||||
|         if (this.timeToSec(endTime) - this.timeToSec(this.formData.startTime) > 0) { | ||||
| @@ -291,7 +299,7 @@ export default { | ||||
|       this.$http.post(`/app/appdlbresource/list?current=1&size=10000`).then((res) => { | ||||
|         if (res.code == 0) { | ||||
|           this.mediaList = [] | ||||
|           if(res.data && res.data.records.length) { | ||||
|           if (res.data && res.data.records.length) { | ||||
|             res.data.records.map((item) => { | ||||
|               let info = { | ||||
|                 dictName: item.name, | ||||
| @@ -307,7 +315,7 @@ export default { | ||||
|       this.$http.post(`/app/appdlbquipment/getDlbDeviceList?current=1&size=10000&devStatus=5&keyword=`).then((res) => { | ||||
|         if (res.code == 0) { | ||||
|           this.equipmentList = [] | ||||
|           if(res.data && res.data.records.length) { | ||||
|           if (res.data && res.data.records.length) { | ||||
|             res.data.records.map((item) => { | ||||
|               let info = { | ||||
|                 dictName: item.deviceName, | ||||
| @@ -325,7 +333,7 @@ export default { | ||||
|     timeClick(showYear, showType) { | ||||
|       this[showType] = true | ||||
|       this.showDateTime = true | ||||
|       if(showYear) { | ||||
|       if (showYear) { | ||||
|         this.params = { | ||||
|           year: true, | ||||
|           month: true, | ||||
| @@ -334,7 +342,7 @@ export default { | ||||
|           minute: false, | ||||
|           second: false | ||||
|         } | ||||
|       }else { | ||||
|       } else { | ||||
|         this.params = { | ||||
|           year: false, | ||||
|           month: false, | ||||
| @@ -367,10 +375,12 @@ export default { | ||||
| <style lang="scss" scoped> | ||||
| .addPlay { | ||||
|   padding-bottom: 128px; | ||||
|   .content{ | ||||
|  | ||||
|   .content { | ||||
|     padding-left: 32px; | ||||
|     background-color: #fff; | ||||
|     .item{ | ||||
|  | ||||
|     .item { | ||||
|       width: 100%; | ||||
|       padding: 34px 0; | ||||
|       font-size: 32px; | ||||
| @@ -381,11 +391,13 @@ export default { | ||||
|       display: flex; | ||||
|       color: #333; | ||||
|       justify-content: space-between; | ||||
|       .label{ | ||||
|  | ||||
|       .label { | ||||
|         width: 198px; | ||||
|         font-size: 32px; | ||||
|       } | ||||
|       .value{ | ||||
|  | ||||
|       .value { | ||||
|         display: flex; | ||||
|         align-items: center; | ||||
|         justify-content: flex-end; | ||||
| @@ -401,35 +413,41 @@ export default { | ||||
|           text-overflow: ellipsis; | ||||
|           white-space: nowrap; | ||||
|         } | ||||
|         img{ | ||||
|  | ||||
|         img { | ||||
|           width: 32px; | ||||
|           height: 32px; | ||||
|           vertical-align: middle; | ||||
|           margin-left: 6px; | ||||
|         } | ||||
|       } | ||||
|       .color-999{ | ||||
|  | ||||
|       .color-999 { | ||||
|         color: #999; | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|   .radio-content{ | ||||
|  | ||||
|   .radio-content { | ||||
|     padding: 34px 32px 38px; | ||||
|     border-bottom: 1px solid #ddd; | ||||
|     background-color: #fff; | ||||
|     .title{ | ||||
|  | ||||
|     .title { | ||||
|       font-size: 32px; | ||||
|       font-family: PingFangSC-Regular, PingFang SC; | ||||
|       font-weight: 400; | ||||
|       color: #333; | ||||
|       line-height: 44px; | ||||
|       margin-bottom: 54px; | ||||
|       span{ | ||||
|  | ||||
|       span { | ||||
|         font-size: 24px; | ||||
|         font-weight: 400; | ||||
|       } | ||||
|     } | ||||
|     .item{ | ||||
|  | ||||
|     .item { | ||||
|       display: inline-block; | ||||
|       width: 320px; | ||||
|       height: 112px; | ||||
| @@ -441,15 +459,18 @@ export default { | ||||
|       font-family: PingFangSC-Medium, PingFang SC; | ||||
|       font-weight: 500; | ||||
|       color: #333; | ||||
|       img{ | ||||
|  | ||||
|       img { | ||||
|         display: none; | ||||
|       } | ||||
|     } | ||||
|     .active{ | ||||
|  | ||||
|     .active { | ||||
|       background: #E7F1FE; | ||||
|       color: #1174FE; | ||||
|       position: relative; | ||||
|       img{ | ||||
|  | ||||
|       img { | ||||
|         display: inline-block; | ||||
|         position: absolute; | ||||
|         bottom: 0; | ||||
| @@ -458,10 +479,12 @@ export default { | ||||
|         height: 46px; | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     .mar-r50 { | ||||
|       margin-right: 50px; | ||||
|     } | ||||
|     .mini-item{ | ||||
|  | ||||
|     .mini-item { | ||||
|       display: inline-block; | ||||
|       width: 128px; | ||||
|       height: 72px; | ||||
| @@ -474,16 +497,19 @@ export default { | ||||
|       margin-right: 58px; | ||||
|       margin-bottom: 32px; | ||||
|     } | ||||
|  | ||||
|     .mini-item:nth-of-type(5) { | ||||
|       margin-right: 0; | ||||
|     } | ||||
|     .mini-active{ | ||||
|  | ||||
|     .mini-active { | ||||
|       background: #F2F8FE; | ||||
|       border: 1px solid #89B2EE; | ||||
|       box-sizing: border-box; | ||||
|     } | ||||
|   } | ||||
|   .btn{ | ||||
|  | ||||
|   .btn { | ||||
|     position: fixed; | ||||
|     bottom: 0; | ||||
|     left: 0; | ||||
|   | ||||
| @@ -19,9 +19,10 @@ | ||||
|       </div> | ||||
|     </div> | ||||
|     <div class="banner"> | ||||
|       <div class="item" :class="item.bgClass" v-for="(item, index) in bannerList" :key="index" @click="linkTo(item.path)"> | ||||
|         <h2>{{item.title}}</h2> | ||||
|         <div>{{item.text}}</div> | ||||
|       <div class="item" :class="item.bgClass" v-for="(item, index) in bannerList" :key="index" | ||||
|            @click="linkTo(item.path)"> | ||||
|         <h2>{{ item.title }}</h2> | ||||
|         <div>{{ item.text }}</div> | ||||
|         <img :src="item.imgUrl" alt=""> | ||||
|       </div> | ||||
|     </div> | ||||
| @@ -75,13 +76,15 @@ export default { | ||||
| </script> | ||||
| <style lang="scss" scoped> | ||||
| .bigHorn { | ||||
|   .header{ | ||||
|   .header { | ||||
|     position: relative; | ||||
|     img{ | ||||
|  | ||||
|     img { | ||||
|       width: 100%; | ||||
|       height: 306px; | ||||
|     } | ||||
|     .content{ | ||||
|  | ||||
|     .content { | ||||
|       width: 686px; | ||||
|       padding: 40px 0; | ||||
|       background: #FFFFFF; | ||||
| @@ -92,15 +95,18 @@ export default { | ||||
|       left: 50%; | ||||
|       transform: translateX(-50%); | ||||
|       display: flex; | ||||
|       .item{ | ||||
|  | ||||
|       .item { | ||||
|         text-align: center; | ||||
|         flex: 1; | ||||
|         img{ | ||||
|  | ||||
|         img { | ||||
|           width: 64px; | ||||
|           height: 64px; | ||||
|           margin-bottom: 18px; | ||||
|         } | ||||
|         div{ | ||||
|  | ||||
|         div { | ||||
|           font-size: 30px; | ||||
|           font-family: PingFang-SC-Medium, PingFang-SC; | ||||
|           font-weight: 500; | ||||
| @@ -108,7 +114,8 @@ export default { | ||||
|           line-height: 42px; | ||||
|           margin-bottom: 10px; | ||||
|         } | ||||
|         h2{ | ||||
|  | ||||
|         h2 { | ||||
|           font-size: 40px; | ||||
|           font-family: DINAlternate-Bold, DINAlternate; | ||||
|           font-weight: bold; | ||||
| @@ -118,9 +125,11 @@ export default { | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|   .banner{ | ||||
|  | ||||
|   .banner { | ||||
|     margin-top: 150px; | ||||
|     .item{ | ||||
|  | ||||
|     .item { | ||||
|       width: 686px; | ||||
|       height: 190px; | ||||
|       border-radius: 12px; | ||||
| @@ -129,37 +138,44 @@ export default { | ||||
|       box-sizing: border-box; | ||||
|       color: #FFF; | ||||
|       position: relative; | ||||
|       h2{ | ||||
|  | ||||
|       h2 { | ||||
|         font-size: 42px; | ||||
|         font-family: PingFangSC-Medium, PingFang SC; | ||||
|         font-weight: 500; | ||||
|         line-height: 60px; | ||||
|         margin-bottom: 16px; | ||||
|       } | ||||
|       div{ | ||||
|  | ||||
|       div { | ||||
|         font-size: 26px; | ||||
|         font-family: PingFangSC-Regular, PingFang SC; | ||||
|         font-weight: 400; | ||||
|         color: #FFF; | ||||
|         line-height: 32px; | ||||
|       } | ||||
|       img{ | ||||
|  | ||||
|       img { | ||||
|         width: 160px; | ||||
|         position: absolute; | ||||
|         top: 10px; | ||||
|         right: 30px; | ||||
|       } | ||||
|     } | ||||
|     .bg-67A3F4{ | ||||
|  | ||||
|     .bg-67A3F4 { | ||||
|       background: #67A3F4; | ||||
|     } | ||||
|     .bg-4ED5BB{ | ||||
|  | ||||
|     .bg-4ED5BB { | ||||
|       background: #4ED5BB; | ||||
|     } | ||||
|     .bg-E5B565{ | ||||
|  | ||||
|     .bg-E5B565 { | ||||
|       background: #E5B565; | ||||
|     } | ||||
|     .bg-F19661{ | ||||
|  | ||||
|     .bg-F19661 { | ||||
|       background: #F19661; | ||||
|     } | ||||
|   } | ||||
|   | ||||
| @@ -4,8 +4,8 @@ | ||||
|       <div class="item" v-for="(item, index) in list" :key="index"> | ||||
|         <img src="./img/bigHorn-lb@2x.png" alt=""> | ||||
|         <div class="info"> | ||||
|           <p>{{item.deviceName}}</p> | ||||
|           <span>{{item.areaName}}</span> | ||||
|           <p>{{ item.deviceName }}</p> | ||||
|           <span>{{ item.areaName }}</span> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
| @@ -16,6 +16,7 @@ | ||||
| <script> | ||||
| import AiEmpty from '@/components/AiEmpty/AiEmpty' | ||||
| import AiBack from "@/components/AiBack"; | ||||
|  | ||||
| export default { | ||||
|   name: "onlineList", | ||||
|   data() { | ||||
| @@ -56,22 +57,26 @@ export default { | ||||
| </script> | ||||
| <style lang="scss" scoped> | ||||
| .onlineList { | ||||
|   .record{ | ||||
|   .record { | ||||
|     padding-left: 32px; | ||||
|     background-color: #fff; | ||||
|     .item{ | ||||
|  | ||||
|     .item { | ||||
|       width: 100%; | ||||
|       border-bottom: 1px solid #ddd; | ||||
|       display: flex; | ||||
|       padding: 12px 40px 16px 0; | ||||
|       img{ | ||||
|  | ||||
|       img { | ||||
|         width: 48px; | ||||
|         height: 48px; | ||||
|         margin: 12px 16px 0 0; | ||||
|       } | ||||
|       .info{ | ||||
|  | ||||
|       .info { | ||||
|         width: calc(100% - 100px); | ||||
|         p{ | ||||
|  | ||||
|         p { | ||||
|           font-size: 34px; | ||||
|           font-family: PingFang-SC-Medium, PingFang-SC; | ||||
|           font-weight: 500; | ||||
| @@ -79,7 +84,8 @@ export default { | ||||
|           line-height: 48px; | ||||
|           margin-bottom: 12px; | ||||
|         } | ||||
|         span{ | ||||
|  | ||||
|         span { | ||||
|           font-size: 22px; | ||||
|           font-family: PingFang-SC-Medium, PingFang-SC; | ||||
|           font-weight: 500; | ||||
|   | ||||
| @@ -4,9 +4,9 @@ | ||||
|       <div class="item" v-for="(item, index) in list" :key="index"> | ||||
|         <img src="./img/bigHorn-lb@2x.png" alt=""> | ||||
|         <div class="info"> | ||||
|           <p>{{item.deviceName}}</p> | ||||
|           <span>{{item.createTime}}</span><br /> | ||||
|           <span>{{item.name}}</span> | ||||
|           <p>{{ item.deviceName }}</p> | ||||
|           <span>{{ item.createTime }}</span><br/> | ||||
|           <span>{{ item.name }}</span> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
| @@ -17,6 +17,7 @@ | ||||
| <script> | ||||
| import AiEmpty from '@/components/AiEmpty/AiEmpty' | ||||
| import AiBack from "@/components/AiBack"; | ||||
|  | ||||
| export default { | ||||
|   name: "onlinePlayList", | ||||
|   data() { | ||||
| @@ -58,22 +59,26 @@ export default { | ||||
| </script> | ||||
| <style lang="scss" scoped> | ||||
| .onlinePlayList { | ||||
|   .record{ | ||||
|   .record { | ||||
|     padding-left: 32px; | ||||
|     background-color: #fff; | ||||
|     .item{ | ||||
|  | ||||
|     .item { | ||||
|       width: 100%; | ||||
|       border-bottom: 1px solid #ddd; | ||||
|       display: flex; | ||||
|       padding: 12px 40px 16px 0; | ||||
|       img{ | ||||
|  | ||||
|       img { | ||||
|         width: 48px; | ||||
|         height: 48px; | ||||
|         margin: 12px 16px 0 0; | ||||
|       } | ||||
|       .info{ | ||||
|  | ||||
|       .info { | ||||
|         width: calc(100% - 100px); | ||||
|         p{ | ||||
|  | ||||
|         p { | ||||
|           font-size: 34px; | ||||
|           font-family: PingFang-SC-Medium, PingFang-SC; | ||||
|           font-weight: 500; | ||||
| @@ -81,7 +86,8 @@ export default { | ||||
|           line-height: 48px; | ||||
|           margin-bottom: 12px; | ||||
|         } | ||||
|         span{ | ||||
|  | ||||
|         span { | ||||
|           font-size: 22px; | ||||
|           font-family: PingFang-SC-Medium, PingFang-SC; | ||||
|           font-weight: 500; | ||||
|   | ||||
| @@ -7,11 +7,14 @@ | ||||
|     <div class="record"> | ||||
|       <div class="item" v-for="(item, index) in list" :key="index"> | ||||
|         <div class="info"> | ||||
|           <p>{{item.messageName}}</p> | ||||
|           <span>{{item.createTime}}</span><br /> | ||||
|           <span>{{item.deviceName}}</span> | ||||
|           <p>{{ item.messageName }}</p> | ||||
|           <span>{{ item.createTime }}</span><br/> | ||||
|           <span>{{ item.deviceName }}</span> | ||||
|         </div> | ||||
|         <div class="btn bg-3975C6" | ||||
|              v-if="item.broadcastStatus == 0 || item.broadcastStatus == 1 || item.broadcastStatus == 2" | ||||
|              @click="cancel(item.broadcastId)">撤销 | ||||
|         </div> | ||||
|         <div class="btn bg-3975C6" v-if="item.broadcastStatus == 0 || item.broadcastStatus == 1 || item.broadcastStatus == 2" @click="cancel(item.broadcastId)">撤销</div> | ||||
|         <div class="btn bg-AFD0FC" v-if="item.broadcastStatus == 6">已取消</div> | ||||
|       </div> | ||||
|     </div> | ||||
| @@ -19,7 +22,8 @@ | ||||
|   </div> | ||||
| </template> | ||||
| <script> | ||||
|   import AiBack from "@/components/AiBack"; | ||||
| import AiBack from "@/components/AiBack"; | ||||
|  | ||||
| export default { | ||||
|   name: "playList", | ||||
|   data() { | ||||
| @@ -71,7 +75,7 @@ export default { | ||||
| </script> | ||||
| <style lang="scss" scoped> | ||||
| .playList { | ||||
|   .title{ | ||||
|   .title { | ||||
|     width: 100%; | ||||
|     height: 88px; | ||||
|     line-height: 88px; | ||||
| @@ -84,21 +88,25 @@ export default { | ||||
|     box-sizing: border-box; | ||||
|     border-bottom: 1px solid #ddd; | ||||
|   } | ||||
|   .record{ | ||||
|  | ||||
|   .record { | ||||
|     padding-left: 32px; | ||||
|     background-color: #fff; | ||||
|     .item{ | ||||
|  | ||||
|     .item { | ||||
|       width: 100%; | ||||
|       border-bottom: 1px solid #ddd; | ||||
|       display: flex; | ||||
|       justify-content: space-between; | ||||
|       padding: 12px 40px 16px 0; | ||||
|       box-sizing: border-box; | ||||
|       .info{ | ||||
|  | ||||
|       .info { | ||||
|         width: 480px; | ||||
|         margin-right: 40px; | ||||
|         word-break: break-all; | ||||
|         p{ | ||||
|  | ||||
|         p { | ||||
|           font-size: 34px; | ||||
|           font-family: PingFang-SC-Medium, PingFang-SC; | ||||
|           font-weight: 500; | ||||
| @@ -106,7 +114,8 @@ export default { | ||||
|           line-height: 48px; | ||||
|           margin-bottom: 12px; | ||||
|         } | ||||
|         span{ | ||||
|  | ||||
|         span { | ||||
|           font-size: 22px; | ||||
|           font-family: PingFang-SC-Medium, PingFang-SC; | ||||
|           font-weight: 500; | ||||
| @@ -114,7 +123,8 @@ export default { | ||||
|           line-height: 32px; | ||||
|         } | ||||
|       } | ||||
|       .btn{ | ||||
|  | ||||
|       .btn { | ||||
|         width: 154px; | ||||
|         height: 60px; | ||||
|         border-radius: 8px; | ||||
| @@ -126,10 +136,12 @@ export default { | ||||
|         color: #FFF; | ||||
|         margin-top: 18px; | ||||
|       } | ||||
|       .bg-3975C6{ | ||||
|  | ||||
|       .bg-3975C6 { | ||||
|         background: #3975C6; | ||||
|       } | ||||
|       .bg-AFD0FC{ | ||||
|  | ||||
|       .bg-AFD0FC { | ||||
|         background: #AFD0FC; | ||||
|       } | ||||
|     } | ||||
|   | ||||
| @@ -3,7 +3,7 @@ | ||||
|     <div class="search"> | ||||
|       <div class="search-bg"> | ||||
|         <img src="./img/search-icon.png" alt=""> | ||||
|         <u-input v-model="value" type="text" placeholder="搜索设备名称" class="search-input" height="18" /> | ||||
|         <u-input v-model="value" type="text" placeholder="搜索设备名称" class="search-input" height="18"/> | ||||
|       </div> | ||||
|     </div> | ||||
|     <div class="record"> | ||||
| @@ -43,9 +43,7 @@ export default { | ||||
|       value: '' | ||||
|     } | ||||
|   }, | ||||
|   methods: { | ||||
|      | ||||
|   }, | ||||
|   methods: {}, | ||||
|   mounted() { | ||||
|  | ||||
|   } | ||||
| @@ -54,14 +52,16 @@ export default { | ||||
| <style lang="scss" scoped> | ||||
| .selectEquipment { | ||||
|   padding-bottom: 128px; | ||||
|   .search{ | ||||
|  | ||||
|   .search { | ||||
|     width: 100%; | ||||
|     height: 104px; | ||||
|     background: #FFF; | ||||
|     margin-bottom: 4px; | ||||
|     padding: 20px 32px; | ||||
|     box-sizing: border-box; | ||||
|     .search-bg{ | ||||
|  | ||||
|     .search-bg { | ||||
|       width: 686px; | ||||
|       height: 64px; | ||||
|       padding: 14px 0; | ||||
| @@ -69,14 +69,16 @@ export default { | ||||
|       background: #F5F5F5; | ||||
|       border-radius: 32px; | ||||
|       position: relative; | ||||
|       img{ | ||||
|  | ||||
|       img { | ||||
|         width: 32px; | ||||
|         height: 32px; | ||||
|         position: absolute; | ||||
|         top: 16px; | ||||
|         left: 32px; | ||||
|       } | ||||
|       .search-input{ | ||||
|  | ||||
|       .search-input { | ||||
|         width: 590px; | ||||
|         height: 36px; | ||||
|         line-height: 36px; | ||||
| @@ -85,38 +87,45 @@ export default { | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|   .record{ | ||||
|  | ||||
|   .record { | ||||
|     padding-left: 32px; | ||||
|     background-color: #fff; | ||||
|     .item{ | ||||
|  | ||||
|     .item { | ||||
|       width: 100%; | ||||
|       display: flex; | ||||
|       border-bottom: 1px solid #ddd; | ||||
|       .check-img{ | ||||
|  | ||||
|       .check-img { | ||||
|         width: 32px; | ||||
|         height: 32px; | ||||
|         margin: 32px 32px 0 0; | ||||
|       } | ||||
|       .voice-img{ | ||||
|  | ||||
|       .voice-img { | ||||
|         width: 48px; | ||||
|         height: 48px; | ||||
|         margin: 28px 16px 0 0; | ||||
|       } | ||||
|       .info{ | ||||
|  | ||||
|       .info { | ||||
|         width: calc(100% - 148px); | ||||
|         padding: 18px 0; | ||||
|         line-height: 44px; | ||||
|         font-size: 34px; | ||||
|         display: flex; | ||||
|         justify-content: space-between; | ||||
|         .text{ | ||||
|           p{ | ||||
|  | ||||
|         .text { | ||||
|           p { | ||||
|             font-family: PingFang-SC-Medium, PingFang-SC; | ||||
|             font-weight: 500; | ||||
|             color: #333; | ||||
|             margin-bottom: 8px; | ||||
|           } | ||||
|           span{ | ||||
|  | ||||
|           span { | ||||
|             font-size: 26px; | ||||
|             font-family: PingFang-SC-Medium, PingFang-SC; | ||||
|             font-weight: 500; | ||||
| @@ -124,7 +133,8 @@ export default { | ||||
|             line-height: 36px; | ||||
|           } | ||||
|         } | ||||
|         .status{ | ||||
|  | ||||
|         .status { | ||||
|           font-size: 34px; | ||||
|           font-family: PingFang-SC-Medium, PingFang-SC; | ||||
|           font-weight: 500; | ||||
| @@ -134,7 +144,8 @@ export default { | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|   .btn{ | ||||
|  | ||||
|   .btn { | ||||
|     position: fixed; | ||||
|     bottom: 0; | ||||
|     left: 0; | ||||
| @@ -144,7 +155,8 @@ export default { | ||||
|     border-top: 1px solid #ddd; | ||||
|     padding: 24px 32px 24px 0; | ||||
|     box-sizing: border-box; | ||||
|     div{ | ||||
|  | ||||
|     div { | ||||
|       width: 192px; | ||||
|       height: 80px; | ||||
|       line-height: 80px; | ||||
|   | ||||
| @@ -17,13 +17,9 @@ | ||||
| export default { | ||||
|   name: "selectMp3", | ||||
|   data() { | ||||
|     return { | ||||
|        | ||||
|     } | ||||
|   }, | ||||
|   methods: { | ||||
|      | ||||
|     return {} | ||||
|   }, | ||||
|   methods: {}, | ||||
|   mounted() { | ||||
|  | ||||
|   } | ||||
| @@ -32,18 +28,22 @@ export default { | ||||
| <style lang="scss" scoped> | ||||
| .selectMp3 { | ||||
|   padding-bottom: 128px; | ||||
|   .record{ | ||||
|  | ||||
|   .record { | ||||
|     padding-left: 32px; | ||||
|     background-color: #fff; | ||||
|     .item{ | ||||
|  | ||||
|     .item { | ||||
|       width: 100%; | ||||
|       display: flex; | ||||
|       img{ | ||||
|  | ||||
|       img { | ||||
|         width: 32px; | ||||
|         height: 32px; | ||||
|         margin: 40px 16px 0 0; | ||||
|       } | ||||
|       .info{ | ||||
|  | ||||
|       .info { | ||||
|         width: calc(100% - 60px); | ||||
|         padding-bottom: 16px; | ||||
|         padding: 34px 0; | ||||
| @@ -57,7 +57,8 @@ export default { | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|   .btn{ | ||||
|  | ||||
|   .btn { | ||||
|     position: fixed; | ||||
|     bottom: 0; | ||||
|     left: 0; | ||||
| @@ -67,7 +68,8 @@ export default { | ||||
|     border-top: 1px solid #ddd; | ||||
|     padding: 24px 32px 24px 0; | ||||
|     box-sizing: border-box; | ||||
|     div{ | ||||
|  | ||||
|     div { | ||||
|       width: 192px; | ||||
|       height: 80px; | ||||
|       line-height: 80px; | ||||
|   | ||||
| @@ -1,12 +1,13 @@ | ||||
| <template> | ||||
|   <div class="closemsg"> | ||||
|     <img :src="imgSrc" alt="" /> | ||||
|     <img :src="imgSrc" alt=""/> | ||||
|     <text>{{ text }}</text> | ||||
|     <u-button | ||||
|         type="primary" | ||||
|         :custom-style="{ width: '100%', borderRadius: '4px', marginTop: '48px' }" | ||||
|         @click="goBack" | ||||
|       >{{ btnText }}</u-button | ||||
|     >{{ btnText }} | ||||
|     </u-button | ||||
|     > | ||||
|     <back></back> | ||||
|   </div> | ||||
| @@ -17,7 +18,7 @@ import back from '../../components/AiBack' | ||||
|  | ||||
| export default { | ||||
|   name: 'CloseMsg', | ||||
|   components: { back }, | ||||
|   components: {back}, | ||||
|   data() { | ||||
|     return { | ||||
|       flag: true | ||||
| @@ -44,7 +45,7 @@ export default { | ||||
|       return this.flag ? '确定' : '查看详情' | ||||
|     }, | ||||
|     imgSrc() { | ||||
|       return   this.$cdn+'other/'+(this.flag?'kztcg.png':'kztsb.png') | ||||
|       return this.$cdn + 'other/' + (this.flag ? 'kztcg.png' : 'kztsb.png') | ||||
|     } | ||||
|   } | ||||
| } | ||||
|   | ||||
| @@ -5,7 +5,7 @@ | ||||
|       <textarea placeholder="请输入批示意见" v-model.trim="description" maxlength="200"></textarea> | ||||
|       <u-row justify="between"> | ||||
|         <span @click="description=''">清空内容</span> | ||||
|         <span>{{description.length || 0}}/200</span> | ||||
|         <span>{{ description.length || 0 }}/200</span> | ||||
|       </u-row> | ||||
|     </div> | ||||
|     <ai-back/> | ||||
| @@ -14,9 +14,9 @@ | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
|   import AiBack from "../../../components/AiBack"; | ||||
| import AiBack from "../../../components/AiBack"; | ||||
|  | ||||
|   export default { | ||||
| export default { | ||||
|   name: "approval", | ||||
|   components: {AiBack}, | ||||
|   data() { | ||||
| @@ -43,11 +43,11 @@ | ||||
|       }) | ||||
|     } | ||||
|   } | ||||
|   } | ||||
| } | ||||
| </script> | ||||
|  | ||||
| <style lang="scss" scoped> | ||||
|   .approval { | ||||
| .approval { | ||||
|   background: #F5F5F5; | ||||
|  | ||||
|   .card { | ||||
| @@ -87,5 +87,5 @@ | ||||
|     bottom: 0; | ||||
|     background: #197DF0 !important; | ||||
|   } | ||||
|   } | ||||
| } | ||||
| </style> | ||||
|   | ||||
| @@ -2,43 +2,44 @@ | ||||
|   <div class="detail"> | ||||
|     <template v-if="!userSelect"> | ||||
|       <div class="card"> | ||||
|         <header>{{detail.documentName}}</header> | ||||
|         <header>{{ detail.documentName }}</header> | ||||
|         <u-gap height="16"></u-gap> | ||||
|         <u-row> | ||||
|           <span>公文编号:</span> | ||||
|           <span>{{detail.documentCode}}</span> | ||||
|           <span>{{ detail.documentCode }}</span> | ||||
|         </u-row> | ||||
|         <u-gap height="8"></u-gap> | ||||
|         <u-row> | ||||
|           <span>公文类型:</span> | ||||
|           <span>{{$dict.getLabel("officialDocumentName",detail.documentType)}}</span> | ||||
|           <span>{{ $dict.getLabel("officialDocumentName", detail.documentType) }}</span> | ||||
|         </u-row> | ||||
|         <u-gap height="8"></u-gap> | ||||
|         <u-row> | ||||
|           <span>紧急程度:</span> | ||||
|           <span :style="{color:$dict.getColor('documentEmergencyLevel',detail.emergencyLevel)}">{{$dict.getLabel("documentEmergencyLevel",detail.emergencyLevel)}}</span> | ||||
|           <span | ||||
|               :style="{color:$dict.getColor('documentEmergencyLevel',detail.emergencyLevel)}">{{ $dict.getLabel("documentEmergencyLevel", detail.emergencyLevel) }}</span> | ||||
|         </u-row> | ||||
|         <u-gap height="8"></u-gap> | ||||
|         <u-row> | ||||
|           <span>发文机关:</span> | ||||
|           <span>{{detail.issuingUnit}}</span> | ||||
|           <span>{{ detail.issuingUnit }}</span> | ||||
|         </u-row> | ||||
|         <u-gap height="8"></u-gap> | ||||
|         <u-row> | ||||
|           <span>发文字号:</span> | ||||
|           <span>{{detail.issuingFont}}</span> | ||||
|           <span>{{ detail.issuingFont }}</span> | ||||
|         </u-row> | ||||
|         <u-gap height="8"></u-gap> | ||||
|         <u-row> | ||||
|           <span>签发人:</span> | ||||
|           <span>{{detail.signer}}</span> | ||||
|           <span>{{ detail.signer }}</span> | ||||
|         </u-row> | ||||
|         <u-gap height="16"></u-gap> | ||||
|         <img v-if="detail.confidentialityLevel" :src="$cdn + tag(detail.confidentialityLevel)" alt=""> | ||||
|       </div> | ||||
|       <div class="card" style="margin-bottom: 0;padding-top: 0"> | ||||
|         <div class="label">备注</div> | ||||
|         <span>{{detail.remark}}</span> | ||||
|         <span>{{ detail.remark }}</span> | ||||
|       </div> | ||||
|       <div class="card" style="padding-top: 0" v-if="detail.files && detail.files.length"> | ||||
|         <div class="label">相关附件</div> | ||||
| @@ -46,30 +47,32 @@ | ||||
|           <u-row justify="between"> | ||||
|             <label class="left"> | ||||
|               <img :src="$cdn + 'common/appendix.png'" alt=""> | ||||
|               <span>{{item.fileName}}.{{item.postfix}}</span> | ||||
|               <span>{{ item.fileName }}.{{ item.postfix }}</span> | ||||
|             </label> | ||||
|             <span>{{(item.size/1024).toFixed(2)}}KB</span> | ||||
|             <span>{{ (item.size / 1024).toFixed(2) }}KB</span> | ||||
|           </u-row> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="card"> | ||||
|         <div class="label" style="96px;">{{detail.readType ==0 ? "流转信息" : "传阅情况"}} | ||||
|           <em>({{$dict.getLabel("documentStatus",detail.status)}})</em></div> | ||||
|         <div class="label" style="96px;">{{ detail.readType == 0 ? "流转信息" : "传阅情况" }} | ||||
|           <em>({{ $dict.getLabel("documentStatus", detail.status) }})</em></div> | ||||
|         <div class="progress"> | ||||
|           <div class="item" v-for="(item,index) in detail.flowUsers" :key="index"> | ||||
|             <div class="avatar">{{item.flowUserName && item.flowUserName.substr(-2)}}</div> | ||||
|             <div class="avatar">{{ item.flowUserName && item.flowUserName.substr(-2) }}</div> | ||||
|             <div class="right"> | ||||
|               <u-row justify="between"> | ||||
|                 <text class="status" :style="{color:item.readStatus==1?'#FF8822':'#1365DD'}">{{$dict.getLabel(detail.readType ==1 ? "readingStatus" : | ||||
|                   "documentFlowStatus",detail.readType ==0 ? item.flowStatus : item.readStatus)}} | ||||
|                 <text class="status" :style="{color:item.readStatus==1?'#FF8822':'#1365DD'}">{{ | ||||
|                     $dict.getLabel(detail.readType == 1 ? "readingStatus" : | ||||
|                         "documentFlowStatus", detail.readType == 0 ? item.flowStatus : item.readStatus) | ||||
|                   }} | ||||
|                 </text> | ||||
|                 <text class="date">{{item.flowTime}}</text> | ||||
|                 <text class="date">{{ item.flowTime }}</text> | ||||
|               </u-row> | ||||
|               <u-row justify="between"> | ||||
|                 <text class="name">{{item.flowUserName}}</text> | ||||
|                 <text class="name">{{ item.flowUserName }}</text> | ||||
|               </u-row> | ||||
|               <u-row justify="between"> | ||||
|                 <text class="note">{{item.description}}</text> | ||||
|                 <text class="note">{{ item.description }}</text> | ||||
|               </u-row> | ||||
|             </div> | ||||
|           </div> | ||||
| @@ -81,7 +84,9 @@ | ||||
|         <div @click="handleClick(1)">流转</div> | ||||
|       </div> | ||||
|  | ||||
|       <div class="footer" v-if="detail.readType==1 && detail.flowRight==1" @click="read" style="background-color: #1365DD;color: #FFFFFF">我已阅完</div> | ||||
|       <div class="footer" v-if="detail.readType==1 && detail.flowRight==1" @click="read" | ||||
|            style="background-color: #1365DD;color: #FFFFFF">我已阅完 | ||||
|       </div> | ||||
|  | ||||
|     </template> | ||||
|  | ||||
| @@ -93,11 +98,11 @@ | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
|   import AiBack from "../../../components/AiBack"; | ||||
|   import AiSelectEnterprise from "../../../components/AiSelectEnterprise"; | ||||
|   import {mapActions} from "vuex"; | ||||
| import AiBack from "../../../components/AiBack"; | ||||
| import AiSelectEnterprise from "../../../components/AiSelectEnterprise"; | ||||
| import {mapActions} from "vuex"; | ||||
|  | ||||
|   export default { | ||||
| export default { | ||||
|   name: "detail", | ||||
|   components: {AiBack, AiSelectEnterprise}, | ||||
|   data() { | ||||
| @@ -128,12 +133,12 @@ | ||||
|       }) | ||||
|     }, | ||||
|     preFile(e) { | ||||
|         if([".jpg",".png",".gif"].includes(e.postfix.toLowerCase())){ | ||||
|       if ([".jpg", ".png", ".gif"].includes(e.postfix.toLowerCase())) { | ||||
|         uni.previewImage({ | ||||
|           current: e.url, | ||||
|           urls: [e.url] | ||||
|         }) | ||||
|         }else { | ||||
|       } else { | ||||
|         this.previewFile({...e}) | ||||
|       } | ||||
|     }, | ||||
| @@ -186,11 +191,11 @@ | ||||
|   onShow() { | ||||
|     this.getDetail() | ||||
|   } | ||||
|   } | ||||
| } | ||||
| </script> | ||||
|  | ||||
| <style lang="scss" scoped> | ||||
|   .detail { | ||||
| .detail { | ||||
|   min-height: 100%; | ||||
|   background-color: #F5F5F5; | ||||
|   padding-bottom: 140px; | ||||
| @@ -299,9 +304,9 @@ | ||||
|             line-height: 44px; | ||||
|             overflow: hidden; | ||||
|             text-overflow: ellipsis; | ||||
|               display:-webkit-box; | ||||
|               -webkit-box-orient:vertical; | ||||
|               -webkit-line-clamp:2; | ||||
|             display: -webkit-box; | ||||
|             -webkit-box-orient: vertical; | ||||
|             -webkit-line-clamp: 2; | ||||
|           } | ||||
|         } | ||||
|  | ||||
| @@ -428,5 +433,5 @@ | ||||
|       background-color: #1365DD; | ||||
|     } | ||||
|   } | ||||
|   } | ||||
| } | ||||
| </style> | ||||
|   | ||||
| @@ -2,29 +2,30 @@ | ||||
|   <div class="document-flow"> | ||||
|     <ai-top-fixed> | ||||
|       <header class="pad"> | ||||
|         <u-search placeholder="请输入公文名称" v-model="documentName" @clear="documentName='',getList()" @search="getList" clearabled :show-action="false" height="64"></u-search> | ||||
|         <u-search placeholder="请输入公文名称" v-model="documentName" @clear="documentName='',getList()" @search="getList" | ||||
|                   clearabled :show-action="false" height="64"></u-search> | ||||
|       </header> | ||||
|     </ai-top-fixed> | ||||
|     <div class="list pad" v-if="list.length"> | ||||
|       <div class="card" v-for="(item,index) in list" :key="index" @click="handleClick(item)"> | ||||
|         <u-row> | ||||
|           <em v-if="item.redStatus==0"></em> | ||||
|           <span>{{item.documentName}}</span> | ||||
|           <span>{{ item.documentName }}</span> | ||||
|         </u-row> | ||||
|         <u-gap height="16"></u-gap> | ||||
|         <u-row> | ||||
|           <label>公文类型:</label> | ||||
|           <text style="color: #1365DD;">{{$dict.getLabel("officialDocumentName",item.documentType)}}</text> | ||||
|           <text style="color: #1365DD;">{{ $dict.getLabel("officialDocumentName", item.documentType) }}</text> | ||||
|         </u-row> | ||||
|         <u-gap height="8"></u-gap> | ||||
|         <u-row> | ||||
|           <label>登记人:</label> | ||||
|           <text>{{item.createUserName}}</text> | ||||
|           <text>{{ item.createUserName }}</text> | ||||
|         </u-row> | ||||
|         <u-gap height="8"></u-gap> | ||||
|         <u-row> | ||||
|           <label>登记日期:</label> | ||||
|           <text>{{item.createTime}}</text> | ||||
|           <text>{{ item.createTime }}</text> | ||||
|         </u-row> | ||||
|         <img :src=" $cdn + tag(item.readType)" alt=""> | ||||
|       </div> | ||||
| @@ -35,12 +36,12 @@ | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
|   import AiTopFixed from "../../components/AiTopFixed"; | ||||
|   import AiEmpty from "../../components/AiEmpty"; | ||||
| import AiTopFixed from "../../components/AiTopFixed"; | ||||
| import AiEmpty from "../../components/AiEmpty"; | ||||
|  | ||||
|   export default { | ||||
| export default { | ||||
|   name: "documentFlow", | ||||
|     components: {AiTopFixed,AiEmpty}, | ||||
|   components: {AiTopFixed, AiEmpty}, | ||||
|   data() { | ||||
|     return { | ||||
|       documentName: "", | ||||
| @@ -49,11 +50,11 @@ | ||||
|       status: "加载更多" | ||||
|     } | ||||
|   }, | ||||
|     onLoad(){ | ||||
|   onLoad() { | ||||
|     this.$dict.load("officialDocumentName") | ||||
|   }, | ||||
|   methods: { | ||||
|       tag(status){ | ||||
|     tag(status) { | ||||
|       return { | ||||
|         "0": 'common/1ps.png', | ||||
|         "1": 'common/2cy.png' | ||||
| @@ -61,7 +62,7 @@ | ||||
|     }, | ||||
|     getList() { | ||||
|       this.$http.post("/app/appofficialdocumentinfo/appList", null, { | ||||
|           params:{ | ||||
|         params: { | ||||
|           documentName: this.documentName, | ||||
|           size: 10, | ||||
|           current: this.current | ||||
| @@ -81,18 +82,18 @@ | ||||
|       }) | ||||
|     } | ||||
|   }, | ||||
|     onShow(){ | ||||
|   onShow() { | ||||
|     this.getList() | ||||
|   }, | ||||
|   onReachBottom() { | ||||
|     this.current = this.current + 1; | ||||
|     this.getList() | ||||
|   }, | ||||
|   } | ||||
| } | ||||
| </script> | ||||
|  | ||||
| <style lang="scss" scoped> | ||||
|   .document-flow { | ||||
| .document-flow { | ||||
|   min-height: 100%; | ||||
|   background: #F5F5F5; | ||||
|  | ||||
| @@ -118,7 +119,7 @@ | ||||
|       position: relative; | ||||
|       margin-bottom: 32px; | ||||
|  | ||||
|         .u-row{ | ||||
|       .u-row { | ||||
|         flex-wrap: nowrap !important; | ||||
|       } | ||||
|  | ||||
| @@ -162,5 +163,5 @@ | ||||
|     box-sizing: border-box; | ||||
|     padding: 32px 32px 0 32px; | ||||
|   } | ||||
|   } | ||||
| } | ||||
| </style> | ||||
|   | ||||
| @@ -55,9 +55,11 @@ export default { | ||||
|  | ||||
|   ::v-deep .u-drawer { | ||||
|     text-align: center; | ||||
|     .uni-scroll-view-content{ | ||||
|  | ||||
|     .uni-scroll-view-content { | ||||
|       max-height: 672px; | ||||
|     } | ||||
|  | ||||
|     .option { | ||||
|       font-size: 32px; | ||||
|       cursor: pointer; | ||||
|   | ||||
| @@ -13,12 +13,13 @@ | ||||
|  | ||||
| <script> | ||||
| import AiBack from "../../components/AiBack"; | ||||
|  | ||||
| export default { | ||||
|   name: "historyList", | ||||
|   components: {AiBack}, | ||||
|   computed: { | ||||
|     itemLabel() { | ||||
|       return '历史'+this.$dict.getLabel('intelligentGuardianshipItem', this.$route.query.type)+`(${this.$dict.getLabel('intelligentGuardianshipItemUnit',this.$route.query.type)})` | ||||
|       return '历史' + this.$dict.getLabel('intelligentGuardianshipItem', this.$route.query.type) + `(${this.$dict.getLabel('intelligentGuardianshipItemUnit', this.$route.query.type)})` | ||||
|     } | ||||
|   }, | ||||
|   data() { | ||||
| @@ -39,7 +40,7 @@ export default { | ||||
|     } | ||||
|   }, | ||||
|   created() { | ||||
|     this.$dict.load("intelligentGuardianshipItem",'intelligentGuardianshipItemUnit') | ||||
|     this.$dict.load("intelligentGuardianshipItem", 'intelligentGuardianshipItemUnit') | ||||
|     this.getHistory() | ||||
|   } | ||||
| } | ||||
|   | ||||
| @@ -75,7 +75,7 @@ export default { | ||||
|     } | ||||
|   }, | ||||
|   created() { | ||||
|     this.$dict.load("intelligentGuardianshipItem",'intelligentGuardianshipItem2', 'sex') | ||||
|     this.$dict.load("intelligentGuardianshipItem", 'intelligentGuardianshipItem2', 'sex') | ||||
|   }, | ||||
|   mounted() { | ||||
|     this.getDetail(this.$route.query.id).then(() => this.initMap()) | ||||
|   | ||||
| @@ -9,13 +9,13 @@ | ||||
|         <header><em>*</em>起止时间</header> | ||||
|         <u-row justify="between"> | ||||
|           <div class="time" @click="pick(0)"> | ||||
|             <span>{{form.startTime.time}}</span> | ||||
|             <span>{{form.startTime.year}}年{{form.startTime.month}}月{{form.startTime.day}}日 周{{form.startTime.weekday}}</span> | ||||
|             <span>{{ form.startTime.time }}</span> | ||||
|             <span>{{ form.startTime.year }}年{{ form.startTime.month }}月{{ form.startTime.day }}日 周{{ form.startTime.weekday }}</span> | ||||
|           </div> | ||||
|           <div class="arrow"></div> | ||||
|           <div class="time" @click="pick(1)"> | ||||
|             <span>{{form.endTime.time}}</span> | ||||
|             <span>{{form.endTime.year}}年{{form.endTime.month}}月{{form.endTime.day}}日 周{{form.endTime.weekday}}</span> | ||||
|             <span>{{ form.endTime.time }}</span> | ||||
|             <span>{{ form.endTime.year }}年{{ form.endTime.month }}月{{ form.endTime.day }}日 周{{ form.endTime.weekday }}</span> | ||||
|           </div> | ||||
|         </u-row> | ||||
|       </div> | ||||
| @@ -29,7 +29,8 @@ | ||||
|       </div> | ||||
|  | ||||
|       <div class="card"> | ||||
|         <AiUploader :multiple="true" type="file" :limit="9" placeholder="上传附件" @list="fileList" :def="form.files"></AiUploader> | ||||
|         <AiUploader :multiple="true" type="file" :limit="9" placeholder="上传附件" @list="fileList" | ||||
|                     :def="form.files"></AiUploader> | ||||
|       </div> | ||||
|  | ||||
|       <div class="card item-wrap" @click="select"> | ||||
| @@ -40,7 +41,7 @@ | ||||
|               <span>请选择</span> | ||||
|             </template> | ||||
|             <template v-else> | ||||
|               已选择<em>{{form.attendees.map(e=>e.name).slice(0,2).join("、")}}</em>等<em>{{form.attendees.length}}</em>人 | ||||
|               已选择<em>{{ form.attendees.map(e => e.name).slice(0, 2).join("、") }}</em>等<em>{{ form.attendees.length }}</em>人 | ||||
|             </template> | ||||
|             <div class="right-arrow"></div> | ||||
|           </div> | ||||
| @@ -51,7 +52,7 @@ | ||||
|           <header>参会提醒</header> | ||||
|           <picker class="right" @change="beforeNoticeChange" :value="form.noticeBefore" range-key="dictName" | ||||
|                   :range="$dict.getDict('meetingNoticeBefore')"> | ||||
|             <span>{{ form.noticeBefore !=null ? $dict.getDict('meetingNoticeBefore')[form.noticeBefore]["dictName"] : "请选择"}}</span> | ||||
|             <span>{{ form.noticeBefore != null ? $dict.getDict('meetingNoticeBefore')[form.noticeBefore]["dictName"] : "请选择" }}</span> | ||||
|             <div class="right-arrow"></div> | ||||
|           </picker> | ||||
|         </u-row> | ||||
| @@ -61,7 +62,7 @@ | ||||
|           <header>确认提醒</header> | ||||
|           <picker class="right" @change="afterNoticeChange" :value="form.noticeAfter" range-key="dictName" | ||||
|                   :range="$dict.getDict('meetingNoticeAfter')"> | ||||
|             <span>{{form.noticeAfter !=null ? $dict.getDict('meetingNoticeAfter')[form.noticeAfter]["dictName"] : "请选择"}}</span> | ||||
|             <span>{{ form.noticeAfter != null ? $dict.getDict('meetingNoticeAfter')[form.noticeAfter]["dictName"] : "请选择" }}</span> | ||||
|             <div class="right-arrow"></div> | ||||
|           </picker> | ||||
|         </u-row> | ||||
| @@ -73,18 +74,19 @@ | ||||
|     </div> | ||||
|     <u-picker mode="time" v-model="show" :params="params" @confirm="confirm"></u-picker> | ||||
|     <AiBack ref="aiBack" v-if="!userSelect"/> | ||||
|     <AiSelectEnterprise :visible.sync="userSelect" :value="form.attendees" v-if="userSelect" @change="change"></AiSelectEnterprise> | ||||
|     <AiSelectEnterprise :visible.sync="userSelect" :value="form.attendees" v-if="userSelect" | ||||
|                         @change="change"></AiSelectEnterprise> | ||||
|   </div> | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
|   import AiBack from "../../../components/AiBack"; | ||||
|   import AiSelectEnterprise from "../../../components/AiSelectEnterprise"; | ||||
|   import AiUploader from "../../../components/AiUploader"; | ||||
| import AiBack from "../../../components/AiBack"; | ||||
| import AiSelectEnterprise from "../../../components/AiSelectEnterprise"; | ||||
| import AiUploader from "../../../components/AiUploader"; | ||||
|  | ||||
|   export default { | ||||
| export default { | ||||
|   name: "addMeeting", | ||||
|     components: {AiBack,AiSelectEnterprise,AiUploader}, | ||||
|   components: {AiBack, AiSelectEnterprise, AiUploader}, | ||||
|   data() { | ||||
|     const initTime = { | ||||
|       time: "", | ||||
| @@ -114,16 +116,16 @@ | ||||
|     } | ||||
|   }, | ||||
|   onLoad(opt) { | ||||
|       if(opt.id) { | ||||
|     if (opt.id) { | ||||
|       this.form.id = opt.id | ||||
|       this.getDetail() | ||||
|     } | ||||
|     this.$dict.load("meetingNoticeBefore", "meetingNoticeAfter"); | ||||
|       this.$nextTick(()=>{ | ||||
|     this.$nextTick(() => { | ||||
|       let date = new Date(); | ||||
|       this.form.startTime.time = date.getHours()?.toString()?.padStart(2, "0") + ":" + date.getMinutes()?.toString()?.padStart(2, "0") | ||||
|       this.form.startTime.year = date.getFullYear() | ||||
|         this.form.startTime.month = (date.getMonth()+1)?.toString()?.padStart(2, "0") | ||||
|       this.form.startTime.month = (date.getMonth() + 1)?.toString()?.padStart(2, "0") | ||||
|       this.form.startTime.day = date.getDate() | ||||
|       this.form.startTime.weekday = '日一二三四五六'.charAt(date.getDay()) | ||||
|       this.form.endTime = {...this.form.startTime} | ||||
| @@ -142,10 +144,10 @@ | ||||
|     } | ||||
|   }, | ||||
|   methods: { | ||||
|       fileList(e){ | ||||
|     fileList(e) { | ||||
|       this.form.files = e | ||||
|     }, | ||||
|       change(e){ | ||||
|     change(e) { | ||||
|       this.form.attendees = e | ||||
|     }, | ||||
|     beforeNoticeChange(e) { | ||||
| @@ -155,12 +157,12 @@ | ||||
|       this.form.noticeAfter = e.detail.value | ||||
|     }, | ||||
|  | ||||
|       getDetail(){ | ||||
|         this.$http.post("/app/appmeetinginfo/info-id",null,{ | ||||
|           params:{ | ||||
|             id:this.form.id | ||||
|     getDetail() { | ||||
|       this.$http.post("/app/appmeetinginfo/info-id", null, { | ||||
|         params: { | ||||
|           id: this.form.id | ||||
|         } | ||||
|         }).then(res=>{ | ||||
|       }).then(res => { | ||||
|         if (res && res.data) { | ||||
|           this.form.title = res.data.title | ||||
|           this.form.address = res.data.address | ||||
| @@ -202,7 +204,7 @@ | ||||
|     }, | ||||
|  | ||||
|     add(status) { | ||||
|         if(status==1){ | ||||
|       if (status == 1) { | ||||
|         if (!this.form.title) return this.$u.toast("请输入会议标题") | ||||
|  | ||||
|         if (this.form.startTime.timestamp >= this.form.endTime.timestamp) return this.$u.toast("结束时间不能小于开始时间") | ||||
| @@ -211,12 +213,12 @@ | ||||
|  | ||||
|         if (!this.form.content) return this.$u.toast("请输入会议内容") | ||||
|  | ||||
|           if(!this.form.attendees.length) return this.$u.toast("请选择参会人") | ||||
|         if (!this.form.attendees.length) return this.$u.toast("请选择参会人") | ||||
|       } | ||||
|  | ||||
|       this.$http.post("/app/appmeetinginfo/add-update", { | ||||
|         ...this.form, | ||||
|           files:this.form.files.map(e=>e.id), | ||||
|         files: this.form.files.map(e => e.id), | ||||
|         status, | ||||
|         startTime: this.form.startTime.year + "-" + this.form.startTime.month + "-" + this.form.startTime.day + " " + this.form.startTime.time + ":00", | ||||
|         endTime: this.form.endTime.year + "-" + this.form.endTime.month + "-" + this.form.endTime.day + " " + this.form.endTime.time + ":00", | ||||
| @@ -238,11 +240,11 @@ | ||||
|       }) | ||||
|     } | ||||
|   }, | ||||
|   } | ||||
| } | ||||
| </script> | ||||
|  | ||||
| <style lang="scss" scoped> | ||||
|   .add-meeting { | ||||
| .add-meeting { | ||||
|   min-height: 100%; | ||||
|   background: #F5F5F5; | ||||
|   padding-bottom: 140px; | ||||
| @@ -394,5 +396,5 @@ | ||||
|       background-color: #1365DD; | ||||
|     } | ||||
|   } | ||||
|   } | ||||
| } | ||||
| </style> | ||||
|   | ||||
| @@ -6,26 +6,26 @@ | ||||
|     <div class="body"> | ||||
|       <template v-if="list.length"> | ||||
|         <div class="card" v-for="(item,index) in list" :key="index" @click="handleClick(item)"> | ||||
|           <header>{{item.title}}</header> | ||||
|           <header>{{ item.title }}</header> | ||||
|           <u-row justify="between"> | ||||
|             <div class="time"> | ||||
|               <span>{{item.startTime|formatTime}}</span> | ||||
|               <span>{{item.startTime|formatDate(0)}}年{{item.startTime|formatDate(1)}}月{{item.startTime|formatDate(2)}}日 周{{item.startTime|formatWeek}}</span> | ||||
|               <span>{{ item.startTime|formatTime }}</span> | ||||
|               <span>{{ item.startTime|formatDate(0) }}年{{ item.startTime|formatDate(1) }}月{{ item.startTime|formatDate(2) }}日 周{{ item.startTime|formatWeek }}</span> | ||||
|             </div> | ||||
|             <div class="arrow"></div> | ||||
|             <div class="time"> | ||||
|               <span>{{item.endTime|formatTime}}</span> | ||||
|               <span>{{item.endTime|formatDate(0)}}年{{item.endTime|formatDate(1)}}月{{item.endTime|formatDate(2)}}日 周{{item.endTime|formatWeek}}</span> | ||||
|               <span>{{ item.endTime|formatTime }}</span> | ||||
|               <span>{{ item.endTime|formatDate(0) }}年{{ item.endTime|formatDate(1) }}月{{ item.endTime|formatDate(2) }}日 周{{ item.endTime|formatWeek }}</span> | ||||
|             </div> | ||||
|           </u-row> | ||||
|           <u-row class="info"> | ||||
|             <span>发起单位:</span> | ||||
|             <span>{{item.unitName}}</span> | ||||
|             <span>{{ item.unitName }}</span> | ||||
|           </u-row> | ||||
|           <u-gap height="20"></u-gap> | ||||
|           <u-row class="info"> | ||||
|             <span>会议地点:</span> | ||||
|             <span>{{item.address}}</span> | ||||
|             <span>{{ item.address }}</span> | ||||
|           </u-row> | ||||
|           <div class="tag" :style="{background:'url(' + tag(item.status) + ')'}"></div> | ||||
|         </div> | ||||
| @@ -39,11 +39,11 @@ | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
|   import AiTopFixed from "../../../components/AiTopFixed"; | ||||
|   import AiBack from "../../../components/AiBack"; | ||||
|   import AiEmpty from "../../../components/AiEmpty"; | ||||
| import AiTopFixed from "../../../components/AiTopFixed"; | ||||
| import AiBack from "../../../components/AiBack"; | ||||
| import AiEmpty from "../../../components/AiEmpty"; | ||||
|  | ||||
|   export default { | ||||
| export default { | ||||
|   name: "belongToMe", | ||||
|   components: {AiTopFixed, AiBack, AiEmpty}, | ||||
|   data() { | ||||
| @@ -122,11 +122,11 @@ | ||||
|       return "日一二三四五六".charAt(new Date(date.split(" ")[0]).getDay()) | ||||
|     }, | ||||
|   } | ||||
|   } | ||||
| } | ||||
| </script> | ||||
|  | ||||
| <style lang="scss" scoped> | ||||
|   .belong-to-me { | ||||
| .belong-to-me { | ||||
|   min-height: 100%; | ||||
|   background-color: #F5F5F5; | ||||
|  | ||||
| @@ -227,5 +227,5 @@ | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|   } | ||||
| } | ||||
| </style> | ||||
|   | ||||
| @@ -17,7 +17,9 @@ | ||||
|         <u-gap height="8"></u-gap> | ||||
|         <u-row> | ||||
|           <img :src="$cdn + 'common/date.png'" alt=""> | ||||
|           <span>{{ detail.startTime && detail.startTime.substr(0, 16) }} 至 {{ detail.endTime && detail.endTime.substr(0, 16) }}</span> | ||||
|           <span>{{ | ||||
|               detail.startTime && detail.startTime.substr(0, 16) | ||||
|             }} 至 {{ detail.endTime && detail.endTime.substr(0, 16) }}</span> | ||||
|         </u-row> | ||||
|         <u-gap height="8"></u-gap> | ||||
|         <u-row> | ||||
|   | ||||
| @@ -2,30 +2,30 @@ | ||||
|   <div class="meeting-list"> | ||||
|     <div class="card" v-for="(item,index) in list" :key="index" @click="detail(item)"> | ||||
|       <header> | ||||
|         <span>{{item.title}}</span> | ||||
|         <span>{{ item.title }}</span> | ||||
|         <span> | ||||
|           <span v-if="index==2">保存于</span> | ||||
|           {{item.createTime}}</span> | ||||
|           {{ item.createTime }}</span> | ||||
|       </header> | ||||
|       <u-row justify="between"> | ||||
|         <div class="time"> | ||||
|           <span>{{item.startTime|format}}</span> | ||||
|           <span>{{item.startTime|formatDate(0)}}年{{item.startTime|formatDate(1)}}月{{item.startTime|formatDate(2)}}日 周{{item.startTime|formatWeek}}</span> | ||||
|           <span>{{ item.startTime|format }}</span> | ||||
|           <span>{{ item.startTime|formatDate(0) }}年{{ item.startTime|formatDate(1) }}月{{ item.startTime|formatDate(2) }}日 周{{ item.startTime|formatWeek }}</span> | ||||
|         </div> | ||||
|         <div class="arrow"></div> | ||||
|         <div class="time"> | ||||
|           <span>{{item.endTime|format}}</span> | ||||
|           <span>{{item.endTime|formatDate(0)}}年{{item.endTime|formatDate(1)}}月{{item.endTime|formatDate(2)}}日 周{{item.endTime|formatWeek}}</span> | ||||
|           <span>{{ item.endTime|format }}</span> | ||||
|           <span>{{ item.endTime|formatDate(0) }}年{{ item.endTime|formatDate(1) }}月{{ item.endTime|formatDate(2) }}日 周{{ item.endTime|formatWeek }}</span> | ||||
|         </div> | ||||
|       </u-row> | ||||
|       <u-row class="info"> | ||||
|         <span>发起人员:</span> | ||||
|         <span>{{item.userName}}</span> | ||||
|         <span>{{ item.userName }}</span> | ||||
|       </u-row> | ||||
|       <u-gap height="20"></u-gap> | ||||
|       <u-row class="info"> | ||||
|         <span>会议地点:</span> | ||||
|         <span>{{item.address}}</span> | ||||
|         <span>{{ item.address }}</span> | ||||
|       </u-row> | ||||
|       <div class="tag" v-if="item.status!=0" :style="{background:'url(' + $cdn + tag(item.status) +')'}"></div> | ||||
|     </div> | ||||
| @@ -36,10 +36,10 @@ | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
|   import AiBack from "../../../components/AiBack"; | ||||
|   import AiEmpty from "../../../components/AiEmpty"; | ||||
| import AiBack from "../../../components/AiBack"; | ||||
| import AiEmpty from "../../../components/AiEmpty"; | ||||
|  | ||||
|   export default { | ||||
| export default { | ||||
|   name: "meetingList", | ||||
|   components: {AiBack, AiEmpty}, | ||||
|   data() { | ||||
| @@ -107,7 +107,7 @@ | ||||
|     } | ||||
|   }, | ||||
|  | ||||
|     onShow(){ | ||||
|   onShow() { | ||||
|     this.getData() | ||||
|   }, | ||||
|  | ||||
| @@ -115,11 +115,11 @@ | ||||
|     this.current = this.current + 1; | ||||
|     this.getData() | ||||
|   }, | ||||
|   } | ||||
| } | ||||
| </script> | ||||
|  | ||||
| <style lang="scss" scoped> | ||||
|   .meeting-list { | ||||
| .meeting-list { | ||||
|   min-height: 100%; | ||||
|   background-color: #F5F5F5; | ||||
|   box-sizing: border-box; | ||||
| @@ -199,6 +199,7 @@ | ||||
|  | ||||
|     .info { | ||||
|       flex-wrap: nowrap; | ||||
|  | ||||
|       & > span:first-child { | ||||
|         flex-shrink: 0; | ||||
|         font-size: 30px; | ||||
| @@ -221,5 +222,5 @@ | ||||
|       right: 0; | ||||
|     } | ||||
|   } | ||||
|   } | ||||
| } | ||||
| </style> | ||||
|   | ||||
| @@ -2,9 +2,10 @@ | ||||
|   <div class="meeting"> | ||||
|     <ai-top-fixed> | ||||
|       <u-grid :col="3" :border="false"> | ||||
|         <u-grid-item v-for="(item,index) in grid" :key="index" :custom-style="{padding:'14px 0'}" @click="handleClick(index)"> | ||||
|         <u-grid-item v-for="(item,index) in grid" :key="index" :custom-style="{padding:'14px 0'}" | ||||
|                      @click="handleClick(index)"> | ||||
|           <u-icon :name="item.icon" :size="64"></u-icon> | ||||
|           <view class="label">{{item.label}}</view> | ||||
|           <view class="label">{{ item.label }}</view> | ||||
|         </u-grid-item> | ||||
|       </u-grid> | ||||
|     </ai-top-fixed> | ||||
| @@ -12,26 +13,26 @@ | ||||
|       <header>待参加的会议</header> | ||||
|       <template v-if="meetingList.length"> | ||||
|         <div class="card" v-for="(item,index) in meetingList" :key="index" @click="detail(item)"> | ||||
|           <header>{{item.title}}</header> | ||||
|           <header>{{ item.title }}</header> | ||||
|           <u-row justify="between"> | ||||
|             <div class="time"> | ||||
|               <span>{{item.startTime|format}}</span> | ||||
|               <span>{{item.startTime|formatDate(0)}}年{{item.startTime|formatDate(1)}}月{{item.startTime|formatDate(2)}}日 周{{item.startTime|formatWeek}}</span> | ||||
|               <span>{{ item.startTime|format }}</span> | ||||
|               <span>{{ item.startTime|formatDate(0) }}年{{ item.startTime|formatDate(1) }}月{{ item.startTime|formatDate(2) }}日 周{{ item.startTime|formatWeek }}</span> | ||||
|             </div> | ||||
|             <div class="arrow"></div> | ||||
|             <div class="time"> | ||||
|               <span>{{item.endTime|format}}</span> | ||||
|               <span>{{item.endTime|formatDate(0)}}年{{item.endTime|formatDate(1)}}月{{item.endTime|formatDate(2)}}日 周{{item.endTime|formatWeek}}</span> | ||||
|               <span>{{ item.endTime|format }}</span> | ||||
|               <span>{{ item.endTime|formatDate(0) }}年{{ item.endTime|formatDate(1) }}月{{ item.endTime|formatDate(2) }}日 周{{ item.endTime|formatWeek }}</span> | ||||
|             </div> | ||||
|           </u-row> | ||||
|           <u-row class="info"> | ||||
|             <span>发起人员:</span> | ||||
|             <span>{{item.userName}}</span> | ||||
|             <span>{{ item.userName }}</span> | ||||
|           </u-row> | ||||
|           <u-gap height="20"></u-gap> | ||||
|           <u-row class="info"> | ||||
|             <span>会议地点:</span> | ||||
|             <span>{{item.address}}</span> | ||||
|             <span>{{ item.address }}</span> | ||||
|           </u-row> | ||||
|           <div class="tag" :style="{background:'url(' + $cdn + tag(item.joinStatus) + ')'}"></div> | ||||
|         </div> | ||||
| @@ -46,16 +47,16 @@ | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
|   import AiEmpty from "../../components/AiEmpty"; | ||||
|   import AiTopFixed from "../../components/AiTopFixed"; | ||||
|   import AiAdd from "../../components/AiAdd"; | ||||
| import AiEmpty from "../../components/AiEmpty"; | ||||
| import AiTopFixed from "../../components/AiTopFixed"; | ||||
| import AiAdd from "../../components/AiAdd"; | ||||
|  | ||||
|   export default { | ||||
| export default { | ||||
|   name: "meetingNotice", | ||||
|   components: {AiEmpty, AiTopFixed, AiAdd}, | ||||
|   data() { | ||||
|     return { | ||||
|         meetingList:[] | ||||
|       meetingList: [] | ||||
|     } | ||||
|   }, | ||||
|   computed: { | ||||
| @@ -77,16 +78,16 @@ | ||||
|     } | ||||
|   }, | ||||
|   methods: { | ||||
|       tag(status){ | ||||
|     tag(status) { | ||||
|       return { | ||||
|           "0":"common/1wqr.png", | ||||
|           "1":"common/1yqr.png", | ||||
|           "2":"common/1yqj.png", | ||||
|         "0": "common/1wqr.png", | ||||
|         "1": "common/1yqr.png", | ||||
|         "2": "common/1yqj.png", | ||||
|       }[status] | ||||
|     }, | ||||
|       detail({id}){ | ||||
|     detail({id}) { | ||||
|       uni.navigateTo({ | ||||
|           url:"/pages/meetingNotice/components/detail?id=" + id | ||||
|         url: "/pages/meetingNotice/components/detail?id=" + id | ||||
|       }) | ||||
|     }, | ||||
|     getData() { | ||||
| @@ -96,48 +97,48 @@ | ||||
|           meetingStatus: "1|2", | ||||
|           size: 999 | ||||
|         } | ||||
|         }).then(res=>{ | ||||
|           if(res && res.data){ | ||||
|       }).then(res => { | ||||
|         if (res && res.data) { | ||||
|           this.meetingList = res.data.records | ||||
|         } | ||||
|       }) | ||||
|     }, | ||||
|       handleClick(index){ | ||||
|     handleClick(index) { | ||||
|       let url | ||||
|         if(index==0 || index==2){ | ||||
|           url="/pages/meetingNotice/components/meetingList?index=" + index | ||||
|         }else if(index==1){ | ||||
|           url="/pages/meetingNotice/components/belongToMe" | ||||
|       if (index == 0 || index == 2) { | ||||
|         url = "/pages/meetingNotice/components/meetingList?index=" + index | ||||
|       } else if (index == 1) { | ||||
|         url = "/pages/meetingNotice/components/belongToMe" | ||||
|       } | ||||
|       uni.navigateTo({url}) | ||||
|     }, | ||||
|     add() { | ||||
|       uni.navigateTo({ | ||||
|           url:"/pages/meetingNotice/components/addMeeting" | ||||
|         url: "/pages/meetingNotice/components/addMeeting" | ||||
|       }) | ||||
|     } | ||||
|   }, | ||||
|  | ||||
|     filters:{ | ||||
|       format(date){ | ||||
|         return date.split(" ")[1].substr(0,5) | ||||
|   filters: { | ||||
|     format(date) { | ||||
|       return date.split(" ")[1].substr(0, 5) | ||||
|     }, | ||||
|       formatDate(date,index){ | ||||
|     formatDate(date, index) { | ||||
|       return date.split(" ")[0].split("-")[index] | ||||
|     }, | ||||
|       formatWeek(date){ | ||||
|     formatWeek(date) { | ||||
|       return "日一二三四五六".charAt((new Date(date.split(" ")[0]).getDay())) | ||||
|     } | ||||
|   }, | ||||
|  | ||||
|     onShow(){ | ||||
|   onShow() { | ||||
|     this.getData() | ||||
|   } | ||||
|   } | ||||
| } | ||||
| </script> | ||||
|  | ||||
| <style lang="scss" scoped> | ||||
|   .meeting { | ||||
| .meeting { | ||||
|   min-height: 100%; | ||||
|   background: #F5F5F5; | ||||
|   padding-bottom: 48px; | ||||
| @@ -211,6 +212,7 @@ | ||||
|           position: absolute; | ||||
|           transform: scaleY(1.3) translate(30%, -40px) rotate(45deg); | ||||
|         } | ||||
|  | ||||
|         &:before { | ||||
|           top: 59px; | ||||
|           background-color: #CCCCCC; | ||||
| @@ -235,7 +237,7 @@ | ||||
|         } | ||||
|       } | ||||
|  | ||||
|         .tag{ | ||||
|       .tag { | ||||
|         width: 112px; | ||||
|         height: 112px; | ||||
|         background-repeat: no-repeat !important; | ||||
| @@ -247,8 +249,8 @@ | ||||
|     } | ||||
|   } | ||||
|  | ||||
|     ::v-deep .content{ | ||||
|   ::v-deep .content { | ||||
|     padding: 0 !important; | ||||
|   } | ||||
|   } | ||||
| } | ||||
| </style> | ||||
|   | ||||
| @@ -12,7 +12,8 @@ | ||||
|       </div> | ||||
|  | ||||
|       <div class="card"> | ||||
|         <AiUploader :multiple="true" type="image" :limit="9" placeholder="上传图片" @list="fileList" :def="form.files"></AiUploader> | ||||
|         <AiUploader :multiple="true" type="image" :limit="9" placeholder="上传图片" @list="fileList" | ||||
|                     :def="form.files"></AiUploader> | ||||
|       </div> | ||||
|  | ||||
|       <div class="card item-wrap" @click="select"> | ||||
| @@ -23,7 +24,7 @@ | ||||
|               <span>请选择</span> | ||||
|             </template> | ||||
|             <template v-else> | ||||
|               已选择<em>{{form.persons.map(e=>e.name).slice(0,2).join("、")}}</em>等<em>{{form.persons.length}}</em>人 | ||||
|               已选择<em>{{ form.persons.map(e => e.name).slice(0, 2).join("、") }}</em>等<em>{{ form.persons.length }}</em>人 | ||||
|             </template> | ||||
|             <div class="right-arrow"></div> | ||||
|           </div> | ||||
| @@ -48,7 +49,7 @@ | ||||
|               <span>请选择</span> | ||||
|             </template> | ||||
|             <template v-else> | ||||
|               <span>{{form.releaseTime}}</span> | ||||
|               <span>{{ form.releaseTime }}</span> | ||||
|             </template> | ||||
|             <div class="right-arrow"></div> | ||||
|           </div> | ||||
| @@ -62,18 +63,19 @@ | ||||
|     </div> | ||||
|     <AiBack ref="aiBack" v-if="!userSelect"/> | ||||
|     <u-picker v-model="show" mode="time" :params="params" @confirm="confirm"></u-picker> | ||||
|     <AiSelectEnterprise :visible.sync="userSelect" :value="form.persons" v-if="userSelect" @change="change"></AiSelectEnterprise> | ||||
|     <AiSelectEnterprise :visible.sync="userSelect" :value="form.persons" v-if="userSelect" | ||||
|                         @change="change"></AiSelectEnterprise> | ||||
|   </div> | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
|   import AiBack from "../../../components/AiBack"; | ||||
|   import AiSelectEnterprise from "../../../components/AiSelectEnterprise"; | ||||
|   import AiUploader from "../../../components/AiUploader"; | ||||
| import AiBack from "../../../components/AiBack"; | ||||
| import AiSelectEnterprise from "../../../components/AiSelectEnterprise"; | ||||
| import AiUploader from "../../../components/AiUploader"; | ||||
|  | ||||
|   export default { | ||||
| export default { | ||||
|   name: "add", | ||||
|     components: {AiBack,AiSelectEnterprise,AiUploader}, | ||||
|   components: {AiBack, AiSelectEnterprise, AiUploader}, | ||||
|   data() { | ||||
|     return { | ||||
|       show: false, | ||||
| @@ -84,7 +86,7 @@ | ||||
|         title: "", | ||||
|         content: "", | ||||
|         persons: [], | ||||
|           releaseTime:null, | ||||
|         releaseTime: null, | ||||
|         files: [], | ||||
|       }, | ||||
|       userSelect: false, | ||||
| @@ -101,35 +103,35 @@ | ||||
|     } | ||||
|   }, | ||||
|   onLoad(opt) { | ||||
|       if(opt.id) { | ||||
|     if (opt.id) { | ||||
|       this.form.id = opt.id; | ||||
|       this.flag = opt.flag; | ||||
|       this.getDetail(); | ||||
|     } | ||||
|   }, | ||||
|   methods: { | ||||
|       confirm(e){ | ||||
|         if(e.timestamp< (Date.now()/1000)|0){ | ||||
|     confirm(e) { | ||||
|       if (e.timestamp < (Date.now() / 1000) | 0) { | ||||
|         return this.$u.toast("发送时间不能小于当前时间"); | ||||
|       } | ||||
|       this.form.releaseTime = `${e.year}-${e.month}-${e.day} ${e.hour}:${e.minute}:${e.second}`; | ||||
|     }, | ||||
|       fileList(e){ | ||||
|     fileList(e) { | ||||
|       this.form.files = e | ||||
|     }, | ||||
|       change(e){ | ||||
|     change(e) { | ||||
|       this.form.persons = e | ||||
|     }, | ||||
|       getDetail(){ | ||||
|         this.$http.post("/app/appannouncement/detail",null,{ | ||||
|           params:{ | ||||
|             id:this.form.id, | ||||
|     getDetail() { | ||||
|       this.$http.post("/app/appannouncement/detail", null, { | ||||
|         params: { | ||||
|           id: this.form.id, | ||||
|           detail: this.flag | ||||
|         } | ||||
|         }).then(res=>{ | ||||
|       }).then(res => { | ||||
|         if (res && res.data) { | ||||
|           this.form.releaseTime = res.data.releaseTime; | ||||
|             Object.keys(this.form).map(e=>{ | ||||
|           Object.keys(this.form).map(e => { | ||||
|             this.form[e] = res.data[e]; | ||||
|           }) | ||||
|           this.index = res.data.releaseTime ? 1 : 0; | ||||
| @@ -138,16 +140,16 @@ | ||||
|     }, | ||||
|  | ||||
|     add(status) { | ||||
|         if(status==1){ | ||||
|       if (status == 1) { | ||||
|         if (!this.form.title) return this.$u.toast("请输入会议标题") | ||||
|  | ||||
|         if (!this.form.content) return this.$u.toast("请输入会议内容") | ||||
|  | ||||
|           if(!this.form.persons.length) return this.$u.toast("请选择发送对象") | ||||
|         if (!this.form.persons.length) return this.$u.toast("请选择发送对象") | ||||
|  | ||||
|           if(this.index==1 && !this.form.releaseTime) return this.$u.toast("请选择定时发送时间") | ||||
|         if (this.index == 1 && !this.form.releaseTime) return this.$u.toast("请选择定时发送时间") | ||||
|  | ||||
|           if(this.form.releaseTime && new Date(this.form.releaseTime).getTime() < Date.now()) return this.$u.toast("发送时间不能小于当前时间"); | ||||
|         if (this.form.releaseTime && new Date(this.form.releaseTime).getTime() < Date.now()) return this.$u.toast("发送时间不能小于当前时间"); | ||||
|       } | ||||
|  | ||||
|       this.$http.post("/app/appannouncement/addOrUpdate", { | ||||
| @@ -166,16 +168,16 @@ | ||||
|       }) | ||||
|     } | ||||
|   }, | ||||
|     computed:{ | ||||
|       background(){ | ||||
|   computed: { | ||||
|     background() { | ||||
|       return `url(${this.$cdn}/notice/jiaobiao.png) no-repeat; background-size: 46px 48px;position: absolute;bottom: 0;right: 0;` | ||||
|     }, | ||||
|   } | ||||
|   } | ||||
| } | ||||
| </script> | ||||
|  | ||||
| <style lang="scss" scoped> | ||||
|   .add-meeting { | ||||
| .add-meeting { | ||||
|   min-height: 100%; | ||||
|   background: #F5F5F5; | ||||
|   padding-bottom: 140px; | ||||
| @@ -261,7 +263,7 @@ | ||||
|         } | ||||
|       } | ||||
|  | ||||
|         .type{ | ||||
|       .type { | ||||
|         width: 320px; | ||||
|         height: 112px; | ||||
|         background: #F5F5F5; | ||||
| @@ -275,7 +277,7 @@ | ||||
|         letter-spacing: 1px; | ||||
|         position: relative; | ||||
|  | ||||
|           & > img{ | ||||
|         & > img { | ||||
|           width: 46px; | ||||
|           height: 48px; | ||||
|           position: absolute; | ||||
| @@ -283,7 +285,8 @@ | ||||
|           bottom: 0; | ||||
|         } | ||||
|       } | ||||
|         .active{ | ||||
|  | ||||
|       .active { | ||||
|         background-color: #E7F1FE; | ||||
|         color: #1174FE; | ||||
|       } | ||||
| @@ -354,5 +357,5 @@ | ||||
|       background-color: #1365DD; | ||||
|     } | ||||
|   } | ||||
|   } | ||||
| } | ||||
| </style> | ||||
|   | ||||
| @@ -2,21 +2,21 @@ | ||||
|   <div class="detail"> | ||||
|     <template v-if="detailObj"> | ||||
|       <div class="card"> | ||||
|         <header>{{detailObj.title}}</header> | ||||
|         <header>{{ detailObj.title }}</header> | ||||
|         <u-gap height="16"></u-gap> | ||||
|         <u-row> | ||||
|           <span>发布人:</span> | ||||
|           <span>{{detailObj.releaseUserName}}</span> | ||||
|           <span>{{ detailObj.releaseUserName }}</span> | ||||
|         </u-row> | ||||
|         <u-gap height="8"></u-gap> | ||||
|         <u-row> | ||||
|           <span>发布部门:</span> | ||||
|           <span>{{detailObj.unitName}}</span> | ||||
|           <span>{{ detailObj.unitName }}</span> | ||||
|         </u-row> | ||||
|         <u-gap height="8"></u-gap> | ||||
|         <u-row> | ||||
|           <span>发布日期:</span> | ||||
|           <span>{{detailObj.releaseTime}}</span> | ||||
|           <span>{{ detailObj.releaseTime }}</span> | ||||
|         </u-row> | ||||
|         <u-gap height="8"></u-gap> | ||||
|       </div> | ||||
| @@ -32,9 +32,9 @@ | ||||
|           <u-row justify="between"> | ||||
|             <label class="left"> | ||||
|               <img :src="$cdn + 'common/appendix.png'" alt=""> | ||||
|               <span>{{item.name}}.{{item.postfix}}</span> | ||||
|               <span>{{ item.name }}.{{ item.postfix }}</span> | ||||
|             </label> | ||||
|             <span>{{(item.size/1024).toFixed(2)}}KB</span> | ||||
|             <span>{{ (item.size / 1024).toFixed(2) }}KB</span> | ||||
|           </u-row> | ||||
|         </div> | ||||
|       </div> | ||||
| @@ -43,26 +43,26 @@ | ||||
|         <u-row justify="between" class="item"> | ||||
|           <span>接收对象</span> | ||||
|           <div class="right"> | ||||
|             <em>{{detailObj.readNum}}人</em>已读 | ||||
|             <em>{{detailObj.unReadNum}}人</em>未读 | ||||
|             <em>{{ detailObj.readNum }}人</em>已读 | ||||
|             <em>{{ detailObj.unReadNum }}人</em>未读 | ||||
|             <div class="arrow"></div> | ||||
|           </div> | ||||
|         </u-row> | ||||
|       </div> | ||||
|     </template> | ||||
|     <AiEmpty description="该通知已撤回" v-else/> | ||||
|     <AiBack /> | ||||
|     <AiBack/> | ||||
|   </div> | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
|   import AiBack from "../../../components/AiBack"; | ||||
|   import {mapActions} from "vuex"; | ||||
|   import AiEmpty from "../../../components/AiEmpty"; | ||||
| import AiBack from "../../../components/AiBack"; | ||||
| import {mapActions} from "vuex"; | ||||
| import AiEmpty from "../../../components/AiEmpty"; | ||||
|  | ||||
|   export default { | ||||
| export default { | ||||
|   name: "detail", | ||||
|     components:{AiBack,AiEmpty}, | ||||
|   components: {AiBack, AiEmpty}, | ||||
|   data() { | ||||
|     return { | ||||
|       detailObj: null, | ||||
| @@ -70,7 +70,7 @@ | ||||
|       flag: null, | ||||
|     } | ||||
|   }, | ||||
|     onLoad(opt){ | ||||
|   onLoad(opt) { | ||||
|     this.id = opt.id; | ||||
|     this.flag = opt.flag; | ||||
|     this.getDetail(); | ||||
| @@ -78,12 +78,12 @@ | ||||
|   methods: { | ||||
|     ...mapActions(['previewFile', 'injectJWeixin']), | ||||
|     preFile(e) { | ||||
|         if([".jpg",".png",".gif"].includes(e.postfix.toLowerCase())){ | ||||
|       if ([".jpg", ".png", ".gif"].includes(e.postfix.toLowerCase())) { | ||||
|         uni.previewImage({ | ||||
|           current: e.url, | ||||
|           urls: [e.url] | ||||
|         }) | ||||
|         }else { | ||||
|       } else { | ||||
|         this.previewFile({...e}) | ||||
|       } | ||||
|     }, | ||||
| @@ -93,23 +93,23 @@ | ||||
|           id: this.id, | ||||
|           detail: this.flag | ||||
|         } | ||||
|         }).then(res=>{ | ||||
|           if(res && res.data){ | ||||
|       }).then(res => { | ||||
|         if (res && res.data) { | ||||
|           this.detailObj = res.data; | ||||
|         } | ||||
|       }) | ||||
|     }, | ||||
|     handleClick() { | ||||
|       uni.navigateTo({ | ||||
|           url:"/pages/notification/components/read?id=" + this.id, | ||||
|         url: "/pages/notification/components/read?id=" + this.id, | ||||
|       }) | ||||
|     } | ||||
|   }, | ||||
|   } | ||||
| } | ||||
| </script> | ||||
|  | ||||
| <style lang="scss" scoped> | ||||
|   .detail { | ||||
| .detail { | ||||
|   min-height: 100%; | ||||
|   background-color: #F5F5F5; | ||||
|   padding-bottom: 140px; | ||||
| @@ -341,5 +341,5 @@ | ||||
|     font-size: 36px; | ||||
|     color: #FFFFFF; | ||||
|   } | ||||
|   } | ||||
| } | ||||
| </style> | ||||
|   | ||||
| @@ -6,7 +6,7 @@ | ||||
|     <div class="body"> | ||||
|       <div class="item" v-for="(item,index) in (current==0 ? list.read : list.unRead)" :key="index"> | ||||
|         <u-avatar :src="item.avatar" mode="square" size="76"></u-avatar> | ||||
|         <span class="name">{{item.name}}</span> | ||||
|         <span class="name">{{ item.name }}</span> | ||||
|       </div> | ||||
|     </div> | ||||
|     <AiBack/> | ||||
| @@ -14,10 +14,10 @@ | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
|   import AiBack from "../../../components/AiBack"; | ||||
|   import AiTopFixed from "../../../components/AiTopFixed"; | ||||
| import AiBack from "../../../components/AiBack"; | ||||
| import AiTopFixed from "../../../components/AiTopFixed"; | ||||
|  | ||||
|   export default { | ||||
| export default { | ||||
|   name: "read", | ||||
|   components: {AiBack, AiTopFixed}, | ||||
|   data() { | ||||
| @@ -33,9 +33,9 @@ | ||||
|   }, | ||||
|   methods: { | ||||
|     getList() { | ||||
|         this.$http.post("/app/appannouncementreader/list-unread",null,{ | ||||
|           params:{ | ||||
|             id:this.id | ||||
|       this.$http.post("/app/appannouncementreader/list-unread", null, { | ||||
|         params: { | ||||
|           id: this.id | ||||
|         } | ||||
|       }).then(res => { | ||||
|         if (res && res.data) { | ||||
| @@ -56,15 +56,15 @@ | ||||
|       ]; | ||||
|     } | ||||
|   }, | ||||
|   } | ||||
| } | ||||
| </script> | ||||
|  | ||||
| <style lang="scss" scoped> | ||||
|   .read { | ||||
| .read { | ||||
|   min-height: 100%; | ||||
|   background-color: #F5F5F5; | ||||
|  | ||||
|     ::v-deep .content{ | ||||
|   ::v-deep .content { | ||||
|     padding: 0 !important; | ||||
|   } | ||||
|  | ||||
| @@ -80,7 +80,7 @@ | ||||
|       background-color: #ffffff; | ||||
|       border-bottom: 1px solid #eeeeee; | ||||
|  | ||||
|         & > .name{ | ||||
|       & > .name { | ||||
|         font-size: 36px; | ||||
|         font-weight: 600; | ||||
|         color: #333333; | ||||
| @@ -89,5 +89,5 @@ | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|   } | ||||
| } | ||||
| </style> | ||||
|   | ||||
| @@ -8,13 +8,15 @@ | ||||
|         <template v-if="!item.imgUrl"> | ||||
|           <label> | ||||
|             <b v-if="index==0 && item.readStatus==0"></b> | ||||
|             <div class="tag" v-if="index==1" :style="color(item.status)">{{$dict.getLabel("announcementStatus",item.status)}}</div> | ||||
|             {{item.title}} | ||||
|             <div class="tag" v-if="index==1" :style="color(item.status)"> | ||||
|               {{ $dict.getLabel("announcementStatus", item.status) }} | ||||
|             </div> | ||||
|             {{ item.title }} | ||||
|           </label> | ||||
|           <u-gap height="16"></u-gap> | ||||
|           <span class="info"> | ||||
|             <text>{{item.releaseUserName}}</text> | ||||
|             <text>{{item.releaseTime}}</text> | ||||
|             <text>{{ item.releaseUserName }}</text> | ||||
|             <text>{{ item.releaseTime }}</text> | ||||
|           </span> | ||||
|         </template> | ||||
|         <template v-else> | ||||
| @@ -22,13 +24,15 @@ | ||||
|             <div class="left"> | ||||
|               <label> | ||||
|                 <b v-if="index==0 && item.readStatus==0"></b> | ||||
|                 <div class="tag" v-if="index==1" :style="color(item.status)">{{$dict.getLabel("announcementStatus",item.status)}}</div> | ||||
|                 {{item.title}} | ||||
|                 <div class="tag" v-if="index==1" :style="color(item.status)"> | ||||
|                   {{ $dict.getLabel("announcementStatus", item.status) }} | ||||
|                 </div> | ||||
|                 {{ item.title }} | ||||
|               </label> | ||||
|               <u-gap height="16"></u-gap> | ||||
|               <span class="info"> | ||||
|                 <text>{{item.releaseUserName}}</text> | ||||
|                 <text>{{item.releaseTime}}</text> | ||||
|                 <text>{{ item.releaseUserName }}</text> | ||||
|                 <text>{{ item.releaseTime }}</text> | ||||
|               </span> | ||||
|             </div> | ||||
|             <img :src="item.imgUrl" alt=""> | ||||
| @@ -46,7 +50,7 @@ | ||||
|           <div class="colum" v-for="(item,index) in optList" :key="index" @click="handleOpt(item)"> | ||||
|             <u-icon :name="item.icon" size="100" :custom-style="{backgroundColor:'#fff',borderRadius:'16px'}"></u-icon> | ||||
|             <u-gap height="16"></u-gap> | ||||
|             {{item.name}} | ||||
|             {{ item.name }} | ||||
|           </div> | ||||
|         </u-row> | ||||
|         <div class="btn" @click="show=false">关闭</div> | ||||
| @@ -59,13 +63,13 @@ | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
|   import AiAdd from "../../components/AiAdd"; | ||||
|   import AiEmpty from "../../components/AiEmpty"; | ||||
|   import AiTopFixed from "../../components/AiTopFixed"; | ||||
| import AiAdd from "../../components/AiAdd"; | ||||
| import AiEmpty from "../../components/AiEmpty"; | ||||
| import AiTopFixed from "../../components/AiTopFixed"; | ||||
|  | ||||
|   export default { | ||||
| export default { | ||||
|   name: "notification", | ||||
|     components: {AiAdd, AiEmpty,AiTopFixed}, | ||||
|   components: {AiAdd, AiEmpty, AiTopFixed}, | ||||
|   data() { | ||||
|     return { | ||||
|       index: 0, | ||||
| @@ -79,15 +83,15 @@ | ||||
|     } | ||||
|   }, | ||||
|  | ||||
|     onLoad(){ | ||||
|   onLoad() { | ||||
|     this.$dict.load("announcementStatus"); | ||||
|   }, | ||||
|  | ||||
|   computed: { | ||||
|     tabs() { | ||||
|         return [{name: "最新公告"},{name: "公告管理"}]; | ||||
|       return [{name: "最新公告"}, {name: "公告管理"}]; | ||||
|     }, | ||||
|       optList(){ | ||||
|     optList() { | ||||
|       return [ | ||||
|         { | ||||
|           name: "详情", | ||||
| @@ -118,28 +122,28 @@ | ||||
|           val: 4, | ||||
|           show: true, | ||||
|         } | ||||
|         ].filter(e=>e.show) | ||||
|       ].filter(e => e.show) | ||||
|     } | ||||
|   }, | ||||
|  | ||||
|   methods: { | ||||
|       changeState(){ | ||||
|         this.$http.post(this.content =='删除' ? '/app/appannouncement/delete' : "/app/appannouncement/update-status",null,{ | ||||
|     changeState() { | ||||
|       this.$http.post(this.content == '删除' ? '/app/appannouncement/delete' : "/app/appannouncement/update-status", null, { | ||||
|         params: { | ||||
|             [this.content =='删除' ? 'ids' : 'id']:this.detail.id | ||||
|           [this.content == '删除' ? 'ids' : 'id']: this.detail.id | ||||
|         } | ||||
|         }).then(res=>{ | ||||
|           if(res.code==0){ | ||||
|       }).then(res => { | ||||
|         if (res.code == 0) { | ||||
|           this.$u.toast(this.content + "成功"); | ||||
|           this.getList(); | ||||
|         } | ||||
|       }) | ||||
|     }, | ||||
|       confirm(){ | ||||
|     confirm() { | ||||
|       this.show = false; | ||||
|       this.changeState(); | ||||
|     }, | ||||
|       handleOpt(item){ | ||||
|     handleOpt(item) { | ||||
|       this.content = { | ||||
|         1: "撤回", | ||||
|         2: "发布", | ||||
| @@ -153,36 +157,36 @@ | ||||
|         }); | ||||
|       } | ||||
|  | ||||
|         if ([1,2,4].includes(item.val)) { | ||||
|       if ([1, 2, 4].includes(item.val)) { | ||||
|         return this.modal = true; | ||||
|       } | ||||
|  | ||||
|         if(item.val==3){ | ||||
|       if (item.val == 3) { | ||||
|         this.show = false; | ||||
|         return uni.navigateTo({ | ||||
|             url:"/pages/notification/components/add?id=" + this.detail.id + "&flag=" + false | ||||
|           url: "/pages/notification/components/add?id=" + this.detail.id + "&flag=" + false | ||||
|         }); | ||||
|       } | ||||
|     }, | ||||
|       color(status){ | ||||
|     color(status) { | ||||
|       return [ | ||||
|           {backgroundColor:"rgba(255,136,34,0.1)",color:"#FF8822"}, | ||||
|           {backgroundColor:"rgba(34,102,255,0.1)",color:"#2266FF"}, | ||||
|           {backgroundColor:"rgba(102,102,102,0.1)",color:"#666666"}, | ||||
|           {backgroundColor:"rgba(255,136,34,0.1)",color:"#FF8822"} | ||||
|         {backgroundColor: "rgba(255,136,34,0.1)", color: "#FF8822"}, | ||||
|         {backgroundColor: "rgba(34,102,255,0.1)", color: "#2266FF"}, | ||||
|         {backgroundColor: "rgba(102,102,102,0.1)", color: "#666666"}, | ||||
|         {backgroundColor: "rgba(255,136,34,0.1)", color: "#FF8822"} | ||||
|       ][status]; | ||||
|     }, | ||||
|     handeClick(item) { | ||||
|       this.detail = item; | ||||
|       if (this.index == 1) { | ||||
|         this.show = true; | ||||
|         }else { | ||||
|       } else { | ||||
|         uni.navigateTo({ | ||||
|           url: "/pages/notification/components/detail?id=" + this.detail.id + "&flag=" + true | ||||
|         }) | ||||
|       } | ||||
|     }, | ||||
|       add(){ | ||||
|     add() { | ||||
|       uni.navigateTo({ | ||||
|         url: "/pages/notification/components/add" | ||||
|       }) | ||||
| @@ -193,7 +197,7 @@ | ||||
|       this.getList() | ||||
|     }, | ||||
|     getList() { | ||||
|         this.$http.post(this.index ==0 ? "/app/appannouncement/list-latest" : "/app/appannouncement/list-mgr", null, { | ||||
|       this.$http.post(this.index == 0 ? "/app/appannouncement/list-latest" : "/app/appannouncement/list-mgr", null, { | ||||
|         params: { | ||||
|           size: 10, | ||||
|           current: this.current | ||||
| @@ -218,16 +222,16 @@ | ||||
|     this.current = this.current + 1; | ||||
|     this.getList() | ||||
|   }, | ||||
|   } | ||||
| } | ||||
| </script> | ||||
|  | ||||
| <style lang="scss" scoped> | ||||
|   .notification { | ||||
| .notification { | ||||
|   min-height: 100%; | ||||
|   background-color: #F5F5F5; | ||||
|   padding-bottom: 32px; | ||||
|  | ||||
|     ::v-deep .content{ | ||||
|   ::v-deep .content { | ||||
|     padding: 0 !important; | ||||
|   } | ||||
|  | ||||
| @@ -246,7 +250,7 @@ | ||||
|       background-color: #ffffff; | ||||
|       margin-bottom: 32px; | ||||
|  | ||||
|         &:last-child{ | ||||
|       &:last-child { | ||||
|         margin-bottom: 0; | ||||
|       } | ||||
|  | ||||
| @@ -271,7 +275,7 @@ | ||||
|         margin-right: 8px; | ||||
|       } | ||||
|  | ||||
|         .tag{ | ||||
|       .tag { | ||||
|         width: 96px; | ||||
|         height: 44px; | ||||
|         display: inline-block; | ||||
| @@ -310,7 +314,8 @@ | ||||
|             -webkit-line-clamp: 2; | ||||
|           } | ||||
|         } | ||||
|           & > img{ | ||||
|  | ||||
|         & > img { | ||||
|           width: 192px; | ||||
|           height: 144px; | ||||
|           flex-shrink: 0; | ||||
| @@ -324,7 +329,7 @@ | ||||
|     height: 368px; | ||||
|     background-color: #F7F7F7; | ||||
|  | ||||
|       .btn{ | ||||
|     .btn { | ||||
|       height: 96px; | ||||
|       display: flex; | ||||
|       align-items: center; | ||||
| @@ -350,5 +355,5 @@ | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|   } | ||||
| } | ||||
| </style> | ||||
|   | ||||
| @@ -3,11 +3,11 @@ | ||||
|     <div class="info"> | ||||
|       <div class="info-top"> | ||||
|         <div class="left"> | ||||
|           <image src="/static/images/avatar.png" /> | ||||
|           <image src="/static/images/avatar.png"/> | ||||
|           <h2>{{ info.name || info.phone }}</h2> | ||||
|         </div> | ||||
|         <div class="right"> | ||||
|           <image src="/static/images/phone.png" /> | ||||
|           <image src="/static/images/phone.png"/> | ||||
|           <p>拨打电话</p> | ||||
|         </div> | ||||
|       </div> | ||||
| @@ -55,7 +55,7 @@ | ||||
|         <div class="info-item"> | ||||
|           <label>图片:</label> | ||||
|           <div class="imgs"> | ||||
|             <image v-for="(item, index) in 6" :key="index" src="/static/images/avatar.png" /> | ||||
|             <image v-for="(item, index) in 6" :key="index" src="/static/images/avatar.png"/> | ||||
|           </div> | ||||
|         </div> | ||||
|       </div> | ||||
| @@ -68,10 +68,10 @@ | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
|   export default { | ||||
| export default { | ||||
|   name: 'detail', | ||||
|  | ||||
|     data () { | ||||
|   data() { | ||||
|     return { | ||||
|       info: {}, | ||||
|       id: '', | ||||
| @@ -79,7 +79,7 @@ | ||||
|     } | ||||
|   }, | ||||
|  | ||||
|     onLoad (query) { | ||||
|   onLoad(query) { | ||||
|     uni.showLoading() | ||||
|     this.id = query.id | ||||
|  | ||||
| @@ -87,13 +87,13 @@ | ||||
|   }, | ||||
|  | ||||
|   methods: { | ||||
|       linkTo () { | ||||
|     linkTo() { | ||||
|       uni.navigateTo({ | ||||
|         url: '/pages/povertyMonitor/Form' | ||||
|       }) | ||||
|     }, | ||||
|  | ||||
|       getInfo (id) { | ||||
|     getInfo(id) { | ||||
|       this.$http.post(`/app/apppreventionreturntopoverty/queryDetailById?id=${id}`).then(res => { | ||||
|         if (res.code === 0) { | ||||
|           this.info = res.data | ||||
| @@ -105,12 +105,12 @@ | ||||
|       }) | ||||
|     } | ||||
|   } | ||||
|   } | ||||
| } | ||||
| </script> | ||||
|  | ||||
| <style lang="scss"> | ||||
|   .detail { | ||||
|     padding-bottom: 122rpx; | ||||
| .detail { | ||||
|   padding-bottom: 122 rpx; | ||||
|  | ||||
|   * { | ||||
|     box-sizing: border-box; | ||||
| @@ -172,6 +172,7 @@ | ||||
|  | ||||
|       .right { | ||||
|         text-align: center; | ||||
|  | ||||
|         image { | ||||
|           width: 64px; | ||||
|           height: 64px; | ||||
| @@ -223,7 +224,7 @@ | ||||
|         line-height: 1.3; | ||||
|         text-align: right; | ||||
|         color: #999999; | ||||
|           font-size: 30rpx; | ||||
|         font-size: 30 rpx; | ||||
|       } | ||||
|  | ||||
|       span { | ||||
| @@ -246,5 +247,5 @@ | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|   } | ||||
| } | ||||
| </style> | ||||
|   | ||||
| @@ -24,10 +24,10 @@ | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
|   import AiUploader from '@/components/AiUploader' | ||||
| import AiUploader from '@/components/AiUploader' | ||||
|  | ||||
|   export default { | ||||
|     data () { | ||||
| export default { | ||||
|   data() { | ||||
|     return { | ||||
|       result: '', | ||||
|  | ||||
| @@ -37,11 +37,11 @@ | ||||
|   components: { | ||||
|     AiUploader | ||||
|   } | ||||
|   } | ||||
| } | ||||
| </script> | ||||
|  | ||||
| <style lang="scss"> | ||||
|   .form { | ||||
| .form { | ||||
|   padding-bottom: 120px; | ||||
|  | ||||
|   div { | ||||
| @@ -108,5 +108,5 @@ | ||||
|     font-size: 32px; | ||||
|     background: #3192F4; | ||||
|   } | ||||
|   } | ||||
| } | ||||
| </style> | ||||
|   | ||||
| @@ -8,7 +8,9 @@ | ||||
|       <div class="item" v-for="(item, index) in list" :key="index" hover-class="bg-hover" @click="toDetail(item.id)"> | ||||
|         <div class="item-top"> | ||||
|           <h2>{{ item.name || item.phone }}</h2> | ||||
|           <span :style="{color: item.riskEliminationMethod ? '#2EA222' : '#FF4466'}">{{ item.riskEliminationMethod ? '已解除' : '未解除' }}</span> | ||||
|           <span :style="{color: item.riskEliminationMethod ? '#2EA222' : '#FF4466'}">{{ | ||||
|               item.riskEliminationMethod ? '已解除' : '未解除' | ||||
|             }}</span> | ||||
|         </div> | ||||
|         <p>{{ item.addressArea }} {{ item.address }}</p> | ||||
|         <div class="item-bottom">家庭收入</div> | ||||
| @@ -19,11 +21,12 @@ | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
|   import AiEmpty from '@/components/AiEmpty/AiEmpty' | ||||
|   export default { | ||||
| import AiEmpty from '@/components/AiEmpty/AiEmpty' | ||||
|  | ||||
| export default { | ||||
|   name: 'list', | ||||
|  | ||||
|     data () { | ||||
|   data() { | ||||
|     return { | ||||
|       list: [], | ||||
|       isMore: false, | ||||
| @@ -36,7 +39,7 @@ | ||||
|     AiEmpty | ||||
|   }, | ||||
|  | ||||
|     created () { | ||||
|   created() { | ||||
|     uni.showLoading() | ||||
|     this.$nextTick(() => { | ||||
|       this.getList() | ||||
| @@ -47,11 +50,11 @@ | ||||
|   }, | ||||
|  | ||||
|   methods: { | ||||
|       changeTab (index) { | ||||
|     changeTab(index) { | ||||
|       this.currIndex = index | ||||
|     }, | ||||
|  | ||||
|       toDetail (id) { | ||||
|     toDetail(id) { | ||||
|       uni.navigateTo({ | ||||
|         url: `/pages/Monitor/Detail?id=${id}&isFrom=1` | ||||
|       }) | ||||
| @@ -99,11 +102,11 @@ | ||||
|       }) | ||||
|     } | ||||
|   } | ||||
|   } | ||||
| } | ||||
| </script> | ||||
|  | ||||
| <style lang="scss"> | ||||
|   .list { | ||||
| .list { | ||||
|   padding: 30px 0 120px; | ||||
|  | ||||
|   .tab { | ||||
| @@ -127,8 +130,8 @@ | ||||
|     span { | ||||
|       position: relative; | ||||
|       flex: 1; | ||||
|         height: 96rpx; | ||||
|         line-height: 96rpx; | ||||
|       height: 96 rpx; | ||||
|       line-height: 96 rpx; | ||||
|       color: #000000; | ||||
|       text-align: center; | ||||
|       font-size: 32px; | ||||
| @@ -198,12 +201,12 @@ | ||||
|  | ||||
|       p { | ||||
|         line-height: 1.4; | ||||
|           margin-bottom: 32rpx; | ||||
|         margin-bottom: 32 rpx; | ||||
|         padding: 0 32px; | ||||
|         color: #999999; | ||||
|         font-size: 26px; | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|   } | ||||
| } | ||||
| </style> | ||||
|   | ||||
| @@ -33,12 +33,12 @@ | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
|   import echarts from 'echarts' | ||||
| import echarts from 'echarts' | ||||
|  | ||||
|   export default { | ||||
| export default { | ||||
|   name: 'statistics', | ||||
|  | ||||
|     data () { | ||||
|   data() { | ||||
|     return { | ||||
|       chart1: null, | ||||
|       chart2: null, | ||||
| @@ -48,8 +48,8 @@ | ||||
|     } | ||||
|   }, | ||||
|  | ||||
|     mounted () { | ||||
|       window.scrollTo(0,0) | ||||
|   mounted() { | ||||
|     window.scrollTo(0, 0) | ||||
|     // this.chart1 = echarts.init(document.getElementById('chart1')) | ||||
|     this.chart4 = echarts.init(document.getElementById('chart4')) | ||||
|     this.chart2 = echarts.init(document.getElementById('chart2')) | ||||
| @@ -59,7 +59,7 @@ | ||||
|   }, | ||||
|  | ||||
|   methods: { | ||||
|       getInfo () { | ||||
|     getInfo() { | ||||
|       this.$http.post(`/app/apppreventionreturntopoverty/statistics-h5`).then(res => { | ||||
|         if (res.code === 0) { | ||||
|           this.info = res.data | ||||
| @@ -70,7 +70,7 @@ | ||||
|       }) | ||||
|     }, | ||||
|  | ||||
|       initChart1 () { | ||||
|     initChart1() { | ||||
|       const option = { | ||||
|         tooltip: { | ||||
|           trigger: 'item', | ||||
| @@ -112,9 +112,9 @@ | ||||
|               } | ||||
|             }, | ||||
|             data: [ | ||||
|                 { value: 60, name: '总上报' }, | ||||
|                 { value: 40, name: '纳入监测' }, | ||||
|                 { value: 20, name: '已处理' } | ||||
|               {value: 60, name: '总上报'}, | ||||
|               {value: 40, name: '纳入监测'}, | ||||
|               {value: 20, name: '已处理'} | ||||
|             ] | ||||
|           } | ||||
|         ] | ||||
| @@ -123,7 +123,7 @@ | ||||
|       this.chart1.setOption(option) | ||||
|     }, | ||||
|  | ||||
|       initChart2 (data) { | ||||
|     initChart2(data) { | ||||
|       const values = data.map(item => { | ||||
|         return { | ||||
|           value: item.typeCount, | ||||
| @@ -162,7 +162,7 @@ | ||||
|       this.chart2.setOption(option) | ||||
|     }, | ||||
|  | ||||
|       initChart3 (data) { | ||||
|     initChart3(data) { | ||||
|       const values = data.map(item => { | ||||
|         return { | ||||
|           value: item.typeCount, | ||||
| @@ -201,7 +201,7 @@ | ||||
|       this.chart3.setOption(option) | ||||
|     }, | ||||
|  | ||||
|       initChart4 (x, y) { | ||||
|     initChart4(x, y) { | ||||
|       const option = { | ||||
|         tooltip: { | ||||
|           trigger: 'item' | ||||
| @@ -242,8 +242,8 @@ | ||||
|               } | ||||
|             }, | ||||
|             data: [ | ||||
|                 { value: y, name: '纳入监测' }, | ||||
|                 { value: x, name: '消除监测' } | ||||
|               {value: y, name: '纳入监测'}, | ||||
|               {value: x, name: '消除监测'} | ||||
|             ] | ||||
|           } | ||||
|         ] | ||||
| @@ -252,11 +252,11 @@ | ||||
|       this.chart4.setOption(option) | ||||
|     } | ||||
|   } | ||||
|   } | ||||
| } | ||||
| </script> | ||||
|  | ||||
| <style lang="scss"> | ||||
|   .statistics { | ||||
| .statistics { | ||||
|   padding: 40px 0 120px; | ||||
|  | ||||
|   .block { | ||||
| @@ -325,5 +325,5 @@ | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|   } | ||||
| } | ||||
| </style> | ||||
|   | ||||
| @@ -12,11 +12,11 @@ | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
|   import Statistics from './components/Statistics.vue' | ||||
|   import List from './components/List.vue' | ||||
| import Statistics from './components/Statistics.vue' | ||||
| import List from './components/List.vue' | ||||
|  | ||||
|   export default { | ||||
|     data () { | ||||
| export default { | ||||
|   data() { | ||||
|     return { | ||||
|       currIndex: 0 | ||||
|     } | ||||
| @@ -28,11 +28,11 @@ | ||||
|   }, | ||||
|  | ||||
|   computed: { | ||||
|       tabBar () { | ||||
|     tabBar() { | ||||
|       const link = icon => `${this.$cdn}askform/${icon}.png` | ||||
|       return [ | ||||
|           {text: "预警监控", iconPath: "bdlb1", selectedIconPath: "bdlb2" }, | ||||
|           {text: "数据统计", iconPath: "xjxm1", selectedIconPath: "xjxm2" } | ||||
|         {text: "预警监控", iconPath: "bdlb1", selectedIconPath: "bdlb2"}, | ||||
|         {text: "数据统计", iconPath: "xjxm1", selectedIconPath: "xjxm2"} | ||||
|       ].map(e => ({ | ||||
|         ...e, | ||||
|         iconPath: link(e.iconPath), | ||||
| @@ -41,7 +41,7 @@ | ||||
|     } | ||||
|   }, | ||||
|  | ||||
|     onLoad () { | ||||
|   onLoad() { | ||||
|     uni.$on('reload', () => { | ||||
|       if (this.currIndex === 0) { | ||||
|         this.$refs.list.reload() | ||||
| @@ -56,11 +56,11 @@ | ||||
|       this.$refs.list.getList() | ||||
|     } | ||||
|   } | ||||
|   } | ||||
| } | ||||
| </script> | ||||
|  | ||||
| <style lang="scss" scoped> | ||||
|   .povertyMonitor { | ||||
| .povertyMonitor { | ||||
|   .footer { | ||||
|     display: flex; | ||||
|     position: fixed; | ||||
| @@ -85,5 +85,5 @@ | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|   } | ||||
| } | ||||
| </style> | ||||
|   | ||||
| @@ -142,8 +142,8 @@ export default { | ||||
|         } | ||||
|       }) | ||||
|     }, | ||||
|     handleWechat({userId,type}) { | ||||
|       this.injectJWeixin('openUserProfile').then(()=>{ | ||||
|     handleWechat({userId, type}) { | ||||
|       this.injectJWeixin('openUserProfile').then(() => { | ||||
|         this.wxInvoke(['openUserProfile', { | ||||
|           type, | ||||
|           userid: userId | ||||
|   | ||||
| @@ -194,6 +194,7 @@ export default { | ||||
| <style lang="scss" scoped> | ||||
| .info { | ||||
|   padding-bottom: 130px; | ||||
|  | ||||
|   .certBtn { | ||||
|     cursor: pointer; | ||||
|     background: $uni-color-primary; | ||||
|   | ||||
| @@ -12,17 +12,20 @@ | ||||
|       </div> | ||||
|       <div class="radio-content"> | ||||
|         <div class="title">素材标题</div> | ||||
|         <textarea rows="2" placeholder="请输入(30字以内)" v-model="name" style="width:100%;height:80px;" maxlength="30"></textarea> | ||||
|         <textarea rows="2" placeholder="请输入(30字以内)" v-model="name" style="width:100%;height:80px;" | ||||
|                   maxlength="30"></textarea> | ||||
|       </div> | ||||
|     </div> | ||||
|     <div v-else> | ||||
|       <div class="radio-content mar-b16"> | ||||
|         <div class="title">素材标题</div> | ||||
|         <textarea rows="2" placeholder="请输入(30字以内)" v-model="name" style="width:100%;height:80px;" maxlength="30"></textarea> | ||||
|         <textarea rows="2" placeholder="请输入(30字以内)" v-model="name" style="width:100%;height:80px;" | ||||
|                   maxlength="30"></textarea> | ||||
|       </div> | ||||
|       <div class="radio-content"> | ||||
|         <div class="title">文本内容</div> | ||||
|         <textarea rows="8" placeholder="请输入文本内容(12000字以内)" v-model="content" style="width:100%;height:300px;" maxlength="12000"></textarea> | ||||
|         <textarea rows="8" placeholder="请输入文本内容(12000字以内)" v-model="content" style="width:100%;height:300px;" | ||||
|                   maxlength="12000"></textarea> | ||||
|       </div> | ||||
|     </div> | ||||
|     <div class="btn" @click="confirm">确认</div> | ||||
| @@ -31,8 +34,9 @@ | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
|   import AiBack from "@/components/AiBack"; | ||||
|   export default { | ||||
| import AiBack from "@/components/AiBack"; | ||||
|  | ||||
| export default { | ||||
|   name: "addPlay", | ||||
|   data() { | ||||
|     return { | ||||
| @@ -47,7 +51,7 @@ | ||||
|     AiBack | ||||
|   }, | ||||
|  | ||||
|     onLoad (query) { | ||||
|   onLoad(query) { | ||||
|     this.type = query.type | ||||
|     uni.$on('record', e => { | ||||
|       this.file = e | ||||
| @@ -55,24 +59,24 @@ | ||||
|   }, | ||||
|  | ||||
|   methods: { | ||||
|       toRecord () { | ||||
|     toRecord() { | ||||
|       uni.navigateTo({ | ||||
|         url: `/pages/resourcesManage/recording` | ||||
|       }) | ||||
|     }, | ||||
|  | ||||
|       dataURLtoFile (dataurl, filename) { | ||||
|     dataURLtoFile(dataurl, filename) { | ||||
|       var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1] | ||||
|       var bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n) | ||||
|  | ||||
|         while (n--){ | ||||
|       while (n--) { | ||||
|         u8arr[n] = bstr.charCodeAt(n) | ||||
|       } | ||||
|  | ||||
|         return new File([u8arr], filename, {type:mime}) | ||||
|       return new File([u8arr], filename, {type: mime}) | ||||
|     }, | ||||
|  | ||||
|       confirm () { | ||||
|     confirm() { | ||||
|       if (!this.file && this.type === '1') { | ||||
|         return this.$u.toast('请选择音频文件') | ||||
|       } | ||||
| @@ -113,15 +117,17 @@ | ||||
|       }) | ||||
|     } | ||||
|   } | ||||
|   } | ||||
| } | ||||
| </script> | ||||
| <style lang="scss" scoped> | ||||
| .addPlay { | ||||
|   padding-bottom: 128px; | ||||
|   .content{ | ||||
|  | ||||
|   .content { | ||||
|     padding-left: 32px; | ||||
|     background-color: #fff; | ||||
|     .item{ | ||||
|  | ||||
|     .item { | ||||
|       width: 100%; | ||||
|       padding: 34px 0; | ||||
|       font-size: 32px; | ||||
| @@ -132,49 +138,57 @@ | ||||
|       display: flex; | ||||
|       color: #333; | ||||
|       justify-content: space-between; | ||||
|       .label{ | ||||
|  | ||||
|       .label { | ||||
|         width: 198px; | ||||
|         font-size: 32px; | ||||
|       } | ||||
|       .value{ | ||||
|  | ||||
|       .value { | ||||
|         font-size: 28px; | ||||
|         width: calc(100% - 198px); | ||||
|         padding-right: 32px; | ||||
|         box-sizing: border-box; | ||||
|         text-align: right; | ||||
|  | ||||
|         img{ | ||||
|         img { | ||||
|           width: 32px; | ||||
|           height: 32px; | ||||
|           vertical-align: middle; | ||||
|           margin-left: 6px; | ||||
|         } | ||||
|       } | ||||
|       .color-999{ | ||||
|  | ||||
|       .color-999 { | ||||
|         color: #999; | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|   .radio-content{ | ||||
|  | ||||
|   .radio-content { | ||||
|     padding: 34px 32px 38px; | ||||
|     background-color: #fff; | ||||
|     .title{ | ||||
|  | ||||
|     .title { | ||||
|       font-size: 32px; | ||||
|       font-family: PingFangSC-Regular, PingFang SC; | ||||
|       font-weight: 400; | ||||
|       color: #333; | ||||
|       line-height: 44px; | ||||
|       margin-bottom: 32px; | ||||
|       span{ | ||||
|  | ||||
|       span { | ||||
|         font-size: 24px; | ||||
|         font-weight: 400; | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|   .mar-b16{ | ||||
|  | ||||
|   .mar-b16 { | ||||
|     margin-bottom: 16px; | ||||
|   } | ||||
|   .btn{ | ||||
|  | ||||
|   .btn { | ||||
|     position: fixed; | ||||
|     bottom: 0; | ||||
|     left: 0; | ||||
|   | ||||
| @@ -119,17 +119,17 @@ | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
|   import AiBack from "@/components/AiBack"; | ||||
|   import Recorder from 'recorder-core' | ||||
|   import 'recorder-core/src/engine/mp3' | ||||
|   import 'recorder-core/src/engine/mp3-engine' | ||||
|   import stopImg from './img/stop-img.png' | ||||
|   import microphone from './img/microphone.png' | ||||
|   import playImg from './img/play-icon.png' | ||||
| import AiBack from "@/components/AiBack"; | ||||
| import Recorder from 'recorder-core' | ||||
| import 'recorder-core/src/engine/mp3' | ||||
| import 'recorder-core/src/engine/mp3-engine' | ||||
| import stopImg from './img/stop-img.png' | ||||
| import microphone from './img/microphone.png' | ||||
| import playImg from './img/play-icon.png' | ||||
|  | ||||
|   export default { | ||||
| export default { | ||||
|   name: 'recording', | ||||
|     data () { | ||||
|   data() { | ||||
|     return { | ||||
|       isRecording: false, | ||||
|       progress: 0, | ||||
| @@ -154,21 +154,21 @@ | ||||
|     AiBack | ||||
|   }, | ||||
|  | ||||
|     mounted () { | ||||
|   mounted() { | ||||
|     this.$nextTick(() => { | ||||
|       this.audio = document.querySelector('audio') | ||||
|     }) | ||||
|   }, | ||||
|  | ||||
|   methods: { | ||||
|       record () { | ||||
|     record() { | ||||
|       if (!this.isRecording) { | ||||
|         this.duration = 0 | ||||
|         this.recorder = Recorder({ | ||||
|           type: 'mp3', | ||||
|           sampleRate: 16000, | ||||
|           bitRate: 16, | ||||
|             onProcess (buffers, powerLevel, bufferDuration, bufferSampleRate, newBufferIdx, asyncEnd) { | ||||
|           onProcess(buffers, powerLevel, bufferDuration, bufferSampleRate, newBufferIdx, asyncEnd) { | ||||
|             //可利用extensions/waveview.js扩展实时绘制波形 | ||||
|           } | ||||
|         }) | ||||
| @@ -185,7 +185,7 @@ | ||||
|       } | ||||
|     }, | ||||
|  | ||||
|       blobToDataURI (blob) { | ||||
|     blobToDataURI(blob) { | ||||
|       return new Promise((resolve) => { | ||||
|         var reader = new FileReader() | ||||
|         reader.readAsDataURL(blob) | ||||
| @@ -195,7 +195,7 @@ | ||||
|       }) | ||||
|     }, | ||||
|  | ||||
|       save () { | ||||
|     save() { | ||||
|       if (!this.blobFile) { | ||||
|         return this.$u.toast(`请录音`) | ||||
|       } | ||||
| @@ -208,11 +208,11 @@ | ||||
|       }) | ||||
|     }, | ||||
|  | ||||
|       onAudioEnd () { | ||||
|     onAudioEnd() { | ||||
|       this.isPlay = false | ||||
|     }, | ||||
|  | ||||
|       stop () { | ||||
|     stop() { | ||||
|       this.isRecording = false | ||||
|       this.isStop = true | ||||
|       clearTimeout(this.timingTimeout) | ||||
| @@ -226,7 +226,7 @@ | ||||
|         var seconds = durationObj.seconds() > 9 ? durationObj.seconds() : '0' + durationObj.seconds() | ||||
|  | ||||
|         this.time = hours + ':' + min + ':' + seconds | ||||
|           console.log(blob, (window.URL|| webkitURL).createObjectURL(blob), '时长:' + duration + 'ms') | ||||
|         console.log(blob, (window.URL || webkitURL).createObjectURL(blob), '时长:' + duration + 'ms') | ||||
|         this.recorder.close() | ||||
|         this.recorder = null | ||||
|       }, msg => { | ||||
| @@ -236,7 +236,7 @@ | ||||
|       }) | ||||
|     }, | ||||
|  | ||||
|       play () { | ||||
|     play() { | ||||
|       if (!this.isPlay) { | ||||
|         this.playAudio() | ||||
|         this.counterDown() | ||||
| @@ -247,10 +247,10 @@ | ||||
|       } | ||||
|     }, | ||||
|  | ||||
|       playAudio () { | ||||
|     playAudio() { | ||||
|       this.isPlay = true | ||||
|       if (!this.audioSrc) { | ||||
|           this.audioSrc = (window.URL||webkitURL).createObjectURL(this.blobFile) | ||||
|         this.audioSrc = (window.URL || webkitURL).createObjectURL(this.blobFile) | ||||
|       } | ||||
|  | ||||
|       this.$nextTick(() => { | ||||
| @@ -258,11 +258,11 @@ | ||||
|       }) | ||||
|     }, | ||||
|  | ||||
|       recodeStop () { | ||||
|     recodeStop() { | ||||
|       this.recorder.stop((blob, duration) => { | ||||
|         this.restart() | ||||
|         this.blobFile = blob | ||||
|           console.log(blob, (window.URL|| webkitURL).createObjectURL(blob), '时长:' + duration + 'ms') | ||||
|         console.log(blob, (window.URL || webkitURL).createObjectURL(blob), '时长:' + duration + 'ms') | ||||
|         this.recorder.close() | ||||
|         this.recorder = null | ||||
|       }, msg => { | ||||
| @@ -272,7 +272,7 @@ | ||||
|       }) | ||||
|     }, | ||||
|  | ||||
|       restart () { | ||||
|     restart() { | ||||
|       this.time = '00:00:00' | ||||
|       this.progress = 0 | ||||
|       this.blobFile = null | ||||
| @@ -285,7 +285,7 @@ | ||||
|       this.isStop = false | ||||
|     }, | ||||
|  | ||||
|       counterDown () { | ||||
|     counterDown() { | ||||
|       if (this.counterDownTime === -1) { | ||||
|         clearTimeout(this.counterDownTimeout) | ||||
|         this.counterDownTime = this.duration | ||||
| @@ -299,13 +299,13 @@ | ||||
|       var seconds = durationObj.seconds() > 9 ? durationObj.seconds() : '0' + durationObj.seconds() | ||||
|  | ||||
|       this.time = hours + ':' + min + ':' + seconds | ||||
|         this.counterDownTime -- | ||||
|       this.counterDownTime-- | ||||
|       this.counterDownTimeout = setTimeout(() => { | ||||
|         this.counterDown() | ||||
|       }, 1000) | ||||
|     }, | ||||
|  | ||||
|       timing () { | ||||
|     timing() { | ||||
|       this.progress = ((this.counterDownTime / 120) * 100).toFixed(2) > 100 ? 101 : ((this.counterDownTime / 120) * 100).toFixed(2) | ||||
|       var durationObj = this.$dayjs.duration(this.counterDownTime * 1000) | ||||
|       var hours = durationObj.hours() > 9 ? durationObj.hours() : '0' + durationObj.hours() | ||||
| @@ -313,39 +313,43 @@ | ||||
|       var seconds = durationObj.seconds() > 9 ? durationObj.seconds() : '0' + durationObj.seconds() | ||||
|  | ||||
|       this.time = hours + ':' + min + ':' + seconds | ||||
|         this.counterDownTime ++ | ||||
|       this.counterDownTime++ | ||||
|       this.timingTimeout = setTimeout(() => { | ||||
|         this.timing() | ||||
|       }, 1000) | ||||
|     } | ||||
|   } | ||||
|   } | ||||
| } | ||||
| </script> | ||||
|  | ||||
| <style lang="scss" scoped> | ||||
|   uni-page-body{ | ||||
| uni-page-body { | ||||
|   background-color: #fff; | ||||
|   } | ||||
|   .recording { | ||||
| } | ||||
|  | ||||
| .recording { | ||||
|   height: 100vh; | ||||
|   overflow-y: hidden; | ||||
|  | ||||
|     .content{ | ||||
|   .content { | ||||
|     padding-top: 310px; | ||||
|     text-align: center; | ||||
|       img{ | ||||
|  | ||||
|     img { | ||||
|       width: 406px; | ||||
|       height: 306px; | ||||
|       margin-bottom: 48px; | ||||
|     } | ||||
|       .text{ | ||||
|  | ||||
|     .text { | ||||
|       font-size: 30px; | ||||
|       color: #999; | ||||
|       line-height: 42px; | ||||
|       text-align: center; | ||||
|     } | ||||
|   } | ||||
|     .footer{ | ||||
|  | ||||
|   .footer { | ||||
|     display: flex; | ||||
|     align-items: center; | ||||
|     justify-content: center; | ||||
| @@ -357,7 +361,8 @@ | ||||
|     background: #F6F8FC; | ||||
|     padding: 20px 86px; | ||||
|     box-sizing: border-box; | ||||
|       span{ | ||||
|  | ||||
|     span { | ||||
|       display: inline-block; | ||||
|       width: 160px; | ||||
|       height: 64px; | ||||
| @@ -370,7 +375,8 @@ | ||||
|       vertical-align: top; | ||||
|       margin-top: 30px; | ||||
|     } | ||||
|       img{ | ||||
|  | ||||
|     img { | ||||
|       width: 128px; | ||||
|       height: 128px; | ||||
|       margin: 0 64px; | ||||
| @@ -407,7 +413,8 @@ | ||||
|     background: url(./img/top.png) repeat-x; | ||||
|     background-size: auto 6px; | ||||
|   } | ||||
|     .time{ | ||||
|  | ||||
|   .time { | ||||
|     width: 100%; | ||||
|     margin-top: 208px; | ||||
|     text-align: center; | ||||
| @@ -449,6 +456,7 @@ | ||||
|     border-radius: 4px; | ||||
|     background-color: #3476EE; | ||||
|   } | ||||
|  | ||||
|   .header-line span.line1 { | ||||
|     animation-delay: -1s; | ||||
|   } | ||||
| @@ -488,6 +496,7 @@ | ||||
|   .header-line span.line10 { | ||||
|     animation-delay: -0.1s; | ||||
|   } | ||||
|  | ||||
|   .header-line span.line11 { | ||||
|     animation-delay: -1s; | ||||
|   } | ||||
| @@ -536,5 +545,5 @@ | ||||
|       transform: scaleY(4); | ||||
|     } | ||||
|   } | ||||
|   } | ||||
| } | ||||
| </style> | ||||
|   | ||||
| @@ -1,7 +1,8 @@ | ||||
| <template> | ||||
|   <div class="resourcesManage"> | ||||
|     <div class="tab"> | ||||
|       <u-tabs :list="tab" :is-scroll="false" :current="currIndex" @change="change" height="96" :bar-style="barStyle"></u-tabs> | ||||
|       <u-tabs :list="tab" :is-scroll="false" :current="currIndex" @change="change" height="96" | ||||
|               :bar-style="barStyle"></u-tabs> | ||||
|     </div> | ||||
|     <div class="record" v-if="currIndex == 0"> | ||||
|       <div class="item" v-for="(item, index) in list" :key="index" @click="choose(item)"> | ||||
| @@ -28,13 +29,14 @@ | ||||
|   </div> | ||||
| </template> | ||||
| <script> | ||||
|   import AiVideo from '@/components/AiVideo' | ||||
|   import AiBack from "@/components/AiBack"; | ||||
|   export default { | ||||
| import AiVideo from '@/components/AiVideo' | ||||
| import AiBack from "@/components/AiBack"; | ||||
|  | ||||
| export default { | ||||
|   name: "resourcesManage", | ||||
|   data() { | ||||
|     return { | ||||
|         tab: [{ name: '音频素材' }, { name: '文本素材' }], | ||||
|       tab: [{name: '音频素材'}, {name: '文本素材'}], | ||||
|       list: [], | ||||
|       currIndex: 0, | ||||
|       current: 1, | ||||
| @@ -44,7 +46,7 @@ | ||||
|       url: '', | ||||
|       autioName: '', | ||||
|       audio: null, | ||||
|         barStyle: {width:'98px', bottom: '-3px', left: '-38px'} | ||||
|       barStyle: {width: '98px', bottom: '-3px', left: '-38px'} | ||||
|     } | ||||
|   }, | ||||
|  | ||||
| @@ -53,7 +55,7 @@ | ||||
|     AiVideo | ||||
|   }, | ||||
|  | ||||
|     onLoad (query) { | ||||
|   onLoad(query) { | ||||
|     this.isChoose = query.isChoose ? true : false | ||||
|     this.getList() | ||||
|     uni.$on('getList', e => { | ||||
| @@ -79,13 +81,13 @@ | ||||
|       }) | ||||
|     }, | ||||
|  | ||||
|       add () { | ||||
|     add() { | ||||
|       uni.navigateTo({ | ||||
|         url: `/pages/resourcesManage/addPlay?type=${this.currIndex === 0 ? 1 : 3}` | ||||
|       }) | ||||
|     }, | ||||
|  | ||||
|       choose (item) { | ||||
|     choose(item) { | ||||
|       if (!this.isChoose) { | ||||
|         console.log(item.url) | ||||
|         this.url = item.url | ||||
| @@ -103,7 +105,7 @@ | ||||
|       }) | ||||
|     }, | ||||
|  | ||||
|       getList () { | ||||
|     getList() { | ||||
|       if (this.isMore) return | ||||
|  | ||||
|       this.$http.post(`/app/appdlbresource/list`, null, { | ||||
| @@ -142,40 +144,45 @@ | ||||
|   onReachBottom() { | ||||
|     this.getList() | ||||
|   } | ||||
|   } | ||||
| } | ||||
| </script> | ||||
| <style lang="scss" scoped> | ||||
| .resourcesManage { | ||||
|   padding-bottom: 128px; | ||||
|   .tab{ | ||||
|  | ||||
|   .tab { | ||||
|     border-bottom: 1px solid #ddd; | ||||
|     margin-bottom: 4px; | ||||
|   } | ||||
|  | ||||
|   .audio { | ||||
|     width: 100%; | ||||
|     height: 400rpx; | ||||
|     height: 400 rpx; | ||||
|     box-sizing: border-box; | ||||
|     padding: 104rpx 0 46rpx; | ||||
|     padding: 104 rpx 0 46 rpx; | ||||
|  | ||||
|     audio { | ||||
|  | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   .record{ | ||||
|   .record { | ||||
|     background-color: #fff; | ||||
|     .item{ | ||||
|  | ||||
|     .item { | ||||
|       width: 100%; | ||||
|       display: flex; | ||||
|       border-bottom: 1px solid #ddd; | ||||
|       padding: 32px 30px; | ||||
|       box-sizing: border-box; | ||||
|       img{ | ||||
|  | ||||
|       img { | ||||
|         width: 56px; | ||||
|         height: 56px; | ||||
|         margin-right: 14px; | ||||
|       } | ||||
|       .info{ | ||||
|  | ||||
|       .info { | ||||
|         width: calc(100% - 70px); | ||||
|         line-height: 44px; | ||||
|         font-size: 34px; | ||||
| @@ -192,34 +199,41 @@ | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|   .record-text{ | ||||
|  | ||||
|   .record-text { | ||||
|     background-color: #fff; | ||||
|     .item{ | ||||
|  | ||||
|     .item { | ||||
|       width: 100%; | ||||
|       border-bottom: 1px solid #ddd; | ||||
|       padding: 32px 30px; | ||||
|       box-sizing: border-box; | ||||
|       font-size: 30px; | ||||
|       div{ | ||||
|  | ||||
|       div { | ||||
|         font-size: 30px; | ||||
|         font-family: PingFangSC-Medium, PingFang SC; | ||||
|         font-weight: 500; | ||||
|         color: #333; | ||||
|         overflow: hidden; | ||||
|         text-overflow:ellipsis;  | ||||
|         text-overflow: ellipsis; | ||||
|         white-space: nowrap; | ||||
|         margin-bottom: 12px; | ||||
|         .color-0063E5{ | ||||
|  | ||||
|         .color-0063E5 { | ||||
|           color: #0063E5; | ||||
|         } | ||||
|         .color-FF8100{ | ||||
|  | ||||
|         .color-FF8100 { | ||||
|           color: #FF8100; | ||||
|         } | ||||
|         .color-FF4466{ | ||||
|  | ||||
|         .color-FF4466 { | ||||
|           color: #FF4466; | ||||
|         } | ||||
|       } | ||||
|       p{ | ||||
|  | ||||
|       p { | ||||
|         font-family: PingFangSC-Regular, PingFang SC; | ||||
|         font-weight: 400; | ||||
|         color: #666; | ||||
| @@ -235,7 +249,8 @@ | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|   .add-img{ | ||||
|  | ||||
|   .add-img { | ||||
|     width: 120px; | ||||
|     position: fixed; | ||||
|     bottom: 120px; | ||||
|   | ||||
| @@ -19,24 +19,21 @@ | ||||
| export default { | ||||
|   name: "talking", | ||||
|   data() { | ||||
|     return { | ||||
|        | ||||
|     } | ||||
|   }, | ||||
|   methods: { | ||||
|      | ||||
|     return {} | ||||
|   }, | ||||
|   methods: {}, | ||||
|   mounted() { | ||||
|  | ||||
|   } | ||||
| } | ||||
| </script> | ||||
| <style lang="scss" scoped> | ||||
| uni-page-body{ | ||||
| uni-page-body { | ||||
|   background-color: #fff; | ||||
| } | ||||
|  | ||||
| .talking { | ||||
|   .header{ | ||||
|   .header { | ||||
|     width: 100%; | ||||
|     height: 128px; | ||||
|     background: #F6F8FC; | ||||
| @@ -44,41 +41,49 @@ uni-page-body{ | ||||
|     box-sizing: border-box; | ||||
|     display: flex; | ||||
|     justify-content: space-between; | ||||
|     p{ | ||||
|  | ||||
|     p { | ||||
|       font-size: 32px; | ||||
|       color: #333; | ||||
|       line-height: 44px; | ||||
|       span{ | ||||
|  | ||||
|       span { | ||||
|         color: #1174FE; | ||||
|       } | ||||
|     } | ||||
|     img{ | ||||
|  | ||||
|     img { | ||||
|       width: 32px; | ||||
|       height: 32px; | ||||
|     } | ||||
|   } | ||||
|   .content{ | ||||
|  | ||||
|   .content { | ||||
|     margin-top: 224px; | ||||
|     .time{ | ||||
|  | ||||
|     .time { | ||||
|       width: 100%; | ||||
|       text-align: center; | ||||
|       font-size: 96px; | ||||
|       color: #000000; | ||||
|       line-height: 134px; | ||||
|     } | ||||
|     img{ | ||||
|  | ||||
|     img { | ||||
|       width: 406px; | ||||
|       height: 306px; | ||||
|       margin: 0 0 48px 172px; | ||||
|     } | ||||
|     .text{ | ||||
|  | ||||
|     .text { | ||||
|       font-size: 30px; | ||||
|       color: #999; | ||||
|       line-height: 42px; | ||||
|       text-align: center; | ||||
|     } | ||||
|   } | ||||
|   .footer{ | ||||
|  | ||||
|   .footer { | ||||
|     position: fixed; | ||||
|     bottom: 0; | ||||
|     left: 0; | ||||
| @@ -87,7 +92,8 @@ uni-page-body{ | ||||
|     background: #F6F8FC; | ||||
|     padding: 20px 310px; | ||||
|     box-sizing: border-box; | ||||
|     img{ | ||||
|  | ||||
|     img { | ||||
|       width: 128px; | ||||
|       height: 128px; | ||||
|     } | ||||
|   | ||||
| @@ -48,7 +48,7 @@ | ||||
|           </u-row> | ||||
|           <u-row> | ||||
|             <u-icon :name="$cdn + 'Location2@2x.png'" :custom-style="{width:'20px',height:'20px'}"></u-icon> | ||||
|             <span class="date">{{item.areaName}}</span> | ||||
|             <span class="date">{{ item.areaName }}</span> | ||||
|           </u-row> | ||||
|         </u-row> | ||||
|         <div class="content"> | ||||
| @@ -141,7 +141,7 @@ export default { | ||||
|           status: this.currentType, | ||||
|           reportType: this.reportIndex == 6 ? null : this.reportIndex, | ||||
|           address: this.keyword, | ||||
|           areaId:this.user?.areaId | ||||
|           areaId: this.user?.areaId | ||||
|         } | ||||
|       }).then(res => { | ||||
|         if (res?.code == 0) { | ||||
|   | ||||
| @@ -30,12 +30,13 @@ | ||||
|       <text class="title">事件描述</text> | ||||
|       <div class="content">{{ detail.explain }}</div> | ||||
|       <div class="photos"> | ||||
|         <img :src="item.url" alt="" v-for="(item,index) in detail.files" :key="index" @click.stop="previewImage(detail.files,index)"> | ||||
|         <img :src="item.url" alt="" v-for="(item,index) in detail.files" :key="index" | ||||
|              @click.stop="previewImage(detail.files,index)"> | ||||
|       </div> | ||||
|       <template v-if="detail.handleResult"> | ||||
|         <u-row justify="space-between" class="result"> | ||||
|           <text class="title">处理结果</text> | ||||
|           <text>{{detail.integral|formt}}</text> | ||||
|           <text>{{ detail.integral|formt }}</text> | ||||
|         </u-row> | ||||
|         <div class="content">{{ detail.handleResult }}</div> | ||||
|         <div class="photos"> | ||||
| @@ -93,7 +94,7 @@ export default { | ||||
|     } | ||||
|   }, | ||||
|   methods: { | ||||
|     previewImage(data,index) { | ||||
|     previewImage(data, index) { | ||||
|       uni.previewImage({ | ||||
|         urls: data.map(e => e.url), | ||||
|         current: data[index].url | ||||
| @@ -117,8 +118,8 @@ export default { | ||||
|     } | ||||
|   }, | ||||
|  | ||||
|   filters:{ | ||||
|     formt(val){ | ||||
|   filters: { | ||||
|     formt(val) { | ||||
|       return +val > 0 ? `+${val}` : val | ||||
|     } | ||||
|   } | ||||
|   | ||||
| @@ -20,7 +20,7 @@ | ||||
|           v-for="(item, index) in categoryList" | ||||
|           :key="index" | ||||
|       > | ||||
|         <img class="category-img" :src="parseObj(item.photo)" alt="" /> | ||||
|         <img class="category-img" :src="parseObj(item.photo)" alt=""/> | ||||
|         <div class="category-info"> | ||||
|           <label class="hidden">{{ item.merchandiseName }}</label> | ||||
|           <span class="score" | ||||
| @@ -41,7 +41,7 @@ | ||||
|       </div> | ||||
|       <div class="btn" @click="hanldeSubmit">确认领取</div> | ||||
|     </div> | ||||
|     <back /> | ||||
|     <back/> | ||||
|   </div> | ||||
| </template> | ||||
|  | ||||
| @@ -50,7 +50,7 @@ import Back from '../../components/AiBack' | ||||
|  | ||||
| export default { | ||||
|   name: 'balance', | ||||
|   components: { Back }, | ||||
|   components: {Back}, | ||||
|   data() { | ||||
|     return { | ||||
|       selected: null, | ||||
| @@ -81,7 +81,7 @@ export default { | ||||
|   }, | ||||
|   computed: { | ||||
|     uri() { | ||||
|       return this.$cdn+'other/' + 'line.png' | ||||
|       return this.$cdn + 'other/' + 'line.png' | ||||
|     } | ||||
|   }, | ||||
|  | ||||
| @@ -95,7 +95,7 @@ export default { | ||||
|           title: '请选择结算对象', | ||||
|           icon: 'none' | ||||
|         }) | ||||
|       let { memberId, familyId } = this.selected | ||||
|       let {memberId, familyId} = this.selected | ||||
|       this.$http | ||||
|       .post(`/app/appvillagerintegralshoporder/addOrder`, { | ||||
|         shopId: this.categoryList[0].shopId, | ||||
| @@ -142,6 +142,7 @@ export default { | ||||
| .balance { | ||||
|   min-height: 100%; | ||||
|   background-color: #ffffff; | ||||
|  | ||||
|   .operate { | ||||
|     height: 120px; | ||||
|     display: flex; | ||||
|   | ||||
| @@ -1,15 +1,18 @@ | ||||
| <template> | ||||
|   <div class="result-page"> | ||||
|     <img :src="imgSrc" alt=""> | ||||
|     <text>{{text}}</text> | ||||
|     <u-button type="primary" :custom-style="{width:'100%',borderRadius:'4px',marginTop:'48px'}" @click="goBack">{{btnText}}</u-button> | ||||
|     <text>{{ text }}</text> | ||||
|     <u-button type="primary" :custom-style="{width:'100%',borderRadius:'4px',marginTop:'48px'}" @click="goBack"> | ||||
|       {{ btnText }} | ||||
|     </u-button> | ||||
|     <back></back> | ||||
|   </div> | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
|   import Back from "../../../../components/AiBack"; | ||||
|   export default { | ||||
| import Back from "../../../../components/AiBack"; | ||||
|  | ||||
| export default { | ||||
|   name: "result-page", | ||||
|   components: {Back}, | ||||
|   data() { | ||||
| @@ -25,39 +28,39 @@ | ||||
|   methods: { | ||||
|     goBack() { | ||||
|       uni.navigateBack({ | ||||
|           delta:3 | ||||
|         delta: 3 | ||||
|       }) | ||||
|     } | ||||
|   }, | ||||
|   computed: { | ||||
|       text(){ | ||||
|     text() { | ||||
|       return this.flag ? '领取成功!' : '领取失败!请联系管理员处理' | ||||
|     }, | ||||
|       btnText(){ | ||||
|     btnText() { | ||||
|       return this.flag ? '确定' : '我知道了' | ||||
|     }, | ||||
|       imgSrc(){ | ||||
|         return this.flag ? (this.$cdn+'other/' + 'kztcg.png') : (this.$cdn+'other/' + 'kztsb.png') | ||||
|       } | ||||
|     imgSrc() { | ||||
|       return this.flag ? (this.$cdn + 'other/' + 'kztcg.png') : (this.$cdn + 'other/' + 'kztsb.png') | ||||
|     } | ||||
|   } | ||||
| } | ||||
| </script> | ||||
|  | ||||
| <style lang="scss" scoped> | ||||
|   .result-page { | ||||
| .result-page { | ||||
|   min-height: 100%; | ||||
|   background-color: #ffffff; | ||||
|   display: flex; | ||||
|   flex-direction: column; | ||||
|   align-items: center; | ||||
|     padding: 96px ; | ||||
|   padding: 96px; | ||||
|  | ||||
|   img { | ||||
|     width: 192px; | ||||
|     height: 192px; | ||||
|   } | ||||
|  | ||||
|     text{ | ||||
|   text { | ||||
|     font-size: 36px; | ||||
|     font-weight: 800; | ||||
|     color: #333333; | ||||
| @@ -65,5 +68,5 @@ | ||||
|     display: flex; | ||||
|     justify-content: center; | ||||
|   } | ||||
|   } | ||||
| } | ||||
| </style> | ||||
|   | ||||
| @@ -5,8 +5,8 @@ | ||||
|     </div> | ||||
|     <div class="result-body"> | ||||
|       <div class="res-item" v-if="result" @click="selected"> | ||||
|         <span>{{result.familyName}}家</span> | ||||
|         <span>剩余积分:{{result.familyIntegral}}分</span> | ||||
|         <span>{{ result.familyName }}家</span> | ||||
|         <span>剩余积分:{{ result.familyIntegral }}分</span> | ||||
|       </div> | ||||
|       <span class="placeholder" v-else>请通过搜索“ | ||||
|         <strong>手机号或身份证号</strong> | ||||
| @@ -20,9 +20,9 @@ | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
|   import back from "../../components/AiBack"; | ||||
| import back from "../../components/AiBack"; | ||||
|  | ||||
|   export default { | ||||
| export default { | ||||
|   name: "search", | ||||
|   components: {back}, | ||||
|   data() { | ||||
| @@ -37,7 +37,7 @@ | ||||
|       uni.navigateBack({ | ||||
|         delta: 1, | ||||
|         success: () => { | ||||
|             uni.$emit('selected',this.result) | ||||
|           uni.$emit('selected', this.result) | ||||
|         }, | ||||
|         fail: (err) => { | ||||
|           console.error(err) | ||||
| @@ -72,11 +72,11 @@ | ||||
|       this.show = false | ||||
|     } | ||||
|   } | ||||
|   } | ||||
| } | ||||
| </script> | ||||
|  | ||||
| <style lang="scss" scoped> | ||||
|   .search { | ||||
| .search { | ||||
|   min-height: 100%; | ||||
|   background-color: #ffffff; | ||||
|  | ||||
| @@ -116,5 +116,5 @@ | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   } | ||||
| } | ||||
| </style> | ||||
|   | ||||
| @@ -5,7 +5,7 @@ | ||||
|         <scroll-view scroll-y style="height: 100%;"> | ||||
|           <div class="nav-left-item" v-for="(val, key, index) in list" :style="active(key)" :key="index" | ||||
|                @click="clickSort(key,index)"> | ||||
|             {{key}}分区 | ||||
|             {{ key }}分区 | ||||
|             <u-badge size="mini" :count="sortCountList[index]" absolute :offset="[5,5]"></u-badge> | ||||
|           </div> | ||||
|         </scroll-view> | ||||
| @@ -17,14 +17,14 @@ | ||||
|                 :src="parseObj(item.photo)" | ||||
|                 class="category-img" alt=""> | ||||
|             <div class="category-info"> | ||||
|               <label class="hidden">{{item.merchandiseName}}</label> | ||||
|               <span class="score">{{item.costIntegral}} | ||||
|               <label class="hidden">{{ item.merchandiseName }}</label> | ||||
|               <span class="score">{{ item.costIntegral }} | ||||
|                 <span>积分</span> | ||||
|               </span> | ||||
|               <div class="wrap"> | ||||
|                 <div class="lxc-count"> | ||||
|                   <div class="less" @click="less(item,index)">-</div> | ||||
|                   <div class="num">{{item.merchandiseNumber}}</div> | ||||
|                   <div class="num">{{ item.merchandiseNumber }}</div> | ||||
|                   <div class="less" @click="add(item,index)">+</div> | ||||
|                 </div> | ||||
|               </div> | ||||
| @@ -34,8 +34,8 @@ | ||||
|       </div> | ||||
|       <div class="footer"> | ||||
|         <div class="sum"> | ||||
|           <span>共{{totalCount}}件商品</span> | ||||
|           <span>合计:{{totalScore}} | ||||
|           <span>共{{ totalCount }}件商品</span> | ||||
|           <span>合计:{{ totalScore }} | ||||
|           <span>积分</span> | ||||
|         </span> | ||||
|         </div> | ||||
| @@ -47,9 +47,10 @@ | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
|   import AiEmpty from "../../components/AiEmpty"; | ||||
|   import {mapState} from "vuex"; | ||||
|   export default { | ||||
| import AiEmpty from "../../components/AiEmpty"; | ||||
| import {mapState} from "vuex"; | ||||
|  | ||||
| export default { | ||||
|   name: "supermarket", | ||||
|   components: {AiEmpty}, | ||||
|   data() { | ||||
| @@ -70,8 +71,8 @@ | ||||
|     list: { | ||||
|       handler(val) { | ||||
|         let sum = 0 | ||||
|           Object.keys(val).map(e=>{ | ||||
|             val[e].map(p=>{ | ||||
|         Object.keys(val).map(e => { | ||||
|           val[e].map(p => { | ||||
|             if (p.merchandiseNumber != 0) { | ||||
|               sum += (p.merchandiseNumber) * (p.costIntegral) | ||||
|             } | ||||
| @@ -124,16 +125,16 @@ | ||||
|     }, | ||||
|     add(item, index) { | ||||
|       this.list[this.idx][index]["merchandiseNumber"] = this.list[this.idx][index]["merchandiseNumber"] + 1 | ||||
|         this.$set(this.sortCountList, this.mark, this.list[this.idx]?.reduce((pre,curr)=>{ | ||||
|       this.$set(this.sortCountList, this.mark, this.list[this.idx]?.reduce((pre, curr) => { | ||||
|         return (pre + curr.merchandiseNumber) | ||||
|         },0)) | ||||
|       }, 0)) | ||||
|     }, | ||||
|     less(item, index) { | ||||
|       if (item.merchandiseNumber > 0) { | ||||
|         this.list[this.idx][index]["merchandiseNumber"] = this.list[this.idx][index]["merchandiseNumber"] - 1 | ||||
|           this.$set(this.sortCountList, this.mark, this.list[this.idx]?.reduce((pre,curr)=>{ | ||||
|         this.$set(this.sortCountList, this.mark, this.list[this.idx]?.reduce((pre, curr) => { | ||||
|           return (pre + curr.merchandiseNumber) | ||||
|           },0)) | ||||
|         }, 0)) | ||||
|       } | ||||
|     }, | ||||
|     clickSort(key, index) { | ||||
| @@ -163,15 +164,15 @@ | ||||
|     } | ||||
|   }, | ||||
|  | ||||
|   } | ||||
| } | ||||
| </script> | ||||
|  | ||||
| <style lang="scss" scoped> | ||||
|   uni-page-body{ | ||||
| uni-page-body { | ||||
|   background-color: #ffffff; | ||||
|   } | ||||
| } | ||||
|  | ||||
|   .supermarket { | ||||
| .supermarket { | ||||
|   background-color: #ffffff; | ||||
|   display: flex; | ||||
|   justify-content: space-between; | ||||
| @@ -246,11 +247,13 @@ | ||||
|         .wrap { | ||||
|           display: flex; | ||||
|           justify-content: flex-end; | ||||
|             .lxc-count{ | ||||
|  | ||||
|           .lxc-count { | ||||
|             display: flex; | ||||
|             align-items: center; | ||||
|             justify-content: center; | ||||
|               .less{ | ||||
|  | ||||
|             .less { | ||||
|               width: 40px; | ||||
|               height: 40px; | ||||
|               font-size: 20px; | ||||
| @@ -262,7 +265,7 @@ | ||||
|               color: #333333; | ||||
|             } | ||||
|  | ||||
|               .num{ | ||||
|             .num { | ||||
|               width: 89px; | ||||
|               height: 61px; | ||||
|               display: flex; | ||||
| @@ -333,5 +336,5 @@ | ||||
|     -webkit-box-orient: vertical; | ||||
|     -webkit-line-clamp: 2; | ||||
|   } | ||||
|   } | ||||
| } | ||||
| </style> | ||||
|   | ||||
| @@ -8,7 +8,7 @@ | ||||
|           </div> | ||||
|           <picker @change="change" :value="form.type" range-key="dictName" :range="$dict.getDict('workTaskType')"> | ||||
|             <u-row> | ||||
|               <div v-if="form.type!=null" class="value">{{$dict.getDict('workTaskType')[form.type]["dictName"]}}</div> | ||||
|               <div v-if="form.type!=null" class="value">{{ $dict.getDict('workTaskType')[form.type]["dictName"] }}</div> | ||||
|               <div v-else class="placeholder">请选择</div> | ||||
|               <div class="arrow"></div> | ||||
|             </u-row> | ||||
| @@ -41,7 +41,7 @@ | ||||
|           </div> | ||||
|           <picker @change="dateChange" mode="date" :value="form.lastTime" :start="startDate" :end="endDate"> | ||||
|             <u-row> | ||||
|               <div v-if="form.lastTime!=null" class="value">{{form.lastTime}}</div> | ||||
|               <div v-if="form.lastTime!=null" class="value">{{ form.lastTime }}</div> | ||||
|               <div v-else class="placeholder">请选择</div> | ||||
|               <div class="arrow" v-if="form.lastTime==null"></div> | ||||
|               <div class="clear" v-else @click.stop="form.lastTime = null"></div> | ||||
| @@ -56,8 +56,8 @@ | ||||
|           </div> | ||||
|           <u-row @click="handleSelectUser(0)" style="justify-content: flex-end"> | ||||
|             <div v-if="form.userInfoList.length" class="value"> | ||||
|               已选择<em>{{form.userInfoList.slice(0,2).map(e=>e.name).join("、")}}</em>等 | ||||
|               <em>{{form.userInfoList.length}}</em>人 | ||||
|               已选择<em>{{ form.userInfoList.slice(0, 2).map(e => e.name).join("、") }}</em>等 | ||||
|               <em>{{ form.userInfoList.length }}</em>人 | ||||
|             </div> | ||||
|             <div v-else class="placeholder">请选择</div> | ||||
|             <div class="arrow"></div> | ||||
| @@ -69,8 +69,8 @@ | ||||
|           <div class="left" style="line-height: 22px;">督办人</div> | ||||
|           <u-row @click="handleSelectUser(1)" style="justify-content: flex-end"> | ||||
|             <div v-if="form.checkUserList.length" class="value"> | ||||
|               已选择<em>{{form.checkUserList.slice(0,2).map(e=>e.name).join("、")}}</em>等 | ||||
|               <em>{{form.checkUserList.length}}</em>人 | ||||
|               已选择<em>{{ form.checkUserList.slice(0, 2).map(e => e.name).join("、") }}</em>等 | ||||
|               <em>{{ form.checkUserList.length }}</em>人 | ||||
|             </div> | ||||
|             <div v-else class="placeholder">请选择</div> | ||||
|             <div class="arrow"></div> | ||||
| @@ -82,8 +82,8 @@ | ||||
|           <div class="left" style="line-height: 22px;">抄送人</div> | ||||
|           <u-row @click="handleSelectUser(2)" style="justify-content: flex-end"> | ||||
|             <div v-if="form.sendUserList.length" class="value"> | ||||
|               已选择<em>{{form.sendUserList.slice(0,2).map(e=>e.name).join("、")}}</em>等 | ||||
|               <em>{{form.sendUserList.length}}</em>人 | ||||
|               已选择<em>{{ form.sendUserList.slice(0, 2).map(e => e.name).join("、") }}</em>等 | ||||
|               <em>{{ form.sendUserList.length }}</em>人 | ||||
|             </div> | ||||
|             <div v-else class="placeholder">请选择</div> | ||||
|             <div class="arrow"></div> | ||||
| @@ -106,10 +106,10 @@ | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
|   import AiBack from "../../../components/AiBack"; | ||||
|   import AiSelectEnterprise from "../../../components/AiSelectEnterprise"; | ||||
| import AiBack from "../../../components/AiBack"; | ||||
| import AiSelectEnterprise from "../../../components/AiSelectEnterprise"; | ||||
|  | ||||
|   export default { | ||||
| export default { | ||||
|   name: "create", | ||||
|   components: {AiBack, AiSelectEnterprise}, | ||||
|   data() { | ||||
| @@ -147,15 +147,15 @@ | ||||
|   }, | ||||
|   methods: { | ||||
|     handleCreate() { | ||||
|         if (this.form.type==null) return this.$u.toast("请选择任务类型") | ||||
|       if (this.form.type == null) return this.$u.toast("请选择任务类型") | ||||
|       if (!this.form.taskTitle) return this.$u.toast("请输入任务标题") | ||||
|       if (!this.form.taskDescription) return this.$u.toast("请输入任务说明") | ||||
|         if (this.form.lastTime==null) return this.$u.toast("请选择截止日期") | ||||
|       if (this.form.lastTime == null) return this.$u.toast("请选择截止日期") | ||||
|       if (!this.form.userInfoList.length) return this.$u.toast("请选择执行人") | ||||
|  | ||||
|       this.$http.post("/app/appworktaskinfo/addOrUpdate", { | ||||
|         ...this.form, | ||||
|           lastTime:this.form.lastTime + " 23:59:59" | ||||
|         lastTime: this.form.lastTime + " 23:59:59" | ||||
|       }).then(res => { | ||||
|         if (res.code == 0) { | ||||
|           this.$u.toast("创建成功") | ||||
| @@ -211,11 +211,11 @@ | ||||
|       this.selectList = [] | ||||
|     } | ||||
|   }, | ||||
|   } | ||||
| } | ||||
| </script> | ||||
|  | ||||
| <style lang="scss" scoped> | ||||
|   .create-sub-task { | ||||
| .create-sub-task { | ||||
|   min-height: 100%; | ||||
|   background-color: #F5F5F5; | ||||
|   box-sizing: border-box; | ||||
| @@ -321,5 +321,5 @@ | ||||
|     font-size: 36px; | ||||
|     color: #FFFFFF; | ||||
|   } | ||||
|   } | ||||
| } | ||||
| </style> | ||||
|   | ||||
| @@ -6,43 +6,43 @@ | ||||
|     </ai-top-fixed> | ||||
|     <template v-if="index==0"> | ||||
|       <div class="card"> | ||||
|         <header>{{detail.taskTitle}}</header> | ||||
|         <header>{{ detail.taskTitle }}</header> | ||||
|         <u-gap height="16"></u-gap> | ||||
|         <u-row> | ||||
|           <span>任务类型:</span> | ||||
|           <span>{{$dict.getLabel("workTaskType",detail.type)}}</span> | ||||
|           <span>{{ $dict.getLabel("workTaskType", detail.type) }}</span> | ||||
|         </u-row> | ||||
|         <u-gap height="8"></u-gap> | ||||
|         <u-row> | ||||
|           <span>开始时间:</span> | ||||
|           <span>{{detail.createTime}}</span> | ||||
|           <span>{{ detail.createTime }}</span> | ||||
|         </u-row> | ||||
|         <u-gap height="8"></u-gap> | ||||
|         <u-row> | ||||
|           <span>截止时间:</span> | ||||
|           <span style="color:#1365DD">{{detail.lastTime}}</span> | ||||
|           <span style="color:#1365DD">{{ detail.lastTime }}</span> | ||||
|         </u-row> | ||||
|         <u-gap height="8"></u-gap> | ||||
|         <u-row> | ||||
|           <span>剩余时间:</span> | ||||
|           <span style="color:#1365DD">{{detail.overTimeStatus}}</span> | ||||
|           <span style="color:#1365DD">{{ detail.overTimeStatus }}</span> | ||||
|         </u-row> | ||||
|         <u-gap height="8"></u-gap> | ||||
|         <u-row> | ||||
|           <span>任务状态:</span> | ||||
|           <span>{{$dict.getLabel("workTaskDoStatus",detail.status)}}</span> | ||||
|           <span>{{ $dict.getLabel("workTaskDoStatus", detail.status) }}</span> | ||||
|         </u-row> | ||||
|         <u-gap height="8"></u-gap> | ||||
|         <u-row> | ||||
|           <span>执行说明:</span> | ||||
|           <span>{{detail.doDescription}}</span> | ||||
|           <span>{{ detail.doDescription }}</span> | ||||
|         </u-row> | ||||
|         <u-gap height="16"></u-gap> | ||||
|       </div> | ||||
|       <div class="card" style="padding-top: 0"> | ||||
|         <div class="label">任务说明</div> | ||||
|         <u-read-more close-text="展开" color="#999999" show-height="300"> | ||||
|           <span>{{detail.taskDescription}}</span> | ||||
|           <span>{{ detail.taskDescription }}</span> | ||||
|         </u-read-more> | ||||
|       </div> | ||||
|       <div class="card" style="padding-top: 0" v-if="detail.fileList && detail.fileList.length"> | ||||
| @@ -51,9 +51,9 @@ | ||||
|           <u-row justify="between"> | ||||
|             <label class="left"> | ||||
|               <img :src="$cdn + 'common/appendix.png'" alt=""> | ||||
|               <span>{{item.name}}.{{item.postfix}}</span> | ||||
|               <span>{{ item.name }}.{{ item.postfix }}</span> | ||||
|             </label> | ||||
|             <span>{{(item.size/1024).toFixed(2)}}KB</span> | ||||
|             <span>{{ (item.size / 1024).toFixed(2) }}KB</span> | ||||
|           </u-row> | ||||
|         </div> | ||||
|       </div> | ||||
| @@ -63,26 +63,27 @@ | ||||
|       <template v-if="['0','1'].includes(isMine)"> | ||||
|         <div class="card"> | ||||
|           <div class="label">我的进度</div> | ||||
|           <text>已完成{{detail.myUserInfo.percent}}%</text> | ||||
|           <text>已完成{{ detail.myUserInfo.percent }}%</text> | ||||
|           <div class="progress"> | ||||
|             <div class="pro-active" :style="{width:detail.myUserInfo.percent + '%'}"></div> | ||||
|           </div> | ||||
|         </div> | ||||
|         <div class="card" v-if="detail.processList.length"> | ||||
|           <u-collapse> | ||||
|             <u-collapse-item :title="item.createDate && item.createDate.split(' ')[0]" v-for="(item, index) in detail.processList" :key="index"> | ||||
|             <u-collapse-item :title="item.createDate && item.createDate.split(' ')[0]" | ||||
|                              v-for="(item, index) in detail.processList" :key="index"> | ||||
|               <template slot="info"> | ||||
|                 完成到<em>{{item.percent}}%</em> | ||||
|                 完成到<em>{{ item.percent }}%</em> | ||||
|               </template> | ||||
|               {{item.remarks}} | ||||
|               {{ item.remarks }} | ||||
|             </u-collapse-item> | ||||
|           </u-collapse> | ||||
|         </div> | ||||
|       </template> | ||||
|       <template v-else> | ||||
|         <div class="card" v-for="(item,index) in detail.userInfoList" :key="index"> | ||||
|           <div class="label">{{item.userName}}</div> | ||||
|           <text>已完成{{item.percent}}%</text> | ||||
|           <div class="label">{{ item.userName }}</div> | ||||
|           <text>已完成{{ item.percent }}%</text> | ||||
|           <div class="progress"> | ||||
|             <div class="pro-active" :style="{width:item.percent + '%'}"></div> | ||||
|           </div> | ||||
| @@ -93,8 +94,8 @@ | ||||
|     <template v-if="index==2"> | ||||
|       <div class="card" v-if="list.length"> | ||||
|         <u-row justify="between" v-for="(item,index) in list" :key="index" class="item" @click="subDetail(item)"> | ||||
|           <label class="title">{{item.taskTitle}}</label> | ||||
|           <label class="right">{{item.percent}}% | ||||
|           <label class="title">{{ item.taskTitle }}</label> | ||||
|           <label class="right">{{ item.percent }}% | ||||
|             <div class="arrow"></div> | ||||
|           </label> | ||||
|         </u-row> | ||||
| @@ -103,20 +104,22 @@ | ||||
|     </template> | ||||
|  | ||||
|     <ai-back></ai-back> | ||||
|     <div class="footer" v-if="index==1 && detail.myUserInfo.taskRole == 1 &&  detail.myUserInfo.doStatus==0" @click="handleClick">去完成</div> | ||||
|     <div class="footer" v-if="index==1 && detail.myUserInfo.taskRole == 1 &&  detail.myUserInfo.doStatus==0" | ||||
|          @click="handleClick">去完成 | ||||
|     </div> | ||||
|     <div class="footer" v-if="index==2" @click="createSubTask">创建子任务</div> | ||||
|   </div> | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
|   import AiTopFixed from "../../../components/AiTopFixed"; | ||||
|   import AiBack from "../../../components/AiBack"; | ||||
|   import AiEmpty from "../../../components/AiEmpty"; | ||||
|   import {mapActions} from "vuex"; | ||||
| import AiTopFixed from "../../../components/AiTopFixed"; | ||||
| import AiBack from "../../../components/AiBack"; | ||||
| import AiEmpty from "../../../components/AiEmpty"; | ||||
| import {mapActions} from "vuex"; | ||||
|  | ||||
|   export default { | ||||
| export default { | ||||
|   name: "detail", | ||||
|     components: {AiTopFixed, AiBack,AiEmpty}, | ||||
|   components: {AiTopFixed, AiBack, AiEmpty}, | ||||
|   data() { | ||||
|     return { | ||||
|       current: 1, | ||||
| @@ -146,13 +149,13 @@ | ||||
|   methods: { | ||||
|     ...mapActions(['previewFile', 'injectJWeixin']), | ||||
|     preFile(e) { | ||||
|         if([".jpg",".png",".gif"].includes(e.postfix.toLowerCase())){ | ||||
|       if ([".jpg", ".png", ".gif"].includes(e.postfix.toLowerCase())) { | ||||
|         uni.previewImage({ | ||||
|           current: e.url, | ||||
|           urls: [e.url] | ||||
|         }) | ||||
|         }else { | ||||
|           this.previewFile({ ...e}) | ||||
|       } else { | ||||
|         this.previewFile({...e}) | ||||
|       } | ||||
|     }, | ||||
|     getDetail() { | ||||
| @@ -166,7 +169,7 @@ | ||||
|         } | ||||
|       }) | ||||
|     }, | ||||
|       getList(){ | ||||
|     getList() { | ||||
|       this.$http.post("/app/appworktaskinfo/list", null, { | ||||
|         params: { | ||||
|           parentTaskCode: this.detail.taskCode, | ||||
| @@ -200,15 +203,15 @@ | ||||
|       } | ||||
|     } | ||||
|   }, | ||||
|     onShow(){ | ||||
|   onShow() { | ||||
|     this.getDetail() | ||||
|     this.getList() | ||||
|   } | ||||
|   } | ||||
| } | ||||
| </script> | ||||
|  | ||||
| <style lang="scss" scoped> | ||||
|   .detail { | ||||
| .detail { | ||||
|   min-height: 100%; | ||||
|   background-color: #F5F5F5; | ||||
|   padding-bottom: 140px; | ||||
| @@ -352,9 +355,9 @@ | ||||
|             line-height: 44px; | ||||
|             overflow: hidden; | ||||
|             text-overflow: ellipsis; | ||||
|               display:-webkit-box; | ||||
|               -webkit-box-orient:vertical; | ||||
|               -webkit-line-clamp:2; | ||||
|             display: -webkit-box; | ||||
|             -webkit-box-orient: vertical; | ||||
|             -webkit-line-clamp: 2; | ||||
|           } | ||||
|         } | ||||
|  | ||||
| @@ -440,5 +443,5 @@ | ||||
|     font-size: 36px; | ||||
|     color: #FFFFFF; | ||||
|   } | ||||
|   } | ||||
| } | ||||
| </style> | ||||
|   | ||||
| @@ -4,25 +4,25 @@ | ||||
|       <u-row justify="between"> | ||||
|         <div class="left"> | ||||
|           <u-avatar :src="detail.avatar" v-if="detail.avatar"></u-avatar> | ||||
|           <div class="avatar" v-else>{{detail.name && detail.name.substr(-2)}}</div> | ||||
|           <div class="avatar" v-else>{{ detail.name && detail.name.substr(-2) }}</div> | ||||
|           <div class="info"> | ||||
|             <div class="name">{{detail.name}}</div> | ||||
|             <div class="status">{{$dict.getLabel("workTaskRole",detail.taskRole)}}</div> | ||||
|             <div class="name">{{ detail.name }}</div> | ||||
|             <div class="status">{{ $dict.getLabel("workTaskRole", detail.taskRole) }}</div> | ||||
|           </div> | ||||
|         </div> | ||||
| <!--        <div class="btn">--> | ||||
| <!--          <img src="../static/tx.png" alt="">催办提醒--> | ||||
| <!--        </div>--> | ||||
|         <!--        <div class="btn">--> | ||||
|         <!--          <img src="../static/tx.png" alt="">催办提醒--> | ||||
|         <!--        </div>--> | ||||
|       </u-row> | ||||
|       <u-gap height="32"></u-gap> | ||||
|       <u-row> | ||||
|         <div class="label">完成时间:</div> | ||||
|         <div class="value">{{detail.finishTime}}</div> | ||||
|         <div class="value">{{ detail.finishTime }}</div> | ||||
|       </u-row> | ||||
|       <u-gap height="16"></u-gap> | ||||
|       <u-row> | ||||
|         <div class="label">逾期时间:</div> | ||||
|         <div class="value" style="color: #FF4466">{{detail.overTimeStatus}}</div> | ||||
|         <div class="value" style="color: #FF4466">{{ detail.overTimeStatus }}</div> | ||||
|       </u-row> | ||||
|       <u-gap height="30"></u-gap> | ||||
|     </div> | ||||
| @@ -31,9 +31,9 @@ | ||||
|       <u-collapse v-for="(item,index) in detail.processList" :key="index"> | ||||
|         <u-collapse-item :title="item.createDate && item.createDate.split(' ')[0]"> | ||||
|           <template slot="info"> | ||||
|             完成到<em>{{item.percent}}%</em> | ||||
|             完成到<em>{{ item.percent }}%</em> | ||||
|           </template> | ||||
|           {{item.remarks}} | ||||
|           {{ item.remarks }} | ||||
|         </u-collapse-item> | ||||
|       </u-collapse> | ||||
|     </div> | ||||
| @@ -42,9 +42,9 @@ | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
|   import AiBack from "../../../components/AiBack"; | ||||
| import AiBack from "../../../components/AiBack"; | ||||
|  | ||||
|   export default { | ||||
| export default { | ||||
|   name: "finishDetail", | ||||
|   components: {AiBack}, | ||||
|   data() { | ||||
| @@ -55,7 +55,7 @@ | ||||
|   }, | ||||
|   onLoad(opt) { | ||||
|     this.id = opt.id | ||||
|       this.$dict.load("workTaskRole").then(_=>this.getDetail()) | ||||
|     this.$dict.load("workTaskRole").then(_ => this.getDetail()) | ||||
|   }, | ||||
|   methods: { | ||||
|     getDetail() { | ||||
| @@ -70,11 +70,11 @@ | ||||
|       }) | ||||
|     } | ||||
|   }, | ||||
|   } | ||||
| } | ||||
| </script> | ||||
|  | ||||
| <style lang="scss" scoped> | ||||
|   .finish-detail { | ||||
| .finish-detail { | ||||
|   min-height: 100%; | ||||
|   background-color: #F5F5F5; | ||||
|  | ||||
| @@ -182,5 +182,5 @@ | ||||
|     } | ||||
|  | ||||
|   } | ||||
|   } | ||||
| } | ||||
| </style> | ||||
|   | ||||
| @@ -3,58 +3,58 @@ | ||||
|     <div class="card"> | ||||
|       <header> | ||||
|         <em>[子任务]</em> | ||||
|         {{detail.taskTitle}} | ||||
|         {{ detail.taskTitle }} | ||||
|       </header> | ||||
|       <u-gap height="16"></u-gap> | ||||
|       <u-row> | ||||
|         <span>任务类型:</span> | ||||
|         <span>{{$dict.getLabel("workTaskType",detail.type)}}</span> | ||||
|         <span>{{ $dict.getLabel("workTaskType", detail.type) }}</span> | ||||
|       </u-row> | ||||
|       <u-gap height="8"></u-gap> | ||||
|       <u-row> | ||||
|         <span>开始时间:</span> | ||||
|         <span>{{detail.createTime}}</span> | ||||
|         <span>{{ detail.createTime }}</span> | ||||
|       </u-row> | ||||
|       <u-gap height="8"></u-gap> | ||||
|       <u-row> | ||||
|         <span>截止时间:</span> | ||||
|         <span>{{detail.lastTime}}</span> | ||||
|         <span>{{ detail.lastTime }}</span> | ||||
|       </u-row> | ||||
|       <u-gap height="8"></u-gap> | ||||
|       <u-row> | ||||
|         <span>剩余时间:</span> | ||||
|         <span style="color:#1365DD">{{detail.overTimeStatus}}</span> | ||||
|         <span style="color:#1365DD">{{ detail.overTimeStatus }}</span> | ||||
|       </u-row> | ||||
|       <u-gap height="8"></u-gap> | ||||
|       <u-row> | ||||
|         <span>任务状态:</span> | ||||
|         <span style="color:#1365DD">{{$dict.getLabel("workTaskDoStatus",detail.status)}}</span> | ||||
|         <span style="color:#1365DD">{{ $dict.getLabel("workTaskDoStatus", detail.status) }}</span> | ||||
|       </u-row> | ||||
|       <u-gap height="16"></u-gap> | ||||
|     </div> | ||||
|     <div class="card" style="padding-top: 0"> | ||||
|       <div class="label">任务说明</div> | ||||
|       <u-read-more close-text="展开" color="#999999" show-height="300"> | ||||
|         <span>{{detail.taskDescription}}</span> | ||||
|         <span>{{ detail.taskDescription }}</span> | ||||
|       </u-read-more> | ||||
|     </div> | ||||
|  | ||||
|     <div class="card"> | ||||
|       <div class="label">当前进度</div> | ||||
|       <text>已完成{{detail.percent}}%</text> | ||||
|       <text>已完成{{ detail.percent }}%</text> | ||||
|       <div class="progress"> | ||||
|         <div class="pro-active" :style="{width:detail.percent + '%'}"></div> | ||||
|       </div> | ||||
|     </div> | ||||
|  | ||||
|     <div class="card" style="padding-top: 0" v-if="detail.userInfoList && detail.userInfoList.length"> | ||||
|       <div class="label title">任务完成进度(<i>{{count}}</i>/{{detail.userInfoList.length}})</div> | ||||
|       <div class="label title">任务完成进度(<i>{{ count }}</i>/{{ detail.userInfoList.length }})</div> | ||||
|       <u-row justify="between" v-for="(item,index) in detail.userInfoList" :key="index" @click="finishDetail(item)"> | ||||
|         <div>{{item.userName && item.userName.substr(-2)}}</div> | ||||
|         <div>{{ item.userName && item.userName.substr(-2) }}</div> | ||||
|         <u-row justify="between" class="item"> | ||||
|           <text class="name">{{item.userName}}</text> | ||||
|           <text class="name">{{ item.userName }}</text> | ||||
|           <label class="right"> | ||||
|             <span>已完成{{item.percent}}%</span> | ||||
|             <span>已完成{{ item.percent }}%</span> | ||||
|             <label class="arrow"></label> | ||||
|           </label> | ||||
|         </u-row> | ||||
| @@ -75,9 +75,9 @@ | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
|   import AiBack from "../../../components/AiBack"; | ||||
| import AiBack from "../../../components/AiBack"; | ||||
|  | ||||
|   export default { | ||||
| export default { | ||||
|   name: "subDetail", | ||||
|   components: {AiBack}, | ||||
|   data() { | ||||
| @@ -95,9 +95,9 @@ | ||||
|     this.$dict.load("workTaskType", "workTaskDoStatus").then(_ => this.getDetail()) | ||||
|   }, | ||||
|   methods: { | ||||
|       finishDetail({id}){ | ||||
|     finishDetail({id}) { | ||||
|       uni.navigateTo({ | ||||
|           url:"/pages/workTask/components/finishDetail?id=" + id | ||||
|         url: "/pages/workTask/components/finishDetail?id=" + id | ||||
|       }) | ||||
|     }, | ||||
|     confirm() { | ||||
| @@ -121,18 +121,18 @@ | ||||
|       }).then(res => { | ||||
|         if (res && res.data) { | ||||
|           this.detail = res.data | ||||
|             this.count = res.data?.userInfoList?.reduce((pre,cur)=>{ | ||||
|               return pre + (cur.percent==100 ? 1 : 0) | ||||
|             },0) | ||||
|           this.count = res.data?.userInfoList?.reduce((pre, cur) => { | ||||
|             return pre + (cur.percent == 100 ? 1 : 0) | ||||
|           }, 0) | ||||
|         } | ||||
|       }) | ||||
|     } | ||||
|   }, | ||||
|   } | ||||
| } | ||||
| </script> | ||||
|  | ||||
| <style lang="scss" scoped> | ||||
|   .sub-detail { | ||||
| .sub-detail { | ||||
|   min-height: 100%; | ||||
|   overflow-x: hidden; | ||||
|   background-color: #F5F5F5; | ||||
| @@ -337,5 +337,5 @@ | ||||
|       background: #1365DD; | ||||
|     } | ||||
|   } | ||||
|   } | ||||
| } | ||||
| </style> | ||||
|   | ||||
| @@ -5,24 +5,24 @@ | ||||
|     </ai-top-fixed> | ||||
|     <div class="list" v-if="list.length"> | ||||
|       <div class="card" v-for="(item,index) in list" :key="index" @click="handleClick(item)"> | ||||
|         <header>{{item.taskTitle}}</header> | ||||
|         <header>{{ item.taskTitle }}</header> | ||||
|         <u-gap height="24"></u-gap> | ||||
|         <u-row> | ||||
|           <text>任务类型:</text> | ||||
|           <text>{{$dict.getLabel("workTaskType",item.type)}}</text> | ||||
|           <text>{{ $dict.getLabel("workTaskType", item.type) }}</text> | ||||
|         </u-row> | ||||
|         <u-gap height="8"></u-gap> | ||||
|         <u-row> | ||||
|           <text>截止时间:</text> | ||||
|           <text>{{item.lastTime}}</text> | ||||
|           <text>{{ item.lastTime }}</text> | ||||
|         </u-row> | ||||
|         <u-gap height="8"></u-gap> | ||||
|         <u-row> | ||||
|           <text>剩余时间:</text> | ||||
|           <text :style="{color:item.isOverTime==1?'#FF4466':'#1365DD'}">{{item.overTimeStatus}}</text> | ||||
|           <text :style="{color:item.isOverTime==1?'#FF4466':'#1365DD'}">{{ item.overTimeStatus }}</text> | ||||
|         </u-row> | ||||
|         <u-gap height="24"></u-gap> | ||||
|         <span>已完成{{item.percent}}%</span> | ||||
|         <span>已完成{{ item.percent }}%</span> | ||||
|         <u-gap height="16"></u-gap> | ||||
|         <div class="progress"> | ||||
|           <div class="active" :style="{width: item.percent + '%'}"></div> | ||||
| @@ -37,11 +37,11 @@ | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
|   import AiTopFixed from "../../components/AiTopFixed"; | ||||
|   import AiAdd from "../../components/AiAdd"; | ||||
|   import AiEmpty from "../../components/AiEmpty"; | ||||
| import AiTopFixed from "../../components/AiTopFixed"; | ||||
| import AiAdd from "../../components/AiAdd"; | ||||
| import AiEmpty from "../../components/AiEmpty"; | ||||
|  | ||||
|   export default { | ||||
| export default { | ||||
|   name: "workTask", | ||||
|   components: {AiTopFixed, AiAdd, AiEmpty}, | ||||
|   data() { | ||||
| @@ -148,11 +148,11 @@ | ||||
|     this.current = 1 | ||||
|     this.getList() | ||||
|   } | ||||
|   } | ||||
| } | ||||
| </script> | ||||
|  | ||||
| <style lang="scss" scoped> | ||||
|   .work-task { | ||||
| .work-task { | ||||
|   min-height: 100%; | ||||
|   background-color: #F5F5F5; | ||||
|   padding-bottom: 32px; | ||||
| @@ -218,5 +218,5 @@ | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|   } | ||||
| } | ||||
| </style> | ||||
|   | ||||
| @@ -9,7 +9,8 @@ | ||||
|               <span class="icon">*</span> | ||||
|               <span> 审批意见:</span> | ||||
|             </span> | ||||
|             <textarea :maxlength="150" placeholder="请输入审批意见" v-model="opinion" class="textarea" clearable="false"> </textarea> | ||||
|             <textarea :maxlength="150" placeholder="请输入审批意见" v-model="opinion" class="textarea" | ||||
|                       clearable="false"> </textarea> | ||||
|             <div class="clearn" @click="clearn">清空内容</div> | ||||
|             <div class="msg_length"> | ||||
|               <span class="font">{{ opinion.length }}</span> | ||||
| @@ -26,7 +27,8 @@ | ||||
|                 <span class="icon" v-if="item.mustFill == 1">*</span> | ||||
|                 <span> {{ item.fieldName }}:</span> | ||||
|               </span> | ||||
|               <textarea :maxlength="150" placeholder="请输入审批意见" v-model="item.fieldValue" class="textarea" clearable="false"> </textarea> | ||||
|               <textarea :maxlength="150" placeholder="请输入审批意见" v-model="item.fieldValue" class="textarea" | ||||
|                         clearable="false"> </textarea> | ||||
|               <div class="clearn" @click="clearn">清空内容</div> | ||||
|               <div class="msg_length"> | ||||
|                 <span class="font">{{ item.fieldValue.length }}</span> | ||||
| @@ -42,7 +44,8 @@ | ||||
|                 <span> {{ item.fieldName }}:</span> | ||||
|               </div> | ||||
|               <div class="left"> | ||||
|                 <u-input type="text" @click="timeSelect(index)" class="right" placeholder="请选择" disabled v-model="item.fieldValue"></u-input> | ||||
|                 <u-input type="text" @click="timeSelect(index)" class="right" placeholder="请选择" disabled | ||||
|                          v-model="item.fieldValue"></u-input> | ||||
|               </div> | ||||
|             </div> | ||||
|           </div> | ||||
| @@ -56,7 +59,8 @@ | ||||
|         <!-- 单个文件最大10MB.zip、.rar、.doc、.docx、.xls、.xlsx、.ppt、.pptx、.pdf、.txt、.jpg、.png格式 --> | ||||
|         <div class="upload"> | ||||
|           <div class="info"> | ||||
|             <ai-uploader multiple @list="(v) => (annex = v)" :limit="9" action="/admin/file/add2" type="file" placeholder="添加文件" preview /> | ||||
|             <ai-uploader multiple @list="(v) => (annex = v)" :limit="9" action="/admin/file/add2" type="file" | ||||
|                          placeholder="添加文件" preview/> | ||||
|           </div> | ||||
|         </div> | ||||
|       </div> | ||||
| @@ -67,7 +71,7 @@ | ||||
|         <text class="img_text">(最多9张)</text> | ||||
|         <div class="upload"> | ||||
|           <div class="info"> | ||||
|             <ai-uploader multiple @list="(v) => (picture = v)" :limit="9" :size="2097152" preview /> | ||||
|             <ai-uploader multiple @list="(v) => (picture = v)" :limit="9" :size="2097152" preview/> | ||||
|           </div> | ||||
|         </div> | ||||
|       </div> | ||||
| @@ -76,8 +80,8 @@ | ||||
|     <div class="btn" @click="btn">确定</div> | ||||
|  | ||||
|     <!-- 日期选择器 --> | ||||
|     <u-calendar v-model="show" :mode="mode" @change="calendar" /> | ||||
|     <back /> | ||||
|     <u-calendar v-model="show" :mode="mode" @change="calendar"/> | ||||
|     <back/> | ||||
|   </div> | ||||
| </template> | ||||
|  | ||||
| @@ -119,9 +123,11 @@ export default { | ||||
|   // 监听 | ||||
|   watch: {}, | ||||
|   // 实例创建后 | ||||
|   onShow() {}, | ||||
|   onShow() { | ||||
|   }, | ||||
|   // 实例渲染后 | ||||
|   mounted() {}, | ||||
|   mounted() { | ||||
|   }, | ||||
|   // 方法 | ||||
|   methods: { | ||||
|     timeSelect(index) { | ||||
|   | ||||
| @@ -6,7 +6,8 @@ | ||||
|         <p>审批通过:</p> | ||||
|         <div class="save"> | ||||
|           <div style="display:inline">[{{ this.list.tableInfo.tableName }}]已签署完成,</div> | ||||
|           <ai-image preview :file="list.pdfFile" style="display:inline-block;margin-left:4px ;"><span class="clicksave">点击查看和保存</span> </ai-image> | ||||
|           <ai-image preview :file="list.pdfFile" style="display:inline-block;margin-left:4px ;"><span class="clicksave">点击查看和保存</span> | ||||
|           </ai-image> | ||||
|         </div> | ||||
|       </div> | ||||
|  | ||||
| @@ -19,7 +20,8 @@ | ||||
|           <div class="people_msg"> | ||||
|             <!-- 圆形头像 --> | ||||
|             <div class="avatar"> | ||||
|               <span v-if="list.createUserAvatar"><img :src="list.createUserAvatar" alt="" style="width: 100%;height: 100%;border-radius:50%"/></span> | ||||
|               <span v-if="list.createUserAvatar"><img :src="list.createUserAvatar" alt="" | ||||
|                                                       style="width: 100%;height: 100%;border-radius:50%"/></span> | ||||
|               <span v-else> {{ $formatName(list.createUserName) }}</span> | ||||
|             </div> | ||||
|  | ||||
| @@ -40,7 +42,7 @@ | ||||
|  | ||||
|           <!-- 已通过 --> | ||||
|           <div class="people_status_agree" v-if="list.approvalStatus == 1"> | ||||
|             <img src="./components/people_status_agree.png" alt="" /> | ||||
|             <img src="./components/people_status_agree.png" alt=""/> | ||||
|           </div> | ||||
|  | ||||
|           <!-- 被驳回 --> | ||||
| @@ -72,7 +74,7 @@ | ||||
|             <div class="item_info"> | ||||
|               <span class="annexs">附件资料:</span> | ||||
|               <div class="img_text" v-for="(item, indexs) in list.annexs" :key="indexs"> | ||||
|                 <ai-image :src="item.annexFile.url" preview /> | ||||
|                 <ai-image :src="item.annexFile.url" preview/> | ||||
|                 <span class="text">{{ item.annexName }}</span> | ||||
|               </div> | ||||
|             </div> | ||||
| @@ -81,20 +83,24 @@ | ||||
|       </div> | ||||
|  | ||||
|       <!-- tabs栏 --> | ||||
|       <u-tabs class="tabs" :list="list_tabs" height="96" active-color="#1365dd" inactive-color="#999" bar-width="374" font-size="30" :is-scroll="false" :current="current" @change="change"></u-tabs> | ||||
|       <u-tabs class="tabs" :list="list_tabs" height="96" active-color="#1365dd" inactive-color="#999" bar-width="374" | ||||
|               font-size="30" :is-scroll="false" :current="current" @change="change"></u-tabs> | ||||
|  | ||||
|       <!-- 表单申请的折叠窗 --> | ||||
|       <div style="background-color:#fff"> | ||||
|         <div v-if="current == 0" class="collapse"> | ||||
|           <u-collapse event-type="close" :arrow="true" :accordion="true"> | ||||
|             <u-collapse-item v-if="item.length > 0" v-for="(item, index) in inforlist" :title="item[0].groupName" :key="index"> | ||||
|             <u-collapse-item v-if="item.length > 0" v-for="(item, index) in inforlist" :title="item[0].groupName" | ||||
|                              :key="index"> | ||||
|               <div v-for="(items, indexs) in item" :key="indexs"> | ||||
|                 <div class="item_msg"> | ||||
|                   <!-- 左 --> | ||||
|                   <span class="msg_lef">{{ items.fieldName }}</span> | ||||
|                   <!-- 右 --> | ||||
|                   <!-- 字典值 items.dictionaryCode --> | ||||
|                   <span class="msg_lright" v-if="items.fieldDataType != 5">{{ $dict.getLabel(items.dictionaryCode, items.fieldValue) }}</span> | ||||
|                   <span class="msg_lright" v-if="items.fieldDataType != 5">{{ | ||||
|                       $dict.getLabel(items.dictionaryCode, items.fieldValue) | ||||
|                     }}</span> | ||||
|                   <span class="msg_lright" v-else> | ||||
|                     <span v-for="(itemL, indexL) in items.fieldValue" :key="indexL" | ||||
|                     >{{ $dict.getLabel(items.dictionaryCode, itemL) }} | ||||
| @@ -120,12 +126,13 @@ | ||||
|               <div class="item-left-ava-icon"> | ||||
|                 <!-- 头像 --> | ||||
|                 <div class="avatar" v-if="item.userName"> | ||||
|                   <span v-if="item.stepAvatar"><img :src="item.stepAvatar" alt="" style="width: 100%;height: 100%;border-radius:50%"/></span> | ||||
|                   <span v-if="item.stepAvatar"><img :src="item.stepAvatar" alt="" | ||||
|                                                     style="width: 100%;height: 100%;border-radius:50%"/></span> | ||||
|                   <span v-else> {{ $formatName(item.userName) }}</span> | ||||
|                 </div> | ||||
|  | ||||
|                 <div class="avatar" v-else-if="item.title == '抄送'"> | ||||
|                   <img src="./components/Profile_Picture.png" alt="" /> | ||||
|                   <img src="./components/Profile_Picture.png" alt=""/> | ||||
|                 </div> | ||||
|  | ||||
|                 <div class="avatar" v-else> | ||||
| @@ -134,14 +141,14 @@ | ||||
|  | ||||
|                 <!-- 图标 发起 抄送和审批通过图标 --> | ||||
|                 <div class="icon-yes" v-if="item.stepType == 1 || item.stepType == 0 || item.stepType == 3"> | ||||
|                   <img src="./components/agree.png" alt="" /> | ||||
|                   <img src="./components/agree.png" alt=""/> | ||||
|                 </div> | ||||
|  | ||||
|                 <!-- 审批拒绝图标 --> | ||||
|                 <div class="" v-else-if="item.stepType == 2"></div> | ||||
|  | ||||
|                 <div class="icon-no" v-else> | ||||
|                   <img src="./components/clearn.png" /> | ||||
|                   <img src="./components/clearn.png"/> | ||||
|                 </div> | ||||
|               </div> | ||||
|  | ||||
| @@ -191,7 +198,8 @@ | ||||
|                   <div class="examine_docx1"> | ||||
|                     <!-- 图片 --> | ||||
|                     <div class="examine_img" v-if="item.pictureFiles && item.pictureFiles.length > 0" style=""> | ||||
|                       <ai-image preview :src="pic.url" v-for="pic in item.pictureFiles" :key="pic.id" style="width: 65px;height: 75px;float: left;margin-left: 6px;margin-bottom: 4px;overflow: hidden;" /> | ||||
|                       <ai-image preview :src="pic.url" v-for="pic in item.pictureFiles" :key="pic.id" | ||||
|                                 style="width: 65px;height: 75px;float: left;margin-left: 6px;margin-bottom: 4px;overflow: hidden;"/> | ||||
|                     </div> | ||||
|  | ||||
|                     <!-- 附件资料 --> | ||||
| @@ -214,7 +222,8 @@ | ||||
|                   <div class="examine_docx1"> | ||||
|                     <!-- 图片 --> | ||||
|                     <div class="examine_img" v-if="item.pictureFiles && item.pictureFiles.length > 0" style=""> | ||||
|                       <ai-image preview :src="pic.url" v-for="pic in item.pictureFiles" :key="pic.id" style="width: 69px;height: 75px;float: left;margin-left: 4px;margin-bottom: 4px;overflow: hidden;" /> | ||||
|                       <ai-image preview :src="pic.url" v-for="pic in item.pictureFiles" :key="pic.id" | ||||
|                                 style="width: 69px;height: 75px;float: left;margin-left: 4px;margin-bottom: 4px;overflow: hidden;"/> | ||||
|                     </div> | ||||
|  | ||||
|                     <!-- 附件资料 --> | ||||
| @@ -244,18 +253,18 @@ | ||||
|       <div class="agree" @click="agree(1)">同意</div> | ||||
|     </div> | ||||
|  | ||||
|     <back /> | ||||
|     <back/> | ||||
|   </div> | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
| import back from '../../components/AiBack' | ||||
| import AiImage from '../../components/AiImage' | ||||
| import { mapActions } from 'vuex' | ||||
| import {mapActions} from 'vuex' | ||||
|  | ||||
| export default { | ||||
|   name: 'workonlineDetail', | ||||
|   components: { AiImage, back }, | ||||
|   components: {AiImage, back}, | ||||
|   computed: { | ||||
|     canApproval() { | ||||
|       return this.listType == 0 | ||||
|   | ||||
| @@ -1,8 +1,10 @@ | ||||
| <template> | ||||
|   <div class="closemsg"> | ||||
|     <img :src="imgSrc" alt="" /> | ||||
|     <img :src="imgSrc" alt=""/> | ||||
|     <text>{{ text }}</text> | ||||
|     <u-button type="primary" :custom-style="{ width: '100%', borderRadius: '4px', marginTop: '48px' }" @click="goBack">{{ btnText }} </u-button> | ||||
|     <u-button type="primary" :custom-style="{ width: '100%', borderRadius: '4px', marginTop: '48px' }" @click="goBack"> | ||||
|       {{ btnText }} | ||||
|     </u-button> | ||||
|     <back></back> | ||||
|   </div> | ||||
| </template> | ||||
| @@ -12,7 +14,7 @@ import back from '../../components/AiBack' | ||||
|  | ||||
| export default { | ||||
|   name: 'CloseMsg', | ||||
|   components: { back }, | ||||
|   components: {back}, | ||||
|   data() { | ||||
|     return { | ||||
|       flag: true, | ||||
| @@ -38,7 +40,7 @@ export default { | ||||
|       return this.flag ? '确定' : '我知道了' | ||||
|     }, | ||||
|     imgSrc() { | ||||
|       return this.flag ? this.$cdn+'other/' + 'kztcg.png' : this.$cdn+'other/' + 'kztsb.png' | ||||
|       return this.flag ? this.$cdn + 'other/' + 'kztcg.png' : this.$cdn + 'other/' + 'kztsb.png' | ||||
|     }, | ||||
|   }, | ||||
| } | ||||
|   | ||||
| @@ -2,7 +2,8 @@ | ||||
|   <div class="workonline"> | ||||
|     <!-- 顶部搜索 --> | ||||
|     <div class="search"> | ||||
|       <u-search class="serach_content" placeholder="请输入标题" :show-action="false" v-model="keyword" @clear="search" @search="search"></u-search> | ||||
|       <u-search class="serach_content" placeholder="请输入标题" :show-action="false" v-model="keyword" @clear="search" | ||||
|                 @search="search"></u-search> | ||||
|     </div> | ||||
|  | ||||
|     <u-tabs :list="list" :is-scroll="false" :current="currentType" @change="change"></u-tabs> | ||||
| @@ -22,10 +23,14 @@ | ||||
|               <span class="item_info">审批进度:</span> | ||||
|  | ||||
|               <!-- 申请类型 ing --> | ||||
|               <span class="business_status" v-if="item.approvalStatus == 0"> {{ $dict.getLabel('listApprovalStatusHb', item.approvalStatus) }}</span> | ||||
|               <span class="business_status" v-if="item.approvalStatus == 0"> {{ | ||||
|                   $dict.getLabel('listApprovalStatusHb', item.approvalStatus) | ||||
|                 }}</span> | ||||
|  | ||||
|               <!-- end --> | ||||
|               <span class="business_status_blue" v-if="item.approvalStatus == 1"> {{ $dict.getLabel('listApprovalStatusHb', item.approvalStatus) }}</span> | ||||
|               <span class="business_status_blue" v-if="item.approvalStatus == 1"> {{ | ||||
|                   $dict.getLabel('listApprovalStatusHb', item.approvalStatus) | ||||
|                 }}</span> | ||||
|  | ||||
|               <!-- false --> | ||||
|               <span class="business_status_gray" v-if="item.approvalStatus == 2"> | ||||
| @@ -49,11 +54,11 @@ | ||||
|  | ||||
|         <span class="icon"> | ||||
|           <!-- ing --> | ||||
|           <img src="./components/ing.png" alt="" v-if="item.approvalStatus == 0" /> | ||||
|           <img src="./components/ing.png" alt="" v-if="item.approvalStatus == 0"/> | ||||
|           <!-- end --> | ||||
|           <img src="./components/end.png" alt="" v-if="item.approvalStatus == 1" /> | ||||
|           <img src="./components/end.png" alt="" v-if="item.approvalStatus == 1"/> | ||||
|           <!-- false --> | ||||
|           <img src="./components/reject.png" alt="" v-if="item.approvalStatus == 2" /> | ||||
|           <img src="./components/reject.png" alt="" v-if="item.approvalStatus == 2"/> | ||||
|         </span> | ||||
|       </div> | ||||
|     </div> | ||||
| @@ -69,10 +74,10 @@ export default { | ||||
|   data() { | ||||
|     return { | ||||
|       list: [ | ||||
|         { name: '待我审批', type: 0 }, | ||||
|         { name: '我已审批', type: 1 }, | ||||
|         { name: '抄送我的', type: 3 }, | ||||
|         { name: '超时督办', type: 4 }, | ||||
|         {name: '待我审批', type: 0}, | ||||
|         {name: '我已审批', type: 1}, | ||||
|         {name: '抄送我的', type: 3}, | ||||
|         {name: '超时督办', type: 4}, | ||||
|       ], | ||||
|       currentType: 0, // 0待我审批 1已审批 2抄送我的 3超时 | ||||
|       keyword: '', | ||||
| @@ -95,7 +100,8 @@ export default { | ||||
|     }) | ||||
|   }, | ||||
|   // 实例渲染后 | ||||
|   mounted() {}, | ||||
|   mounted() { | ||||
|   }, | ||||
|   // 方法 | ||||
|   methods: { | ||||
|     getList() { | ||||
|   | ||||
| @@ -469,7 +469,7 @@ export default { | ||||
| 
 | ||||
|         .u-checkbox__icon-wrap, .u-radio__icon-wrap { | ||||
|           position: absolute; | ||||
|           top: 4 rpx; | ||||
|           top: 4px; | ||||
|         } | ||||
| 
 | ||||
|         .u-radio__label, .u-checkbox__label { | ||||
							
								
								
									
										194
									
								
								src/sass/AppAskForm/components/AddList.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										194
									
								
								src/sass/AppAskForm/components/AddList.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,194 @@ | ||||
| <template> | ||||
|   <div class="template-wrapper"> | ||||
|     <div class="form-list"> | ||||
|       <div | ||||
|           class="form-list__item" | ||||
|           @click="toAdd(index)" | ||||
|           :style="{'background-image': `url(${$cdn}askform/${index + 1}.png)`}" | ||||
|           v-for="(item, index) in itemList" | ||||
|           :key="index"> | ||||
|         <h2>{{ item.name }}</h2> | ||||
|         <div>立即创建</div> | ||||
|       </div> | ||||
|     </div> | ||||
|     <div class="template" v-if="list.length"> | ||||
|       <h2>共享模板</h2> | ||||
|       <div class="template-list"> | ||||
|         <div class="template-item" v-for="(item, index) in list" :key="index" hover-class="bg-hover" | ||||
|              @click="quote(item.id)"> | ||||
|           <image :src="`${$cdn}askform/6.png`"/> | ||||
|           <h2>{{ item.title }}</h2> | ||||
|           <u-icon name="arrow-right" color="#E1E2E3"/> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
|   </div> | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
| export default { | ||||
|   name: 'addList', | ||||
|   label: '新建项目', | ||||
|  | ||||
|   data() { | ||||
|     return { | ||||
|       itemList: [{ | ||||
|         name: '问卷调查' | ||||
|       }, { | ||||
|         name: '考试测评' | ||||
|       }, { | ||||
|         name: '报名登记' | ||||
|       }, { | ||||
|         name: '满意调查' | ||||
|       }, { | ||||
|         name: '投票评选' | ||||
|       }], | ||||
|       list: [] | ||||
|     } | ||||
|   }, | ||||
|  | ||||
|   mounted() { | ||||
|     this.getList() | ||||
|   }, | ||||
|  | ||||
|   methods: { | ||||
|     toAdd(type) { | ||||
|       this.$emit('change', { | ||||
|         type: 'AddForm', | ||||
|         params: { | ||||
|           type | ||||
|         } | ||||
|       }) | ||||
|     }, | ||||
|  | ||||
|     quote(id) { | ||||
|       this.$emit('change', { | ||||
|         type: 'AddForm', | ||||
|         params: { | ||||
|           id, | ||||
|           isQuote: 1 | ||||
|         } | ||||
|       }) | ||||
|     }, | ||||
|  | ||||
|     getList() { | ||||
|       this.$http.post(`/app/appquestionnairetemplate/list`, null, { | ||||
|         params: { | ||||
|           current: 1, | ||||
|           templateType: 1, | ||||
|           size: 10000 | ||||
|         } | ||||
|       }).then(res => { | ||||
|         if (res.code == 0) { | ||||
|           this.list = res.data.records | ||||
|         } | ||||
|       }) | ||||
|     } | ||||
|   } | ||||
| } | ||||
| </script> | ||||
|  | ||||
| <style lang="scss" scoped> | ||||
| .template-wrapper { | ||||
|   padding-bottom: 120 rpx; | ||||
|  | ||||
|   .template { | ||||
|     margin: 32px 32px 0; | ||||
|     background: #fff; | ||||
|     border-radius: 8px; | ||||
|     overflow: hidden; | ||||
|  | ||||
|     & > h2 { | ||||
|       height: 88px; | ||||
|       line-height: 88px; | ||||
|       padding: 0 24px; | ||||
|       color: #333333; | ||||
|       font-size: 30px; | ||||
|     } | ||||
|  | ||||
|     .template-item { | ||||
|       display: flex; | ||||
|       align-items: center; | ||||
|       height: 104px; | ||||
|       padding: 0 24px; | ||||
|       border-bottom: 1px solid #D8DDE6; | ||||
|  | ||||
|       &:active { | ||||
|         background-color: #eee; | ||||
|       } | ||||
|  | ||||
|       &:last-child { | ||||
|         border: none; | ||||
|       } | ||||
|  | ||||
|       image { | ||||
|         width: 36px; | ||||
|         height: 42px; | ||||
|       } | ||||
|  | ||||
|       i { | ||||
|         font-size: 30px; | ||||
|         color: #E1E2E3; | ||||
|       } | ||||
|  | ||||
|       h2 { | ||||
|         flex: 1; | ||||
|         padding: 0 18px; | ||||
|         color: #333333; | ||||
|         font-size: 28px; | ||||
|         font-weight: normal; | ||||
|         overflow: hidden; | ||||
|         text-overflow: ellipsis; | ||||
|         white-space: nowrap; | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   .form-list { | ||||
|     display: flex; | ||||
|     flex-wrap: wrap; | ||||
|     padding: 0 32px 0; | ||||
|  | ||||
|     div { | ||||
|       box-sizing: border-box; | ||||
|     } | ||||
|  | ||||
|     .form-list__item { | ||||
|       width: calc(50% - 13px); | ||||
|       height: 216px; | ||||
|       margin: 32px 24px 0 0; | ||||
|       padding: 40px 20px 52px; | ||||
|       background-color: #FFFFFF; | ||||
|       border-radius: 8px; | ||||
|       background-size: 100% 100%; | ||||
|  | ||||
|       &:active { | ||||
|         background-color: #eee; | ||||
|       } | ||||
|  | ||||
|       &:nth-of-type(2n) { | ||||
|         margin-right: 0; | ||||
|       } | ||||
|  | ||||
|       div { | ||||
|         width: 148px; | ||||
|         height: 48px; | ||||
|         line-height: 48px; | ||||
|         text-align: center; | ||||
|         color: #fff; | ||||
|         font-size: 28px; | ||||
|         background: #6BA1F9; | ||||
|         border-radius: 24px; | ||||
|       } | ||||
|  | ||||
|       h2 { | ||||
|         margin-bottom: 32px; | ||||
|         padding-left: 10px; | ||||
|         color: #333333; | ||||
|         font-weight: 700; | ||||
|         font-size: 32px; | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| } | ||||
| </style> | ||||
| @@ -2,21 +2,24 @@ | ||||
|   <div class="form-config"> | ||||
|     <div class="config-group"> | ||||
|       <div class="config-item"> | ||||
|         <u-input class="form-maintitle" :maxlength="200" v-model="config.label" :placeholder="`请输入${config.fixedLabel||''}标题 ${config.required ? '(必填)' : ''}`"  placeholder-style="color: #999999; font-weight: 600" /> | ||||
|         <u-input class="form-maintitle" :maxlength="200" v-model="config.label" | ||||
|                  :placeholder="`请输入${config.fixedLabel||''}标题 ${config.required ? '(必填)' : ''}`" | ||||
|                  placeholder-style="color: #999999; font-weight: 600"/> | ||||
|       </div> | ||||
|       <div class="config-item__select--wrapper" v-if="['radio', 'select', 'checkbox'].includes(config.type)"> | ||||
|         <div class="config-item__select" v-for="(item, index) in config.options" :key="index"> | ||||
|           <image class="config-icon" :src="`${$cdn}askform/del.png`" @click="removeOptions(index)" /> | ||||
|           <image class="config-icon" :src="`${$cdn}askform/del.png`" @click="removeOptions(index)"/> | ||||
|           <div class="config-item__upload" v-if="config.type !== 'select'" @click="upload(index)"> | ||||
|             <u-icon color="#8c9dc3" name="plus" v-if="!item.img.length"></u-icon> | ||||
|             <image v-else :src="item.img[0].url" /> | ||||
|             <image v-else :src="item.img[0].url"/> | ||||
|           </div> | ||||
|           <div class="textarea"> | ||||
|            <textarea type="textarea" placeholder-style="color: #CDCDCF" :auto-height="true" v-model="item.label" :maxlength="100" placeholder="请输入选项" /> | ||||
|             <textarea type="textarea" placeholder-style="color: #CDCDCF" :auto-height="true" v-model="item.label" | ||||
|                       :maxlength="100" placeholder="请输入选项"/> | ||||
|           </div> | ||||
|         </div> | ||||
|         <div class="config-item__select config-item__select--add" @click="addOptions"> | ||||
|           <image class="config-icon" :src="`${$cdn}askform/zj.png`" /> | ||||
|           <image class="config-icon" :src="`${$cdn}askform/zj.png`"/> | ||||
|           <span>添加选项</span> | ||||
|         </div> | ||||
|       </div> | ||||
| @@ -27,7 +30,7 @@ | ||||
|           <span>说明文字</span> | ||||
|         </div> | ||||
|         <div class="config-item__right"> | ||||
|           <u-input v-model="config.placeholder" placeholder="请输入说明文字" input-align="right" /> | ||||
|           <u-input v-model="config.placeholder" placeholder="请输入说明文字" input-align="right"/> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="config-item"> | ||||
| @@ -35,7 +38,8 @@ | ||||
|           <span>是否必填</span> | ||||
|         </div> | ||||
|         <div class="config-item__right"> | ||||
|           <u-switch v-model="config.required" active-value="1" inactive-value="0" :size="40" active-color="#1088F9"></u-switch> | ||||
|           <u-switch v-model="config.required" active-value="1" inactive-value="0" :size="40" | ||||
|                     active-color="#1088F9"></u-switch> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="config-item" v-if="!['upload'].includes(config.type)"> | ||||
| @@ -51,10 +55,11 @@ | ||||
|           <span>正确答案</span> | ||||
|         </div> | ||||
|         <div class="config-item__right"> | ||||
|           <u-input v-model="config.answer" placeholder="请输入正确答案" input-align="right" /> | ||||
|           <u-input v-model="config.answer" placeholder="请输入正确答案" input-align="right"/> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="config-item" v-if="['radio', 'select'].includes(config.type) && config.isShowPoints && config.pointType === '0'"> | ||||
|       <div class="config-item" | ||||
|            v-if="['radio', 'select'].includes(config.type) && config.isShowPoints && config.pointType === '0'"> | ||||
|         <div class="config-item__left"> | ||||
|           <span>正确答案</span> | ||||
|         </div> | ||||
| @@ -63,22 +68,25 @@ | ||||
|           <u-icon name="arrow-down-fill" color="#c0c4cc" size="24"></u-icon> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="config-item config-item__checkbox" v-if="config.isShowPoints && ['radio', 'select', 'checkbox'].includes(config.type)"> | ||||
|       <div class="config-item config-item__checkbox" | ||||
|            v-if="config.isShowPoints && ['radio', 'select', 'checkbox'].includes(config.type)"> | ||||
|         <div class="config-item__left"> | ||||
|           <span>计分方式</span> | ||||
|         </div> | ||||
|         <div class="config-item__right" @click="isShowType = true"> | ||||
|           <span>{{ pointTypeName ? pointTypeName : '请选择' }}</span> | ||||
|           <u-icon name="arrow-right" color="#E1E2E3" /> | ||||
|           <u-icon name="arrow-right" color="#E1E2E3"/> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="config-item config-item__answer config-item__checkbox" v-if="['checkbox'].includes(config.type) && config.isShowPoints && config.pointType === '0'"> | ||||
|       <div class="config-item config-item__answer config-item__checkbox" | ||||
|            v-if="['checkbox'].includes(config.type) && config.isShowPoints && config.pointType === '0'"> | ||||
|         <div class="config-item__left"> | ||||
|           <span>正确答案</span> | ||||
|         </div> | ||||
|         <div class="config-item__right"> | ||||
|           <u-checkbox-group wrap @change="onCheckboxChange"> | ||||
|             <u-checkbox v-model="field.checked" :name="field.label"  v-if="field.label" v-for="(field, i) in config.options" :key="i"> | ||||
|             <u-checkbox v-model="field.checked" :name="field.label" v-if="field.label" | ||||
|                         v-for="(field, i) in config.options" :key="i"> | ||||
|               <span>{{ field.label }}</span> | ||||
|             </u-checkbox> | ||||
|           </u-checkbox-group> | ||||
| @@ -89,7 +97,7 @@ | ||||
|           <span>本题分值</span> | ||||
|         </div> | ||||
|         <div class="config-item__right"> | ||||
|           <u-input v-model="config.points" type="number" placeholder="请输入本题分值" input-align="right" /> | ||||
|           <u-input v-model="config.points" type="number" placeholder="请输入本题分值" input-align="right"/> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div v-if="config.isShowPoints && config.pointType === '1'"> | ||||
| @@ -98,15 +106,16 @@ | ||||
|             <span>{{ item.label }}</span> | ||||
|           </div> | ||||
|           <div class="config-item__right"> | ||||
|             <u-input v-model="item.point" placeholder="请输入分值" input-align="right" /> | ||||
|             <u-input v-model="item.point" placeholder="请输入分值" input-align="right"/> | ||||
|           </div> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="config-item config-item__point" v-if="config.isShowPoints && config.pointType === '2'"> | ||||
|         <u-checkbox-group wrap @change="onCheckboxChange"> | ||||
|           <u-checkbox v-model="field.checked" :name="field.label" v-if="field.label" v-for="(field, i) in config.options" :key="i"> | ||||
|           <u-checkbox v-model="field.checked" :name="field.label" v-if="field.label" | ||||
|                       v-for="(field, i) in config.options" :key="i"> | ||||
|             <span>{{ field.label }}</span> | ||||
|             <u-input v-model="field.point" type="number" placeholder="请输入分值" input-align="right" /> | ||||
|             <u-input v-model="field.point" type="number" placeholder="请输入分值" input-align="right"/> | ||||
|           </u-checkbox> | ||||
|         </u-checkbox-group> | ||||
|       </div> | ||||
| @@ -115,12 +124,14 @@ | ||||
|           <span>全部答对</span> | ||||
|         </div> | ||||
|         <div class="config-item__right"> | ||||
|           <u-input v-model="config.points" type="number" placeholder="请输入全部答对分值" input-align="right" /> | ||||
|           <u-input v-model="config.points" type="number" placeholder="请输入全部答对分值" input-align="right"/> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
|     <u-select :list="config.options" :default-value="defaultAnswer" value-name="value" label-name="label" v-model="isShowAnswer" @confirm="answerChange"></u-select> | ||||
|     <u-select :list="config.pointDict" :default-value="defaultType" value-name="dictValue" label-name="dictName" v-model="isShowType" @confirm="pointTypeChange"></u-select> | ||||
|     <u-select :list="config.options" :default-value="defaultAnswer" value-name="value" label-name="label" | ||||
|               v-model="isShowAnswer" @confirm="answerChange"></u-select> | ||||
|     <u-select :list="config.pointDict" :default-value="defaultType" value-name="dictValue" label-name="dictName" | ||||
|               v-model="isShowType" @confirm="pointTypeChange"></u-select> | ||||
|     <div class="add-form__footer"> | ||||
|       <div @click="back"> | ||||
|         <span>取消</span> | ||||
| @@ -131,20 +142,20 @@ | ||||
| </template> | ||||
| 
 | ||||
| <script> | ||||
| import { components } from './config' | ||||
| import {components} from './config' | ||||
| 
 | ||||
| export default { | ||||
|   props: ['filed', 'index', 'filedType'], | ||||
| 
 | ||||
|   data () { | ||||
|   data() { | ||||
|     return { | ||||
|       isShowType: false, | ||||
|       isShowAnswer: false, | ||||
|       config: { | ||||
|       } | ||||
|       config: {} | ||||
|     } | ||||
|   }, | ||||
| 
 | ||||
|   mounted () { | ||||
|   mounted() { | ||||
|     if (this.index !== '') { | ||||
|       this.config = this.filed | ||||
|       return false | ||||
| @@ -155,19 +166,19 @@ export default { | ||||
|   }, | ||||
| 
 | ||||
|   computed: { | ||||
|     pointTypeName () { | ||||
|     pointTypeName() { | ||||
|       if (!this.config.pointDict) return '' | ||||
| 
 | ||||
|       return this.config.pointDict.filter(v => v.dictValue === this.config.pointType)[0].dictName | ||||
|     }, | ||||
| 
 | ||||
|     defaultType () { | ||||
|     defaultType() { | ||||
|       if (!this.config.pointType) return [0] | ||||
| 
 | ||||
|       return [Number(this.config.pointType)] | ||||
|     }, | ||||
| 
 | ||||
|     defaultAnswer () { | ||||
|     defaultAnswer() { | ||||
|       if (!this.config.answer) return [0] | ||||
| 
 | ||||
|       let index = 0 | ||||
| @@ -184,20 +195,20 @@ export default { | ||||
|   }, | ||||
| 
 | ||||
|   methods: { | ||||
|     answerChange (e) { | ||||
|     answerChange(e) { | ||||
|       this.config.answer = e[0].label | ||||
|     }, | ||||
| 
 | ||||
|     pointTypeChange (e) { | ||||
|     pointTypeChange(e) { | ||||
|       console.log(e) | ||||
|       this.config.pointType = e[0].value | ||||
|     }, | ||||
| 
 | ||||
|     onCheckboxChange (e) { | ||||
|     onCheckboxChange(e) { | ||||
|       this.config.answer = e | ||||
|     }, | ||||
| 
 | ||||
|     upload (index) { | ||||
|     upload(index) { | ||||
|       let params = { | ||||
|         count: 1, | ||||
|         sizeType: ['compressed'], | ||||
| @@ -217,7 +228,7 @@ export default { | ||||
|       uni.chooseImage(params) | ||||
|     }, | ||||
| 
 | ||||
|     uploadFile (img, index) { | ||||
|     uploadFile(img, index) { | ||||
|       uni.showLoading({title: '上传中'}) | ||||
|       let formData = new FormData() | ||||
|       formData.append('file', img) | ||||
| @@ -233,7 +244,7 @@ export default { | ||||
|       }) | ||||
|     }, | ||||
| 
 | ||||
|     removeOptions (index) { | ||||
|     removeOptions(index) { | ||||
|       const len = this.config.options.length | ||||
|       const label = this.config.options[index].label | ||||
|       if (len === 2) { | ||||
| @@ -254,11 +265,11 @@ export default { | ||||
|       this.config.options.splice(index, 1) | ||||
|     }, | ||||
| 
 | ||||
|     back () { | ||||
|     back() { | ||||
|       this.$emit('back') | ||||
|     }, | ||||
| 
 | ||||
|     confirm () { | ||||
|     confirm() { | ||||
|       uni.$emit('filedConfig', { | ||||
|         config: this.config, | ||||
|         index: this.index === '' ? '-1' : this.index | ||||
| @@ -267,11 +278,11 @@ export default { | ||||
|       this.back() | ||||
|     }, | ||||
| 
 | ||||
|     addOptions () { | ||||
|     addOptions() { | ||||
|       const len = this.config.options.length | ||||
|       let label = `选项${len + 1}` | ||||
| 
 | ||||
|       const index= this.config.options.findIndex(v => label === v.label) | ||||
|       const index = this.config.options.findIndex(v => label === v.label) | ||||
|       if (index > -1) { | ||||
|         label = `新选项${len + 1}` | ||||
|       } | ||||
| @@ -289,7 +300,7 @@ export default { | ||||
| </script> | ||||
| 
 | ||||
| <style lang="scss" scoped> | ||||
|   .form-config { | ||||
| .form-config { | ||||
|   box-sizing: border-box; | ||||
|   padding-bottom: 130px; | ||||
| 
 | ||||
| @@ -383,7 +394,7 @@ export default { | ||||
|         font-size: 28px; | ||||
| 
 | ||||
|         span { | ||||
|             max-width: 400rpx; | ||||
|           max-width: 400 rpx; | ||||
|           line-height: 1.2; | ||||
|         } | ||||
|       } | ||||
| @@ -421,7 +432,8 @@ export default { | ||||
|         padding: 20px 0; | ||||
| 
 | ||||
|         .config-item__left { | ||||
|             margin-bottom: 32rpx; | ||||
|           margin-bottom: 32 rpx; | ||||
| 
 | ||||
|           span { | ||||
|             word-break: break-all; | ||||
|             color: #333; | ||||
| @@ -449,6 +461,7 @@ export default { | ||||
|         // justify-content: flex-end; | ||||
|       } | ||||
|     } | ||||
| 
 | ||||
|     .config-item__point { | ||||
|       height: auto; | ||||
|       padding: 0; | ||||
| @@ -530,5 +543,5 @@ export default { | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|   } | ||||
| } | ||||
| </style> | ||||
| @@ -5,14 +5,14 @@ | ||||
|       <div class="setting-item"> | ||||
|         <div class="setting-item__left"> | ||||
|           <span>截止时间</span> | ||||
|           <image :src="`${$cdn}askform/bz.png`" @click="tips = '表单截止后,用户打开表单会提示此表单已结束' , isShowModal = true" /> | ||||
|           <image :src="`${$cdn}askform/bz.png`" @click="tips = '表单截止后,用户打开表单会提示此表单已结束' , isShowModal = true"/> | ||||
|         </div> | ||||
|         <div class="setting-item__right"> | ||||
|           <u-radio-group v-model="periodValidityType" active-color="#1088F9"> | ||||
|             <u-radio name="0" label="永久有效" style="padding-right: 20rpx;">永久有效</u-radio> | ||||
|             <u-radio name="1" label="自定义时间">自定义时间</u-radio> | ||||
|           </u-radio-group> | ||||
|           <u-icon name="arrow-right" color="#E1E2E3" /> | ||||
|           <u-icon name="arrow-right" color="#E1E2E3"/> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="setting-item" v-if="periodValidityType === '1'" @click="isShowTime = true"> | ||||
| @@ -21,13 +21,13 @@ | ||||
|         </div> | ||||
|         <div class="setting-item__right"> | ||||
|           <span>{{ periodValidityEndTime }}</span> | ||||
|           <u-icon name="arrow-right" color="#E1E2E3" /> | ||||
|           <u-icon name="arrow-right" color="#E1E2E3"/> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="setting-item"> | ||||
|         <div class="setting-item__left"> | ||||
|           <span>匹配客户方式</span> | ||||
|           <image :src="`${$cdn}askform/bz.png`" @click="tips = '将参与活动的微信客户和企业微信客户匹配' , isShowModal = true" /> | ||||
|           <image :src="`${$cdn}askform/bz.png`" @click="tips = '将参与活动的微信客户和企业微信客户匹配' , isShowModal = true"/> | ||||
|         </div> | ||||
|         <div class="setting-item__right"> | ||||
|           <span>客户微信ID匹配</span> | ||||
| @@ -36,7 +36,7 @@ | ||||
|       <div class="setting-item"> | ||||
|         <div class="setting-item__left"> | ||||
|           <span>提交次数</span> | ||||
|           <image :src="`${$cdn}askform/bz.png`" @click="tips = '此功能发布后不可修改' , isShowModal = true" /> | ||||
|           <image :src="`${$cdn}askform/bz.png`" @click="tips = '此功能发布后不可修改' , isShowModal = true"/> | ||||
|         </div> | ||||
|         <div class="setting-item__right"> | ||||
|           <u-radio-group v-model="commitType" active-color="#1088F9"> | ||||
| @@ -71,7 +71,8 @@ | ||||
|       <div @click="confirm">{{ type === 'edit' ? '发布' : '确定' }}</div> | ||||
|     </div> | ||||
|     <u-modal v-model="isShowModal" :content="tips"></u-modal> | ||||
|     <u-picker mode="time" v-model="isShowTime" :show-time-tag="true"  @close="isShowTime = false" @confirm="onTimeChange" :params="params"></u-picker> | ||||
|     <u-picker mode="time" v-model="isShowTime" :show-time-tag="true" @close="isShowTime = false" @confirm="onTimeChange" | ||||
|               :params="params"></u-picker> | ||||
|   </div> | ||||
| </template> | ||||
| 
 | ||||
| @@ -79,7 +80,7 @@ | ||||
| export default { | ||||
|   props: ['id', 'formConfig', 'type'], | ||||
| 
 | ||||
|   data () { | ||||
|   data() { | ||||
|     return { | ||||
|       params: { | ||||
|         year: true, | ||||
| @@ -101,7 +102,7 @@ export default { | ||||
|     } | ||||
|   }, | ||||
| 
 | ||||
|   mounted () { | ||||
|   mounted() { | ||||
|     if (this.id) { | ||||
|       this.id = this.id | ||||
|       this.getInfo(this.id) | ||||
| @@ -120,15 +121,15 @@ export default { | ||||
|   }, | ||||
| 
 | ||||
|   methods: { | ||||
|     onTimeChange (e) { | ||||
|     onTimeChange(e) { | ||||
|       this.periodValidityEndTime = `${e.year}-${e.month}-${e.day} ${e.hour}:${e.minute}:${e.second}` | ||||
|     }, | ||||
| 
 | ||||
|     back () { | ||||
|     back() { | ||||
|       this.$emit('back') | ||||
|     }, | ||||
| 
 | ||||
|     getInfo (id) { | ||||
|     getInfo(id) { | ||||
|       this.$http.post(`/app/appquestionnairetemplate/queryDetailById?id=${id}`).then(res => { | ||||
|         if (res.code == 0) { | ||||
|           this.periodValidityType = res.data.periodValidityType | ||||
| @@ -145,7 +146,7 @@ export default { | ||||
|       }) | ||||
|     }, | ||||
| 
 | ||||
|     publish () { | ||||
|     publish() { | ||||
|       this.$http.post(`/app/appquestionnairetemplate/release`, null, { | ||||
|         params: { | ||||
|           commitType: this.commitType, | ||||
| @@ -169,7 +170,7 @@ export default { | ||||
|       }) | ||||
|     }, | ||||
| 
 | ||||
|     confirm () { | ||||
|     confirm() { | ||||
|       if (this.type === 'edit') { | ||||
|         this.publish() | ||||
| 
 | ||||
| @@ -191,7 +192,7 @@ export default { | ||||
| </script> | ||||
| 
 | ||||
| <style lang="scss" scoped> | ||||
|   .form-setting { | ||||
| .form-setting { | ||||
|   padding: 0 20px; | ||||
| 
 | ||||
|   .add-form__footer { | ||||
| @@ -308,5 +309,5 @@ export default { | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|   } | ||||
| } | ||||
| </style> | ||||
| @@ -27,7 +27,7 @@ | ||||
|           <span>{{ $dict.getLabel('questionnaireStatus', item.status) }}</span> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div style="height: 30rpx"></div> | ||||
|       <u-gap/> | ||||
|       <AiEmpty v-if="!list.length && isMore"></AiEmpty> | ||||
|     </scroll-view> | ||||
|     <u-popup v-model="isShow" :closeable="false" mode="bottom" :z-index="11"> | ||||
							
								
								
									
										163
									
								
								src/sass/AppAskForm/components/config.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										163
									
								
								src/sass/AppAskForm/components/config.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,163 @@ | ||||
| export const components = [ | ||||
|   { | ||||
|     type: 'radio', | ||||
|     label: '单选', | ||||
|     fixedLabel: '单选', | ||||
|     value: '', | ||||
|     points: '', | ||||
|     icon: 'iconradio', | ||||
|     isShowPoints: false, | ||||
|     required: true, | ||||
|     hasAnswer: false, | ||||
|     answer: '', | ||||
|     pointType: '0', | ||||
|     pointDict: [ | ||||
|       { | ||||
|         dictName: '此题有唯一答案和分值', | ||||
|         dictValue: '0' | ||||
|       }, | ||||
|       { | ||||
|         dictName: '每个选项都有对应分值', | ||||
|         dictValue: '1' | ||||
|       } | ||||
|     ], | ||||
|     options: [ | ||||
|       { | ||||
|         label: '选项1', | ||||
|         value: '', | ||||
|         point: '', | ||||
|         img: [] | ||||
|       }, | ||||
|       { | ||||
|         label: '选项2', | ||||
|         value: '', | ||||
|         point: '', | ||||
|         img: [] | ||||
|       } | ||||
|     ], | ||||
|     title: '' | ||||
|   }, | ||||
|   { | ||||
|     type: 'checkbox', | ||||
|     label: '多选', | ||||
|     fixedLabel: '多选', | ||||
|     points: '', | ||||
|     icon: 'iconcheck_box', | ||||
|     isShowPoints: false, | ||||
|     required: true, | ||||
|     hasAnswer: false, | ||||
|     answer: [], | ||||
|     value: [], | ||||
|     pointType: '0', | ||||
|     pointDict: [ | ||||
|       { | ||||
|         dictName: '此题有唯一答案和分值', | ||||
|         dictValue: '0' | ||||
|       }, | ||||
|       { | ||||
|         dictName: '每个选项都有对应分值', | ||||
|         dictValue: '1' | ||||
|       }, | ||||
|       { | ||||
|         dictName: '答对几项得几分,答错不得分', | ||||
|         dictValue: '2' | ||||
|       } | ||||
|     ], | ||||
|     options: [ | ||||
|       { | ||||
|         label: '选项1', | ||||
|         value: '', | ||||
|         point: '', | ||||
|         img: [], | ||||
|         checked: false | ||||
|       }, | ||||
|       { | ||||
|         label: '选项2', | ||||
|         point: '', | ||||
|         value: '', | ||||
|         img: [], | ||||
|         checked: false | ||||
|       } | ||||
|     ], | ||||
|     title: '' | ||||
|   }, | ||||
|   { | ||||
|     type: 'select', | ||||
|     label: '单下拉框', | ||||
|     fixedLabel: '单下拉框', | ||||
|     value: '', | ||||
|     points: '', | ||||
|     icon: 'iconSelect', | ||||
|     isShowPoints: false, | ||||
|     required: true, | ||||
|     hasAnswer: false, | ||||
|     answer: '', | ||||
|     pointType: '0', | ||||
|     placeholder: '请选择', | ||||
|     pointDict: [ | ||||
|       { | ||||
|         dictName: '此题有唯一答案和分值', | ||||
|         dictValue: '0' | ||||
|       }, | ||||
|       { | ||||
|         dictName: '每个选项都有对应分值', | ||||
|         dictValue: '1' | ||||
|       } | ||||
|     ], | ||||
|     options: [ | ||||
|       { | ||||
|         label: '选项1', | ||||
|         value: '', | ||||
|         point: '', | ||||
|         img: [] | ||||
|       }, | ||||
|       { | ||||
|         label: '选项2', | ||||
|         value: '', | ||||
|         point: '', | ||||
|         img: [] | ||||
|       } | ||||
|     ], | ||||
|     title: '' | ||||
|   }, | ||||
|   { | ||||
|     type: 'input', | ||||
|     label: '单行填空', | ||||
|     fixedLabel: '单行填空', | ||||
|     value: '', | ||||
|     pointType: '0', | ||||
|     icon: 'icontext_box', | ||||
|     isShowPoints: false, | ||||
|     points: '', | ||||
|     required: true, | ||||
|     hasAnswer: false, | ||||
|     placeholder: '请输入...', | ||||
|     answer: '' | ||||
|   }, | ||||
|   { | ||||
|     type: 'textarea', | ||||
|     label: '多行填空', | ||||
|     fixedLabel: '多行填空', | ||||
|     pointType: '0', | ||||
|     icon: 'icontext_area', | ||||
|     points: '', | ||||
|     isShowPoints: false, | ||||
|     required: true, | ||||
|     hasAnswer: false, | ||||
|     answer: '', | ||||
|     placeholder: '请输入...', | ||||
|     value: '' | ||||
|   }, | ||||
|   { | ||||
|     type: 'upload', | ||||
|     label: '上传图片', | ||||
|     fixedLabel: '上传图片', | ||||
|     value: '', | ||||
|     icon: 'iconpic', | ||||
|     isShowPoints: false, | ||||
|     points: '', | ||||
|     required: true, | ||||
|     hasAnswer: false, | ||||
|     answer: '' | ||||
|   } | ||||
| ]; | ||||
| @@ -59,7 +59,7 @@ import meetingList from './meetingList'; | ||||
| export default { | ||||
|   name: "AppMeetingNotice", | ||||
|   appName: "会议通知", | ||||
|   components: { addMeeting, belongToMe, detail, meetingList}, | ||||
|   components: {addMeeting, belongToMe, detail, meetingList}, | ||||
|   data() { | ||||
|     return { | ||||
|       meetingList: [], | ||||
| @@ -96,9 +96,9 @@ export default { | ||||
|         "3": "common/toDo.png", | ||||
|       }[status] | ||||
|     }, | ||||
|     handleDetail({id}){ | ||||
|     handleDetail({id}) { | ||||
|       uni.navigateTo({ | ||||
|         url:"/apps/AppMeetingNotice/detail?id=" + id | ||||
|         url: "/apps/AppMeetingNotice/detail?id=" + id | ||||
|       }) | ||||
|     }, | ||||
|     getData() { | ||||
| @@ -114,12 +114,12 @@ export default { | ||||
|         } | ||||
|       }) | ||||
|     }, | ||||
|     handleClick(index){ | ||||
|     handleClick(index) { | ||||
|       let url | ||||
|       if(index==0 || index==2){ | ||||
|         url="/apps/AppMeetingNotice/meetingList?index=" + index | ||||
|       }else if(index==1){ | ||||
|         url="/apps/AppMeetingNotice/belongToMe" | ||||
|       if (index == 0 || index == 2) { | ||||
|         url = "/apps/AppMeetingNotice/meetingList?index=" + index | ||||
|       } else if (index == 1) { | ||||
|         url = "/apps/AppMeetingNotice/belongToMe" | ||||
|       } | ||||
|       uni.navigateTo({url}) | ||||
|     }, | ||||
| @@ -128,23 +128,23 @@ export default { | ||||
|   }, | ||||
| 
 | ||||
|   onLoad(opt) { | ||||
|     if(opt.id) { | ||||
|     if (opt.id) { | ||||
|       this.form.id = opt.id | ||||
|       this.getDetail() | ||||
|     } | ||||
| 
 | ||||
|     this.$nextTick(()=>{ | ||||
|     this.$nextTick(() => { | ||||
|       let date = new Date(); | ||||
|       this.form.startTime.time = date.getHours()?.toString()?.padStart(2, "0") + ":" + date.getMinutes()?.toString()?.padStart(2, "0") | ||||
|       this.form.startTime.year = date.getFullYear() | ||||
|       this.form.startTime.month = (date.getMonth()+1)?.toString()?.padStart(2, "0") | ||||
|       this.form.startTime.month = (date.getMonth() + 1)?.toString()?.padStart(2, "0") | ||||
|       this.form.startTime.day = date.getDate() | ||||
|       this.form.startTime.weekday = '日一二三四五六'.charAt(date.getDay()) | ||||
|       this.form.endTime = {...this.form.startTime} | ||||
|     }) | ||||
|   }, | ||||
| 
 | ||||
|   onShow(){ | ||||
|   onShow() { | ||||
|     document.title = "新增会议"; | ||||
|     this.$dict.load("meetingNoticeBefore", "meetingNoticeAfter"); | ||||
|   }, | ||||
| @@ -10,12 +10,16 @@ | ||||
|           <u-row justify="between"> | ||||
|             <div class="time"> | ||||
|               <span>{{ item.startTime|formatTime }}</span> | ||||
|               <span>{{ item.startTime|formatDate(0) }}年{{ item.startTime|formatDate(1) }}月{{ item.startTime|formatDate(2) }}日 周{{ item.startTime|formatWeek }}</span> | ||||
|               <span>{{ item.startTime|formatDate(0) }}年{{ | ||||
|                   item.startTime|formatDate(1) | ||||
|                 }}月{{ item.startTime|formatDate(2) }}日 周{{ item.startTime|formatWeek }}</span> | ||||
|             </div> | ||||
|             <div class="arrow"></div> | ||||
|             <div class="time"> | ||||
|               <span>{{ item.endTime|formatTime }}</span> | ||||
|               <span>{{ item.endTime|formatDate(0) }}年{{ item.endTime|formatDate(1) }}月{{ item.endTime|formatDate(2) }}日 周{{ item.endTime|formatWeek }}</span> | ||||
|               <span>{{ item.endTime|formatDate(0) }}年{{ item.endTime|formatDate(1) }}月{{ item.endTime|formatDate(2) }}日 周{{ | ||||
|                   item.endTime|formatWeek | ||||
|                 }}</span> | ||||
|             </div> | ||||
|           </u-row> | ||||
|           <u-row class="info"> | ||||
| @@ -63,7 +67,7 @@ export default { | ||||
|     } | ||||
|   }, | ||||
|   onShow() { | ||||
|     document.title="我发起的"; | ||||
|     document.title = "我发起的"; | ||||
|   }, | ||||
|   created() { | ||||
|     this.injectJWeixin(['sendChatMessage']).then(() => { | ||||
							
								
								
									
										561
									
								
								src/sass/AppMeetingNotice/detail.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										561
									
								
								src/sass/AppMeetingNotice/detail.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,561 @@ | ||||
| <template> | ||||
|   <div class="detail" v-if="pageShow"> | ||||
|     <template v-if="!list"> | ||||
|       <div class="card"> | ||||
|         <header>{{ detail.title }}</header> | ||||
|         <u-gap height="16"></u-gap> | ||||
|         <u-row v-if="detail.createUserId"> | ||||
|           <!--          <u-avatar :src="$cdn + 'common/xzh.png'" v-if="false"></u-avatar>--> | ||||
|           <div class="u-avatar__img"> | ||||
|             <AiOpenData type="userName" :openid="detail.createUserId"></AiOpenData> | ||||
|           </div> | ||||
|           <span class="user-name"> | ||||
|             <AiOpenData type="userName" :openid="detail.createUserId"></AiOpenData> | ||||
|           </span> | ||||
|         </u-row> | ||||
|         <u-gap height="32"></u-gap> | ||||
|         <u-row> | ||||
|           <img :src="$cdn + 'common/meeting.png'" alt=""> | ||||
|           <span :style="{color:color(detail.status)}">{{ $dict.getLabel('meetStatus', detail.status) }}</span> | ||||
|         </u-row> | ||||
|         <u-gap height="8"></u-gap> | ||||
|         <u-row> | ||||
|           <img :src="$cdn + 'common/date.png'" alt=""> | ||||
|           <span>{{ | ||||
|               detail.startTime && detail.startTime.substr(0, 16) | ||||
|             }} 至 {{ detail.endTime && detail.endTime.substr(0, 16) }}</span> | ||||
|         </u-row> | ||||
|         <u-gap height="8"></u-gap> | ||||
|         <u-row style="align-items: start;flex-wrap: nowrap;"> | ||||
|           <img :src="$cdn + 'common/location.png'" alt=""> | ||||
|           <span>{{ detail.address }}</span> | ||||
|         </u-row> | ||||
|       </div> | ||||
|       <div class="card"> | ||||
|         <span>{{ detail.content }}</span> | ||||
|       </div> | ||||
|       <div class="card" v-if="detail.files && detail.files.length"> | ||||
|         <div class="label">相关附件</div> | ||||
|         <div class="file" v-for="(item,index) in detail.files" @click="preFile(item)" :key="index"> | ||||
|           <u-row justify="between"> | ||||
|             <label class="left"> | ||||
|               <img :src="$cdn + 'common/appendix.png'" alt=""> | ||||
|               <span>{{ item.fileName }}.{{ item.postfix }}</span> | ||||
|             </label> | ||||
|             <span>{{ item.fileSizeStr }}</span> | ||||
|           </u-row> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="card item-wrap"> | ||||
|         <u-row justify="between"> | ||||
|           <span>参会人</span> | ||||
|           <label class="right" @click="list=true"> | ||||
|             查看全部<em>{{ detail.attendees && detail.attendees.length }}</em>人 | ||||
|             <div class="right-arrow"></div> | ||||
|           </label> | ||||
|         </u-row> | ||||
|       </div> | ||||
|  | ||||
|       <div class="footer cancel" v-if="detail.status==1 && detail.createUserId == user.id" @click="handleCancel">取消会议 | ||||
|       </div> | ||||
|  | ||||
|       <template v-else> | ||||
|         <div class="footer" v-if="['1','2'].includes(detail.status) && ['0','3'].includes(detail.joinStatus)"> | ||||
|           <div class="leave" @click="updateStatus(0)"> | ||||
|             <img :src="$cdn + 'sass/leave.png'" alt="">请假 | ||||
|           </div> | ||||
|           <div @click="toDo" class="leave"> | ||||
|             <img :src="$cdn + 'sass/toBe.png'" alt="">待定 | ||||
|           </div> | ||||
|           <div @click="updateStatus(1)">确认会议</div> | ||||
|         </div> | ||||
|  | ||||
|         <!--        <div class="footer" v-if="['1','2'].includes(detail.status) && detail.joinStatus!=0">--> | ||||
|         <!--          <label>{{ detail.joinStatus|transform }}</label>--> | ||||
|         <!--          <img :src="$cdn + tag(detail.joinStatus)" alt="">--> | ||||
|         <!--        </div>--> | ||||
|       </template> | ||||
|  | ||||
|     </template> | ||||
|     <template v-else> | ||||
|       <div class="att-list"> | ||||
|         <AiTopFixed> | ||||
|           <u-tabs :list="tabs" :current="current" height="96" :is-scroll="false" bar-width="192" | ||||
|                   @change="change"></u-tabs> | ||||
|         </AiTopFixed> | ||||
|         <div v-for="(item,index) in detail.attendees && detail.attendees.filter(e=>e.joinStatus==current)" :key="index" | ||||
|              class="att-wrap"> | ||||
|           <div class="left"> | ||||
|             <u-avatar :src="item.avatar || (($cdn + 'common/xztx.png'))" size="74" mode="square" | ||||
|                       style="margin-right: 8px"></u-avatar> | ||||
|             <AiOpenData type="userName" :openid="item.name"></AiOpenData> | ||||
|           </div> | ||||
|           <!--          <img :src="$cdn + 'common/phone.png'" alt="" @click="call(item)">--> | ||||
|         </div> | ||||
|       </div> | ||||
|     </template> | ||||
|     <u-modal v-model="show" title="提示" show-cancel-button content='是否要取消该会议?' @confirm="onConfirm"></u-modal> | ||||
|     <AiBack/> | ||||
|   </div> | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
| import {mapActions, mapState} from "vuex"; | ||||
|  | ||||
| export default { | ||||
|   name: "detail", | ||||
|   data() { | ||||
|     return { | ||||
|       detail: {}, | ||||
|       list: false, | ||||
|       current: 0, | ||||
|       pageShow: false, | ||||
|       show: false, | ||||
|       id: null, | ||||
|     } | ||||
|   }, | ||||
|   onLoad(opt) { | ||||
|     this.id = opt.id; | ||||
|   }, | ||||
|   computed: { | ||||
|     ...mapState(["user"]), | ||||
|     tabs() { | ||||
|       return [ | ||||
|         {name: this.count(0) + "人未确认"}, | ||||
|         {name: this.count(1) + "人已确认"}, | ||||
|         {name: this.count(2) + "人已请假"}, | ||||
|         {name: this.count(3) + "人待定"}, | ||||
|       ] | ||||
|     }, | ||||
|   }, | ||||
|   methods: { | ||||
|     onConfirm() { | ||||
|       this.$http.post("/app/appmeetinginfo/cancel", null, { | ||||
|         params: { | ||||
|           meetingId: this.id, | ||||
|         } | ||||
|       }).then(res => { | ||||
|         if (res.code == 0) { | ||||
|           this.$u.toast("取消成功"); | ||||
|           this.getDetail(); | ||||
|         } | ||||
|       }) | ||||
|     }, | ||||
|     handleCancel() { | ||||
|       this.show = true; | ||||
|     }, | ||||
|     toDo() { | ||||
|       this.$http.post("/app/appmeetinginfo/tobeConfirm", null, { | ||||
|         params: { | ||||
|           meetingId: this.id, | ||||
|         } | ||||
|       }).then(res => { | ||||
|         if (res.code == 0) { | ||||
|           this.$u.toast("会议待定"); | ||||
|           setTimeout(_ => { | ||||
|             uni.navigateBack(); | ||||
|           }, 800) | ||||
|         } | ||||
|       }) | ||||
|     }, | ||||
|     count(sta) { | ||||
|       return this.detail.attendees ? this.detail.attendees?.filter(e => e.joinStatus == sta)?.length : 0; | ||||
|     }, | ||||
|     change(index) { | ||||
|       this.current = index; | ||||
|       this.detail = {}; | ||||
|       this.getDetail(); | ||||
|     }, | ||||
|     call(item) { | ||||
|       if (item.phone) { | ||||
|         uni.makePhoneCall({ | ||||
|           phoneNumber: item.phone | ||||
|         }); | ||||
|       } | ||||
|     }, | ||||
|     ...mapActions(['previewFile', 'injectJWeixin']), | ||||
|     preFile(e) { | ||||
|       if ([".jpg", ".png", ".gif"].includes(e.postfix.toLowerCase())) { | ||||
|         uni.previewImage({ | ||||
|           current: e.url, | ||||
|           urls: [e.url] | ||||
|         }) | ||||
|       } else { | ||||
|         this.previewFile({...e}) | ||||
|       } | ||||
|     }, | ||||
|     tag(status) { | ||||
|       return { | ||||
|         "1": "common/2confirmed2.png", | ||||
|         "2": "common/2absent2.png" | ||||
|       }[status] | ||||
|     }, | ||||
|     updateStatus(status) { | ||||
|       this.$http.post(status == 0 ? "/app/appmeetinginfo/absent" : "/app/appmeetinginfo/confirm", null, { | ||||
|         params: { | ||||
|           meetingId: this.id, | ||||
|           reason: status == 0 ? "" : null | ||||
|         } | ||||
|       }).then(res => { | ||||
|         if (res.code == 0) { | ||||
|           this.$u.toast(status == 0 ? "请假成功" : "确认成功") | ||||
|           this.getDetail() | ||||
|         } | ||||
|       }) | ||||
|     }, | ||||
|     color(status) { | ||||
|       if (status == 1) { | ||||
|         return "#FF8822" | ||||
|       } | ||||
|  | ||||
|       if (status == 2) { | ||||
|         return "#1365DD" | ||||
|       } | ||||
|  | ||||
|       if (status == 3) { | ||||
|         return "#FF4466" | ||||
|       } | ||||
|  | ||||
|       return "#343D65" | ||||
|     }, | ||||
|     getDetail() { | ||||
|       this.$http.post("/app/appmeetinginfo/info-id", null, { | ||||
|         params: {id: this.id} | ||||
|       }).then(res => { | ||||
|         if (res && res.data) { | ||||
|           this.detail = res.data | ||||
|           this.pageShow = true | ||||
|         } | ||||
|       }) | ||||
|     } | ||||
|   }, | ||||
|   created() { | ||||
|     this.injectJWeixin(['sendChatMessage']).then(() => { | ||||
|       this.getDetail() | ||||
|     }) | ||||
|   }, | ||||
|  | ||||
|   onShow() { | ||||
|     document.title = "会议详情"; | ||||
|     this.$dict.load("meetStatus"); | ||||
|     wx.hideOptionMenu(); | ||||
|   }, | ||||
|   filters: { | ||||
|     transform(status) { | ||||
|       if (status == 1) { | ||||
|         return "已确认" | ||||
|       } | ||||
|       if (status == 2) { | ||||
|         return "已请假" | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| } | ||||
| </script> | ||||
|  | ||||
| <style lang="scss" scoped> | ||||
| .detail { | ||||
|   min-height: 100%; | ||||
|   background-color: #F5F5F5; | ||||
|   padding-bottom: 140px; | ||||
|  | ||||
|  | ||||
|   ::v-deep .AiTopFixed { | ||||
|     margin-bottom: 16px; | ||||
|  | ||||
|     .content { | ||||
|       padding: 0 !important; | ||||
|     } | ||||
|   } | ||||
|  | ||||
|  | ||||
|   .att-list { | ||||
|     min-height: 100%; | ||||
|  | ||||
|     .att-wrap { | ||||
|       display: flex; | ||||
|       height: 112px; | ||||
|       align-items: center; | ||||
|       justify-content: space-between; | ||||
|       background-color: #ffffff; | ||||
|       box-sizing: border-box; | ||||
|       padding: 0 50px; | ||||
|       border-bottom: 1px solid #E4E5E6; | ||||
|  | ||||
|       .left { | ||||
|         display: flex; | ||||
|         align-items: center; | ||||
|  | ||||
|         &:after { | ||||
|           content: ""; | ||||
|           position: absolute; | ||||
|           right: 0; | ||||
|           bottom: 0; | ||||
|           width: 622px; | ||||
|           height: 2px; | ||||
|           background-color: rgba(216, 221, 230, 0.5); | ||||
|         } | ||||
|  | ||||
|         .name { | ||||
|           font-size: 30px; | ||||
|           font-weight: 600; | ||||
|           color: #333333; | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       & > img { | ||||
|         width: 48px; | ||||
|         height: 48px; | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   .card { | ||||
|     background-color: #FFFFFF; | ||||
|     margin-bottom: 8px; | ||||
|     box-sizing: border-box; | ||||
|     padding: 16px 32px; | ||||
|  | ||||
|     header { | ||||
|       font-size: 40px; | ||||
|       font-weight: 600; | ||||
|       color: #333333; | ||||
|       line-height: 64px; | ||||
|       letter-spacing: 1px; | ||||
|     } | ||||
|  | ||||
|     .u-row { | ||||
|       & > div { | ||||
|         border-radius: 50%; | ||||
|         text-align: center; | ||||
|         font-size: 30px; | ||||
|         display: flex; | ||||
|         align-items: center; | ||||
|         justify-content: center; | ||||
|         /*margin-left: 8px;*/ | ||||
|       } | ||||
|  | ||||
|       & > span { | ||||
|         font-size: 30px; | ||||
|         color: #343D65; | ||||
|         margin-left: 16px; | ||||
|       } | ||||
|  | ||||
|       ::v-deep .u-avatar__img { | ||||
|         width: 56px; | ||||
|         height: 56px; | ||||
|         vertical-align: middle; | ||||
|         color: #ffffff; | ||||
|         background-color: #2266FF; | ||||
|         font-size: 16px; | ||||
|       } | ||||
|  | ||||
|       .user-name { | ||||
|         font-size: 30px; | ||||
|         color: #343D65; | ||||
|       } | ||||
|  | ||||
|       img { | ||||
|         width: 48px; | ||||
|         height: 48px; | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     & > span { | ||||
|       font-size: 32px; | ||||
|       color: #333333; | ||||
|       line-height: 48px; | ||||
|       letter-spacing: 1px; | ||||
|       display: inline-block; | ||||
|       box-sizing: border-box; | ||||
|       padding: 16px 0; | ||||
|     } | ||||
|  | ||||
|     .label { | ||||
|       height: 96px; | ||||
|       font-size: 32px; | ||||
|       color: #333333; | ||||
|       display: flex; | ||||
|       align-items: center; | ||||
|       margin-bottom: 16px; | ||||
|     } | ||||
|  | ||||
|     .file { | ||||
|       height: 128px; | ||||
|       background: #FFFFFF; | ||||
|       border-radius: 8px; | ||||
|       border: 1px solid #CCCCCC; | ||||
|       box-sizing: border-box; | ||||
|       padding: 0 16px; | ||||
|       margin-bottom: 32px; | ||||
|  | ||||
|       & > .u-row { | ||||
|         height: 100%; | ||||
|  | ||||
|         .left { | ||||
|           width: 522px; | ||||
|           display: flex; | ||||
|           align-items: center; | ||||
|  | ||||
|           & > img { | ||||
|             width: 96px; | ||||
|             height: 96px; | ||||
|           } | ||||
|  | ||||
|           & > span { | ||||
|             font-size: 32px; | ||||
|             color: #333333; | ||||
|             display: inline-block; | ||||
|             line-height: 44px; | ||||
|             text-overflow: ellipsis; | ||||
|             overflow-x: hidden; | ||||
|             white-space: nowrap; | ||||
|           } | ||||
|         } | ||||
|  | ||||
|         & > span { | ||||
|           font-size: 28px; | ||||
|           color: #999999; | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     .active { | ||||
|       background-color: #F3F6F9; | ||||
|     } | ||||
|  | ||||
|     .name { | ||||
|       font-size: 32px; | ||||
|       font-weight: 400; | ||||
|       color: #333333; | ||||
|     } | ||||
|  | ||||
|     .wrap { | ||||
|       height: 112px; | ||||
|       display: flex; | ||||
|       align-items: center; | ||||
|       position: relative; | ||||
|  | ||||
|       &:after { | ||||
|         content: ""; | ||||
|         position: absolute; | ||||
|         right: 0; | ||||
|         bottom: 0; | ||||
|         width: 622px; | ||||
|         height: 2px; | ||||
|         background-color: rgba(216, 221, 230, 0.5); | ||||
|       } | ||||
|  | ||||
|       & > label { | ||||
|         width: 80px; | ||||
|         height: 80px; | ||||
|         border-radius: 50%; | ||||
|         background-color: #4E8EEE; | ||||
|         font-size: 28px; | ||||
|         font-weight: 600; | ||||
|         color: #FFFFFF; | ||||
|         display: flex; | ||||
|         align-items: center; | ||||
|         justify-content: center; | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   .item-wrap { | ||||
|     height: 112px; | ||||
|     padding: 0 32px; | ||||
|  | ||||
|     .u-row { | ||||
|       height: 100%; | ||||
|  | ||||
|       & > span { | ||||
|         font-size: 32px; | ||||
|         font-weight: 400; | ||||
|         color: #333333; | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     .right { | ||||
|       font-size: 28px; | ||||
|       color: #999999; | ||||
|       display: flex; | ||||
|       align-items: center; | ||||
|  | ||||
|       em { | ||||
|         font-style: normal; | ||||
|         color: #1365DD; | ||||
|       } | ||||
|  | ||||
|       .right-arrow { | ||||
|         width: 16px; | ||||
|         height: 16px; | ||||
|         border-top: 5px solid #CCCCCC; | ||||
|         border-right: 5px solid #CCCCCC; | ||||
|         transform: rotate(45deg); | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   .footer { | ||||
|     height: 112px; | ||||
|     width: 100%; | ||||
|     position: fixed; | ||||
|     left: 0; | ||||
|     bottom: 0; | ||||
|     background-color: #FFFFFF; | ||||
|     display: flex; | ||||
|     align-items: center; | ||||
|     justify-content: center; | ||||
|  | ||||
|     & > div { | ||||
|       font-size: 28px; | ||||
|       color: #666666; | ||||
|       display: flex; | ||||
|       flex-direction: column; | ||||
|  | ||||
|       & > img { | ||||
|         width: 48px; | ||||
|         height: 48px; | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     & > div:nth-child(1), & > div:nth-child(2) { | ||||
|       width: 135px; | ||||
|       height: 100%; | ||||
|       display: flex; | ||||
|       align-items: center; | ||||
|       justify-content: center; | ||||
|     } | ||||
|  | ||||
|     & > div:last-child { | ||||
|       width: calc(100% - 270px); | ||||
|       height: 100%; | ||||
|       color: #FFFFFF; | ||||
|       display: flex; | ||||
|       align-items: center; | ||||
|       justify-content: center; | ||||
|       background-color: #1365DD; | ||||
|     } | ||||
|  | ||||
|     & > label { | ||||
|       font-size: 36px; | ||||
|       font-weight: 400; | ||||
|       color: #999999; | ||||
|     } | ||||
|  | ||||
|     /*img {*/ | ||||
|     /*  width: 158px;*/ | ||||
|     /*  height: 104px;*/ | ||||
|     /*  position: absolute;*/ | ||||
|     /*  right: 0;*/ | ||||
|     /*  top: 0;*/ | ||||
|     /*}*/ | ||||
|   } | ||||
|  | ||||
|   .cancel { | ||||
|     color: #ffffff; | ||||
|     font-size: 36px; | ||||
|     background-color: #005DFF | ||||
|   } | ||||
| } | ||||
| </style> | ||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user