From 5c53a09ff28e5be90af9c1bc0534a4320fc5aec0 Mon Sep 17 00:00:00 2001 From: liukangdong <898885815@qq.com> Date: 星期一, 23 十二月 2024 14:08:11 +0800 Subject: [PATCH] ll --- admin/src/views/contract/components/contractEdit.vue | 232 +++++++++-------- h5/pages/polling/detail.vue | 54 +++- admin/src/views/project/components/OperaYwRoomWindow.vue | 13 h5/pages/workOrder/edit.vue | 9 h5/utils/config.js | 4 admin/src/views/Inspection/task.vue | 2 h5/pages/operation/device.vue | 20 + h5/pages/index.vue | 26 + h5/pages/login.vue | 2 admin/src/views/workorder/components/detail.vue | 72 +++- h5/pages/polling/task.vue | 21 + h5/static/plan_ic_finish@2x.png | 0 h5/pages/workOrder/list.vue | 6 h5/pages/workOrder/detail.vue | 153 +++++++++-- h5/pages/polling/point.vue | 74 +++-- h5/static/play.png | 0 admin/src/views/Inspection/components/taskDetail.vue | 7 admin/src/views/project/components/OperaYwBuildingWindow.vue | 12 admin/src/views/workorder/components/OperaYwWorkorderWindow.vue | 14 19 files changed, 476 insertions(+), 245 deletions(-) diff --git a/admin/src/views/Inspection/components/taskDetail.vue b/admin/src/views/Inspection/components/taskDetail.vue index 54b30a5..43adcf6 100644 --- a/admin/src/views/Inspection/components/taskDetail.vue +++ b/admin/src/views/Inspection/components/taskDetail.vue @@ -1,5 +1,5 @@ <template> - <GlobalWindow title="宸℃浠诲姟璇︽儏" :showConfirm="false" :visible.sync="isShowModal"> + <GlobalWindow title="宸℃浠诲姟璇︽儏" width="800px" :showConfirm="false" :visible.sync="isShowModal"> <QueryForm v-model="filters" :query-form-config="queryFormConfig" @handleQuery="getDetail(1)" @clear="clear" /> <el-table v-loading="loading" :data="list" stripe> <el-table-column prop="pointName" label="宸℃鐐瑰悕绉�" min-width="100" show-overflow-tooltip /> @@ -17,6 +17,11 @@ <span class="red" v-if="row.dealStatus == 1">寮傚父</span> </template> </el-table-column> + <el-table-column prop="" label="宸℃闄勪欢" min-width="100" show-overflow-tooltip> + <template v-slot="{ row }"> + + </template> + </el-table-column> <el-table-column prop="dealInfo" label="宸℃璇存槑" min-width="100" show-overflow-tooltip /> </el-table> <div class="mt20"> diff --git a/admin/src/views/Inspection/task.vue b/admin/src/views/Inspection/task.vue index b9fe645..7084b40 100644 --- a/admin/src/views/Inspection/task.vue +++ b/admin/src/views/Inspection/task.vue @@ -5,7 +5,7 @@ <el-form-item label="璁″垝鍚嶇О" prop="planTitle"> <el-input v-model="searchForm.planTitle" placeholder="璇疯緭鍏ヨ鍒掑悕绉�" @keypress.enter.native="search"></el-input> </el-form-item> - <el-form-item label="浠诲姟鐘舵��"> + <el-form-item label="浠诲姟鐘舵��" prop="status"> <el-select v-model="searchForm.status" label="浠诲姟鐘舵��" filterable clearable> <el-option value="0" label="寰呭紑濮�"></el-option> <el-option value="1" label="杩涜涓�"></el-option> diff --git a/admin/src/views/contract/components/contractEdit.vue b/admin/src/views/contract/components/contractEdit.vue index a2ae60c..7e13e64 100644 --- a/admin/src/views/contract/components/contractEdit.vue +++ b/admin/src/views/contract/components/contractEdit.vue @@ -1,12 +1,6 @@ <template> - <GlobalWindow - width="100%" - :title="title" - :withFooter="false" - :visible.sync="visible" - :confirm-working="isWorking" - @confirm="confirm" - @close="close"> + <GlobalWindow width="100%" :title="title" :withFooter="false" :visible.sync="visible" :confirm-working="isWorking" + @confirm="confirm" @close="close"> <div class="tabs fixed"> <div class="tab" :class="{ active: activeTabs === 0 }">1銆佸熀鏈俊鎭�</div> <div class="tab" :class="{ active: activeTabs === 1 }">2銆佽垂鐢ㄦ潯娆�</div> @@ -19,7 +13,8 @@ <div class="list"> <el-form-item label="鍚堝悓绫诲瀷" prop="type"> <el-select v-model="form.type" placeholder="璇烽�夋嫨" @change="changeType"> - <el-option v-for="(item, index) in types" :key="index" :value="item.value" :label="item.name"></el-option> + <el-option v-for="(item, index) in types" :key="index" :value="item.value" + :label="item.name"></el-option> </el-select> </el-form-item> <el-form-item label="鍚堝悓缂栧彿" prop="code"> @@ -27,21 +22,26 @@ </el-form-item> <el-form-item label="缁忓姙浜�" prop="userId"> <el-select v-model="form.userId" filterable placeholder="璇烽�夋嫨"> - <el-option v-for="(item, index) in agentList" :key="index" :value="item.id" :label="item.realname"></el-option> + <el-option v-for="(item, index) in agentList" :key="index" :value="item.id" + :label="item.realname"></el-option> </el-select> </el-form-item> <el-form-item label="鍚堝悓绛捐鏃ユ湡" prop="signDate"> - <el-date-picker type="date" v-model="form.signDate" value-format="yyyy-MM-dd" :clearable="false" placeholder="璇烽�夋嫨" /> + <el-date-picker type="date" v-model="form.signDate" value-format="yyyy-MM-dd" :clearable="false" + placeholder="璇烽�夋嫨" /> </el-form-item> <el-form-item label="鍚堝悓寮�濮嬫棩鏈�" prop="startDate"> - <el-date-picker type="date" v-model="form.startDate" @change="getHouseData" :clearable="false" value-format="yyyy-MM-dd" placeholder="璇烽�夋嫨" /> + <el-date-picker type="date" v-model="form.startDate" @change="getHouseData" :clearable="false" + value-format="yyyy-MM-dd" placeholder="璇烽�夋嫨" /> </el-form-item> <el-form-item label="鍚堝悓缁撴潫鏃ユ湡" prop="endDate"> - <el-date-picker type="date" v-model="form.endDate" @change="getHouseData" :clearable="false" value-format="yyyy-MM-dd" placeholder="璇烽�夋嫨" /> + <el-date-picker type="date" v-model="form.endDate" @change="getHouseData" :clearable="false" + value-format="yyyy-MM-dd" placeholder="璇烽�夋嫨" /> </el-form-item> <el-form-item label="褰掑睘椤圭洰" prop="projectId"> <el-select v-model="form.projectId" @change="getHouseTree" placeholder="璇烽�夋嫨"> - <el-option v-for="(item, index) in projectList" :key="index" :value="item.id" :label="item.name"></el-option> + <el-option v-for="(item, index) in projectList" :key="index" :value="item.id" + :label="item.name"></el-option> </el-select> </el-form-item> <el-form-item label="缁撴灉鍙栨暣(鍥涜垗浜斿叆)" prop="roundedUp"> @@ -52,7 +52,8 @@ </el-form-item> <el-form-item label="鎵�灞炲叕鍙�" prop="companyId"> <el-select v-model="form.companyId" placeholder="璇烽�夋嫨"> - <el-option v-for="(item, index) in comparyList" :key="index" :value="item.id" :label="item.name"></el-option> + <el-option v-for="(item, index) in comparyList" :key="index" :value="item.id" + :label="item.name"></el-option> </el-select> </el-form-item> </div> @@ -65,24 +66,21 @@ </el-form-item> <el-form-item label="鑱旂郴浜�" prop="memberId"> <el-select v-model="form.memberId" placeholder="璇烽�夋嫨"> - <el-option v-for="(item, index) in contactsList" :key="index" :value="item.id" :label="item.name"></el-option> + <el-option v-for="(item, index) in contactsList" :key="index" :value="item.id" + :label="item.name"></el-option> </el-select> -<!-- <el-input v-model="form.memberName" readonly placeholder="璇风偣鍑婚�夋嫨绉熷" />--> + <!-- <el-input v-model="form.memberName" readonly placeholder="璇风偣鍑婚�夋嫨绉熷" />--> </el-form-item> </div> </el-form> </div> <div class="main_house"> <div class="title">璇烽�夋嫨鎴挎簮</div> - <el-tree - :data="houseList" - show-checkbox - node-key="idd" - @check="checkHouseRoom" - :default-expanded-keys="ids" - :default-checked-keys="ids" - :props="{ children: 'projectDataVOList', label: 'name' }"> - <span class="custom-tree-node" style="width: 100%; display: flex; align-items: center; justify-content: space-between;" slot-scope="{ node, data }"> + <el-tree :data="houseList" show-checkbox node-key="idd" @check="checkHouseRoom" :default-expanded-keys="ids" + :default-checked-keys="ids" :props="{ children: 'projectDataVOList', label: 'name' }"> + <span class="custom-tree-node" + style="width: 100%; display: flex; align-items: center; justify-content: space-between;" + slot-scope="{ node, data }"> <span>{{ data.name }}</span> <span style="color: #2080f7;" v-if="data.lv === 3"> {{ data.area }}銕� @@ -113,8 +111,12 @@ </div> <div v-show="activeTabs === 1"> <div class="tabs cost_tabs"> - <div class="tab" :class="{ active: cactiveTabs === 0 }" @click="ctabsClick(0)" v-if="[0,2].includes(form.type)">绉熻祦鏉℃</div> - <div class="tab" :class="{ active: cactiveTabs === 1 }" @click="ctabsClick(1)" v-if="[0,1].includes(form.type)">鐗╀笟鏉℃</div> + <div class="tab" :class="{ active: cactiveTabs === 0 }" @click="ctabsClick(0)" v-if="[0, 2].includes(form.type)"> + 绉熻祦鏉℃ + </div> + <div class="tab" :class="{ active: cactiveTabs === 1 }" @click="ctabsClick(1)" v-if="[0, 1].includes(form.type)"> + 鐗╀笟鏉℃ + </div> </div> <!-- 绉熻祦鏉℃ --> <div v-show="cactiveTabs === 0"> @@ -128,7 +130,8 @@ </el-form-item> <el-form-item label="浠樻鏂瑰紡" prop="zlPayType"> <el-select v-model="form.zlPayType" @change="changePayType" placeholder="璇烽�夋嫨"> - <el-option v-for="(item, index) in payMethods" :key="index" :value="item.value" :label="item.name"></el-option> + <el-option v-for="(item, index) in payMethods" :key="index" :value="item.value" + :label="item.name"></el-option> </el-select> </el-form-item> <el-form-item label="鍏嶇鏈�" prop="zlDate"> @@ -141,18 +144,22 @@ <el-button type="text" size="medium" @click="addZl">澧炲姞</el-button> </div> <div class="list"> - <div style="width: 100%; display: flex; flex-wrap: wrap;" v-for="(zlDetailList, index) in form.zlDetailList" :key="index"> + <div style="width: 100%; display: flex; flex-wrap: wrap;" + v-for="(zlDetailList, index) in form.zlDetailList" :key="index"> <el-form-item label="璧峰鏃ユ湡" :prop="'zlDetailList.' + index + '.time'" :rules="{ required: true, message: '璇烽�夋嫨', trigger: 'blur' }"> - <el-date-picker type="daterange" v-model="zlDetailList.time" @change="getDate1($event, index)" value-format="yyyy-MM-dd" placeholder="璇烽�夋嫨" /> + <el-date-picker type="daterange" v-model="zlDetailList.time" @change="getDate1($event, index)" + value-format="yyyy-MM-dd" placeholder="璇烽�夋嫨" /> </el-form-item> <el-form-item label="鍚堝悓鍗曚环" :prop="'zlDetailList.' + index + '.price'" :rules="{ required: true, message: '璇疯緭鍏�', trigger: 'blur' }"> <el-input placeholder="璇疯緭鍏�" v-model="zlDetailList.price" @input="clearzl" class="input-with-select"> - <el-select v-model="zlDetailList.circleType" @change="clearzl" style="width: 150px;" slot="append" placeholder="璇烽�夋嫨"> - <el-option v-for="(item, index) in unitOps" :key="index" :value="item.value" :label="item.name"></el-option> + <el-select v-model="zlDetailList.circleType" @change="clearzl" style="width: 150px;" slot="append" + placeholder="璇烽�夋嫨"> + <el-option v-for="(item, index) in unitOps" :key="index" :value="item.value" + :label="item.name"></el-option> </el-select> </el-input> </el-form-item> @@ -161,7 +168,8 @@ }"> <div style="display: flex; align-items: center; justify-content: space-between;"> <el-input v-model="zlDetailList.advanceDays" @input="clearzl" placeholder="璇疯緭鍏�" v-trim /> - <el-link :underline="false" type="danger" @click="deleZl(index)" style="margin-left: 20px; flex-shrink: 0;">鍒犻櫎</el-link> + <el-link :underline="false" type="danger" @click="deleZl(index)" + style="margin-left: 20px; flex-shrink: 0;">鍒犻櫎</el-link> </div> </el-form-item> </div> @@ -185,24 +193,24 @@ </el-table-column> <el-table-column label="鏈熸暟" align="center" show-overflow-tooltip> <template slot-scope="{row}"> - <el-tag type="success" v-if="row.sortnum > 0">{{row.sortnum}}</el-tag> + <el-tag type="success" v-if="row.sortnum > 0">{{ row.sortnum }}</el-tag> </template> </el-table-column> <el-table-column label="鍖洪棿" align="center" show-overflow-tooltip> <template slot-scope="{row}"> - {{row.startDate}} ~ {{row.endDate}} + {{ row.startDate }} ~ {{ row.endDate }} </template> </el-table-column> <el-table-column prop="planPayDate" label="浠樻鏃�" align="center" show-overflow-tooltip /> <el-table-column label="搴旀敹" align="center" show-overflow-tooltip> <template slot-scope="{row}"> - {{row.receivableFee}}鍏� + {{ row.receivableFee }}鍏� </template> </el-table-column> </el-table> <div class="total"> <span>鎬昏</span> - <div>璐圭敤搴旀敹鎬昏锛歿{zlPrice}}鍏冿紝鎶奸噾搴旀敹鎬昏锛歿{form.zlDeposit}}鍏�</div> + <div>璐圭敤搴旀敹鎬昏锛歿{ zlPrice }}鍏冿紝鎶奸噾搴旀敹鎬昏锛歿{ form.zlDeposit }}鍏�</div> </div> </div> <!-- 鐗╀笟鏉℃ --> @@ -217,7 +225,8 @@ </el-form-item> <el-form-item label="浠樻鏂瑰紡" prop="wyPayType"> <el-select v-model="form.wyPayType" @change="changePayType1" placeholder="璇烽�夋嫨"> - <el-option v-for="(item, index) in payMethods" :key="index" :value="item.value" :label="item.name"></el-option> + <el-option v-for="(item, index) in payMethods" :key="index" :value="item.value" + :label="item.name"></el-option> </el-select> </el-form-item> <el-form-item label="鍏嶇鏈�" prop="wyDate"> @@ -230,18 +239,22 @@ <el-button type="text" size="medium" @click="addWy">澧炲姞</el-button> </div> <div class="list"> - <div style="width: 100%; display: flex; flex-wrap: wrap;" v-for="(wyDetailList, index) in form.wyDetailList" :key="index"> + <div style="width: 100%; display: flex; flex-wrap: wrap;" + v-for="(wyDetailList, index) in form.wyDetailList" :key="index"> <el-form-item label="璧峰鏃ユ湡" :prop="'wyDetailList.' + index + '.time'" :rules="{ required: true, message: '璇疯緭鍏�', trigger: 'blur' }"> - <el-date-picker type="daterange" v-model="wyDetailList.time" @change="getDate2($event, index)" value-format="yyyy-MM-dd" placeholder="璇烽�夋嫨" /> + <el-date-picker type="daterange" v-model="wyDetailList.time" @change="getDate2($event, index)" + value-format="yyyy-MM-dd" placeholder="璇烽�夋嫨" /> </el-form-item> <el-form-item label="鍚堝悓鍗曚环" :prop="'wyDetailList.' + index + '.price'" :rules="{ required: true, message: '璇疯緭鍏�', trigger: 'blur' }"> <el-input placeholder="璇疯緭鍏�" @input="clearwy" v-model="wyDetailList.price"> - <el-select v-model="wyDetailList.circleType" @change="clearwy" style="width: 150px;" slot="append" placeholder="璇烽�夋嫨"> - <el-option v-for="(item, index) in unitOps1" :key="index" :value="item.value" :label="item.name"></el-option> + <el-select v-model="wyDetailList.circleType" @change="clearwy" style="width: 150px;" slot="append" + placeholder="璇烽�夋嫨"> + <el-option v-for="(item, index) in unitOps1" :key="index" :value="item.value" + :label="item.name"></el-option> </el-select> </el-input> </el-form-item> @@ -250,7 +263,8 @@ }"> <div style="display: flex; align-items: center; justify-content: space-between;"> <el-input v-model="wyDetailList.advanceDays" @input="clearwy" placeholder="璇疯緭鍏�" v-trim /> - <el-link :underline="false" type="danger" @click="deleWy(index)" style="margin-left: 20px; flex-shrink: 0;">鍒犻櫎</el-link> + <el-link :underline="false" type="danger" @click="deleWy(index)" + style="margin-left: 20px; flex-shrink: 0;">鍒犻櫎</el-link> </div> </el-form-item> </div> @@ -274,32 +288,33 @@ </el-table-column> <el-table-column label="鏈熸暟" align="center" show-overflow-tooltip> <template slot-scope="{row}"> - <el-tag type="success" v-if="row.sortnum > 0">{{row.sortnum}}</el-tag> + <el-tag type="success" v-if="row.sortnum > 0">{{ row.sortnum }}</el-tag> </template> </el-table-column> <el-table-column label="鍖洪棿" align="center" show-overflow-tooltip> <template slot-scope="{row}"> - {{row.startDate}} ~ {{row.endDate}} + {{ row.startDate }} ~ {{ row.endDate }} </template> </el-table-column> <el-table-column prop="planPayDate" label="浠樻鏃�" align="center" show-overflow-tooltip /> <el-table-column prop="receivableFee" label="搴旀敹" align="center" show-overflow-tooltip> <template slot-scope="{row}"> - {{row.receivableFee}}鍏� + {{ row.receivableFee }}鍏� </template> </el-table-column> </el-table> <div class="total"> <span>鎬昏</span> - <div>璐圭敤搴旀敹鎬昏锛歿{wyPrice}}鍏冿紝鎶奸噾搴旀敹鎬昏锛歿{form.wyDeposit}}鍏�</div> + <div>璐圭敤搴旀敹鎬昏锛歿{ wyPrice }}鍏冿紝鎶奸噾搴旀敹鎬昏锛歿{ form.wyDeposit }}鍏�</div> </div> </div> </div> <div class="window__footer" style="position: sticky; bottom: 0; left: 0; z-index: 9; background: #ffffff;"> <slot name="footer"> - <el-button @click="confirm" :loading="confirmWorking" type="primary">{{activeTabs === 0 ? '涓嬩竴姝�' : '鎻愪氦'}}</el-button> + <el-button @click="confirm" :loading="confirmWorking" type="primary">{{ activeTabs === 0 ? '涓嬩竴姝�' : + '鎻愪氦'}}</el-button> <slot name="btns" /> - <el-button @click="close">{{activeTabs === 0 ? '杩斿洖' : '涓婁竴姝�'}}</el-button> + <el-button @click="close">{{ activeTabs === 0 ? '杩斿洖' : '涓婁竴姝�' }}</el-button> </slot> </div> <!-- 閫夋嫨绉熷 --> @@ -328,7 +343,7 @@ computed: { ...mapState(['userInfo']) }, - data () { + data() { return { title: '鍒涘缓鍚堝悓', activeTabs: 0, @@ -347,7 +362,7 @@ memberId: '', memberName: '', fileList: [], - + zlDeposit: '', zlPayType: '', zlFreeStartDate: '', @@ -363,7 +378,7 @@ advanceDays: '' } ], - + wyDeposit: '', wyPayType: '', wyFreeStartDate: '', @@ -379,17 +394,17 @@ advanceDays: '' } ], - + roomIds: [] }, - + ids: [], - + zlList: [], wyList: [], - + rules, - + contactsList: [], loadingInstance: null, @@ -432,12 +447,12 @@ { name: '鍏�/m虏路骞�', value: 2 }, { name: '鍏�/鍦�', value: 6 }, ], - + houseLvThree: [] } }, methods: { - open (title, target) { + open(title, target) { this.title = title this.ids = [] this.houseList = [] @@ -486,7 +501,7 @@ // this.getHouseTree() }) }, - changePayType (e) { + changePayType(e) { if (e === 0) { this.unitOps = [ { name: '鍏�/m虏路澶�', value: 0 }, @@ -514,7 +529,7 @@ } this.clearzl() }, - changePayType1 (e) { + changePayType1(e) { if (e === 0) { this.unitOps1 = [ { name: '鍏�/m虏路澶�', value: 0 }, @@ -543,14 +558,14 @@ this.clearwy() }, // 鑾峰彇鑱旂郴浜� - getYwList () { + getYwList() { ywList({ customerId: this.form.renterId }).then(res => { this.contactsList = res }) }, - getHouseData () { + getHouseData() { if (this.form.startDate && this.form.endDate) { this.getHouseTree() if (this.form.zlDetailList.length === 1) { @@ -565,33 +580,33 @@ } } }, - changeType (e) { + changeType(e) { if (e === 0 || e === 2) { this.cactiveTabs = 0 } else if (e === 0 || e === 1) { this.cactiveTabs = 1 } }, - getDayTime (num) { - const today = new Date(); - const year = today.getFullYear(); - const month = today.getMonth() + 1; - const day = today.getDate(); + getDayTime(num) { + const today = new Date() + const year = today.getFullYear() + const month = today.getMonth() + 1 + const day = today.getDate() if (!num) { - return `${year}-${month < 10 ? '0' + month : month}-${day < 10 ? '0' + day : day}`; + return `${year}-${month < 10 ? '0' + month : month}-${day < 10 ? '0' + day : day}` } else { - return `${year + 1}-${month < 10 ? '0' + month : month}-${day < 10 ? '0' + day - 1 : day - 1}`; + return `${year + 1}-${month < 10 ? '0' + month : month}-${day < 10 ? '0' + day - 1 : day - 1}` } }, - clearzl () { + clearzl() { this.zlList = [] this.zlPrice = '' }, - clearwy () { + clearwy() { this.wyList = [] this.wyPrice = '' }, - confirm () { + confirm() { var that = this if (this.activeTabs === 0) { this.$refs.form.validate((valid) => { @@ -633,7 +648,7 @@ } } }, - submit () { + submit() { // 璋冪敤鏂板缓鎺ュ彛 this.isWorking = true create({ ...this.form }) @@ -646,26 +661,26 @@ this.isWorking = false }) }, - getDate1 (e, index) { + getDate1(e, index) { this.form.zlDetailList[index].startDate = e[0] this.form.zlDetailList[index].endDate = e[1] this.clearzl() }, - getDate2 (e, index) { + getDate2(e, index) { this.form.wyDetailList[index].startDate = e[0] this.form.wyDetailList[index].endDate = e[1] this.clearwy() }, - checkHouseRoom (a, b) { + checkHouseRoom(a, b) { this.ids = b.checkedKeys let arr = b.checkedKeys.map(item => { if (item.split('-')[0] == 3) { return Number(item.split('-')[1]) } }) - this.form.roomIds = arr.filter(item => item !== undefined); + this.form.roomIds = arr.filter(item => item !== undefined) }, - getHouseTree () { + getHouseTree() { tree({ startDate: this.form.startDate, endDate: this.form.endDate, @@ -681,14 +696,14 @@ }, addParamToArray(arr) { for (let i = 0; i < arr.length; i++) { - const currentItem = arr[i].projectDataVOList; + const currentItem = arr[i].projectDataVOList arr[i].idd = arr[i].lv + '-' + arr[i].id if (currentItem.length > 0) { - this.addParamToArray(currentItem); + this.addParamToArray(currentItem) } } }, - generateZL () { + generateZL() { getBillList({ ...this.form, billType: 0 }) .then(res => { let zlPrice = 0 @@ -703,7 +718,7 @@ this.zlList = arr }) }, - generateWY () { + generateWY() { getBillList({ ...this.form, billType: 1 }) .then(res => { this.wy = true @@ -719,7 +734,7 @@ this.wyList = arr }) }, - addZl () { + addZl() { this.form.zlDetailList.push({ circleType: 0, startDate: this.form.startDate, @@ -729,7 +744,7 @@ advanceDays: '' }) }, - addWy () { + addWy() { this.form.wyDetailList.push({ circleType: 0, startDate: this.form.startDate, @@ -749,62 +764,66 @@ this.form.wyDetailList.splice(index, 1) this.clearwy() }, - getZLDate (e) { + getZLDate(e) { this.form.zlFreeStartDate = e[0] this.form.zlFreeEndDate = e[1] this.clearzl() }, - getWYDate (e) { + getWYDate(e) { this.form.wyFreeStartDate = e[0] this.form.wyFreeEndDate = e[1] this.clearwy() }, - getTenant (row) { + getTenant(row) { this.form.renterId = row.id this.form.renterName = row.name this.form.memberId = '' this.form.memberName = '' this.getYwList() }, - dele (imgaddr) { + dele(imgaddr) { this.form.fileList.forEach((item, index) => { if (imgaddr === item.imgaddr) { this.form.fileList.splice(index, 1) } }) }, - getUser () { + getUser() { getUserList({}) .then(res => { this.agentList = res }) }, - getProject () { + getProject() { getProjectList({}) .then(res => { - this.projectList = res + this.projectList = res || [] + if (this.projectList.length > 0) { + this.$set(this.form, 'projectId', this.projectList[0].id) + this.getHouseTree() + } }) }, - getCompany () { + getCompany() { companyList({ type: 2 }) .then(res => { this.comparyList = res this.form.companyId = res[0].id }) }, - tabsClick (val) { + tabsClick(val) { this.activeTabs = val }, - ctabsClick (val) { + ctabsClick(val) { this.cactiveTabs = val }, - handleRent () { + handleRent() { this.$refs.MemberSearchRef.open() }, - houseChange (e) { + houseChange(e) { console.log(e) }, - beforeUpload (file) { + beforeUpload(file) { this.loadingInstance = Loading.service({ lock: true, text: 'Loading', @@ -812,14 +831,14 @@ background: 'rgba(0, 0, 0, 0.7)' }) }, - uploadError () { + uploadError() { this.$nextTick(() => { // 浠ユ湇鍔$殑鏂瑰紡璋冪敤鐨� Loading 闇�瑕佸紓姝ュ叧闂� if (this.loadingInstance) { this.loadingInstance.close() } }) }, - getDay () { + getDay() { const now = new Date() const year = now.getFullYear() const month = now.getMonth() + 1 // 鍔�1浣垮叾浠�1寮�濮� @@ -827,9 +846,9 @@ const hours = now.getHours() const minutes = now.getMinutes() const seconds = now.getSeconds() - return `${year}-${month.toString().padStart(2, '0')}-${day.toString().padStart(2, '0')} ${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`; + return `${year}-${month.toString().padStart(2, '0')}-${day.toString().padStart(2, '0')} ${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}` }, - uploadAvatarSuccess (file) { + uploadAvatarSuccess(file) { this.$nextTick(() => { if (this.loadingInstance) { this.loadingInstance.close() @@ -838,7 +857,7 @@ const item = file.data[0] this.form.fileList.push({ ...item, fileurl: item.imgaddr, name: item.originname, userName: this.userInfo.realname, createTime: this.getDay() }) }, - close () { + close() { if (this.activeTabs === 0) { this.$emit('close') } else { @@ -853,6 +872,7 @@ <style lang="scss" scoped> @import '@/assets/style/variables.scss'; + .fixed { background: #ffffff; position: sticky; @@ -860,6 +880,7 @@ left: 0; z-index: 999; } + .tabs { border-bottom: 1px solid #DFE2E8; display: flex; @@ -962,6 +983,7 @@ display: flex; align-items: center; justify-content: space-between; + span { font-weight: 500; font-size: 14px; diff --git a/admin/src/views/project/components/OperaYwBuildingWindow.vue b/admin/src/views/project/components/OperaYwBuildingWindow.vue index 83fecbe..f1387b7 100644 --- a/admin/src/views/project/components/OperaYwBuildingWindow.vue +++ b/admin/src/views/project/components/OperaYwBuildingWindow.vue @@ -89,7 +89,7 @@ }) }, methods: { - open (title, target,type) { + open(title, target, type) { this.title = title this.visible = true this.getProject() @@ -98,14 +98,14 @@ this.$nextTick(() => { this.$refs.form.resetFields() this.form[this.configData['field.id']] = null - this.form.type=type + this.form.type = type }) return } // 缂栬緫 this.$nextTick(() => { - console.log('----'); - + console.log('----') + this.getDetail(target.id) }) }, @@ -117,6 +117,10 @@ getProject() { getProjectList({}).then(res => { this.projectList = res || [] + if (this.projectList.length > 0) { + this.$set(this.form, 'projectId', this.projectList[0].id) + // this.changeProject(this.projectList[0].id) + } }) } } diff --git a/admin/src/views/project/components/OperaYwRoomWindow.vue b/admin/src/views/project/components/OperaYwRoomWindow.vue index dc0c159..1ed0a57 100644 --- a/admin/src/views/project/components/OperaYwRoomWindow.vue +++ b/admin/src/views/project/components/OperaYwRoomWindow.vue @@ -101,6 +101,8 @@ this.title = title this.visible = true this.getProject() + this.buildList = [] + this.floorList = [] // 鏂板缓缁勭粐 if (target == null) { this.$nextTick(() => { @@ -115,8 +117,8 @@ this.getDetail(target.id) }) }, - confirm () { - if(!this.form.feeArea){ + confirm() { + if (!this.form.feeArea) { this.form.feeArea = this.form.rentArea } if (this.form.id == null || this.form.id === '') { @@ -143,6 +145,10 @@ getProject() { getProjectList({}).then(res => { this.projectList = res || [] + if (this.projectList.length > 0) { + this.$set(this.form, 'projectId', this.projectList[0].id) + this.changeProject(this.projectList[0].id) + } }) }, @@ -150,6 +156,9 @@ this.form.buildingId = '' getBuildList({ projectId: e }).then(res => { this.buildList = res || [] + // if(this.buildList.length > 0){ + // this.form.buildingId = this.buildList[0].id + // } }) }, changeBuild(e) { diff --git a/admin/src/views/workorder/components/OperaYwWorkorderWindow.vue b/admin/src/views/workorder/components/OperaYwWorkorderWindow.vue index 4f8ce99..c97fbf4 100644 --- a/admin/src/views/workorder/components/OperaYwWorkorderWindow.vue +++ b/admin/src/views/workorder/components/OperaYwWorkorderWindow.vue @@ -140,7 +140,7 @@ this.visible = true this.getProject() this.getCate() - // 鏂板缓 + // 鏂板缓 if (target == null) { this.form = { id: null, @@ -192,7 +192,11 @@ }, getProject() { getProjectList({}).then(res => { - this.projectList = res + this.projectList = res || [] + if(this.projectList.length > 0){ + this.$set(this.form, 'projectId', this.projectList[0].id) + this.getBuild(this.projectList[0].id) + } }) }, getBuild(projectId) { @@ -200,7 +204,11 @@ this.$set(this.form, 'floorId', '') this.$set(this.form, 'roomId', '') getBuildList({ projectId }).then(res => { - this.buildList = res + this.buildList = res || [] + // if(projectId && this.buildList.length > 0){ + // this.$set(this.form, 'buildingId', this.buildList[0].id) + // this.changeBuild(this.buildList[0].id) + // } }) }, changeBuild(e) { diff --git a/admin/src/views/workorder/components/detail.vue b/admin/src/views/workorder/components/detail.vue index a6908d4..f2e7d5f 100644 --- a/admin/src/views/workorder/components/detail.vue +++ b/admin/src/views/workorder/components/detail.vue @@ -49,11 +49,21 @@ <div class="value" v-if="info.fileList == null || !info.fileList.length">鏃�</div> <div class="value" v-if="info.fileList != null && info.fileList.length"> <div v-for="item in info.fileList" :key="item.id" style="display: inline;margin-right: 20px"> - <video v-if="item.fileurlFull && item.fileurlFull.endsWith('.mp4')" ref="videoRef" controls - preload="auto" style="width: 80px;height: 80px;object-fit: contain;" :src="item.fileurlFull" /> - <el-image v-else-if="item.fileurlFull" style="width:80px; height: 80px" :src="item.fileurlFull" + <!-- <video v-if="item.fileurlFull && item.fileurlFull.endsWith('.mp4')" ref="videoRef" controls + preload="auto" style="width: 80px;height: 80px;object-fit: contain;" :src="item.fileurlFull" /> --> + <el-image v-if="item.type == 0" style="width:80px; height: 80px" :src="item.fileurlFull" :preview-src-list="[item.fileurlFull]"> </el-image> + </div> + </div> + </div> + <div v-if="info.fileList && info.fileList.length > 0 && info.fileList.filter(i => i.type == 1).length > 0" + class="item max"> + <div class="la">闂瑙嗛</div> + <div class="value"> + <div v-for="item in info.fileList" :key="item.id" style="display: inline;margin-right: 20px"> + <video v-if="item.type == 1" ref="videoRef" controls preload="auto" + style="width: 240px;height: 160px;object-fit: contain;" :src="item.fileurlFull" /> </div> </div> </div> @@ -61,7 +71,7 @@ <div class="side"> <div class="title">宸ュ崟娴佽浆璁板綍</div> <div class="flow_list"> - <div class="item" v-for="item,i in info.logList"> + <div class="item" v-for="item, i in info.logList"> <div class="icon"> <div class="dian"></div> <div v-if="i < info.logList.length - 1" class="line"></div> @@ -76,7 +86,9 @@ </div> </div> </div> - <div class="title">{{ info.dealStatus == 0 || info.dealStatus == 1 ? '宸ュ崟澶勭悊' : '澶勭悊缁撴灉' }}</div> + <div class="title" + v-if="info.dealStatus == 2 || info.dealStatus == 0 || (info.dealStatus == 1 && info.dealUserId === userInfo.id)"> + {{ info.dealStatus == 0 || info.dealStatus == 1 ? '宸ュ崟澶勭悊' : '澶勭悊缁撴灉' }}</div> <el-form :model="param" ref="form" :rules="rules"> <template v-if="info.dealStatus == 0 || info.dealStatus == null"> <el-form-item label="澶勭悊鏂瑰紡" prop="dealType"> @@ -84,7 +96,7 @@ <el-radio v-model="param.dealType" :label="0">鎸囨淳</el-radio> <el-radio v-model="param.dealType" :label="1">鐩存帴鍥炲</el-radio> </div> - </el-form-item> + </el-form-item> <el-form-item v-if="param.dealType == 0" label="鎸囨淳缁�" prop="dealUserId"> <el-select v-model="param.dealUserId" clearable filterable class="w400"> <el-option v-for="item in staffList" :label="item.realname" :value="item.id"></el-option> @@ -104,8 +116,8 @@ </el-form-item> <el-form-item label="鐜板満鍥剧墖"> <div class="file_list"> - <el-upload class="avatar-uploader" :data="uploadData" :auto-upload="true" - :action="uploadImgUrl" :show-file-list="false" :on-success="uploadAvatarSuccess" :on-error="uploadError" + <el-upload class="avatar-uploader" :data="uploadData" :auto-upload="true" :action="uploadImgUrl" + :show-file-list="false" :on-success="uploadAvatarSuccess" :on-error="uploadError" :before-upload="beforeUpload"> <div class="upload_wrap"> <i class="el-icon-plus avatar-uploader-icon"></i> @@ -223,8 +235,8 @@ const { id } = this detailById(id).then(res => { this.info = res - if(this.info.dealStatus == 1){ - this.$set(this.param, 'getDate',dayjs().format('YYYY-MM-DD HH:mm:ss') ) + if (this.info.dealStatus == 1) { + this.$set(this.param, 'getDate', dayjs().format('YYYY-MM-DD HH:mm:ss')) } }) }, @@ -316,13 +328,15 @@ } .primaryColor { - border: 1px solid rgba(63, 126, 239,.2); - background-color: rgba(63, 126, 239,.2); + border: 1px solid rgba(63, 126, 239, .2); + background-color: rgba(63, 126, 239, .2); } - .green{ + + .green { background-color: rgba(83, 183, 148, .2); border: 1px solid rgba(83, 183, 148, .2); } + .gray { color: #333333; background-color: rgba(128, 128, 128, .2); @@ -352,7 +366,8 @@ width: 100%; display: flex; align-items: center; - .la{ + + .la { margin-bottom: 0; width: 72px; } @@ -362,38 +377,47 @@ width: 100%; } } - .main_content{ + + .main_content { display: flex; - .side{ + + .side { width: 370px; - .title{ + + .title { font-size: 14px; } - .flow_list{ - .item{ + + .flow_list { + .item { display: flex; - .icon{ + + .icon { width: 28px; display: flex; flex-direction: column; align-items: center; - .dian{ + + .dian { width: 12px; height: 12px; border-radius: 50%; background-color: #e89e42; } - .line{ + + .line { width: 1px; height: 100%; background-color: #e89e42; } } - .content{ + + .content { font-size: 12px; color: #999999; padding-bottom: 12px; - .name{ + + .name { font-size: 13px; color: #333333; } diff --git a/h5/pages/index.vue b/h5/pages/index.vue index 9d3409d..81b4ef6 100644 --- a/h5/pages/index.vue +++ b/h5/pages/index.vue @@ -1,6 +1,6 @@ <template> <view class="main_app"> - <view class="hone_name title">{{ userInfo.realname }}锛屾杩庣櫥褰�</view> + <view class="hone_name title">{{ userInfo.realname }}锛屾杩庣櫥褰曪綖</view> <view class="home_con"> <image class="bg" src="@/static/home/home_bg.jpg" mode=""></image> <view class="h1">闃滃畞鏂囦綋涓績</view> @@ -24,14 +24,15 @@ </view> </template> -<script> - import { logoutPost } from '@/api' +<script> + import { + logoutPost + } from '@/api' export default { data() { return { userInfo: uni.getStorageSync('userInfo') || {}, - list1: [ - { + list1: [{ name: '鏂板宸ュ崟', url: '/pages/workOrder/edit', img: require('@/static/home/ic_xinzenggongdan@2x.png'), @@ -74,12 +75,15 @@ url: item.url }) }, - loginOut() { - logoutPost() - this.$store.commit('empty') - uni.redirectTo({ - url: '/pages/login' - }) + loginOut() { + logoutPost().then(res => { + this.$store.commit('empty') + setTimeout(() => { + uni.redirectTo({ + url: '/pages/login' + }) + }, 300) + }) // window.location.href= 'https://zhcg.fnwtzx.com/fn_h5' }, diff --git a/h5/pages/login.vue b/h5/pages/login.vue index 81323ed..b742a89 100644 --- a/h5/pages/login.vue +++ b/h5/pages/login.vue @@ -45,7 +45,7 @@ code: '' }, downTime: 0, - code: '' + code: '111' // code: '' } }, diff --git a/h5/pages/operation/device.vue b/h5/pages/operation/device.vue index 9377ebb..414be7b 100644 --- a/h5/pages/operation/device.vue +++ b/h5/pages/operation/device.vue @@ -83,7 +83,8 @@ import { uploadUrl, ywDevicePost, - ywDeviceCreate + ywDeviceCreate, + getPointRecordByCode } from '@/api' import dayjs from 'dayjs'; import { @@ -122,7 +123,7 @@ }, handleP() { const { - param, + param, fileList } = this ywDeviceCreate({ @@ -285,8 +286,19 @@ }, (decodeText, decodeResult) => { if (decodeText) { //杩欓噷decodeText灏辨槸閫氳繃鎵弿浜岀淮鐮佸緱鍒扮殑鍐呭 - this.$set(this.param, 'deviceCode', decodeText) - this.stopScan(); //鍏抽棴鎵爜鍔熻兘 + this.$set(this.param, 'deviceCode', decodeText) + this.stopScan(); //鍏抽棴鎵爜鍔熻兘 + getPointRecordByCode({ + // taskId: this.id, + pointCode: decodeText + }).then(ress => { + if (ress.data) { + console.log('ress', ress.data); + } else { + this.showToast('鏈尮閰嶅埌宸℃鐐�,璇烽噸鏂版壂鎻�') + } + }) + } }, (err) => { diff --git a/h5/pages/polling/detail.vue b/h5/pages/polling/detail.vue index 383395d..45ad7fb 100644 --- a/h5/pages/polling/detail.vue +++ b/h5/pages/polling/detail.vue @@ -34,7 +34,10 @@ <view class="content"> <view class="head"> <view>{{item.pointName}}</view> - <view class="status" :class="{ gray: item.status == 1 }">{{ item.status == 1 ? '宸插贰妫�' : '寰呭贰妫�' }}</view> + <view class="status" :class="{ gray: item.status == 1 }"> + <image v-if="item.status == 1" src="@/static/plan_ic_finish@2x.png" class="icon" mode=""></image> + <text>{{ item.status == 1 ? '宸插贰妫�' : '寰呭贰妫�' }}</text> + </view> </view> <template v-if="item.status == 1"> <view class="line"> @@ -43,7 +46,10 @@ </view> <view class="line"> <view class="la">宸℃鏃堕棿锛�</view> - <view class="val">{{item.dealDate}}</view> + <view class="val"> + <text>{{item.dealDate}}</text> + <text v-if="item.status == 1" class="detail">鏌ョ湅璇︽儏</text> + </view> </view> </template> <view class="desc" v-else>{{item.content}}</view> @@ -100,11 +106,11 @@ }, onLoad(option) { this.id = option.id + // this.getDetail() + }, + onShow() { this.getDetail() }, - // onShow() { - // this.getDetail() - // }, methods: { openSc() { this.isScaning = true; @@ -164,7 +170,7 @@ this.info = res.data let time = new Date(res.data.startDate).getTime() console.log('res.data.startDate', new Date().getTime()); - this.flag = new Date().getTime() > time + this.flag = new Date().getTime() > time && (this.info.status == 0 || this.info.status == 1) }) ywPatrolTaskRecord({ capacity: 999, @@ -268,14 +274,15 @@ margin-bottom: 20rpx; .la { - color: #666666; + color: #666666; + } } .list { - height: calc(100vh - 720rpx); - overflow: auto; - + height: calc(100vh - 490rpx); + overflow: auto; + padding-bottom: 160rpx; .item { width: 690rpx; height: 188rpx; @@ -288,7 +295,18 @@ margin-bottom: 20rpx; .line { - margin-bottom: 10rpx; + margin-bottom: 10rpx; + width: 100%; + .val{ + display: flex; + justify-content: space-between; + align-items: center; + flex: 1; + .detail{ + color: $primaryColor; + font-size: 26rpx; + } + } } .icon { @@ -311,9 +329,19 @@ margin-bottom: 16rpx; .status { - offset-anchor: 28rpx; + font-size: 28rpx; color: $primaryColor; - font-weight: 400; + font-weight: 400; + display: flex; + align-items: center; + .icon{ + width: 40rpx; + height: 40rpx; + // border-radius: 50%; + // overflow: hidden; + background: none; + } + } .gray { diff --git a/h5/pages/polling/point.vue b/h5/pages/polling/point.vue index 4711fbc..1288d07 100644 --- a/h5/pages/polling/point.vue +++ b/h5/pages/polling/point.vue @@ -31,7 +31,7 @@ <video v-if="item.type == 1" :src="item.fileurlFull" :controls="false"></video> </view> </view> - <view class="desc">{{ info.dealInfo }}</view> + <view v-if="info.dealInfo" class="desc">{{ info.dealInfo }}</view> <view class="line line_s"> <view class="la">宸℃浜猴細</view> <view class="val">{{ info.realname }}</view> @@ -78,11 +78,12 @@ </view> </view> - <view class="label">澶勭悊璇存槑</view> - <textarea v-model="handleParam.dealInfo" placeholder="璇峰~鍐欏鐞嗚鏄�" placeholder-class="placeholder9" /> + <view class="label" style="margin-bottom: 10rpx;">澶勭悊璇存槑</view> + <textarea v-model="handleParam.dealInfo" :maxlength="-1" placeholder="璇峰~鍐欏鐞嗚鏄�" + placeholder-class="placeholder9" /> </view> </view> - <view class="sub_btn" @click="onSubmit">纭宸℃</view> + <view v-if="info.status == 0" class="sub_btn" @click="onSubmit">纭宸℃</view> <!-- --> <u-popup :show="showUpload" @close="showUpload = false" closeOnClickOverlay> <view class="sel_upload_wrap"> @@ -149,34 +150,38 @@ fileList, id } = this - if (handleParam.dealStatus == 1) { - return uni.showModal({ - title: '娓╅Θ鎻愮ず', - content: '宸℃缁撴灉寮傚父锛屾槸鍚﹀墠寰�鎻愪氦宸ュ崟锛�', - success: function(res) { - if (res.confirm) { - patrolData({ - ...handleParam, - multifileList: fileList, - id, - }).then(res => { - this.showToast('鎿嶄綔鎴愬姛') - uni.navigateBack() - }) + patrolData({ + ...handleParam, + multifileList: fileList, + id, + }).then(res => { + if (handleParam.dealStatus == 1) { + return uni.showModal({ + title: '娓╅Θ鎻愮ず', + content: '宸℃缁撴灉寮傚父锛屾槸鍚﹀墠寰�鎻愪氦宸ュ崟锛�', + success: (res) => { + if (res.confirm) { + this.showToast('鎿嶄綔鎴愬姛') + setTimeout(() => { + uni.redirectTo({ + url: '/pages/workOrder/edit' + }) + }, 300) + }else{ + this.showToast('鎿嶄綔鎴愬姛') + setTimeout(() => { + uni.navigateBack() + }, 300) + } } - } - }); - } else { - patrolData({ - ...handleParam, - multifileList: fileList, - id, - }).then(res => { + }); + } else { this.showToast('鎿嶄綔鎴愬姛') - uni.navigateBack() - }) - } - + setTimeout(() => { + uni.navigateBack() + }, 300) + } + }) }, getDetail() { const { @@ -360,10 +365,11 @@ } .sub_btn { - position: fixed; - bottom: 68rpx; - left: 40rpx; + // position: fixed; + // bottom: 68rpx; + // left: 40rpx; width: 670rpx; + margin-top: 60rpx; height: 88rpx; background: $primaryColor; box-shadow: 0rpx 8rpx 20rpx 0rpx rgba(0, 104, 255, 0.3); @@ -417,7 +423,7 @@ textarea { box-sizing: border-box; width: 690rpx; - min-height: 200rpx; + min-height: 140rpx; background-color: #f7f7f7; font-size: 28rpx; color: #333333; diff --git a/h5/pages/polling/task.vue b/h5/pages/polling/task.vue index 6ba466e..0e72898 100644 --- a/h5/pages/polling/task.vue +++ b/h5/pages/polling/task.vue @@ -44,13 +44,17 @@ <view class="line" @click="itemClick(item)">鎵ц鏃堕棿锛歿{ item.startDate.slice(11, 16) }} 鑷� {{ item.endDate.slice(11, 16) }}</view> <view class="line"> <view @click="itemClick(item)">瀹屾垚鎯呭喌锛歿{item.finishNum || 0}}/{{item.patrolNum}}</view> - <view v-if="param.queryStatus == '0,1'" class="btn" @click="openSc(item)"> + <view v-if="param.queryStatus == '0,1' && item.flag && (item.status == 0 || item.status == 1)" class="btn" @click="openSc(item)"> <image src="@/static/side/ic_saoma@2x.png" class="saoma" mode=""></image> <view>鎵爜宸℃</view> </view> </view> </view> </view> + <view v-if="list.length == 0" class="empty_wrap"> + <image src="@/static/empty.png" mode=""></image> + <view class="">鏆傛棤鏁版嵁</view> + </view> </view> </scroll-view> @@ -93,7 +97,9 @@ // activeItem: {} }; }, - onLoad() { + onShow() { + this.page = 1 + this.list = [] this.getList() }, methods: { @@ -184,7 +190,11 @@ page, capacity: 10 }).then(res => { - this.list = [...this.list, ...res.data.records] + this.list = [...this.list, ...res.data.records] + this.list.forEach(item => { + let time = new Date(item.startDate).getTime() + item.flag = new Date().getTime() > time + }) this.total = res.data.total }) } @@ -272,10 +282,11 @@ } .scroll_Y { - height: calc(100vh - 230rpx); + height: calc(100vh - 130rpx); } - .list { + .list { + .item { display: flex; // height: 290rpx; diff --git a/h5/pages/workOrder/detail.vue b/h5/pages/workOrder/detail.vue index f26e85c..c112a22 100644 --- a/h5/pages/workOrder/detail.vue +++ b/h5/pages/workOrder/detail.vue @@ -11,7 +11,12 @@ <view class="file_list"> <view class="file" v-for="(item,index) in info.fileList"> <image v-if="item.type == 0" :src="item.fileurlFull" mode="aspectFill"></image> - <video v-if="item.type == 1" :src="item.fileurlFull" :controls="false"></video> + <!-- <video v-if="item.type == 1" :src="item.fileurlFull" :controls="false"></video> --> + <view v-if="item.type == 1" @click="videoClick(item)" class="video_wrap"> + <video :src="item.fileurlFull" initial-time="0.01" :show-center-play-btn="false" :controls="false" + class="video" :enable-progress-gesture="false" autoplay muted /> + <image src="@/static/play.png" class="play" mode=""></image> + </view> </view> </view> <view class="content"> @@ -23,7 +28,7 @@ <view class="la">涓婃姤浜猴細</view> <view class="val">{{ info.creatorName }}{{info.creatorCompany ? '-' + info.creatorCompany : ''}}</view> </view> - <view class="line" v-if="info.creatorPhone || info.creatorMobile"> + <view class="line" v-if="info.creatorPhone || info.creatorMobile"> <view class="la">鑱旂郴鐢佃瘽锛�</view> <view class="val">{{ info.creatorMobile || info.creatorPhone }}</view> </view> @@ -63,7 +68,7 @@ <image src="@/static/side/phoneed.png" class="icon"></image> <text>涓婃姤浜�</text> </view> - <view class="btn active" @click="isShowHandle = true">鍘诲鐞�</view> + <view class="btn active" @click="handleOpen">鍘诲鐞�</view> </view> <!-- --> <u-popup :show="showUpload" @close="showUpload = false" zIndex="10076" closeOnClickOverlay> @@ -74,8 +79,8 @@ </u-popup> <!-- --> <!-- 宸ュ崟澶勭悊 --> - <u-popup :show="isShowHandle" :round="10" :safeAreaInsetBottom="true" mode="bottom" closeable - @close="isShowHandle = false"> + <u-popup :show="isShowHandle" :round="10" :safeAreaInsetTop="true" :safeAreaInsetBottom="true" mode="bottom" + closeable @close="isShowHandle = false"> <view class="appr_modal"> <view class="title">宸ュ崟澶勭悊</view> <view class="df_sb"> @@ -118,13 +123,18 @@ <u-datetime-picker :minDate="new Date().getTime()" :show="isShowHandleDate" @confirm="confirmHandleDate" @cancel="isShowHandleDate = false" mode="datetime"></u-datetime-picker> <!-- --> + <view v-if="videoPlay" class="video_app"> + <video controls autoplay muted x5-video-player-type="h5" x5-video-player-fullscreen="true" id="myvideo" + :src="videoUrl" @fullscreenchange="screenChange"></video> + <view class="bg" @click="closeVideo"></view> + </view> </view> </template> <script> import { uploadUrl, - ywWorkorderD, + ywWorkorderD, ywWorkorderDeal } from '@/api' import dayjs from 'dayjs'; @@ -135,10 +145,14 @@ info: {}, showUpload: false, isShowHandle: false, - isShowHandleDate: false, + isShowHandleDate: false, userInfo: uni.getStorageSync('userInfo') || {}, handleParam: {}, - dealFileList: [] + dealFileList: [], + + videoPlay: false, + videoContext: null, + videoUrl: '' }; }, onLoad(option) { @@ -147,25 +161,55 @@ this.getDetail() }, methods: { - onSubmit() { - const { handleParam, dealFileList, id } = this - if (!handleParam.dealTime) return this.showToast('澶勭悊鏃堕棿涓嶈兘涓虹┖') - ywWorkorderDeal({ - ...handleParam, - id, - dealFileList - }).then(res => { - if(res.code == 200){ - this.showToast('鎿嶄綔鎴愬姛') - uni.navigateBack() - } + handleOpen() { + this.isShowHandle = true + this.$set(this.handleParam, 'dealTime', dayjs().format('YYYY-MM-DD HH:mm:ss')); + }, + videoClick(item) { + this.videoPlay = true; + this.videoContext = uni.createVideoContext("myvideo", this); // this杩欎釜鏄疄渚嬪璞� 蹇呬紶 + this.videoUrl = item.fileurlFull; + this.videoContext.requestFullScreen(); + this.$nextTick(() => { + this.videoContext.play(); }) - }, - handleCall() { - const { info } = this - uni.makePhoneCall({ - phoneNumber: info.creatorMobile - }); + }, + screenChange(e) { + let fullScreen = e.detail.fullScreen // 鍊紅rue涓鸿繘鍏ュ叏灞忥紝false涓洪��鍑哄叏灞� + if (!fullScreen) { + //閫�鍑哄叏灞� + this.videoPlay = false // 闅愯棌鎾斁鐩掑瓙 + } + }, + closeVideo() { + this.videoPlay = false + this.videoContext = null + }, + onSubmit() { + const { + handleParam, + dealFileList, + id + } = this + if (!handleParam.dealTime) return this.showToast('澶勭悊鏃堕棿涓嶈兘涓虹┖') + ywWorkorderDeal({ + ...handleParam, + id, + dealFileList + }).then(res => { + if (res.code == 200) { + this.showToast('鎿嶄綔鎴愬姛') + uni.navigateBack() + } + }) + }, + handleCall() { + const { + info + } = this + uni.makePhoneCall({ + phoneNumber: info.creatorMobile + }); }, getDetail() { ywWorkorderD(this.id).then(res => { @@ -323,7 +367,7 @@ image, video { - width: 156rpx; + width: 156rpx; height: 156rpx; } } @@ -488,28 +532,37 @@ display: flex; flex-wrap: wrap; margin-bottom: 30rpx; + max-height: 362rpx; + overflow-y: auto; + margin-right: -30rpx; } .adduser_list_item_ipt1_upload { margin-top: 24rpx; width: 156rpx; height: 156rpx; - margin-right: 24rpx; - border: 2rpx solid #e5e5e5; + margin-right: 22rpx; + border: 1rpx solid #e5e5e5; background: #f7f7f7; color: #666666; font-size: 22rpx; + box-sizing: border-box; display: flex; flex-direction: column; align-items: center; justify-content: center; position: relative; + &:nth-of-type(4n) { + margin-right: 0; + } + .close { position: absolute; right: -20rpx; top: -20rpx; z-index: 9999; + background-color: #fff; } image { @@ -523,4 +576,46 @@ } } } + + .video_wrap { + position: relative; + border: 1px solid; + width: 156rpx; + height: 156rpx; + border-radius: 4rpx; + + .play { + width: 60rpx !important; + height: 60rpx !important; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + } + } + + .video_app { + overflow: hidden; + position: fixed; + left: 0; + top: 0; + width: 100vw; + height: 100vh; + display: flex; + align-items: center; + z-index: 9990; + + .bg { + background-color: rgba(0, 0, 0, .6); + position: absolute; + width: 100%; + height: 100%; + z-index: -1; + } + + video { + width: 100%; + height: 42vh; + } + } </style> \ No newline at end of file diff --git a/h5/pages/workOrder/edit.vue b/h5/pages/workOrder/edit.vue index 3e0c34d..ff72df9 100644 --- a/h5/pages/workOrder/edit.vue +++ b/h5/pages/workOrder/edit.vue @@ -51,7 +51,7 @@ <u-icon class="close" size="20" name="close-circle-fill" color="red" @click="fileDel('fileList', i)"></u-icon> <image v-if="item.type == 0" :src="item.fileurlFull" mode="widthFix"></image> - <video v-if="item.type == 1" :src="item.fileurlFull" :controls="false"></video> + <video v-if="item.type == 1" :show-center-play-btn="false" :src="item.fileurlFull" :controls="false"></video> </view> </view> </view> @@ -116,7 +116,7 @@ showCate2: false, areaType: [ [{ - name: '瀹ゅ唴瑁呬慨', + name: '瀹ゅ唴缁翠慨', id: 0 }, { @@ -431,7 +431,10 @@ position: absolute; right: -20rpx; top: -20rpx; - z-index: 9999; + z-index: 9999; + background-color: #fff; + border-radius: 50%; + overflow: hidden; } image { diff --git a/h5/pages/workOrder/list.vue b/h5/pages/workOrder/list.vue index 2da419f..7d8e1d2 100644 --- a/h5/pages/workOrder/list.vue +++ b/h5/pages/workOrder/list.vue @@ -32,7 +32,7 @@ <scroll-view scroll-y="true" class="scroll_Y" @scrolltolower="scrolltolower"> <view class="list"> <view class="item" v-for="item in list" @click="itemClick(item)"> - <image v-if="item.dealStatus == 0" src="@/static/side/workordered.png" class="icon"></image> + <image v-if="item.dealStatus == 0 || item.dealStatus == 1" src="@/static/side/workordered.png" class="icon"></image> <image v-else src="@/static/side/workorder.png" class="icon"></image> <view class="content"> <view class="name_wrap line"> @@ -216,7 +216,7 @@ } .scroll_Y{ - height: calc(100vh - 320rpx); + height: calc(100vh - 250rpx); } .list { .item { @@ -224,7 +224,7 @@ // height: 290rpx; padding: 30rpx 0; border-bottom: 2rpx solid #E5E5E5; - + .icon { width: 80rpx; height: 80rpx; diff --git a/h5/static/plan_ic_finish@2x.png b/h5/static/plan_ic_finish@2x.png new file mode 100644 index 0000000..01fafcc --- /dev/null +++ b/h5/static/plan_ic_finish@2x.png Binary files differ diff --git a/h5/static/play.png b/h5/static/play.png new file mode 100644 index 0000000..1b4b225 --- /dev/null +++ b/h5/static/play.png Binary files differ diff --git a/h5/utils/config.js b/h5/utils/config.js index 450773b..49ff135 100644 --- a/h5/utils/config.js +++ b/h5/utils/config.js @@ -1,6 +1,6 @@ - // export const baseUrl = 'gateway_interface/' + export const baseUrl = 'gateway_interface/' // export const baseUrl = 'http://192.168.0.173/gateway_interface/' -export const baseUrl = 'https://zhcg.fnwtzx.com/gateway_interface/' +// export const baseUrl = 'https://zhcg.fnwtzx.com/gateway_interface/' export const uploadAvatar = `${baseUrl}visitsAdmin/cloudService/web/public/uploadFtp.do` export const uploadUrl = `${baseUrl}visitsAdmin/cloudService/public/uploadBatch` -- Gitblit v1.9.3