Jelajahi Sumber

订单详情修改价格

lxf 1 tahun lalu
induk
melakukan
a29a7908b4

+ 185 - 179
src/components/byForm/index.vue

@@ -8,186 +8,192 @@
       :labelPosition="formOption.labelPosition || 'top'"
       ref="byForm"
       :disabled="formOption.disabled || false">
-      <el-form-item
-        :label="i.label"
-        v-for="i in formConfig"
-        :key="i.model"
-        :prop="i.prop"
-        v-show="i.isShow || i.isShow == undefined"
-        :style="
-          i.type == 'title' ? 'width:100%' : i.itemWidth ? 'width:' + i.itemWidth + '%' : formOption.itemWidth ? 'width:' + formOption.itemWidth + '%' : '100%'
-        "
-        :class="i.type == 'json' ? (i.isHide ? 'by-form-json dn' : 'by-form-json') : i.isHide ? 'dn' : ''">
-        <el-input
-          v-if="i.type == 'input'"
-          v-model="formData[i.prop]"
-          :placeholder="i.placeholder || $t('common.pleaseEnter')"
-          @input="(e) => commonsEmit(e, i)"
-          @change="(e) => commonsEmitChange(e, i)"
-          :type="i.itemType ? i.itemType : 'text'"
-          :disabled="i.disabled ? i.disabled : false"
-          :max="i.max"
-          :min="i.min"
-          :maxlength="i.maxlength"
-          :readonly="i.readonly ? i.readonly : false"
-          :style="i.style" />
-        <el-input
-          v-if="i.type == 'selectInput'"
-          v-model="formData[i.prop]"
-          :placeholder="i.placeholder || $t('common.pleaseEnter')"
-          @input="(e) => commonsEmit(e, i)"
-          :type="i.itemType ? i.itemType : 'text'"
-          :disabled="i.disabled ? i.disabled : false"
-          :max="i.max"
-          :min="i.min"
-          :maxlength="i.maxlength"
-          :readonly="i.readonly ? i.readonly : false">
-          <template #prepend>
-            <el-select
-              v-model="formData[i.selectProp]"
-              :placeholder="i.selectPlaceholder || $t('common.pleaseSelect')"
-              @change="(e) => commonsEmit(e, i)"
-              :disabled="i.disabled ? i.disabled : false"
-              :readonly="i.readonly ? i.readonly : false"
-              style="width: 80px">
-              <el-option :label="j.title || j.name || j.label" :value="j.id || j.value" v-for="j in i.data" :key="j.id"> </el-option>
-            </el-select>
-          </template>
-        </el-input>
-        <el-select
-          v-model="formData[i.prop]"
-          :multiple="i.multiple || false"
-          v-else-if="i.type == 'select'"
-          :placeholder="i.placeholder || $t('common.pleaseSelect')"
-          @change="(e) => commonsEmit(e, i)"
-          :disabled="i.disabled ? i.disabled : false"
-          :clearable="i.clearable ? i.clearable : false"
-          :filterable="i.filterable ? true : false"
-          :style="i.style"
-          :readonly="i.readonly ? i.readonly : false"
-          style="width: 100%">
-          <el-option :label="j.dictValue || j.title || j.name || j.label" :value="j.dictKey || j.id || j.value" v-for="j in i.data" :key="j.id"> </el-option>
-        </el-select>
-        <el-tree-select
-          v-model="formData[i.prop]"
-          v-else-if="i.type == 'treeSelect'"
-          :data="i.data"
-          :readonly="i.readonly ? i.readonly : false"
-          :props="{
-            value: i.propsTreeValue || 'id',
-            label: i.propsTreeLabel || 'label',
-            children: i.propsTreeChildren || 'children',
-          }"
-          value-key="id"
-          :placeholder="i.placeholder || $t('common.pleaseSelect')"
-          :disabled="i.disabled ? i.disabled : false"
-          check-strictly
-          :style="i.style"
-          style="width: 100%" />
-        <el-date-picker
-          v-model="formData[i.prop]"
-          :readonly="i.readonly ? i.readonly : false"
-          v-else-if="i.type == 'date'"
-          :type="i.itemType"
-          :placeholder="i.placeholder || $t('common.pleaseSelectTime')"
-          @change="(e) => commonsEmit(e, i)"
-          :disabled="i.disabled ? i.disabled : false"
-          :format="i.format ? i.format : dateFormatInit(i.itemType)"
-          :value-format="i.format ? i.format : dateFormatInit(i.itemType)"
-          style="width: 100%" />
-        <el-switch
-          :disabled="i.disabled ? i.disabled : false"
-          v-else-if="i.type == 'switch'"
-          :readonly="i.readonly ? i.readonly : false"
-          v-model="formData[i.prop]" />
-        <el-checkbox-group
-          v-else-if="i.type == 'checkbox'"
-          v-model="formData[i.prop]"
-          :readonly="i.readonly ? i.readonly : false"
-          :disabled="i.disabled ? i.disabled : false">
-          <el-checkbox v-for="j in i.data" :key="j.id || j.value" :label="j.id || j.value" name="type">
-            {{ j.name || j.label }}
-          </el-checkbox>
-        </el-checkbox-group>
-        <el-radio-group
-          v-else-if="i.type == 'radio'"
-          v-model="formData[i.prop]"
-          :readonly="i.readonly ? i.readonly : false"
-          :disabled="i.disabled ? i.disabled : false">
-          <el-radio :border="i.border ? i.border : false" v-for="j in i.data" :key="j.id || j.value" :label="j.id || j.value" name="type">
-            {{ j.name || j.label }}
-          </el-radio>
-        </el-radio-group>
-        <el-input-number
-          v-else-if="i.type == 'number'"
-          v-model="formData[i.prop]"
-          :readonly="i.readonly ? i.readonly : false"
-          :placeholder="i.placeholder || $t('common.pleaseEnter')"
-          @change="(e) => commonsEmit(e, i)"
-          :disabled="i.disabled ? i.disabled : false"
-          :min="i.min ? i.min : 0"
-          :max="i.max ? i.max : 9999999999"
-          :step="i.step ? i.step : 1"
-          :precision="i.precision !== '' ? i.precision : 2"
-          :controls="i.controls === false ? false : true"
-          :style="i.style"
-          onmousewheel="return false;"
-          style="width: 100%">
-        </el-input-number>
-        <el-tree
-          v-else-if="i.type == 'tree'"
-          :data="i.data"
-          :props="i.props"
-          :readonly="i.readonly ? i.readonly : false"
-          :show-checkbox="i.showCheckbox || true">
-        </el-tree>
-        <el-cascader
-          v-else-if="i.type == 'cascader'"
-          :options="i.data"
-          :props="i.props"
-          :readonly="i.readonly ? i.readonly : false"
-          :placeholder="i.placeholder || $t('common.pleaseSelect')"
-          @change="(e) => commonsEmit(e, i)"
-          :disabled="i.disabled ? i.disabled : false"
-          :style="i.style">
-        </el-cascader>
-        <div class="form-title" v-else-if="i.type == 'title'">
-          {{ i.title }}
-        </div>
-        <slot :name="i.slotName" v-else-if="i.type == 'slot'"> {{ i.slotName }}插槽占位符 </slot>
-        <div class="upload" v-else-if="i.type == 'upload'">
-          <el-upload
+      <template v-for="i in formConfig" :key="i.model">
+        <el-form-item
+          :label="i.label"
+          :prop="i.prop"
+          v-if="(i.isShow || i.isShow == undefined) && i.type"
+          :style="
+            i.type == 'title'
+              ? 'width:100%'
+              : i.itemWidth
+              ? 'width:' + i.itemWidth + '%'
+              : formOption.itemWidth
+              ? 'width:' + formOption.itemWidth + '%'
+              : '100%'
+          "
+          :class="i.type == 'json' ? (i.isHide ? 'by-form-json dn' : 'by-form-json') : i.isHide ? 'dn' : ''">
+          <el-input
+            v-if="i.type == 'input'"
             v-model="formData[i.prop]"
