123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128 |
- <template>
- <zj-tab-page ref="tabPage" :defaultActives="[{ key: 'list', label: $route.meta.title+'-列表', essential: true }]">
- <template slot-scope="{activeKey, data}">
- <template-page v-if="activeKey == 'list'" ref="pageRef" :get-list="getList" :table-attributes="tableAttributes" :table-events="tableEvents"
- :options-evens-group="optionsEvensGroup" :moreParameters="moreParameters" :column-parsing="columnParsing"
- :operation="operation()" :exportList="exportList" :operationColumnWidth="160">
- <div slot="moreSearch">
- <el-radio-group v-model="examineStatus" size="mini" @change="changeType">
- <el-radio-button label="">全部</el-radio-button>
- <el-radio-button label="IN">未出库</el-radio-button>
- <el-radio-button label="OUT">已出库</el-radio-button>
- </el-radio-group>
- <br><br>
- </div>
- </template-page>
- <div v-if="~['add', 'edit'].indexOf(activeKey)" style="box-sizing: border-box;padding: 16px;">
- <el-form ref="formRef" :model="formData" :rules="formRules" label-position="left" label-width="80px">
- <div style="font-weight: 500;">客户信息</div>
- <el-divider></el-divider>
- <el-row :gutter="20">
- <el-col :span="6">
- <el-form-item label="所属商户" prop="companyName">
- <el-input v-model="formData.companyName" autocomplete="off" placeholder="请输入所属商户" disabled></el-input>
- </el-form-item>
- </el-col>
- <el-col :span="6">
- <el-form-item label="销售类型" prop="saleType">
- <el-radio-group v-model="formData.saleType" disabled>
- <el-radio :label="1">线上销售</el-radio>
- <el-radio :label="2">线下销售</el-radio>
- </el-radio-group>
- </el-form-item>
- </el-col>
- <el-col :span="6">
- <el-form-item label="订单编号" prop="orderId">
- <el-input v-model="formData.orderId" autocomplete="off" placeholder="请输入订单编号"></el-input>
- </el-form-item>
- </el-col>
- <el-col :span="6">
- <el-form-item label="工单类型" prop="orderSmallType">
- <el-select v-model="formData.orderSmallType" placeholder="请选择">
- <el-option
- v-for="item in orderTypeList"
- :key="item.id"
- :label="item.orderSmallTypeText"
- :value="item.id">
- </el-option>
- </el-select>
- </el-form-item>
- </el-col>
- <el-col :span="6">
- <el-form-item label="工单编号" prop="pgOrderId">
- <el-input v-model="formData.pgOrderId" autocomplete="off" placeholder="请输入工单编号"></el-input>
- </el-form-item>
- </el-col>
- <el-col :span="6">
- <el-form-item label="完工时间" prop="overTime">
- <el-date-picker
- v-model="formData.overTime"
- format="yyyy-MM-dd"
- value-format="yyyy-MM-dd"
- style="width: 100%;"
- type="date"
- placeholder="选择日期">
- </el-date-picker>
- </el-form-item>
- </el-col>
- <el-col :span="6">
- <el-form-item label="客户名称" prop="userName">
- <el-input v-model="formData.userName" autocomplete="off" placeholder="请输入客户名称"></el-input>
- </el-form-item>
- </el-col>
- <el-col :span="6">
- <el-form-item label="客户电话" prop="userPhone">
- <el-input v-model="formData.userPhone" autocomplete="off" placeholder="请输入客户电话"></el-input>
- </el-form-item>
- </el-col>
- <el-col :span="24">
- <el-form-item label="客户地址" prop="province" :required="true">
- <el-row>
- <el-col :span="5" style="margin-right: 12px;">
- <el-select v-model="formData.provinceId" placeholder="请选择省" style="width: 100%;" @change="changeProvince">
- <el-option
- v-for="item in provinceList.map(v => ({ value: v.id, label: v.name }))"
- :key="item.value"
- :label="item.label"
- :value="item.value">
- </el-option>
- </el-select>
- </el-col>
- <el-col :span="5" style="margin-right: 12px;">
- <el-select v-model="formData.cityId" placeholder="请选择市" style="width: 100%;" @change="changeCity">
- <el-option
- v-for="item in cityList.map(v => ({ value: v.id, label: v.name }))"
- :key="item.value"
- :label="item.label"
- :value="item.value">
- </el-option>
- </el-select>
- </el-col>
- <el-col :span="5" style="margin-right: 12px;">
- <el-select v-model="formData.areaId" placeholder="请选择区" style="width: 100%;" @change="changeArea">
- <el-option
- v-for="item in areaList.map(v => ({ value: v.id, label: v.name }))"
- :key="item.value"
- :label="item.label"
- :value="item.value">
- </el-option>
- </el-select>
- </el-col>
- <el-col :span="8">
- <el-select v-model="formData.streetId" placeholder="请选择街道" style="width: 100%;" @change="changeStreet">
- <el-option
- v-for="item in streetList.map(v => ({ value: v.id, label: v.name }))"
- :key="item.value"
- :label="item.label"
- :value="item.value">
- </el-option>
- </el-select>
- </el-col>
- </el-row>
- </el-form-item>
- </el-col>
- <el-col :span="24">
- <el-form-item label="" prop="userAddress">
- <el-row :gutter="20">
- <el-col :span="22">
- <el-input type="text" v-model="formData.userAddress" placeholder="详细地址"></el-input>
- </el-col>
- <el-col :span="2">
- <geographicalPosi :formData="formData" @selectPosi="selectAddress"/>
- </el-col>
- </el-row>
- </el-form-item>
- </el-col>
- <el-col :span="24">
- <el-form-item label="备注" prop="remark">
- <el-input type="textarea" v-model="formData.remark" autocomplete="off" placeholder="请输入备注"></el-input>
- </el-form-item>
- </el-col>
- <el-col :span="24">
- <el-form-item label="附件" prop="remark">
- <el-upload class="avatar-uploader" style="height:122px" :action="baseURL + 'common/upload'" :headers="myHeaders"
- :show-file-list="false" :on-success="uploadSuccess" :before-upload="beforeUpload">
- <img v-if="formData.fileUrl" :src="formData.fileUrl" class="avatar">
- <i v-else class="el-icon-plus avatar-uploader-icon"></i>
- </el-upload>
- </el-form-item>
- </el-col>
- </el-row>
- </el-form>
- <el-tabs v-model="formTabs">
- <el-tab-pane label="旧机信息" name="a"></el-tab-pane>
- </el-tabs>
- <div v-show="formTabs == 'a'">
- <div style="margin-top: 30px;">
- <el-button type="primary" size="small" @click="addOld()">添加旧机</el-button>
- </div>
- <el-table
- class="specTable"
- :data="oldList"
- element-loading-text="Loading"
- border
- highlight-current-row
- stripe
- style="margin-top: 20px">
- <el-table-column align="center" label="大类" prop="mainId" min-width="160">
- <template slot-scope="scope">
- <el-select
- size="small"
- v-model="scope.row.mainId"
- filterable
- placeholder="请选择"
- @change="changeMain(scope.$index, scope.row)"
- v-if="scope.row.isEdit">
- <el-option
- v-for="item in mainList"
- :key="item.categoryId"
- :label="item.name"
- :value="item.categoryId">
- </el-option>
- </el-select>
- <div v-else>{{scope.row.mainName}}</div>
- </template>
- </el-table-column>
- <el-table-column align="center" label="小类" prop="smallId" min-width="160">
- <template slot-scope="scope">
- <el-select
- size="small"
- v-model="scope.row.smallId"
- filterable
- placeholder="请选择"
- @change="changeSmall(scope.$index, scope.row)"
- v-if="scope.row.isEdit">
- <el-option
- v-for="item in smallList"
- :key="item.categoryId"
- :label="item.name"
- :value="item.categoryId">
- </el-option>
- </el-select>
- <div v-else>{{scope.row.smallName}}</div>
- </template>
- </el-table-column>
- <el-table-column align="center" label="规格型号" prop="specId" min-width="160">
- <template slot-scope="scope">
- <el-select
- size="small"
- v-model="scope.row.specId"
- placeholder="请选择"
- @change="changeSpec(scope.$index, scope.row)"
- v-if="scope.row.isEdit">
- <el-option
- v-for="item in specList"
- :key="item.id"
- :label="item.dictName"
- :value="item.id">
- </el-option>
- </el-select>
- <div v-else>{{scope.row.specName}}</div>
- </template>
- </el-table-column>
- <el-table-column align="center" label="属性" prop="attrId" min-width="160">
- <template slot-scope="scope">
- <el-select
- size="small"
- v-model="scope.row.attrId"
- multiple
- placeholder="请选择"
- @change="changeAttr(scope.$index, scope.row)"
- v-if="scope.row.isEdit">
- <el-option
- v-for="item in attrList"
- :key="item.id"
- :label="item.dictName"
- :value="item.id"
- :disabled="panduanduoxuandanxuan(attrList, item, scope.row.attrId) && !~scope.row.attrId.indexOf(item.id)">
- {{ `${item.categoryName} - ${item.dictName}` }}
- </el-option>
- </el-select>
- <div v-else>{{scope.row.attrName.join('、')}}</div>
- </template>
- </el-table-column>
- <el-table-column align="center" label="单位" min-width="120">
- <template>台</template>
- </el-table-column>
- <el-table-column align="center" label="数量" prop="num" min-width="120">
- <template slot-scope="scope">
- <el-input size="small" v-model="scope.row.num" v-if="scope.row.isEdit"></el-input>
- <div v-else>{{scope.row.num}}</div>
- </template>
- </el-table-column>
- <el-table-column align="center" label="金额" prop="payAmount" min-width="120">
- <template slot-scope="scope">
- <el-input size="small" v-model="scope.row.payAmount" v-if="scope.row.isEdit"></el-input>
- <div v-else>{{scope.row.payAmount}}</div>
- </template>
- </el-table-column>
- <el-table-column align="center" label="操作" min-width="120" fixed="right">
- <template slot-scope="scope">
- <el-button type="text" @click="saveOld(scope.$index, scope.row)" v-if="scope.row.isEdit">保存</el-button>
- <el-button type="text" @click="editOld(scope.$index, scope.row)" v-else>编辑</el-button>
- <el-popconfirm title="确定删除吗?" @confirm="deleteOld(scope.$index)" style="margin-left: 10px">
- <el-button slot="reference" type="text">删除</el-button>
- </el-popconfirm>
- </template>
- </el-table-column>
- </el-table>
- </div>
-
- <div slot="footer" class="dialog-footer" style="margin-top: 20px;">
- <el-button size="mini" @click="data.removeTab()">取 消</el-button>
- <el-button size="mini" @click="formConfirm(data.removeTab)" type="primary">确 定</el-button>
- </div>
- </div>
- <div v-if="~['detail'].indexOf(activeKey)" style="box-sizing: border-box;padding: 16px;">
- <div style="font-weight: 500;">客户信息</div>
- <el-divider></el-divider>
- <el-descriptions border title="" :column="4" :colon="false" labelStyle="width: 8%" contentStyle="width: 17%">
- <el-descriptions-item label="所属商户">
- {{detailData.companyName}}
- </el-descriptions-item>
- <el-descriptions-item label="销售类型">
- {{{1: '线上销售', 2: '线下销售'}[detailData.saleType]}}
- </el-descriptions-item>
- <el-descriptions-item label="订单单号">
- {{detailData.orderId}}
- </el-descriptions-item>
- <el-descriptions-item label="工单类型">
- {{detailData.orderSmallTypeText}}
- </el-descriptions-item>
- </el-descriptions>
- <el-descriptions border title="" :column="4" :colon="false" labelStyle="width: 8%" contentStyle="width: 17%" style="margin-top: -1px">
- <el-descriptions-item label="订单单号">
- {{detailData.pgOrderId}}
- </el-descriptions-item>
- <el-descriptions-item label="完工时间">
- {{detailData.overTime}}
- </el-descriptions-item>
- <el-descriptions-item label="客户姓名">
- {{detailData.userName}}
- </el-descriptions-item>
- <el-descriptions-item label="客户电话">
- {{detailData.userPhone}}
- </el-descriptions-item>
- </el-descriptions>
- <el-descriptions border title="" :column="1" :colon="false" labelStyle="width: 8%" contentStyle="width: 92%" style="margin-top: -1px">
- <el-descriptions-item label="详细地址">
- {{detailData.province}}{{detailData.city}}{{detailData.area}}{{detailData.street}}{{detailData.userAddress}}
- </el-descriptions-item>
- </el-descriptions>
- <el-descriptions border title="" :column="1" :colon="false" labelStyle="width: 8%" contentStyle="width: 92%" style="margin-top: -1px">
- <el-descriptions-item label="附件">
- <el-image
- v-if="detailData.fileUrl"
- style="width: 100px; height: 100px"
- :src="detailData.fileUrl"
- :preview-src-list="[detailData.fileUrl]">
- </el-image>
- </el-descriptions-item>
- <el-descriptions-item label="备注">
- {{detailData.remark}}
- </el-descriptions-item>
- </el-descriptions>
- <el-tabs v-model="detailTabs" style="margin-top: 30px;">
- <el-tab-pane label="旧机信息" name="a"></el-tab-pane>
- </el-tabs>
- <div v-show="detailTabs == 'a'">
- <el-table
- class="specTable"
- :data="detailData.itemList"
- element-loading-text="Loading"
- border
- highlight-current-row
- stripe
- style="margin-top: 20px">
- <el-table-column align="center" label="大类" prop="mainName" min-width="160"></el-table-column>
- <el-table-column align="center" label="小类" prop="smallName" min-width="160"></el-table-column>
- <el-table-column align="center" label="规格型号" prop="specName" min-width="160"></el-table-column>
- <el-table-column align="center" label="属性" prop="attrId" min-width="160">
- <template slot-scope="scope">
- {{scope.row.oldProductManagerItemAttributes.map(o => o.dictName).join('、')}}
- </template>
- </el-table-column>
- <el-table-column align="center" label="单位" min-width="120">
- <template>台</template>
- </el-table-column>
- <el-table-column align="center" label="数量" prop="num" min-width="120"></el-table-column>
- <el-table-column align="center" label="金额" prop="payAmount" min-width="120"></el-table-column>
- </el-table>
- </div>
- <div slot="footer" class="dialog-footer" style="margin-top: 20px;">
- <el-button size="mini" @click="data.removeTab()">关 闭</el-button>
- </div>
- </div>
- </template>
- </zj-tab-page>
- </template>
- <script>
- import { mapGetters } from 'vuex'
- import { getToken } from '@/utils/auth'
- import { lbsAmapRegion } from '@/api/common.js'
- import TemplatePage from '@/components/template/template-page-1.vue'
- import import_mixin from '@/components/template/import_mixin.js'
- import { required, mobileRequired, mobile } from '@/components/template/rules_verify.js'
- import {getList,
- listExport,
- addData,
- editData,
- getDetail,
- outData,
- getOrderTypeList,
- getCategoryList,
- getAttrList,
- } from "@/api/old_machine";
- import operation_mixin from '@/components/template/operation_mixin.js'
- import geographicalPosi from '@/components/geographicalPosi/index.vue'
- export default {
- components: { TemplatePage, geographicalPosi },
- mixins: [import_mixin,operation_mixin],
- data() {
- const validatePhone = (rule, value, callback) => {
- if(!value) {
- callback('请输入手机号')
- } else if(!(/^1[3456789]\d{9}$/.test(value))) {
- callback('请输入正确的手机号')
- } else {
- callback()
- }
- }
- return {
- baseURL: process.env.VUE_APP_BASE_API,
- myHeaders: { 'x-token': getToken() },
- // 表格属性
- tableAttributes: {
- // 启用勾选列
- selectColumn: true
- },
- // 表格事件
- tableEvents: {
- 'selection-change': this.selectionChange
- },
- // 勾选选中行
- recordSelected: [],
- /** 表单变量 */
- formDialogType: 0,
- formDialogTitles: ["新增", "编辑"],
- formDialog: false,
- formData: {
- id: '',
- companyName: '', // 所属商户
- saleType: 2, // 销售类型
- orderId: '', // 订单编号
- orderSmallType: '', // 工单类型
- pgOrderId: '', // 工单编号
- overTime: '', // 完工时间
- userName: '', // 客户名称
- userPhone: '', // 客户电话
- lng: '',
- lat: '',
- province: '',
- provinceId: '',
- city: '',
- cityId: '',
- area: '',
- areaId: '',
- street: '',
- streetId: '',
- userAddress: '',
- remark: '', // 备注
- fileUrl: '', // 附件
- },
- formRules: {
- userName: [{ required: true, message: '请输入客户名称', trigger: 'blur' }],
- userPhone: [{ required: true, validator: validatePhone, trigger: 'blur' }],
- },
- formType: 'add',
- formVisible: false,
- examineStatus: '',
- orderTypeList: [],
- provinceList: [],
- cityList: [],
- areaList: [],
- streetList: [],
- goodsList: [],
- goodsSpecList: [],
- goodsSelectList: [],
- detailData: {},
- examineFormData: {
- status: '',
- remark: '',
- },
- examineFormRules: {
- status: [{ required: true, message: '请选择审批结果', trigger: 'change' }],
- remark: [{ required: true, message: '请输入审批备注', trigger: 'blur' }],
- },
- showCodeDialog: false,
- timer: '',
- pageType: '',
- formTabs: 'a',
- detailTabs: 'a',
- oldList: [], // 旧机列表
- mainList: [],
- smallList: [],
- specList: [],
- attrList: [],
- }
- },
- computed: {
- ...mapGetters(['name']),
- // 事件组合
- optionsEvensGroup() {
- return [
- [
- [
- this.optionsEvensAuth("add", {
- click: () => {
- this.openForm('add')
- }
- })
- ],
- ],
- [
- [
- this.optionsEvensAuth('out', {
- name: '批量出库',
- click: () => {
- this.batchOut()
- }
- })
- ]
- ]
- ]
- },
- // 更多参数
- moreParameters() {
- return []
- },
- },
- create() {
-
- },
- methods: {
- // 列表请求函数
- // getList: getList,
- getList(p) {
- try {
- var pam = JSON.parse(JSON.stringify(p))
- if (this.examineStatus) {
- pam.params.push({ "param": "a.status", "compare": "=", "value": this.examineStatus })
- }
- return getList(pam)
- } catch (error) {
- console.log(error)
- }
- },
- // 列表导出函数
- exportList: listExport,
- // 表格列解析渲染数据更改
- columnParsing(item, defaultData) {
- return defaultData
- },
- // 监听勾选变化
- selectionChange(data) {
- this.recordSelected = data
- },
- // 切换状态
- changeType(val) {
- this.$refs.pageRef.refreshList()
- },
- // 表格操作列
- operation() {
- return this.operationBtn({
- edit: {
- conditions: ({ row, index, column }) => {
- return row.status == 'IN'
- },
- btnType: 'text',
- click: ({ row, index, column }) => {
- this.openForm('edit', row.id)
- }
- },
- detail: {
- btnType: 'text',
- click: ({ row, index, column }) => {
- this.openDetail('detail', row.id)
- }
- },
- out: {
- conditions: ({ row, index, column }) => {
- return row.status == 'IN'
- },
- btnType: 'text',
- prompt: '确定出库吗?',
- click: ({ row, index, column }) => {
- outData({ oldManagerId: row.id }).then(() => {
- this.$message({ type: 'success', message: '出库成功!' })
- this.$refs.pageRef.refreshList()
- })
- }
- },
- orderDetail: {
- conditions: ({ row, index, column }) => {
- return row.saleType == 1
- },
- btnType: 'text',
- click: ({ row, index, column }) => {
- this.$router.push({
- name: "order_detail",
- query: {
- orderId: row.orderId
- }
- })
- }
- },
- })
- },
- openForm(type, id) {
- this.$refs.tabPage.addTab({
- // 对应显示的模块
- activeKey: type,
- // 唯一标识
- key: type,
- // 页签名称
- label: ({ add: '新增', edit: '编辑' })[type],
- // 打开时事件
- triggerEvent: () => {
- this.pageType = type;
- this.formCancel()
- this.$nextTick(()=>{
- this.getOrderTypeList();
- this.formType = type;
- this.formVisible = true;
- if (type == 'add') {
- this.formDialogType = 0
- this.formData.companyName = this.name;
- this.getinitlbslist();
- } else if(type == 'edit'){
- this.formDialogType = 1;
- getDetail({ oldManagerId: id }).then(res => {
- const data = res.data;
- this.formData = Object.keys(this.formData).reduce((result, key) => {
- if (data.hasOwnProperty(key)) {
- result[key] = data[key];
- }else {
- result[key] = this.formData[key];
- }
- return result;
- }, {});
- if(data.itemList?.length > 0) {
- this.oldList = data.itemList.map(item => {
- return {
- isEdit: false,
- mainId: item.mainId,
- mainName: item.mainName,
- smallId: item.smallId,
- smallName: item.smallName,
- specId: item.specId,
- specName: item.specName,
- attrId: item.oldProductManagerItemAttributes.map(o => o.goodsCategoryItemId),
- attrName: item.oldProductManagerItemAttributes.map(o => o.dictName),
- num: item.num,
- payAmount: item.payAmount,
- }
- })
- }
- this.getinitlbslist();
- })
- }
- })
- },
- // 关闭时事件
- closeEvent: () => {
- this.formCancel()
- }
- })
- },
- formCancel() {
- this.formVisible = false
- this.$refs?.formRef?.resetFields()
- this.formData.id = '';
- this.formData.province = '';
- this.formData.provinceId = '';
- this.formData.city = '';
- this.formData.cityId = '';
- this.formData.area = '';
- this.formData.areaId = '';
- this.formData.street = '';
- this.formData.streetId = '';
- this.formData.fileUrl = '';
- this.oldList = [];
- this.$data.formRef = this.$options.data().formRef
- },
- formConfirm(cancel) {
- this.$refs.formRef.validate((valid, invalidFields, errLabels) => {
- if (valid) {
- if(this.oldList.some(o => o.isEdit)) return this.$errorMsg('旧机信息存在未保存信息');
- let orderSmallTypeText = this.formData.orderSmallType ? this.orderTypeList.find(o => o.id == this.formData.orderSmallType).orderSmallTypeText : '';
- let oldList = this.oldList.map(item => {
- return {
- id: item.specId,
- itemIds: item.attrId,
- num: item.num,
- payAmount: item.payAmount
- }
- })
- if(this.formDialogType == 0) {
- addData({
- ...this.formData,
- overTime: this.formData.overTime.length == 10 ? this.formData.overTime + ' 00:00:00' : this.formData.overTime,
- orderSmallTypeText,
- orderOldProductAdds: oldList
- }).then(res => {
- this.$message({ type: 'success', message: `${this.formDialogTitles[this.formDialogType]}成功!` })
- cancel('list')
- this.$refs.pageRef.refreshList()
- })
- }else {
- editData({
- ...this.formData,
- overTime: this.formData.overTime.length == 10 ? this.formData.overTime + ' 00:00:00' : this.formData.overTime,
- orderSmallTypeText,
- orderOldProductAdds: oldList
- }).then(res => {
- this.$message({ type: 'success', message: `${this.formDialogTitles[this.formDialogType]}成功!` })
- cancel('list')
- this.$refs.pageRef.refreshList()
- })
- }
-
- }
- })
- },
- openDetail(type, id) {
- this.$refs.tabPage.addTab({
- // 对应显示的模块
- activeKey: type,
- // 唯一标识
- key: type,
- // 页签名称
- label: ({ detail: '详情' })[type],
- // 打开时事件
- triggerEvent: () => {
- this.pageType = type;
- this.formCancel()
- this.$nextTick(()=>{
- this.detailTabs = 'a';
- if (type == 'detail') {
- this.formDialogType = 0
- }
- getDetail({ oldManagerId: id }).then(res => {
- this.detailData = res.data;
- })
- })
- },
- // 关闭时事件
- closeEvent: () => {
- this.detailCancel()
- }
- })
- },
- detailCancel() {
- this.formVisible = false
- this.$refs?.examineForm?.resetFields()
- this.$data.examineForm = this.$options.data().examineForm
- },
- detailConfirm(cancel) {
- this.$refs.examineForm.validate((valid, invalidFields, errLabels) => {
- if (valid) {
- outData({
- orderId: this.detailData.orderId,
- examineStatus: this.examineFormData.status,
- examineRemark: this.examineFormData.remark,
- }).then(res => {
- if(this.examineFormData.status == 'OK' && res.data.codeUrl) {
- this.creatCode(res.data.codeUrl, this.detailData.orderId);
- }else {
- this.$message({ type: 'success', message: `审批成功!` })
- cancel('list')
- this.$refs.pageRef.refreshList()
- }
- })
- }
- })
- },
- // 附件 - 上传成功
- uploadSuccess(res, file) {
- this.formData.fileUrl = res.data.url;
- },
- // 附件 - 上传前
- beforeUpload(file) {
- const fileSuffix = file.name.substring(file.name.lastIndexOf(".") + 1);
- const whiteList = ['jpg', 'jpeg', 'png'];
- if (whiteList.indexOf(fileSuffix) === -1) {
- this.$errorMsg('只支持上传jpg/png文件!');
- return false;
- }
- },
- getinitlbslist() {
- // 初始化请求省市区街道下拉选项数据
- lbsAmapRegion({ pid: 0 }).then(res => {
- this.provinceList = res.data
- if (this.formData.province) {
- var provinceItem = this.provinceList.find(o => o.name === this.formData.province)
- if (provinceItem) {
- this.formData.provinceId = provinceItem.id
- }
- lbsAmapRegion({ pid: this.formData.provinceId }).then(res => {
- this.cityList = res.data
- if (this.formData.city) {
- var cityItem = this.cityList.find(o => o.name === this.formData.city)
- if (cityItem) {
- this.formData.cityId = cityItem.id
- }
- lbsAmapRegion({ pid: this.formData.cityId }).then(res => {
- this.areaList = res.data
- if (this.formData.area) {
- var areaItem = this.areaList.find(o => o.name === this.formData.area)
- if (areaItem) {
- this.formData.areaId = areaItem.id
- }
- lbsAmapRegion({ pid: this.formData.areaId }).then(res => {
- this.streetList = res.data
- if (this.formData.street) {
- var streetItem = this.streetList.find(o => o.name === this.formData.street)
- if (streetItem) {
- this.formData.streetId = streetItem.id
- }
- }
- })
- }
- })
- }
- })
- }
- })
- },
- delDataK(num) {
- if (num <= 1) {
- // 删除市
- this.formData.cityId = ''
- this.formData.city = ''
- // 删除市选项
- this.cityList = []
- }
- if (num <= 2) {
- // 删除区
- this.formData.areaId = ''
- this.formData.area = ''
- // 删除区选项
- this.areaList = []
- }
- if (num <= 3) {
- // 删除街道
- this.formData.streetId = ''
- this.formData.street = ''
- // 删除街道选项
- this.streetList = []
- }
- // 删除gps地址
- this.formData.gpsAddress = ''
- },
- // 更改省
- changeProvince(val) {
- // 获取省名称
- this.formData.province = this.provinceList.find(item => item.id === val)?.name || ''
- // 清除市区街道以及详细地址数据
- this.delDataK(1)
- lbsAmapRegion({ pid: val }).then(res => {
- this.cityList = res.data
- })
- },
- // 更改市
- changeCity(val) {
- // 获取市名称
- this.formData.city = this.cityList.find(item => item.id === val).name
- // 清除区街道以及详细地址数据
- this.delDataK(2)
- lbsAmapRegion({ pid: val }).then(res => {
- this.areaList = res.data
- })
- },
- // 更改区
- changeArea(val) {
- // 获取区名称
- this.formData.area = this.areaList.find(item => item.id === val).name
- // 清除街道以及详细地址数据
- this.delDataK(3)
- lbsAmapRegion({ pid: val }).then(res => {
- this.streetList = res.data
- })
- },
- // 更改街道
- changeStreet(val) {
- // 获取街道名称
- this.formData.street = this.streetList.find(item => item.id === val).name
- // 清除详细地址数据
- this.delDataK(4)
- },
- selectAddress(data){
- console.log(data);
- this.formData.lng = data.center[0]
- this.formData.lat = data.center[1]
- // 获取定位的省市区街道
- var { province, city, district, township } = data.data.addressComponent
- // 获取选中省名称id
- var { id, name } = this.provinceList.find(item => item.name === province)
- this.formData.provinceId = id
- this.formData.province = name
- // 请求市选项
- lbsAmapRegion({ pid: this.formData.provinceId }).then(res => {
- // 赋值市选项
- this.cityList = res.data
- // 获取选中市名称id
- var { id, name } = res.data.find(item => item.name === city)
- this.formData.cityId = id
- this.formData.city = name
- // 请求区选项
- lbsAmapRegion({ pid: this.formData.cityId }).then(res => {
- // 赋值区选项
- this.areaList = res.data
- // 获取选中区名称id
- var { id, name } = res.data.find(item => item.name === district)
- this.formData.areaId = id
- this.formData.area = name
- // 请求街道选项
- lbsAmapRegion({ pid: this.formData.areaId }).then(res => {
- // 赋值街道选项
- this.streetList = res.data
- // 获取选中街道名称id
- var { id, name } = res.data.find(item => item.name === township)
- this.formData.streetId = id
- this.formData.street = name
- // 赋值GPS详细地址
- this.formData.userAddress = data.name
- })
- })
- })
- },
- batchOut() {
- if (this.recordSelected && this.recordSelected.length > 0) {
- let ids = []
- this.recordSelected.forEach(value => {
- ids.push(value.id)
- })
- outData({oldManagerId: ids.join(',')}).then(() => {
- this.$message({ type: 'success', message: '出库成功!' })
- this.$refs.pageRef.refreshList()
- })
- } else {
- this.$errorMsg('请选择')
- }
- },
- // 获取工单类型列表
- getOrderTypeList() {
- getOrderTypeList({
- pageNum: 1,
- pageSize: -1,
- params: [{param: "a.status", compare: "=", value: true}]
- }).then(res => {
- this.orderTypeList = res.data.records;
- })
- },
-
- // 获取类目列表
- getCategoryList() {
- return new Promise((resolve, reject) => {
- getCategoryList().then(res => {
- this.mainList = res.data;
- resolve(1);
- })
- })
- },
- // 获取规格/属性列表
- getAttrList(smallId) {
- getAttrList({
- pageNum: 1,
- pageSize: -1,
- params: [
- {param: 'small_id', compare: '=', value: smallId},
- {param: 'status', compare: '=', value: 'ON'}
- ]
- }).then(res => {
- this.specList = res.data.records.filter(o => o.typeAttribute == 'SPEC');
- this.attrList = res.data.records.filter(o => o.typeAttribute == 'OTHER');
- })
- },
- panduanduoxuandanxuan(list, data, vals) {
- if (data.typeOption === "SIGIN") {
- return !!list.filter(item => !!~vals.indexOf(item.id) && item.serviceCategoryId === data.serviceCategoryId).length
- } else {
- return false
- }
- },
- // 添加旧机
- addOld() {
- if(this.oldList.some(o => o.isEdit)) return this.$errorMsg('旧机信息存在未保存信息');
- this.getCategoryList();
- let obj = {
- isEdit: true,
- mainId: '',
- mainName: '',
- smallId: '',
- smallName: '',
- specId: '',
- specName: '',
- attrId: [],
- attrName: [],
- num: '',
- payAmount: '',
- }
- let item = JSON.parse(JSON.stringify(obj));
- this.oldList.push(item);
- },
- // 编辑旧机
- async editOld(index, row) {
- if(this.oldList.some(o => o.isEdit)) return this.$errorMsg('旧机信息存在未保存信息');
- this.oldList[index].isEdit = true;
- await this.getCategoryList();
- this.smallList = this.mainList.find(o => o.categoryId == row.mainId).children;
- this.getAttrList(row.smallId);
- },
- // 保存旧机
- saveOld(index) {
- const data = this.oldList[index];
- if(!data.mainId) return this.$errorMsg('请选择大类');
- if(!data.smallId) return this.$errorMsg('请选择小类');
- if(!data.specId) return this.$errorMsg('请选择规格型号');
- if(!data.num) return this.$errorMsg('请输入数量');
- if(!data.payAmount) return this.$errorMsg('请输入金额');
- this.oldList[index].isEdit = false;
- this.mainList = [];
- this.smallList = [];
- this.specList = [];
- this.attrList = [];
- },
- // 删除旧机
- deleteOld(index) {
- this.oldList.splice(index, 1);
- },
- // 切换大类
- changeMain(index, row) {
- this.oldList[index].mainName = this.mainList.find(o => o.categoryId == row.mainId).name;
- this.smallList = this.mainList.find(o => o.categoryId == row.mainId).children;
- this.oldList[index].smallId = '';
- this.oldList[index].specId = '';
- this.oldList[index].attrId = [];
- this.specList = [];
- this.attrList = [];
- },
- // 切换小类
- changeSmall(index, row) {
- this.oldList[index].smallName = this.smallList.find(o => o.categoryId == row.smallId).name;
- this.oldList[index].specId = '';
- this.oldList[index].attrId = [];
- this.specList = [];
- this.attrList = [];
- this.getAttrList(row.smallId);
- },
- // 切换规格
- changeSpec(index, row) {
- this.oldList[index].specName = this.specList.find(o => o.id == row.specId).dictName;
- },
- // 切换属性
- changeAttr(index, row) {
- let names = [];
- // 遍历对象数组
- this.attrList.forEach(obj => {
- // 如果当前对象的ID在ID数组中
- if (row.attrId.includes(obj.id)) {
- // 将当前对象的name属性添加到names数组中
- names.push(obj.dictName);
- }
- });
- this.oldList[index].attrName = names;
- },
- }
- }
- </script>
- <style lang="scss">
- .specTable .el-table__cell {
- padding: 0 !important;
- }
- // 图片墙
- .el-upload-list--picture-card .el-upload-list__item {
- width: 100px;
- height: 100px;
- }
- .el-upload--picture-card {
- width: 100px;
- height: 100px;
- line-height: 100px;
- .avatar-uploader-icon {
- font-size: 28px;
- color: #8c939d;
- width: 100px;
- height: 100px;
- line-height: 100px;
- text-align: center;
- }
- }
- </style>
|