yangfeng
2023-12-12 1519870c0e18171ced014a840e86a459dc6b00f1
src/views/dashboard/components/ProcessInfo.vue
@@ -3,50 +3,95 @@
    <div class="item-l-bng">
      <img src="~@/assets/images/process-model.png" />
    </div>
    <div class="item-r">
      <div class="item-r-t font_weight">{{ process.number }}</div>
      <div class="item-r-b">{{ process.name }}</div>
      <div class="item-r-b">{{ process.name }}</div>
    <div class="item-r" @click="onDetailClick">
      <div class="item-r-t font_weight">{{ craftModel.number }}</div>
      <div class="item-r-b">产品: {{ craftModel.product }}</div>
      <div class="item-r-b">工艺: {{ craftModel.procedure }}</div>
    </div>
    <div class="tip-r">
    <div v-if="craftModel.isUpdate" class="tip-r">
      <img src="~@/assets/images/process-tip.png" />
    </div>
    <div class="tip-current">当前使用</div>
    <div v-if="craftModel.number == task?.Procedure?.processModelNumber" class="tip-current">当前使用</div>
    <div class="btn">
      <el-button type="primary" class="color_organge"> 更新工艺</el-button>
      <el-button
        type="primary"
        :loading="loading"
        :disabled="craftModel.isUpdate ? false : true"
        @click="onUpdateClick"
      >
        <!-- <el-icon v-if="loading" color="#fff" :size="16" class="refresh-top-icon">
          <Loading />
        </el-icon> -->
        更新工艺
      </el-button>
    </div>
  </div>
</template>
<script setup lang="ts">
import { computed, toRefs } from 'vue'
export interface ProcessInfoProps {
  process: process
}
import { toRefs, ref, watch } from 'vue'
import { Loading } from '@element-plus/icons-vue'
import type { CraftModel } from '@/api/craftModel'
import type { Task } from '@/api/task'
const props = defineProps<{
  craftModel: CraftModel
  activeArr: string[]
  task?: Task
}>()
const { craftModel, task, activeArr } = toRefs(props)
const props = defineProps<ProcessInfoProps>()
const { process } = toRefs(props)
const emit = defineEmits<{
  update: [craftModel: CraftModel]
  detail: [craftModel: CraftModel]
}>()
const loading = ref(false)
watch(activeArr.value, () => {
  // 弹窗显示时获取工艺参数
  if (activeArr.value) {
    getLoading()
  }
})
function getLoading() {
  for (let i in activeArr.value) {
    if (activeArr.value[i] == craftModel.value.number) {
      loading.value = true
      return true
    }
  }
  loading.value = false
}
function onDetailClick() {
  emit('detail', craftModel.value)
}
function onUpdateClick() {
  if (loading.value) {
    return true
  }
  emit('update', craftModel.value)
}
</script>
<style scoped lang="scss">
$status-running: #f76c0f;
$status-done: #2c5dbb82;
$status-ready: #00ff00f0;
$status-disabled: #7b95d3;
.font_weight {
  font-weight: 600;
}
.process-info {
  width: calc(50% - 35px);
  height: 110px;
  padding: 23px 10px 10px;
  width: calc(50% - 10px);
  height: 140px;
  padding: 23px 5px 10px 10px;
  background: $status-done;
  border-radius: 8px;
  float: left;
  //float: left;
  overflow: hidden;
  font-size: 15px;
  position: relative;
  margin-bottom: 30px;
  &:nth-of-type(odd) {
    margin-right: 30px;
    margin-right: 20px;
  }
  .item-l-bng {
@@ -57,6 +102,11 @@
    img {
      width: 100%;
    }
  }
  .refresh-top-icon {
    display: flex;
    align-items: center;
    color: #fff;
  }
  .item-r {
@@ -88,7 +138,7 @@
  }
  .tip-current {
    background: green;
    background: $status-ready;
    color: #fff;
    position: absolute;
    top: 0px;
@@ -100,14 +150,20 @@
  }
  .btn {
    width: 100px;
    width: 95px;
    position: absolute;
    right: 0px;
    right: 15px;
    bottom: 10px;
    .el-button--primary {
      background: $status-running;
      border: 0 !important;
    }
    .el-button.is-disabled,
    .el-button.is-disabled:focus,
    .el-button.is-disabled:hover {
      color: #fff !important;
      background: $status-disabled;
    }
  }
}
</style>