-            action="https://winfaster.obs.cn-south-1.myhuaweicloud.com"
-            :data="uploadData"
-            list-type="picture-card"
-            :on-remove="handleRemove"
-            :on-success="handleSuccess"
-            :before-upload="handleBeforeUpload">
-            <el-icon><Plus /></el-icon>
-          </el-upload>
-        </div>
-        <div v-else-if="i.type == 'table'" class="by-form-table" style="width: 100%">
-          <el-table :data="formData[i.prop]" style="width: 100%">
-            <el-table-column :prop="j.prop" :label="j.label" :width="i.width" v-for="(j, jindex) in i.column">
-              <template #default="scope" v-if="j.type">
-                <component
-                  @change="(e) => formTableChange(e, scope, j)"
-                  v-model="scope.row[j.prop]"
-                  :is="formTableObj[j.type]"
-                  :placeholder="j.placeholder || $t('common.pleaseEnter')"
-                  :type="j.type == 'number' ? 'number' : 'text'">
-                  <el-option :label="n.title || n.name || n.label" :value="n.id || n.value" v-for="n in j.data" :key="n.id" v-if="j.type == 'select'">
-                  </el-option>
-                </component>
-              </template>
-            </el-table-column>
-          </el-table>
-        </div>
-        <div v-else-if="i.type == 'json'">
-          <byForm :formConfig="i.json" :formOption="formOption" v-model="formData[i.prop]" ref="byform" :rules="rules"> </byForm>
-        </div>
-      </el-form-item>
+            :placeholder="i.placeholder || $t('common.pleaseEnter')"
+            @input="(e) => commonsEmit(e, i)"
+            @change="(e) => commonsEmitChange(e, i)"
+            :type="i.itemType ? i.itemType : 'text'"
+            :disabled="i.disabled ? i.disabled : false"
+            :max="i.max"
+            :min="i.min"
+            :maxlength="i.maxlength"
+            :readonly="i.readonly ? i.readonly : false"
+            :style="i.style" />
+          <el-input
+            v-if="i.type == 'selectInput'"
+            v-model="formData[i.prop]"
+            :placeholder="i.placeholder || $t('common.pleaseEnter')"
+            @input="(e) => commonsEmit(e, i)"
+            :type="i.itemType ? i.itemType : 'text'"
+            :disabled="i.disabled ? i.disabled : false"
+            :max="i.max"
+            :min="i.min"
+            :maxlength="i.maxlength"
+            :readonly="i.readonly ? i.readonly : false">
+            <template #prepend>
+              <el-select
+                v-model="formData[i.selectProp]"
+                :placeholder="i.selectPlaceholder || $t('common.pleaseSelect')"
+                @change="(e) => commonsEmit(e, i)"
+                :disabled="i.disabled ? i.disabled : false"
+                :readonly="i.readonly ? i.readonly : false"
+                style="width: 80px">
+                <el-option :label="j.title || j.name || j.label" :value="j.id || j.value" v-for="j in i.data" :key="j.id"> </el-option>
+              </el-select>
+            </template>
+          </el-input>
+          <el-select
+            v-model="formData[i.prop]"
+            :multiple="i.multiple || false"
+            v-else-if="i.type == 'select'"
+            :placeholder="i.placeholder || $t('common.pleaseSelect')"
+            @change="(e) => commonsEmit(e, i)"
+            :disabled="i.disabled ? i.disabled : false"
+            :clearable="i.clearable ? i.clearable : false"
+            :filterable="i.filterable ? true : false"
+            :style="i.style"
+            :readonly="i.readonly ? i.readonly : false"
+            style="width: 100%">
+            <el-option :label="j.dictValue || j.title || j.name || j.label" :value="j.dictKey || j.id || j.value" v-for="j in i.data" :key="j.id"> </el-option>
+          </el-select>
+          <el-tree-select
+            v-model="formData[i.prop]"
+            v-else-if="i.type == 'treeSelect'"
+            :data="i.data"
+            :readonly="i.readonly ? i.readonly : false"
+            :props="{
+              value: i.propsTreeValue || 'id',
+              label: i.propsTreeLabel || 'label',
+              children: i.propsTreeChildren || 'children',
+            }"
+            value-key="id"
+            :placeholder="i.placeholder || $t('common.pleaseSelect')"
+            :disabled="i.disabled ? i.disabled : false"
+            check-strictly
+            :style="i.style"
+            style="width: 100%" />
+          <el-date-picker
+            v-model="formData[i.prop]"
+            :readonly="i.readonly ? i.readonly : false"
+            v-else-if="i.type == 'date'"
+            :type="i.itemType"
+            :placeholder="i.placeholder || $t('common.pleaseSelectTime')"
+            @change="(e) => commonsEmit(e, i)"
+            :disabled="i.disabled ? i.disabled : false"
+            :format="i.format ? i.format : dateFormatInit(i.itemType)"
+            :value-format="i.format ? i.format : dateFormatInit(i.itemType)"
+            style="width: 100%" />
+          <el-switch
+            :disabled="i.disabled ? i.disabled : false"
+            v-else-if="i.type == 'switch'"
+            :readonly="i.readonly ? i.readonly : false"
+            v-model="formData[i.prop]" />
+          <el-checkbox-group
+            v-else-if="i.type == 'checkbox'"
+            v-model="formData[i.prop]"
+            :readonly="i.readonly ? i.readonly : false"
+            :disabled="i.disabled ? i.disabled : false">
+            <el-checkbox v-for="j in i.data" :key="j.id || j.value" :label="j.id || j.value" name="type">
+              {{ j.name || j.label }}
+            </el-checkbox>
+          </el-checkbox-group>
+          <el-radio-group
+            v-else-if="i.type == 'radio'"
+            v-model="formData[i.prop]"
+            :readonly="i.readonly ? i.readonly : false"
+            :disabled="i.disabled ? i.disabled : false">
+            <el-radio :border="i.border ? i.border : false" v-for="j in i.data" :key="j.id || j.value" :label="j.id || j.value" name="type">
+              {{ j.name || j.label }}
+            </el-radio>
+          </el-radio-group>
+          <el-input-number
+            v-else-if="i.type == 'number'"
+            v-model="formData[i.prop]"
+            :readonly="i.readonly ? i.readonly : false"
+            :placeholder="i.placeholder || $t('common.pleaseEnter')"
+            @change="(e) => commonsEmit(e, i)"
+            :disabled="i.disabled ? i.disabled : false"
+            :min="i.min ? i.min : 0"
+            :max="i.max ? i.max : 9999999999"
+            :step="i.step ? i.step : 1"
+            :precision="i.precision !== '' ? i.precision : 2"
+            :controls="i.controls === false ? false : true"
+            :style="i.style"
+            onmousewheel="return false;"
+            style="width: 100%">
+          </el-input-number>
+          <el-tree
+            v-else-if="i.type == 'tree'"
+            :data="i.data"
+            :props="i.props"
+            :readonly="i.readonly ? i.readonly : false"
+            :show-checkbox="i.showCheckbox || true">
+          </el-tree>
+          <el-cascader
+            v-else-if="i.type == 'cascader'"
+            :options="i.data"
+            :props="i.props"
+            :readonly="i.readonly ? i.readonly : false"
+            :placeholder="i.placeholder || $t('common.pleaseSelect')"
+            @change="(e) => commonsEmit(e, i)"
+            :disabled="i.disabled ? i.disabled : false"
+            :style="i.style">
+          </el-cascader>
+          <div class="form-title" v-else-if="i.type == 'title'">
+            {{ i.title }}
+          </div>
+          <slot :name="i.slotName" v-else-if="i.type == 'slot'"> {{ i.slotName }}插槽占位符 </slot>
+          <div class="upload" v-else-if="i.type == 'upload'">
+            <el-upload
+              v-model="formData[i.prop]"
+              action="https://winfaster.obs.cn-south-1.myhuaweicloud.com"
+              :data="uploadData"
+              list-type="picture-card"
+              :on-remove="handleRemove"
+              :on-success="handleSuccess"
+              :before-upload="handleBeforeUpload">
+              <el-icon><Plus /></el-icon>
+            </el-upload>
+          </div>
+          <div v-else-if="i.type == 'table'" class="by-form-table" style="width: 100%">
+            <el-table :data="formData[i.prop]" style="width: 100%">
+              <el-table-column :prop="j.prop" :label="j.label" :width="i.width" v-for="(j, jindex) in i.column">
+                <template #default="scope" v-if="j.type">
+                  <component
+                    @change="(e) => formTableChange(e, scope, j)"
+                    v-model="scope.row[j.prop]"
+                    :is="formTableObj[j.type]"
+                    :placeholder="j.placeholder || $t('common.pleaseEnter')"
+                    :type="j.type == 'number' ? 'number' : 'text'">
+                    <el-option :label="n.title || n.name || n.label" :value="n.id || n.value" v-for="n in j.data" :key="n.id" v-if="j.type == 'select'">
+                    </el-option>
+                  </component>
+                </template>
+              </el-table-column>
+            </el-table>
+          </div>
+          <div v-else-if="i.type == 'json'">
+            <byForm :formConfig="i.json" :formOption="formOption" v-model="formData[i.prop]" ref="byform" :rules="rules"> </byForm>
+          </div>
+        </el-form-item>
+      </template>
     </el-form>
   </div>
 </template>

