| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917 |
- @extends("layouts.app")
- @section('title','批量创建工单')
- @section('head')
- @endsection
- @section("content")
- <div class="container mt-3 d-none" id="batch_container">
- <div class="form-group">
- <label for="logistic_numbers">请输入快递单号</label>
- <textarea class="form-control" name="logistic_numbers" id="logistic_numbers" cols="30" rows="2"
- v-model="logisticNumbers"
- ref="logistic_numbers"></textarea>
- <small id="emailHelp" class="form-text text-muted">如添加多个单号,请将快递单号以“空格”、“,”等分隔符隔开</small>
- </div>
- <div class="form-group">
- <label for="">工单类型</label>
- <div class="btn-group" role="group" aria-label="工单类型">
- <button type="button" v-for="item in issueTypes" class="btn"
- :class="issueType === item.name ? 'btn-info' : 'btn-secondary'"
- @click="issueType = item.name">@{{ item.name }}</button>
- </div>
- </div>
- <div class="form-group" id="remark-div" v-if="showRemarkDiv">
- <label for="">请填写问题描述</label>
- <textarea class="form-control" name="remark" id="remark" cols="30" rows="2" ref="remark"
- v-model="remark"></textarea>
- </div>
- <div class="form-group" id="info-edit" v-if="'信息更改' === issueType">
- <div class="alert alert-info" v-for="(item,index) in infoChange">
- <div class="form-row">
- <div class="col-sm-3">
- <label>订单</label>
- <p v-text="item.code"></p>
- </div>
- <div class="col-sm-9 ">
- <label class="text-dark font-weight-bolder"><span class="text-danger">*</span>请填写新的收方信息</label>
- <textarea class="form-control form-control-sm col-12" name="" id="" cols="30" rows="2"
- v-model="item.remark"></textarea>
- </div>
- </div>
- </div>
- </div>
- <div class="form-group" id="info-edit" v-if="'错漏发' === issueType">
- <p for="" class="">商品信息:<span class="text-primary float-right">注意需要勾选商品列才能正确提交!</span></p>
- <div class="alert alert-info" v-for="(mistake,index) in mistakes">
- <div class="form-row">
- <label class="text-dark font-weight-bolder" v-text="'订单号:'+index"></label>
- <table class="table table-bordered table-hover bg-white">
- <thead>
- <tr>
- <th scope="col">勾选</th>
- <th scope="col">快递单号</th>
- <th scope="col">商品条码</th>
- <th scope="col">商品名称</th>
- <th scope="col">订单数量</th>
- <th scope="col">异常类型</th>
- <th scope="col">客户实收数</th>
- </tr>
- </thead>
- <tbody>
- <tr v-for="(item,index) in mistake">
- <td>
- <div class="form-group form-check">
- <input type="checkbox" class="form-check-input" v-model="item.select">
- </div>
- </td>
- <td v-text="item.logistic_number"></td>
- <td v-text="item.sku"></td>
- <td v-text="item.sku_name"></td>
- <td v-text="item.amount"></td>
- <td v-text="item.abnormal_type"></td>
- <td>
- <input type="number" class="form-control form-control-sm"
- v-model="item.abnormal_amount"
- @input="mistakeAbnormalType(item)">
- </td>
- </tr>
- </tbody>
- </table>
- <table>
- <tbody>
- <tr class="add-mistake">
- <td><input type="text" placeholder="快递单号" class="logistic_number form-control"
- :ref="'logistic_number'+index"></td>
- <td><input type="text" placeholder="商品条码" class="sku form-control"
- :ref="'sku'+index"></td>
- <td><input type="text" placeholder="实收数量" class="abnormal_amount form-control"
- :ref="'abnormal_amount'+index"></td>
- <td>
- <button class="btn btn-sm btn-outline-success" @click="addMistakeItem(mistake,index)">
- 添加
- </button>
- </td>
- </tr>
- </tbody>
- </table>
- </div>
- </div>
- </div>
- <div class="form-group" id="express-abnormal-edit" v-if="'快递异常' === issueType"
- v-for="(item,index) in expressAbnormalData">
- <p class="text-dark">异常信息</p>
- <div class="alert alert-info">
- <p class="text-dark font-weight-bolder" v-text="'订单号:'+item.order_no"></p>
- <div class="form-row">
- <div class="col-sm-3">
- <label class="text-dark">快递单号</label>
- <div class="form-group form-check" v-for="package in item.packages">
- <input type="checkbox" class="form-check-input"
- :id=" item.code+':'+ package.logistic_number" v-model="package.select">
- <label class="text-dark " v-text="package.logistic_number"
- :for="item.code+':'+ package.logistic_number"></label>
- </div>
- </div>
- <div class="col-sm-3 ">
- <label class="text-dark "><span class="text-danger">*</span>请选择异常类型</label>
- <select name="" id="" class="form-control" v-model="item.abnormal_type">
- <option v-for="type in expressAbnormalType" v-text="type" :value="type"></option>
- </select>
- </div>
- <div class="col-sm-6 ">
- <label class="text-dark"><span class="text-danger">*</span>交易截图</label>
- <div class="h-auto border border-secondary bg-white rounded" id="package-image"
- style="min-height: 75px"
- contenteditable="true"
- @paste="pasteImage($event,item.dealImages)">
- <div v-for="(image,i) in item.dealImages"
- class="d-inline-block col-4 position-relative card">
- <div class="card-body">
- <img :src="image.src" class="card-img-top" :alt="image.file.name">
- <div class="float-right position-relative">
- <button type="button" class="btn btn-sm btn-outline-danger"
- @click="spliceImage(i,item.dealImages)">取消
- </button>
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
- <div class="form-group" id="damage-edit" v-if="'破损' === issueType">
- <p class="text-dark">破损信息</p>
- <div class="alert alert-info" v-for="(item,index) in damages">
- <div class="form-row ">
- <label class="">订单:</label>
- <label class="text-dark" v-text="item.order_no"></label>
- </div>
- <div class="form-row mb-2">
- <label class="">破损商品价格:</label>
- <div class="col-sm-4">
- <input type="number" class="form-control form-control-sm" v-model="item.price">
- </div>
- </div>
- <div class="damage-table form-row form-group">
- <table class="table table-bordered bg-white">
- <thead>
- <tr>
- <th>快递单号</th>
- <th>商品条码</th>
- <th>异常类型</th>
- <th>商品名称</th>
- <th>订单数量</th>
- <th>异常数量</th>
- <th>破损单价</th>
- </tr>
- </thead>
- <tbody>
- <tr v-for="(commodity,i) in item.commodities">
- <td v-text="commodity.logistic_number"></td>
- <td v-text="commodity.sku"></td>
- <th v-text="commodity.abnormal_type"></th>
- <td v-text="commodity.sku_name"></td>
- <td v-text="commodity.amount"></td>
- <td>
- <input type="number" class="form-control form-control-sm"
- v-model="commodity.abnormal_amount" @change="computerPrice(item)">
- </td>
- <td>
- <input type="number" class="form-control form-control-sm"
- v-model="commodity.price" @change="computerPrice(item)">
- </td>
- </tr>
- </tbody>
- </table>
- </div>
- <div class="form-row">
- <div class="col-sm-4">
- <label class="text-dark"><span class="text-danger">*</span>外包装图片</label>
- <div class="h-auto border border-secondary bg-white rounded"
- style="min-height: 100px"
- contenteditable="true"
- @paste="pasteImage($event,item.packageImages)">
- <div v-for="(image,i) in item.packageImages"
- class="d-inline-block col-4 position-relative card">
- <div class="card-body">
- <img :src="image.src" class="card-img-top" :alt="image.file.name">
- <div class="float-right position-relative">
- <button type="button" class="btn btn-sm btn-outline-danger"
- @click="spliceImage(i,item.packageImages)">取消
- </button>
- </div>
- </div>
- </div>
- </div>
- </div>
- <div class="col-sm-4">
- <label class="text-dark"><span class="text-danger">*</span>内物破损图</label>
- <div class="h-auto border border-secondary bg-white rounded"
- style="min-height: 100px"
- contenteditable="true"
- @paste="pasteImage($event,item.commodityImages)">
- <div v-for="(image,i) in item.commodityImages"
- class="d-inline-block col-4 position-relative card">
- <div class="card-body">
- <img :src="image.src" class="card-img-top" :alt="image.file.name">
- <div class="float-right position-relative">
- <button type="button" class="btn btn-sm btn-outline-danger"
- @click="spliceImage(i,item.commodityImages)">取消
- </button>
- </div>
- </div>
- </div>
- </div>
- </div>
- <div class="col-sm-4">
- <label class="text-dark"><span class="text-danger">*</span>交易截图</label>
- <div class="h-auto border border-secondary bg-white rounded"
- style="min-height: 100px"
- contenteditable="true"
- @paste="pasteImage($event,item.dealImages)">
- <div v-for="(image,i) in item.dealImages"
- class="d-inline-block col-4 position-relative card">
- <div class="card-body">
- <img :src="image.src" class="card-img-top" :alt="image.file.name">
- <div class="float-right position-relative">
- <button type="button" class="btn btn-sm btn-outline-danger"
- @click="spliceImage(i,item.dealImages)">取消
- </button>
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
- <div class="form-group" id="submit-div">
- <button class="btn btn-primary" @click="submit" >提交</button>
- </div>
- </div>
- @endsection
- @section("lastScript")
- <script>
- new Vue({
- el: "#batch_container",
- data: {
- issueTypes: {!! $types !!},
- issueType: null,
- logisticNumbers: null,
- remark: null,
- expressAbnormalType: ['在途异常', '签收未收到'],
- infoChange: [],
- mistakes: [],
- expressAbnormalData: [],
- damages: [],
- },
- computed: {
- showRemarkDiv() {
- return '信息更改' !== this.issueType;
- }
- },
- watch: {
- issueType: function (val) {
- if (val === "信息更改") {
- this.getInfoChangeData();
- } else if (val === "错漏发") {
- this.getMistakeData();
- } else if (val === "快递异常") {
- this.getExpressAbnormalData();
- } else if (val === "破损") {
- this.getDamages();
- } else if(val==="拦截"){
- this.getIntercept();
- }
- }
- },
- mounted() {
- $("#batch_container").removeClass("d-none")
- },
- methods: {
- submit() {
- if (!this.checkSubmitData()) {
- return;
- }
- this.submitData();
- },
- checkSubmitData() {
- let {issueType} = this;
- if(issueType === "拦截"){
- return true;
- }else if (issueType === "取消拦截" || issueType === "快递丢件") {
- if (!this.checkRemark()) {
- this.errorTempTip("问题描述为必填项")
- return false;
- }
- } else if (issueType === "信息更改") {
- if (!this.checkInfoChange()) {
- return false;
- }
- } else if (issueType === "错漏发") {
- if (!this.checkMistakes()) {
- return false;
- }
- } else if (issueType === "快递异常") {
- if (!this.checkExpressAbnormal()) {
- return false;
- }
- } else if (issueType === "破损") {
- if (!this.checkDamage()) {
- return false;
- }
- }
- return true;
- },
- submitData() {
- let {issueType} = this;
- if (issueType === "拦截") {
- this.intercept()
- } else if (issueType === "取消拦截") {
- this.cancelIntercept();
- } else if (issueType === "快递丢件") {
- this.loss();
- } else if (issueType === "信息更改") {
- this.informationChange();
- } else if (issueType === "错漏发") {
- this.mistake()
- } else if (issueType === "快递异常") {
- this.expressAbnormal()
- } else if (issueType === "破损") {
- this.damage();
- }
- },
- loss() {
- let {remark, logisticNumbers} = this;
- let data = {
- logistic_numbers: logisticNumbers,
- remark: remark
- };
- this.waitingTempTip("处理中");
- let url = '{{ route("workOrder.loss.createBatchApi") }}';
- axios.post(url, data).then(res => {
- this.cancelWaitingTempTip();
- if (res.data.success === true) {
- this.successTempTip("添加成功");
- this.cancelSubData();
- } else {
- this.errorTempTip(res.data.message ? res.data.message : "创建出现异常");
- }
- }).catch(err => {
- this.cancelWaitingTempTip();
- this.errorTempTip(err);
- });
- },
- intercept() {
- let {remark, logisticNumbers} = this;
- let data = {
- logistic_numbers: logisticNumbers,
- remark: remark
- };
- this.waitingTempTip("处理中");
- let url = '{{ route("workOrder.intercept.createBatchApi") }}';
- axios.post(url, data).then(res => {
- this.cancelWaitingTempTip();
- if (res.data.success === true) {
- this.successTempTip("添加成功");
- this.cancelSubData();
- } else {
- this.errorTempTip(res.data.message ? res.data.message : "创建出现异常");
- }
- }).catch(err => {
- this.cancelWaitingTempTip();
- this.errorTempTip(err);
- });
- },
- cancelIntercept() {
- let url = '{{ route("workOrder.cancelIntercept.createBatchApi") }}';
- let {remark, logisticNumbers} = this;
- let data = {
- logistic_numbers: logisticNumbers,
- remark: remark
- };
- this.waitingTempTip("处理中");
- axios.post(url, data).then(res => {
- this.cancelWaitingTempTip();
- if (res.data.success === true) {
- this.successTempTip("添加成功");
- this.cancelSubData();
- } else {
- this.errorTempTip(res.data.message ? res.data.message : "创建出现异常");
- }
- }).catch(err => {
- this.cancelWaitingTempTip();
- this.errorTempTip(err);
- });
- },
- informationChange() {
- let url = '{{route('workOrder.informationChange.createBatchApi')}}';
- let {logisticNumbers, infoChange} = this;
- let data = {
- logistic_numbers: logisticNumbers,
- data: infoChange,
- };
- this.waitingTempTip("处理中");
- axios.post(url, data).then(res => {
- this.cancelWaitingTempTip();
- if (res.data.success === true) {
- this.successTempTip("添加成功");
- this.cancelSubData();
- } else {
- this.errorTempTip(res.data.message ? res.data.message : "创建出现异常");
- }
- }).catch(err => {
- this.cancelWaitingTempTip();
- this.errorTempTip(err);
- });
- },
- mistake() {
- let url = '{{route('workOrder.mistake.createBatchApi')}}';
- let {logisticNumbers, mistakes, remark} = this;
- let mistakesCommodities = [];
- for (let key in mistakes) {
- let commodities = mistakes[`${key}`] ? mistakes[`${key}`] : [];
- commodities = commodities.map(item => JSON.stringify(item));
- mistakesCommodities.push({
- order_no: key,
- commodities: commodities,
- });
- }
- let data = {
- logistic_numbers: logisticNumbers,
- remark: remark,
- data: mistakesCommodities,
- };
- this.waitingTempTip("提交中");
- axios.post(url, data).then(res => {
- this.cancelWaitingTempTip();
- if (res.data.success === true) {
- this.successTempTip("添加成功");
- this.cancelSubData();
- } else {
- this.errorTempTip(res.data.message ? res.data.message : "创建出现异常");
- }
- }).catch(err => {
- this.cancelWaitingTempTip();
- this.errorTempTip(err);
- });
- },
- expressAbnormal() {
- let {expressAbnormalData, remark} = this;
- let message = '';
- this.waitingTempTip("处理中");
- for (let i = 0; i < expressAbnormalData.length; i++) {
- let expressAbnormal = expressAbnormalData[i];
- let data = new FormData();
- let packages = expressAbnormal.packages ? expressAbnormal.packages : [];
- data.append('order_no', expressAbnormal.order_no);
- data.append('remark', remark);
- data.append('type', expressAbnormal.abnormal_type);
- data.append('process_progress', expressAbnormal.abnormal_type);
- packages = packages.filter(item => item.select);
- packages.forEach(e => {
- data.append('commodities[]', JSON.stringify({logistic_number: e.logistic_number}));
- })
- let dealImages = this.getImages(expressAbnormal.dealImages);
- console.log(data);
- // this.setFormDataImagePrefix(data, 'dealImages', dealImages);
- // this.syncExpressAbnormal(data).then(res => {
- // if (i === (expressAbnormalData.length - 1)) {
- // this.cancelWaitingTempTip();
- // this.cancelSubData();
- // }
- // this.successTempTip(`${expressAbnormal.order_no}创建完成`);
- // }).catch(err => {
- // message += err + '\\n';
- // });
- }
- },
- syncExpressAbnormal(data) {
- let url = "{{route('workOrder.expressAbnormal.storeApi')}}";
- return new Promise((resolve, reject) => {
- axios.post(url, data).then(res => {
- if (res.data.success) {
- resolve(true)
- } else {
- reject(res.data.message ? res.data.message : '创建工单异常');
- }
- }).catch(err => {
- reject(err);
- })
- });
- },
- damage() {
- let {damages, remark} = this;
- let message = '';
- this.waitingTempTip("处理中");
- for (let i = 0; i < damages.length; i++) {
- let fromData = new FormData();
- let damage = damages[i];
- let price = damage.price;
- let commodities = damage.commodities ? damage.commodities : [];
- fromData.append('order_no', damage.order_no);
- fromData.append('price', price);
- fromData.append('remark', remark);
- let packageImages = this.getImages(damage.packageImages ? damage.packageImages : []);
- this.setFormDataImagePrefix(fromData, 'packageImages', packageImages);
- let dealImages = this.getImages(damage.dealImages ? damage.dealImages : []);
- this.setFormDataImagePrefix(fromData, 'dealImages', dealImages);
- let commodityImages = this.getImages(damage.commodityImages ? damage.commodityImages : []);
- this.setFormDataImagePrefix(fromData, 'commodityImages', commodityImages);
- commodities.filter(item=>{
- return Number(item.abnormal_amount) !== 0;
- }).forEach(e => {
- fromData.append('commodities[]', JSON.stringify(e));
- });
- this.syncDamage(fromData).then(res => {
- if (i === (damages.length - 1)) {
- this.cancelWaitingTempTip();
- this.cancelSubData();
- }
- this.successTempTip(`${damage.order_no}创建完成`);
- }).catch(err => {
- message += err + '\\n';
- });
- }
- },
- syncDamage(data) {
- let url = "{{route('workOrder.damage.storeApi')}}";
- return new Promise((resolve, reject) => {
- axios.post(url, data).then(res => {
- if (res.data.success) {
- resolve(true)
- } else {
- reject(res.data.message ? res.data.message : '创建工单异常');
- }
- }).catch(err => {
- reject(err);
- })
- });
- },
- getIntercept(){
- let url = '{{route('workOrder.intercept.checkLogisticNumberApi')}}';
- let data = {
- 'logistic_numbers': this.logisticNumbers,
- };
- axios.post(url, data).then(res => {
- if (res.data.success) {
- if (res.data.data) {
- this.infoChange = res.data.data.map(item => {
- item.remark = '';
- return item;
- });
- }
- } else {
- this.errorTempTip(res.data.message ? res.data.message : "获取订单号异常");
- }
- }).catch(err => {
- this.errorTempTip(err);
- });
- },
- getInfoChangeData() {
- let url = '{{route('workOrder.informationChange.checkLogisticNumberApi')}}';
- let data = {
- 'logistic_numbers': this.logisticNumbers,
- };
- axios.post(url, data).then(res => {
- if (res.data.success) {
- this.infoChange = res.data.data.map(item => {
- item.remark = '';
- return item;
- });
- } else {
- this.errorTempTip(res.data.message ? res.data.message : "获取订单号异常");
- }
- }).catch(err => {
- this.errorTempTip(err);
- });
- },
- getMistakeData() {
- let url = '{{route('workOrder.mistake.checkLogisticNumberApi')}}';
- let data = {
- 'logistic_numbers': this.logisticNumbers
- };
- axios.post(url, data).then(res => {
- if (res.data.success) {
- res.data.data.forEach((item) => {
- item.abnormal_amount = item.amount;
- item.abnormal_type = '未错漏发';
- item.select = false;
- });
- let mistakes = {};
- for (let i = 0; i < res.data.data.length; i++) {
- let data = res.data.data[i];
- let order_code = data['order_code'];
- if (mistakes[order_code] == null) {
- mistakes[order_code] = []
- }
- mistakes[order_code].push(data);
- }
- this.mistakes = mistakes;
- } else {
- this.errorTempTip(res.data.message ? res.data.message : "获取订单号异常");
- }
- }).catch(err => {
- this.errorTempTip(err);
- });
- },
- getExpressAbnormalData() {
- let url = '{{route('workOrder.expressAbnormal.checkLogisticNumberApi')}}';
- let data = {
- 'logistic_numbers': this.logisticNumbers
- };
- axios.post(url, data).then(res => {
- if (res.data.success) {
- this.expressAbnormalData = res.data.data.map(item => {
- item.abnormal_type = null;
- item.dealImages = [];
- item.packages.forEach(item => item.select = false);
- if(item.packages.length === 1){
- item.packages.map(i => i.select = true);
- }
- return item;
- });
- } else {
- this.errorTempTip(res.data.message ? res.data.message : "获取订单号异常");
- }
- }).catch(err => {
- this.errorTempTip(err);
- });
- },
- getDamages() {
- let url = '{{route('workOrder.damage.checkLogisticNumberApi')}}';
- let data = {
- 'logistic_numbers': this.logisticNumbers
- };
- axios.post(url, data).then(res => {
- if (res.data.data) {
- res.data.data.forEach(item => {
- item.commodities.forEach(i => {
- i.abnormal_type = "破损";
- i.abnormal_amount = i.amount;
- i.price = 0;
- });
- item.commodityImages = [];
- item.dealImages = [];
- item.packageImages = [];
- item.price = 0;
- })
- this.damages = res.data.data;
- } else {
- this.errorTempTip(res.data.message ? res.data.message : "获取订单号异常");
- }
- }).catch(err => {
- this.errorTempTip(err);
- });
- },
- computerPrice(item) {
- let {commodities} = item;
- item.price = commodities.map(item => {
- let {price, abnormal_amount} = item;
- return price * abnormal_amount;
- }).reduce((perv, next) => {
- return perv + next
- });
- },
- waitingTempTip(message) {
- window.tempTip.setIndex(2005);
- window.tempTip.setDuration(9999);
- window.tempTip.waitingTip(message);
- },
- cancelWaitingTempTip() {
- window.tempTip.cancelWaitingTip();
- },
- successTempTip(message) {
- window.tempTip.setDuration(1500);
- window.tempTip.setIndex(2005);
- window.tempTip.showSuccess(message);
- },
- errorTempTip(message) {
- window.tempTip.setDuration(2000);
- window.tempTip.setIndex(2005);
- window.tempTip.show(message);
- },
- mistakeAbnormalType(item) {
- let {abnormal_amount, amount} = item;
- if (abnormal_amount === amount) {
- item.abnormal_type = "未错漏发";
- } else if (abnormal_amount > amount) {
- item.abnormal_type = "多发";
- } else if (abnormal_amount < amount) {
- item.abnormal_type = "少发"
- }
- },
- addMistakeItem(mistake, i) {
- let logisticNumber = $(this.$refs["logistic_number" + i][0]).val();
- let sku = $(this.$refs["sku" + i][0]).val();
- let abnormalAmount = $(this.$refs["abnormal_amount" + i][0]).val();
- let ownerId = mistake[0]['owner_id'] ?? '';
- if (ownerId === '' || ownerId == null) {
- this.errorTempTip("添加商品时,校验失败货主异常");
- return;
- }
- this.asyncAddMistakeItem(mistake, i, ownerId, sku, abnormalAmount, logisticNumber);
- },
- cancelMistakeItem(i) {
- $(this.$refs["logistic_number" + i][0]).val("");
- $(this.$refs["sku" + i][0]).val("");
- $(this.$refs["abnormal_amount" + i][0]).val("");
- },
- asyncAddMistakeItem(mistake, i, ownerId, sku, abnormalAmount, logisticNumber) {
- let url = "{{route('commodity.getCommodityApi')}}";
- let data = {
- owner_id: ownerId,
- sku: sku
- }
- this.waitingTempTip("查询中");
- axios.post(url, data).then(res => {
- this.cancelWaitingTempTip();
- if (res.data.success) {
- let item = JSON.parse(JSON.stringify(mistake[0]));
- item.abnormal_amount = abnormalAmount;
- item.abnormal_type = "多发";
- item.logistic_number = logisticNumber;
- item.amount = 0;
- item.sku_name = res.data.data.name;
- item.commodity_id = res.data.data.id;
- mistake.push(item);
- this.cancelMistakeItem(i);
- } else {
- this.errorTempTip(res.data.message ? res.data.message : '查询商品失败')
- }
- }).catch(err => {
- this.cancelWaitingTempTip();
- this.errorTempTip(err);
- })
- },
- checkRemark() {
- let {remark} = this;
- if (remark == null || remark === "") return false;
- return remark.trim().length !== 0;
- },
- cancelSubData() {
- this.logisticNumbers = null;
- this.issueType = null;
- this.remark = null;
- this.infoChange = [];
- this.mistakes = [];
- this.expressAbnormalData = [];
- this.damages = [];
- },
- checkInfoChange() {
- let {infoChange} = this;
- if(infoChange.length === 0){
- this.errorTempTip("请检查信息");
- return false;
- }
- for (let i = 0; i < infoChange.length; i++) {
- let info = infoChange[i];
- let {remark} = info;
- if(remark == null || remark === "" || remark.trim().length === 0){
- this.errorTempTip("收方信息未必填项");
- return false;
- }
- }
- return true;
- },
- checkMistakes() {
- let {mistakes,remark} = this;
- if (mistakes.length === 0) {
- this.errorTempTip("请校验提交的商品信息是否为勾选")
- return false;
- }
- if(remark == null || remark === "" || remark.trim().length === 0){
- this.errorTempTip("问题描述为必填项");
- return false;
- }
- for (let orderCode in mistakes) {
- let mistake = mistakes[`${orderCode}`];
- if (!mistake) {
- this.errorTempTip('订单:${orderCode}未有订单商品信息');
- return false;
- }
- let count = mistake.filter(item => item.select === true).length;
- if (count === 0) {
- this.errorTempTip(`订单:${orderCode}未勾选商品列`);
- return false;
- }
- }
- return true;
- },
- checkExpressAbnormal() {
- let {expressAbnormalData,remark} = this;
- if (expressAbnormalData.length === 0) {
- this.errorTempTip("提交参数异常!");
- return false;
- }
- if(remark == null || remark === "" || remark.trim().length === 0){
- this.errorTempTip("问题描述为必填项");
- return false;
- }
- for (let i = 0; i < expressAbnormalData.length; i++) {
- let data = expressAbnormalData[i];
- let selectCount = data.packages.filter(item => item.select).length;
- if (selectCount === 0) {
- this.errorTempTip(`未选中快递单号 订单:${data.code}!`);
- return false;
- }
- }
- @if(\Illuminate\Support\Facades\Gate::check('订单管理-工单处理-宝时编辑') )
- @elseif(\Illuminate\Support\Facades\Gate::check('订单管理-工单处理-商家编辑'))
- for (let i = 0; i < expressAbnormalData.length; i++) {
- let data = expressAbnormalData[i];
- let selectCount = data.dealImages.filter(item => item.select).length;
- if (selectCount === 0) {
- this.errorTempTip(`未上传破损图片 订单:${data.code}!`);
- return false;
- }
- }
- @endif
- return true;
- },
- checkDamage() {
- let {damages,remark} = this;
- if(remark == null || remark === "" || remark.trim().length === 0){
- this.errorTempTip("问题描述为必填项");
- return false;
- }
- for (let i = 0; i < damages.length; i++) {
- let damage = damages[i];
- let {commodities,order_no} = damage;
- if(commodities.length === 0){
- this.errorTempTip(`订单${order_no}无商品详情`);
- return false;
- }
- let count = commodities.filter(item=>{
- return Number(item.abnormal_amount) === 0;
- }).length;
- if(count === commodities.length){
- this.errorTempTip(`${order_no}未填写破损数量`);
- return false;
- }
- }
- return true;
- },
- pasteImage(event, imageArray) {
- for (let i = 0; i < event.clipboardData.items.length; i++) {
- let item = event.clipboardData.items[i];
- if (item.kind === 'string') continue;
- if (item.type.indexOf('image') === -1) continue;
- if (item.kind === 'file') {
- let blob = item.getAsFile();
- let src = null;
- this.blobToBase64(blob).then(res => {
- src = res;
- imageArray.push({src: src, file: blob});
- });
- }
- }
- event.preventDefault();
- },
- spliceImage(i, images) {
- if (!confirm('是否取消选择该图片')) return;
- images.splice(i, 1);
- },
- blobToBase64(blob) {
- return new Promise((resolve, reject) => {
- const fileReader = new FileReader();
- fileReader.onload = (e) => {
- resolve(e.target.result);
- };
- fileReader.readAsDataURL(blob);
- fileReader.onerror = () => {
- reject(new Error('blobToBase64 error'));
- };
- });
- },
- getImages(images) {
- return images.map((item) => {
- return item.file;
- })
- },
- setFormDataImagePrefix(formData, prefix, images) {
- images.forEach((item) => {
- formData.append(`${prefix}[]`, item);
- });
- },
- }
- })
- </script>
- @endsection
|