Merge remote-tracking branch 'origin/master'
| | |
| | | VUE_APP_CONTEXT_PATH = './' |
| | | |
| | | # VUE_APP_API_URL = 'http://localhost:10010' |
| | | # VUE_APP_API_URL = 'http://192.168.0.163:10010' |
| | | VUE_APP_API_URL = 'https://dmtest.ahapp.net/fn_admin' |
| | | |
| | | VUE_APP_API_URL = 'http://192.168.0.137:10010' |
| | | |
| | | # VUE_APP_API_URL = 'https://dmtest.ahapp.net/fn_admin' |
| | | |
| | | # VUE_APP_API_URL = 'http://10.50.250.253:8088/gateway_interface' |
| | | |
| | |
| | | # VUE_APP_API_URL = 'http://192.168.5.13/gateway_interface' |
| | | |
| | | # 任康 |
| | | # VUE_APP_API_URL = 'http://192.168.0.163:10010/' |
| | | VUE_APP_API_URL = 'http://192.168.0.137:10010/' |
| | | |
| | | # 萍姐 |
| | | # VUE_APP_API_URL = 'http://192.168.0.108:10010/' |
| | | |
| | | # 测试服务 |
| | | VUE_APP_API_URL = 'https://dmtest.ahapp.net/gateway_interface' |
| | | # VUE_APP_API_URL = 'https://dmtest.ahapp.net/gateway_interface' |
| | |
| | | export function companyList (data) { |
| | | return request.post('/visitsAdmin/cloudService/business/company/list', data) |
| | | } |
| | | // 列表 |
| | | export function companyListConstract (data) { |
| | | return request.post('/visitsAdmin/cloudService/business/company/listForConstract', data) |
| | | } |
| | |
| | | <el-form-item :label="form.type==1?'市名称':'县区名称'" prop="name"> |
| | | <el-input v-model="form.name" :placeholder="form.type==1?'输入市名称':'输入县区名称'" v-trim/> |
| | | </el-form-item> |
| | | <el-form-item label="排序码" prop="sortnum"> |
| | | <el-input v-model="form.sortnum" placeholder="请输入排序码" v-trim/> |
| | | <el-form-item label="行政区代码" prop="code"> |
| | | <el-input v-model="form.code" placeholder="请输入排序码" v-trim/> |
| | | </el-form-item> |
| | | <!-- <el-form-item label="排序码" prop="sortnum"> |
| | | <el-input v-model="form.sortnum" placeholder="请输入排序码" v-trim/> |
| | | </el-form-item>--> |
| | | </el-form> |
| | | </GlobalAlertWindow> |
| | | </template> |
| | |
| | | id: null, |
| | | parentId: null, |
| | | name: null, |
| | | code:null, |
| | | sortnum: '0', |
| | | type: null |
| | | }, |
| | |
| | | <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 /> |
| | |
| | | </el-table-column> |
| | | <el-table-column prop="realname" label="巡检人" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="editDate" label="巡检时间" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="" label="巡检结果" min-width="100" show-overflow-tooltip> |
| | | <el-table-column prop="files" label="巡检结果" min-width="100" show-overflow-tooltip > |
| | | <template v-slot="{ row }"> |
| | | <span class="gray" v-if="row.dealStatus == 0">正常</span> |
| | | <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 }"> |
| | | <div class="value" v-if="row.multifileList != null && row.multifileList.length"> |
| | | <div v-for="item in row.multifileList" :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: 60px;height: 60px;object-fit: contain;" :src="item.fileurlFull" /> |
| | | <el-image v-else-if="item.fileurlFull" style="width:60px; height: 60px" :src="item.fileurlFull" |
| | | :preview-src-list="[item.fileurlFull]"> |
| | | </el-image> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="dealInfo" label="巡检说明" min-width="100" show-overflow-tooltip /> |
| | | </el-table> |
| | | <div class="mt20"> |
| | |
| | | <TableLayout :permissions="['business:ywpatrolscheme:query']"> |
| | | <!-- 搜索表单 --> |
| | | <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline> |
| | | <el-form-item label="开始日期" prop="selDate"> |
| | | <el-date-picker type="daterange" v-model="searchForm.selDate" @change="changeSelDate" clearable value-format="yyyy-MM-dd" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="结束日期" prop="selDateSec"> |
| | | <el-date-picker type="daterange" v-model="searchForm.selDateSec" @change="changeSelDateSec" clearable value-format="yyyy-MM-dd" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="计划名称" prop="title"> |
| | | <el-input v-model="searchForm.title" placeholder="请输入计划名称" @keypress.enter.native="search"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="计划日期" prop="selDate"> |
| | | <el-date-picker type="daterange" v-model="searchForm.selDate" clearable value-format="yyyy-MM-dd" |
| | | @change="changeDate" /> |
| | | </el-form-item> |
| | | |
| | | <section> |
| | | <el-button type="primary" @click="search">搜索</el-button> |
| | | <el-button @click="reset">重置</el-button> |
| | |
| | | return { |
| | | // 搜索 |
| | | searchForm: { |
| | | title: '' |
| | | title: '', |
| | | selDate:[], |
| | | selDateSec:[] |
| | | } |
| | | } |
| | | }, |
| | |
| | | this.search() |
| | | }) |
| | | }, |
| | | changeDate(e) { |
| | | if (e && e.length > 0) { |
| | | this.$set(this.searchForm, 'startDate', e[0]) |
| | | this.$set(this.searchForm, 'endDate', e[1]) |
| | | } else { |
| | | this.$set(this.searchForm, 'startDate', '') |
| | | this.$set(this.searchForm, 'endDate', '') |
| | | } |
| | | |
| | | }, |
| | | reset() { |
| | | this.searchForm = {} |
| | | this.search() |
| | |
| | | this.$refs.operaYwPatrolSchemeWindow.initData() |
| | | |
| | | }, |
| | | changeSelDate(e) { |
| | | if (e && e.length > 0) { |
| | | this.$set(this.searchForm, 'startDate', e[0] ) |
| | | this.$set(this.searchForm, 'endDate', e[1] ) |
| | | } else { |
| | | this.$set(this.searchForm, 'startDate', '') |
| | | this.$set(this.searchForm, 'endDate', '') |
| | | } |
| | | }, |
| | | changeSelDateSec(e) { |
| | | if (e && e.length > 0) { |
| | | this.$set(this.searchForm, 'startDateSec', e[0] ) |
| | | this.$set(this.searchForm, 'endDateSec', e[1] ) |
| | | } else { |
| | | this.$set(this.searchForm, 'startDateSec', '') |
| | | this.$set(this.searchForm, 'endDateSec', '') |
| | | } |
| | | }, |
| | | } |
| | | } |
| | | </script> |
| | |
| | | <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> |
| | |
| | | @selection-change="handleSelectionChange" |
| | | > |
| | | <el-table-column prop="name" label="地区名称" min-width="100px"></el-table-column> |
| | | <el-table-column prop="code" label="行政区代码" align="center" min-width="140px"></el-table-column> |
| | | <el-table-column prop="createDate" label="创建时间" align="center" min-width="140px"></el-table-column> |
| | | <!-- |
| | | <el-table-column prop="sortnum" label="排序码" align="center" min-width="140px"></el-table-column> |
| | | --> |
| | | <el-table-column |
| | | v-if="containPermissions(['business:areas:update', 'business:areas:create', 'business:areas:delete'])" |
| | | label="操作" |
| | |
| | | label="账单来源"> |
| | | <template slot-scope="{row}"> |
| | | <span v-if="row.type === 0">合同账单</span> |
| | | <span v-if="row.type === 1">自建账单</span> |
| | | <span v-else>自建账单</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | |
| | | page: 1, |
| | | total: 0, |
| | | tableData: [], |
| | | |
| | | |
| | | loading: false |
| | | } |
| | | }, |
| | |
| | | <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> |
| | |
| | | <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"> |
| | |
| | | </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"> |
| | |
| | | </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> |
| | |
| | | </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 }}㎡ |
| | |
| | | </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"> |
| | |
| | | </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"> |
| | |
| | | <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> |
| | |
| | | }"> |
| | | <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> |
| | |
| | | </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> |
| | | <!-- 物业条款 --> |
| | |
| | | </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"> |
| | |
| | | <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> |
| | |
| | | }"> |
| | | <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> |
| | |
| | | </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"> |
| | | <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> |
| | | <!-- 选择租客 --> |
| | |
| | | import { ywList } from '@/api/customer' |
| | | import { getUserList } from '@/api/system/user' |
| | | import { getProjectList, tree } from '@/api/project/ywProject' |
| | | import { companyList } from '@/api/company' |
| | | import {companyListConstract as companyList } from '@/api/company' |
| | | import { Message, Loading } from 'element-ui' |
| | | import { mapState } from 'vuex' |
| | | export default { |
| | |
| | | computed: { |
| | | ...mapState(['userInfo']) |
| | | }, |
| | | data () { |
| | | data() { |
| | | return { |
| | | title: '创建合同', |
| | | activeTabs: 0, |
| | |
| | | memberId: '', |
| | | memberName: '', |
| | | fileList: [], |
| | | |
| | | |
| | | zlDeposit: '', |
| | | zlPayType: '', |
| | | zlFreeStartDate: '', |
| | |
| | | advanceDays: '' |
| | | } |
| | | ], |
| | | |
| | | |
| | | |
| | | wyDeposit: '', |
| | | wyPayType: '', |
| | | wyFreeStartDate: '', |
| | |
| | | advanceDays: '' |
| | | } |
| | | ], |
| | | |
| | | |
| | | roomIds: [] |
| | | }, |
| | | |
| | | |
| | | ids: [], |
| | | |
| | | |
| | | zlList: [], |
| | | wyList: [], |
| | | |
| | | |
| | | rules, |
| | | |
| | | |
| | | contactsList: [], |
| | | |
| | | loadingInstance: null, |
| | |
| | | { name: '元/m²·年', value: 2 }, |
| | | { name: '元/场', value: 6 }, |
| | | ], |
| | | |
| | | |
| | | |
| | | houseLvThree: [] |
| | | } |
| | | }, |
| | | methods: { |
| | | open (title, target) { |
| | | open(title, target) { |
| | | this.title = title |
| | | this.ids = [] |
| | | this.houseList = [] |
| | |
| | | // this.getHouseTree() |
| | | }) |
| | | }, |
| | | changePayType (e) { |
| | | changePayType(e) { |
| | | if (e === 0) { |
| | | this.unitOps = [ |
| | | { name: '元/m²·天', value: 0 }, |
| | |
| | | } |
| | | this.clearzl() |
| | | }, |
| | | changePayType1 (e) { |
| | | changePayType1(e) { |
| | | if (e === 0) { |
| | | this.unitOps1 = [ |
| | | { name: '元/m²·天', value: 0 }, |
| | |
| | | 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) { |
| | |
| | | } |
| | | } |
| | | }, |
| | | 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) => { |
| | |
| | | } |
| | | } |
| | | }, |
| | | submit () { |
| | | submit() { |
| | | // 调用新建接口 |
| | | this.isWorking = true |
| | | create({ ...this.form }) |
| | |
| | | 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, |
| | |
| | | }, |
| | | 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 |
| | |
| | | this.zlList = arr |
| | | }) |
| | | }, |
| | | generateWY () { |
| | | generateWY() { |
| | | getBillList({ ...this.form, billType: 1 }) |
| | | .then(res => { |
| | | this.wy = true |
| | |
| | | this.wyList = arr |
| | | }) |
| | | }, |
| | | addZl () { |
| | | addZl() { |
| | | this.form.zlDetailList.push({ |
| | | circleType: 0, |
| | | startDate: this.form.startDate, |
| | |
| | | advanceDays: '' |
| | | }) |
| | | }, |
| | | addWy () { |
| | | addWy() { |
| | | this.form.wyDetailList.push({ |
| | | circleType: 0, |
| | | startDate: this.form.startDate, |
| | |
| | | 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', |
| | |
| | | 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开始 |
| | |
| | | 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() |
| | |
| | | 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') |
| | | this.visible = false |
| | |
| | | |
| | | <style lang="scss" scoped> |
| | | @import '@/assets/style/variables.scss'; |
| | | |
| | | .fixed { |
| | | background: #ffffff; |
| | | position: sticky; |
| | |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: space-between; |
| | | |
| | | span { |
| | | font-weight: 500; |
| | | font-size: 14px; |
| | |
| | | }) |
| | | }, |
| | | methods: { |
| | | open (title, target,type) { |
| | | open(title, target, type) { |
| | | this.title = title |
| | | this.visible = true |
| | | this.getProject() |
| | |
| | | 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) |
| | | }) |
| | | }, |
| | |
| | | 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) |
| | | } |
| | | }) |
| | | } |
| | | } |
| | |
| | | this.title = title |
| | | this.visible = true |
| | | this.getProject() |
| | | this.buildList = [] |
| | | this.floorList = [] |
| | | // 新建组织 |
| | | if (target == null) { |
| | | this.$nextTick(() => { |
| | |
| | | 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 === '') { |
| | |
| | | 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) |
| | | } |
| | | }) |
| | | |
| | | }, |
| | |
| | | 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) { |
| | |
| | | this.visible = true |
| | | this.getProject() |
| | | this.getCate() |
| | | // 新建 |
| | | // 新建 |
| | | if (target == null) { |
| | | this.form = { |
| | | id: null, |
| | |
| | | }, |
| | | 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) { |
| | |
| | | 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) { |
| | |
| | | <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> |
| | |
| | | <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> |
| | |
| | | </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"> |
| | |
| | | <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> |
| | |
| | | </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> |
| | |
| | | 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')) |
| | | } |
| | | }) |
| | | }, |
| | |
| | | } |
| | | |
| | | .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); |
| | |
| | | width: 100%; |
| | | display: flex; |
| | | align-items: center; |
| | | .la{ |
| | | |
| | | .la { |
| | | margin-bottom: 0; |
| | | width: 72px; |
| | | } |
| | |
| | | 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; |
| | | } |
| | |
| | | showDetail: false, |
| | | searchForm: { |
| | | selDate: [], |
| | | areaType: '', |
| | | areaIds: '', |
| | | projectId: '', |
| | | buildingId: '', |
| | |
| | | <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>
|
| | |
| | | </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'),
|
| | |
| | | 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'
|
| | | },
|
| | |
|
| | |
| | | code: ''
|
| | | },
|
| | | downTime: 0,
|
| | | code: '' |
| | | code: '111' |
| | | // code: ''
|
| | | }
|
| | | },
|
| | |
| | | import {
|
| | | uploadUrl,
|
| | | ywDevicePost,
|
| | | ywDeviceCreate
|
| | | ywDeviceCreate, |
| | | getPointRecordByCode
|
| | | } from '@/api'
|
| | | import dayjs from 'dayjs';
|
| | | import {
|
| | |
| | | },
|
| | | handleP() {
|
| | | const {
|
| | | param,
|
| | | param, |
| | | fileList
|
| | | } = this
|
| | | ywDeviceCreate({
|
| | |
| | | },
|
| | | (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) => {
|
| | |
| | | <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">
|
| | |
| | | </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>
|
| | |
| | | },
|
| | | onLoad(option) {
|
| | | this.id = option.id
|
| | | // this.getDetail()
|
| | | },
|
| | | onShow() {
|
| | | this.getDetail()
|
| | | },
|
| | | // onShow() {
|
| | | // this.getDetail()
|
| | | // },
|
| | | methods: {
|
| | | openSc() {
|
| | | this.isScaning = true;
|
| | |
| | | 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,
|
| | |
| | | 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;
|
| | |
| | | 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 {
|
| | |
| | | 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 {
|
| | |
| | | <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>
|
| | |
| | | </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">
|
| | |
| | | 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 {
|
| | |
| | | }
|
| | |
|
| | | .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);
|
| | |
| | | textarea {
|
| | | box-sizing: border-box;
|
| | | width: 690rpx;
|
| | | min-height: 200rpx;
|
| | | min-height: 140rpx;
|
| | | background-color: #f7f7f7;
|
| | | font-size: 28rpx;
|
| | | color: #333333;
|
| | |
| | | <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>
|
| | |
|
| | |
| | | // activeItem: {}
|
| | | };
|
| | | },
|
| | | onLoad() {
|
| | | onShow() { |
| | | this.page = 1 |
| | | this.list = []
|
| | | this.getList()
|
| | | },
|
| | | methods: { |
| | |
| | | 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
|
| | | })
|
| | | }
|
| | |
| | | }
|
| | |
|
| | | .scroll_Y {
|
| | | height: calc(100vh - 230rpx);
|
| | | height: calc(100vh - 130rpx);
|
| | | }
|
| | |
|
| | | .list {
|
| | | .list { |
| | | |
| | | .item {
|
| | | display: flex;
|
| | | // height: 290rpx;
|
| | |
| | | <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">
|
| | |
| | | <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>
|
| | |
| | | <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>
|
| | |
| | | </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">
|
| | |
| | | <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';
|
| | |
| | | info: {},
|
| | | showUpload: false,
|
| | | isShowHandle: false,
|
| | | isShowHandleDate: false, |
| | | isShowHandleDate: false,
|
| | | userInfo: uni.getStorageSync('userInfo') || {},
|
| | | handleParam: {},
|
| | | dealFileList: []
|
| | | dealFileList: [],
|
| | |
|
| | | videoPlay: false,
|
| | | videoContext: null,
|
| | | videoUrl: ''
|
| | | };
|
| | | },
|
| | | onLoad(option) {
|
| | |
| | | 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 // 值true为进入全屏,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 => {
|
| | |
| | |
|
| | | image,
|
| | | video {
|
| | | width: 156rpx; |
| | | width: 156rpx;
|
| | | height: 156rpx;
|
| | | }
|
| | | }
|
| | |
| | | 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 {
|
| | |
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | .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> |
| | |
| | | <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>
|
| | |
| | | showCate2: false,
|
| | | areaType: [
|
| | | [{
|
| | | name: '室内装修',
|
| | | name: '室内维修',
|
| | | id: 0
|
| | | },
|
| | | {
|
| | |
| | | position: absolute;
|
| | | right: -20rpx;
|
| | | top: -20rpx;
|
| | | z-index: 9999;
|
| | | z-index: 9999; |
| | | background-color: #fff; |
| | | border-radius: 50%; |
| | | overflow: hidden;
|
| | | }
|
| | |
|
| | | image {
|
| | |
| | | <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">
|
| | |
| | |
|
| | | }
|
| | | .scroll_Y{ |
| | | height: calc(100vh - 320rpx); |
| | | height: calc(100vh - 250rpx); |
| | | }
|
| | | .list {
|
| | | .item {
|
| | |
| | | // height: 290rpx;
|
| | | padding: 30rpx 0;
|
| | | border-bottom: 2rpx solid #E5E5E5;
|
| | |
|
| | | |
| | | .icon {
|
| | | width: 80rpx;
|
| | | height: 80rpx;
|
| | |
| | | // 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` |
| | |
| | | package com.doumee.cloud.admin; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.TableField; |
| | | import com.doumee.api.BaseController; |
| | | import com.doumee.config.DataSyncConfig; |
| | | import com.doumee.config.annotation.CloudRequiredPermission; |
| | |
| | | public ApiResponse<List<Company>> list (@RequestBody Company company,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){ |
| | | return ApiResponse.success(companyService.findList(company)); |
| | | } |
| | | @ApiOperation("新建合同所属公司筛选") |
| | | @PostMapping("/listForConstract") |
| | | @CloudRequiredPermission("business:company:query") |
| | | public ApiResponse<List<Company>> listForConstract (@RequestBody Company company,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){ |
| | | return ApiResponse.success(companyService.listForConstract(company)); |
| | | } |
| | | |
| | | |
| | | |
| | |
| | | @ApiModelProperty(value = "费用类型:0=周期费用;1=一次性费用") |
| | | @TableField(exist = false) |
| | | private Integer feeType; |
| | | |
| | | @ApiModelProperty(value = "所属公司", example = "1") |
| | | private Integer companyId; |
| | | |
| | |
| | | @ApiModelProperty(value = "超期任务数") |
| | | @TableField(exist = false) |
| | | private Integer timeOutTaskNum; |
| | | |
| | | @ApiModelProperty(value = "开始日期(搜索截止日期)") |
| | | @TableField(exist = false) |
| | | @JsonFormat(pattern = "yyyy-MM-dd") |
| | | private Date startDateSec; |
| | | |
| | | @ApiModelProperty(value = "结束日期(搜索截止日期)") |
| | | @TableField(exist = false) |
| | | @JsonFormat(pattern = "yyyy-MM-dd") |
| | | private Date endDateSec; |
| | | |
| | | } |
| | |
| | | |
| | | @ApiModelProperty(value = "创建时间") |
| | | @ExcelColumn(name="创建时间") |
| | | @JsonFormat(pattern = "yyyy-MM-dd") |
| | | private Date createDate; |
| | | |
| | | @ApiModelProperty(value = "更新人编码", example = "1") |
| | |
| | | |
| | | @ApiModelProperty(value = "更新时间") |
| | | @ExcelColumn(name="更新时间") |
| | | @JsonFormat(pattern = "yyyy-MM-dd") |
| | | private Date editDate; |
| | | |
| | | @ApiModelProperty(value = "是否删除0否 1是", example = "1") |
| | |
| | | |
| | | @ApiModelProperty(value = "创建时间") |
| | | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| | | @ExcelColumn(name="上报时间",index = 5,width = 16,dateFormat = "yyyy-MM-dd HH:mm:ss") |
| | | private Date createDate; |
| | | |
| | | @ApiModelProperty(value = "更新人编码", example = "1") |
| | |
| | | |
| | | @ApiModelProperty(value = "提报时间") |
| | | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| | | @ExcelColumn(name="上报时间",index = 5,width = 16,dateFormat = "yyyy-MM-dd HH:mm:ss") |
| | | private Date submitDate; |
| | | |
| | | @ApiModelProperty(value = "工单分类编码(关联category)", example = "1") |
| | |
| | | private String code; |
| | | |
| | | @ApiModelProperty(value = "处理状态 0待处理 1已分派 2已处理", example = "1") |
| | | @ExcelColumn(name="工单状态",index = 7,width = 10,valueMapping = "0=待处理;1=已分派;1=已处理;") |
| | | @ExcelColumn(name="工单状态",index = 7,width = 10,valueMapping = "0=待处理;1=已分派;2=已处理;") |
| | | private Integer dealStatus; |
| | | |
| | | @ApiModelProperty(value = "分派人编码(关联system_user)", example = "1") |
| | |
| | | @TableField(exist = false) |
| | | private String buildingName; |
| | | @ApiModelProperty(value = "房源名称") |
| | | @ExcelColumn(name="房源",index = 2,width = 10) |
| | | @TableField(exist = false) |
| | | private String roomName; |
| | | @ApiModelProperty(value = "报修区域") |
| | | @ExcelColumn(name="报修区域",index = 2,width = 10) |
| | | @TableField(exist = false) |
| | | private String areaNameInfo; |
| | | @ApiModelProperty(value = "楼层名称") |
| | | @TableField(exist = false) |
| | | private String floorName; |
| | |
| | | |
| | | Integer createFinanceCompany(Company company); |
| | | Integer updateFinanceCompany(Company company); |
| | | |
| | | List<Company> listForConstract(Company company); |
| | | } |
| | |
| | | wrapper.lambda().eq(Areas::getId,areas.getId()); |
| | | Areas update = new Areas(); |
| | | update.setName(areas.getName()); |
| | | update.setCode(areas.getCode()); |
| | | update.setSortnum(areas.getSortnum()); |
| | | areasMapper.update(update,wrapper); |
| | | //刷新缓存数据 |
| | |
| | | CITY_LIST=null; |
| | | AREA_LIST = null; |
| | | ALL_AREA_TREE = null; |
| | | ALL_AREA_LIST = areasMapper.selectList(new QueryWrapper<>(a).lambda().orderByDesc(Areas::getSortnum)); |
| | | ALL_AREA_LIST = areasMapper.selectList(new QueryWrapper<>(a).lambda().orderByAsc(Areas::getCode)); |
| | | if(ALL_AREA_LIST!=null){ |
| | | for(Areas model : ALL_AREA_LIST){ |
| | | if(Constants.equalsInteger(model.getType(),Constants.ZERO)){ |
| | |
| | | } |
| | | |
| | | @Override |
| | | public List<Company> listForConstract(Company company) { |
| | | MPJLambdaWrapper<Company> queryWrapper = new MPJLambdaWrapper<>(); |
| | | queryWrapper.selectAll(Company.class); |
| | | queryWrapper.like(company.getName() != null,Company::getName, company.getName()); |
| | | queryWrapper.eq(Company::getStatus, Constants.ZERO); |
| | | queryWrapper.eq(Company::getType, Constants.TWO); |
| | | queryWrapper.eq(Company::getIsdeleted, Constants.ZERO); |
| | | queryWrapper.exists("select b.id from yw_account b where b.isdeleted=0 and b.company_id=t.id and b.status=0"); |
| | | queryWrapper.orderByDesc(Company::getCreateDate); |
| | | return companyMapper.selectList(queryWrapper); |
| | | } |
| | | @Override |
| | | public List<Company> findList(Company company) { |
| | | MPJLambdaWrapper<Company> queryWrapper = new MPJLambdaWrapper<>(); |
| | | if (company.getId() != null) { |
| | |
| | | throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"对不起,人员信息不存在!"); |
| | | } |
| | | if(model.getCompanyId()!=null) { |
| | | member.setEditor(member.getLoginUserInfo().getId()); |
| | | member.setEditDate(new Date()); |
| | | if(Constants.equalsInteger(member.getHeadStatus(),Constants.ONE)){ |
| | | //如果是取消主管 |
| | | companyMapper.update(null,new UpdateWrapper<Company>().lambda() |
| | |
| | | .eq(YwPatrolScheme::getIsdeleted,Constants.ZERO) |
| | | .like(StringUtils.isNotBlank(model.getTitle()),YwPatrolScheme::getTitle,model.getTitle()) |
| | | //查询有时段交集的数据 |
| | | .apply(Objects.nonNull(model.getStartDate())&&Objects.nonNull(model.getEndDate()), |
| | | " t.START_DATE <= '"+pageWrap.getModel().getEndDate()+"' and t.END_DATE >= '"+pageWrap.getModel().getStartDate()+"' " |
| | | ) |
| | | // .ge(Objects.nonNull(model.getStartDate()),YwDeviceRecord::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getStartDate())) |
| | | // .le(Objects.nonNull(model.getEndDate()),YwDeviceRecord::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getEndDate())) |
| | | /* .apply(Objects.nonNull(model.getStartDate())&&Objects.nonNull(model.getEndDate()), |
| | | " t.START_DATE <= '"+pageWrap.getModel().getEndDate()+"' or t.END_DATE >= '"+pageWrap.getModel().getStartDate()+"' " |
| | | )*/ |
| | | .ge( model.getStartDate()!=null,YwPatrolScheme::getStartDate, Utils.Date.getStart(pageWrap.getModel().getStartDate())) |
| | | .le(Objects.nonNull(model.getEndDate()),YwPatrolScheme::getStartDate, Utils.Date.getStart(pageWrap.getModel().getEndDate())) |
| | | .ge(Objects.nonNull(model.getStartDateSec()),YwPatrolScheme::getEndDate, Utils.Date.getStart(pageWrap.getModel().getStartDateSec())) |
| | | .le(Objects.nonNull(model.getEndDateSec()),YwPatrolScheme::getEndDate, Utils.Date.getStart(pageWrap.getModel().getEndDateSec())) |
| | | .orderByDesc(YwPatrolScheme::getCreateDate) |
| | | ; |
| | | IPage<YwPatrolScheme> iPage = ywPatrolSchemeMapper.selectJoinPage(page,YwPatrolScheme.class,queryWrapper); |
| | |
| | | .orderByDesc(YwPatrolScheme::getCreateDate) |
| | | ; |
| | | IPage<YwPatrolTaskRecord> iPage = ywPatrolTaskRecordMapper.selectJoinPage(page,YwPatrolTaskRecord.class,queryWrapper); |
| | | if(iPage!=null && iPage.getRecords()!=null){ |
| | | for(YwPatrolTaskRecord m : iPage.getRecords()){ |
| | | getFileListByModel(m); |
| | | } |
| | | } |
| | | return PageData.from(iPage); |
| | | } |
| | | |
| | | private void getFileListByModel(YwPatrolTaskRecord ywPatrolTaskRecord) { |
| | | //附件数据 |
| | | List<Multifile> multifileList = multifileMapper.selectJoinList(Multifile.class,new MPJLambdaWrapper<Multifile>() |
| | | .selectAll(Multifile.class) |
| | | .selectAs(SystemUser::getRealname,Multifile::getUserName) |
| | | .leftJoin(SystemUser.class,SystemUser::getId,Multifile::getCreator) |
| | | .eq(Multifile::getObjId,ywPatrolTaskRecord.getId()) |
| | | .eq(Multifile::getIsdeleted,Constants.ZERO) |
| | | .eq(Multifile::getObjType,Constants.MultiFile.FN_PATROL_TASK_RECORD_FILE.getKey())); |
| | | if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(multifileList)){ |
| | | String path = systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_RESOURCE_PATH).getCode() |
| | | +systemDictDataBiz.queryByCode(Constants.FTP,Constants.YW_PATROL).getCode(); |
| | | for (Multifile multifile:multifileList) { |
| | | if(StringUtils.isNotBlank(multifile.getFileurl())){ |
| | | multifile.setFileurlFull(path + multifile.getFileurl()); |
| | | } |
| | | } |
| | | ywPatrolTaskRecord.setMultifileList(multifileList); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | |
| | | if(Objects.isNull(ywPatrolTaskRecord)){ |
| | | throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未匹配到巡检点!"); |
| | | } |
| | | //附件数据 |
| | | List<Multifile> multifileList = multifileMapper.selectJoinList(Multifile.class,new MPJLambdaWrapper<Multifile>() |
| | | .selectAll(Multifile.class) |
| | | .selectAs(SystemUser::getRealname,Multifile::getUserName) |
| | | .leftJoin(SystemUser.class,SystemUser::getId,Multifile::getCreator) |
| | | .eq(Multifile::getObjId,ywPatrolTaskRecord.getId()) |
| | | .eq(Multifile::getIsdeleted,Constants.ZERO) |
| | | .eq(Multifile::getObjType,Constants.MultiFile.FN_PATROL_TASK_RECORD_FILE.getKey())); |
| | | if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(multifileList)){ |
| | | String path = systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_RESOURCE_PATH).getCode() |
| | | +systemDictDataBiz.queryByCode(Constants.FTP,Constants.YW_PATROL).getCode(); |
| | | for (Multifile multifile:multifileList) { |
| | | if(StringUtils.isNotBlank(multifile.getFileurl())){ |
| | | multifile.setFileurlFull(path + multifile.getFileurl()); |
| | | } |
| | | } |
| | | ywPatrolTaskRecord.setMultifileList(multifileList); |
| | | } |
| | | getFileListByModel(ywPatrolTaskRecord); |
| | | |
| | | return ywPatrolTaskRecord; |
| | | |
| | |
| | | .selectAs(YwPatrolScheme::getCode,YwPatrolTask::getPlanCode) |
| | | .selectAs(YwPatrolScheme::getTitle,YwPatrolTask::getPlanTitle) |
| | | .selectAs(SystemUser::getRealname,YwPatrolTask::getUserName) |
| | | .select(" ( select count(1) from yw_patrol_task_record ytr where ytr.TASK_ID = t.id and t.ISDELETED = 0 ) ",YwPatrolTask::getPatrolNum) |
| | | .select(" ( select count(1) from yw_patrol_task_record ytr where ytr.TASK_ID = t.id and t.STATUS = 1 and t.ISDELETED = 0) ",YwPatrolTask::getFinishNum) |
| | | .select(" ( select count(1) from yw_patrol_task_record ytr where ytr.TASK_ID = t.id and ytr.ISDELETED = 0 ) ",YwPatrolTask::getPatrolNum) |
| | | .select(" ( select count(1) from yw_patrol_task_record ytr where ytr.TASK_ID = t.id and ytr.STATUS = 1 and ytr.ISDELETED = 0) ",YwPatrolTask::getFinishNum) |
| | | .leftJoin(SystemUser.class,SystemUser::getId,YwPatrolTask::getDealUserId) |
| | | .leftJoin(YwPatrolScheme.class,YwPatrolScheme::getId,YwPatrolTask::getSchemeId) |
| | | .eq(YwPatrolTask::getIsdeleted, Constants.ZERO) |
| | |
| | | .selectAs(YwPatrolScheme::getCode,YwPatrolTask::getPlanCode) |
| | | .selectAs(YwPatrolScheme::getTitle,YwPatrolTask::getPlanTitle) |
| | | .selectAs(SystemUser::getRealname,YwPatrolTask::getUserName) |
| | | .select(" ( select count(1) from yw_patrol_task_record ytr where ytr.TASK_ID = t.id and t.ISDELETED = 0 ) ",YwPatrolTask::getPatrolNum) |
| | | .select(" ( select count(1) from yw_patrol_task_record ytr where ytr.TASK_ID = t.id and t.STATUS = 1 and t.ISDELETED = 0) ",YwPatrolTask::getFinishNum) |
| | | .select(" ( select count(1) from yw_patrol_task_record ytr where ytr.TASK_ID = t.id and ytr.ISDELETED = 0 ) ",YwPatrolTask::getPatrolNum) |
| | | .select(" ( select count(1) from yw_patrol_task_record ytr where ytr.TASK_ID = t.id and ytr.STATUS = 1 and ytr.ISDELETED = 0) ",YwPatrolTask::getFinishNum) |
| | | .leftJoin(SystemUser.class,SystemUser::getId,YwPatrolTask::getDealUserId) |
| | | .leftJoin(YwPatrolScheme.class,YwPatrolScheme::getId,YwPatrolTask::getSchemeId) |
| | | .eq(YwPatrolTask::getIsdeleted, Constants.ZERO) |
| | |
| | | List<YwRoom> ywRoomList = ywRoomMapper.selectList(new QueryWrapper<YwRoom>().lambda() |
| | | .eq(YwRoom::getIsdeleted,Constants.ZERO) |
| | | .eq(YwRoom::getStatus,Constants.ZERO) |
| | | .eq(YwRoom::getIsInvestment,Constants.ONE) |
| | | .eq(Objects.nonNull(dataDTO.getProjectId()),YwRoom::getProjectId,dataDTO.getProjectId()) |
| | | .apply(Objects.nonNull(dataDTO)&&Objects.nonNull(dataDTO.getStartDate())&&Objects.nonNull(dataDTO.getEndDate())," id not in (" + |
| | | " SELECT y2.room_id FROM yw_contract y1 left join yw_contract_room y2 on y1.id = y2.contract_id where 1 = 1 and y1.`STATUS` in( 0,1,2) " + |
| | |
| | | " SELECT y2.room_id FROM yw_contract y1 left join yw_contract_room y2 on y1.id = y2.contract_id where 1 = 1 and y1.`STATUS` = 3 " + |
| | | " and y1.START_DATE < '"+dataDTO.getEndDate()+" 00:00:00' and y1.BT_DATE > '"+ dataDTO.getStartDate() +" 00:00:00' " + |
| | | " ) ") |
| | | .orderByAsc(YwRoom::getSortnum) |
| | | .orderByAsc(YwRoom::getRoomNum) |
| | | ); |
| | | |
| | | for (YwRoom data:ywRoomList) { |
| | |
| | | queryWrapper.orderByAsc(sortData.getProperty()); |
| | | } |
| | | } |
| | | if(StringUtils.isNotBlank(pageWrap.getModel().getBuildingName())){ |
| | | queryWrapper.and(rw ->{ |
| | | rw.like(YwBuilding::getName,pageWrap.getModel().getBuildingName()).or() |
| | | .like(YwRoom::getName,pageWrap.getModel().getBuildingName()); |
| | | }); |
| | | } |
| | | queryWrapper.ge(Objects.nonNull(pageWrap.getModel().getQueryStartTime()), YwWorkorder::getCreateDate, pageWrap.getModel().getQueryStartTime()) |
| | | .le(Objects.nonNull(pageWrap.getModel().getQueryEndTime()), YwWorkorder::getCreateDate, pageWrap.getModel().getQueryEndTime()); |
| | | queryWrapper.orderByDesc(YwContract::getCreateDate ); |
| | | return PageData.from(ywWorkorderMapper.selectPage(page, queryWrapper)); |
| | | |
| | | PageData<YwWorkorder> result = PageData.from(ywWorkorderMapper.selectPage(page, queryWrapper)); |
| | | if(result!=null && result.getRecords()!=null){ |
| | | for(YwWorkorder m : result.getRecords()){ |
| | | if(Constants.equalsInteger(m.getAreaType(),Constants.ZERO)){ |
| | | //0室内维修 |
| | | m.setAreaNameInfo(StringUtils.defaultString(m.getBuildingName(),"")+"/"+StringUtils.defaultString(m.getRoomNum(),"")); |
| | | }else{ |
| | | m.setAreaNameInfo(StringUtils.defaultString(m.getBuildingName(),"")+"/"+StringUtils.defaultString(m.getFloorName(),"")); |
| | | } |
| | | } |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | @Override |
| | |
| | | import com.doumee.core.constants.ResponseStatus; |
| | | import com.doumee.core.erp.ErpConstants; |
| | | import com.doumee.core.erp.ErpTool; |
| | | import com.doumee.core.erp.model.openapi.request.erp.*; |
| | | import com.doumee.core.erp.model.openapi.request.*; |
| | | import com.doumee.core.erp.model.openapi.request.erp.OrgListRequest; |
| | | import com.doumee.core.erp.model.openapi.request.erp.UserFailRequest; |
| | | import com.doumee.core.erp.model.openapi.request.erp.UserListRequest; |
| | | import com.doumee.core.erp.model.openapi.response.*; |
| | | import com.doumee.core.erp.model.openapi.response.erp.ERPApiResponse; |
| | | import com.doumee.core.erp.model.openapi.response.erp.ErpOrgListResponse; |
| | | import com.doumee.core.erp.model.openapi.response.erp.ErpUserListResponse; |
| | | import com.doumee.core.exception.BusinessException; |
| | | import com.doumee.core.haikang.model.HKConstants; |
| | | import com.doumee.core.model.PageData; |
| | | import com.doumee.core.model.PageWrap; |
| | | import com.doumee.core.erp.model.openapi.request.*; |
| | | import com.doumee.core.erp.model.openapi.response.*; |
| | | import com.doumee.core.erp.model.openapi.response.erp.ErpOrgListResponse; |
| | | import com.doumee.core.erp.model.openapi.response.erp.ErpUserListResponse; |
| | | import com.doumee.core.utils.Constants; |
| | | import com.doumee.core.utils.DESUtil; |
| | | import com.doumee.core.utils.DateUtil; |
| | |
| | | import com.doumee.dao.business.join.DeviceEventJoinMapper; |
| | | import com.doumee.dao.business.join.VisitEventJoinMapper; |
| | | import com.doumee.dao.business.model.*; |
| | | import com.doumee.service.business.ext.ERPSyncService; |
| | | import com.doumee.service.business.InterfaceLogService; |
| | | import com.doumee.service.business.ext.ERPSyncService; |
| | | import com.doumee.service.business.impl.MemberServiceImpl; |
| | | import com.doumee.service.business.impl.hksync.ferp.HkSyncOrgUserToHKServiceImpl; |
| | | import com.github.yulichang.wrapper.MPJLambdaWrapper; |