+ 1 - 1
src/components/byTable/index.vue

@@ -395,7 +395,7 @@ export default defineComponent({
   border-color: #b2b4b9;
 }
 .el-table .cell {
-  line-height: 23px;
+  line-height: 35px;
 }
 </style>
 <style lang="scss" scoped>

+ 165 - 33
src/views/group/order/management/add.vue

@@ -62,7 +62,7 @@
         </template>
         <template #orderSkuList>
           <div style="width: 100%; padding: 0 20px">
-            <div style="margin-bottom: 10px">
+            <div style="margin-bottom: 10px" v-if="!(route.query && route.query.detailId)">
               <el-button type="primary" size="small" @click="clickAddProduct()">选择产品</el-button>
             </div>
             <el-collapse v-model="activeNames">
@@ -72,19 +72,19 @@
                     <el-table-column label="产品" width="300">
                       <template #default="{ row }">
                         <div style="width: 100%">
-                          <div style="line-height: 28px">
+                          <div style="line-height: 35px">
                             <span style="color: black; font-weight: 700">商品名称: </span>
                             <span>{{ item.wlnSkuName }}</span>
                           </div>
-                          <div style="line-height: 28px">
+                          <div style="line-height: 35px">
                             <span style="color: black; font-weight: 700">品号: </span>
                             <span>{{ item.code }}</span>
                           </div>
-                          <div style="line-height: 28px; word-break: break-all">
+                          <div style="line-height: 35px; word-break: break-all">
                             <span style="color: black; font-weight: 700">品名: </span>
                             <span>{{ item.name }}</span>
                           </div>
-                          <div style="line-height: 28px; display: flex">
+                          <div style="line-height: 35px; display: flex">
                             <span style="width: 37px; color: black; font-weight: 700">数量: </span>
                             <el-form-item
                               :prop="'orderSkuList.' + index + '.quantity'"
@@ -102,31 +102,71 @@
                                 @change="changeQuantity(index)" />
                             </el-form-item>
                           </div>
-                          <div style="line-height: 28px">
+                          <div style="line-height: 35px">
                             <span style="color: black; font-weight: 700">加工费: </span>
                             <span>{{ item.customProcessingFee }}</span>
+                            <el-tooltip content="修改加工费" placement="top" effect="light">
+                              <el-icon
+                                style="margin-left: 10px; transform: translateY(2px); color: #409eff; cursor: pointer"
+                                @click="clickChangePrice(item, index, 'customProcessingFee', '加工费')"
+                                v-if="route.query && route.query.detailId">
+                                <EditPen />
+                              </el-icon>
+                            </el-tooltip>
                           </div>
-                          <div style="line-height: 28px">
+                          <div style="line-height: 35px">
                             <span style="color: black; font-weight: 700">代发费: </span>
                             <span>{{ item.lssueFee }}</span>
+                            <el-tooltip content="修改代发费" placement="top" effect="light">
+                              <el-icon
+                                style="margin-left: 10px; transform: translateY(2px); color: #409eff; cursor: pointer"
+                                @click="clickChangePrice(item, index, 'lssueFee', '代发费')"
+                                v-if="route.query && route.query.detailId">
+                                <EditPen />
+                              </el-icon>
+                            </el-tooltip>
                           </div>
-                          <div style="line-height: 28px">
+                          <div style="line-height: 35px">
                             <span style="color: black; font-weight: 700">快递包材费: </span>
                             <span>{{ item.deliveryMaterialsFee }}</span>
+                            <el-tooltip content="修改快递包材费" placement="top" effect="light">
+                              <el-icon
+                                style="margin-left: 10px; transform: translateY(2px); color: #409eff; cursor: pointer"
+                                @click="clickChangePrice(item, index, 'deliveryMaterialsFee', '快递包材费')"
+                                v-if="route.query && route.query.detailId">
+                                <EditPen />
+                              </el-icon>
+                            </el-tooltip>
                           </div>
-                          <div style="line-height: 28px">
+                          <div style="line-height: 35px">
                             <span style="color: black; font-weight: 700">包装人工费: </span>
                             <span>{{ item.packingLabor }}</span>
+                            <el-tooltip content="修改包装人工费" placement="top" effect="light">
+                              <el-icon
+                                style="margin-left: 10px; transform: translateY(2px); color: #409eff; cursor: pointer"
+                                @click="clickChangePrice(item, index, 'packingLabor', '包装人工费')"
+                                v-if="route.query && route.query.detailId">
+                                <EditPen />
+                              </el-icon>
+                            </el-tooltip>
                           </div>
-                          <div style="line-height: 28px">
+                          <div style="line-height: 35px">
                             <span style="color: black; font-weight: 700">单价: </span>
                             <span>{{ item.unitPrice }}</span>
+                            <el-tooltip content="修改单价" placement="top" effect="light">
+                              <el-icon
+                                style="margin-left: 10px; transform: translateY(2px); color: #409eff; cursor: pointer"
+                                @click="clickChangePrice(item, index, 'unitPrice', '单价')"
+                                v-if="route.query && route.query.detailId">
+                                <EditPen />
+                              </el-icon>
+                            </el-tooltip>
                           </div>
-                          <div style="line-height: 28px">
+                          <div style="line-height: 35px">
                             <span style="color: black; font-weight: 700">小计: </span>
                             <span>{{ item.subtotal }}</span>
                           </div>
-                          <div style="line-height: 28px">
+                          <div style="line-height: 35px">
                             <span style="width: 37px; color: black; font-weight: 700">打印: </span>
                             <el-form-item
                               :prop="'orderSkuList.' + index + '.printType'"
@@ -163,19 +203,29 @@
                     </el-table-column>
                     <el-table-column label="图稿(生产文件)" width="320">
                       <template #default="{ row }">
-                        <div style="color: black">共享文件夹路径(点击下方链接并上传文件):</div>
+                        <div style="color: black; line-height: 35px">共享文件夹路径(点击下方链接并上传文件):</div>
                       </template>
                     </el-table-column>
                     <el-table-column label="包材配件/单品" min-width="400">
                       <template #default="{ row }">
                         <div style="width: 100%">
-                          <div style="margin-bottom: 10px">
+                          <div style="margin-bottom: 10px" v-if="!(route.query && route.query.detailId)">
                             <el-button type="primary" @click="clickPackingFittings(index)">选择包材配件</el-button>
                           </div>
                           <el-table :data="row.orderSkuBomList" :row-style="{ height: '35px' }" header-row-class-name="tableHeader">
-                            <el-table-column label="单价¥" width="80">
+                            <el-table-column label="单价¥" width="120">
                               <template #default="props">
-                                {{ moneyFormat(props.row.unitPrice, 2) }}
+                                <div>
+                                  <span>{{ moneyFormat(props.row.unitPrice, 2) }}</span>
+                                  <el-tooltip content="修改单价¥" placement="top" effect="light">
+                                    <el-icon
+                                      style="margin-left: 10px; transform: translateY(2px); color: #409eff; cursor: pointer"
+                                      @click="clickChangeBomPrice(index, props.row, props.$index, 'unitPrice', '单价¥')"
+                                      v-if="route.query && route.query.detailId">
+                                      <EditPen />
+                                    </el-icon>
+                                  </el-tooltip>
+                                </div>
                               </template>
                             </el-table-column>
                             <el-table-column label="数量" width="100">
@@ -203,7 +253,7 @@
                                 {{ moneyFormat(props.row.allUnitPrice, 2) }}
                               </template>
                             </el-table-column>
-                            <el-table-column label="操作" align="center" fixed="right" width="60">
+                            <el-table-column label="操作" align="center" fixed="right" width="60" v-if="!(route.query && route.query.detailId)">
                               <template #default="props">
                                 <el-button type="danger" @click="clickDeletePackingFittings(index, props.$index)" text>删除</el-button>
                               </template>
@@ -212,7 +262,7 @@
                         </div>
                       </template>
                     </el-table-column>
-                    <el-table-column label="操作" align="center" fixed="right" width="60">
+                    <el-table-column label="操作" align="center" fixed="right" width="60" v-if="!(route.query && route.query.detailId)">
                       <template #default="{}">
                         <el-button type="primary" @click="clickDelete(index)" text>删除</el-button>
                       </template>
@@ -314,6 +364,25 @@
         <el-button @click="openPackingFittings = false" size="large">关 闭</el-button>
       </template>
     </el-dialog>
+
+    <el-dialog :title="'修改' + textPrice" v-if="openChangePrice" v-model="openChangePrice" width="500">
+      <el-form :model="changePrice.data" label-width="120px" ref="price">
+        <el-form-item :label="textPrice" :prop="labelPrice" :rules="[{ required: true, message: '请输入' + textPrice, trigger: 'blur' }]">
+          <el-input-number
+            onmousewheel="return false;"
+            v-model="changePrice.data[labelPrice]"
+            :placeholder="textPrice"
+            style="width: 100%"
+            :controls="false"
+            :min="0"
+            :precision="2" />
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <el-button @click="openChangePrice = false" size="large">关 闭</el-button>
+        <el-button type="primary" @click="submitChangePrice()" size="large" v-preReClick>确 定</el-button>
+      </template>
+    </el-dialog>
   </div>
 </template>
 
@@ -348,21 +417,27 @@ const formData = reactive({
 });
 const formConfig = computed(() => {
   return [
-    {
-      type: "title",
-      title: "地址",
-      label: "",
-    },
-    {
-      type: "slot",
-      slotName: "deliveryAddress",
-      label: "收货地址",
-    },
-    {
-      type: "slot",
-      slotName: "consignee",
-      label: "收货人",
-    },
+    route.query && route.query.detailId
+      ? {}
+      : {
+          type: "title",
+          title: "地址",
+          label: "",
+        },
+    route.query && route.query.detailId
+      ? {}
+      : {
+          type: "slot",
+          slotName: "deliveryAddress",
+          label: "收货地址",
+        },
+    route.query && route.query.detailId
+      ? {}
+      : {
+          type: "slot",
+          slotName: "consignee",
+          label: "收货人",
+        },
     {
       type: "title",
       title: "产品",
@@ -861,6 +936,63 @@ const calculatedAmount = () => {
   );
   formData.data.totalAmount = totalAmount;
 };
+const changePrice = reactive({
+  data: {},
+});
+const openChangePrice = ref(false);
+const productIndex = ref(0);
+const productIndexBOM = ref(0);
+const labelPrice = ref("");
+const textPrice = ref("");
+const clickChangePrice = (item, index, label, text) => {
+  changePrice.data = {
+    customProcessingFee: item.customProcessingFee,
+    lssueFee: item.lssueFee,
+    deliveryMaterialsFee: item.deliveryMaterialsFee,
+    packingLabor: item.packingLabor,
+    unitPrice: item.unitPrice,
+  };
+  productIndex.value = index;
+  productIndexBOM.value = null;
+  labelPrice.value = label;
+  textPrice.value = text;
+  openChangePrice.value = true;
+};
+const submitChangePrice = () => {
+  proxy.$refs.price.validate((valid) => {
+    if (valid) {
+      if (productIndexBOM.value === null) {
+        formData.data.orderSkuList[productIndex.value][labelPrice.value] = changePrice.data[labelPrice.value];
+        Promise.all([calculatedAmount()]).then(() => {
+          proxy.post("/orderInfo/edit", formData.data).then(() => {
+            ElMessage({ message: "修改完成", type: "success" });
+            openChangePrice.value = false;
+            getOrderDetail({ id: route.query.id || route.query.detailId });
+          });
+        });
+      } else {
+        formData.data.orderSkuList[productIndex.value].orderSkuBomList[productIndexBOM.value][labelPrice.value] = changePrice.data[labelPrice.value];
+        Promise.all([changeBOMQuantity(productIndex.value)]).then(() => {
+          proxy.post("/orderInfo/edit", formData.data).then(() => {
+            ElMessage({ message: "修改完成", type: "success" });
+            openChangePrice.value = false;
+            getOrderDetail({ id: route.query.id || route.query.detailId });
+          });
+        });
+      }
+    }
+  });
+};
+const clickChangeBomPrice = (index, item, indexBOM, label, text) => {
+  changePrice.data = {
+    unitPrice: item.unitPrice,
+  };
+  productIndex.value = index;
+  productIndexBOM.value = indexBOM;
+  labelPrice.value = label;
+  textPrice.value = text;
+  openChangePrice.value = true;
+};
 </script>
 
 <style lang="scss" scoped>

+ 4 - 4
src/views/group/order/management/index.vue

@@ -25,6 +25,9 @@
             <a style="color: #409eff; cursor: pointer; word-break: break-all" @click="clickCode(item)">{{ item.code }}</a>
           </div>
         </template>
+        <template #totalAmount="{ item }">
+          <div style="color: #409eff">{{ moneyFormat(item.totalAmount) }}</div>
+        </template>
         <template #address="{ item }">
           <div>{{ item.province }}, {{ item.city }}, {{ item.county }}, {{ item.detailedAddress }}</div>
         </template>
@@ -160,13 +163,10 @@ const config = computed(() => {
     {
       attrs: {
         label: "订单总金额 ¥",
-        prop: "totalAmount",
+        slot: "totalAmount",
         width: 120,
         align: "right",
       },
-      render(val) {
-        return proxy.moneyFormat(val);
-      },
     },
     {
       attrs: {